summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com>2020-08-23 17:33:44 -0700
committerGitHub <noreply@github.com>2020-08-23 17:33:44 -0700
commitaa0faef704cf7e616ebcf7e1972545a335f31239 (patch)
tree47474c2548c6e7ae5e36701b3d87b77e3bcb56d8
parent8ab5503804436ee7e3ef202f596cd0fe5626a2a9 (diff)
parentcc4e8f9e451bc10bbc3362d77f888d38d0723334 (diff)
Merge pull request #70 from HookedBehemoth:townMinish
decompile town minish
-rw-r--r--asm/townMinish.s740
-rw-r--r--include/functions.h7
-rw-r--r--include/npc.h1
-rw-r--r--include/structures.h20
-rw-r--r--linker.ld1
-rw-r--r--src/code_08077DF4.c4
-rw-r--r--src/npc/cow.c10
-rw-r--r--src/npc/epona.c4
-rw-r--r--src/npc/festari.c1
-rw-r--r--src/npc/forestMinish.c208
-rw-r--r--src/npc/goron.c11
-rw-r--r--src/npc/mayorHagen.c87
-rw-r--r--src/npc/melari.c1
-rw-r--r--src/npc/mutoh.c81
-rw-r--r--src/npc/postman.c13
-rw-r--r--src/npc/rem.c1
-rw-r--r--src/npc/smith.c283
-rw-r--r--src/npc/stamp.c9
-rw-r--r--src/npc/teachers.c97
-rw-r--r--src/npc/townMinish.c351
-rw-r--r--src/npc/townsperson.c47
-rw-r--r--src/npc/windTribespeople.c113
22 files changed, 762 insertions, 1328 deletions
diff --git a/asm/townMinish.s b/asm/townMinish.s
deleted file mode 100644
index 18494800..00000000
--- a/asm/townMinish.s
+++ /dev/null
@@ -1,740 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_0806AC3C
-sub_0806AC3C: @ 0x0806AC3C
- push {r4, r5, lr}
- adds r5, r0, #0
- adds r0, #0x58
- ldrb r0, [r0]
- cmp r0, #3
- bhi _0806ACBA
- ldr r4, _0806AC6C @ =gPlayerEntity
- adds r0, r5, #0
- adds r1, r4, #0
- movs r2, #0x18
- movs r3, #0x18
- bl sub_080041A0
- cmp r0, #0
- beq _0806AC70
- adds r0, r5, #0
- adds r1, r4, #0
- bl GetFacingDirection
- adds r2, r0, #0
- movs r0, #0x1e
- ands r2, r0
- b _0806AC74
- .align 2, 0
-_0806AC6C: .4byte gPlayerEntity
-_0806AC70:
- ldrb r0, [r5, #0x14]
- lsls r2, r0, #2
-_0806AC74:
- adds r0, r5, #0
- adds r0, #0x69
- ldrb r3, [r0]
- adds r4, r0, #0
- cmp r2, r3
- beq _0806AC9A
- subs r0, r2, r3
- movs r1, #0x1f
- ands r0, r1
- cmp r0, #0xf
- bgt _0806AC8E
- subs r0, r3, #1
- b _0806AC90
-_0806AC8E:
- adds r0, r3, #1
-_0806AC90:
- strb r0, [r4]
- ldrb r1, [r4]
- movs r0, #0x1f
- ands r0, r1
- strb r0, [r4]
-_0806AC9A:
- ldrb r1, [r4]
- movs r0, #7
- ands r0, r1
- cmp r0, #0
- bne _0806ACBA
- ldrb r0, [r4]
- bl sub_0806F5B0
- strb r0, [r5, #0x14]
- ldrb r1, [r5, #0x14]
- lsrs r1, r1, #1
- movs r0, #2
- eors r1, r0
- adds r0, r5, #0
- bl InitializeAnimation
-_0806ACBA:
- adds r0, r5, #0
- bl UpdateAnimationSingleFrame
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_0806ACC4
-sub_0806ACC4: @ 0x0806ACC4
- push {r4, r5, lr}
- adds r4, r0, #0
- ldrb r5, [r4, #0xc]
- cmp r5, #1
- beq _0806AD28
- cmp r5, #1
- bgt _0806ACD8
- cmp r5, #0
- beq _0806ACE4
- b _0806ADEA
-_0806ACD8:
- cmp r5, #2
- beq _0806ADB8
- cmp r5, #3
- bne _0806ACE2
- b _0806ADDC
-_0806ACE2:
- b _0806ADEA
-_0806ACE4:
- ldrb r1, [r4, #0xa]
- lsls r1, r1, #4
- ldr r0, _0806AD24 @ =gUnk_08112674
- adds r1, r1, r0
- adds r0, r4, #0
- bl LoadExtraSpriteData
- cmp r0, #0
- bne _0806ACF8
- b _0806ADFA
-_0806ACF8:
- movs r0, #1
- strb r0, [r4, #0xc]
- ldrb r0, [r4, #0xe]
- adds r1, r4, #0
- adds r1, #0x6a
- strb r0, [r1]
- lsls r0, r0, #1
- strb r0, [r4, #0x14]
- strb r5, [r4, #0xe]
- adds r0, r4, #0
- bl sub_0801E99C
- adds r1, r4, #0
- adds r1, #0x68
- strb r0, [r1]
- adds r0, r4, #0
- bl sub_0807DD50
- ldrb r1, [r4, #0x14]
- lsrs r1, r1, #1
- adds r1, #8
- b _0806ADCE
- .align 2, 0
-_0806AD24: .4byte gUnk_08112674
-_0806AD28:
- adds r5, r4, #0
- adds r5, #0x39
- movs r0, #0
- ldrsb r0, [r5, r0]
- cmp r0, #2
- bne _0806AD44
- movs r1, #0
- movs r0, #3
- strb r0, [r4, #0xc]
- strb r1, [r5]
- adds r0, r4, #0
- bl sub_0806F118
- b _0806ADEA
-_0806AD44:
- adds r0, r4, #0
- movs r1, #0
- bl sub_0807DDAC
- adds r0, r4, #0
- bl sub_0806AEA8
- ldrb r0, [r4, #0xb]
- cmp r0, #0xa
- bne _0806AD8A
- movs r0, #0
- ldrsb r0, [r5, r0]
- cmp r0, #0
- beq _0806AD8A
- movs r1, #0
- movs r0, #2
- strb r0, [r4, #0xc]
- strb r1, [r5]
- ldr r1, _0806ADAC @ =gPlayerEntity
- adds r0, r4, #0
- bl GetFacingDirection
- bl sub_0806F5A4
- adds r1, r0, #0
- adds r1, #8
- adds r0, r4, #0
- bl InitializeAnimation
- adds r0, r4, #0
- adds r0, #0x84
- ldr r1, [r0]
- adds r0, r4, #0
- bl sub_0806AFE8
-_0806AD8A:
- ldrb r0, [r4, #0xa]
- cmp r0, #1
- bne _0806ADEA
- ldr r0, _0806ADAC @ =gPlayerEntity
- ldrb r3, [r0, #0x14]
- lsrs r3, r3, #1
- ldr r0, _0806ADB0 @ =gUnk_081126E4
- adds r0, r3, r0
- ldrb r2, [r0]
- lsls r3, r3, #2
- ldr r0, _0806ADB4 @ =gUnk_081126D4
- adds r3, r3, r0
- adds r0, r4, #0
- movs r1, #1
- bl sub_08078850
- b _0806ADEA
- .align 2, 0
-_0806ADAC: .4byte gPlayerEntity
-_0806ADB0: .4byte gUnk_081126E4
-_0806ADB4: .4byte gUnk_081126D4
-_0806ADB8:
- ldr r0, _0806ADD8 @ =gTextBox
- ldrb r1, [r0]
- movs r0, #0x7f
- ands r0, r1
- cmp r0, #0
- bne _0806ADEA
- movs r0, #1
- strb r0, [r4, #0xc]
- ldrb r1, [r4, #0x14]
- lsrs r1, r1, #1
- adds r1, #4
-_0806ADCE:
- adds r0, r4, #0
- bl InitializeAnimation
- b _0806ADEA
- .align 2, 0
-_0806ADD8: .4byte gTextBox
-_0806ADDC:
- adds r0, r4, #0
- bl UpdateFuseInteraction
- cmp r0, #0
- beq _0806ADEA
- movs r0, #1
- strb r0, [r4, #0xc]
-_0806ADEA:
- adds r0, r4, #0
- adds r0, #0x59
- ldrb r0, [r0]
- cmp r0, #0xff
- beq _0806ADFA
- adds r0, r4, #0
- bl GetNextFrame
-_0806ADFA:
- pop {r4, r5, pc}
-
- thumb_func_start sub_0806ADFC
-sub_0806ADFC: @ 0x0806ADFC
- push {lr}
- adds r1, r0, #0
- adds r1, #0x68
- ldrb r1, [r1]
- bl sub_08078784
- pop {pc}
- .align 2, 0
-
- thumb_func_start TownMinish_Head
-TownMinish_Head: @ 0x0806AE0C
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x10]
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- bne _0806AE62
- adds r0, r4, #0
- adds r0, #0x69
- ldrb r0, [r0]
- lsrs r2, r0, #1
- adds r0, r4, #0
- adds r0, #0x5b
- ldrb r1, [r0]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _0806AE3C
- adds r2, #0x1c
- adds r0, r4, #0
- movs r1, #0
- bl SetExtraSpriteFrame
- b _0806AE46
-_0806AE3C:
- adds r0, r4, #0
- movs r1, #0
- movs r2, #0xff
- bl SetExtraSpriteFrame
-_0806AE46:
- ldrb r2, [r4, #0x1e]
- adds r0, r4, #0
- movs r1, #1
- bl SetExtraSpriteFrame
- adds r0, r4, #0
- movs r1, #1
- movs r2, #0
- bl SetSpriteSubEntryOffsetData1
- adds r0, r4, #0
- bl sub_0807000C
- b _0806AEA4
-_0806AE62:
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r2, [r0]
- cmp r2, #0xff
- beq _0806AE72
- movs r0, #0x81
- rsbs r0, r0, #0
- ands r2, r0
-_0806AE72:
- adds r0, r4, #0
- adds r0, #0x5b
- ldrb r1, [r0]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- bne _0806AE82
- movs r2, #0xff
-_0806AE82:
- adds r0, r4, #0
- movs r1, #0
- bl SetExtraSpriteFrame
- ldrb r2, [r4, #0x1e]
- adds r0, r4, #0
- movs r1, #1
- bl SetExtraSpriteFrame
- adds r0, r4, #0
- movs r1, #1
- movs r2, #0
- bl SetSpriteSubEntryOffsetData1
- adds r0, r4, #0
- bl sub_0807000C
-_0806AEA4:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_0806AEA8
-sub_0806AEA8: @ 0x0806AEA8
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- adds r6, r4, #0
- adds r6, #0x82
- ldrh r5, [r6]
- ldr r0, _0806AED4 @ =0x0000FFDF
- ands r0, r5
- strh r0, [r6]
- movs r0, #0x20
- ands r0, r5
- cmp r0, #0
- beq _0806AECA
- movs r1, #0x80
- lsls r1, r1, #7
- adds r0, r4, #0
- bl sub_08003FC4
-_0806AECA:
- adds r0, r4, #0
- bl sub_0807DDE4
- strh r5, [r6]
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0806AED4: .4byte 0x0000FFDF
-
- thumb_func_start sub_0806AED8
-sub_0806AED8: @ 0x0806AED8
- push {lr}
- movs r1, #0
- strb r1, [r0, #0xe]
- bl sub_0806AEE4
- pop {pc}
-
- thumb_func_start sub_0806AEE4
-sub_0806AEE4: @ 0x0806AEE4
- push {r4, r5, r6, r7, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xe]
- adds r7, r0, #0
- cmp r7, #0
- beq _0806AEF6
- subs r0, #1
- strb r0, [r4, #0xe]
- b _0806AF5A
-_0806AEF6:
- movs r0, #2
- strb r0, [r4, #0xe]
- adds r0, r4, #0
- movs r1, #0x20
- movs r2, #0x20
- bl sub_0806EDD8
- adds r3, r0, #0
- cmp r3, #0
- bge _0806AF16
- adds r0, r4, #0
- adds r0, #0x6a
- ldrb r1, [r0]
- lsls r0, r1, #1
- strb r0, [r4, #0x14]
- lsls r3, r1, #3
-_0806AF16:
- ldrb r0, [r4, #0x14]
- lsrs r0, r0, #1
- lsls r0, r0, #5
- asrs r1, r3, #1
- lsls r1, r1, #1
- ldr r2, _0806AF5C @ =gUnk_081125F4
- adds r1, r1, r2
- adds r0, r0, r1
- ldrb r6, [r0]
- ldrb r5, [r0, #1]
- movs r0, #0x80
- ands r0, r5
- cmp r0, #0
- beq _0806AF3A
- adds r0, r3, #0
- bl sub_0806F5B0
- strb r0, [r4, #0x14]
-_0806AF3A:
- movs r0, #0x7f
- ands r5, r0
- adds r0, r4, #0
- adds r0, #0x5a
- strb r6, [r0]
- strb r5, [r4, #0x1e]
- adds r1, r4, #0
- adds r1, #0x5b
- movs r0, #1
- strb r0, [r1]
- adds r0, r4, #0
- adds r0, #0x58
- strb r7, [r0]
- subs r1, #2
- movs r0, #0xff
- strb r0, [r1]
-_0806AF5A:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0806AF5C: .4byte gUnk_081125F4
-
- thumb_func_start sub_0806AF60
-sub_0806AF60: @ 0x0806AF60
- push {lr}
- ldrb r2, [r0, #0x14]
- lsrs r2, r2, #1
- ldr r1, [r1, #4]
- adds r1, r1, r2
- bl InitializeAnimation
- pop {pc}
-
- thumb_func_start sub_0806AF70
-sub_0806AF70: @ 0x0806AF70
- movs r1, #0x90
- lsls r1, r1, #0xa
- str r1, [r0, #0x20]
- bx lr
-
- thumb_func_start sub_0806AF78
-sub_0806AF78: @ 0x0806AF78
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r5, r1, #0
- movs r1, #0xc0
- lsls r1, r1, #5
- bl sub_08003FC4
- ldr r0, [r4, #0x34]
- cmp r0, #0
- blt _0806AF9E
- ldr r0, [r4, #0x20]
- cmp r0, #0
- bgt _0806AF9E
- movs r0, #0
- str r0, [r4, #0x34]
- adds r0, r4, #0
- adds r1, r5, #0
- bl sub_0806AF70
-_0806AF9E:
- pop {r4, r5, pc}
-
- thumb_func_start sub_0806AFA0
-sub_0806AFA0: @ 0x0806AFA0
- push {r4, lr}
- adds r4, r0, #0
- bl sub_0806ED78
- cmp r0, #0
- beq _0806AFBA
- movs r0, #0x24
- ldrsh r1, [r4, r0]
- rsbs r1, r1, #0
- ldrb r2, [r4, #0x15]
- adds r0, r4, #0
- bl sub_0806F62C
-_0806AFBA:
- pop {r4, pc}
-
- thumb_func_start sub_0806AFBC
-sub_0806AFBC: @ 0x0806AFBC
- push {lr}
- adds r3, r0, #0
- ldr r0, _0806AFE0 @ =gUnk_02002A40
- ldrb r0, [r0, #8]
- subs r0, #2
- cmp r0, #0
- bge _0806AFCC
- movs r0, #0
-_0806AFCC:
- ldrb r1, [r3, #0xb]
- lsls r1, r1, #6
- lsls r0, r0, #3
- ldr r2, _0806AFE4 @ =gUnk_081126F0
- adds r0, r0, r2
- adds r1, r1, r0
- adds r0, r3, #0
- bl ShowNPCDialogue
- pop {pc}
- .align 2, 0
-_0806AFE0: .4byte gUnk_02002A40
-_0806AFE4: .4byte gUnk_081126F0
-
- thumb_func_start sub_0806AFE8
-sub_0806AFE8: @ 0x0806AFE8
- push {lr}
- movs r2, #0
- str r2, [r1, #0x14]
- ldr r3, _0806B000 @ =gUnk_08112BF0
- ldrb r2, [r0, #0xb]
- lsls r2, r2, #2
- adds r2, r2, r3
- ldr r2, [r2]
- bl _call_via_r2
- pop {pc}
- .align 2, 0
-_0806B000: .4byte gUnk_08112BF0
-
- thumb_func_start sub_0806B004
-sub_0806B004: @ 0x0806B004
- push {r4, r5, r6, lr}
- adds r6, r0, #0
- adds r5, r1, #0
- movs r4, #0
- movs r0, #0x29
- bl CheckGlobalFlag
- cmp r0, #0
- beq _0806B050
- movs r0, #0x73
- bl CheckLocalFlag
- cmp r0, #0
- beq _0806B048
- movs r0, #0x46
- bl GetInventoryValue
- cmp r0, #0
- bne _0806B044
- movs r4, #3
- movs r0, #0x78
- bl CheckLocalFlag
- cmp r0, #0
- bne _0806B050
- movs r4, #2
- movs r0, #1
- str r0, [r5, #0x14]
- movs r0, #0x78
- bl SetLocalFlag
- b _0806B050
-_0806B044:
- movs r4, #4
- b _0806B050
-_0806B048:
- movs r4, #1
- movs r0, #0x6a
- bl SetLocalFlag
-_0806B050:
- ldr r0, _0806B060 @ =gUnk_08112C40
- lsls r1, r4, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- adds r1, r6, #0
- bl TextboxNoOverlap
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0806B060: .4byte gUnk_08112C40
-
- thumb_func_start sub_0806B064
-sub_0806B064: @ 0x0806B064
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r4, #0
- movs r0, #0x29
- bl CheckGlobalFlag
- cmp r0, #0
- beq _0806B082
- movs r4, #1
- movs r0, #0x73
- bl CheckLocalFlag
- cmp r0, #0
- beq _0806B082
- movs r4, #2
-_0806B082:
- ldr r0, _0806B094 @ =gUnk_08112C4A
- lsls r1, r4, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- adds r1, r5, #0
- bl TextboxNoOverlap
- pop {r4, r5, pc}
- .align 2, 0
-_0806B094: .4byte gUnk_08112C4A
-
- thumb_func_start sub_0806B098
-sub_0806B098: @ 0x0806B098
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r4, #2
- movs r0, #0x46
- bl GetInventoryValue
- cmp r0, #0
- bne _0806B0C0
- movs r4, #1
- movs r0, #0x29
- bl CheckGlobalFlag
- cmp r0, #0
- beq _0806B0C0
- movs r0, #0x2a
- bl CheckGlobalFlag
- rsbs r1, r0, #0
- orrs r1, r0
- lsrs r4, r1, #0x1f
-_0806B0C0:
- ldr r2, _0806B0DC @ =gUnk_08112C50
- ldrb r1, [r5, #0xb]
- subs r1, #7
- lsls r0, r1, #1
- adds r0, r0, r1
- adds r0, r0, r4
- lsls r0, r0, #1
- adds r0, r0, r2
- ldrh r0, [r0]
- adds r1, r5, #0
- bl TextboxNoOverlap
- pop {r4, r5, pc}
- .align 2, 0
-_0806B0DC: .4byte gUnk_08112C50
-
- thumb_func_start sub_0806B0E0
-sub_0806B0E0: @ 0x0806B0E0
- push {r4, r5, lr}
- adds r4, r0, #0
- movs r5, #0
- movs r0, #0x38
- movs r1, #0xb8
- movs r2, #1
- bl sub_080002C0
- cmp r0, #0x57
- bne _0806B120
- movs r0, #0x48
- movs r1, #0xb8
- movs r2, #1
- bl sub_080002C0
- cmp r0, #0x57
- bne _0806B120
- movs r0, #0x38
- movs r1, #0xc8
- movs r2, #1
- bl sub_080002C0
- cmp r0, #0x57
- bne _0806B120
- movs r0, #0x48
- movs r1, #0xc8
- movs r2, #1
- bl sub_080002C0
- cmp r0, #0x57
- bne _0806B120
- movs r5, #1
-_0806B120:
- ldr r0, _0806B130 @ =gUnk_08112C5C
- lsls r1, r5, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- adds r1, r4, #0
- bl TextboxNoOverlap
- pop {r4, r5, pc}
- .align 2, 0
-_0806B130: .4byte gUnk_08112C5C
-
- thumb_func_start sub_0806B134
-sub_0806B134: @ 0x0806B134
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r0, #0x45
- bl GetInventoryValue
- cmp r0, #0
- beq _0806B158
- movs r4, #2
- movs r0, #0x7b
- bl CheckLocalFlag
- cmp r0, #0
- bne _0806B160
- movs r4, #1
- movs r0, #0x7b
- bl SetLocalFlag
- b _0806B160
-_0806B158:
- movs r4, #0
- movs r0, #0x4a
- bl SetGlobalFlag
-_0806B160:
- ldr r0, _0806B17C @ =gUnk_02002A40
- ldrb r0, [r0, #8]
- cmp r0, #5
- bls _0806B16A
- movs r4, #3
-_0806B16A:
- ldr r0, _0806B180 @ =gUnk_08112C60
- lsls r1, r4, #1
- adds r1, r1, r0
- ldrh r0, [r1]
- adds r1, r5, #0
- bl TextboxNoOverlap
- pop {r4, r5, pc}
- .align 2, 0
-_0806B17C: .4byte gUnk_02002A40
-_0806B180: .4byte gUnk_08112C60
-
- thumb_func_start TownMinish_Fusion
-TownMinish_Fusion: @ 0x0806B184
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xc]
- cmp r0, #0
- bne _0806B1C4
- ldrb r1, [r4, #0xa]
- lsls r1, r1, #4
- ldr r0, _0806B1C0 @ =gUnk_08112674
- adds r1, r1, r0
- adds r0, r4, #0
- bl LoadExtraSpriteData
- cmp r0, #0
- beq _0806B1CA
- ldrb r0, [r4, #0xc]
- adds r0, #1
- strb r0, [r4, #0xc]
- ldrb r1, [r4, #0x18]
- movs r0, #4
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #1
- orrs r0, r1
- strb r0, [r4, #0x18]
- adds r0, r4, #0
- movs r1, #6
- bl InitializeAnimation
- b _0806B1CA
- .align 2, 0
-_0806B1C0: .4byte gUnk_08112674
-_0806B1C4:
- adds r0, r4, #0
- bl GetNextFrame
-_0806B1CA:
- pop {r4, pc}
diff --git a/include/functions.h b/include/functions.h
index 11382f48..585d8518 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -13,7 +13,7 @@
// Identified - to be sorted into header files
extern u32 Random(void);
extern void PlaySFX(u32);
-extern void ShowNPCDialogue(Entity*, u32*);
+extern void ShowNPCDialogue(Entity*, Dialog*);
extern u32 UpdateFuseInteraction();
extern void DeleteEntity(Entity*);
extern u32 __modsi3(u32, u32);
@@ -46,7 +46,7 @@ extern void ExecuteScriptCommandSet(Entity*, void *);
extern void _DmaFill32(u32, void*, u32);
// Unidentified
-extern void sub_0806ED78(Entity*);
+extern u32 sub_0806ED78(Entity*);
extern void sub_0806920C(Entity*);
extern u32 sub_0805ACC0(Entity*);
extern u32 sub_0801E99C(Entity*);
@@ -78,7 +78,6 @@ extern s32 sub_0806ED9C(Entity*, u32, u32);
extern void sub_0807000C(Entity*);
extern void sub_0805E47C(Entity*);
extern void sub_0805E584(Entity*);
-extern void sub_0806ED78(Entity*);
extern void sub_08068BEC(Entity*, u32);
extern void sub_08078778(Entity*);
extern s32 sub_0806ED9C(Entity*, u32, u32);
@@ -103,7 +102,7 @@ extern u32 sub_08049EE4(Entity*);
extern Entity *sub_0804A98C(Entity *, u32, u32);
extern u32 sub_080544DC(u8);
extern void sub_08077E54(Entity*);
-extern void sub_080042BA(Entity*);
+extern void sub_080042BA(Entity*, u32);
extern void _DmaZero(void*, u32);
extern void sub_08077F24(ItemBehavior*, u32);
extern void sub_08079184();
diff --git a/include/npc.h b/include/npc.h
index 4551b756..b6288ff2 100644
--- a/include/npc.h
+++ b/include/npc.h
@@ -171,7 +171,6 @@ extern void NPC58(Entity*);
extern void NPC58_Head(Entity*);
extern u32 UpdateFuseInteraction(Entity*);
-extern void ShowNPCDialogue(Entity*, u32*);
#endif \ No newline at end of file
diff --git a/include/structures.h b/include/structures.h
index 01456a44..b6d348a9 100644
--- a/include/structures.h
+++ b/include/structures.h
@@ -23,7 +23,7 @@ typedef struct {
} struct_0807D1C4;
#define gUnk_02000000 ((struct_02000000*)(0x2000000))
-//extern struct_02000000 gUnk_02000000;
+// extern struct_02000000 gUnk_02000000;
typedef struct {
u8 filler0[0x4];
@@ -57,7 +57,7 @@ typedef struct {
extern SaveFile gUnk_02002A40;
typedef struct {
- u32 frameCount; // regular frame count? does anything reset it?
+ u32 frameCount; // regular frame count? does anything reset it?
u8 field_0x4[0x4];
bool8 transitioningOut;
u8 transitionType; // transition when changing areas
@@ -123,7 +123,7 @@ typedef struct {
u8 field_0x2;
u8 field_0x3;
u32 field_0x4;
- u16 fadeType; // fade in or out, are there others?
+ u16 fadeType; // fade in or out, are there others?
u16 fadeSpeed; // subtracted from duration
u16 fadeDuration;
u16 field_0xe;
@@ -160,4 +160,18 @@ typedef struct {
} struct_02034480;
extern struct_02034480 gUnk_02034480;
+typedef struct {
+ u32 flag : 12;
+ u32 flagType : 4;
+ u32 type : 4;
+ u32 unk : 1;
+ union {
+ struct {
+ u16 a;
+ u16 b;
+ } indices;
+ void (*func)(Entity*);
+ } data;
+} Dialog;
+
#endif
diff --git a/linker.ld b/linker.ld
index 46227a68..a51f596e 100644
--- a/linker.ld
+++ b/linker.ld
@@ -601,7 +601,6 @@ SECTIONS {
src/npc/rem.o(.text);
asm/rem.o(.text);
src/npc/townMinish.o(.text);
- asm/townMinish.o(.text);
src/npc/librari.o(.text);
src/npc/percy.o(.text);
asm/percy.o(.text);
diff --git a/src/code_08077DF4.c b/src/code_08077DF4.c
index 1f6d9246..69dd5820 100644
--- a/src/code_08077DF4.c
+++ b/src/code_08077DF4.c
@@ -29,9 +29,9 @@ void UpdateItemAnim(Entity *ent)
sub_08077E54(ent);
}
-void sub_08077E3C(Entity *ent)
+void sub_08077E3C(Entity *ent, u32 idx)
{
- sub_080042BA(&gPlayerEntity);
+ sub_080042BA(&gPlayerEntity, idx);
sub_08077E54(ent);
}
diff --git a/src/npc/cow.c b/src/npc/cow.c
index 9c62c898..54500e02 100644
--- a/src/npc/cow.c
+++ b/src/npc/cow.c
@@ -1,21 +1,19 @@
#include "global.h"
#include "entity.h"
#include "player.h"
+#include "functions.h"
-extern void sub_0806ED78(Entity*);
extern void sub_0806920C(Entity*);
extern u32 sub_0805ACC0(Entity*);
extern u32 sub_0801E99C(Entity*);
extern void sub_0806924C(Entity*);
-extern void sub_080AEF88(Entity*);
-extern void ShowNPCDialogue(Entity*, u32*);
extern void sub_08078778(Entity*);
extern void sub_080787A8(Entity*, u32);
extern void sub_0806F118(Entity*);
extern void sub_080791D0();
extern void (*gUnk_08111914[])(Entity*);
extern void (*gUnk_08111928[])(Entity*);
-extern u32 gUnk_08111938[];
+extern Dialog gUnk_08111938[];
extern void PlaySFX(u32);
extern u32 Random();
extern u32 UpdateFuseInteraction(Entity*);
@@ -184,9 +182,7 @@ void sub_080691E0(Entity* ent) {
// Show dialogue
void Cow_ShowDialogue(Entity* ent) {
- u32 var0 = ent->entityType.form;
- u32* var1 = gUnk_08111938 + (var0 * 2);
- ShowNPCDialogue(ent, var1);
+ ShowNPCDialogue(ent, &gUnk_08111938[ent->entityType.form]);
}
void sub_0806920C(Entity* ent) {
diff --git a/src/npc/epona.c b/src/npc/epona.c
index 89c18204..69368bc3 100644
--- a/src/npc/epona.c
+++ b/src/npc/epona.c
@@ -8,7 +8,7 @@ void sub_08065A64(Entity* this);
void sub_08065AA4(Entity*);
extern void (*gUnk_0811006C[])(Entity*);
-extern u32 gUnk_08110080[];
+extern Dialog gUnk_08110080[];
void Epona(Entity* this) {
gUnk_0811006C[this->action](this);
@@ -50,7 +50,7 @@ void sub_08065A34(Entity* this) {
}
void sub_08065A50(Entity* this) {
- ShowNPCDialogue(this, &gUnk_08110080[this->entityType.form * 2]);
+ ShowNPCDialogue(this, &gUnk_08110080[this->entityType.form]);
}
void sub_08065A64(Entity* this) {
diff --git a/src/npc/festari.c b/src/npc/festari.c
index 3a86130c..dccde267 100644
--- a/src/npc/festari.c
+++ b/src/npc/festari.c
@@ -10,7 +10,6 @@ extern void sub_0807DD50(Entity*);
extern void sub_0806F118(Entity*);
extern void ExecuteScriptCommandSet(Entity*, void *);
extern void sub_0805FF2C(Entity*, void*);
-extern void sub_0806ED78(Entity*);
extern void (*const gUnk_08109BBC[])(Entity*);
diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c
index 7c2d214d..5dc80dce 100644
--- a/src/npc/forestMinish.c
+++ b/src/npc/forestMinish.c
@@ -5,9 +5,8 @@
#include "textbox.h"
#include "player.h"
#include "structures.h"
+#include "functions.h"
-extern void sub_0805E3A0(Entity*, u32);
-extern void StartCutscene(Entity*, void*);
extern void sub_0807DD50(Entity*);
extern void sub_0806F118(Entity*);
extern void sub_0807DDAC(Entity*, u32);
@@ -16,7 +15,6 @@ extern void sub_080600F0(Entity*);
extern u32 sub_0801E99C(Entity*);
extern void sub_08078784(Entity*, u32);
extern void sub_0807000C(Entity*);
-extern void sub_080042BA(Entity*, u32);
extern void sub_08060158(Entity*);
extern u32 CheckKinstoneFused(u32);
extern Entity* FindEntityInListBySubtype(u32, u32, u32);
@@ -26,10 +24,10 @@ extern u32 Random(void);
extern void ModBombs(s32);
extern SpriteLoadData gUnk_0810A348;
-extern void* gUnk_08109D18[];
+extern u8* gUnk_08109D18[];
extern u8 gUnk_08109C98[];
extern u16 gUnk_0810A354[];
-extern u32 gUnk_08109DC8[];
+extern Dialog gUnk_08109DC8[];
extern u16 gUnk_0810A35A[];
extern u16 gUnk_0810A362[];
@@ -165,141 +163,125 @@ void sub_080601D4(Entity* this) {
TextboxNoOverlap(gUnk_0810A354[uVar2], this);
}
-void sub_08060208(Entity *this)
-{
- ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x8]);
+void sub_08060208(Entity* this) {
+ ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x4]);
}
-void sub_0806021C(Entity *this)
-{
- u32 uVar1;
- u32 uVar2;
+void sub_0806021C(Entity* this) {
+ u32 uVar1;
+ u32 uVar2;
- //jabber nut
- uVar1 = GetInventoryValue(0x5B);
- uVar2 = (-uVar1 | uVar1) >> 0x1f;
+ // jabber nut
+ uVar1 = GetInventoryValue(0x5B);
+ uVar2 = (-uVar1 | uVar1) >> 0x1f;
- //earth element
- if (GetInventoryValue(0x40)) {
- uVar2 = 2;
- }
+ // earth element
+ if (GetInventoryValue(0x40)) {
+ uVar2 = 2;
+ }
- //mole mitts
- if (GetInventoryValue(0x13)) {
- uVar2 = 3;
- }
- ShowNPCDialogue(this, gUnk_08109DC8 + this->entityType.parameter * 0x8 + uVar2 * 2);
+ // mole mitts
+ if (GetInventoryValue(0x13)) {
+ uVar2 = 3;
+ }
+ ShowNPCDialogue(this, gUnk_08109DC8 + this->entityType.parameter * 0x4 + uVar2);
}
-void sub_0806025C(Entity *this)
-{
- ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x8]);
+void sub_0806025C(Entity* this) {
+ ShowNPCDialogue(this, &gUnk_08109DC8[this->entityType.parameter * 0x4]);
}
-void sub_08060270(Entity *this)
-{
- u32 index;
+void sub_08060270(Entity* this) {
+ u32 index;
- //flippers
- if (GetInventoryValue(0x46) == 0) {
- index = 1;
- if (CheckGlobalFlag(MIZUKAKI_START) == 0) {
- index = 0;
- SetGlobalFlag(MIZUKAKI_START);
- }
- }
- else {
- index = 3;
- if (CheckLocalFlag(0x76) == 0) {
- index = 2;
- SetLocalFlag(0x76);
+ // flippers
+ if (GetInventoryValue(0x46) == 0) {
+ index = 1;
+ if (CheckGlobalFlag(MIZUKAKI_START) == 0) {
+ index = 0;
+ SetGlobalFlag(MIZUKAKI_START);
+ }
+ } else {
+ index = 3;
+ if (CheckLocalFlag(0x76) == 0) {
+ index = 2;
+ SetLocalFlag(0x76);
+ }
}
- }
- TextboxNoOverlap(gUnk_0810A35A[index], this);
+ TextboxNoOverlap(gUnk_0810A35A[index], this);
}
-void sub_080602BC(Entity *this)
-{
- u32 index;
-
- //spin attack
+void sub_080602BC(Entity* this) {
+ u32 index;
+
+ // spin attack
if (GetInventoryValue(0x48) != 0) {
- index = (Random() & 1) + 2;
- }
- else {
- if (gUnk_02002A40.stats.bombCount < gBombBagSizes[gUnk_02002A40.stats.bombBagType]) {
- index = 1;
- }
- else {
- index = 0;
+ index = (Random() & 1) + 2;
+ } else {
+ if (gUnk_02002A40.stats.bombCount < gBombBagSizes[gUnk_02002A40.stats.bombBagType]) {
+ index = 1;
+ } else {
+ index = 0;
+ }
}
- }
- TextboxNoOverlap(gUnk_0810A362[index], this);
+ TextboxNoOverlap(gUnk_0810A362[index], this);
}
-void sub_0806030C(Entity* this, u32 *arg1)
-{
+void sub_0806030C(Entity* this, u32* arg1) {
ModBombs(*(arg1 + 1));
}
-void sub_08060318(void)
-{
- Entity *ent;
- int i;
-
- for (i = 2; i >= 0; i--) {
- ent = FindEntityInListBySubtype(8, 2, 2);
- if (ent != NULL) {
- sub_080A29BC(ent);
- DeleteEntity(ent);
+void sub_08060318(void) {
+ Entity* ent;
+ int i;
+
+ for (i = 2; i >= 0; i--) {
+ ent = FindEntityInListBySubtype(8, 2, 2);
+ if (ent != NULL) {
+ sub_080A29BC(ent);
+ DeleteEntity(ent);
+ }
}
- }
}
-void sub_08060340(void)
-{
- gUnk_02002A40.unk490 = gUnk_02002A40.unk50;
+void sub_08060340(void) {
+ gUnk_02002A40.unk490 = gUnk_02002A40.unk50;
}
-u32 sub_08060354(void)
-{
- u32 iVar1;
- s32 iVar2;
-
- iVar2 = gUnk_02002A40.unk50 - gUnk_02002A40.unk490;
- if (CheckGlobalFlag(DRUG_1) == 0) {
- if (4 < iVar2) {
- return 0x8444;
- }
- }
- else {
- if (CheckGlobalFlag(DRUG_2) == 0) {
- if (iVar2 > 9) {
- return 0x8444;
- }
- }
- else {
- if (CheckGlobalFlag(DRUG_3) == 0) {
- if (iVar2 > 14) {
- return 0x8444;
- }
- }
+u32 sub_08060354(void) {
+ u32 iVar1;
+ s32 iVar2;
+
+ iVar2 = gUnk_02002A40.unk50 - gUnk_02002A40.unk490;
+ if (CheckGlobalFlag(DRUG_1) == 0) {
+ if (4 < iVar2) {
+ return 0x8444;
+ }
+ } else {
+ if (CheckGlobalFlag(DRUG_2) == 0) {
+ if (iVar2 > 9) {
+ return 0x8444;
+ }
+ } else {
+ if (CheckGlobalFlag(DRUG_3) == 0) {
+ if (iVar2 > 14) {
+ return 0x8444;
+ }
+ }
+ }
}
- }
- return 0;
+ return 0;
}
-void ForestMinish_Fusion(Entity *this)
-{
- if (this->action == 0) {
- if (LoadExtraSpriteData(this, &gUnk_0810A348)) {
- this->action++;
- this->spriteSettings.b.draw = TRUE;
- sub_0805E3A0(this, 2);
- InitializeAnimation(this, 6);
+void ForestMinish_Fusion(Entity* this) {
+ if (this->action == 0) {
+ if (LoadExtraSpriteData(this, &gUnk_0810A348)) {
+ this->action++;
+ this->spriteSettings.b.draw = TRUE;
+ sub_0805E3A0(this, 2);
+ InitializeAnimation(this, 6);
+ }
+ } else {
+ GetNextFrame(this);
}
- }
- else {
- GetNextFrame(this);
- }
} \ No newline at end of file
diff --git a/src/npc/goron.c b/src/npc/goron.c
index 0fa725e4..08ddcc5a 100644
--- a/src/npc/goron.c
+++ b/src/npc/goron.c
@@ -3,9 +3,10 @@
#include "functions.h"
#include "textbox.h"
+extern u8 gUnk_02033280[];
extern void (*gUnk_08111A80[])(Entity*);
extern void (*gUnk_08111A8C[])(Entity*);
-extern u8 gUnk_02033280[];
+extern Dialog gUnk_08111A94[];
void Goron(Entity* this) {
if (this->flags & 2) {
@@ -72,7 +73,7 @@ void sub_080693D0(Entity* this) {
}
if (this->frames.all == 2) {
this->frames.all = 0;
- sub_08069428(this, 0x80<<12, createFx65);
+ sub_08069428(this, 0x80 << 12, createFx65);
}
}
}
@@ -110,16 +111,16 @@ void sub_080694B0(Entity* this) {
}
}
-extern u64 gUnk_08111A94[]; //array of unknown 64 bit structure type
void sub_080694D8(Entity* this) {
- ShowNPCDialogue(this, (u32*)&gUnk_08111A94[this->entityType.form]);
+ ShowNPCDialogue(this, &gUnk_08111A94[this->entityType.form]);
}
void sub_080694EC(Entity* this) {
u32 anim;
this->animationState = 4;
anim = 2;
- if (!CheckKinstoneFused(47)) anim = 8;
+ if (!CheckKinstoneFused(47))
+ anim = 8;
InitAnimationForceUpdate(this, anim);
this->field_0x80.HWORD = anim;
}
diff --git a/src/npc/mayorHagen.c b/src/npc/mayorHagen.c
index 222ec32c..63bc5e7a 100644
--- a/src/npc/mayorHagen.c
+++ b/src/npc/mayorHagen.c
@@ -7,33 +7,30 @@
#include "textbox.h"
#include "npc.h"
#include "structures.h"
+#include "functions.h"
extern void sub_0807DD50(Entity*);
extern u32 sub_0806F5A4(u32);
extern void sub_0806F118(Entity*);
-extern u32 sub_0801E99C();
-extern void sub_08078784(Entity*,u32);
-extern void sub_0807DDAC(Entity*,u32);
-extern void sub_0805E3A0(Entity*,u32);
+extern void sub_08078784(Entity*, u32);
+extern void sub_0807DDAC(Entity*, u32);
extern void sub_0807DDE4(Entity*);
extern void sub_08078850();
extern u32 gUnk_08113F44;
-extern u32 gUnk_08113F48;
+extern Dialog gUnk_08113F48[];
extern u32 GetInventoryValue(u32);
extern u32 CheckLocalFlag(u32);
extern void SetLocalFlag();
-extern void ShowNPCDialogue();
-void MayorHagen(Entity *this)
-{
+void MayorHagen(Entity* this) {
u32 v;
switch (this->action) {
case 0:
- this->action = 1;
- this->field_0x68.HALF.HI = 0;
- this->field_0x68.HALF.LO = sub_0801E99C(this);
- sub_0805E3A0(this, 2);
- sub_0807DD50(this);
+ this->action = 1;
+ this->field_0x68.HALF.HI = 0;
+ this->field_0x68.HALF.LO = sub_0801E99C(this);
+ sub_0805E3A0(this, 2);
+ sub_0807DD50(this);
break;
case 1:
v = this->interactType;
@@ -41,11 +38,11 @@ void MayorHagen(Entity *this)
this->action = v;
this->interactType = 0;
this->field_0x68.HALF.HI = this->animIndex;
- InitAnimationForceUpdate(this,4 + sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)));
+ InitAnimationForceUpdate(this, 4 + sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)));
sub_0806F118(this);
break;
}
- sub_0807DDAC(this,0);
+ sub_0807DDAC(this, 0);
sub_0807DDE4(this);
UpdateAnimationSingleFrame(this);
break;
@@ -57,49 +54,43 @@ void MayorHagen(Entity *this)
}
}
-void sub_0806CE5C(Entity *this)
-{
- sub_08078784(this,sub_0801E99C());
- sub_08078850(this,1,0,&gUnk_08113F44);
+void sub_0806CE5C(Entity* this) {
+ sub_08078784(this, sub_0801E99C(this));
+ sub_08078850(this, 1, 0, &gUnk_08113F44);
}
-void sub_0806CE80(Entity *this)
-{
+void sub_0806CE80(Entity* this) {
u32 v;
u32 v2;
v = gUnk_02002A40.unk8;
- if (v == 5) {
- //flippers
- if (GetInventoryValue(0x46) == 0) {
- if (CheckLocalFlag(0x70) != 0) {
- v2 = CheckLocalFlag(0x71);
- if (v2 == 0) {
- v = 0xb;
- SetLocalFlag(0x71);
- }
- else {
- v = 0xc;
- }
- }
- else {
+ if (v == 5) {
+ // flippers
+ if (GetInventoryValue(0x46) == 0) {
+ if (CheckLocalFlag(0x70) != 0) {
+ v2 = CheckLocalFlag(0x71);
+ if (v2 == 0) {
+ v = 0xb;
+ SetLocalFlag(0x71);
+ } else {
+ v = 0xc;
+ }
+ } else {
v = 0xa;
}
- }
- else {
- v2 = CheckLocalFlag(0x89);
- if (v2 == 0) {
- v = 0xd;
- SetLocalFlag(0x89);
- }
- else {
- v = 0xe;
- }
+ } else {
+ v2 = CheckLocalFlag(0x89);
+ if (v2 == 0) {
+ v = 0xd;
+ SetLocalFlag(0x89);
+ } else {
+ v = 0xe;
+ }
+ }
}
- }
- ShowNPCDialogue(this,&gUnk_08113F48 + 2*v);
+ ShowNPCDialogue(this, &gUnk_08113F48[v]);
}
-void MayorHagen_Fusion(Entity *this) {
+void MayorHagen_Fusion(Entity* this) {
if (this->action == 0) {
this->action++;
this->spriteSettings.b.draw = 1;
diff --git a/src/npc/melari.c b/src/npc/melari.c
index a50d4aad..87afe16c 100644
--- a/src/npc/melari.c
+++ b/src/npc/melari.c
@@ -4,7 +4,6 @@
#include "textbox.h"
#include "functions.h"
-extern void sub_0806ED78(Entity*);
extern void sub_08068780(Entity*);
extern void sub_08078778(Entity*);
extern u32 Random(void);
diff --git a/src/npc/mutoh.c b/src/npc/mutoh.c
index b0e95a36..c0f5fda0 100644
--- a/src/npc/mutoh.c
+++ b/src/npc/mutoh.c
@@ -5,8 +5,8 @@
#include "textbox.h"
#include "npc.h"
#include "structures.h"
+#include "functions.h"
-extern void sub_0805E3A0(Entity*, u32);
extern void sub_0807DD50(Entity*);
extern u32 GetFacingDirection(Entity*, Entity*);
extern u32 sub_0806F5A4(u32);
@@ -19,10 +19,9 @@ extern void sub_08078784(Entity*, u32);
extern SpriteLoadData gUnk_08110C00;
extern u16 gUnk_08110C0C[];
-extern u32 gUnk_08110C10[];
+extern Dialog gUnk_08110C10[];
-void Mutoh(Entity* this)
-{
+void Mutoh(Entity* this) {
if (*(u32*)&this->cutsceneBeh == 0) {
DeleteThisEntity();
}
@@ -30,11 +29,11 @@ void Mutoh(Entity* this)
switch (this->action) {
case 0:
if (LoadExtraSpriteData(this, &gUnk_08110C00)) {
- this->action = 1;
- this->spriteSettings.b.draw = TRUE;
- sub_0805E3A0(this, 2);
- sub_0807DD50(this);
- }
+ this->action = 1;
+ this->spriteSettings.b.draw = TRUE;
+ sub_0805E3A0(this, 2);
+ sub_0807DD50(this);
+ }
break;
case 1:
if (this->interactType == 2) {
@@ -53,48 +52,42 @@ void Mutoh(Entity* this)
}
}
-void Mutoh_Head(Entity *this)
-{
- SetExtraSpriteFrame(this, 0, (this->frames.all & -0x81));
- SetExtraSpriteFrame(this, 1, this->frameIndex);
- SetSpriteSubEntryOffsetData1(this,1,0);
- sub_0807000C(this);
+void Mutoh_Head(Entity* this) {
+ SetExtraSpriteFrame(this, 0, (this->frames.all & -0x81));
+ SetExtraSpriteFrame(this, 1, this->frameIndex);
+ SetSpriteSubEntryOffsetData1(this, 1, 0);
+ sub_0807000C(this);
}
-void sub_080670B4(Entity *this)
-{
- u32 uVar1;
- u32 uVar2;
-
- uVar2 = 0;
- if (GetInventoryValue(0x11) == 0) {
- uVar1 = CheckGlobalFlag(TABIDACHI);
- uVar2 = (-uVar1 | uVar1) >> 0x1f;
- }
- TextboxNoOverlap(gUnk_08110C0C[uVar2],this);
+void sub_080670B4(Entity* this) {
+ u32 uVar1;
+ u32 uVar2;
+
+ uVar2 = 0;
+ if (GetInventoryValue(0x11) == 0) {
+ uVar1 = CheckGlobalFlag(TABIDACHI);
+ uVar2 = (-uVar1 | uVar1) >> 0x1f;
+ }
+ TextboxNoOverlap(gUnk_08110C0C[uVar2], this);
}
-void sub_080670E4(Entity *this)
-{
- ShowNPCDialogue(this, &gUnk_08110C10[gUnk_02002A40.unk8 * 2]);
+void sub_080670E4(Entity* this) {
+ ShowNPCDialogue(this, &gUnk_08110C10[gUnk_02002A40.unk8]);
}
-void sub_08067100(Entity *this)
-{
- this->field_0x68.HALF.LO = sub_0801E99C(this);
- sub_08078784(this, this->field_0x68.HALF.LO);
+void sub_08067100(Entity* this) {
+ this->field_0x68.HALF.LO = sub_0801E99C(this);
+ sub_08078784(this, this->field_0x68.HALF.LO);
}
-void Mutoh_Fusion(Entity *this)
-{
- if (this->action == 0) {
- if (LoadExtraSpriteData(this, &gUnk_08110C00) != 0) {
- this->action++;
- this->spriteSettings.b.draw = TRUE;
- InitializeAnimation(this, 2);
+void Mutoh_Fusion(Entity* this) {
+ if (this->action == 0) {
+ if (LoadExtraSpriteData(this, &gUnk_08110C00) != 0) {
+ this->action++;
+ this->spriteSettings.b.draw = TRUE;
+ InitializeAnimation(this, 2);
+ }
+ } else {
+ GetNextFrame(this);
}
- }
- else {
- GetNextFrame(this);
- }
} \ No newline at end of file
diff --git a/src/npc/postman.c b/src/npc/postman.c
index f3d9bd96..f7b6395d 100644
--- a/src/npc/postman.c
+++ b/src/npc/postman.c
@@ -18,7 +18,6 @@ extern void sub_0806EE04(Entity*, void*, u32);
extern void sub_080604DC(Entity*);
extern s32 sub_0806ED9C(Entity*, u32, u32);
extern void sub_0806EE20(Entity*);
-extern void sub_0806ED78(Entity*);
extern u32 sub_080040A8(Entity*);
extern u32 sub_0801E99C(Entity*);
extern void sub_0807DD50(Entity*);
@@ -43,7 +42,7 @@ extern Coords16 gUnk_0810A66C[];
extern s8* gUnk_0810A918[];
extern void (*const gUnk_0810AA24[])(Entity*);
-extern u32 gUnk_0810AA30[];
+extern Dialog gUnk_0810AA30[];
extern struct_02033280 gUnk_02033280;
void Postman(Entity* this) {
@@ -205,13 +204,13 @@ void sub_080606C0(Entity *this)
void sub_080606D8(Entity* this)
{
- s32 iVar1;
+ s32 index;
- iVar1 = gUnk_02002A40.unk8 - 2;
- if (iVar1 < 0) {
- iVar1 = 0;
+ index = gUnk_02002A40.unk8 - 2;
+ if (index < 0) {
+ index = 0;
}
- ShowNPCDialogue(this, &gUnk_0810AA30[iVar1 * 2]);
+ ShowNPCDialogue(this, &gUnk_0810AA30[index]);
}
void sub_08060700(Entity *entity, u32 arg1)
diff --git a/src/npc/rem.c b/src/npc/rem.c
index b183f687..6d17b95d 100644
--- a/src/npc/rem.c
+++ b/src/npc/rem.c
@@ -4,7 +4,6 @@
extern void sub_0807DDAC(Entity*, u32);
extern void sub_0807DDE4(Entity*);
-extern void sub_0806ED78(Entity*);
extern void PlaySFX(u32);
extern void sub_0806A8C8(Entity*);
extern void sub_0807DD94(Entity*, u32);
diff --git a/src/npc/smith.c b/src/npc/smith.c
index dc222709..171ccad2 100644
--- a/src/npc/smith.c
+++ b/src/npc/smith.c
@@ -1,30 +1,22 @@
#include "global.h"
#include "entity.h"
#include "textbox.h"
-
-typedef struct {
- u8 filler[8];
- u8 unk;
-} SaveFile;
+#include "functions.h"
extern u32 GetFacingDirection(Entity*, Entity*);
extern u32 sub_0806F5A4(u32);
extern void sub_0806F118(Entity*);
-extern void sub_0806ED78(Entity*);
extern Entity* CreateFx(Entity*, u32, u32);
extern void PlaySFX(u32);
extern u32 Random(void);
extern void sub_0807000C(Entity*);
extern u32 sub_0801E99C(Entity*);
-extern u32 sub_0806ED9C(Entity*, u32, u32);
-extern u32 sub_0806F078(Entity*, u32);
extern void sub_0807DD50(Entity*);
extern void sub_0807DD94(Entity*, u32);
extern void sub_0807DDAC(Entity*, u32);
extern void sub_0807DDE4(Entity*);
extern u32 UpdateFuseInteraction(Entity*);
extern u32 GetAnimationState(Entity*);
-extern void ShowNPCDialogue(Entity*, u32*);
extern void sub_08078850(u32, u32, u32, u32*);
extern void sub_08078784(Entity*, u32);
@@ -33,193 +25,170 @@ extern void (*const gUnk_0811036C[])(Entity*);
extern u16 gUnk_08110380[];
extern SpriteLoadData gUnk_08110354;
-extern SaveFile gUnk_02002A40;
-extern u32 gUnk_08110390[];
+extern Dialog gUnk_08110390[];
extern u16 gUnk_081103D0[];
extern u32 gUnk_081103E0;
-#if NON_MATCHING //reg-alloc
-void Smith(Entity *this)
-{
- u32 iVar2;
- u32 iVar4;
-
- if ((this->flags & 2) != 0) {
- if (this->interactType == 2) {
- this->action = 4;
- this->interactType = 0;
- iVar4 = (this->animIndex == 0xc) ? 8 : 0;
- iVar2 = sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity));
- InitAnimationForceUpdate(this, iVar2 + iVar4);
- sub_0806F118(this);
+#if NON_MATCHING // reg-alloc
+void Smith(Entity* this) {
+ u32 iVar2;
+ u32 iVar4;
+
+ if ((this->flags & 2) != 0) {
+ if (this->interactType == 2) {
+ this->action = 4;
+ this->interactType = 0;
+ iVar4 = (this->animIndex == 0xc) ? 8 : 0;
+ iVar2 = sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity));
+ InitAnimationForceUpdate(this, iVar2 + iVar4);
+ sub_0806F118(this);
+ }
+ gUnk_0811036C[this->action](this);
+ } else {
+ gUnk_08110360[this->action](this);
+ sub_0806ED78(this);
+ }
+ if (this->animIndex == 0xc) {
+ this->spritePriority.b1 = 0;
+ } else {
+ this->spritePriority.b1 = 1;
+ }
+ if ((this->frames.all & 1) != 0) {
+ this->frames.all &= 0xfe;
+ CreateFx(this, 0x3d, 0x20);
+ PlaySFX(gUnk_08110380[(Random() & 7)]);
}
- gUnk_0811036C[this->action](this);
- }
- else {
- gUnk_08110360[this->action](this);
- sub_0806ED78(this);
- }
- if (this->animIndex == 0xc) {
- this->spritePriority.b1 = 0;
- }
- else {
- this->spritePriority.b1 = 1;
- }
- if ((this->frames.all & 1) != 0) {
- this->frames.all &= 0xfe;
- CreateFx(this, 0x3d, 0x20);
- PlaySFX(gUnk_08110380[(Random() & 7)]);
- }
}
#else
NAKED
-void Smith(Entity *this) {
+void Smith(Entity* this) {
asm(".include \"asm/non_matching/smith/smith.inc\"");
}
#endif
-void Smith_Head(Entity *this)
-{
- u8 bVar1;
-
- bVar1 = this->frames.all;
- SetExtraSpriteFrame(this, 0, this->frameIndex);
- if ((bVar1 & 0x40) != 0) {
- SetExtraSpriteFrame(this, 1, 0x16);
- }
- else {
- SetExtraSpriteFrame(this, 1, 0xff);
- }
- SetSpriteSubEntryOffsetData1(this,0,1);
- sub_0807000C(this);
-}
-
-void sub_080660EC(Entity *this)
-{
+void Smith_Head(Entity* this) {
+ u8 bVar1;
+
+ bVar1 = this->frames.all;
+ SetExtraSpriteFrame(this, 0, this->frameIndex);
+ if ((bVar1 & 0x40) != 0) {
+ SetExtraSpriteFrame(this, 1, 0x16);
+ } else {
+ SetExtraSpriteFrame(this, 1, 0xff);
+ }
+ SetSpriteSubEntryOffsetData1(this, 0, 1);
+ sub_0807000C(this);
+}
+
+void sub_080660EC(Entity* this) {
if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) {
- this->action = 1;
- this->field_0x68.HALF.LO = sub_0801E99C(this);
- InitAnimationForceUpdate(this, 2);
- }
-}
-
-void sub_08066118(Entity *this)
-{
- s32 uVar1;
- u32 iVar2;
-
- uVar1 = sub_0806ED9C(this, 0x28, 0x28);
- if (uVar1 < 0) {
- uVar1 = 2;
- }
- else {
- if (this->field_0xf == 0) {
- this->field_0xf = 0x10;
+ this->action = 1;
+ this->field_0x68.HALF.LO = sub_0801E99C(this);
+ InitAnimationForceUpdate(this, 2);
+ }
+}
+
+void sub_08066118(Entity* this) {
+ s32 uVar1;
+ u32 iVar2;
+
+ uVar1 = sub_0806ED9C(this, 0x28, 0x28);
+ if (uVar1 < 0) {
+ uVar1 = 2;
+ } else {
+ if (this->field_0xf == 0) {
+ this->field_0xf = 0x10;
+ } else {
+ --this->field_0xf;
+ uVar1 = this->animIndex;
+ }
}
- else {
- --this->field_0xf;
- uVar1 = this->animIndex;
+ if (sub_0806F078(this, uVar1) == 0) {
+ UpdateAnimationSingleFrame(this);
+ }
+ if (this->interactType != 0) {
+ this->action = 2;
+ TextboxNoOverlapFollow(0);
}
- }
- if (sub_0806F078(this, uVar1) == 0) {
- UpdateAnimationSingleFrame(this);
- }
- if (this->interactType != 0) {
- this->action = 2;
- TextboxNoOverlapFollow(0);
- }
}
-void sub_08066170(Entity *this)
-{
+void sub_08066170(Entity* this) {
this->action = 1;
}
-void sub_08066178(Entity *this)
-{
- if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) {
- this->action = 1;
- this->spriteSettings.b.draw = 1;
- this->field_0x68.HALF.LO = sub_0801E99C(this);
- sub_0807DD50(this);
- }
+void sub_08066178(Entity* this) {
+ if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) {
+ this->action = 1;
+ this->spriteSettings.b.draw = 1;
+ this->field_0x68.HALF.LO = sub_0801E99C(this);
+ sub_0807DD50(this);
+ }
}
-void sub_080661B0(Entity *this)
-{
+void sub_080661B0(Entity* this) {
sub_0807DD94(this, 0);
}
-void sub_080661BC(Entity *this)
-{
- u32 sVar1;
-
- if (this->animIndex == 0xc) {
- UpdateAnimationSingleFrame(this);
- if ((this->frames.b.f3) != 0) {
- this->field_0x80.HWORD = GetAnimationState(this) + 8;
- InitAnimationForceUpdate(this, this->field_0x80.HWORD);
+void sub_080661BC(Entity* this) {
+ u32 sVar1;
+
+ if (this->animIndex == 0xc) {
+ UpdateAnimationSingleFrame(this);
+ if ((this->frames.b.f3) != 0) {
+ this->field_0x80.HWORD = GetAnimationState(this) + 8;
+ InitAnimationForceUpdate(this, this->field_0x80.HWORD);
+ }
+ } else {
+ sub_0807DD94(this, 0);
}
- }
- else {
- sub_0807DD94(this,0);
- }
}
-void sub_08066200(Entity *this)
-{
- sub_0807DDAC(this, 0);
- sub_0807DDE4(this);
- UpdateAnimationSingleFrame(this);
+void sub_08066200(Entity* this) {
+ sub_0807DDAC(this, 0);
+ sub_0807DDE4(this);
+ UpdateAnimationSingleFrame(this);
}
-void sub_08066218(Entity *this)
-{
- if (UpdateFuseInteraction(this) != 0) {
- this->action = 1;
- }
+void sub_08066218(Entity* this) {
+ if (UpdateFuseInteraction(this) != 0) {
+ this->action = 1;
+ }
}
-void sub_0806622C(Entity *this)
-{
- u32 iVar1;
-
- if (gUnk_02002A40.unk - 2 < 0) {
- iVar1 = 0;
- }
- else {
- iVar1 = gUnk_02002A40.unk - 2;
- }
- ShowNPCDialogue(this, &gUnk_08110390[iVar1 * 2]);
+void sub_0806622C(Entity* this) {
+ u32 index;
+
+ if (gUnk_02002A40.unk8 - 2 < 0) {
+ index = 0;
+ } else {
+ index = gUnk_02002A40.unk8 - 2;
+ }
+ ShowNPCDialogue(this, &gUnk_08110390[index]);
}
-void nullsub_501(Entity* this) {}
+void nullsub_501(Entity* this) {
+}
-void sub_08066258(void)
-{
- PlaySFX(gUnk_081103D0[Random() & 7]);
+void sub_08066258(void) {
+ PlaySFX(gUnk_081103D0[Random() & 7]);
}
-void sub_08066274(u32 arg0)
-{
- sub_08078850(arg0, 1, 0, &gUnk_081103E0);
+void sub_08066274(u32 arg0) {
+ sub_08078850(arg0, 1, 0, &gUnk_081103E0);
}
-void sub_08066288(Entity *arg0)
-{
- sub_08078784(arg0, arg0->field_0x68.HALF.LO);
+void sub_08066288(Entity* arg0) {
+ sub_08078784(arg0, arg0->field_0x68.HALF.LO);
}
-void Smith_Fusion(Entity *this)
-{
- if (this->action == 0) {
- if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) {
- this->action++;
- this->spriteSettings.b.draw = 1;
- InitAnimationForceUpdate(this, 6);
+void Smith_Fusion(Entity* this) {
+ if (this->action == 0) {
+ if (LoadExtraSpriteData(this, &gUnk_08110354) != 0) {
+ this->action++;
+ this->spriteSettings.b.draw = 1;
+ InitAnimationForceUpdate(this, 6);
+ }
+ } else {
+ UpdateAnimationSingleFrame(this);
}
- }
- else {
- UpdateAnimationSingleFrame(this);
- }
} \ No newline at end of file
diff --git a/src/npc/stamp.c b/src/npc/stamp.c
index db1d7310..f77b1fdd 100644
--- a/src/npc/stamp.c
+++ b/src/npc/stamp.c
@@ -1,24 +1,21 @@
#include "global.h"
#include "entity.h"
#include "textbox.h"
+#include "functions.h"
extern void sub_08078778(Entity*);
extern void sub_0805E47C(Entity*);
-extern void sub_0806ED78(Entity*);
extern void sub_0805E584();
extern void sub_0807DD64();
extern void sub_08062CA4();
extern void sub_0807DDAC();
extern void sub_0807DDE4();
extern u32 CheckKinstoneFused();
-extern void ShowNPCDialogue();
extern void (*gStampBehaviors1[4])(Entity*);
extern void (*gStampBehaviors2[2])(Entity*);
-extern u32 gUnk_0810C2E4;
-
-
+extern Dialog gUnk_0810C2E4[2];
void Stamp(Entity* ent) {
if ((ent->flags & 2) != 0) {
@@ -80,7 +77,7 @@ void sub_08062CBC(Entity* ent) {
u32 uVar1;
uVar1 = CheckKinstoneFused(44);
- ShowNPCDialogue(ent, &gUnk_0810C2E4 + ((-uVar1 | uVar1) >> 31) * 2);
+ ShowNPCDialogue(ent, &gUnk_0810C2E4[(-uVar1 | uVar1) >> 31]);
}
void sub_08062CE0(Entity* ent) {
diff --git a/src/npc/teachers.c b/src/npc/teachers.c
index 53d4a11a..09bab83d 100644
--- a/src/npc/teachers.c
+++ b/src/npc/teachers.c
@@ -1,27 +1,19 @@
#include "global.h"
#include "entity.h"
#include "player.h"
-
-typedef struct {
- u8 filler[8];
- u8 unk;
-} SaveFile;
+#include "functions.h"
extern SpriteLoadData gUnk_08113910[];
-extern void sub_0805E3A0(Entity*, u32);
extern void sub_0807DD50(Entity*);
extern u32 GetFacingDirection(Entity*, Entity*);
extern u32 sub_0806F5A4(u32);
extern void sub_0806F118(Entity*);
extern void sub_0807DD94(Entity*, u32);
-extern u32 sub_0801E99C();
extern void sub_08078784(Entity*, u32);
extern u32 UpdateFuseInteraction(Entity*);
extern void sub_0807000C(Entity*);
-extern void ShowNPCDialogue(Entity*, u16*);
-extern SaveFile gUnk_02002A40;
-extern u16 gUnk_08113930[];
+extern Dialog gUnk_08113930[];
void Teachers(Entity* this) {
switch (this->action) {
@@ -55,59 +47,52 @@ void Teachers(Entity* this) {
}
}
-void sub_0806C674(Entity *this)
-{
- this->field_0x68.HALF.LO = sub_0801E99C();
+void sub_0806C674(Entity* this) {
+ this->field_0x68.HALF.LO = sub_0801E99C(this);
sub_08078784(this, this->field_0x68.HALF.LO);
}
-void Teachers_Head(Entity *this)
-{
- u8 bVar1;
- u8 bVar2;
- u32 uVar3;
-
+void Teachers_Head(Entity* this) {
+ u8 bVar1;
+ u8 bVar2;
+ u32 uVar3;
- uVar3 = this->frames.all & -0x81;
- bVar1 = this->frameIndex;
- bVar2 = this->frameSpriteSettings & 0x3f;
- if ((this->entityType).form == 0) {
- SetExtraSpriteFrame(this,0, (uVar3 + 3));
- SetExtraSpriteFrame(this,1, bVar1);
- SetSpriteSubEntryOffsetData1(this, 1, 0);
- sub_0807000C(this);
- }
- else {
- SetExtraSpriteFrame(this, 0, (uVar3 + 6));
- SetExtraSpriteFrame(this, 1, ((bVar2) + 3));
- SetExtraSpriteFrame(this, 2, bVar1);
- SetSpriteSubEntryOffsetData1(this, 2, 1);
- SetSpriteSubEntryOffsetData2(this, 2, 0);
- sub_0807000C(this);
- }
+ uVar3 = this->frames.all & -0x81;
+ bVar1 = this->frameIndex;
+ bVar2 = this->frameSpriteSettings & 0x3f;
+ if ((this->entityType).form == 0) {
+ SetExtraSpriteFrame(this, 0, (uVar3 + 3));
+ SetExtraSpriteFrame(this, 1, bVar1);
+ SetSpriteSubEntryOffsetData1(this, 1, 0);
+ sub_0807000C(this);
+ } else {
+ SetExtraSpriteFrame(this, 0, (uVar3 + 6));
+ SetExtraSpriteFrame(this, 1, ((bVar2) + 3));
+ SetExtraSpriteFrame(this, 2, bVar1);
+ SetSpriteSubEntryOffsetData1(this, 2, 1);
+ SetSpriteSubEntryOffsetData2(this, 2, 0);
+ sub_0807000C(this);
+ }
}
-void sub_0806C70C(Entity *this)
-{
- int offset;
-
- offset = gUnk_02002A40.unk - 2;
- if (offset < 0) {
- offset = 0;
- }
- ShowNPCDialogue(this, gUnk_08113930 + this->entityType.form * 0x20 + offset * 4);
+void sub_0806C70C(Entity* this) {
+ int offset;
+
+ offset = gUnk_02002A40.unk8 - 2;
+ if (offset < 0)
+ offset = 0;
+
+ ShowNPCDialogue(this, gUnk_08113930 + this->entityType.form * 8 + offset);
}
-void Teachers_Fusion(Entity *this)
-{
- if (this->action == 0) {
- if (LoadExtraSpriteData(this, &gUnk_08113910[this->entityType.form * 4])) {
- this->action++;
- this->spriteSettings.b.draw = TRUE;
- InitializeAnimation(this, 2);
+void Teachers_Fusion(Entity* this) {
+ if (this->action == 0) {
+ if (LoadExtraSpriteData(this, &gUnk_08113910[this->entityType.form * 4])) {
+ this->action++;
+ this->spriteSettings.b.draw = TRUE;
+ InitializeAnimation(this, 2);
+ }
+ } else {
+ GetNextFrame(this);
}
- }
- else {
- GetNextFrame(this);
- }
} \ No newline at end of file
diff --git a/src/npc/townMinish.c b/src/npc/townMinish.c
index 80d207ef..0ef4098e 100644
--- a/src/npc/townMinish.c
+++ b/src/npc/townMinish.c
@@ -1,35 +1,49 @@
#include "global.h"
#include "entity.h"
#include "npc.h"
+#include "functions.h"
+#include "textbox.h"
+#include "flags.h"
-extern void InitializeAnimation(Entity *, u32);
+extern void InitializeAnimation(Entity*, u32);
+extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
-extern void sub_0806ED78(Entity *);
+extern u32 sub_080002C0();
+extern void sub_0806ACC4(Entity*);
+extern void sub_0806AEA8();
+extern void sub_0806AEE4(Entity*);
+extern void sub_0806AFE8(Entity*, s32*);
+extern s32 sub_0806EDD8(Entity*, u32, u32);
+extern u32 sub_0806F5B0(u32);
+extern void sub_0806F62C(Entity*, s32, s32);
+extern void sub_08078784(Entity*, u32);
+extern void sub_08078850(Entity*, u32, u32, u32*);
-extern void (*gUnk_081126E8[])();
-extern void sub_0806ACC4(Entity *);
-
-extern u32 LoadExtraSpriteData(Entity *, SpriteLoadData *);
+extern u8 gUnk_081125F4[12];
extern SpriteLoadData gUnk_08112674[];
+extern u32 gUnk_081126D4[4];
+extern u8 gUnk_081126E4[4];
+extern void (*gUnk_081126E8[])();
+extern Dialog gUnk_081126F0[0x10];
+extern void (*gUnk_08112BF0[])(Entity*, s32*);
+extern u16 gUnk_08112C40[5];
+extern u16 gUnk_08112C4A[3];
+extern u16 gUnk_08112C50[6];
+extern u16 gUnk_08112C5C[2];
+extern u16 gUnk_08112C60[4];
-void TownMinish(Entity *this)
-{
+void TownMinish(Entity* this) {
if ((this->flags & 2) == 0) {
- (*gUnk_081126E8[this->action])(this);
+ gUnk_081126E8[this->action](this);
sub_0806ED78(this);
- }
- else {
+ } else {
sub_0806ACC4(this);
}
}
-void sub_0806ABFC(Entity *this)
-{
- u8 animationState;
-
- SpriteLoadData* SpriteLoadData = &gUnk_08112674[this->entityType.form << 2];
- if (!LoadExtraSpriteData(this, SpriteLoadData))
- {
+void sub_0806ABFC(Entity* this) {
+ SpriteLoadData* SpriteLoadData = &gUnk_08112674[this->entityType.form * 4];
+ if (!LoadExtraSpriteData(this, SpriteLoadData)) {
return;
}
@@ -38,47 +52,298 @@ void sub_0806ABFC(Entity *this)
this->field_0x6a.HALF.LO = this->actionDelay;
this->animationState = this->field_0x6a.HALF.LO << 1;
- animationState = this->animationState;
- this->field_0x68.HALF.HI = animationState << 2;
+ this->field_0x68.HALF.HI = this->animationState * 4;
this->actionDelay = 0;
}
-// Not matching yet, not 100% sure it's functionally identical
-/*void sub_0806AC3C(Entity *this) {
- if (this->field_0x58 <= 3) {
+void sub_0806AC3C(Entity* this) {
+ if (this->animIndex <= 3) {
s32 unk;
- u8 field_0x68;
-
- Entity *link = &gPlayerEntity;
+ Entity* link = &gPlayerEntity;
if (sub_080041A0(this, link, 0x18, 0x18)) {
- unk = GetFacingDirection(this, link) & (u8)0x1e;
+ unk = GetFacingDirection(this, link) & 0x1e;
+ } else {
+ unk = this->animationState * 4;
}
- else {
- unk = this->animationState << 2;
- }
-
- field_0x68.HALF.HI = this->field_0x68.HALF.HI;
- if (unk != field_0x68.HALF.HI) {
+ if (unk != this->field_0x68.HALF.HI) {
s32 temp;
- if (((unk - field_0x68.HALF.HI) & 0x1f) <= 0xf) {
- field_0x68.HALF.HI--;
- }
- else {
- field_0x68.HALF.HI++;
+ if (((unk - this->field_0x68.HALF.HI) & 0x1f) <= 0xf) {
+ this->field_0x68.HALF.HI--;
+ } else {
+ this->field_0x68.HALF.HI++;
}
- temp = field_0x68.HALF.HI;
- this->field_0x68.HALF.HI = temp & 0x1f;
+ this->field_0x68.HALF.HI &= 0x1f;
}
if (!(this->field_0x68.HALF.HI & 7)) {
this->animationState = sub_0806F5B0(this->field_0x68.HALF.HI);
- UpdateSprite(this, (this->animationState >> 1) ^ 2);
+ InitializeAnimation(this, (this->animationState / 2) ^ 2);
}
}
- sub_080042B8(this);
-}*/
+ UpdateAnimationSingleFrame(this);
+}
+
+void sub_0806ACC4(Entity* this) {
+ u8 delay;
+ switch (this->action) {
+ case 0:
+ if (LoadExtraSpriteData(this, &gUnk_08112674[this->entityType.form * 4]) == 0)
+ return;
+
+ this->action = 1;
+ delay = this->actionDelay;
+ this->field_0x6a.HALF.LO = delay;
+ this->animationState = delay * 2;
+ this->actionDelay = 0;
+
+ this->field_0x68.HALF.LO = sub_0801E99C(this);
+ sub_0807DD50(this);
+ InitializeAnimation(this, (this->animationState / 2) + 8);
+ break;
+ case 1:
+ if (this->interactType == 2) {
+ this->action = 3;
+ this->interactType = 0;
+ sub_0806F118(this);
+ } else {
+ sub_0807DDAC(this, 0);
+ sub_0806AEA8(this);
+ if (this->entityType.parameter == 10 && this->interactType) {
+ this->action = 2;
+ this->interactType = 0;
+ InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)) + 8);
+ sub_0806AFE8(this, *(s32**)&this->cutsceneBeh);
+ }
+ if (this->entityType.form == 1) {
+ u8 idx = gPlayerEntity.animationState >> 1;
+ sub_08078850(this, 1, gUnk_081126E4[idx], &gUnk_081126D4[idx]);
+ }
+ }
+ break;
+ case 2:
+ if (gTextBox.doTextBox & 0x7f)
+ break;
+
+ this->action = 1;
+ InitializeAnimation(this, this->animationState / 2 + 4);
+ break;
+ case 3:
+ if (UpdateFuseInteraction(this))
+ this->action = 1;
+ break;
+ }
+
+ if (this->frameDuration != 0xff) {
+ GetNextFrame(this);
+ }
+}
+
+void sub_0806ADFC(Entity* this) {
+ sub_08078784(this, this->field_0x68.HALF.LO);
+}
+
+void TownMinish_Head(Entity* this) {
+ u32 frames;
+
+ if ((this->flags & 2) == 0) {
+ frames = this->field_0x68.HALF.HI / 2;
+ if ((this->frameSpriteSettings & 1)) {
+ SetExtraSpriteFrame(this, 0, frames + 0x1c);
+ } else {
+ SetExtraSpriteFrame(this, 0, 0xff);
+ }
+ SetExtraSpriteFrame(this, 1, this->frameIndex);
+ SetSpriteSubEntryOffsetData1(this, 1, 0);
+ sub_0807000C(this);
+ } else {
+ frames = this->frames.all;
+ if (frames != 0xff) {
+ frames &= ~0x80;
+ }
+ if ((this->frameSpriteSettings & 1) == 0) {
+ frames = 0xff;
+ }
+ SetExtraSpriteFrame(this, 0, frames);
+ SetExtraSpriteFrame(this, 1, this->frameIndex);
+ SetSpriteSubEntryOffsetData1(this, 1, 0);
+ sub_0807000C(this);
+ }
+}
+
+void sub_0806AEA8(Entity* this) {
+ int old = this->field_0x82.HWORD;
+ this->field_0x82.HWORD &= ~0x20;
+ if (old & 0x20) {
+ sub_08003FC4(this, 0x4000);
+ }
+ sub_0807DDE4(this);
+ this->field_0x82.HWORD = old;
+}
+
+void sub_0806AED8(Entity* this) {
+ this->actionDelay = 0;
+ sub_0806AEE4(this);
+}
+
+void sub_0806AEE4(Entity* this) {
+ int index;
+ u8* idx3;
+ u8 tmp1, tmp2;
+
+ if (this->actionDelay) {
+ this->actionDelay--;
+ } else {
+ this->actionDelay = 2;
+ index = sub_0806EDD8(this, 0x20, 0x20);
+ if (index < 0) {
+ int state = this->field_0x6a.HALF.LO;
+ this->animationState = state * 2;
+ index = state * 8;
+ }
+
+ idx3 = gUnk_081125F4 + (this->animationState / 2) * 0x20 + (index >> 1) * 2;
+ tmp1 = idx3[0];
+ tmp2 = idx3[1];
+
+ if (tmp2 & 0x80) {
+ this->animationState = sub_0806F5B0(index);
+ }
+ tmp2 &= 0x7f;
+ this->frames.all = tmp1;
+ this->frameIndex = tmp2;
+ this->frameSpriteSettings = 1;
+ this->animIndex = 0;
+ this->frameDuration = 0xff;
+ }
+}
+
+void sub_0806AF60(Entity* this, int* idx) {
+ InitializeAnimation(this, idx[1] + (this->animationState / 2));
+}
+
+void sub_0806AF70(Entity* this, u32 arg1) {
+ this->field_0x20 = 0x24000;
+}
+
+void sub_0806AF78(Entity* this, u32 arg1) {
+ sub_08003FC4(this, 0x1800);
+ if (0 <= this->height.WORD && this->field_0x20 < 1) {
+ this->height.WORD = 0;
+ sub_0806AF70(this, arg1);
+ }
+}
+
+void sub_0806AFA0(Entity* this) {
+ if (sub_0806ED78(this)) {
+ sub_0806F62C(this, -this->nonPlanarMovement, this->direction);
+ }
+}
+
+void sub_0806AFBC(Entity* this) {
+ int idx = gUnk_02002A40.unk8 - 2;
+ if (idx < 0)
+ idx = 0;
+
+ ShowNPCDialogue(this, gUnk_081126F0 + this->entityType.parameter * 8 + idx);
+}
+
+void sub_0806AFE8(Entity* this, s32* unk) {
+ unk[5] = 0;
+ gUnk_08112BF0[this->entityType.parameter](this, unk);
+}
+
+void sub_0806B004(Entity* this, int* unk) {
+ int idx = 0;
+
+ if (CheckGlobalFlag(0x29)) {
+ if (CheckLocalFlag(0x73)) {
+ if (GetInventoryValue(0x46) == 0) {
+ idx = 3;
+ if (CheckLocalFlag(0x78) == 0) {
+ idx = 2;
+ unk[5] = 1;
+ SetLocalFlag(0x78);
+ }
+ } else {
+ idx = 4;
+ }
+ } else {
+ idx = 1;
+ SetLocalFlag(0x6a);
+ }
+ }
+ TextboxNoOverlap(gUnk_08112C40[idx], this);
+}
+
+void sub_0806B064(Entity* this) {
+ int idx = 0;
+
+ if (CheckGlobalFlag(0x29)) {
+ idx = 1;
+ if (CheckLocalFlag(0x73)) {
+ idx = 2;
+ }
+ }
+ TextboxNoOverlap(gUnk_08112C4A[idx], this);
+}
+
+void sub_0806B098(Entity* this) {
+ u32 f;
+ int idx = 2;
+
+ if (GetInventoryValue(0x46) == 0) {
+ idx = 1;
+ if (CheckGlobalFlag(0x29)) {
+ f = CheckGlobalFlag(0x2a);
+ idx = (-f | f) >> 0x1f;
+ }
+ }
+ TextboxNoOverlap(gUnk_08112C50[(this->entityType.parameter - 7) * 3 + idx], this);
+}
+
+void sub_0806B0E0(Entity* this) {
+ int idx = 0;
+
+ if (sub_080002C0(0x38, 0xb8, 1) == 0x57 && sub_080002C0(0x48, 0xb8, 1) == 0x57 &&
+ sub_080002C0(0x38, 200, 1) == 0x57 && sub_080002C0(0x48, 200, 1) == 0x57) {
+ idx = 1;
+ }
+
+ TextboxNoOverlap(gUnk_08112C5C[idx], this);
+}
+
+void sub_0806B134(Entity* this) {
+ int idx;
+
+ if (GetInventoryValue(0x45)) {
+ idx = 2;
+ if (CheckLocalFlag(0x7b) == 0) {
+ idx = 1;
+ SetLocalFlag(0x7b);
+ }
+ } else {
+ idx = 0;
+ SetGlobalFlag(0x4a);
+ }
+ if (5 < gUnk_02002A40.unk8) {
+ idx = 3;
+ }
+ TextboxNoOverlap(gUnk_08112C60[idx], this);
+}
+
+void TownMinish_Fusion(Entity* this) {
+ if (this->action == 0) {
+ if (LoadExtraSpriteData(this, &gUnk_08112674[this->entityType.form * 4])) {
+ this->action++;
+ this->spriteSettings.b.draw = 1;
+ InitializeAnimation(this, 6);
+ }
+ } else {
+ GetNextFrame(this);
+ }
+}
diff --git a/src/npc/townsperson.c b/src/npc/townsperson.c
index 7fe6e64a..436dc186 100644
--- a/src/npc/townsperson.c
+++ b/src/npc/townsperson.c
@@ -5,6 +5,7 @@
#include "textbox.h"
#include "flags.h"
#include "structures.h"
+#include "functions.h"
typedef struct {
u8 frame1;
@@ -21,8 +22,6 @@ typedef struct {
extern void (*const gUnk_0810B774[])(Entity*);
extern void (*const gUnk_0810B77C[])(Entity*);
extern void sub_08061CB4(Entity*, u32);
-extern u32 sub_0806ED9C(Entity*, u32, u32);
-extern void sub_0806ED78(Entity*);
extern u32 sub_0805ACC0(Entity*);
extern u32 sub_0801E99C(Entity*);
extern void sub_0807DD64(Entity*);
@@ -36,7 +35,6 @@ extern void sub_08062048(Entity*);
extern void sub_08078784(Entity*, u32);
extern void sub_08078778(Entity*);
extern u32 sub_0806F5B0(u32);
-extern void sub_080AEF88(Entity*);
extern u32 Random(void);
extern void ResolveEntityOnTop(Entity*, Entity*);
extern void sub_08078850(Entity*, u32, u8, u32*);
@@ -50,7 +48,7 @@ extern u8 gUnk_0810B748[];
extern u32 gUnk_0810B740[];
extern u16 gUnk_0810B790[];
extern u16 gUnk_0810B7BA[];
-extern u32 gUnk_0810B7C0[];
+extern Dialog gUnk_0810B7C0[];
void Townsperson(Entity* this) {
if ((this->flags & 2) != 0) {
@@ -296,30 +294,27 @@ void sub_0806200C(Entity* this) {
TextboxNoOverlap(gUnk_0810B7BA[index], this);
}
-void sub_08062048(Entity *this)
-{
- int iVar1;
-
- if ((this->entityType).subtype == 6) {
- iVar1 = gUnk_02002A40.unk8 - 2;
- if (iVar1 < 0) {
- iVar1 = 0;
+void sub_08062048(Entity* this) {
+ int iVar1;
+
+ if ((this->entityType).subtype == 6) {
+ iVar1 = gUnk_02002A40.unk8 - 2;
+ if (iVar1 < 0) {
+ iVar1 = 0;
+ }
+ ShowNPCDialogue(this, gUnk_0810B7C0 + this->entityType.form * 0x8 + iVar1);
+ } else {
+ TextboxNoOverlap(0, this);
}
- ShowNPCDialogue(this, gUnk_0810B7C0 + this->entityType.form * 0x10 + iVar1 * 2);
- }
- else {
- TextboxNoOverlap(0, this);
- }
}
-void Townsperson_Fusion(Entity *this)
-{
- if (this->action == 0) {
- if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form]) == 0) {
- return;
+void Townsperson_Fusion(Entity* this) {
+ if (this->action == 0) {
+ if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->entityType.form]) == 0) {
+ return;
+ }
+ this->action++;
+ this->spriteSettings.b.draw = TRUE;
}
- this->action++;
- this->spriteSettings.b.draw = TRUE;
- }
- sub_08061CB4(this, 6);
+ sub_08061CB4(this, 6);
} \ No newline at end of file
diff --git a/src/npc/windTribespeople.c b/src/npc/windTribespeople.c
index 620483b3..4f8b4d97 100644
--- a/src/npc/windTribespeople.c
+++ b/src/npc/windTribespeople.c
@@ -4,6 +4,7 @@
#include "textbox.h"
#include "flags.h"
#include "structures.h"
+#include "functions.h"
extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
extern void sub_0807DD50(Entity*);
@@ -23,7 +24,7 @@ extern void (*const gUnk_08113A8C[])(Entity*, Entity*);
extern SpriteLoadData gUnk_08113A1C[];
extern u32 gUnk_08014A80;
-extern u32 gUnk_08113ABC[];
+extern Dialog gUnk_08113ABC[];
extern u16 gUnk_08113B0C[];
void WindTribespeople(Entity* this) {
@@ -74,73 +75,65 @@ void sub_0806C85C(Entity* this) {
}
}
-void sub_0806C870(Entity *this)
-{
- u8 bVar1;
-
- bVar1 = sub_0801E99C();
- this->field_0x68.HALF.LO = bVar1;
- sub_08078784(this, this->field_0x68.HALF.LO);
+void sub_0806C870(Entity* this) {
+ u8 bVar1;
+
+ bVar1 = sub_0801E99C(this);
+ this->field_0x68.HALF.LO = bVar1;
+ sub_08078784(this, this->field_0x68.HALF.LO);
}
-void WindTribespeople_Head(Entity *this)
-{
- u32 uVar1;
- u32 uVar2;
- u8 pbVar3;
-
- pbVar3 = (this->frames.all & 0x3F);
- if (this->entityType.form == 4) {
- SetExtraSpriteFrame(this, 0, 9);
- SetExtraSpriteFrame(this, 1, pbVar3);
- SetExtraSpriteFrame(this, 2, this->frameIndex);
- SetSpriteSubEntryOffsetData2(this, 2, 0);
- SetSpriteSubEntryOffsetData1(this, 2, 1);
- sub_0807000C(this);
- }
- else {
- if (this->frames.b.f2 != 0) {
- uVar2 = 1;
- uVar1 = 0;
- }
- else {
- uVar2 = 0;
- uVar1 = 1;
+void WindTribespeople_Head(Entity* this) {
+ u32 uVar1;
+ u32 uVar2;
+ u8 pbVar3;
+
+ pbVar3 = (this->frames.all & 0x3F);
+ if (this->entityType.form == 4) {
+ SetExtraSpriteFrame(this, 0, 9);
+ SetExtraSpriteFrame(this, 1, pbVar3);
+ SetExtraSpriteFrame(this, 2, this->frameIndex);
+ SetSpriteSubEntryOffsetData2(this, 2, 0);
+ SetSpriteSubEntryOffsetData1(this, 2, 1);
+ sub_0807000C(this);
+ } else {
+ if (this->frames.b.f2 != 0) {
+ uVar2 = 1;
+ uVar1 = 0;
+ } else {
+ uVar2 = 0;
+ uVar1 = 1;
+ }
+ SetExtraSpriteFrame(this, uVar2, pbVar3);
+ SetExtraSpriteFrame(this, uVar1, this->frameIndex);
+ SetSpriteSubEntryOffsetData1(this, uVar1, uVar2);
+ sub_0807000C(this);
}
- SetExtraSpriteFrame(this, uVar2, pbVar3);
- SetExtraSpriteFrame(this, uVar1, this->frameIndex);
- SetSpriteSubEntryOffsetData1(this, uVar1, uVar2);
- sub_0807000C(this);
- }
}
-//body and head entities?
-void sub_0806C90C(Entity *param_1,Entity *param_2)
-{
- *(u32 *)&param_2->animationState = 0;
- gUnk_08113A8C[param_1->entityType.parameter](param_1, param_2);
+// body and head entities?
+void sub_0806C90C(Entity* param_1, Entity* param_2) {
+ *(u32*)&param_2->animationState = 0;
+ gUnk_08113A8C[param_1->entityType.parameter](param_1, param_2);
}
-void sub_0806C928(Entity *this)
-{
- ShowNPCDialogue(this, &gUnk_08113ABC[gUnk_02002A40.unk8 * 2]);
+void sub_0806C928(Entity* this) {
+ ShowNPCDialogue(this, &gUnk_08113ABC[gUnk_02002A40.unk8]);
}
-void sub_0806C944(Entity *this)
-{
- int iVar1;
- int iVar2;
-
- iVar1 = CheckGlobalFlag(WARP_EVENT_END);
- if (iVar1 == 0) {
- iVar2 = 0;
- }
- else {
- iVar1 = CheckLocalFlag(0x63);
- iVar2 = 2;
- if (iVar1 != 0) {
- iVar2 = 1;
+void sub_0806C944(Entity* this) {
+ int iVar1;
+ int iVar2;
+
+ iVar1 = CheckGlobalFlag(WARP_EVENT_END);
+ if (iVar1 == 0) {
+ iVar2 = 0;
+ } else {
+ iVar1 = CheckLocalFlag(0x63);
+ iVar2 = 2;
+ if (iVar1 != 0) {
+ iVar2 = 1;
+ }
}
- }
- TextboxNoOverlap(gUnk_08113B0C[iVar2], this);
+ TextboxNoOverlap(gUnk_08113B0C[iVar2], this);
} \ No newline at end of file