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); +}