summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2021-05-11 22:10:29 +0200
committeroctorock <79596758+octorock@users.noreply.github.com>2021-05-27 22:10:26 +0200
commitbbc78fd2d277c44b144e3d5d23fdb587b8d4ea74 (patch)
tree15dc240e8437d2b26d746caa0ead0853672e5432
parent3f404fa46f573c963cc1907b68d9ec78a54a1fc6 (diff)
Decompile npc5
-rw-r--r--asm/non_matching/npc5/sub_08060FD0.inc104
-rw-r--r--asm/non_matching/npc5/sub_08061170.inc53
-rw-r--r--asm/non_matching/npc5/sub_080611D4.inc54
-rw-r--r--asm/non_matching/npc5/sub_08061358.inc139
-rw-r--r--asm/non_matching/npc5/sub_08061464.inc231
-rw-r--r--asm/non_matching/npc5/sub_08061B18.inc38
-rw-r--r--asm/npc5.s2330
-rw-r--r--linker.ld1
-rw-r--r--src/npc/npc5.c943
9 files changed, 1562 insertions, 2331 deletions
diff --git a/asm/non_matching/npc5/sub_08060FD0.inc b/asm/non_matching/npc5/sub_08060FD0.inc
new file mode 100644
index 00000000..7f5cf29c
--- /dev/null
+++ b/asm/non_matching/npc5/sub_08060FD0.inc
@@ -0,0 +1,104 @@
+ .syntax unified
+ .text
+
+sub_08060FD0: @ 0x08060FD0
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ sub sp, #8
+ adds r4, r0, #0
+ mov sb, r1
+ mov r8, r2
+ movs r0, #0x2e
+ ldrsh r7, [r4, r0]
+ movs r1, #0x32
+ ldrsh r6, [r4, r1]
+ mov r2, sb
+ subs r0, r2, r7
+ mov r5, r8
+ subs r1, r5, r6
+ bl sub_080045DA
+ lsls r7, r7, #8
+ lsls r6, r6, #8
+ ldr r3, _08061058 @ =gSineTable
+ lsls r1, r0, #1
+ adds r1, r1, r3
+ movs r5, #0
+ ldrsh r2, [r1, r5]
+ lsls r1, r2, #1
+ adds r1, r1, r2
+ lsls r1, r1, #1
+ str r1, [sp]
+ adds r0, #0x40
+ lsls r0, r0, #1
+ adds r0, r0, r3
+ movs r2, #0
+ ldrsh r1, [r0, r2]
+ lsls r0, r1, #1
+ adds r0, r0, r1
+ lsls r0, r0, #1
+ str r0, [sp, #4]
+ adds r4, #0x38
+ ldrb r0, [r4]
+ ldr r5, _0806105C @ =gUnk_0200D654
+ mov sl, r5
+ cmp r0, #2
+ beq _0806102E
+ ldr r0, _08061060 @ =gUnk_02027EB4
+ mov sl, r0
+_0806102E:
+ adds r1, r7, #0
+ cmp r7, #0
+ bge _08061036
+ adds r1, #0xff
+_08061036:
+ asrs r5, r1, #8
+ adds r2, r6, #0
+ cmp r6, #0
+ bge _08061040
+ adds r2, #0xff
+_08061040:
+ asrs r4, r2, #8
+ mov r0, sl
+ adds r1, r5, #0
+ adds r2, r4, #0
+ movs r3, #6
+ bl sub_080AE4CC
+ cmp r0, #0
+ beq _08061064
+ movs r0, #0
+ b _08061084
+ .align 2, 0
+_08061058: .4byte gSineTable
+_0806105C: .4byte gUnk_0200D654
+_08061060: .4byte gUnk_02027EB4
+_08061064:
+ mov r1, sb
+ subs r0, r1, r5
+ adds r0, #6
+ cmp r0, #0xc
+ bhi _08061078
+ mov r2, r8
+ subs r0, r2, r4
+ adds r0, #6
+ cmp r0, #0xc
+ bls _08061082
+_08061078:
+ ldr r5, [sp]
+ adds r7, r7, r5
+ ldr r0, [sp, #4]
+ subs r6, r6, r0
+ b _0806102E
+_08061082:
+ movs r0, #1
+_08061084:
+ add sp, #8
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+
+ .syntax divided
diff --git a/asm/non_matching/npc5/sub_08061170.inc b/asm/non_matching/npc5/sub_08061170.inc
new file mode 100644
index 00000000..ffde2fbf
--- /dev/null
+++ b/asm/non_matching/npc5/sub_08061170.inc
@@ -0,0 +1,53 @@
+ .syntax unified
+ .text
+
+sub_08061170: @ 0x08061170
+ push {r4, r5, lr}
+ adds r4, r0, #0
+ bl UpdateAnimationSingleFrame
+ adds r0, r4, #0
+ bl sub_080AF1EC
+ cmp r0, #0
+ bne _080611CA
+ adds r0, r4, #0
+ bl sub_080611D4
+ adds r5, r0, #0
+ cmp r5, #0xff
+ beq _080611C6
+ movs r0, #6
+ strb r0, [r4, #0xc]
+ adds r0, r4, #0
+ movs r1, #1
+ bl sub_08079FD4
+ lsls r0, r0, #4
+ subs r0, #4
+ lsls r0, r0, #0xc
+ str r0, [r4, #0x20]
+ movs r1, #0x80
+ lsls r1, r1, #1
+ strh r1, [r4, #0x24]
+ strb r5, [r4, #0x15]
+ lsrs r1, r5, #2
+ strb r1, [r4, #0x14]
+ lsrs r0, r0, #0x10
+ cmp r0, #0
+ beq _080611BE
+ adds r0, r4, #0
+ movs r1, #0x14
+ bl sub_08060E70
+ b _080611C6
+_080611BE:
+ adds r0, r4, #0
+ movs r1, #0x18
+ bl sub_08060E70
+_080611C6:
+ movs r0, #0
+ b _080611D2
+_080611CA:
+ adds r0, r4, #0
+ bl sub_08016AD2
+ movs r0, #1
+_080611D2:
+ pop {r4, r5, pc}
+
+ .syntax divided
diff --git a/asm/non_matching/npc5/sub_080611D4.inc b/asm/non_matching/npc5/sub_080611D4.inc
new file mode 100644
index 00000000..97048cc0
--- /dev/null
+++ b/asm/non_matching/npc5/sub_080611D4.inc
@@ -0,0 +1,54 @@
+ .syntax unified
+ .text
+
+sub_080611D4: @ 0x080611D4
+ push {r4, lr}
+ adds r4, r0, #0
+ ldrb r1, [r4, #0x14]
+ movs r0, #6
+ ands r0, r1
+ ldr r1, _08061218 @ =gUnk_0810AC4C
+ adds r0, r0, r1
+ movs r1, #0
+ ldrsb r1, [r0, r1]
+ movs r2, #1
+ ldrsb r2, [r0, r2]
+ adds r0, r4, #0
+ bl sub_080002B4
+ adds r3, r0, #0
+ ldr r2, _0806121C @ =gUnk_0810AC54
+_080611F4:
+ ldrb r0, [r2]
+ cmp r0, r3
+ bne _08061220
+ ldrb r0, [r2, #1]
+ ldrb r1, [r4, #0x14]
+ lsrs r0, r0, #2
+ cmp r1, r0
+ bne _08061220
+ ldrb r0, [r4, #0xf]
+ adds r0, #1
+ strb r0, [r4, #0xf]
+ lsls r0, r0, #0x18
+ lsrs r0, r0, #0x18
+ cmp r0, #7
+ bls _0806122A
+ ldrb r0, [r2, #1]
+ b _0806122C
+ .align 2, 0
+_08061218: .4byte gUnk_0810AC4C
+_0806121C: .4byte gUnk_0810AC54
+_08061220:
+ adds r2, #2
+ ldrb r0, [r2]
+ cmp r0, #0
+ bne _080611F4
+ strb r0, [r4, #0xf]
+_0806122A:
+ movs r0, #0xff
+_0806122C:
+ pop {r4, pc}
+ .align 2, 0
+
+
+ .syntax divided
diff --git a/asm/non_matching/npc5/sub_08061358.inc b/asm/non_matching/npc5/sub_08061358.inc
new file mode 100644
index 00000000..ab2190cd
--- /dev/null
+++ b/asm/non_matching/npc5/sub_08061358.inc
@@ -0,0 +1,139 @@
+ .syntax unified
+ .text
+
+sub_08061358: @ 0x08061358
+ push {r4, r5, r6, lr}
+ adds r4, r0, #0
+ ldrb r5, [r4, #0xd]
+ cmp r5, #1
+ beq _0806139C
+ cmp r5, #1
+ bgt _0806136C
+ cmp r5, #0
+ beq _08061376
+ b _08061460
+_0806136C:
+ cmp r5, #2
+ beq _080613D0
+ cmp r5, #3
+ beq _0806141E
+ b _08061460
+_08061376:
+ adds r0, r4, #0
+ bl UpdateAnimationSingleFrame
+ adds r0, r4, #0
+ adds r0, #0x5a
+ ldrb r1, [r0]
+ movs r0, #0x80
+ ands r0, r1
+ cmp r0, #0
+ beq _08061460
+ movs r0, #1
+ strb r0, [r4, #0xd]
+ movs r0, #0xf
+ strb r0, [r4, #0xe]
+ adds r0, r4, #0
+ movs r1, #0
+ bl sub_08060E70
+ b _08061460
+_0806139C:
+ ldrb r0, [r4, #0xe]
+ subs r0, #1
+ strb r0, [r4, #0xe]
+ lsls r0, r0, #0x18
+ cmp r0, #0
+ bne _08061460
+ bl Random
+ adds r6, r0, #0
+ ands r5, r6
+ cmp r5, #0
+ beq _080613FA
+ movs r0, #2
+ strb r0, [r4, #0xd]
+ ldr r3, _080613CC @ =gUnk_0810AC5D
+ ldrb r0, [r4, #0x14]
+ lsls r0, r0, #1
+ lsrs r1, r6, #4
+ movs r2, #3
+ ands r1, r2
+ adds r0, r0, r1
+ adds r0, r0, r3
+ b _0806143A
+ .align 2, 0
+_080613CC: .4byte gUnk_0810AC5D
+_080613D0:
+ adds r0, r4, #0
+ bl UpdateAnimationSingleFrame
+ adds r0, r4, #0
+ adds r0, #0x5a
+ ldrb r1, [r0]
+ movs r0, #0x80
+ ands r0, r1
+ cmp r0, #0
+ beq _08061460
+ movs r0, #0x18
+ ands r0, r1
+ lsrs r0, r0, #2
+ strb r0, [r4, #0x14]
+ bl Random
+ adds r1, r0, #0
+ movs r0, #1
+ ands r1, r0
+ cmp r1, #0
+ beq _08061412
+_080613FA:
+ movs r0, #3
+ strb r0, [r4, #0xd]
+ movs r0, #0x18
+ ands r6, r0
+ adds r0, r6, #0
+ adds r0, #0x1e
+ strb r0, [r4, #0xe]
+ adds r0, r4, #0
+ movs r1, #4
+ bl sub_08060E70
+ b _08061460
+_08061412:
+ strb r1, [r4, #0xd]
+ adds r0, r4, #0
+ movs r1, #0x10
+ bl sub_08060E70
+ b _08061460
+_0806141E:
+ adds r0, r4, #0
+ bl sub_08061170
+ cmp r0, #0
+ bne _08061448
+ movs r0, #2
+ strb r0, [r4, #0xd]
+ ldr r2, _08061444 @ =gUnk_0810AC5D
+ ldrb r0, [r4, #0x14]
+ lsls r0, r0, #1
+ lsrs r1, r6, #4
+ ands r1, r5
+ adds r0, r0, r1
+ adds r0, r0, r2
+_0806143A:
+ ldrb r1, [r0]
+ adds r0, r4, #0
+ bl InitAnimationForceUpdate
+ b _08061460
+ .align 2, 0
+_08061444: .4byte gUnk_0810AC5D
+_08061448:
+ ldrb r0, [r4, #0xe]
+ subs r0, #1
+ strb r0, [r4, #0xe]
+ lsls r0, r0, #0x18
+ lsrs r0, r0, #0x18
+ cmp r0, #0
+ bne _08061460
+ strb r0, [r4, #0xd]
+ adds r0, r4, #0
+ movs r1, #0x10
+ bl sub_08060E70
+_08061460:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+
+ .syntax divided
diff --git a/asm/non_matching/npc5/sub_08061464.inc b/asm/non_matching/npc5/sub_08061464.inc
new file mode 100644
index 00000000..7a0f024a
--- /dev/null
+++ b/asm/non_matching/npc5/sub_08061464.inc
@@ -0,0 +1,231 @@
+ .syntax unified
+ .text
+
+sub_08061464: @ 0x08061464
+ push {r4, r5, r6, r7, lr}
+ mov r7, sb
+ mov r6, r8
+ push {r6, r7}
+ adds r4, r0, #0
+ mov r8, r1
+ adds r5, r2, #0
+ movs r0, #0x2e
+ ldrsh r7, [r4, r0]
+ movs r1, #0x32
+ ldrsh r6, [r4, r1]
+ adds r0, r7, #0
+ adds r1, r6, #0
+ mov r2, r8
+ adds r3, r5, #0
+ bl sub_080045D4
+ adds r0, #2
+ movs r1, #0x1c
+ ands r0, r1
+ lsrs r0, r0, #2
+ cmp r0, #7
+ bls _08061494
+ b _08061612
+_08061494:
+ lsls r0, r0, #2
+ ldr r1, _080614A0 @ =_080614A4
+ adds r0, r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_080614A0: .4byte _080614A4
+_080614A4: @ jump table
+ .4byte _080614C4 @ case 0
+ .4byte _080614E2 @ case 1
+ .4byte _08061514 @ case 2
+ .4byte _08061544 @ case 3
+ .4byte _08061566 @ case 4
+ .4byte _08061584 @ case 5
+ .4byte _080615B4 @ case 6
+ .4byte _080615E4 @ case 7
+_080614C4:
+ adds r0, r4, #0
+ adds r0, #0x6e
+ strh r5, [r0]
+ movs r1, #0x2e
+ ldrsh r0, [r4, r1]
+ cmp r0, r8
+ ble _08061504
+ adds r2, r6, #0
+ subs r2, #8
+ adds r0, r4, #0
+ adds r1, r7, #0
+ mov r3, r8
+ bl sub_08061630
+ b _08061612
+_080614E2:
+ movs r0, #0x6e
+ adds r0, r0, r4
+ mov sb, r0
+ mov r1, r8
+ strh r1, [r0]
+ adds r1, r7, #0
+ adds r1, #8
+ adds r0, r4, #0
+ adds r2, r6, #0
+ adds r3, r5, #0
+ bl sub_08061720
+ cmp r0, #0
+ beq _08061500
+ b _08061612
+_08061500:
+ mov r0, sb
+ strh r5, [r0]
+_08061504:
+ adds r2, r6, #0
+ subs r2, #8
+ adds r0, r4, #0
+ adds r1, r7, #0
+ mov r3, r8
+ bl sub_080616A8
+ b _08061612
+_08061514:
+ adds r0, r4, #0
+ adds r0, #0x6e
+ mov r1, r8
+ strh r1, [r0]
+ movs r1, #0x32
+ ldrsh r0, [r4, r1]
+ cmp r0, r5
+ ble _08061534
+ adds r1, r7, #0
+ adds r1, #8
+ adds r0, r4, #0
+ adds r2, r6, #0
+ adds r3, r5, #0
+ bl sub_08061720
+ b _08061612
+_08061534:
+ adds r1, r7, #0
+ adds r1, #8
+ adds r0, r4, #0
+ adds r2, r6, #0
+ adds r3, r5, #0
+ bl sub_08061798
+ b _08061612
+_08061544:
+ movs r0, #0x6e
+ adds r0, r0, r4
+ mov sb, r0
+ mov r1, r8
+ strh r1, [r0]
+ adds r1, r7, #0
+ adds r1, #8
+ adds r0, r4, #0
+ adds r2, r6, #0
+ adds r3, r5, #0
+ bl sub_08061798
+ cmp r0, #0
+ bne _08061612
+ mov r0, sb
+ strh r5, [r0]
+ b _08061574
+_08061566:
+ adds r0, r4, #0
+ adds r0, #0x6e
+ strh r5, [r0]
+ movs r1, #0x2e
+ ldrsh r0, [r4, r1]
+ cmp r0, r8
+ bgt _080615A4
+_08061574:
+ adds r2, r6, #0
+ adds r2, #8
+ adds r0, r4, #0
+ adds r1, r7, #0
+ mov r3, r8
+ bl sub_08061888
+ b _08061612
+_08061584:
+ movs r0, #0x6e
+ adds r0, r0, r4
+ mov sb, r0
+ mov r1, r8
+ strh r1, [r0]
+ adds r1, r7, #0
+ subs r1, #8
+ adds r0, r4, #0
+ adds r2, r6, #0
+ adds r3, r5, #0
+ bl sub_08061978
+ cmp r0, #0
+ bne _08061612
+ mov r0, sb
+ strh r5, [r0]
+_080615A4:
+ adds r2, r6, #0
+ adds r2, #8
+ adds r0, r4, #0
+ adds r1, r7, #0
+ mov r3, r8
+ bl sub_08061810
+ b _08061612
+_080615B4:
+ adds r0, r4, #0
+ adds r0, #0x6e
+ mov r1, r8
+ strh r1, [r0]
+ movs r1, #0x32
+ ldrsh r0, [r4, r1]
+ cmp r0, r5
+ ble _080615D4
+ adds r1, r7, #0
+ subs r1, #8
+ adds r0, r4, #0
+ adds r2, r6, #0
+ adds r3, r5, #0
+ bl sub_08061900
+ b _08061612
+_080615D4:
+ adds r1, r7, #0
+ subs r1, #8
+ adds r0, r4, #0
+ adds r2, r6, #0
+ adds r3, r5, #0
+ bl sub_08061978
+ b _08061612
+_080615E4:
+ movs r0, #0x6e
+ adds r0, r0, r4
+ mov sb, r0
+ mov r1, r8
+ strh r1, [r0]
+ adds r1, r7, #0
+ subs r1, #8
+ adds r0, r4, #0
+ adds r2, r6, #0
+ adds r3, r5, #0
+ bl sub_08061900
+ cmp r0, #0
+ bne _08061612
+ mov r0, sb
+ strh r5, [r0]
+ adds r2, r6, #0
+ subs r2, #8
+ adds r0, r4, #0
+ adds r1, r7, #0
+ mov r3, r8
+ bl sub_08061630
+_08061612:
+ ldr r0, [r4, #0x64]
+ ldrb r1, [r0]
+ movs r0, #8
+ ands r0, r1
+ lsls r0, r0, #0x18
+ lsrs r1, r0, #0x18
+ cmp r1, #0
+ bne _08061628
+ movs r0, #3
+ strb r0, [r4, #0xc]
+ strb r1, [r4, #0xd]
+_08061628:
+ pop {r3, r4}
+ mov r8, r3
+ mov sb, r4
+ pop {r4, r5, r6, r7, pc}
+
+ .syntax divided
diff --git a/asm/non_matching/npc5/sub_08061B18.inc b/asm/non_matching/npc5/sub_08061B18.inc
new file mode 100644
index 00000000..f420ee89
--- /dev/null
+++ b/asm/non_matching/npc5/sub_08061B18.inc
@@ -0,0 +1,38 @@
+ .syntax unified
+ .text
+
+sub_08061B18: @ 0x08061B18
+ push {r4, lr}
+ adds r4, r0, #0
+ adds r1, r4, #0
+ adds r1, #0x39
+ movs r0, #0
+ ldrsb r0, [r1, r0]
+ cmp r0, #0
+ beq _08061B54
+ cmp r0, #1
+ bne _08061B54
+ movs r0, #0
+ strb r0, [r1]
+ adds r0, r4, #0
+ bl sub_08061AFC
+ ldr r2, [r4, #0x68]
+ ldrb r0, [r4, #0xe]
+ adds r1, r0, #1
+ strb r1, [r4, #0xe]
+ lsls r0, r0, #0x18
+ lsrs r0, r0, #0x17
+ adds r2, r2, r0
+ ldrh r0, [r2, #2]
+ cmp r0, #0
+ bne _08061B4C
+ strb r0, [r4, #0xe]
+_08061B4C:
+ ldrh r0, [r2]
+ adds r1, r4, #0
+ bl TextboxNoOverlap
+_08061B54:
+ pop {r4, pc}
+ .align 2, 0
+
+ .syntax divided
diff --git a/asm/npc5.s b/asm/npc5.s
deleted file mode 100644
index a489d264..00000000
--- a/asm/npc5.s
+++ /dev/null
@@ -1,2330 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start NPC5
-NPC5: @ 0x080609E8
- push {lr}
- ldr r2, _080609FC @ =gUnk_0810AC1C
- ldrb r1, [r0, #0xa]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_080609FC: .4byte gUnk_0810AC1C
-
- thumb_func_start sub_08060A00
-sub_08060A00: @ 0x08060A00
- push {r4, r5, lr}
- adds r5, r0, #0
- ldr r0, _08060AD0 @ =gPlayerState
- ldrb r1, [r0, #2]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08060A44
- ldrb r0, [r5, #0xc]
- cmp r0, #0
- beq _08060A52
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- movs r0, #4
- ands r0, r1
- cmp r0, #0
- bne _08060A44
- movs r0, #4
- orrs r0, r1
- strb r0, [r2]
- ldr r4, [r5, #0x64]
- ldr r3, _08060AD4 @ =gPlayerEntity
- ldrh r2, [r3, #0x2e]
- movs r1, #0x10
- rsbs r1, r1, #0
- adds r0, r1, #0
- ands r0, r2
- adds r0, #8
- strh r0, [r4, #0xa]
- ldr r2, [r5, #0x64]
- ldrh r0, [r3, #0x32]
- ands r1, r0
- adds r1, #8
- strh r1, [r2, #0xc]
-_08060A44:
- ldrb r0, [r5, #0xc]
- cmp r0, #0
- beq _08060A52
- ldrb r0, [r5, #0x18]
- lsls r0, r0, #0x1e
- cmp r0, #0
- beq _08060A62
-_08060A52:
- ldr r0, _08060AD8 @ =gUnk_0810AC2C
- ldrb r1, [r5, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r0
- ldr r1, [r1]
- adds r0, r5, #0
- bl _call_via_r1
-_08060A62:
- ldrb r0, [r5, #0xc]
- cmp r0, #0
- beq _08060A76
- ldr r1, [r5, #0x64]
- ldr r2, _08060AD4 @ =gPlayerEntity
- ldrh r0, [r2, #0x2e]
- strh r0, [r1, #2]
- ldr r1, [r5, #0x64]
- ldrh r0, [r2, #0x32]
- strh r0, [r1, #4]
-_08060A76:
- adds r2, r5, #0
- adds r2, #0x74
- ldr r4, _08060ADC @ =gRoomControls
- ldrb r1, [r4, #5]
- ldrh r0, [r2]
- cmp r0, r1
- beq _08060ACE
- strh r1, [r2]
- ldr r0, _08060AD4 @ =gPlayerEntity
- adds r1, r5, #0
- bl CopyPosition
- movs r2, #1
- movs r0, #1
- strb r0, [r5, #0xc]
- ldrb r1, [r5, #0x18]
- subs r0, #5
- ands r0, r1
- orrs r0, r2
- strb r0, [r5, #0x18]
- movs r0, #0x90
- lsls r0, r0, #1
- strh r0, [r5, #0x24]
- ldrb r1, [r4, #0x10]
- lsls r0, r1, #1
- strb r0, [r5, #0x14]
- lsls r1, r1, #0x19
- lsrs r1, r1, #0x19
- adds r0, r5, #0
- bl InitAnimationForceUpdate
- bl Random
- movs r1, #0x7f
- ands r0, r1
- adds r0, #0x80
- adds r1, r5, #0
- adds r1, #0x59
- strb r0, [r1]
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- movs r0, #0xfb
- ands r0, r1
- strb r0, [r2]
-_08060ACE:
- pop {r4, r5, pc}
- .align 2, 0
-_08060AD0: .4byte gPlayerState
-_08060AD4: .4byte gPlayerEntity
-_08060AD8: .4byte gUnk_0810AC2C
-_08060ADC: .4byte gRoomControls
-
- thumb_func_start sub_08060AE0
-sub_08060AE0: @ 0x08060AE0
- push {r4, lr}
- adds r4, r0, #0
- movs r0, #0x14
- bl zMalloc
- adds r1, r0, #0
- cmp r1, #0
- beq _08060B54
- str r1, [r4, #0x64]
- movs r0, #0x20
- strb r0, [r1, #1]
- movs r0, #1
- strb r0, [r4, #0xc]
- ldrb r1, [r4, #0x10]
- movs r0, #0x80
- orrs r0, r1
- strb r0, [r4, #0x10]
- ldrb r1, [r4, #0x14]
- movs r2, #3
- adds r0, r2, #0
- ands r0, r1
- strb r0, [r4, #0x14]
- adds r1, r4, #0
- adds r1, #0x3c
- movs r0, #7
- strb r0, [r1]
- adds r1, #4
- movs r0, #0x48
- strb r0, [r1]
- subs r1, #1
- movs r0, #0x49
- strb r0, [r1]
- adds r0, r4, #0
- adds r0, #0x3b
- strb r2, [r0]
- ldr r0, _08060B58 @ =gUnk_080FD150
- str r0, [r4, #0x48]
- ldrb r1, [r4, #0x17]
- movs r0, #0xfe
- ands r0, r1
- strb r0, [r4, #0x17]
- adds r1, r4, #0
- adds r1, #0x6c
- movs r0, #0xff
- strb r0, [r1]
- ldrb r1, [r4, #0x14]
- adds r0, r4, #0
- bl sub_08060E70
- movs r0, #5
- movs r1, #2
- movs r2, #0
- bl CreateNPC
- cmp r0, #0
- beq _08060B54
- str r4, [r0, #0x50]
- str r0, [r4, #0x78]
-_08060B54:
- pop {r4, pc}
- .align 2, 0
-_08060B58: .4byte gUnk_080FD150
-
- thumb_func_start sub_08060B5C
-sub_08060B5C: @ 0x08060B5C
- push {r4, r5, lr}
- adds r4, r0, #0
- bl sub_08061230
- cmp r0, #0
- bne _08060B9E
- adds r0, r4, #0
- bl sub_08060F80
- adds r5, r0, #0
- cmp r5, #0
- bne _08060B98
- ldr r1, _08060B94 @ =gPlayerEntity
- adds r0, r4, #0
- bl GetFacingDirection
- ldrb r1, [r4, #0x14]
- lsls r1, r1, #2
- subs r0, r0, r1
- adds r0, #4
- movs r1, #0x1f
- ands r0, r1
- cmp r0, #8
- bhi _08060B98
- movs r0, #2
- strb r0, [r4, #0xc]
- strb r5, [r4, #0xf]
- b _08060B9E
- .align 2, 0
-_08060B94: .4byte gPlayerEntity
-_08060B98:
- adds r0, r4, #0
- bl sub_08060EDC
-_08060B9E:
- pop {r4, r5, pc}
-
- thumb_func_start sub_08060BA0
-sub_08060BA0: @ 0x08060BA0
- push {r4, r5, lr}
- adds r4, r0, #0
- bl sub_08061230
- cmp r0, #0
- beq _08060BAE
- b _08060D74
-_08060BAE:
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #4
- ands r0, r1
- cmp r0, #0
- beq _08060C66
- movs r0, #8
- ands r0, r1
- cmp r0, #0
- beq _08060BF6
- movs r0, #0xf0
- lsls r0, r0, #1
- strh r0, [r4, #0x24]
- ldrh r1, [r2, #0xe]
- ldrh r2, [r2, #0x10]
- adds r0, r4, #0
- movs r3, #0xc
- bl sub_08061120
- adds r0, r4, #0
- bl sub_08061170
- ldr r0, [r4, #0x64]
- ldrh r1, [r0, #0xe]
- ldrh r2, [r0, #0x10]
- adds r0, r4, #0
- movs r3, #4
- bl sub_0806FCB8
- cmp r0, #0
- bne _08060BEE
- b _08060D54
-_08060BEE:
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #0xf7
- b _08060D36
-_08060BF6:
- ldrh r1, [r2, #0xa]
- ldrh r2, [r2, #0xc]
- adds r0, r4, #0
- bl sub_08060FD0
- cmp r0, #0
- beq _08060C56
- ldr r0, [r4, #0x64]
- ldrh r1, [r0, #0xa]
- ldrh r2, [r0, #0xc]
- adds r0, r4, #0
- movs r3, #4
- bl sub_0806FCB8
- cmp r0, #0
- beq _08060C38
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #0xfb
- ands r0, r1
- strb r0, [r2]
- movs r0, #5
- strb r0, [r4, #0xc]
- ldrb r0, [r5, #0x15]
- strb r0, [r4, #0x15]
- movs r0, #0xb0
- lsls r0, r0, #1
- strh r0, [r4, #0x24]
- adds r0, r4, #0
- movs r1, #8
- bl sub_08060E70
- b _08060D54
-_08060C38:
- movs r0, #0xf0
- lsls r0, r0, #1
- strh r0, [r4, #0x24]
- movs r0, #0x2e
- ldrsh r1, [r5, r0]
- movs r0, #0x32
- ldrsh r2, [r5, r0]
- adds r0, r4, #0
- movs r3, #0xc
- bl sub_08061120
- adds r0, r4, #0
- bl sub_08061170
- b _08060D54
-_08060C56:
- movs r0, #0x2e
- ldrsh r1, [r5, r0]
- movs r0, #0x32
- ldrsh r2, [r5, r0]
- adds r0, r4, #0
- bl sub_08061464
- b _08060D54
-_08060C66:
- ldr r5, _08060C98 @ =gPlayerEntity
- movs r0, #0x2e
- ldrsh r1, [r5, r0]
- movs r0, #0x32
- ldrsh r2, [r5, r0]
- adds r0, r4, #0
- bl sub_08060FD0
- cmp r0, #0
- beq _08060C9C
- movs r0, #0x2e
- ldrsh r1, [r5, r0]
- movs r0, #0x32
- ldrsh r2, [r5, r0]
- adds r0, r4, #0
- bl sub_08061090
- adds r0, r4, #0
- bl sub_08061170
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #0xf5
- b _08060D36
- .align 2, 0
-_08060C98: .4byte gPlayerEntity
-_08060C9C:
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #8
- ands r0, r1
- cmp r0, #0
- beq _08060CDA
- movs r0, #0xf0
- lsls r0, r0, #1
- strh r0, [r4, #0x24]
- ldrh r1, [r2, #0xe]
- ldrh r2, [r2, #0x10]
- adds r0, r4, #0
- movs r3, #0xc
- bl sub_08061120
- adds r0, r4, #0
- bl sub_08061170
- ldr r0, [r4, #0x64]
- ldrh r1, [r0, #0xe]
- ldrh r2, [r0, #0x10]
- adds r0, r4, #0
- movs r3, #4
- bl sub_0806FCB8
- cmp r0, #0
- beq _08060D54
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #0xf7
- b _08060D36
-_08060CDA:
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- bne _08060CF4
- movs r0, #2
- orrs r0, r1
- strb r0, [r2]
- ldr r1, [r4, #0x64]
- ldrh r0, [r1, #2]
- strh r0, [r1, #6]
- ldr r1, [r4, #0x64]
- ldrh r0, [r1, #4]
- strh r0, [r1, #8]
-_08060CF4:
- ldr r0, [r4, #0x64]
- ldrh r1, [r0, #6]
- ldrh r2, [r0, #8]
- adds r0, r4, #0
- bl sub_08060FD0
- cmp r0, #0
- beq _08060D3C
- movs r0, #0xf0
- lsls r0, r0, #1
- strh r0, [r4, #0x24]
- ldr r0, [r4, #0x64]
- ldrh r1, [r0, #6]
- ldrh r2, [r0, #8]
- adds r0, r4, #0
- movs r3, #0xc
- bl sub_08061120
- adds r0, r4, #0
- bl sub_08061170
- ldr r0, [r4, #0x64]
- ldrh r1, [r0, #6]
- ldrh r2, [r0, #8]
- adds r0, r4, #0
- movs r3, #4
- bl sub_0806FCB8
- cmp r0, #0
- beq _08060D54
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #0xfd
-_08060D36:
- ands r0, r1
- strb r0, [r2]
- b _08060D54
-_08060D3C:
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #0xfd
- ands r0, r1
- strb r0, [r2]
- movs r0, #0x2e
- ldrsh r1, [r5, r0]
- movs r0, #0x32
- ldrsh r2, [r5, r0]
- adds r0, r4, #0
- bl sub_08061464
-_08060D54:
- adds r0, r4, #0
- bl sub_08060F80
- cmp r0, #0
- beq _08060D74
- movs r0, #1
- strb r0, [r4, #0xc]
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #0xfb
- ands r0, r1
- strb r0, [r2]
- adds r0, r4, #0
- movs r1, #0
- bl sub_08060E70
-_08060D74:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_08060D78
-sub_08060D78: @ 0x08060D78
- push {r4, r5, lr}
- adds r4, r0, #0
- bl sub_08061358
- adds r0, r4, #0
- bl sub_08060F80
- cmp r0, #0
- beq _08060DCE
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r0, [r0]
- subs r0, #0x20
- cmp r0, #0xf
- bhi _08060DC2
- adds r5, r4, #0
- adds r5, #0x5a
- ldrb r1, [r5]
- movs r0, #7
- ands r0, r1
- cmp r0, #0
- beq _08060DB2
- adds r1, r4, #0
- adds r1, #0x59
- movs r0, #1
- strb r0, [r1]
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
-_08060DB2:
- ldrb r1, [r5]
- movs r0, #0x18
- ands r0, r1
- strb r0, [r4, #0x14]
- adds r1, r4, #0
- adds r1, #0x6c
- movs r0, #0xff
- strb r0, [r1]
-_08060DC2:
- movs r0, #1
- strb r0, [r4, #0xc]
- adds r0, r4, #0
- movs r1, #0
- bl sub_08060E70
-_08060DCE:
- pop {r4, r5, pc}
-
- thumb_func_start sub_08060DD0
-sub_08060DD0: @ 0x08060DD0
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08060DF2
- movs r0, #1
- strb r0, [r4, #0xc]
- adds r0, r4, #0
- movs r1, #0
- bl sub_08060E70
-_08060DF2:
- pop {r4, pc}
-
- thumb_func_start sub_08060DF4
-sub_08060DF4: @ 0x08060DF4
- push {lr}
- bl sub_08061170
- pop {pc}
-
- thumb_func_start sub_08060DFC
-sub_08060DFC: @ 0x08060DFC
- push {r4, lr}
- adds r4, r0, #0
- bl sub_0806F69C
- adds r0, r4, #0
- bl sub_08060E94
- movs r1, #0x80
- lsls r1, r1, #6
- adds r0, r4, #0
- bl sub_08003FC4
- cmp r0, #0
- bne _08060E32
- movs r0, #7
- strb r0, [r4, #0xc]
- adds r1, r4, #0
- adds r1, #0x38
- movs r0, #1
- strb r0, [r1]
- adds r0, r4, #0
- bl UpdateSpriteForCollisionLayer
- adds r0, r4, #0
- movs r1, #0x1c
- bl sub_08060E70
-_08060E32:
- pop {r4, pc}
-
- thumb_func_start sub_08060E34
-sub_08060E34: @ 0x08060E34
- push {r4, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08060E68
- movs r0, #2
- strb r0, [r4, #0xc]
- ldr r1, _08060E6C @ =gPlayerEntity
- adds r0, r4, #0
- bl GetFacingDirection
- adds r0, #4
- movs r1, #0x18
- ands r0, r1
- lsrs r0, r0, #2
- strb r0, [r4, #0x14]
- adds r0, r4, #0
- movs r1, #8
- bl sub_08060E70
-_08060E68:
- pop {r4, pc}
- .align 2, 0
-_08060E6C: .4byte gPlayerEntity
-
- thumb_func_start sub_08060E70
-sub_08060E70: @ 0x08060E70
- push {lr}
- adds r2, r0, #0
- adds r3, r1, #0
- ldrb r0, [r2, #0x14]
- lsrs r0, r0, #1
- adds r1, r3, r0
- adds r0, r2, #0
- adds r0, #0x58
- ldrb r0, [r0]
- cmp r1, r0
- beq _08060E92
- adds r0, r2, #0
- adds r0, #0x6c
- strb r3, [r0]
- adds r0, r2, #0
- bl InitAnimationForceUpdate
-_08060E92:
- pop {pc}
-
- thumb_func_start sub_08060E94
-sub_08060E94: @ 0x08060E94
- push {r4, lr}
- adds r4, r0, #0
- ldr r0, [r4, #0x58]
- ldr r1, _08060ECC @ =0x0080FF00
- ands r0, r1
- ldr r1, _08060ED0 @ =0x00800100
- cmp r0, r1
- bne _08060ED4
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r0, [r0]
- cmp r0, #3
- bhi _08060ED4
- ldrb r1, [r4, #0x14]
- lsrs r1, r1, #1
- adds r0, r4, #0
- bl InitAnimationForceUpdate
- bl Random
- movs r1, #0x7f
- ands r0, r1
- adds r0, #0x80
- adds r1, r4, #0
- adds r1, #0x59
- strb r0, [r1]
- b _08060EDA
- .align 2, 0
-_08060ECC: .4byte 0x0080FF00
-_08060ED0: .4byte 0x00800100
-_08060ED4:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
-_08060EDA:
- pop {r4, pc}
-
- thumb_func_start sub_08060EDC
-sub_08060EDC: @ 0x08060EDC
- push {r4, lr}
- adds r4, r0, #0
- adds r0, #0x58
- ldrb r0, [r0]
- subs r0, #0x20
- cmp r0, #0xf
- bhi _08060F00
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _08060F00
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- b _08060F7C
-_08060F00:
- ldr r1, _08060F30 @ =gPlayerEntity
- adds r0, r4, #0
- bl GetFacingDirection
- ldrb r2, [r4, #0x14]
- lsls r1, r2, #2
- subs r1, r0, r1
- adds r0, r1, #3
- movs r3, #0x1f
- ands r0, r3
- cmp r0, #6
- ble _08060F4A
- ands r1, r3
- cmp r1, #0xf
- bgt _08060F34
- adds r1, r2, #0
- adds r1, #0x20
- adds r0, r4, #0
- bl InitAnimationForceUpdate
- ldrb r0, [r4, #0x14]
- adds r0, #1
- b _08060F42
- .align 2, 0
-_08060F30: .4byte gPlayerEntity
-_08060F34:
- adds r1, r2, #0
- adds r1, #0x28
- adds r0, r4, #0
- bl InitAnimationForceUpdate
- ldrb r0, [r4, #0x14]
- subs r0, #1
-_08060F42:
- movs r1, #7
- ands r0, r1
- strb r0, [r4, #0x14]
- b _08060F7C
-_08060F4A:
- movs r0, #1
- ands r2, r0
- cmp r2, #0
- bne _08060F7C
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08060F76
- adds r0, r4, #0
- adds r0, #0x58
- ldrb r0, [r0]
- subs r0, #0x20
- cmp r0, #0xf
- bhi _08060F76
- adds r0, r4, #0
- movs r1, #0
- bl sub_08060E70
- b _08060F7C
-_08060F76:
- adds r0, r4, #0
- bl sub_08060E94
-_08060F7C:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08060F80
-sub_08060F80: @ 0x08060F80
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r5, _08060FC8 @ =gPlayerEntity
- movs r0, #0x2e
- ldrsh r1, [r5, r0]
- movs r3, #0x32
- ldrsh r2, [r5, r3]
- adds r0, r4, #0
- bl sub_08060FD0
- cmp r0, #0
- beq _08060FC2
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #0xfb
- ands r0, r1
- strb r0, [r2]
- movs r1, #0x2e
- ldrsh r0, [r5, r1]
- movs r2, #0x2e
- ldrsh r1, [r4, r2]
- subs r0, r0, r1
- movs r3, #0x32
- ldrsh r1, [r5, r3]
- movs r3, #0x32
- ldrsh r2, [r4, r3]
- subs r1, r1, r2
- ldr r2, [r4, #0x64]
- ldrb r2, [r2, #1]
- bl sub_0806FCD0
- cmp r0, #0
- bne _08060FCC
-_08060FC2:
- movs r0, #0
- b _08060FCE
- .align 2, 0
-_08060FC8: .4byte gPlayerEntity
-_08060FCC:
- movs r0, #1
-_08060FCE:
- pop {r4, r5, pc}
-
- thumb_func_start sub_08060FD0
-sub_08060FD0: @ 0x08060FD0
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #8
- adds r4, r0, #0
- mov sb, r1
- mov r8, r2
- movs r0, #0x2e
- ldrsh r7, [r4, r0]
- movs r1, #0x32
- ldrsh r6, [r4, r1]
- mov r2, sb
- subs r0, r2, r7
- mov r5, r8
- subs r1, r5, r6
- bl sub_080045DA
- lsls r7, r7, #8
- lsls r6, r6, #8
- ldr r3, _08061058 @ =gSineTable
- lsls r1, r0, #1
- adds r1, r1, r3
- movs r5, #0
- ldrsh r2, [r1, r5]
- lsls r1, r2, #1
- adds r1, r1, r2
- lsls r1, r1, #1
- str r1, [sp]
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r3
- movs r2, #0
- ldrsh r1, [r0, r2]
- lsls r0, r1, #1
- adds r0, r0, r1
- lsls r0, r0, #1
- str r0, [sp, #4]
- adds r4, #0x38
- ldrb r0, [r4]
- ldr r5, _0806105C @ =gUnk_0200D654
- mov sl, r5
- cmp r0, #2
- beq _0806102E
- ldr r0, _08061060 @ =gUnk_02027EB4
- mov sl, r0
-_0806102E:
- adds r1, r7, #0
- cmp r7, #0
- bge _08061036
- adds r1, #0xff
-_08061036:
- asrs r5, r1, #8
- adds r2, r6, #0
- cmp r6, #0
- bge _08061040
- adds r2, #0xff
-_08061040:
- asrs r4, r2, #8
- mov r0, sl
- adds r1, r5, #0
- adds r2, r4, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _08061064
- movs r0, #0
- b _08061084
- .align 2, 0
-_08061058: .4byte gSineTable
-_0806105C: .4byte gUnk_0200D654
-_08061060: .4byte gUnk_02027EB4
-_08061064:
- mov r1, sb
- subs r0, r1, r5
- adds r0, #6
- cmp r0, #0xc
- bhi _08061078
- mov r2, r8
- subs r0, r2, r4
- adds r0, #6
- cmp r0, #0xc
- bls _08061082
-_08061078:
- ldr r5, [sp]
- adds r7, r7, r5
- ldr r0, [sp, #4]
- subs r6, r6, r0
- b _0806102E
-_08061082:
- movs r0, #1
-_08061084:
- add sp, #8
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_08061090
-sub_08061090: @ 0x08061090
- push {r4, r5, r6, lr}
- adds r3, r0, #0
- adds r5, r1, #0
- adds r6, r2, #0
- ldr r1, _080610C8 @ =gPlayerEntity
- movs r0, #0x2e
- ldrsh r2, [r1, r0]
- movs r4, #0x2e
- ldrsh r0, [r3, r4]
- subs r2, r2, r0
- movs r4, #0x32
- ldrsh r0, [r1, r4]
- movs r4, #0x32
- ldrsh r1, [r3, r4]
- subs r0, r0, r1
- adds r1, r2, #0
- muls r1, r2, r1
- adds r2, r0, #0
- muls r2, r0, r2
- adds r0, r2, #0
- adds r1, r1, r0
- ldr r0, _080610CC @ =0x000008FF
- cmp r1, r0
- bgt _080610D0
- movs r0, #0x90
- lsls r0, r0, #1
- b _080610F0
- .align 2, 0
-_080610C8: .4byte gPlayerEntity
-_080610CC: .4byte 0x000008FF
-_080610D0:
- ldr r0, _080610E4 @ =0x000018FF
- cmp r1, r0
- bgt _080610EC
- ldr r4, _080610E8 @ =0xFFFFF700
- adds r0, r1, r4
- asrs r0, r0, #4
- movs r1, #0x90
- lsls r1, r1, #1
- adds r0, r0, r1
- b _080610F0
- .align 2, 0
-_080610E4: .4byte 0x000018FF
-_080610E8: .4byte 0xFFFFF700
-_080610EC:
- movs r0, #0x88
- lsls r0, r0, #2
-_080610F0:
- strh r0, [r3, #0x24]
- movs r2, #0x24
- ldrsh r1, [r3, r2]
- movs r0, #0x90
- lsls r0, r0, #1
- cmp r1, r0
- bne _08061102
- movs r4, #4
- b _0806110C
-_08061102:
- ldr r0, _0806111C @ =0x0000015F
- movs r4, #0xc
- cmp r1, r0
- bgt _0806110C
- movs r4, #8
-_0806110C:
- adds r0, r3, #0
- adds r1, r5, #0
- adds r2, r6, #0
- adds r3, r4, #0
- bl sub_08061120
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0806111C: .4byte 0x0000015F
-
- thumb_func_start sub_08061120
-sub_08061120: @ 0x08061120
- push {r4, r5, r6, r7, lr}
- adds r6, r0, #0
- adds r4, r1, #0
- adds r5, r2, #0
- adds r7, r3, #0
- movs r1, #0x2e
- ldrsh r0, [r6, r1]
- movs r2, #0x32
- ldrsh r1, [r6, r2]
- adds r2, r4, #0
- adds r3, r5, #0
- bl sub_080045D4
- strb r0, [r6, #0x15]
- adds r0, r6, #0
- adds r0, #0x6c
- ldrb r0, [r0]
- cmp r7, r0
- bne _08061158
- ldrb r0, [r6, #0x15]
- ldrb r1, [r6, #0x14]
- lsls r1, r1, #2
- subs r0, r0, r1
- adds r0, #5
- movs r1, #0x1f
- ands r0, r1
- cmp r0, #0xa
- ble _0806116C
-_08061158:
- ldrb r0, [r6, #0x15]
- adds r0, #4
- movs r1, #0x18
- ands r0, r1
- asrs r0, r0, #2
- strb r0, [r6, #0x14]
- adds r0, r6, #0
- adds r1, r7, #0
- bl sub_08060E70
-_0806116C:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_08061170
-sub_08061170: @ 0x08061170
- push {r4, r5, lr}
- adds r4, r0, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- bl sub_080AF1EC
- cmp r0, #0
- bne _080611CA
- adds r0, r4, #0
- bl sub_080611D4
- adds r5, r0, #0
- cmp r5, #0xff
- beq _080611C6
- movs r0, #6
- strb r0, [r4, #0xc]
- adds r0, r4, #0
- movs r1, #1
- bl sub_08079FD4
- lsls r0, r0, #4
- subs r0, #4
- lsls r0, r0, #0xc
- str r0, [r4, #0x20]
- movs r1, #0x80
- lsls r1, r1, #1
- strh r1, [r4, #0x24]
- strb r5, [r4, #0x15]
- lsrs r1, r5, #2
- strb r1, [r4, #0x14]
- lsrs r0, r0, #0x10
- cmp r0, #0
- beq _080611BE
- adds r0, r4, #0
- movs r1, #0x14
- bl sub_08060E70
- b _080611C6
-_080611BE:
- adds r0, r4, #0
- movs r1, #0x18
- bl sub_08060E70
-_080611C6:
- movs r0, #0
- b _080611D2
-_080611CA:
- adds r0, r4, #0
- bl sub_08016AD2
- movs r0, #1
-_080611D2:
- pop {r4, r5, pc}
-
- thumb_func_start sub_080611D4
-sub_080611D4: @ 0x080611D4
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x14]
- movs r0, #6
- ands r0, r1
- ldr r1, _08061218 @ =gUnk_0810AC4C
- adds r0, r0, r1
- movs r1, #0
- ldrsb r1, [r0, r1]
- movs r2, #1
- ldrsb r2, [r0, r2]
- adds r0, r4, #0
- bl sub_080002B4
- adds r3, r0, #0
- ldr r2, _0806121C @ =gUnk_0810AC54
-_080611F4:
- ldrb r0, [r2]
- cmp r0, r3
- bne _08061220
- ldrb r0, [r2, #1]
- ldrb r1, [r4, #0x14]
- lsrs r0, r0, #2
- cmp r1, r0
- bne _08061220
- ldrb r0, [r4, #0xf]
- adds r0, #1
- strb r0, [r4, #0xf]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #7
- bls _0806122A
- ldrb r0, [r2, #1]
- b _0806122C
- .align 2, 0
-_08061218: .4byte gUnk_0810AC4C
-_0806121C: .4byte gUnk_0810AC54
-_08061220:
- adds r2, #2
- ldrb r0, [r2]
- cmp r0, #0
- bne _080611F4
- strb r0, [r4, #0xf]
-_0806122A:
- movs r0, #0xff
-_0806122C:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08061230
-sub_08061230: @ 0x08061230
- push {r4, lr}
- adds r4, r0, #0
- ldr r0, [r4, #0x64]
- ldrb r1, [r0]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- bne _08061302
- adds r1, r4, #0
- adds r1, #0x41
- ldrb r3, [r1]
- movs r0, #0x80
- ands r0, r3
- adds r2, r1, #0
- cmp r0, #0
- beq _0806133A
- movs r0, #0x7f
- ands r0, r3
- cmp r0, #0x1f
- bhi _080612E8
- lsls r0, r0, #2
- ldr r1, _08061264 @ =_08061268
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08061264: .4byte _08061268
-_08061268: @ jump table
- .4byte _0806133A @ case 0
- .4byte _0806133A @ case 1
- .4byte _0806133A @ case 2
- .4byte _0806133A @ case 3
- .4byte _080612E8 @ case 4
- .4byte _080612E8 @ case 5
- .4byte _080612E8 @ case 6
- .4byte _080612E8 @ case 7
- .4byte _080612E8 @ case 8
- .4byte _080612E8 @ case 9
- .4byte _080612E8 @ case 10
- .4byte _080612E8 @ case 11
- .4byte _080612E8 @ case 12
- .4byte _080612E8 @ case 13
- .4byte _080612E8 @ case 14
- .4byte _0806133A @ case 15
- .4byte _080612E8 @ case 16
- .4byte _080612E8 @ case 17
- .4byte _080612E8 @ case 18
- .4byte _0806133A @ case 19
- .4byte _080612E8 @ case 20
- .4byte _080612E8 @ case 21
- .4byte _080612E8 @ case 22
- .4byte _080612E8 @ case 23
- .4byte _080612E8 @ case 24
- .4byte _080612E8 @ case 25
- .4byte _080612E8 @ case 26
- .4byte _0806133A @ case 27
- .4byte _080612E8 @ case 28
- .4byte _080612E8 @ case 29
- .4byte _0806133A @ case 30
- .4byte _0806133A @ case 31
-_080612E8:
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #1
- orrs r0, r1
- strb r0, [r2]
- ldrb r1, [r4, #0x14]
- lsrs r1, r1, #1
- adds r1, #0x40
- adds r0, r4, #0
- bl InitAnimationForceUpdate
- movs r0, #1
- b _08061356
-_08061302:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _0806131A
- movs r0, #1
- b _08061356
-_0806131A:
- ldr r2, [r4, #0x64]
- ldrb r1, [r2]
- movs r0, #0xfe
- ands r0, r1
- strb r0, [r2]
- adds r0, r4, #0
- adds r0, #0x6c
- ldrb r1, [r4, #0x14]
- lsrs r1, r1, #1
- ldrb r0, [r0]
- adds r1, r1, r0
- adds r0, r4, #0
- bl InitAnimationForceUpdate
- adds r2, r4, #0
- adds r2, #0x41
-_0806133A:
- ldrb r0, [r2]
- movs r1, #0x7f
- ands r1, r0
- strb r1, [r2]
- adds r1, r4, #0
- adds r1, #0x3d
- ldrb r2, [r1]
- movs r0, #0
- ldrsb r0, [r1, r0]
- cmp r0, #0
- beq _08061354
- adds r0, r2, #1
- strb r0, [r1]
-_08061354:
- movs r0, #0
-_08061356:
- pop {r4, pc}
-
- thumb_func_start sub_08061358
-sub_08061358: @ 0x08061358
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- ldrb r5, [r4, #0xd]
- cmp r5, #1
- beq _0806139C
- cmp r5, #1
- bgt _0806136C
- cmp r5, #0
- beq _08061376
- b _08061460
-_0806136C:
- cmp r5, #2
- beq _080613D0
- cmp r5, #3
- beq _0806141E
- b _08061460
-_08061376:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08061460
- movs r0, #1
- strb r0, [r4, #0xd]
- movs r0, #0xf
- strb r0, [r4, #0xe]
- adds r0, r4, #0
- movs r1, #0
- bl sub_08060E70
- b _08061460
-_0806139C:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _08061460
- bl Random
- adds r6, r0, #0
- ands r5, r6
- cmp r5, #0
- beq _080613FA
- movs r0, #2
- strb r0, [r4, #0xd]
- ldr r3, _080613CC @ =gUnk_0810AC5D
- ldrb r0, [r4, #0x14]
- lsls r0, r0, #1
- lsrs r1, r6, #4
- movs r2, #3
- ands r1, r2
- adds r0, r0, r1
- adds r0, r0, r3
- b _0806143A
- .align 2, 0
-_080613CC: .4byte gUnk_0810AC5D
-_080613D0:
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
- adds r0, r4, #0
- adds r0, #0x5a
- ldrb r1, [r0]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- beq _08061460
- movs r0, #0x18
- ands r0, r1
- lsrs r0, r0, #2
- strb r0, [r4, #0x14]
- bl Random
- adds r1, r0, #0
- movs r0, #1
- ands r1, r0
- cmp r1, #0
- beq _08061412
-_080613FA:
- movs r0, #3
- strb r0, [r4, #0xd]
- movs r0, #0x18
- ands r6, r0
- adds r0, r6, #0
- adds r0, #0x1e
- strb r0, [r4, #0xe]
- adds r0, r4, #0
- movs r1, #4
- bl sub_08060E70
- b _08061460
-_08061412:
- strb r1, [r4, #0xd]
- adds r0, r4, #0
- movs r1, #0x10
- bl sub_08060E70
- b _08061460
-_0806141E:
- adds r0, r4, #0
- bl sub_08061170
- cmp r0, #0
- bne _08061448
- movs r0, #2
- strb r0, [r4, #0xd]
- ldr r2, _08061444 @ =gUnk_0810AC5D
- ldrb r0, [r4, #0x14]
- lsls r0, r0, #1
- lsrs r1, r6, #4
- ands r1, r5
- adds r0, r0, r1
- adds r0, r0, r2
-_0806143A:
- ldrb r1, [r0]
- adds r0, r4, #0
- bl InitAnimationForceUpdate
- b _08061460
- .align 2, 0
-_08061444: .4byte gUnk_0810AC5D
-_08061448:
- ldrb r0, [r4, #0xe]
- subs r0, #1
- strb r0, [r4, #0xe]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0
- bne _08061460
- strb r0, [r4, #0xd]
- adds r0, r4, #0
- movs r1, #0x10
- bl sub_08060E70
-_08061460:
- pop {r4, r5, r6, pc}
- .align 2, 0
-
- thumb_func_start sub_08061464
-sub_08061464: @ 0x08061464
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r4, r0, #0
- mov r8, r1
- adds r5, r2, #0
- movs r0, #0x2e
- ldrsh r7, [r4, r0]
- movs r1, #0x32
- ldrsh r6, [r4, r1]
- adds r0, r7, #0
- adds r1, r6, #0
- mov r2, r8
- adds r3, r5, #0
- bl sub_080045D4
- adds r0, #2
- movs r1, #0x1c
- ands r0, r1
- lsrs r0, r0, #2
- cmp r0, #7
- bls _08061494
- b _08061612
-_08061494:
- lsls r0, r0, #2
- ldr r1, _080614A0 @ =_080614A4
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080614A0: .4byte _080614A4
-_080614A4: @ jump table
- .4byte _080614C4 @ case 0
- .4byte _080614E2 @ case 1
- .4byte _08061514 @ case 2
- .4byte _08061544 @ case 3
- .4byte _08061566 @ case 4
- .4byte _08061584 @ case 5
- .4byte _080615B4 @ case 6
- .4byte _080615E4 @ case 7
-_080614C4:
- adds r0, r4, #0
- adds r0, #0x6e
- strh r5, [r0]
- movs r1, #0x2e
- ldrsh r0, [r4, r1]
- cmp r0, r8
- ble _08061504
- adds r2, r6, #0
- subs r2, #8
- adds r0, r4, #0
- adds r1, r7, #0
- mov r3, r8
- bl sub_08061630
- b _08061612
-_080614E2:
- movs r0, #0x6e
- adds r0, r0, r4
- mov sb, r0
- mov r1, r8
- strh r1, [r0]
- adds r1, r7, #0
- adds r1, #8
- adds r0, r4, #0
- adds r2, r6, #0
- adds r3, r5, #0
- bl sub_08061720
- cmp r0, #0
- beq _08061500
- b _08061612
-_08061500:
- mov r0, sb
- strh r5, [r0]
-_08061504:
- adds r2, r6, #0
- subs r2, #8
- adds r0, r4, #0
- adds r1, r7, #0
- mov r3, r8
- bl sub_080616A8
- b _08061612
-_08061514:
- adds r0, r4, #0
- adds r0, #0x6e
- mov r1, r8
- strh r1, [r0]
- movs r1, #0x32
- ldrsh r0, [r4, r1]
- cmp r0, r5
- ble _08061534
- adds r1, r7, #0
- adds r1, #8
- adds r0, r4, #0
- adds r2, r6, #0
- adds r3, r5, #0
- bl sub_08061720
- b _08061612
-_08061534:
- adds r1, r7, #0
- adds r1, #8
- adds r0, r4, #0
- adds r2, r6, #0
- adds r3, r5, #0
- bl sub_08061798
- b _08061612
-_08061544:
- movs r0, #0x6e
- adds r0, r0, r4
- mov sb, r0
- mov r1, r8
- strh r1, [r0]
- adds r1, r7, #0
- adds r1, #8
- adds r0, r4, #0
- adds r2, r6, #0
- adds r3, r5, #0
- bl sub_08061798
- cmp r0, #0
- bne _08061612
- mov r0, sb
- strh r5, [r0]
- b _08061574
-_08061566:
- adds r0, r4, #0
- adds r0, #0x6e
- strh r5, [r0]
- movs r1, #0x2e
- ldrsh r0, [r4, r1]
- cmp r0, r8
- bgt _080615A4
-_08061574:
- adds r2, r6, #0
- adds r2, #8
- adds r0, r4, #0
- adds r1, r7, #0
- mov r3, r8
- bl sub_08061888
- b _08061612
-_08061584:
- movs r0, #0x6e
- adds r0, r0, r4
- mov sb, r0
- mov r1, r8
- strh r1, [r0]
- adds r1, r7, #0
- subs r1, #8
- adds r0, r4, #0
- adds r2, r6, #0
- adds r3, r5, #0
- bl sub_08061978
- cmp r0, #0
- bne _08061612
- mov r0, sb
- strh r5, [r0]
-_080615A4:
- adds r2, r6, #0
- adds r2, #8
- adds r0, r4, #0
- adds r1, r7, #0
- mov r3, r8
- bl sub_08061810
- b _08061612
-_080615B4:
- adds r0, r4, #0
- adds r0, #0x6e
- mov r1, r8
- strh r1, [r0]
- movs r1, #0x32
- ldrsh r0, [r4, r1]
- cmp r0, r5
- ble _080615D4
- adds r1, r7, #0
- subs r1, #8
- adds r0, r4, #0
- adds r2, r6, #0
- adds r3, r5, #0
- bl sub_08061900
- b _08061612
-_080615D4:
- adds r1, r7, #0
- subs r1, #8
- adds r0, r4, #0
- adds r2, r6, #0
- adds r3, r5, #0
- bl sub_08061978
- b _08061612
-_080615E4:
- movs r0, #0x6e
- adds r0, r0, r4
- mov sb, r0
- mov r1, r8
- strh r1, [r0]
- adds r1, r7, #0
- subs r1, #8
- adds r0, r4, #0
- adds r2, r6, #0
- adds r3, r5, #0
- bl sub_08061900
- cmp r0, #0
- bne _08061612
- mov r0, sb
- strh r5, [r0]
- adds r2, r6, #0
- subs r2, #8
- adds r0, r4, #0
- adds r1, r7, #0
- mov r3, r8
- bl sub_08061630
-_08061612:
- ldr r0, [r4, #0x64]
- ldrb r1, [r0]
- movs r0, #8
- ands r0, r1
- lsls r0, r0, #0x18
- lsrs r1, r0, #0x18
- cmp r1, #0
- bne _08061628
- movs r0, #3
- strb r0, [r4, #0xc]
- strb r1, [r4, #0xd]
-_08061628:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_08061630
-sub_08061630: @ 0x08061630
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r5, r0, #0
- adds r6, r1, #0
- adds r4, r2, #0
- mov sb, r3
- mov r8, r4
- adds r0, #0x38
- ldrb r0, [r0]
- ldr r7, _08061650 @ =gUnk_02027EB4
- cmp r0, #2
- bne _0806168C
- ldr r7, _08061654 @ =gUnk_0200D654
- b _0806168C
- .align 2, 0
-_08061650: .4byte gUnk_02027EB4
-_08061654: .4byte gUnk_0200D654
-_08061658:
- adds r0, r7, #0
- adds r1, r6, #0
- adds r2, r4, #0
- mov r3, sb
- bl sub_08061A74
- cmp r0, #0
- beq _0806168A
- ldr r0, [r5, #0x64]
- strh r6, [r0, #0xe]
- ldr r0, [r5, #0x64]
- mov r1, r8
- strh r1, [r0, #0x10]
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- movs r0, #8
- orrs r0, r1
- strb r0, [r2]
- adds r0, r5, #0
- adds r0, #0x6e
- ldrh r0, [r0]
- cmp r0, r4
- blt _0806168A
- movs r0, #1
- b _0806169E
-_0806168A:
- subs r4, #8
-_0806168C:
- adds r0, r7, #0
- adds r1, r6, #0
- adds r2, r4, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _08061658
- movs r0, #0
-_0806169E:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_080616A8
-sub_080616A8: @ 0x080616A8
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r5, r0, #0
- adds r6, r1, #0
- adds r4, r2, #0
- mov sb, r3
- mov r8, r4
- adds r0, #0x38
- ldrb r0, [r0]
- ldr r7, _080616C8 @ =gUnk_02027EB4
- cmp r0, #2
- bne _08061704
- ldr r7, _080616CC @ =gUnk_0200D654
- b _08061704
- .align 2, 0
-_080616C8: .4byte gUnk_02027EB4
-_080616CC: .4byte gUnk_0200D654
-_080616D0:
- adds r0, r7, #0
- adds r1, r6, #0
- adds r2, r4, #0
- mov r3, sb
- bl sub_08061A1C
- cmp r0, #0
- beq _08061702
- ldr r0, [r5, #0x64]
- strh r6, [r0, #0xe]
- ldr r0, [r5, #0x64]
- mov r1, r8
- strh r1, [r0, #0x10]
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- movs r0, #8
- orrs r0, r1
- strb r0, [r2]
- adds r0, r5, #0
- adds r0, #0x6e
- ldrh r0, [r0]
- cmp r0, r4
- blt _08061702
- movs r0, #1
- b _08061716
-_08061702:
- subs r4, #8
-_08061704:
- adds r0, r7, #0
- adds r1, r6, #0
- adds r2, r4, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _080616D0
- movs r0, #0
-_08061716:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_08061720
-sub_08061720: @ 0x08061720
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r6, r2, #0
- mov sb, r3
- mov r8, r4
- adds r0, #0x38
- ldrb r0, [r0]
- ldr r7, _08061740 @ =gUnk_02027EB4
- cmp r0, #2
- bne _0806177C
- ldr r7, _08061744 @ =gUnk_0200D654
- b _0806177C
- .align 2, 0
-_08061740: .4byte gUnk_02027EB4
-_08061744: .4byte gUnk_0200D654
-_08061748:
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r6, #0
- mov r3, sb
- bl sub_080619F0
- cmp r0, #0
- beq _0806177A
- ldr r0, [r5, #0x64]
- mov r1, r8
- strh r1, [r0, #0xe]
- ldr r0, [r5, #0x64]
- strh r6, [r0, #0x10]
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- movs r0, #8
- orrs r0, r1
- strb r0, [r2]
- adds r0, r5, #0
- adds r0, #0x6e
- ldrh r0, [r0]
- cmp r0, r4
- bgt _0806177A
- movs r0, #1
- b _0806178E
-_0806177A:
- adds r4, #8
-_0806177C:
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r6, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _08061748
- movs r0, #0
-_0806178E:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_08061798
-sub_08061798: @ 0x08061798
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r6, r2, #0
- mov sb, r3
- mov r8, r4
- adds r0, #0x38
- ldrb r0, [r0]
- ldr r7, _080617B8 @ =gUnk_02027EB4
- cmp r0, #2
- bne _080617F4
- ldr r7, _080617BC @ =gUnk_0200D654
- b _080617F4
- .align 2, 0
-_080617B8: .4byte gUnk_02027EB4
-_080617BC: .4byte gUnk_0200D654
-_080617C0:
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r6, #0
- mov r3, sb
- bl sub_08061A48
- cmp r0, #0
- beq _080617F2
- ldr r0, [r5, #0x64]
- mov r1, r8
- strh r1, [r0, #0xe]
- ldr r0, [r5, #0x64]
- strh r6, [r0, #0x10]
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- movs r0, #8
- orrs r0, r1
- strb r0, [r2]
- adds r0, r5, #0
- adds r0, #0x6e
- ldrh r0, [r0]
- cmp r0, r4
- bgt _080617F2
- movs r0, #1
- b _08061806
-_080617F2:
- adds r4, #8
-_080617F4:
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r6, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _080617C0
- movs r0, #0
-_08061806:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_08061810
-sub_08061810: @ 0x08061810
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r5, r0, #0
- adds r6, r1, #0
- adds r4, r2, #0
- mov sb, r3
- mov r8, r4
- adds r0, #0x38
- ldrb r0, [r0]
- ldr r7, _08061830 @ =gUnk_02027EB4
- cmp r0, #2
- bne _0806186C
- ldr r7, _08061834 @ =gUnk_0200D654
- b _0806186C
- .align 2, 0
-_08061830: .4byte gUnk_02027EB4
-_08061834: .4byte gUnk_0200D654
-_08061838:
- adds r0, r7, #0
- adds r1, r6, #0
- adds r2, r4, #0
- mov r3, sb
- bl sub_08061A74
- cmp r0, #0
- beq _0806186A
- ldr r0, [r5, #0x64]
- strh r6, [r0, #0xe]
- ldr r0, [r5, #0x64]
- mov r1, r8
- strh r1, [r0, #0x10]
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- movs r0, #8
- orrs r0, r1
- strb r0, [r2]
- adds r0, r5, #0
- adds r0, #0x6e
- ldrh r0, [r0]
- cmp r0, r4
- bgt _0806186A
- movs r0, #1
- b _0806187E
-_0806186A:
- adds r4, #8
-_0806186C:
- adds r0, r7, #0
- adds r1, r6, #0
- adds r2, r4, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _08061838
- movs r0, #0
-_0806187E:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_08061888
-sub_08061888: @ 0x08061888
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r5, r0, #0
- adds r6, r1, #0
- adds r4, r2, #0
- mov sb, r3
- mov r8, r4
- adds r0, #0x38
- ldrb r0, [r0]
- ldr r7, _080618A8 @ =gUnk_02027EB4
- cmp r0, #2
- bne _080618E4
- ldr r7, _080618AC @ =gUnk_0200D654
- b _080618E4
- .align 2, 0
-_080618A8: .4byte gUnk_02027EB4
-_080618AC: .4byte gUnk_0200D654
-_080618B0:
- adds r0, r7, #0
- adds r1, r6, #0
- adds r2, r4, #0
- mov r3, sb
- bl sub_08061A1C
- cmp r0, #0
- beq _080618E2
- ldr r0, [r5, #0x64]
- strh r6, [r0, #0xe]
- ldr r0, [r5, #0x64]
- mov r1, r8
- strh r1, [r0, #0x10]
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- movs r0, #8
- orrs r0, r1
- strb r0, [r2]
- adds r0, r5, #0
- adds r0, #0x6e
- ldrh r0, [r0]
- cmp r0, r4
- bgt _080618E2
- movs r0, #1
- b _080618F6
-_080618E2:
- adds r4, #8
-_080618E4:
- adds r0, r7, #0
- adds r1, r6, #0
- adds r2, r4, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _080618B0
- movs r0, #0
-_080618F6:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_08061900
-sub_08061900: @ 0x08061900
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r6, r2, #0
- mov sb, r3
- mov r8, r4
- adds r0, #0x38
- ldrb r0, [r0]
- ldr r7, _08061920 @ =gUnk_02027EB4
- cmp r0, #2
- bne _0806195C
- ldr r7, _08061924 @ =gUnk_0200D654
- b _0806195C
- .align 2, 0
-_08061920: .4byte gUnk_02027EB4
-_08061924: .4byte gUnk_0200D654
-_08061928:
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r6, #0
- mov r3, sb
- bl sub_080619F0
- cmp r0, #0
- beq _0806195A
- ldr r0, [r5, #0x64]
- mov r1, r8
- strh r1, [r0, #0xe]
- ldr r0, [r5, #0x64]
- strh r6, [r0, #0x10]
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- movs r0, #8
- orrs r0, r1
- strb r0, [r2]
- adds r0, r5, #0
- adds r0, #0x6e
- ldrh r0, [r0]
- cmp r0, r4
- blt _0806195A
- movs r0, #1
- b _0806196E
-_0806195A:
- subs r4, #8
-_0806195C:
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r6, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _08061928
- movs r0, #0
-_0806196E:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_08061978
-sub_08061978: @ 0x08061978
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r6, r2, #0
- mov sb, r3
- mov r8, r4
- adds r0, #0x38
- ldrb r0, [r0]
- ldr r7, _08061998 @ =gUnk_02027EB4
- cmp r0, #2
- bne _080619D4
- ldr r7, _0806199C @ =gUnk_0200D654
- b _080619D4
- .align 2, 0
-_08061998: .4byte gUnk_02027EB4
-_0806199C: .4byte gUnk_0200D654
-_080619A0:
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r6, #0
- mov r3, sb
- bl sub_08061A48
- cmp r0, #0
- beq _080619D2
- ldr r0, [r5, #0x64]
- mov r1, r8
- strh r1, [r0, #0xe]
- ldr r0, [r5, #0x64]
- strh r6, [r0, #0x10]
- ldr r2, [r5, #0x64]
- ldrb r1, [r2]
- movs r0, #8
- orrs r0, r1
- strb r0, [r2]
- adds r0, r5, #0
- adds r0, #0x6e
- ldrh r0, [r0]
- cmp r0, r4
- blt _080619D2
- movs r0, #1
- b _080619E6
-_080619D2:
- subs r4, #8
-_080619D4:
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r6, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _080619A0
- movs r0, #0
-_080619E6:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_080619F0
-sub_080619F0: @ 0x080619F0
- push {r4, r5, r6, r7, lr}
- adds r7, r0, #0
- adds r6, r1, #0
- adds r4, r2, #0
- adds r5, r3, #0
- cmp r5, r4
- bgt _08061A18
-_080619FE:
- adds r0, r7, #0
- adds r1, r6, #0
- adds r2, r4, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _08061A12
- movs r0, #0
- b _08061A1A
-_08061A12:
- subs r4, #8
- cmp r5, r4
- ble _080619FE
-_08061A18:
- movs r0, #1
-_08061A1A:
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_08061A1C
-sub_08061A1C: @ 0x08061A1C
- push {r4, r5, r6, r7, lr}
- adds r7, r0, #0
- adds r4, r1, #0
- adds r6, r2, #0
- adds r5, r3, #0
- cmp r5, r4
- blt _08061A44
-_08061A2A:
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r6, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _08061A3E
- movs r0, #0
- b _08061A46
-_08061A3E:
- adds r4, #8
- cmp r5, r4
- bge _08061A2A
-_08061A44:
- movs r0, #1
-_08061A46:
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_08061A48
-sub_08061A48: @ 0x08061A48
- push {r4, r5, r6, r7, lr}
- adds r7, r0, #0
- adds r6, r1, #0
- adds r4, r2, #0
- adds r5, r3, #0
- cmp r5, r4
- blt _08061A70
-_08061A56:
- adds r0, r7, #0
- adds r1, r6, #0
- adds r2, r4, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _08061A6A
- movs r0, #0
- b _08061A72
-_08061A6A:
- adds r4, #8
- cmp r5, r4
- bge _08061A56
-_08061A70:
- movs r0, #1
-_08061A72:
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_08061A74
-sub_08061A74: @ 0x08061A74
- push {r4, r5, r6, r7, lr}
- adds r7, r0, #0
- adds r4, r1, #0
- adds r6, r2, #0
- adds r5, r3, #0
- cmp r5, r4
- bgt _08061A9C
-_08061A82:
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r6, #0
- movs r3, #6
- bl sub_080AE4CC
- cmp r0, #0
- beq _08061A96
- movs r0, #0
- b _08061A9E
-_08061A96:
- subs r4, #8
- cmp r5, r4
- ble _08061A82
-_08061A9C:
- movs r0, #1
-_08061A9E:
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_08061AA0
-sub_08061AA0: @ 0x08061AA0
- push {lr}
- bl DeleteThisEntity
- pop {pc}
-
- thumb_func_start sub_08061AA8
-sub_08061AA8: @ 0x08061AA8
- push {r4, lr}
- adds r4, r0, #0
- ldr r1, _08061AC8 @ =gUnk_0810AC70
- ldrb r0, [r4, #0xc]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r1, [r0]
- adds r0, r4, #0
- bl _call_via_r1
- ldr r0, [r4, #0x50]
- adds r1, r4, #0
- bl CopyPosition
- pop {r4, pc}
- .align 2, 0
-_08061AC8: .4byte gUnk_0810AC70
-
- thumb_func_start sub_08061ACC
-sub_08061ACC: @ 0x08061ACC
- push {r4, lr}
- adds r4, r0, #0
- ldrb r1, [r4, #0x10]
- movs r0, #0x20
- movs r2, #0
- orrs r0, r1
- strb r0, [r4, #0x10]
- movs r0, #1
- strb r0, [r4, #0xc]
- movs r0, #0xff
- strb r0, [r4, #0xd]
- strb r2, [r4, #0xe]
- ldrb r1, [r4, #0x17]
- movs r0, #0xfe
- ands r0, r1
- strb r0, [r4, #0x17]
- adds r0, r4, #0
- bl sub_08078778
- adds r0, r4, #0
- bl sub_08061AFC
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08061AFC
-sub_08061AFC: @ 0x08061AFC
- push {lr}
- adds r1, r0, #0
- movs r2, #0
- ldrb r0, [r1, #0xd]
- cmp r0, #0
- beq _08061B12
- strb r2, [r1, #0xd]
- ldr r0, _08061B14 @ =gUnk_0810B660
- ldr r0, [r0]
- str r0, [r1, #0x68]
- strb r2, [r1, #0xe]
-_08061B12:
- pop {pc}
- .align 2, 0
-_08061B14: .4byte gUnk_0810B660
-
- thumb_func_start sub_08061B18
-sub_08061B18: @ 0x08061B18
- push {r4, lr}
- adds r4, r0, #0
- adds r1, r4, #0
- adds r1, #0x39
- movs r0, #0
- ldrsb r0, [r1, r0]
- cmp r0, #0
- beq _08061B54
- cmp r0, #1
- bne _08061B54
- movs r0, #0
- strb r0, [r1]
- adds r0, r4, #0
- bl sub_08061AFC
- ldr r2, [r4, #0x68]
- ldrb r0, [r4, #0xe]
- adds r1, r0, #1
- strb r1, [r4, #0xe]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x17
- adds r2, r2, r0
- ldrh r0, [r2, #2]
- cmp r0, #0
- bne _08061B4C
- strb r0, [r4, #0xe]
-_08061B4C:
- ldrh r0, [r2]
- adds r1, r4, #0
- bl TextboxNoOverlap
-_08061B54:
- pop {r4, pc}
- .align 2, 0
-
- thumb_func_start sub_08061B58
-sub_08061B58: @ 0x08061B58
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #0xc]
- cmp r0, #0
- bne _08061B6E
- movs r0, #1
- strb r0, [r4, #0xc]
- adds r0, r4, #0
- movs r1, #2
- bl InitAnimationForceUpdate
-_08061B6E:
- ldr r0, _08061B88 @ =gScreenTransition
- adds r0, #0x2c
- ldrb r0, [r0]
- cmp r0, #2
- bne _08061B7E
- adds r0, r4, #0
- bl UpdateAnimationSingleFrame
-_08061B7E:
- adds r0, r4, #0
- bl sub_0806FD3C
- pop {r4, pc}
- .align 2, 0
-_08061B88: .4byte gScreenTransition
diff --git a/linker.ld b/linker.ld
index 62e2c4ab..7da2ddea 100644
--- a/linker.ld
+++ b/linker.ld
@@ -555,7 +555,6 @@ SECTIONS {
src/npc/postman.o(.text);
asm/postman.o(.text);
src/npc/npc5.o(.text);
- asm/npc5.o(.text);
src/npc/townsperson.o(.text);
asm/kid.o(.text);
src/npc/npc9.o(.text);
diff --git a/src/npc/npc5.c b/src/npc/npc5.c
new file mode 100644
index 00000000..6d1a7699
--- /dev/null
+++ b/src/npc/npc5.c
@@ -0,0 +1,943 @@
+#include "global.h"
+#include "entity.h"
+#include "player.h"
+#include "room.h"
+#include "coord.h"
+#include "random.h"
+#include "utils.h"
+#include "functions.h"
+#include "textbox.h"
+
+extern void (*const gUnk_0810AC1C[])(Entity*);
+
+extern void (*const gUnk_0810AC2C[])(Entity*);
+
+typedef struct {
+ u8 unk_0; // u8
+ u8 unk_0b; // u8
+ u16 unk_1; // u16
+ u16 unk_2; // u16
+ u16 unk_3;
+ u16 unk_4;
+ u16 unk_5; // u16
+ u16 unk_6; // u16
+ u16 unk_7; // u16
+ u16 unk_8; // u16
+} UnkHeap;
+
+extern Hitbox gUnk_080FD150;
+
+void sub_08060E70(Entity*, u32);
+
+u32 sub_08061230(Entity*);
+u32 sub_08060F80(Entity*);
+void sub_08060EDC(Entity*);
+void sub_08061090(Entity*, u32, u32);
+
+bool32 sub_08060FD0(Entity*, u32, u32);
+void sub_08061464(Entity*, u32, u32);
+void sub_08061120(Entity*, u32, u32, u32);
+bool32 sub_08061170(Entity*);
+
+void sub_08061358(Entity*);
+
+void sub_08060E94(Entity*);
+
+u32 sub_0806FCD0(u32, u32, u32);
+
+extern Entity gUnk_0200D654;
+extern Entity gUnk_02027EB4;
+extern bool32 sub_080AE4CC(Entity*, u32, u32, u32);
+
+extern u32 sub_080AF1EC(Entity*);
+u32 sub_080611D4(Entity*);
+extern u32 sub_08079FD4(Entity*, u32);
+extern void sub_08016AD2(Entity*);
+
+extern struct {
+ s8 unk_0;
+ s8 unk_1;
+} gUnk_0810AC4C[];
+extern u8 gUnk_0810AC54[8];
+extern u32 sub_080002B4(Entity*, u32, u32);
+
+extern u8 gUnk_0810AC5D;
+
+bool32 sub_08061630(Entity*, s32, s32, s32);
+bool32 sub_08061720(Entity*, s32, s32, s32);
+bool32 sub_080616A8(Entity*, s32, s32, s32);
+bool32 sub_08061798(Entity*, s32, s32, s32);
+bool32 sub_08061888(Entity*, s32, s32, s32);
+bool32 sub_08061978(Entity*, s32, s32, s32);
+bool32 sub_08061810(Entity*, s32, s32, s32);
+bool32 sub_08061900(Entity*, s32, s32, s32);
+
+bool32 sub_08061A74(Entity*, s32, s32, s32);
+
+bool32 sub_08061A1C(Entity*, s32, s32, s32);
+
+bool32 sub_080619F0(Entity*, s32, s32, s32);
+
+bool32 sub_08061A48(Entity*, s32, s32, s32);
+
+extern void (*const gUnk_0810AC70[])(Entity*);
+
+void sub_08061AFC(Entity*);
+
+extern u16* gUnk_0810B660[8];
+
+void NPC5(Entity* this) {
+ gUnk_0810AC1C[this->type](this);
+}
+
+void sub_08060A00(Entity* this) {
+ u32 tmp;
+
+ if ((gPlayerState.jumpStatus & 0x80) != 0) {
+ if (this->action != 0) {
+ if (((((UnkHeap*)this->myHeap)->unk_0) & 4) == 0) {
+ ((UnkHeap*)this->myHeap)->unk_0 |= 4;
+ ((UnkHeap*)this->myHeap)->unk_5 = (gPlayerEntity.x.HALF.HI & 0xfff0) + 8;
+ ((UnkHeap*)this->myHeap)->unk_6 = (gPlayerEntity.y.HALF.HI & 0xfff0) + 8;
+ }
+ }
+ }
+
+ if ((this->action == 0) || (this->spriteSettings.b.draw != 0)) {
+ gUnk_0810AC2C[this->action](this);
+ }
+
+ if (this->action != 0) {
+ ((UnkHeap*)this->myHeap)->unk_1 = gPlayerEntity.x.HALF.HI;
+ ((UnkHeap*)this->myHeap)->unk_2 = gPlayerEntity.y.HALF.HI;
+ }
+ if (this->field_0x74.HWORD != gRoomControls.roomID) {
+ this->field_0x74.HWORD = gRoomControls.roomID;
+ CopyPosition(&gPlayerEntity, this);
+ this->action = 1;
+ this->spriteSettings.b.draw = 1;
+ this->speed = 0x120;
+ tmp = gRoomControls.filler[0];
+ this->animationState = tmp * 2;
+ InitAnimationForceUpdate(this, tmp << 0x19 >> 0x19); // TODO some conversion between u8 and u32?
+ this->frameDuration = (Random() & 0x7f) + 0x80;
+ ((UnkHeap*)this->myHeap)->unk_0 &= 0xfb;
+ }
+}
+
+void sub_08060AE0(Entity* this) {
+ UnkHeap* heapObj;
+ Entity* otherNpc;
+
+ heapObj = (UnkHeap*)zMalloc(0x14); // TODO UnkHeap struct should have size 0x14?
+ if (heapObj != NULL) {
+ this->myHeap = (u32*)heapObj;
+ heapObj->unk_0b = 0x20;
+ this->action = 1;
+ this->flags |= 0x80;
+ this->animationState &= 3;
+ this->field_0x3c = 7;
+ this->field_0x40 = 0x48;
+ this->damageType = 0x49;
+ this->flags2 = 3;
+ this->hitbox = &gUnk_080FD150;
+ this->field_0x17 &= 0xfe;
+ this->field_0x6c.HALF.LO = 0xff;
+ sub_08060E70(this, this->animationState);
+ otherNpc = CreateNPC(5, 2, 0);
+ if (otherNpc != NULL) {
+ otherNpc->parent = this;
+ *(Entity**)&this->field_0x78 = otherNpc;
+ }
+ }
+}
+
+void sub_08060B5C(Entity* this) {
+ if (sub_08061230(this) == 0) {
+ if ((sub_08060F80(this) == 0) &&
+ (((GetFacingDirection(this, &gPlayerEntity) + (this->animationState * -4) + 4) & 0x1f)) < 9) {
+ this->action = 2;
+ this->field_0xf = 0;
+ return;
+ }
+ sub_08060EDC(this);
+ }
+}
+
+void sub_08060BA0(Entity* this) {
+ Entity* r5;
+
+ if (sub_08061230(this) != 0) {
+ return;
+ }
+ if ((((UnkHeap*)this->myHeap)->unk_0 & 4) != 0) {
+ if ((((UnkHeap*)this->myHeap)->unk_0 & 8) != 0) {
+ this->speed = 0x1e0;
+ sub_08061120(this, ((UnkHeap*)this->myHeap)->unk_7, ((UnkHeap*)this->myHeap)->unk_8, 0xc);
+ sub_08061170(this);
+ if (sub_0806FCB8(this, ((UnkHeap*)this->myHeap)->unk_7, ((UnkHeap*)this->myHeap)->unk_8, 4) != 0) {
+ ((UnkHeap*)this->myHeap)->unk_0 &= 0xf7;
+ }
+ } else {
+ if (sub_08060FD0(this, ((UnkHeap*)this->myHeap)->unk_5, ((UnkHeap*)this->myHeap)->unk_6) != 0) {
+ if (sub_0806FCB8(this, ((UnkHeap*)this->myHeap)->unk_5, ((UnkHeap*)this->myHeap)->unk_6, 4) != 0) {
+ ((UnkHeap*)this->myHeap)->unk_0 &= 0xfb;
+ this->action = 5;
+ this->direction = r5->direction;
+ this->speed = 0x160;
+ sub_08060E70(this, 8);
+ } else {
+ this->speed = 0x1e0;
+ sub_08061120(this, r5->x.HALF.HI, r5->y.HALF.HI, 0xc);
+ sub_08061170(this);
+ }
+ } else {
+ sub_08061464(this, r5->x.HALF.HI, r5->y.HALF.HI);
+ }
+ }
+
+ } else {
+ if (sub_08060FD0(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI) != 0) {
+ sub_08061090(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI);
+ sub_08061170(this);
+ ((UnkHeap*)this->myHeap)->unk_0 &= 0xf5;
+ } else {
+ ((UnkHeap*)this->myHeap) = (UnkHeap*)this->myHeap;
+ if ((((UnkHeap*)this->myHeap)->unk_0 & 8) != 0) {
+ this->speed = 0x1e0;
+ sub_08061120(this, ((UnkHeap*)this->myHeap)->unk_7, ((UnkHeap*)this->myHeap)->unk_8, 0xc);
+ sub_08061170(this);
+ if (sub_0806FCB8(this, ((UnkHeap*)this->myHeap)->unk_7, ((UnkHeap*)this->myHeap)->unk_8, 4) != 0) {
+ ((UnkHeap*)this->myHeap)->unk_0 &= 0xf7;
+ }
+ } else {
+ if ((((UnkHeap*)this->myHeap)->unk_0 & 2) == 0) {
+ ((UnkHeap*)this->myHeap)->unk_0 |= 2;
+ ((UnkHeap*)this->myHeap)->unk_3 = ((UnkHeap*)this->myHeap)->unk_1;
+ ((UnkHeap*)this->myHeap)->unk_4 = ((UnkHeap*)this->myHeap)->unk_2;
+ }
+ if (sub_08060FD0(this, ((UnkHeap*)this->myHeap)->unk_3, ((UnkHeap*)this->myHeap)->unk_4) != 0) {
+ this->speed = 0x1e0;
+ sub_08061120(this, ((UnkHeap*)this->myHeap)->unk_3, ((UnkHeap*)this->myHeap)->unk_4, 0xc);
+ sub_08061170(this);
+ if (sub_0806FCB8(this, ((UnkHeap*)this->myHeap)->unk_3, ((UnkHeap*)this->myHeap)->unk_4, 4) != 0) {
+ ((UnkHeap*)this->myHeap)->unk_0 &= 0xfd;
+ }
+ } else {
+ ((UnkHeap*)this->myHeap)->unk_0 &= 0xfd;
+ sub_08061464(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI);
+ }
+ }
+ }
+ }
+ if (sub_08060F80(this) != 0) {
+ this->action = 1;
+ ((UnkHeap*)this->myHeap)->unk_0 &= 0xfb;
+ sub_08060E70(this, 0);
+ }
+}
+
+void sub_08060D78(Entity* this) {
+ sub_08061358(this);
+ if (sub_08060F80(this) != 0) {
+ if ((u32)this->animIndex - 0x20 < 0x10) {
+ if ((this->frames.all & 7) != 0) {
+ this->frameDuration = 1;
+ UpdateAnimationSingleFrame(this);
+ }
+ this->animationState = this->frames.all & 0x18;
+ this->field_0x6c.HALF.LO = 0xff;
+ }
+ this->action = 1;
+ sub_08060E70(this, 0);
+ }
+}
+
+void sub_08060DD0(Entity* this) {
+ UpdateAnimationSingleFrame(this);
+ if ((this->frames.all & 0x80) != 0) {
+ this->action = 1;
+ sub_08060E70(this, 0);
+ }
+}
+
+void sub_08060DF4(Entity* this) {
+ sub_08061170(this);
+}
+
+void sub_08060DFC(Entity* this) {
+ u32 uVar1;
+
+ sub_0806F69C(this);
+ sub_08060E94(this);
+ uVar1 = sub_08003FC4(this, 0x2000);
+ if (uVar1 == 0) {
+ this->action = 7;
+ this->collisionLayer = 1;
+ UpdateSpriteForCollisionLayer(this);
+ sub_08060E70(this, 0x1c);
+ }
+}
+
+void sub_08060E34(Entity* this) {
+ UpdateAnimationSingleFrame(this);
+ if ((this->frames.all & 0x80) != 0) {
+ this->action = 2;
+ this->animationState = DirectionToAnimationState(GetFacingDirection(this, &gPlayerEntity)) * 2;
+ sub_08060E70(this, 8);
+ }
+}
+
+void sub_08060E70(Entity* this, u32 param) {
+ u32 tmp = param + this->animationState / 2;
+ if (tmp != this->animIndex) {
+ this->field_0x6c.HALF.LO = param;
+ InitAnimationForceUpdate(this, tmp);
+ }
+}
+
+void sub_08060E94(Entity* this) {
+ if (((*(u32*)&this->animIndex & 0x80ff00) == 0x800100) && (this->animIndex < 4)) {
+ InitAnimationForceUpdate(this, (this->animationState >> 1));
+ this->frameDuration = (Random() & 0x7f) + 0x80;
+ } else {
+ UpdateAnimationSingleFrame(this);
+ }
+}
+
+void sub_08060EDC(Entity* this) {
+ s32 tmp;
+
+ if (((u32)this->animIndex - 0x20 < 0x10) && ((this->frames.all & 0x80) == 0)) {
+ UpdateAnimationSingleFrame(this);
+ } else {
+ tmp = GetFacingDirection(this, &gPlayerEntity) + this->animationState * -4;
+ if (((tmp + 3) & 0x1f) >= 7) {
+ if ((tmp & 0x1f) < 0x10) {
+ InitAnimationForceUpdate(this, this->animationState + 0x20);
+ this->animationState = (this->animationState + 1) & 7;
+ } else {
+ InitAnimationForceUpdate(this, this->animationState + 0x28);
+ this->animationState = (this->animationState - 1) & 7;
+ }
+ } else {
+ if ((this->animationState & 1) == 0) {
+ if (((this->frames.all & 0x80) != 0) && (0xf >= (u32)this->animIndex - 0x20)) {
+ sub_08060E70(this, 0);
+ } else {
+ sub_08060E94(this);
+ }
+ }
+ }
+ }
+}
+u32 sub_08060F80(Entity* this) {
+ if (sub_08060FD0(this, (s32)gPlayerEntity.x.HALF.HI, (s32)gPlayerEntity.y.HALF.HI) == 0) {
+ return 0;
+ }
+ ((UnkHeap*)this->myHeap)->unk_0 &= 0xfb;
+ if (sub_0806FCD0(gPlayerEntity.x.HALF.HI - this->x.HALF.HI, gPlayerEntity.y.HALF.HI - this->y.HALF.HI,
+ ((UnkHeap*)this->myHeap)->unk_0b) != 0) {
+ return 1;
+ }
+ return 0;
+}
+
+NONMATCH("asm/non_matching/npc5/sub_08060FD0.inc", bool32 sub_08060FD0(Entity* this, u32 a, u32 b)) {
+ u32 sVar1;
+ u32 sVar2;
+ u32 uVar3;
+ s32 iVar4;
+ s32 iVar5;
+ s32 iVar6;
+ u32 r6;
+ u32 r7;
+ Entity* puVar9;
+ r7 = this->x.HALF.HI;
+ r6 = this->y.HALF.HI;
+ // asm("c");
+ uVar3 = sub_080045DA(a - r7, b - r6);
+ // asm("b");
+ r7 = r7 << 8;
+ r6 = r6 << 8;
+ // asm("a");
+ sVar1 = gSineTable[uVar3];
+ // asm("b");
+ sVar2 = gSineTable[uVar3 + 0x40];
+ asm("c");
+ puVar9 = &gUnk_0200D654;
+ if (this->collisionLayer != 2) {
+ puVar9 = &gUnk_02027EB4;
+ }
+code0:
+ // for(;;) {
+ asm("k");
+ if (r7 < 0) {
+ r7 += 0xff;
+ }
+ // asm("i");
+ if (r6 < 0) {
+ // asm("j");
+ r6 += 0xff;
+ }
+ // asm("k");
+ // asm("m");
+ if (sub_080AE4CC(puVar9, r7 >> 8, r6 >> 8, 6) != 0) {
+ return FALSE;
+ }
+ if (!(((a - (r7 >> 8)) + 6 < 0xd) && ((b - (r6 >> 8)) + 6 < 0xd))) {
+ r7 += sVar1 * 6;
+ r6 -= sVar2 * -6;
+ // asm("q");
+ // asm("r");
+ } else {
+ return TRUE;
+
+ // asm("p");
+ }
+ goto code0;
+// };
+code4:
+ // asm("l");
+ return FALSE;
+}
+END_NONMATCH
+
+void sub_08061090(Entity* this, u32 a, u32 b) {
+ s32 xDist;
+ s32 yDist;
+ s32 sqrDist;
+ u32 tmp;
+
+ xDist = gPlayerEntity.x.HALF.HI - this->x.HALF.HI;
+ yDist = gPlayerEntity.y.HALF.HI - this->y.HALF.HI;
+ sqrDist = (xDist * xDist) + (yDist * yDist);
+ if (sqrDist < 0x900) {
+ this->speed = 0x120;
+ } else {
+ if (sqrDist < 0x1900) {
+ this->speed = ((sqrDist - 0x900) >> 4) + 0x120;
+ } else {
+ this->speed = 0x220;
+ }
+ }
+ if (this->speed == 0x120) {
+ tmp = 4;
+ } else if (this->speed < 0x160) {
+ tmp = 8;
+ } else {
+ tmp = 0xc;
+ }
+ sub_08061120(this, a, b, tmp);
+}
+
+void sub_08061120(Entity* this, u32 param_a, u32 param_b, u32 param_c) {
+ this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, param_a, param_b);
+ if ((param_c != this->field_0x6c.HALF.LO) || (10 < ((this->direction + this->animationState * -4 + 5) & 0x1f))) {
+ this->animationState = DirectionRoundUp(this->direction) >> 2;
+ sub_08060E70(this, param_c);
+ }
+}
+
+NONMATCH("asm/non_matching/npc5/sub_08061170.inc", bool32 sub_08061170(Entity* this)) {
+ u32 direction;
+ u32 tmp;
+
+ UpdateAnimationSingleFrame(this);
+ if (sub_080AF1EC(this) == 0) {
+ direction = sub_080611D4(this);
+ if (direction != 0xff) {
+ this->action = 6;
+ tmp = (sub_08079FD4(this, 1) * 0x10 - 4);
+ // tmp <<= 0xc;
+ this->field_0x20 = tmp;
+ this->speed = 0x100;
+ this->direction = direction;
+ this->animationState = direction >> 2;
+ if (tmp >> 0x10 != 0) {
+ sub_08060E70(this, 0x14);
+ } else {
+ sub_08060E70(this, 0x18);
+ }
+ }
+ return FALSE;
+ } else {
+ sub_08016AD2(this);
+ return TRUE;
+ }
+}
+END_NONMATCH
+
+NONMATCH("asm/non_matching/npc5/sub_080611D4.inc", u32 sub_080611D4(Entity* this)) {
+ u8 bVar1;
+ u32 uVar2;
+ u8* pbVar3;
+
+ u32 x;
+ s32 a;
+ s32 b;
+ x = this->animationState & 6;
+ // asm("a");
+ a = gUnk_0810AC4C[x].unk_0;
+ // asm("c");
+ b = gUnk_0810AC4C[x].unk_1;
+ // asm("d");
+ uVar2 = sub_080002B4(this, a, b);
+// asm("b");
+code4:
+ if ((gUnk_0810AC54[0] != uVar2 || (this->animationState != gUnk_0810AC54[1] >> 2))) {
+ // asm ("e");
+ if (gUnk_0810AC54[2] == 0) {
+ this->field_0xf = 0;
+ return 0xff;
+ }
+ }
+ this->field_0xf += 1;
+ if (this->field_0xf < 8) {
+ return 0xff;
+ }
+ return gUnk_0810AC54[3];
+}
+END_NONMATCH
+
+u32 sub_08061230(Entity* this) {
+ if ((((UnkHeap*)this->myHeap)->unk_0 & 1) == 0) {
+ if ((this->bitfield & 0x80) != 0) {
+ switch (this->bitfield & 0x7f) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 0xf:
+ case 0x13:
+ case 0x1b:
+ case 0x1e:
+ case 0x1f:
+ break;
+ default:
+ ((UnkHeap*)this->myHeap)->unk_0 = ((UnkHeap*)this->myHeap)->unk_0 | 1;
+ InitAnimationForceUpdate(this, (this->animationState >> 1) + 0x40);
+ return 1;
+ }
+ }
+ } else {
+ UpdateAnimationSingleFrame(this);
+ if ((this->frames.all & 0x80) == 0) {
+ return 1;
+ }
+ ((UnkHeap*)this->myHeap)->unk_0 &= 0xfe;
+ InitAnimationForceUpdate(this, this->field_0x6c.HALF.LO + (this->animationState >> 1));
+ }
+ this->bitfield = this->bitfield & 0x7f;
+ if (this->iframes != 0) {
+ this->iframes += 1;
+ }
+ return 0;
+}
+
+NONMATCH("asm/non_matching/npc5/sub_08061358.inc", void sub_08061358(Entity* this)) {
+ u8 bVar1;
+ u32 uVar2;
+ s32 iVar3;
+ u8 bVar4;
+ u32 unaff_r6;
+
+ bVar4 = (u8)unaff_r6;
+
+ switch (this->subAction) {
+ case 0:
+ UpdateAnimationSingleFrame(this);
+ if ((this->frames.all & 0x80) == 0) {
+ return;
+ }
+ this->subAction = 1;
+ this->actionDelay = 0xf;
+ sub_08060E70(this, 0);
+ return;
+ case 1:
+ this->actionDelay -= 1;
+ asm("x");
+ if (this->actionDelay != 0) {
+ return;
+ }
+ uVar2 = Random();
+ // bVar4 = (u8)uVar2;
+ if ((uVar2 & 1) == 0)
+ goto _080613FA;
+ this->subAction = 2;
+ iVar3 = (u32)this->animationState * 2 + (uVar2 >> 4 & 3);
+ InitAnimationForceUpdate(this, (u32)(u8)(&gUnk_0810AC5D)[iVar3 + 1]);
+ break;
+ case 2:
+ UpdateAnimationSingleFrame(this);
+ if ((this->frames.all & 0x80) == 0) {
+ return;
+ }
+ this->animationState = (u8)(((u8)this->frames.all & 0x18) >> 2);
+ uVar2 = Random();
+ if ((uVar2 & 1) == 0) {
+ this->subAction = 0;
+ sub_08060E70(this, 0x10);
+ return;
+ }
+ _080613FA:
+ this->subAction = 3;
+ this->actionDelay = (bVar4 & 0x18) + 0x1e;
+ sub_08060E70(this, 4);
+ return;
+ case 3:
+ iVar3 = sub_08061170(this);
+ if (iVar3 != 0) {
+ this->subAction = this->actionDelay - 1;
+ this->actionDelay = this->subAction;
+ if (this->subAction != 0) {
+ return;
+ }
+ this->subAction = 0;
+ sub_08060E70(this, 0x10);
+ return;
+ }
+ this->subAction = 2;
+ iVar3 = (u32)this->animationState * 2 + (unaff_r6 >> 4 & 3);
+ InitAnimationForceUpdate(this, (u32)(u8)(&gUnk_0810AC5D)[iVar3 + 1]);
+ break;
+ }
+}
+END_NONMATCH
+
+NONMATCH("asm/non_matching/npc5/sub_08061464.inc", void sub_08061464(Entity* this, u32 param_a, u32 param_b)) {
+ u8 bVar1;
+ s16 sVar2;
+ s16 sVar3;
+ u16 uVar4;
+ u32 uVar6;
+ u32 uVar7;
+ s32 iVar8;
+ s32 iVar9;
+ s32 iVar10;
+ u16 uVar5;
+
+ sVar2 = this->x.HALF.HI;
+ iVar10 = (s32)sVar2;
+ sVar3 = this->y.HALF.HI;
+ iVar9 = (s32)sVar3;
+ uVar6 = sub_080045D4(sVar2, sVar3, param_a, param_b);
+ // uVar7 = (uVar6 + 2) & 0x1c;
+ // if (7 < uVar7 >> 2)
+ // goto _08061612;
+ // uVar4 = (u16)param_b;
+ // uVar5 = (u16)param_a;
+ // asm("----");
+ switch (uVar7) {
+ case 0:
+ this->field_0x6e.HALF.LO = uVar4;
+ if ((s32)param_a < this->x.HALF.HI) {
+ sub_08061630(this, iVar10, iVar9 + -8, param_a);
+ break;
+ }
+ goto _08061504;
+ case 4:
+ this->field_0x6e.HALF.LO = uVar5;
+ iVar8 = sub_08061720(this, iVar10 + 8, iVar9, param_b);
+ if (iVar8 != 0)
+ break;
+ this->field_0x6e.HALF.LO = uVar4;
+ _08061504:
+ sub_080616A8(this, iVar10, iVar9 + -8, param_a);
+ break;
+ case 8:
+ this->field_0x6e.HALF.LO = uVar5;
+ if ((s32)param_b < this->y.HALF.HI) {
+ sub_08061720(this, iVar10 + 8, iVar9, param_b);
+ } else {
+ sub_08061798(this, iVar10 + 8, iVar9, param_b);
+ }
+ break;
+ case 0xc:
+ this->field_0x6e.HALF.LO = uVar5;
+ iVar8 = sub_08061798(this, iVar10 + 8, iVar9, param_b);
+ if (iVar8 != 0)
+ break;
+ this->field_0x6e.HALF.LO = uVar4;
+ goto _08061574;
+ case 0x10:
+ this->field_0x6e.HALF.LO = uVar4;
+ if ((s32)param_a < this->x.HALF.HI)
+ goto _080615A4;
+ _08061574:
+ sub_08061888(this, iVar10, iVar9 + 8, param_a);
+ break;
+ case 0x14:
+ this->field_0x6e.HALF.LO = uVar5;
+ iVar8 = sub_08061978(this, iVar10 + -8, iVar9, param_b);
+ if (iVar8 != 0)
+ break;
+ this->field_0x6e.HALF.LO = uVar4;
+ _080615A4:
+ sub_08061810(this, iVar10, iVar9 + 8, param_a);
+ break;
+ case 0x18:
+ this->field_0x6e.HALF.LO = uVar5;
+ if ((s32)param_b < this->y.HALF.HI) {
+ sub_08061900(this, iVar10 + -8, iVar9, param_b);
+ } else {
+ sub_08061978(this, iVar10 + -8, iVar9, param_b);
+ }
+ break;
+ case 0x1c:
+ this->field_0x6e.HALF.LO = uVar5;
+ iVar8 = sub_08061900(this, iVar10 + -8, iVar9, param_b);
+ if (iVar8 == 0) {
+ this->field_0x6e.HALF.LO = uVar4;
+ sub_08061630(this, iVar10, iVar9 + -8, param_a);
+ }
+ }
+_08061612:
+ bVar1 = ((UnkHeap*)this->myHeap)->unk_0;
+ if ((bVar1 & 8) == 0) {
+ this->action = 3;
+ this->subAction = bVar1 & 8;
+ }
+}
+END_NONMATCH
+
+bool32 sub_08061630(Entity* this, s32 x, s32 y, s32 param) {
+ u32 param_y = y;
+ Entity* entity = (this->collisionLayer == 2) ? &gUnk_0200D654 : &gUnk_02027EB4;
+ while (!sub_080AE4CC(entity, x, y, 6)) {
+ if (sub_08061A74(entity, x, y, param)) {
+ ((UnkHeap*)this->myHeap)->unk_7 = x;
+ ((UnkHeap*)this->myHeap)->unk_8 = param_y;
+ ((UnkHeap*)this->myHeap)->unk_0 |= 8;
+ if (this->field_0x6e.HWORD >= y) {
+ return TRUE;
+ }
+ }
+ y -= 8;
+ }
+ return FALSE;
+}
+
+bool32 sub_080616A8(Entity* this, s32 x, s32 y, s32 param) {
+ u32 param_y = y;
+ Entity* entity = (this->collisionLayer == 2) ? &gUnk_0200D654 : &gUnk_02027EB4;
+ while (!sub_080AE4CC(entity, x, y, 6)) {
+ if (sub_08061A1C(entity, x, y, param)) {
+ ((UnkHeap*)this->myHeap)->unk_7 = x;
+ ((UnkHeap*)this->myHeap)->unk_8 = param_y;
+ ((UnkHeap*)this->myHeap)->unk_0 |= 8;
+ if (this->field_0x6e.HWORD >= y) {
+ return TRUE;
+ }
+ }
+ y -= 8;
+ }
+ return FALSE;
+}
+
+bool32 sub_08061720(Entity* this, s32 x, s32 y, s32 param) {
+ u32 param_x = x;
+ Entity* entity = (this->collisionLayer == 2) ? &gUnk_0200D654 : &gUnk_02027EB4;
+ while (!sub_080AE4CC(entity, x, y, 6)) {
+ if (sub_080619F0(entity, x, y, param)) {
+ ((UnkHeap*)this->myHeap)->unk_7 = param_x;
+ ((UnkHeap*)this->myHeap)->unk_8 = y;
+ ((UnkHeap*)this->myHeap)->unk_0 |= 8;
+ if (this->field_0x6e.HWORD <= x) {
+ return TRUE;
+ }
+ }
+ x += 8;
+ }
+ return FALSE;
+}
+
+bool32 sub_08061798(Entity* this, s32 x, s32 y, s32 param) {
+ u32 param_x = x;
+ Entity* entity = (this->collisionLayer == 2) ? &gUnk_0200D654 : &gUnk_02027EB4;
+ while (!sub_080AE4CC(entity, x, y, 6)) {
+ if (sub_08061A48(entity, x, y, param)) {
+ ((UnkHeap*)this->myHeap)->unk_7 = param_x;
+ ((UnkHeap*)this->myHeap)->unk_8 = y;
+ ((UnkHeap*)this->myHeap)->unk_0 |= 8;
+ if (this->field_0x6e.HWORD <= x) {
+ return TRUE;
+ }
+ }
+ x += 8;
+ }
+ return FALSE;
+}
+
+bool32 sub_08061810(Entity* this, s32 x, s32 y, s32 param) {
+ u32 param_y = y;
+ Entity* entity = (this->collisionLayer == 2) ? &gUnk_0200D654 : &gUnk_02027EB4;
+ while (!sub_080AE4CC(entity, x, y, 6)) {
+ if (sub_08061A74(entity, x, y, param)) {
+ ((UnkHeap*)this->myHeap)->unk_7 = x;
+ ((UnkHeap*)this->myHeap)->unk_8 = param_y;
+ ((UnkHeap*)this->myHeap)->unk_0 |= 8;
+ if (this->field_0x6e.HWORD <= y) {
+ return TRUE;
+ }
+ }
+ y += 8;
+ }
+ return FALSE;
+}
+
+bool32 sub_08061888(Entity* this, s32 x, s32 y, s32 param) {
+ u32 param_y = y;
+ Entity* entity = (this->collisionLayer == 2) ? &gUnk_0200D654 : &gUnk_02027EB4;
+ while (!sub_080AE4CC(entity, x, y, 6)) {
+ if (sub_08061A1C(entity, x, y, param)) {
+ ((UnkHeap*)this->myHeap)->unk_7 = x;
+ ((UnkHeap*)this->myHeap)->unk_8 = param_y;
+ ((UnkHeap*)this->myHeap)->unk_0 |= 8;
+ if (this->field_0x6e.HWORD <= y) {
+ return TRUE;
+ }
+ }
+ y += 8;
+ }
+ return FALSE;
+}
+
+bool32 sub_08061900(Entity* this, s32 x, s32 y, s32 param) {
+ u32 param_x = x;
+ Entity* entity = (this->collisionLayer == 2) ? &gUnk_0200D654 : &gUnk_02027EB4;
+ while (!sub_080AE4CC(entity, x, y, 6)) {
+ if (sub_080619F0(entity, x, y, param)) {
+ ((UnkHeap*)this->myHeap)->unk_7 = param_x;
+ ((UnkHeap*)this->myHeap)->unk_8 = y;
+ ((UnkHeap*)this->myHeap)->unk_0 |= 8;
+ if (this->field_0x6e.HWORD >= x) {
+ return TRUE;
+ }
+ }
+ x -= 8;
+ }
+ return FALSE;
+}
+
+bool32 sub_08061978(Entity* this, s32 x, s32 y, s32 param) {
+ u32 param_x = x;
+ Entity* entity = (this->collisionLayer == 2) ? &gUnk_0200D654 : &gUnk_02027EB4;
+ while (!sub_080AE4CC(entity, x, y, 6)) {
+ if (sub_08061A48(entity, x, y, param)) {
+ ((UnkHeap*)this->myHeap)->unk_7 = param_x;
+ ((UnkHeap*)this->myHeap)->unk_8 = y;
+ ((UnkHeap*)this->myHeap)->unk_0 |= 8;
+ if (this->field_0x6e.HWORD >= x) {
+ return TRUE;
+ }
+ }
+ x -= 8;
+ }
+ return FALSE;
+}
+
+bool32 sub_080619F0(Entity* this, s32 x, s32 y, s32 param) {
+ while (param <= y) {
+ if (sub_080AE4CC(this, x, y, 6) != 0) {
+ return FALSE;
+ }
+ y -= 8;
+ }
+ return TRUE;
+}
+
+bool32 sub_08061A1C(Entity* this, s32 x, s32 y, s32 param) {
+ while (param >= x) {
+ if (sub_080AE4CC(this, x, y, 6) != 0) {
+ return FALSE;
+ }
+ x += 8;
+ }
+ return TRUE;
+}
+
+bool32 sub_08061A48(Entity* this, s32 x, s32 y, s32 param) {
+ while (param >= y) {
+ if (sub_080AE4CC(this, x, y, 6) != 0) {
+ return FALSE;
+ }
+ y += 8;
+ }
+ return TRUE;
+}
+
+bool32 sub_08061A74(Entity* this, s32 x, s32 y, s32 param) {
+ while (param <= x) {
+ if (sub_080AE4CC(this, x, y, 6) != 0) {
+ return FALSE;
+ }
+ x -= 8;
+ }
+ return TRUE;
+}
+
+void sub_08061AA0() {
+ DeleteThisEntity();
+}
+
+void sub_08061AA8(Entity* this) {
+ gUnk_0810AC70[this->action](this);
+ CopyPosition(this->parent, this);
+}
+
+void sub_08061ACC(Entity* this) {
+ this->flags = this->flags | 0x20;
+ this->action = 1;
+ this->subAction = 0xff;
+ this->actionDelay = 0;
+ this->field_0x17 = this->field_0x17 & 0xfe;
+ sub_08078778(this);
+ sub_08061AFC(this);
+}
+
+void sub_08061AFC(Entity* this) {
+ u32 tmp = 0;
+ if (this->subAction != 0) {
+ this->subAction = tmp;
+ *((u16**)&this->field_0x68) = gUnk_0810B660[0];
+ this->actionDelay = 0;
+ }
+}
+
+NONMATCH("asm/non_matching/npc5/sub_08061B18.inc", void sub_08061B18(Entity* this)) {
+ u8 bVar1;
+ u16* puVar2;
+
+ typedef struct {
+ u16 unk_0;
+ u16 unk_2;
+ } Tmp;
+
+ switch(this->interactType) {
+ case 0:
+ break;
+ case 1:
+ this->interactType = 0;
+ sub_08061AFC(this);
+ //puVar2 = (u16*)(*(int*)&this->field_0x68 + (((u32)this->actionDelay << 0x18) >> 0x17));
+ // if puVar2[1] == 0
+ if ((((Tmp**)&this->field_0x68))[++this->actionDelay]->unk_2 == 0) {
+ this->actionDelay = 0;
+ }
+ TextboxNoOverlap((u32)*puVar2, this);
+ break;
+ }
+}
+END_NONMATCH
+
+void sub_08061B58(Entity* this) {
+ if (this->action == 0) {
+ this->action = 1;
+ InitAnimationForceUpdate(this, 2);
+ }
+ if (gScreenTransition.field_0x24[8] == 2) {
+ UpdateAnimationSingleFrame(this);
+ }
+ sub_0806FD3C(this);
+}