From 0d98d00c01140fe63f6021a553db335f5883c27a Mon Sep 17 00:00:00 2001 From: Henny022p Date: Fri, 28 May 2021 06:20:14 +0200 Subject: [PATCH] decomp vaati arm --- asm/non_matching/vaati/sub_080432A8.inc | 89 + asm/non_matching/vaati/sub_0804334C.inc | 111 + asm/non_matching/vaati/sub_08043490.inc | 75 + asm/non_matching/vaati/sub_08043770.inc | 58 + asm/non_matching/vaati/sub_0804393C.inc | 109 + asm/non_matching/vaati/sub_08043B08.inc | 67 + asm/non_matching/vaati/sub_08043DB0.inc | 129 + asm/non_matching/vaati/sub_08044000.inc | 59 + asm/vaatiArm.s | 3745 ----------------------- data/const/enemy/vaatiArm.s | 193 -- include/structures.h | 5 +- linker.ld | 4 +- src/enemy/vaatiArm.c | 1460 +++++++++ 13 files changed, 2163 insertions(+), 3941 deletions(-) create mode 100644 asm/non_matching/vaati/sub_080432A8.inc create mode 100644 asm/non_matching/vaati/sub_0804334C.inc create mode 100644 asm/non_matching/vaati/sub_08043490.inc create mode 100644 asm/non_matching/vaati/sub_08043770.inc create mode 100644 asm/non_matching/vaati/sub_0804393C.inc create mode 100644 asm/non_matching/vaati/sub_08043B08.inc create mode 100644 asm/non_matching/vaati/sub_08043DB0.inc create mode 100644 asm/non_matching/vaati/sub_08044000.inc delete mode 100644 asm/vaatiArm.s delete mode 100644 data/const/enemy/vaatiArm.s create mode 100644 src/enemy/vaatiArm.c diff --git a/asm/non_matching/vaati/sub_080432A8.inc b/asm/non_matching/vaati/sub_080432A8.inc new file mode 100644 index 00000000..d075d6a5 --- /dev/null +++ b/asm/non_matching/vaati/sub_080432A8.inc @@ -0,0 +1,89 @@ + + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + movs r3, #3 + movs r2, #0 + ldr r0, [r4, #0x64] + adds r1, r0, #0 + adds r1, #0x48 + ldrb r0, [r1, #0xc] + cmp r0, #2 + bls _080432C2 + subs r0, #1 + strb r0, [r1, #0xc] + movs r2, #1 +_080432C2: + subs r3, #1 + cmp r3, #0 + blt _080432E0 + lsls r0, r3, #4 + adds r0, #0x18 + ldr r1, [r4, #0x64] + adds r1, r1, r0 + ldrb r0, [r1, #0xc] + cmp r0, #2 + bls _080432C2 + subs r0, #1 + strb r0, [r1, #0xc] + adds r2, #1 + cmp r2, #1 + ble _080432C2 +_080432E0: + ldr r0, [r4, #0x64] + adds r1, r0, #0 + adds r1, #0x18 + ldrb r0, [r1, #5] + subs r0, #2 + strb r0, [r1, #5] + movs r3, #0 + movs r6, #0x80 + movs r7, #4 + rsbs r7, r7, #0 + movs r5, #1 +_080432F6: + ldr r0, [r4, #0x64] + lsls r1, r3, #2 + adds r0, r0, r1 + ldr r2, [r0] + movs r1, #0x36 + ldrsh r0, [r2, r1] + cmp r0, #3 + bgt _08043316 + ldrb r0, [r2, #0x10] + orrs r0, r6 + strb r0, [r2, #0x10] + ldrb r1, [r2, #0x18] + adds r0, r7, #0 + ands r0, r1 + orrs r0, r5 + strb r0, [r2, #0x18] +_08043316: + adds r3, #1 + cmp r3, #3 + ble _080432F6 + ldr r1, [r4, #0x64] + ldr r0, [r1] + ldrb r0, [r0, #0x18] + lsls r0, r0, #0x1e + lsrs r2, r0, #0x1e + cmp r2, #1 + bne _08043348 + adds r0, r1, #0 + adds r0, #0x34 + ldrb r0, [r0] + cmp r0, #2 + bhi _08043348 + strb r2, [r4, #0xd] + movs r0, #0x1e + strb r0, [r4, #0xe] + movs r0, #0x80 + lsls r0, r0, #7 + strh r0, [r1, #0x1c] + ldr r0, [r4, #0x64] + ldr r0, [r0, #0x10] + bl sub_0804AA1C +_08043348: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/vaati/sub_0804334C.inc b/asm/non_matching/vaati/sub_0804334C.inc new file mode 100644 index 00000000..91e7120c --- /dev/null +++ b/asm/non_matching/vaati/sub_0804334C.inc @@ -0,0 +1,111 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xe] + cmp r0, #0 + beq _08043388 + subs r0, #1 + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0804341C + movs r5, #0 + movs r7, #0x80 + movs r6, #4 + rsbs r6, r6, #0 + movs r3, #1 +_0804336A: + ldr r0, [r4, #0x64] + lsls r1, r5, #2 + adds r0, r0, r1 + ldr r2, [r0] + ldrb r0, [r2, #0x10] + orrs r0, r7 + strb r0, [r2, #0x10] + ldrb r1, [r2, #0x18] + adds r0, r6, #0 + ands r0, r1 + orrs r0, r3 + strb r0, [r2, #0x18] + adds r5, #1 + cmp r5, #4 + bls _0804336A +_08043388: + ldr r3, [r4, #0x64] + adds r2, r3, #0 + adds r2, #0x18 + ldr r1, _080433AC @ =gUnk_080D131C + ldrb r0, [r4, #0xb] + adds r0, r0, r1 + ldrb r0, [r0] + ldrb r1, [r2, #1] + subs r0, r0, r1 + adds r0, #1 + cmp r0, #2 + bls _080433B0 + ldrh r0, [r2, #8] + ldrh r1, [r3, #0x18] + adds r0, r0, r1 + strh r0, [r3, #0x18] + movs r7, #0 + b _080433B2 + .align 2, 0 +_080433AC: .4byte gUnk_080D131C +_080433B0: + movs r7, #1 +_080433B2: + adds r0, r4, #0 + bl sub_08043B9C + movs r5, #0 + movs r6, #0x18 +_080433BC: + ldr r0, [r4, #0x64] + adds r2, r0, r6 + ldr r0, _080433E4 @ =gUnk_080D1414 + adds r0, r5, r0 + ldrb r1, [r2, #0xc] + ldrb r3, [r0] + cmp r3, r1 + bls _080433E8 + adds r0, r1, #1 + strb r0, [r2, #0xc] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r3, r0 + bne _0804341C + movs r0, #0xaf + lsls r0, r0, #1 + bl SoundReq + b _0804341C + .align 2, 0 +_080433E4: .4byte gUnk_080D1414 +_080433E8: + cmp r7, #0 + beq _08043414 + cmp r5, #4 + bne _08043414 + adds r0, r4, #0 + bl sub_08043BC8 + adds r0, r4, #0 + movs r1, #7 + bl InitAnimationForceUpdate + adds r1, r4, #0 + adds r1, #0x7e + ldrb r0, [r1] + cmp r0, #0 + beq _08043414 + movs r0, #0 + strb r0, [r1] + ldr r0, [r4, #0x64] + ldr r1, [r0, #0x14] + movs r0, #2 + strb r0, [r1, #0xd] +_08043414: + adds r6, #0x10 + adds r5, #1 + cmp r5, #4 + bls _080433BC +_0804341C: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/vaati/sub_08043490.inc b/asm/non_matching/vaati/sub_08043490.inc new file mode 100644 index 00000000..4b551fbe --- /dev/null +++ b/asm/non_matching/vaati/sub_08043490.inc @@ -0,0 +1,75 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r0, [r4, #0x64] + ldr r0, [r0, #0x10] + mov ip, r0 + ldrh r1, [r0, #0x36] + movs r2, #0x36 + ldrsh r0, [r0, r2] + movs r2, #4 + rsbs r2, r2, #0 + cmp r0, r2 + bge _080434C4 + movs r0, #0xc0 + lsls r0, r0, #9 + mov r3, ip + str r0, [r3, #0x20] + movs r0, #0 + movs r1, #2 + strb r1, [r4, #0xd] + adds r2, r4, #0 + adds r2, #0x7e + strb r0, [r2] + ldr r0, [r4, #0x64] + ldr r0, [r0, #0x14] + strb r1, [r0, #0xd] + b _08043514 +_080434C4: + subs r0, r1, #2 + mov r1, ip + strh r0, [r1, #0x36] + lsls r0, r0, #0x10 + cmp r0, #0 + bge _08043514 + ldrb r0, [r1, #0x10] + movs r3, #0x80 + orrs r0, r3 + strb r0, [r1, #0x10] + ldrb r1, [r1, #0x18] + adds r0, r2, #0 + ands r0, r1 + movs r1, #1 + orrs r0, r1 + mov r2, ip + strb r0, [r2, #0x18] + adds r2, #0x3c + ldrb r1, [r2] + movs r0, #0xef + ands r0, r1 + strb r0, [r2] + mov r1, ip + adds r1, #0x3f + movs r0, #0x3a + strb r0, [r1] + ldr r0, _0804351C @ =gUnk_080FD450 + mov r1, ip + str r0, [r1, #0x48] + ldr r0, [r4, #0x64] + ldr r1, [r0, #8] + ldrb r0, [r1, #0x10] + orrs r3, r0 + strb r3, [r1, #0x10] + ldr r0, [r4, #0x64] + ldr r2, [r0, #0xc] + ldrb r1, [r2, #0x10] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2, #0x10] +_08043514: + adds r0, r4, #0 + bl UpdateAnimationSingleFrame + pop {r4, pc} + .align 2, 0 +_0804351C: .4byte gUnk_080FD450 + .syntax divided diff --git a/asm/non_matching/vaati/sub_08043770.inc b/asm/non_matching/vaati/sub_08043770.inc new file mode 100644 index 00000000..7858154d --- /dev/null +++ b/asm/non_matching/vaati/sub_08043770.inc @@ -0,0 +1,58 @@ + .syntax unified + push {r4, r5, lr} + adds r2, r0, #0 + ldrb r0, [r2, #0xe] + subs r0, #1 + strb r0, [r2, #0xe] + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, #0 + bne _080437D8 + ldr r0, [r2, #0x64] + ldr r3, [r0, #0x14] + ldr r0, _080437AC @ =gScreenTransition + adds r5, r0, #0 + adds r5, #0x39 + ldrb r1, [r5] + movs r0, #0xc + ands r0, r1 + cmp r0, #0 + bne _0804379A + movs r0, #2 + strb r0, [r3, #0xd] +_0804379A: + ldrb r0, [r2, #0xb] + cmp r0, #0 + bne _080437B0 + ldr r0, [r3, #0x64] + str r4, [r0, #0x14] + ldrb r1, [r5] + movs r0, #0xfe + b _080437B8 + .align 2, 0 +_080437AC: .4byte gScreenTransition +_080437B0: + ldr r0, [r3, #0x64] + str r4, [r0, #0x18] + ldrb r1, [r5] + movs r0, #0xfd +_080437B8: + ands r0, r1 + strb r0, [r5] + ldr r0, [r2, #0x64] + ldr r0, [r0, #0x10] + movs r1, #0 + str r1, [r0, #0x64] + ldr r0, [r2, #0x64] + ldr r0, [r0, #0x10] + adds r0, #0x45 + strb r1, [r0] + ldr r1, [r2, #0x68] + ldr r0, [r2, #0x64] + ldr r0, [r0, #0x10] + str r0, [r1, #0x50] + bl DeleteThisEntity +_080437D8: + pop {r4, r5, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/vaati/sub_0804393C.inc b/asm/non_matching/vaati/sub_0804393C.inc new file mode 100644 index 00000000..1cd40fbe --- /dev/null +++ b/asm/non_matching/vaati/sub_0804393C.inc @@ -0,0 +1,109 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r5, r0, #0 + ldr r0, [r5, #0x64] + ldr r1, [r0] + adds r0, r1, #0 + adds r0, #0x7c + ldrb r0, [r0] + lsls r2, r0, #0x18 + cmp r2, #0 + beq _0804397C + adds r0, r1, #0 + adds r0, #0x7d + ldrb r0, [r0] + ldrb r1, [r5, #0xa] + cmp r0, r1 + bhi _0804397C + ldr r4, _08043978 @ =gUnk_080D1362 + ldrb r3, [r5, #0xa] + lsls r1, r3, #4 + lsrs r0, r2, #0x1b + movs r2, #0xf + ands r0, r2 + adds r1, r1, r0 + adds r1, r1, r4 + ldrb r4, [r1] + adds r6, r3, #0 + b _08043980 + .align 2, 0 +_08043978: .4byte gUnk_080D1362 +_0804397C: + movs r4, #0 + ldrb r6, [r5, #0xa] +_08043980: + lsls r0, r6, #4 + adds r0, #0x18 + ldr r2, [r5, #0x64] + mov ip, r2 + adds r2, r2, r0 + ldrb r0, [r2, #0xc] + adds r0, r4, r0 + lsls r4, r0, #8 + ldr r3, _08043A0C @ =gSineTable + ldrb r1, [r2, #5] + adds r0, r1, #0 + adds r0, #0x40 + lsls r0, r0, #1 + adds r0, r0, r3 + movs r7, #0 + ldrsh r0, [r0, r7] + rsbs r0, r0, #0 + adds r7, r0, #0 + muls r7, r4, r7 + mov r8, r7 + movs r0, #0x7f + ands r1, r0 + lsls r1, r1, #1 + adds r1, r1, r3 + movs r7, #0 + ldrsh r0, [r1, r7] + muls r0, r4, r0 + cmp r0, #0 + bge _080439BC + adds r0, #0xff +_080439BC: + asrs r4, r0, #8 + ldrb r1, [r2, #1] + lsls r0, r1, #1 + adds r0, r0, r3 + movs r2, #0 + ldrsh r0, [r0, r2] + adds r2, r0, #0 + muls r2, r4, r2 + adds r1, #0x40 + lsls r1, r1, #1 + adds r1, r1, r3 + movs r3, #0 + ldrsh r0, [r1, r3] + rsbs r0, r0, #0 + adds r3, r0, #0 + muls r3, r4, r3 + adds r0, r6, #1 + lsls r0, r0, #2 + add r0, ip + ldr r0, [r0] + adds r1, r5, #0 + bl PositionRelative + ldr r0, [r5, #0x34] + add r0, r8 + str r0, [r5, #0x34] + ldr r1, [r5, #0x64] + ldrb r0, [r5, #0xa] + adds r0, #1 + lsls r0, r0, #2 + adds r1, r1, r0 + ldr r0, [r1] + adds r0, #0x63 + ldrb r1, [r0] + adds r0, r5, #0 + adds r0, #0x63 + strb r1, [r0] + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08043A0C: .4byte gSineTable + .syntax divided diff --git a/asm/non_matching/vaati/sub_08043B08.inc b/asm/non_matching/vaati/sub_08043B08.inc new file mode 100644 index 00000000..d21677d2 --- /dev/null +++ b/asm/non_matching/vaati/sub_08043B08.inc @@ -0,0 +1,67 @@ + .syntax unified + push {r4, r5, r6, lr} + ldrb r3, [r0, #0xa] + lsls r1, r3, #4 + adds r4, r1, #0 + adds r4, #8 + ldr r2, [r0, #0x64] + adds r6, r2, r4 + adds r1, #0x18 + adds r4, r2, r1 + ldr r0, _08043B40 @ =gUnk_080D13B2 + adds r3, r3, r0 + ldrb r5, [r3] + ldr r0, [r2] + ldrb r0, [r0, #0xb] + cmp r0, #0 + bne _08043B44 + ldrb r1, [r6, #1] + ldrb r0, [r4, #1] + subs r0, r1, r0 + lsls r0, r0, #0x18 + asrs r3, r0, #0x18 + cmp r5, r3 + bhs _08043B5E + cmp r3, #0 + ble _08043B56 + subs r0, r1, r5 + b _08043B5C + .align 2, 0 +_08043B40: .4byte gUnk_080D13B2 +_08043B44: + ldrb r0, [r4, #1] + ldrb r1, [r6, #1] + subs r0, r0, r1 + lsls r0, r0, #0x18 + asrs r3, r0, #0x18 + cmp r5, r3 + bhs _08043B5E + cmp r3, #0 + bge _08043B5A +_08043B56: + strb r1, [r4, #1] + b _08043B5E +_08043B5A: + adds r0, r1, r5 +_08043B5C: + strb r0, [r4, #1] +_08043B5E: + ldrb r2, [r6, #5] + ldrb r0, [r4, #5] + subs r3, r2, r0 + lsls r1, r5, #1 + adds r0, r3, r5 + cmp r1, r0 + bhs _08043B78 + cmp r3, #0 + ble _08043B74 + subs r0, r2, r5 + b _08043B76 +_08043B74: + adds r0, r2, r5 +_08043B76: + strb r0, [r4, #5] +_08043B78: + pop {r4, r5, r6, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/vaati/sub_08043DB0.inc b/asm/non_matching/vaati/sub_08043DB0.inc new file mode 100644 index 00000000..abd69612 --- /dev/null +++ b/asm/non_matching/vaati/sub_08043DB0.inc @@ -0,0 +1,129 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r5, r0, #0 + ldr r0, _08043E48 @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08043EAC + ldr r0, [r5, #0x64] + ldr r2, [r0, #0xc] + movs r1, #0x2e + ldrsh r0, [r2, r1] + ldr r6, _08043E4C @ =gRoomControls + ldrh r1, [r6, #6] + subs r0, r0, r1 + movs r3, #0x32 + ldrsh r1, [r2, r3] + ldrh r2, [r6, #8] + subs r1, r1, r2 + adds r1, #2 + movs r2, #3 + movs r3, #3 + bl CheckPlayerInRegion + cmp r0, #0 + beq _08043EAC + ldr r0, _08043E50 @ =gUnk_080D13EC + bl DoExitTransition + ldr r4, _08043E54 @ =gScreenTransition + adds r0, r4, #0 + adds r0, #0x39 + ldrb r1, [r0] + movs r0, #3 + ands r0, r1 + cmp r0, #3 + beq _08043DFE + movs r0, #1 + strb r0, [r4, #0xd] +_08043DFE: + adds r0, r5, #0 + adds r0, #0x7a + ldrh r0, [r0] + movs r1, #0x3c + bl __divsi3 + movs r1, #0x1e + subs r1, r1, r0 + adds r0, r4, #0 + adds r0, #0x3d + strb r1, [r0] + ldrb r1, [r5, #0xb] + subs r0, #1 + strb r1, [r0] + ldr r0, [r5, #0x64] + ldr r2, [r0, #0x14] + ldrh r1, [r2, #0x2e] + adds r0, r4, #0 + adds r0, #0x40 + strh r1, [r0] + ldrh r0, [r2, #0x32] + adds r1, r4, #0 + adds r1, #0x42 + strh r0, [r1] + ldr r0, [r2, #0x64] + ldr r3, [r0, #0x14] + cmp r3, #0 + beq _08043E58 + ldrh r1, [r3, #0x2e] + adds r0, r4, #0 + adds r0, #0x44 + strh r1, [r0] + ldrh r1, [r3, #0x32] + adds r0, #2 + strh r1, [r0] + b _08043E70 + .align 2, 0 +_08043E48: .4byte gPlayerState +_08043E4C: .4byte gRoomControls +_08043E50: .4byte gUnk_080D13EC +_08043E54: .4byte gScreenTransition +_08043E58: + movs r1, #0x88 + lsls r1, r1, #1 + adds r0, r1, #0 + ldrh r3, [r6, #6] + adds r0, r0, r3 + adds r1, r4, #0 + adds r1, #0x44 + strh r0, [r1] + ldrh r0, [r6, #8] + adds r0, #0x60 + adds r1, #2 + strh r0, [r1] +_08043E70: + ldr r0, [r2, #0x64] + ldr r3, [r0, #0x18] + cmp r3, #0 + beq _08043E90 + ldr r1, _08043E8C @ =gScreenTransition + ldrh r2, [r3, #0x2e] + adds r0, r1, #0 + adds r0, #0x48 + strh r2, [r0] + ldrh r0, [r3, #0x32] + adds r1, #0x4a + strh r0, [r1] + b _08043EAC + .align 2, 0 +_08043E8C: .4byte gScreenTransition +_08043E90: + ldr r2, _08043EB0 @ =gScreenTransition + ldr r3, _08043EB4 @ =gRoomControls + movs r1, #0x88 + lsls r1, r1, #1 + adds r0, r1, #0 + ldrh r1, [r3, #6] + adds r0, r0, r1 + adds r1, r2, #0 + adds r1, #0x48 + strh r0, [r1] + ldrh r0, [r3, #8] + adds r0, #0x60 + adds r2, #0x4a + strh r0, [r2] +_08043EAC: + pop {r4, r5, r6, pc} + .align 2, 0 +_08043EB0: .4byte gScreenTransition +_08043EB4: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/vaati/sub_08044000.inc b/asm/non_matching/vaati/sub_08044000.inc new file mode 100644 index 00000000..eb4a964a --- /dev/null +++ b/asm/non_matching/vaati/sub_08044000.inc @@ -0,0 +1,59 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xb] + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #1 + ldr r0, _08044070 @ =gUnk_080D1400 + movs r3, #0 + ldr r2, _08044074 @ =gUnk_080D1414 + mov ip, r2 + movs r7, #8 + rsbs r7, r7, #0 + adds r5, r1, r0 + movs r6, #0x18 +_0804401C: + ldr r0, [r4, #0x64] + lsls r1, r3, #2 + adds r0, r0, r1 + ldr r2, [r0] + ldrb r1, [r2, #0x10] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2, #0x10] + adds r2, #0x29 + ldrb r1, [r2] + adds r0, r7, #0 + ands r0, r1 + movs r1, #4 + orrs r0, r1 + strb r0, [r2] + ldr r1, [r4, #0x64] + adds r1, r1, r6 + ldrh r0, [r5] + strh r0, [r1] + movs r0, #0x80 + lsls r0, r0, #7 + strh r0, [r1, #4] + mov r2, ip + adds r0, r3, r2 + ldrb r0, [r0] + strb r0, [r1, #0xc] + adds r5, #2 + adds r6, #0x10 + adds r3, #1 + cmp r3, #4 + bls _0804401C + adds r0, r4, #0 + movs r1, #7 + bl InitAnimationForceUpdate + ldr r1, [r4, #0x64] + ldr r0, [r1, #0x14] + ldr r1, [r1, #0x10] + bl CopyPosition + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08044070: .4byte gUnk_080D1400 +_08044074: .4byte gUnk_080D1414 + .syntax divided diff --git a/asm/vaatiArm.s b/asm/vaatiArm.s deleted file mode 100644 index b8d9e69f..00000000 --- a/asm/vaatiArm.s +++ /dev/null @@ -1,3745 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start VaatiArm -VaatiArm: @ 0x08042554 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _0804256C @ =gUnk_080D1230 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - pop {r4, r5, pc} - .align 2, 0 -_0804256C: .4byte gUnk_080D1230 - - thumb_func_start sub_08042570 -sub_08042570: @ 0x08042570 - push {lr} - ldr r2, _08042584 @ =gUnk_080D1248 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08042584: .4byte gUnk_080D1248 - - thumb_func_start sub_08042588 -sub_08042588: @ 0x08042588 - push {lr} - ldr r1, _08042594 @ =gUnk_080D1230 - bl sub_0804AA30 - pop {pc} - .align 2, 0 -_08042594: .4byte gUnk_080D1230 - - thumb_func_start nullsub_170 -nullsub_170: @ 0x08042598 - bx lr - .align 2, 0 - - thumb_func_start sub_0804259C -sub_0804259C: @ 0x0804259C - push {lr} - ldr r2, _080425B0 @ =gUnk_080D125C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080425B0: .4byte gUnk_080D125C - - thumb_func_start sub_080425B4 -sub_080425B4: @ 0x080425B4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl sub_080437DC - cmp r0, #0 - beq _0804264C - adds r0, r4, #0 - adds r0, #0x7c - movs r1, #0 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - ldr r5, _08042614 @ =gScreenTransition - adds r0, r5, #0 - adds r0, #0x38 - ldrb r0, [r0] - movs r6, #1 - adds r1, r6, #0 - ands r1, r0 - cmp r1, #0 - beq _08042634 - adds r0, r5, #0 - adds r0, #0x3c - ldrb r0, [r0] - ldrb r1, [r4, #0xb] - cmp r0, r1 - bne _08042620 - adds r0, r4, #0 - bl sub_08043EB8 - adds r0, r4, #0 - bl sub_08043ABC - adds r0, r5, #0 - adds r0, #0x39 - ldrb r1, [r0] - ldrb r0, [r4, #0xb] - adds r0, #2 - asrs r1, r0 - ands r1, r6 - cmp r1, #0 - beq _08042618 - movs r0, #7 - strb r0, [r4, #0xc] - movs r0, #4 - strb r0, [r4, #0xd] - b _0804264C - .align 2, 0 -_08042614: .4byte gScreenTransition -_08042618: - movs r0, #8 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - b _0804264C -_08042620: - adds r0, r4, #0 - bl sub_08044000 - adds r0, r4, #0 - bl sub_08043BC8 - adds r0, r4, #0 - bl sub_08043A10 - b _0804264C -_08042634: - strb r6, [r4, #0xc] - strb r1, [r4, #0xd] - ldr r2, [r4, #0x64] - ldr r1, _08042650 @ =gUnk_080D1280 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #0x20] - adds r0, r4, #0 - bl sub_08042654 -_0804264C: - pop {r4, r5, r6, pc} - .align 2, 0 -_08042650: .4byte gUnk_080D1280 - - thumb_func_start sub_08042654 -sub_08042654: @ 0x08042654 - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldrb r0, [r6, #0xb] - lsls r3, r0, #2 - ldr r0, [r6, #0x64] - adds r2, r0, #0 - adds r2, #0x18 - ldrb r0, [r6, #0xd] - cmp r0, #4 - bls _0804266A - b _080427FC -_0804266A: - lsls r0, r0, #2 - ldr r1, _08042674 @ =_08042678 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08042674: .4byte _08042678 -_08042678: @ jump table - .4byte _0804268C @ case 0 - .4byte _080426B0 @ case 1 - .4byte _080426E0 @ case 2 - .4byte _08042710 @ case 3 - .4byte _08042740 @ case 4 -_0804268C: - movs r0, #1 - strb r0, [r6, #0xd] - ldr r1, _080426A8 @ =gUnk_080D1284 - ldrb r0, [r6, #0xb] - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r2, #1] - ldr r1, _080426AC @ =gUnk_080D1286 - ldrb r0, [r6, #0xb] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r6, #0 - b _080427EE - .align 2, 0 -_080426A8: .4byte gUnk_080D1284 -_080426AC: .4byte gUnk_080D1286 -_080426B0: - ldrh r0, [r2, #8] - ldrh r1, [r2] - adds r0, r0, r1 - strh r0, [r2] - ldr r1, [r6, #0x64] - adds r1, #0x34 - ldrb r0, [r1] - adds r0, #2 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xb - bhi _080426CC - b _0804280E -_080426CC: - movs r0, #2 - strb r0, [r6, #0xd] - ldr r1, _080426DC @ =gUnk_080D1286 - adds r0, r3, #1 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r6, #0 - b _080427EE - .align 2, 0 -_080426DC: .4byte gUnk_080D1286 -_080426E0: - ldrh r0, [r2, #8] - ldrh r1, [r2] - adds r0, r0, r1 - strh r0, [r2] - ldr r1, [r6, #0x64] - adds r1, #0x44 - ldrb r0, [r1] - adds r0, #2 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xd - bhi _080426FC - b _0804280E -_080426FC: - movs r0, #3 - strb r0, [r6, #0xd] - ldr r1, _0804270C @ =gUnk_080D1286 - adds r0, r3, #2 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r6, #0 - b _080427EE - .align 2, 0 -_0804270C: .4byte gUnk_080D1286 -_08042710: - ldrh r0, [r2, #8] - ldrh r1, [r2] - adds r0, r0, r1 - strh r0, [r2] - ldr r1, [r6, #0x64] - adds r1, #0x54 - ldrb r0, [r1] - adds r0, #2 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xf - bls _0804280E - movs r0, #4 - strb r0, [r6, #0xd] - ldr r1, _0804273C @ =gUnk_080D1286 - adds r0, r3, #3 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r6, #0 - b _080427EE - .align 2, 0 -_0804273C: .4byte gUnk_080D1286 -_08042740: - ldrh r0, [r2, #8] - ldrh r1, [r2] - adds r0, r0, r1 - strh r0, [r2] - ldr r1, [r6, #0x64] - adds r1, #0x64 - ldrb r0, [r1] - adds r0, #2 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x1b - bls _0804280E - movs r0, #5 - strb r0, [r6, #0xd] - movs r0, #0x5a - strb r0, [r6, #0xe] - ldr r0, [r6, #0x64] - ldr r1, [r0] - ldrb r0, [r1, #0x10] - movs r5, #0x80 - orrs r0, r5 - strb r0, [r1, #0x10] - ldr r0, [r6, #0x64] - ldr r1, [r0] - adds r1, #0x29 - ldrb r2, [r1] - movs r3, #8 - rsbs r3, r3, #0 - adds r0, r3, #0 - ands r0, r2 - movs r4, #4 - orrs r0, r4 - strb r0, [r1] - ldr r0, [r6, #0x64] - ldr r1, [r0, #4] - ldrb r0, [r1, #0x10] - orrs r0, r5 - strb r0, [r1, #0x10] - ldr r0, [r6, #0x64] - ldr r1, [r0, #4] - adds r1, #0x29 - ldrb r2, [r1] - adds r0, r3, #0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - ldr r0, [r6, #0x64] - ldr r1, [r0, #8] - ldrb r0, [r1, #0x10] - orrs r0, r5 - strb r0, [r1, #0x10] - ldr r0, [r6, #0x64] - ldr r1, [r0, #8] - adds r1, #0x29 - ldrb r2, [r1] - adds r0, r3, #0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - ldr r0, [r6, #0x64] - ldr r1, [r0, #0xc] - ldrb r0, [r1, #0x10] - orrs r0, r5 - strb r0, [r1, #0x10] - ldr r0, [r6, #0x64] - ldr r1, [r0, #0xc] - adds r1, #0x29 - ldrb r2, [r1] - adds r0, r3, #0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - ldr r0, [r6, #0x64] - ldr r1, [r0, #0x10] - ldrb r0, [r1, #0x10] - orrs r0, r5 - strb r0, [r1, #0x10] - ldr r0, [r6, #0x64] - ldr r0, [r0, #0x10] - adds r0, #0x29 - ldrb r1, [r0] - ands r3, r1 - orrs r3, r4 - strb r3, [r0] - adds r0, r6, #0 - movs r1, #7 -_080427EE: - bl InitAnimationForceUpdate - movs r0, #0xaf - lsls r0, r0, #1 - bl SoundReq - b _0804280E -_080427FC: - ldrb r0, [r6, #0xe] - subs r0, #1 - strb r0, [r6, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0804280E - adds r0, r6, #0 - bl sub_08043BC8 -_0804280E: - adds r0, r6, #0 - bl sub_08043A10 - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08042818 -sub_08042818: @ 0x08042818 - push {r4, lr} - adds r4, r0, #0 - bl sub_08043CD4 - ldr r0, [r4, #0x64] - adds r2, r0, #0 - adds r2, #0x18 - ldrh r1, [r2, #8] - ldrh r3, [r0, #0x18] - adds r1, r1, r3 - strh r1, [r0, #0x18] - ldrb r0, [r2, #0xd] - subs r0, #1 - strb r0, [r2, #0xd] - movs r1, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042848 - movs r0, #0x78 - strb r0, [r2, #0xd] - movs r3, #8 - ldrsh r0, [r2, r3] - rsbs r0, r0, #0 - strh r0, [r2, #8] -_08042848: - ldrh r0, [r2, #0xa] - ldrh r3, [r2, #4] - adds r0, r0, r3 - strh r0, [r2, #4] - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - ands r0, r1 - cmp r0, #0 - bne _08042868 - movs r0, #0x50 - strb r0, [r2, #0xe] - movs r1, #0xa - ldrsh r0, [r2, r1] - rsbs r0, r0, #0 - strh r0, [r2, #0xa] -_08042868: - adds r0, r4, #0 - bl sub_08043A10 - pop {r4, pc} - - thumb_func_start sub_08042870 -sub_08042870: @ 0x08042870 - push {r4, lr} - adds r4, r0, #0 - bl sub_08043CD4 - ldr r1, _08042890 @ =gUnk_080D1290 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_08043A10 - pop {r4, pc} - .align 2, 0 -_08042890: .4byte gUnk_080D1290 - - thumb_func_start sub_08042894 -sub_08042894: @ 0x08042894 - movs r1, #1 - strb r1, [r0, #0xd] - ldr r2, [r0, #0x64] - ldr r1, _080428A8 @ =gUnk_080D12AC - ldrb r0, [r0, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #0x20] - bx lr - .align 2, 0 -_080428A8: .4byte gUnk_080D12AC - - thumb_func_start sub_080428AC -sub_080428AC: @ 0x080428AC - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - adds r3, r0, #0 - adds r3, #0x18 - ldrb r0, [r3, #5] - cmp r0, #0x40 - beq _080428CC - cmp r0, #0x40 - bls _080428C6 - ldrh r0, [r3, #4] - subs r0, #0x80 - b _080428CA -_080428C6: - ldrh r0, [r3, #4] - adds r0, #0x80 -_080428CA: - strh r0, [r3, #4] -_080428CC: - ldrb r1, [r3, #1] - ldr r2, _080428E8 @ =gUnk_080D12B0 - ldrb r0, [r4, #0xb] - adds r0, r0, r2 - ldrb r0, [r0] - subs r1, r1, r0 - adds r1, #1 - cmp r1, #2 - bls _080428EC - ldrh r0, [r3, #8] - ldrh r1, [r3] - adds r0, r0, r1 - strh r0, [r3] - b _080428F4 - .align 2, 0 -_080428E8: .4byte gUnk_080D12B0 -_080428EC: - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x1e - strb r0, [r4, #0xe] -_080428F4: - adds r0, r4, #0 - bl sub_08043BF0 - pop {r4, pc} - - thumb_func_start sub_080428FC -sub_080428FC: @ 0x080428FC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0804293C - movs r0, #3 - strb r0, [r4, #0xd] - ldr r1, [r4, #0x64] - adds r1, #0x18 - movs r0, #8 - ldrsh r2, [r1, r0] - lsls r0, r2, #1 - adds r0, r0, r2 - rsbs r0, r0, #0 - strh r0, [r1, #8] - ldr r0, _08042940 @ =0x00000153 - bl SoundReq - movs r2, #0 - movs r3, #0x3b -_0804292A: - ldr r0, [r4, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x3f - strb r3, [r0] - adds r2, #1 - cmp r2, #4 - bls _0804292A -_0804293C: - pop {r4, pc} - .align 2, 0 -_08042940: .4byte 0x00000153 - - thumb_func_start sub_08042944 -sub_08042944: @ 0x08042944 - push {lr} - adds r3, r0, #0 - ldr r2, [r3, #0x64] - adds r1, r2, #0 - adds r1, #0x18 - ldrb r0, [r1, #1] - subs r0, #0x7c - cmp r0, #8 - bls _08042960 - ldrh r0, [r1, #8] - ldrh r1, [r2, #0x18] - adds r0, r0, r1 - strh r0, [r2, #0x18] - b _08042968 -_08042960: - movs r0, #4 - strb r0, [r3, #0xd] - ldrh r0, [r1, #8] - strh r0, [r3, #0x24] -_08042968: - adds r0, r3, #0 - bl sub_08043BF0 - pop {pc} - - thumb_func_start sub_08042970 -sub_08042970: @ 0x08042970 - push {r4, r5, lr} - adds r3, r0, #0 - ldr r4, [r3, #0x64] - adds r2, r4, #0 - adds r2, #0x18 - ldrb r0, [r2, #1] - ldr r1, _080429A4 @ =gUnk_080D12B2 - ldrb r5, [r3, #0xb] - adds r1, r5, r1 - ldrb r1, [r1] - subs r0, r0, r1 - adds r0, #2 - cmp r0, #4 - bls _080429AC - ldr r0, _080429A8 @ =gUnk_080D12B4 - adds r0, r5, r0 - movs r1, #0 - ldrsb r1, [r0, r1] - ldrh r0, [r2, #8] - adds r1, r1, r0 - strh r1, [r2, #8] - ldrh r0, [r4, #0x18] - adds r0, r0, r1 - strh r0, [r4, #0x18] - b _080429CA - .align 2, 0 -_080429A4: .4byte gUnk_080D12B2 -_080429A8: .4byte gUnk_080D12B4 -_080429AC: - movs r0, #5 - strb r0, [r3, #0xd] - movs r0, #0x3c - strb r0, [r3, #0xe] - movs r2, #0 - movs r4, #0x39 -_080429B8: - ldr r0, [r3, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x3f - strb r4, [r0] - adds r2, #1 - cmp r2, #4 - bls _080429B8 -_080429CA: - adds r0, r3, #0 - bl sub_08043BF0 - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080429D4 -sub_080429D4: @ 0x080429D4 - push {r4, lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080429FA - movs r0, #6 - strb r0, [r1, #0xd] - ldr r4, [r1, #0x64] - adds r4, #0x18 - movs r2, #0x24 - ldrsh r0, [r1, r2] - rsbs r0, r0, #0 - movs r1, #6 - bl __divsi3 - strh r0, [r4, #8] -_080429FA: - pop {r4, pc} - - thumb_func_start sub_080429FC -sub_080429FC: @ 0x080429FC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r3, [r4, #0x64] - adds r5, r3, #0 - adds r5, #0x18 - ldrb r1, [r5, #1] - ldr r2, _08042A28 @ =gUnk_080D12B6 - ldrb r0, [r4, #0xb] - adds r0, r0, r2 - ldrb r0, [r0] - subs r1, r1, r0 - adds r1, #1 - cmp r1, #2 - bls _08042A2C - ldrh r0, [r5, #8] - ldrh r1, [r3, #0x18] - adds r0, r0, r1 - strh r0, [r3, #0x18] - adds r0, r4, #0 - bl sub_08043BF0 - b _08042A3A - .align 2, 0 -_08042A28: .4byte gUnk_080D12B6 -_08042A2C: - adds r0, r4, #0 - bl sub_08043BC8 - adds r0, r4, #0 - movs r1, #7 - bl InitAnimationForceUpdate -_08042A3A: - pop {r4, r5, pc} - - thumb_func_start sub_08042A3C -sub_08042A3C: @ 0x08042A3C - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08042A68 @ =gUnk_080D12B8 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_08043A10 - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x10] - adds r4, #0x78 - ldrh r0, [r1, #0x36] - ldrb r4, [r4] - adds r0, r0, r4 - strh r0, [r1, #0x36] - pop {r4, pc} - .align 2, 0 -_08042A68: .4byte gUnk_080D12B8 - - thumb_func_start sub_08042A6C -sub_08042A6C: @ 0x08042A6C - adds r3, r0, #0 - movs r2, #0 - movs r1, #1 - strb r1, [r3, #0xd] - adds r0, #0x78 - strb r2, [r0] - adds r0, #6 - strb r1, [r0] - ldr r1, [r3, #0x64] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r1, #0x22] - bx lr - .align 2, 0 - - thumb_func_start sub_08042A88 -sub_08042A88: @ 0x08042A88 - push {r4, lr} - adds r4, r0, #0 - ldr r3, [r4, #0x64] - adds r2, r3, #0 - adds r2, #0x18 - ldr r1, _08042AA8 @ =gUnk_080D12C8 - ldrb r0, [r4, #0xb] - adds r0, r0, r1 - ldrb r1, [r0] - ldrb r0, [r2, #1] - cmp r1, r0 - beq _08042ABC - cmp r1, r0 - bhs _08042AB0 - ldr r1, _08042AAC @ =0xFFFFFF00 - b _08042AB4 - .align 2, 0 -_08042AA8: .4byte gUnk_080D12C8 -_08042AAC: .4byte 0xFFFFFF00 -_08042AB0: - movs r1, #0x80 - lsls r1, r1, #1 -_08042AB4: - adds r0, r1, #0 - ldrh r1, [r3, #0x18] - adds r0, r0, r1 - strh r0, [r3, #0x18] -_08042ABC: - movs r1, #0xa - ldrsh r0, [r2, r1] - ldrh r1, [r2, #4] - cmp r0, r1 - bge _08042ACE - ldrh r0, [r2, #0xa] - subs r0, r1, r0 - strh r0, [r2, #4] - b _08042AE6 -_08042ACE: - movs r0, #0 - strh r0, [r2, #4] - ldr r1, _08042AE8 @ =gUnk_080D12CA - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #8] - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x1e - strb r0, [r4, #0xe] -_08042AE6: - pop {r4, pc} - .align 2, 0 -_08042AE8: .4byte gUnk_080D12CA - - thumb_func_start sub_08042AEC -sub_08042AEC: @ 0x08042AEC - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042B1C - movs r0, #3 - strb r0, [r5, #0xd] - movs r0, #4 - strb r0, [r5, #0xe] - adds r0, r5, #0 - adds r0, #0x3f - movs r4, #0x3d - strb r4, [r0] - adds r0, r5, #0 - movs r1, #0xe - bl InitAnimationForceUpdate - ldr r0, [r5, #0x64] - ldr r0, [r0, #4] - adds r0, #0x3f - strb r4, [r0] -_08042B1C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08042B20 -sub_08042B20: @ 0x08042B20 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldr r0, [r5, #0x64] - adds r1, r0, #0 - adds r1, #0x18 - ldrb r0, [r1, #5] - cmp r0, #0x7a - bhi _08042B3E - movs r2, #0xa0 - lsls r2, r2, #3 - adds r0, r2, #0 - ldrh r2, [r1, #4] - adds r0, r0, r2 - strh r0, [r1, #4] - b _08042B42 -_08042B3E: - movs r0, #0x80 - strb r0, [r1, #5] -_08042B42: - ldrb r0, [r1, #5] - cmp r0, #0x30 - bls _08042B50 - ldrh r0, [r1, #8] - ldrh r2, [r1] - adds r0, r0, r2 - strh r0, [r1] -_08042B50: - ldr r0, [r5, #0x64] - ldr r0, [r0, #0xc] - ldrb r0, [r0, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - beq _08042BE0 - adds r0, r5, #0 - bl sub_08043C40 - movs r6, #0 - movs r7, #0xa - rsbs r7, r7, #0 -_08042B68: - ldr r0, [r5, #0x64] - lsls r1, r6, #2 - adds r0, r0, r1 - ldr r4, [r0] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, r7 - blt _08042BD4 - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - cmp r0, #1 - bne _08042BD4 - cmp r6, #0 - bne _08042BBA - movs r0, #0xaf - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08042B9C - ldr r0, [r5, #0x64] - ldr r0, [r0, #0x10] - str r0, [r1, #0x50] -_08042B9C: - ldr r0, [r5, #0x64] - ldr r0, [r0, #0x10] - str r1, [r0, #0x68] - movs r0, #0xaf - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08042BBA - ldr r0, [r5, #0x64] - ldr r0, [r0, #0x10] - bl CopyPosition -_08042BBA: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r0, [r4, #0x18] - movs r2, #4 - rsbs r2, r2, #0 - adds r1, r2, #0 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, _08042BDC @ =0x00000161 - bl SoundReq -_08042BD4: - adds r6, #1 - cmp r6, #3 - bls _08042B68 - b _08042C12 - .align 2, 0 -_08042BDC: .4byte 0x00000161 -_08042BE0: - adds r0, r5, #0 - adds r0, #0x78 - ldrb r1, [r0] - adds r1, #2 - strb r1, [r0] - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _08042C12 - movs r0, #5 - strb r0, [r5, #0xc] - strb r1, [r5, #0xd] - movs r0, #0x1e - strb r0, [r5, #0xe] - adds r0, r5, #0 - adds r0, #0x3f - movs r1, #0x39 - strb r1, [r0] - ldr r0, [r5, #0x64] - ldr r0, [r0, #4] - adds r0, #0x3f - strb r1, [r0] -_08042C12: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08042C14 -sub_08042C14: @ 0x08042C14 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08042C30 @ =gUnk_080D12D0 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_08043A78 - pop {r4, pc} - .align 2, 0 -_08042C30: .4byte gUnk_080D12D0 - - thumb_func_start sub_08042C34 -sub_08042C34: @ 0x08042C34 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - sub sp, #4 - adds r7, r0, #0 - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042D0C - movs r0, #0x3c - strb r0, [r7, #0xe] - movs r0, #3 - strb r0, [r7, #0xf] - movs r0, #1 - strb r0, [r7, #0xd] - bl Random - movs r1, #6 - ands r1, r0 - ldr r0, _08042D14 @ =gUnk_080D12F8 - adds r1, r1, r0 - ldr r3, _08042D18 @ =gPlayerEntity - movs r0, #0x2e - ldrsh r2, [r3, r0] - movs r0, #0 - ldrsb r0, [r1, r0] - adds r6, r2, r0 - movs r0, #0x32 - ldrsh r2, [r3, r0] - movs r0, #1 - ldrsb r0, [r1, r0] - adds r5, r2, r0 - ldr r3, _08042D1C @ =gRoomControls - ldrh r2, [r3, #6] - adds r0, r2, #0 - adds r0, #0x20 - cmp r0, r6 - ble _08042C86 - adds r6, r0, #0 -_08042C86: - ldrh r0, [r3, #0x1e] - adds r0, r2, r0 - subs r0, #0x20 - cmp r0, r6 - bge _08042C92 - adds r6, r0, #0 -_08042C92: - ldrh r1, [r3, #8] - adds r0, r1, #0 - adds r0, #0x20 - cmp r0, r5 - ble _08042C9E - adds r5, r0, #0 -_08042C9E: - ldrh r0, [r3, #0x20] - adds r0, r1, r0 - subs r0, #0x40 - cmp r0, r5 - bge _08042CAA - adds r5, r0, #0 -_08042CAA: - subs r0, r6, r2 - subs r0, #0x90 - cmp r0, #0x40 - bhi _08042CC2 - subs r0, r5, r1 - subs r0, #8 - cmp r0, #0x40 - bhi _08042CC2 - adds r6, r2, #0 - adds r6, #0xb0 - adds r5, r1, #0 - adds r5, #0x40 -_08042CC2: - movs r4, #0 - mov r8, r4 - movs r3, #0x18 -_08042CC8: - ldr r0, [r7, #0x64] - lsls r1, r4, #2 - adds r0, r0, r1 - ldr r2, [r0] - strh r6, [r2, #0x2e] - strh r5, [r2, #0x32] - movs r0, #0x32 - strh r0, [r2, #0x36] - adds r1, r2, #0 - adds r1, #0x3f - movs r0, #0x39 - strb r0, [r1] - ldr r1, [r7, #0x64] - adds r1, r1, r3 - movs r0, #0x80 - strh r0, [r1] - mov r0, r8 - strh r0, [r1, #4] - ldr r0, _08042D20 @ =gUnk_080D1419 - adds r0, r4, r0 - ldrb r0, [r0] - strb r0, [r1, #0xc] - cmp r4, #0 - beq _08042D04 - adds r0, r2, #0 - movs r1, #0x12 - str r3, [sp] - bl InitializeAnimation - ldr r3, [sp] -_08042D04: - adds r3, #0x10 - adds r4, #1 - cmp r4, #3 - bls _08042CC8 -_08042D0C: - add sp, #4 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08042D14: .4byte gUnk_080D12F8 -_08042D18: .4byte gPlayerEntity -_08042D1C: .4byte gRoomControls -_08042D20: .4byte gUnk_080D1419 - - thumb_func_start sub_08042D24 -sub_08042D24: @ 0x08042D24 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042D68 - movs r0, #2 - strb r0, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x3f - movs r1, #0x3d - strb r1, [r0] - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - adds r0, #0x3f - strb r1, [r0] - movs r0, #0xaf - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08042D5E - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - str r0, [r1, #0x50] -_08042D5E: - str r1, [r4, #0x68] - adds r0, r4, #0 - movs r1, #0xd - bl InitAnimationForceUpdate -_08042D68: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08042D6C -sub_08042D6C: @ 0x08042D6C - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r6, #0 -_08042D72: - ldr r0, [r5, #0x64] - lsls r1, r6, #2 - adds r0, r0, r1 - ldr r4, [r0] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #3 - bgt _08042DC4 - cmp r6, #2 - beq _08042D8E - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] -_08042D8E: - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - bne _08042DB4 - movs r0, #0xaf - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08042DB4 - adds r0, r4, #0 - bl CopyPosition - movs r0, #0xb3 - lsls r0, r0, #1 - bl SoundReq -_08042DB4: - ldrb r0, [r4, #0x18] - movs r2, #4 - rsbs r2, r2, #0 - adds r1, r2, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] -_08042DC4: - adds r6, #1 - cmp r6, #3 - bls _08042D72 - ldr r0, [r5, #0x64] - ldr r4, [r0, #0xc] - ldrh r2, [r4, #0x36] - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #3 - rsbs r0, r0, #0 - cmp r1, r0 - bgt _08042E28 - ldr r0, _08042E20 @ =0x0000FFFB - strh r0, [r4, #0x36] - ldr r2, [r5, #0x64] - ldr r1, _08042E24 @ =gUnk_080D1300 - ldrb r0, [r5, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #0x20] - ldr r1, [r5, #0x64] - movs r0, #0xc0 - strh r0, [r1, #0x22] - movs r0, #3 - strb r0, [r5, #0xd] - movs r0, #0x1e - strb r0, [r5, #0xe] - adds r0, r5, #0 - adds r0, #0x3f - movs r4, #0x39 - strb r4, [r0] - adds r1, r5, #0 - adds r1, #0x7f - movs r0, #0x2d - strb r0, [r1] - adds r0, r5, #0 - movs r1, #0 - bl InitAnimationForceUpdate - ldr r0, [r5, #0x64] - ldr r0, [r0, #4] - adds r0, #0x3f - strb r4, [r0] - b _08042E2C - .align 2, 0 -_08042E20: .4byte 0x0000FFFB -_08042E24: .4byte gUnk_080D1300 -_08042E28: - subs r0, r2, #2 - strh r0, [r4, #0x36] -_08042E2C: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08042E30 -sub_08042E30: @ 0x08042E30 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - adds r1, r6, #0 - adds r1, #0x7f - ldrb r0, [r1] - cmp r0, #0 - bne _08042E4A - adds r0, r6, #0 - bl sub_08043C98 - cmp r0, #0 - bne _08042EF0 - b _08042E4E -_08042E4A: - subs r0, #1 - strb r0, [r1] -_08042E4E: - ldr r7, [r6, #0x64] - adds r5, r7, #0 - adds r5, #0x18 - ldrb r0, [r6, #0xe] - subs r0, #1 - strb r0, [r6, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042EB2 - movs r0, #4 - strb r0, [r6, #0xd] - bl Random - movs r1, #0x38 - ands r0, r1 - adds r0, #0x28 - strb r0, [r6, #0xe] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r6, #0x24] - ldrb r0, [r5, #1] - lsrs r0, r0, #3 - strb r0, [r6, #0x15] - movs r1, #0x2e - ldrsh r0, [r6, r1] - movs r2, #0x32 - ldrsh r1, [r6, r2] - ldr r3, _08042ED4 @ =gRoomControls - ldrh r2, [r3, #6] - movs r4, #0x88 - lsls r4, r4, #1 - adds r2, r2, r4 - ldrh r3, [r3, #8] - adds r3, #0x60 - bl sub_080045D4 - adds r4, r0, #0 - bl Random - ldr r2, _08042ED8 @ =gUnk_080D1304 - movs r1, #7 - ands r1, r0 - adds r1, r1, r2 - ldrb r0, [r1] - adds r0, r0, r4 - movs r1, #0x1f - ands r0, r1 - adds r1, r6, #0 - adds r1, #0x79 - strb r0, [r1] -_08042EB2: - ldrh r0, [r5, #8] - ldrh r1, [r7, #0x18] - adds r0, r0, r1 - strh r0, [r7, #0x18] - ldrh r0, [r5, #0xa] - ldrh r2, [r5, #4] - adds r1, r0, r2 - strh r1, [r5, #4] - lsls r0, r0, #0x10 - cmp r0, #0 - ble _08042EDC - ldrb r0, [r5, #5] - cmp r0, #0x18 - bls _08042EEA - movs r4, #0xa - ldrsh r0, [r5, r4] - b _08042EE6 - .align 2, 0 -_08042ED4: .4byte gRoomControls -_08042ED8: .4byte gUnk_080D1304 -_08042EDC: - ldrb r0, [r5, #5] - cmp r0, #3 - bhi _08042EEA - movs r1, #0xa - ldrsh r0, [r5, r1] -_08042EE6: - rsbs r0, r0, #0 - strh r0, [r5, #0xa] -_08042EEA: - adds r0, r6, #0 - bl UpdateAnimationSingleFrame -_08042EF0: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08042EF4 -sub_08042EF4: @ 0x08042EF4 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_08043C98 - cmp r0, #0 - bne _08042FCE - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042F4E - ldr r0, _08042F38 @ =gPlayerEntity - movs r2, #0x2e - ldrsh r1, [r0, r2] - movs r3, #0x32 - ldrsh r2, [r0, r3] - adds r0, r4, #0 - movs r3, #0x50 - bl sub_0806FCB8 - cmp r0, #0 - beq _08042F3C - movs r0, #6 - strb r0, [r4, #0xd] - movs r0, #0x28 - strb r0, [r4, #0xe] - b _08042F4E - .align 2, 0 -_08042F38: .4byte gPlayerEntity -_08042F3C: - movs r0, #5 - strb r0, [r4, #0xd] - adds r0, r4, #0 - movs r1, #0xf - bl InitAnimationForceUpdate - ldr r0, _08042FD4 @ =0x0000019B - bl SoundReq -_08042F4E: - ldr r0, [r4, #0x64] - adds r7, r0, #0 - adds r7, #0x18 - ldrb r0, [r7, #5] - cmp r0, #0x1f - bhi _08042F66 - movs r1, #0x80 - lsls r1, r1, #1 - adds r0, r1, #0 - ldrh r2, [r7, #4] - adds r0, r0, r2 - strh r0, [r7, #4] -_08042F66: - ldr r0, [r4, #0x50] - movs r1, #0x2e - ldrsh r3, [r0, r1] - mov r8, r3 - movs r2, #0x32 - ldrsh r0, [r0, r2] - adds r6, r0, #0 - subs r6, #0x10 - adds r0, r4, #0 - mov r1, r8 - adds r2, r6, #0 - movs r3, #0x30 - bl sub_0806FCB8 - adds r5, r4, #0 - adds r5, #0x79 - cmp r0, #0 - beq _08042FAC - movs r3, #0x2e - ldrsh r0, [r4, r3] - movs r2, #0x32 - ldrsh r1, [r4, r2] - mov r2, r8 - adds r3, r6, #0 - bl sub_080045D4 - adds r1, r0, #0 - ldrb r0, [r5] - subs r0, r0, r1 - adds r0, #4 - cmp r0, #8 - bhi _08042FAC - movs r0, #0x10 - eors r1, r0 - strb r1, [r5] -_08042FAC: - ldrb r0, [r5] - ldrb r3, [r4, #0x15] - cmp r0, r3 - beq _08042FC2 - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 - ldrb r0, [r4, #0x15] - lsls r0, r0, #3 - strb r0, [r7, #1] -_08042FC2: - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - ldrb r1, [r4, #0x15] - strb r1, [r0, #0x15] - bl ProcessMovement -_08042FCE: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08042FD4: .4byte 0x0000019B - - thumb_func_start sub_08042FD8 -sub_08042FD8: @ 0x08042FD8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r5, #0 - bl sub_08043C98 - cmp r0, #0 - bne _08043046 - adds r6, r5, #0 - adds r6, #0x5a - ldrb r1, [r6] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08043018 - movs r0, #0x20 - bl sub_080A7EE0 - adds r4, r0, #0 - cmp r4, #0 - beq _08043046 - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldrh r0, [r4, #0x36] - subs r0, #0x18 - movs r1, #0 - strh r0, [r4, #0x36] - strb r1, [r6] - b _08043046 -_08043018: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08043046 - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08043036 - movs r0, #8 - strb r0, [r5, #0xd] - movs r0, #0x3c - strb r0, [r5, #0xe] - b _08043046 -_08043036: - movs r0, #3 - strb r0, [r5, #0xd] - movs r0, #0x3c - strb r0, [r5, #0xe] - adds r0, r5, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_08043046: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08043048 -sub_08043048: @ 0x08043048 - push {r4, lr} - adds r4, r0, #0 - bl sub_08043C98 - cmp r0, #0 - bne _080430CC - ldr r2, [r4, #0x64] - adds r1, r2, #0 - adds r1, #0x18 - ldrb r0, [r1, #5] - cmp r0, #0x4f - bhi _08043094 - movs r2, #0x80 - lsls r2, r2, #2 - adds r0, r2, #0 - ldrh r3, [r1, #4] - adds r0, r0, r3 - strh r0, [r1, #4] - ldrb r0, [r1, #5] - cmp r0, #0x4f - bls _080430C6 - movs r2, #0 - movs r3, #0x3b -_08043076: - ldr r0, [r4, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x3f - strb r3, [r0] - adds r2, #1 - cmp r2, #4 - bls _08043076 - ldr r0, _08043090 @ =0x00000153 - bl SoundReq - b _080430C6 - .align 2, 0 -_08043090: .4byte 0x00000153 -_08043094: - movs r3, #8 - ldrsh r0, [r1, r3] - lsls r0, r0, #3 - ldrh r1, [r2, #0x18] - adds r0, r0, r1 - strh r0, [r2, #0x18] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080430C6 - movs r0, #7 - strb r0, [r4, #0xd] - movs r2, #0 - movs r3, #0x39 -_080430B4: - ldr r0, [r4, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x3f - strb r3, [r0] - adds r2, #1 - cmp r2, #4 - bls _080430B4 -_080430C6: - adds r0, r4, #0 - bl sub_08043B9C -_080430CC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080430D0 -sub_080430D0: @ 0x080430D0 - push {r4, lr} - adds r4, r0, #0 - bl sub_08043C98 - cmp r0, #0 - bne _08043128 - ldr r1, [r4, #0x64] - adds r2, r1, #0 - adds r2, #0x18 - ldrh r0, [r2, #8] - ldrh r3, [r1, #0x18] - adds r0, r0, r3 - strh r0, [r1, #0x18] - ldr r1, _08043110 @ =0xFFFFFF00 - adds r0, r1, #0 - ldrh r3, [r2, #4] - adds r0, r0, r3 - strh r0, [r2, #4] - ldrb r0, [r2, #5] - cmp r0, #0x17 - bhi _08043128 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08043114 - movs r0, #8 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - b _08043128 - .align 2, 0 -_08043110: .4byte 0xFFFFFF00 -_08043114: - movs r0, #3 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldr r0, _0804312C @ =0x0000FF40 - strh r0, [r2, #0xa] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_08043128: - pop {r4, pc} - .align 2, 0 -_0804312C: .4byte 0x0000FF40 - - thumb_func_start sub_08043130 -sub_08043130: @ 0x08043130 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - ldr r1, [r6, #0x64] - adds r4, r1, #0 - adds r4, #0x18 - ldrb r0, [r4, #5] - cmp r0, #0 - beq _08043160 - adds r0, r6, #0 - bl sub_08043C98 - cmp r0, #0 - bne _080431E0 - ldrb r0, [r4, #5] - subs r0, #1 - strb r0, [r4, #5] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080431E0 - adds r0, r6, #0 - movs r1, #0xd - bl InitAnimationForceUpdate - b _080431E0 -_08043160: - ldrb r0, [r6, #0xe] - cmp r0, #0 - beq _08043186 - subs r0, #1 - strb r0, [r6, #0xe] - movs r5, #1 - movs r1, #0x28 -_0804316E: - ldr r0, [r6, #0x64] - adds r4, r0, r1 - ldrb r0, [r4, #5] - cmp r0, #0 - beq _0804317C - subs r0, #1 - strb r0, [r4, #5] -_0804317C: - adds r1, #0x10 - adds r5, #1 - cmp r5, #3 - bls _0804316E - b _080431E0 -_08043186: - ldr r1, [r1, #0xc] - ldrh r0, [r1, #0x36] - adds r0, #3 - strh r0, [r1, #0x36] - movs r5, #0 - movs r7, #4 - rsbs r7, r7, #0 -_08043194: - ldr r0, [r6, #0x64] - lsls r1, r5, #2 - adds r0, r0, r1 - ldr r4, [r0] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, r7 - ble _080431C4 - ldrb r0, [r4, #0x10] - movs r1, #0x7f - ands r1, r0 - strb r1, [r4, #0x10] - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - cmp r0, #1 - bne _080431BC - ldr r0, _080431E4 @ =0x00000161 - bl SoundReq -_080431BC: - ldrb r1, [r4, #0x18] - adds r0, r7, #0 - ands r0, r1 - strb r0, [r4, #0x18] -_080431C4: - adds r5, #1 - cmp r5, #3 - bls _08043194 - ldrb r0, [r6, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - bne _080431E0 - movs r0, #9 - strb r0, [r6, #0xd] - movs r0, #0x3c - strb r0, [r6, #0xe] - adds r0, r6, #0 - bl sub_0804AA1C -_080431E0: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080431E4: .4byte 0x00000161 - - thumb_func_start sub_080431E8 -sub_080431E8: @ 0x080431E8 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0804324E - movs r0, #6 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - movs r5, #0 - ldr r7, _08043250 @ =gUnk_080D130C - movs r6, #0x18 -_08043206: - ldr r1, [r4, #0x64] - adds r1, r1, r6 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r7 - ldrh r0, [r0] - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #8 - strh r0, [r1, #4] - ldr r0, _08043254 @ =gUnk_080D1414 - adds r0, r5, r0 - ldrb r0, [r0] - strb r0, [r1, #0xc] - cmp r5, #3 - bne _08043230 - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - movs r1, #0x11 - bl InitializeAnimation -_08043230: - adds r6, #0x10 - adds r5, #1 - cmp r5, #3 - bls _08043206 - ldr r2, [r4, #0x64] - ldr r1, _08043258 @ =gUnk_080D1310 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #0x20] - adds r0, r4, #0 - movs r1, #0xe - bl InitAnimationForceUpdate -_0804324E: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08043250: .4byte gUnk_080D130C -_08043254: .4byte gUnk_080D1414 -_08043258: .4byte gUnk_080D1310 - - thumb_func_start sub_0804325C -sub_0804325C: @ 0x0804325C - push {r4, lr} - adds r4, r0, #0 - bl sub_08043CD4 - ldr r0, _0804329C @ =gUnk_080D1314 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_08043A10 - adds r2, r4, #0 - adds r2, #0x78 - ldrb r0, [r2] - adds r1, r0, #0 - cmp r1, #0 - beq _080432A4 - cmp r1, #2 - bls _080432A0 - subs r0, #2 - strb r0, [r2] - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x10] - ldrh r0, [r1, #0x36] - ldrb r2, [r2] - adds r0, r0, r2 - strh r0, [r1, #0x36] - b _080432A4 - .align 2, 0 -_0804329C: .4byte gUnk_080D1314 -_080432A0: - movs r0, #0 - strb r0, [r2] -_080432A4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080432A8 -sub_080432A8: @ 0x080432A8 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - movs r3, #3 - movs r2, #0 - ldr r0, [r4, #0x64] - adds r1, r0, #0 - adds r1, #0x48 - ldrb r0, [r1, #0xc] - cmp r0, #2 - bls _080432C2 - subs r0, #1 - strb r0, [r1, #0xc] - movs r2, #1 -_080432C2: - subs r3, #1 - cmp r3, #0 - blt _080432E0 - lsls r0, r3, #4 - adds r0, #0x18 - ldr r1, [r4, #0x64] - adds r1, r1, r0 - ldrb r0, [r1, #0xc] - cmp r0, #2 - bls _080432C2 - subs r0, #1 - strb r0, [r1, #0xc] - adds r2, #1 - cmp r2, #1 - ble _080432C2 -_080432E0: - ldr r0, [r4, #0x64] - adds r1, r0, #0 - adds r1, #0x18 - ldrb r0, [r1, #5] - subs r0, #2 - strb r0, [r1, #5] - movs r3, #0 - movs r6, #0x80 - movs r7, #4 - rsbs r7, r7, #0 - movs r5, #1 -_080432F6: - ldr r0, [r4, #0x64] - lsls r1, r3, #2 - adds r0, r0, r1 - ldr r2, [r0] - movs r1, #0x36 - ldrsh r0, [r2, r1] - cmp r0, #3 - bgt _08043316 - ldrb r0, [r2, #0x10] - orrs r0, r6 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0x18] - adds r0, r7, #0 - ands r0, r1 - orrs r0, r5 - strb r0, [r2, #0x18] -_08043316: - adds r3, #1 - cmp r3, #3 - ble _080432F6 - ldr r1, [r4, #0x64] - ldr r0, [r1] - ldrb r0, [r0, #0x18] - lsls r0, r0, #0x1e - lsrs r2, r0, #0x1e - cmp r2, #1 - bne _08043348 - adds r0, r1, #0 - adds r0, #0x34 - ldrb r0, [r0] - cmp r0, #2 - bhi _08043348 - strb r2, [r4, #0xd] - movs r0, #0x1e - strb r0, [r4, #0xe] - movs r0, #0x80 - lsls r0, r0, #7 - strh r0, [r1, #0x1c] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x10] - bl sub_0804AA1C -_08043348: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0804334C -sub_0804334C: @ 0x0804334C - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08043388 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0804341C - movs r5, #0 - movs r7, #0x80 - movs r6, #4 - rsbs r6, r6, #0 - movs r3, #1 -_0804336A: - ldr r0, [r4, #0x64] - lsls r1, r5, #2 - adds r0, r0, r1 - ldr r2, [r0] - ldrb r0, [r2, #0x10] - orrs r0, r7 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0x18] - adds r0, r6, #0 - ands r0, r1 - orrs r0, r3 - strb r0, [r2, #0x18] - adds r5, #1 - cmp r5, #4 - bls _0804336A -_08043388: - ldr r3, [r4, #0x64] - adds r2, r3, #0 - adds r2, #0x18 - ldr r1, _080433AC @ =gUnk_080D131C - ldrb r0, [r4, #0xb] - adds r0, r0, r1 - ldrb r0, [r0] - ldrb r1, [r2, #1] - subs r0, r0, r1 - adds r0, #1 - cmp r0, #2 - bls _080433B0 - ldrh r0, [r2, #8] - ldrh r1, [r3, #0x18] - adds r0, r0, r1 - strh r0, [r3, #0x18] - movs r7, #0 - b _080433B2 - .align 2, 0 -_080433AC: .4byte gUnk_080D131C -_080433B0: - movs r7, #1 -_080433B2: - adds r0, r4, #0 - bl sub_08043B9C - movs r5, #0 - movs r6, #0x18 -_080433BC: - ldr r0, [r4, #0x64] - adds r2, r0, r6 - ldr r0, _080433E4 @ =gUnk_080D1414 - adds r0, r5, r0 - ldrb r1, [r2, #0xc] - ldrb r3, [r0] - cmp r3, r1 - bls _080433E8 - adds r0, r1, #1 - strb r0, [r2, #0xc] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r3, r0 - bne _0804341C - movs r0, #0xaf - lsls r0, r0, #1 - bl SoundReq - b _0804341C - .align 2, 0 -_080433E4: .4byte gUnk_080D1414 -_080433E8: - cmp r7, #0 - beq _08043414 - cmp r5, #4 - bne _08043414 - adds r0, r4, #0 - bl sub_08043BC8 - adds r0, r4, #0 - movs r1, #7 - bl InitAnimationForceUpdate - adds r1, r4, #0 - adds r1, #0x7e - ldrb r0, [r1] - cmp r0, #0 - beq _08043414 - movs r0, #0 - strb r0, [r1] - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x14] - movs r0, #2 - strb r0, [r1, #0xd] -_08043414: - adds r6, #0x10 - adds r5, #1 - cmp r5, #4 - bls _080433BC -_0804341C: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08043420 -sub_08043420: @ 0x08043420 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0804343C @ =gUnk_080D1320 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_08043ABC - pop {r4, pc} - .align 2, 0 -_0804343C: .4byte gUnk_080D1320 - - thumb_func_start sub_08043440 -sub_08043440: @ 0x08043440 - push {r4, r5, r6, lr} - adds r3, r0, #0 - movs r2, #0 - movs r5, #0 - movs r6, #0 - movs r4, #0x18 -_0804344C: - ldr r0, [r3, #0x64] - adds r1, r0, r4 - ldrb r0, [r1, #5] - cmp r0, #0x10 - bls _0804345E - subs r0, #0x10 - strb r0, [r1, #5] - adds r5, #1 - b _08043460 -_0804345E: - strh r6, [r1, #4] -_08043460: - adds r4, #0x10 - adds r2, #1 - cmp r2, #4 - bls _0804344C - cmp r5, #0 - bne _0804348C - movs r2, #0 - movs r4, #0x80 - lsls r4, r4, #8 -_08043472: - ldr r0, [r3, #0x64] - lsls r1, r2, #4 - adds r0, r0, r1 - strh r4, [r0, #0x18] - adds r2, #1 - cmp r2, #4 - bls _08043472 - movs r0, #1 - strb r0, [r3, #0xd] - adds r0, r3, #0 - movs r1, #0x10 - bl InitAnimationForceUpdate -_0804348C: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08043490 -sub_08043490: @ 0x08043490 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x10] - mov ip, r0 - ldrh r1, [r0, #0x36] - movs r2, #0x36 - ldrsh r0, [r0, r2] - movs r2, #4 - rsbs r2, r2, #0 - cmp r0, r2 - bge _080434C4 - movs r0, #0xc0 - lsls r0, r0, #9 - mov r3, ip - str r0, [r3, #0x20] - movs r0, #0 - movs r1, #2 - strb r1, [r4, #0xd] - adds r2, r4, #0 - adds r2, #0x7e - strb r0, [r2] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x14] - strb r1, [r0, #0xd] - b _08043514 -_080434C4: - subs r0, r1, #2 - mov r1, ip - strh r0, [r1, #0x36] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _08043514 - ldrb r0, [r1, #0x10] - movs r3, #0x80 - orrs r0, r3 - strb r0, [r1, #0x10] - ldrb r1, [r1, #0x18] - adds r0, r2, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - mov r2, ip - strb r0, [r2, #0x18] - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xef - ands r0, r1 - strb r0, [r2] - mov r1, ip - adds r1, #0x3f - movs r0, #0x3a - strb r0, [r1] - ldr r0, _0804351C @ =gUnk_080FD450 - mov r1, ip - str r0, [r1, #0x48] - ldr r0, [r4, #0x64] - ldr r1, [r0, #8] - ldrb r0, [r1, #0x10] - orrs r3, r0 - strb r3, [r1, #0x10] - ldr r0, [r4, #0x64] - ldr r2, [r0, #0xc] - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] -_08043514: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - .align 2, 0 -_0804351C: .4byte gUnk_080FD450 - - thumb_func_start sub_08043520 -sub_08043520: @ 0x08043520 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, [r5, #0x64] - ldr r4, [r0, #0x10] - movs r1, #0xd0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl sub_08003FC4 - ldr r0, [r4, #0x20] - cmp r0, #0 - bge _08043556 - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #6 - rsbs r0, r0, #0 - cmp r1, r0 - ble _08043556 - ldr r0, _08043558 @ =0x0000FFFA - strh r0, [r4, #0x36] - movs r0, #3 - strb r0, [r5, #0xd] - adds r1, r5, #0 - adds r1, #0x7a - movs r0, #0xe1 - lsls r0, r0, #2 - strh r0, [r1] -_08043556: - pop {r4, r5, pc} - .align 2, 0 -_08043558: .4byte 0x0000FFFA - - thumb_func_start sub_0804355C -sub_0804355C: @ 0x0804355C - push {r4, lr} - adds r4, r0, #0 - bl sub_08043DB0 - adds r1, r4, #0 - adds r1, #0x7a - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08043578 - movs r0, #4 - strb r0, [r4, #0xd] -_08043578: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - - thumb_func_start sub_08043580 -sub_08043580: @ 0x08043580 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x10] - ldrh r0, [r1, #0x36] - adds r0, #3 - strh r0, [r1, #0x36] - movs r2, #0 - movs r5, #4 - rsbs r5, r5, #0 - movs r6, #0x7f -_08043596: - ldr r0, [r4, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r3, [r0] - movs r1, #0x36 - ldrsh r0, [r3, r1] - cmp r0, r5 - ble _080435B6 - ldrb r1, [r3, #0x10] - adds r0, r6, #0 - ands r0, r1 - strb r0, [r3, #0x10] - ldrb r1, [r3, #0x18] - adds r0, r5, #0 - ands r0, r1 - strb r0, [r3, #0x18] -_080435B6: - adds r2, #1 - cmp r2, #4 - bls _08043596 - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - bne _080435EE - movs r0, #5 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldr r0, [r4, #0x64] - ldr r3, [r0, #0x10] - adds r2, r3, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0x10 - orrs r0, r1 - strb r0, [r2] - adds r1, r3, #0 - adds r1, #0x3f - movs r0, #0x39 - strb r0, [r1] - ldr r0, _080435F0 @ =gUnk_080FD538 - str r0, [r3, #0x48] - adds r0, r4, #0 - bl sub_0804AA1C -_080435EE: - pop {r4, r5, r6, pc} - .align 2, 0 -_080435F0: .4byte gUnk_080FD538 - - thumb_func_start sub_080435F4 -sub_080435F4: @ 0x080435F4 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08043674 - movs r0, #6 - strb r0, [r4, #0xc] - movs r0, #1 - strb r0, [r4, #0xd] - strb r0, [r4, #0xe] - movs r5, #0 - ldr r0, _08043658 @ =gUnk_080D1338 - mov sb, r0 - movs r0, #0 - mov r8, r0 - movs r6, #0x18 - ldr r7, _0804365C @ =gUnk_080D133C -_08043622: - ldr r1, [r4, #0x64] - adds r1, r1, r6 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - add r0, sb - ldrh r0, [r0] - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #7 - strh r0, [r1, #4] - mov r0, r8 - strb r0, [r1, #0xc] - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r7 - ldrh r0, [r0] - strh r0, [r1, #8] - ldr r0, [r4, #0x64] - lsls r1, r5, #2 - adds r0, r0, r1 - ldr r2, [r0] - cmp r5, #0 - bne _08043660 - adds r0, r2, #0 - bl sub_08043B9C - b _0804366C - .align 2, 0 -_08043658: .4byte gUnk_080D1338 -_0804365C: .4byte gUnk_080D133C -_08043660: - ldr r0, _0804367C @ =gUnk_080D1340 - adds r0, r5, r0 - ldrb r1, [r0] - adds r0, r2, #0 - bl InitializeAnimation -_0804366C: - adds r6, #0x10 - adds r5, #1 - cmp r5, #4 - bls _08043622 -_08043674: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0804367C: .4byte gUnk_080D1340 - - thumb_func_start sub_08043680 -sub_08043680: @ 0x08043680 - push {lr} - ldr r2, _08043694 @ =gUnk_080D1348 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08043694: .4byte gUnk_080D1348 - - thumb_func_start sub_08043698 -sub_08043698: @ 0x08043698 - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - movs r3, #0 - movs r5, #0x7f -_080436A8: - ldr r0, [r4, #0x64] - lsls r1, r3, #2 - adds r0, r0, r1 - ldr r2, [r0] - ldrb r1, [r2, #0x10] - adds r0, r5, #0 - ands r0, r1 - strb r0, [r2, #0x10] - adds r3, #1 - cmp r3, #4 - bls _080436A8 - pop {r4, r5, pc} - - thumb_func_start sub_080436C0 -sub_080436C0: @ 0x080436C0 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _080436FC - movs r0, #0x14 - strb r0, [r4, #0xe] - movs r0, #2 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - movs r1, #0x51 - movs r2, #0 - bl CreateFx - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - str r5, [r0, #0x64] - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl DeleteEntity -_080436FC: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08043700 -sub_08043700: @ 0x08043700 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _08043734 - movs r0, #0x14 - strb r0, [r4, #0xe] - movs r0, #3 - strb r0, [r4, #0xd] - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - movs r1, #0x51 - movs r2, #0 - bl CreateFx - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - str r5, [r0, #0x64] - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl DeleteEntity -_08043734: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08043738 -sub_08043738: @ 0x08043738 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _0804376C - movs r0, #0x14 - strb r0, [r4, #0xe] - movs r0, #4 - strb r0, [r4, #0xd] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - movs r1, #0x51 - movs r2, #0 - bl CreateFx - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - str r5, [r0, #0x64] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - bl DeleteEntity -_0804376C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08043770 -sub_08043770: @ 0x08043770 - push {r4, r5, lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #0 - bne _080437D8 - ldr r0, [r2, #0x64] - ldr r3, [r0, #0x14] - ldr r0, _080437AC @ =gScreenTransition - adds r5, r0, #0 - adds r5, #0x39 - ldrb r1, [r5] - movs r0, #0xc - ands r0, r1 - cmp r0, #0 - bne _0804379A - movs r0, #2 - strb r0, [r3, #0xd] -_0804379A: - ldrb r0, [r2, #0xb] - cmp r0, #0 - bne _080437B0 - ldr r0, [r3, #0x64] - str r4, [r0, #0x14] - ldrb r1, [r5] - movs r0, #0xfe - b _080437B8 - .align 2, 0 -_080437AC: .4byte gScreenTransition -_080437B0: - ldr r0, [r3, #0x64] - str r4, [r0, #0x18] - ldrb r1, [r5] - movs r0, #0xfd -_080437B8: - ands r0, r1 - strb r0, [r5] - ldr r0, [r2, #0x64] - ldr r0, [r0, #0x10] - movs r1, #0 - str r1, [r0, #0x64] - ldr r0, [r2, #0x64] - ldr r0, [r0, #0x10] - adds r0, #0x45 - strb r1, [r0] - ldr r1, [r2, #0x68] - ldr r0, [r2, #0x64] - ldr r0, [r0, #0x10] - str r0, [r1, #0x50] - bl DeleteThisEntity -_080437D8: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080437DC -sub_080437DC: @ 0x080437DC - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - ldr r0, _0804392C @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x43 - bls _080437EE - b _08043934 -_080437EE: - movs r0, #0x68 - bl zMalloc - adds r7, r0, #0 - cmp r7, #0 - bne _080437FC - b _08043934 -_080437FC: - adds r2, r6, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r4, #8 - rsbs r4, r4, #0 - adds r0, r4, #0 - ands r0, r1 - movs r1, #5 - mov r8, r1 - mov r1, r8 - orrs r0, r1 - strb r0, [r2] - adds r1, r6, #0 - adds r1, #0x3c - ldrb r0, [r1] - movs r5, #0x10 - orrs r0, r5 - strb r0, [r1] - str r7, [r6, #0x64] - str r6, [r7] - movs r0, #0x52 - movs r1, #1 - bl CreateEnemy - adds r2, r0, #0 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - adds r0, r4, #0 - ands r0, r1 - mov r1, r8 - orrs r0, r1 - strb r0, [r3] - adds r1, r2, #0 - adds r1, #0x3c - ldrb r0, [r1] - orrs r0, r5 - strb r0, [r1] - str r7, [r2, #0x64] - str r2, [r7, #4] - adds r0, r6, #0 - adds r1, r2, #0 - bl CopyPosition - movs r0, #0x52 - movs r1, #2 - bl CreateEnemy - adds r2, r0, #0 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - adds r0, r4, #0 - ands r0, r1 - mov r1, r8 - orrs r0, r1 - strb r0, [r3] - adds r1, r2, #0 - adds r1, #0x3c - ldrb r0, [r1] - orrs r0, r5 - strb r0, [r1] - str r7, [r2, #0x64] - str r2, [r7, #8] - adds r0, r6, #0 - adds r1, r2, #0 - bl CopyPosition - movs r0, #0x52 - movs r1, #3 - bl CreateEnemy - adds r2, r0, #0 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - adds r0, r4, #0 - ands r0, r1 - mov r1, r8 - orrs r0, r1 - strb r0, [r3] - adds r1, r2, #0 - adds r1, #0x3c - ldrb r0, [r1] - orrs r0, r5 - strb r0, [r1] - str r7, [r2, #0x64] - str r2, [r7, #0xc] - adds r0, r6, #0 - adds r1, r2, #0 - bl CopyPosition - movs r0, #0x52 - movs r1, #4 - bl CreateEnemy - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x29 - ldrb r0, [r1] - ands r4, r0 - mov r0, r8 - orrs r4, r0 - strb r4, [r1] - adds r1, #0x13 - ldrb r0, [r1] - orrs r5, r0 - strb r5, [r1] - str r7, [r2, #0x64] - str r2, [r7, #0x10] - adds r0, r6, #0 - adds r1, r2, #0 - bl CopyPosition - ldr r0, [r6, #0x50] - str r0, [r7, #0x14] - ldr r1, _08043930 @ =gUnk_080D135C - ldrb r0, [r6, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r2, [r0] - movs r3, #0 - strh r2, [r7, #0x18] - movs r1, #0x80 - lsls r1, r1, #7 - strh r1, [r7, #0x1c] - adds r0, r7, #0 - adds r0, #0x24 - strb r3, [r0] - strh r2, [r7, #0x28] - strh r1, [r7, #0x2c] - adds r0, #0x10 - strb r3, [r0] - strh r2, [r7, #0x38] - strh r1, [r7, #0x3c] - adds r0, #0x10 - strb r3, [r0] - adds r0, #4 - strh r2, [r0] - adds r0, #4 - strh r1, [r0] - adds r0, #8 - strb r3, [r0] - adds r0, #4 - strh r2, [r0] - adds r0, #4 - strh r1, [r0] - adds r0, #8 - strb r3, [r0] - movs r0, #1 - b _08043936 - .align 2, 0 -_0804392C: .4byte gEntCount -_08043930: .4byte gUnk_080D135C -_08043934: - movs r0, #0 -_08043936: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0804393C -sub_0804393C: @ 0x0804393C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldr r0, [r5, #0x64] - ldr r1, [r0] - adds r0, r1, #0 - adds r0, #0x7c - ldrb r0, [r0] - lsls r2, r0, #0x18 - cmp r2, #0 - beq _0804397C - adds r0, r1, #0 - adds r0, #0x7d - ldrb r0, [r0] - ldrb r1, [r5, #0xa] - cmp r0, r1 - bhi _0804397C - ldr r4, _08043978 @ =gUnk_080D1362 - ldrb r3, [r5, #0xa] - lsls r1, r3, #4 - lsrs r0, r2, #0x1b - movs r2, #0xf - ands r0, r2 - adds r1, r1, r0 - adds r1, r1, r4 - ldrb r4, [r1] - adds r6, r3, #0 - b _08043980 - .align 2, 0 -_08043978: .4byte gUnk_080D1362 -_0804397C: - movs r4, #0 - ldrb r6, [r5, #0xa] -_08043980: - lsls r0, r6, #4 - adds r0, #0x18 - ldr r2, [r5, #0x64] - mov ip, r2 - adds r2, r2, r0 - ldrb r0, [r2, #0xc] - adds r0, r4, r0 - lsls r4, r0, #8 - ldr r3, _08043A0C @ =gSineTable - ldrb r1, [r2, #5] - adds r0, r1, #0 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r3 - movs r7, #0 - ldrsh r0, [r0, r7] - rsbs r0, r0, #0 - adds r7, r0, #0 - muls r7, r4, r7 - mov r8, r7 - movs r0, #0x7f - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r3 - movs r7, #0 - ldrsh r0, [r1, r7] - muls r0, r4, r0 - cmp r0, #0 - bge _080439BC - adds r0, #0xff -_080439BC: - asrs r4, r0, #8 - ldrb r1, [r2, #1] - lsls r0, r1, #1 - adds r0, r0, r3 - movs r2, #0 - ldrsh r0, [r0, r2] - adds r2, r0, #0 - muls r2, r4, r2 - adds r1, #0x40 - lsls r1, r1, #1 - adds r1, r1, r3 - movs r3, #0 - ldrsh r0, [r1, r3] - rsbs r0, r0, #0 - adds r3, r0, #0 - muls r3, r4, r3 - adds r0, r6, #1 - lsls r0, r0, #2 - add r0, ip - ldr r0, [r0] - adds r1, r5, #0 - bl PositionRelative - ldr r0, [r5, #0x34] - add r0, r8 - str r0, [r5, #0x34] - ldr r1, [r5, #0x64] - ldrb r0, [r5, #0xa] - adds r0, #1 - lsls r0, r0, #2 - adds r1, r1, r0 - ldr r0, [r1] - adds r0, #0x63 - ldrb r1, [r0] - adds r0, r5, #0 - adds r0, #0x63 - strb r1, [r0] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08043A0C: .4byte gSineTable - - thumb_func_start sub_08043A10 -sub_08043A10: @ 0x08043A10 - push {r4, lr} - adds r4, r0, #0 - bl sub_08043B7C - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x10] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x10] - ldrh r0, [r1, #0x32] - subs r0, #8 - strh r0, [r1, #0x32] - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x10] - ldrh r0, [r1, #0x36] - subs r0, #8 - strh r0, [r1, #0x36] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r1, [r0] - ldrh r0, [r1, #0x32] - adds r0, #1 - strh r0, [r1, #0x32] - ldr r0, [r4, #0x64] - ldr r1, [r0] - adds r1, #0x63 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - adds r4, #0x7c - ldrb r0, [r4] - cmp r0, #0 - beq _08043A76 - subs r0, #1 - strb r0, [r4] -_08043A76: - pop {r4, pc} - - thumb_func_start sub_08043A78 -sub_08043A78: @ 0x08043A78 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x7c - movs r0, #0 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08043B7C - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r1, [r0] - ldrh r0, [r1, #0x32] - adds r0, #1 - strh r0, [r1, #0x32] - ldr r0, [r4, #0x64] - ldr r1, [r0] - adds r1, #0x63 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08043ABC -sub_08043ABC: @ 0x08043ABC - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x7c - movs r0, #0 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08043B7C - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r1, [r0] - ldrh r0, [r1, #0x32] - adds r0, #1 - strh r0, [r1, #0x32] - ldr r0, [r4, #0x64] - ldr r1, [r0] - adds r1, #0x63 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08043B08 -sub_08043B08: @ 0x08043B08 - push {r4, r5, r6, lr} - ldrb r3, [r0, #0xa] - lsls r1, r3, #4 - adds r4, r1, #0 - adds r4, #8 - ldr r2, [r0, #0x64] - adds r6, r2, r4 - adds r1, #0x18 - adds r4, r2, r1 - ldr r0, _08043B40 @ =gUnk_080D13B2 - adds r3, r3, r0 - ldrb r5, [r3] - ldr r0, [r2] - ldrb r0, [r0, #0xb] - cmp r0, #0 - bne _08043B44 - ldrb r1, [r6, #1] - ldrb r0, [r4, #1] - subs r0, r1, r0 - lsls r0, r0, #0x18 - asrs r3, r0, #0x18 - cmp r5, r3 - bhs _08043B5E - cmp r3, #0 - ble _08043B56 - subs r0, r1, r5 - b _08043B5C - .align 2, 0 -_08043B40: .4byte gUnk_080D13B2 -_08043B44: - ldrb r0, [r4, #1] - ldrb r1, [r6, #1] - subs r0, r0, r1 - lsls r0, r0, #0x18 - asrs r3, r0, #0x18 - cmp r5, r3 - bhs _08043B5E - cmp r3, #0 - bge _08043B5A -_08043B56: - strb r1, [r4, #1] - b _08043B5E -_08043B5A: - adds r0, r1, r5 -_08043B5C: - strb r0, [r4, #1] -_08043B5E: - ldrb r2, [r6, #5] - ldrb r0, [r4, #5] - subs r3, r2, r0 - lsls r1, r5, #1 - adds r0, r3, r5 - cmp r1, r0 - bhs _08043B78 - cmp r3, #0 - ble _08043B74 - subs r0, r2, r5 - b _08043B76 -_08043B74: - adds r0, r2, r5 -_08043B76: - strb r0, [r4, #5] -_08043B78: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08043B7C -sub_08043B7C: @ 0x08043B7C - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl sub_08043B08 - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl sub_08043B08 - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - bl sub_08043B08 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08043B9C -sub_08043B9C: @ 0x08043B9C - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x64] - ldrb r0, [r0, #0x19] - adds r0, #4 - movs r1, #0xff - ands r0, r1 - asrs r0, r0, #3 - ldr r1, _08043BC4 @ =gUnk_080D13B7 - adds r0, r0, r1 - ldrb r1, [r0] - ldrb r0, [r2, #0x1e] - subs r0, #1 - cmp r1, r0 - beq _08043BC0 - adds r0, r2, #0 - bl InitAnimationForceUpdate -_08043BC0: - pop {pc} - .align 2, 0 -_08043BC4: .4byte gUnk_080D13B7 - - thumb_func_start sub_08043BC8 -sub_08043BC8: @ 0x08043BC8 - movs r1, #2 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0xb] - lsls r2, r2, #2 - ldr r1, _08043BEC @ =gUnk_080D13D8 - adds r2, r2, r1 - ldr r1, [r0, #0x64] - adds r1, #0x18 - ldrh r0, [r2] - strh r0, [r1, #8] - ldrh r0, [r2, #2] - strh r0, [r1, #0xa] - movs r0, #0x5a - strb r0, [r1, #0xd] - movs r0, #0x28 - strb r0, [r1, #0xe] - bx lr - .align 2, 0 -_08043BEC: .4byte gUnk_080D13D8 - - thumb_func_start sub_08043BF0 -sub_08043BF0: @ 0x08043BF0 - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x64] - adds r1, r0, #0 - adds r1, #0x18 - ldrb r0, [r2, #0xb] - cmp r0, #0 - bne _08043C18 - ldrb r0, [r1, #1] - movs r1, #6 - cmp r0, #0x2f - bls _08043C2E - movs r1, #7 - cmp r0, #0x5f - bls _08043C2E - movs r1, #9 - cmp r0, #0x8f - bhi _08043C2E - movs r1, #8 - b _08043C2E -_08043C18: - ldrb r0, [r1, #1] - movs r1, #8 - cmp r0, #0xd0 - bhi _08043C2E - movs r1, #7 - cmp r0, #0xa0 - bhi _08043C2E - movs r1, #5 - cmp r0, #0x70 - bls _08043C2E - movs r1, #6 -_08043C2E: - adds r0, r2, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, r1 - beq _08043C3E - adds r0, r2, #0 - bl InitAnimationForceUpdate -_08043C3E: - pop {pc} - - thumb_func_start sub_08043C40 -sub_08043C40: @ 0x08043C40 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - ldrb r0, [r1, #5] - cmp r0, #0x1f - bhi _08043C54 - ldr r6, _08043C50 @ =gUnk_080D13E0 - b _08043C68 - .align 2, 0 -_08043C50: .4byte gUnk_080D13E0 -_08043C54: - cmp r0, #0x2f - bhi _08043C60 - ldr r6, _08043C5C @ =gUnk_080D13E3 - b _08043C68 - .align 2, 0 -_08043C5C: .4byte gUnk_080D13E3 -_08043C60: - ldr r6, _08043C84 @ =gUnk_080D13E0 - cmp r0, #0x77 - bhi _08043C68 - adds r6, #6 -_08043C68: - movs r4, #0 - movs r5, #0x28 -_08043C6C: - ldr r0, [r7, #0x64] - adds r3, r0, r5 - adds r0, r6, r4 - ldrb r1, [r3, #0xc] - ldrb r2, [r0] - adds r0, r1, #0 - cmp r2, r0 - beq _08043C8C - cmp r2, r0 - bhs _08043C88 - subs r0, r1, #1 - b _08043C8A - .align 2, 0 -_08043C84: .4byte gUnk_080D13E0 -_08043C88: - adds r0, r1, #1 -_08043C8A: - strb r0, [r3, #0xc] -_08043C8C: - adds r5, #0x10 - adds r4, #1 - cmp r4, #2 - bls _08043C6C - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08043C98 -sub_08043C98: @ 0x08043C98 - push {lr} - adds r3, r0, #0 - ldr r0, [r3, #0x64] - ldr r1, [r0, #8] - ldr r2, [r0, #0xc] - adds r1, #0x41 - ldrb r0, [r1] - cmp r0, #0x9d - beq _08043CB4 - adds r0, r2, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x9d - bne _08043CD0 -_08043CB4: - adds r0, r3, #0 - bl sub_08043D08 - ldr r0, _08043CCC @ =gScreenTransition - adds r0, #0x38 - ldrb r2, [r0] - movs r1, #2 - orrs r1, r2 - strb r1, [r0] - movs r0, #1 - b _08043CD2 - .align 2, 0 -_08043CCC: .4byte gScreenTransition -_08043CD0: - movs r0, #0 -_08043CD2: - pop {pc} - - thumb_func_start sub_08043CD4 -sub_08043CD4: @ 0x08043CD4 - push {r4, r5, lr} - adds r3, r0, #0 - movs r2, #0 - adds r4, r3, #0 - adds r4, #0x7c - movs r5, #0x78 - movs r0, #0x7d - adds r0, r0, r3 - mov ip, r0 -_08043CE6: - ldr r0, [r3, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x9d - bne _08043CFE - strb r5, [r4] - mov r0, ip - strb r2, [r0] - b _08043D04 -_08043CFE: - adds r2, #1 - cmp r2, #4 - bls _08043CE6 -_08043D04: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08043D08 -sub_08043D08: @ 0x08043D08 - push {r4, r5, lr} - adds r5, r0, #0 - movs r1, #0 - movs r0, #7 - strb r0, [r5, #0xc] - strb r1, [r5, #0xd] - adds r0, r5, #0 - movs r1, #0xd - bl InitAnimationForceUpdate - ldr r0, [r5, #0x64] - ldr r4, [r0, #0x10] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #0x13 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0804AA1C - adds r0, r4, #0 - movs r1, #0x51 - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _08043D78 - ldr r1, _08043DAC @ =gUnk_080D13E9 - ldrb r0, [r5, #0xb] - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r2, #0x2e] - adds r0, r0, r1 - strh r0, [r2, #0x2e] - ldrh r0, [r2, #0x32] - subs r0, #6 - strh r0, [r2, #0x32] - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2] -_08043D78: - ldr r0, [r5, #0x64] - ldr r0, [r0, #0xc] - adds r1, r4, #0 - bl CopyPosition - ldr r1, [r5, #0x64] - adds r1, #0x54 - ldrh r0, [r4, #0x36] - ldrb r1, [r1] - adds r0, r0, r1 - strh r0, [r4, #0x36] - movs r2, #0 - movs r3, #0x39 -_08043D92: - ldr r0, [r5, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x3f - strb r3, [r0] - adds r2, #1 - cmp r2, #4 - bls _08043D92 - movs r0, #0xfe - bl EnqueueSFX - pop {r4, r5, pc} - .align 2, 0 -_08043DAC: .4byte gUnk_080D13E9 - - thumb_func_start sub_08043DB0 -sub_08043DB0: @ 0x08043DB0 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r0, _08043E48 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08043EAC - ldr r0, [r5, #0x64] - ldr r2, [r0, #0xc] - movs r1, #0x2e - ldrsh r0, [r2, r1] - ldr r6, _08043E4C @ =gRoomControls - ldrh r1, [r6, #6] - subs r0, r0, r1 - movs r3, #0x32 - ldrsh r1, [r2, r3] - ldrh r2, [r6, #8] - subs r1, r1, r2 - adds r1, #2 - movs r2, #3 - movs r3, #3 - bl CheckPlayerInRegion - cmp r0, #0 - beq _08043EAC - ldr r0, _08043E50 @ =gUnk_080D13EC - bl DoExitTransition - ldr r4, _08043E54 @ =gScreenTransition - adds r0, r4, #0 - adds r0, #0x39 - ldrb r1, [r0] - movs r0, #3 - ands r0, r1 - cmp r0, #3 - beq _08043DFE - movs r0, #1 - strb r0, [r4, #0xd] -_08043DFE: - adds r0, r5, #0 - adds r0, #0x7a - ldrh r0, [r0] - movs r1, #0x3c - bl __divsi3 - movs r1, #0x1e - subs r1, r1, r0 - adds r0, r4, #0 - adds r0, #0x3d - strb r1, [r0] - ldrb r1, [r5, #0xb] - subs r0, #1 - strb r1, [r0] - ldr r0, [r5, #0x64] - ldr r2, [r0, #0x14] - ldrh r1, [r2, #0x2e] - adds r0, r4, #0 - adds r0, #0x40 - strh r1, [r0] - ldrh r0, [r2, #0x32] - adds r1, r4, #0 - adds r1, #0x42 - strh r0, [r1] - ldr r0, [r2, #0x64] - ldr r3, [r0, #0x14] - cmp r3, #0 - beq _08043E58 - ldrh r1, [r3, #0x2e] - adds r0, r4, #0 - adds r0, #0x44 - strh r1, [r0] - ldrh r1, [r3, #0x32] - adds r0, #2 - strh r1, [r0] - b _08043E70 - .align 2, 0 -_08043E48: .4byte gPlayerState -_08043E4C: .4byte gRoomControls -_08043E50: .4byte gUnk_080D13EC -_08043E54: .4byte gScreenTransition -_08043E58: - movs r1, #0x88 - lsls r1, r1, #1 - adds r0, r1, #0 - ldrh r3, [r6, #6] - adds r0, r0, r3 - adds r1, r4, #0 - adds r1, #0x44 - strh r0, [r1] - ldrh r0, [r6, #8] - adds r0, #0x60 - adds r1, #2 - strh r0, [r1] -_08043E70: - ldr r0, [r2, #0x64] - ldr r3, [r0, #0x18] - cmp r3, #0 - beq _08043E90 - ldr r1, _08043E8C @ =gScreenTransition - ldrh r2, [r3, #0x2e] - adds r0, r1, #0 - adds r0, #0x48 - strh r2, [r0] - ldrh r0, [r3, #0x32] - adds r1, #0x4a - strh r0, [r1] - b _08043EAC - .align 2, 0 -_08043E8C: .4byte gScreenTransition -_08043E90: - ldr r2, _08043EB0 @ =gScreenTransition - ldr r3, _08043EB4 @ =gRoomControls - movs r1, #0x88 - lsls r1, r1, #1 - adds r0, r1, #0 - ldrh r1, [r3, #6] - adds r0, r0, r1 - adds r1, r2, #0 - adds r1, #0x48 - strh r0, [r1] - ldrh r0, [r3, #8] - adds r0, #0x60 - adds r2, #0x4a - strh r0, [r2] -_08043EAC: - pop {r4, r5, r6, pc} - .align 2, 0 -_08043EB0: .4byte gScreenTransition -_08043EB4: .4byte gRoomControls - - thumb_func_start sub_08043EB8 -sub_08043EB8: @ 0x08043EB8 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - ldrb r0, [r7, #0x10] - movs r5, #0x80 - orrs r0, r5 - strb r0, [r7, #0x10] - adds r2, r7, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r4, #8 - rsbs r4, r4, #0 - adds r0, r4, #0 - ands r0, r1 - movs r6, #4 - orrs r0, r6 - strb r0, [r2] - adds r0, r7, #0 - movs r1, #0xd - bl InitAnimationForceUpdate - ldr r0, [r7, #0x64] - ldr r3, [r0, #4] - ldrb r0, [r3, #0x10] - orrs r0, r5 - strb r0, [r3, #0x10] - adds r2, r3, #0 - adds r2, #0x29 - ldrb r1, [r2] - adds r0, r4, #0 - ands r0, r1 - orrs r0, r6 - strb r0, [r2] - ldr r0, [r7, #0x64] - ldr r3, [r0, #8] - ldrb r0, [r3, #0x10] - orrs r0, r5 - strb r0, [r3, #0x10] - adds r2, r3, #0 - adds r2, #0x29 - ldrb r1, [r2] - adds r0, r4, #0 - ands r0, r1 - orrs r0, r6 - strb r0, [r2] - ldr r0, [r7, #0x64] - ldr r3, [r0, #0xc] - ldrb r1, [r3, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r3, #0x10] - ldrb r2, [r3, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - adds r0, r1, #0 - ands r0, r2 - movs r2, #1 - mov r8, r2 - mov r2, r8 - orrs r0, r2 - strb r0, [r3, #0x18] - adds r3, #0x29 - ldrb r2, [r3] - adds r0, r4, #0 - ands r0, r2 - orrs r0, r6 - strb r0, [r3] - ldr r0, [r7, #0x64] - ldr r3, [r0, #0x10] - ldrb r0, [r3, #0x10] - orrs r5, r0 - strb r5, [r3, #0x10] - ldrb r0, [r3, #0x18] - ands r1, r0 - mov r0, r8 - orrs r1, r0 - strb r1, [r3, #0x18] - adds r1, r3, #0 - adds r1, #0x29 - ldrb r0, [r1] - ands r4, r0 - orrs r4, r6 - strb r4, [r1] - ldrb r0, [r7, #0xb] - cmp r0, #0 - bne _08043F74 - ldr r1, _08043F70 @ =gScreenTransition - adds r0, r1, #0 - adds r0, #0x44 - b _08043F7A - .align 2, 0 -_08043F70: .4byte gScreenTransition -_08043F74: - ldr r1, _08043F8C @ =gScreenTransition - adds r0, r1, #0 - adds r0, #0x48 -_08043F7A: - ldrh r0, [r0] - strh r0, [r3, #0x2e] - ldrb r0, [r7, #0xb] - cmp r0, #0 - bne _08043F90 - adds r0, r1, #0 - adds r0, #0x46 - b _08043F94 - .align 2, 0 -_08043F8C: .4byte gScreenTransition -_08043F90: - adds r0, r1, #0 - adds r0, #0x4a -_08043F94: - ldrh r1, [r0] - movs r0, #0 - strh r1, [r3, #0x32] - strh r0, [r3, #0x36] - adds r2, r3, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xef - ands r0, r1 - strb r0, [r2] - adds r1, r3, #0 - adds r1, #0x3f - movs r0, #0x3a - strb r0, [r1] - ldr r0, _08043FF8 @ =gUnk_080FD450 - str r0, [r3, #0x48] - movs r0, #0xaf - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r3, r0, #0 - cmp r3, #0 - beq _08043FCA - ldr r0, [r7, #0x64] - ldr r0, [r0, #0xc] - str r0, [r3, #0x50] -_08043FCA: - ldr r0, [r7, #0x64] - ldr r0, [r0] - str r3, [r0, #0x68] - movs r2, #0 - movs r6, #0 - movs r5, #0x80 - lsls r5, r5, #8 - ldr r4, _08043FFC @ =gUnk_080D1419 - movs r3, #0x18 -_08043FDC: - ldr r0, [r7, #0x64] - adds r0, r0, r3 - strh r5, [r0] - strh r6, [r0, #4] - adds r1, r2, r4 - ldrb r1, [r1] - strb r1, [r0, #0xc] - adds r3, #0x10 - adds r2, #1 - cmp r2, #4 - bls _08043FDC - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08043FF8: .4byte gUnk_080FD450 -_08043FFC: .4byte gUnk_080D1419 - - thumb_func_start sub_08044000 -sub_08044000: @ 0x08044000 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #1 - ldr r0, _08044070 @ =gUnk_080D1400 - movs r3, #0 - ldr r2, _08044074 @ =gUnk_080D1414 - mov ip, r2 - movs r7, #8 - rsbs r7, r7, #0 - adds r5, r1, r0 - movs r6, #0x18 -_0804401C: - ldr r0, [r4, #0x64] - lsls r1, r3, #2 - adds r0, r0, r1 - ldr r2, [r0] - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - adds r2, #0x29 - ldrb r1, [r2] - adds r0, r7, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - ldr r1, [r4, #0x64] - adds r1, r1, r6 - ldrh r0, [r5] - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #7 - strh r0, [r1, #4] - mov r2, ip - adds r0, r3, r2 - ldrb r0, [r0] - strb r0, [r1, #0xc] - adds r5, #2 - adds r6, #0x10 - adds r3, #1 - cmp r3, #4 - bls _0804401C - adds r0, r4, #0 - movs r1, #7 - bl InitAnimationForceUpdate - ldr r1, [r4, #0x64] - ldr r0, [r1, #0x14] - ldr r1, [r1, #0x10] - bl CopyPosition - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08044070: .4byte gUnk_080D1400 -_08044074: .4byte gUnk_080D1414 - - thumb_func_start sub_08044078 -sub_08044078: @ 0x08044078 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080440C4 - movs r2, #1 - strb r2, [r4, #0xc] - ldrb r0, [r4, #0xa] - cmp r0, #3 - bne _080440AC - ldr r3, _080440B8 @ =gScreenTransition - adds r0, r3, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _080440BC - ldr r0, [r4, #0x64] - ldr r0, [r0] - adds r1, r3, #0 - adds r1, #0x3c - ldrb r0, [r0, #0xb] - ldrb r1, [r1] - cmp r0, r1 - bne _080440BC -_080440AC: - adds r0, r4, #0 - movs r1, #0x12 - bl InitializeAnimation - b _080440C4 - .align 2, 0 -_080440B8: .4byte gScreenTransition -_080440BC: - adds r0, r4, #0 - movs r1, #0x11 - bl InitializeAnimation -_080440C4: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - - thumb_func_start sub_080440CC -sub_080440CC: @ 0x080440CC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08044110 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r2, _08044104 @ =gScreenTransition - adds r1, r2, #0 - adds r1, #0x38 - ldrb r1, [r1] - ands r0, r1 - cmp r0, #0 - beq _08044108 - ldr r0, [r4, #0x64] - ldr r0, [r0] - adds r1, r2, #0 - adds r1, #0x3c - ldrb r0, [r0, #0xb] - ldrb r1, [r1] - cmp r0, r1 - bne _08044108 - adds r0, r4, #0 - movs r1, #0x13 - bl InitializeAnimation - b _08044110 - .align 2, 0 -_08044104: .4byte gScreenTransition -_08044108: - adds r0, r4, #0 - movs r1, #0x11 - bl InitializeAnimation -_08044110: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} diff --git a/data/const/enemy/vaatiArm.s b/data/const/enemy/vaatiArm.s deleted file mode 100644 index 8d50dea9..00000000 --- a/data/const/enemy/vaatiArm.s +++ /dev/null @@ -1,193 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D1230:: @ 080D1230 - .4byte sub_08042570 - .4byte sub_08042588 - .4byte sub_08001324 - .4byte sub_0804A7D4 - .4byte sub_08001242 - .4byte nullsub_170 - -gUnk_080D1248:: @ 080D1248 - .4byte sub_0804259C - .4byte sub_08044078 - .4byte sub_08044078 - .4byte sub_08044078 - .4byte sub_080440CC - -gUnk_080D125C:: @ 080D125C - .4byte sub_080425B4 - .4byte sub_08042654 - .4byte sub_08042818 - .4byte sub_08042870 - .4byte sub_08042A3C - .4byte sub_08042C14 - .4byte sub_0804325C - .4byte sub_08043420 - .4byte sub_08043680 - -gUnk_080D1280:: @ 080D1280 - .incbin "baserom.gba", 0x0D1280, 0x0000004 - -gUnk_080D1284:: @ 080D1284 - .incbin "baserom.gba", 0x0D1284, 0x0000002 - -gUnk_080D1286:: @ 080D1286 - .incbin "baserom.gba", 0x0D1286, 0x000000A - -gUnk_080D1290:: @ 080D1290 - .4byte sub_08042894 - .4byte sub_080428AC - .4byte sub_080428FC - .4byte sub_08042944 - .4byte sub_08042970 - .4byte sub_080429D4 - .4byte sub_080429FC - -gUnk_080D12AC:: @ 080D12AC - .incbin "baserom.gba", 0x0D12AC, 0x0000004 - -gUnk_080D12B0:: @ 080D12B0 - .incbin "baserom.gba", 0x0D12B0, 0x0000002 - -gUnk_080D12B2:: @ 080D12B2 - .incbin "baserom.gba", 0x0D12B2, 0x0000002 - -gUnk_080D12B4:: @ 080D12B4 - .incbin "baserom.gba", 0x0D12B4, 0x0000002 - -gUnk_080D12B6:: @ 080D12B6 - .incbin "baserom.gba", 0x0D12B6, 0x0000002 - -gUnk_080D12B8:: @ 080D12B8 - .4byte sub_08042A6C - .4byte sub_08042A88 - .4byte sub_08042AEC - .4byte sub_08042B20 - -gUnk_080D12C8:: @ 080D12C8 - .incbin "baserom.gba", 0x0D12C8, 0x0000002 - -gUnk_080D12CA:: @ 080D12CA - .incbin "baserom.gba", 0x0D12CA, 0x0000006 - -gUnk_080D12D0:: @ 080D12D0 - .4byte sub_08042C34 - .4byte sub_08042D24 - .4byte sub_08042D6C - .4byte sub_08042E30 - .4byte sub_08042EF4 - .4byte sub_08042FD8 - .4byte sub_08043048 - .4byte sub_080430D0 - .4byte sub_08043130 - .4byte sub_080431E8 - -gUnk_080D12F8:: @ 080D12F8 - .incbin "baserom.gba", 0x0D12F8, 0x0000006 - -gUnk_080D12FE:: @ 080D12FE - .incbin "baserom.gba", 0x0D12FE, 0x0000002 - -gUnk_080D1300:: @ 080D1300 - .incbin "baserom.gba", 0x0D1300, 0x0000004 - -gUnk_080D1304:: @ 080D1304 - .incbin "baserom.gba", 0x0D1304, 0x0000008 - -gUnk_080D130C:: @ 080D130C - .incbin "baserom.gba", 0x0D130C, 0x0000001 - -gUnk_080D130D:: @ 080D130D - .incbin "baserom.gba", 0x0D130D, 0x0000003 - -gUnk_080D1310:: @ 080D1310 - .incbin "baserom.gba", 0x0D1310, 0x0000004 - -gUnk_080D1314:: @ 080D1314 - .4byte sub_080432A8 - -gUnk_080D1318:: @ 080D1318 - .4byte sub_0804334C - -gUnk_080D131C:: @ 080D131C - .incbin "baserom.gba", 0x0D131C, 0x0000004 - -gUnk_080D1320:: @ 080D1320 - .4byte sub_08043440 - .4byte sub_08043490 - .4byte sub_08043520 - .4byte sub_0804355C - .4byte sub_08043580 - .4byte sub_080435F4 - -gUnk_080D1338:: @ 080D1338 - .incbin "baserom.gba", 0x0D1338, 0x0000004 - -gUnk_080D133C:: @ 080D133C - .incbin "baserom.gba", 0x0D133C, 0x0000004 - -gUnk_080D1340:: @ 080D1340 - .incbin "baserom.gba", 0x0D1340, 0x0000008 - -gUnk_080D1348:: @ 080D1348 - .4byte sub_08043698 - .4byte sub_080436C0 - .4byte sub_08043700 - .4byte sub_08043738 - .4byte sub_08043770 - -gUnk_080D135C:: @ 080D135C - .incbin "baserom.gba", 0x0D135C, 0x0000006 - -gUnk_080D1362:: @ 080D1362 - .incbin "baserom.gba", 0x0D1362, 0x0000050 - -gUnk_080D13B2:: @ 080D13B2 - .incbin "baserom.gba", 0x0D13B2, 0x0000005 - -gUnk_080D13B7:: @ 080D13B7 - .incbin "baserom.gba", 0x0D13B7, 0x0000021 - -gUnk_080D13D8:: @ 080D13D8 - .incbin "baserom.gba", 0x0D13D8, 0x0000008 - -gUnk_080D13E0:: @ 080D13E0 - .incbin "baserom.gba", 0x0D13E0, 0x0000003 - -gUnk_080D13E3:: @ 080D13E3 - .incbin "baserom.gba", 0x0D13E3, 0x0000006 - -gUnk_080D13E9:: @ 080D13E9 - .incbin "baserom.gba", 0x0D13E9, 0x0000003 - -gUnk_080D13EC:: @ 080D13EC - .incbin "baserom.gba", 0x0D13EC, 0x0000014 - -gUnk_080D1400:: @ 080D1400 - .incbin "baserom.gba", 0x0D1400, 0x000000D - -gUnk_080D140D:: @ 080D140D - .incbin "baserom.gba", 0x0D140D, 0x0000005 - -gUnk_080D1412:: @ 080D1412 - .incbin "baserom.gba", 0x0D1412, 0x0000002 - -gUnk_080D1414:: @ 080D1414 - .incbin "baserom.gba", 0x0D1414, 0x0000003 - -gUnk_080D1417:: @ 080D1417 - .incbin "baserom.gba", 0x0D1417, 0x0000001 - -gUnk_080D1418:: @ 080D1418 - .incbin "baserom.gba", 0x0D1418, 0x0000001 - -gUnk_080D1419:: @ 080D1419 - .incbin "baserom.gba", 0x0D1419, 0x0000003 - -gUnk_080D141C:: @ 080D141C - .incbin "baserom.gba", 0x0D141C, 0x0000002 diff --git a/include/structures.h b/include/structures.h index 11d66ac8..e7cd304b 100644 --- a/include/structures.h +++ b/include/structures.h @@ -55,7 +55,10 @@ typedef struct { u8 field_0x39; u16 field_0x3a; u8 field_0x3c; - u8 filler[6]; + u8 field_0x3d; + u16 field_0x3e; + u16 field_0x40; + u16 field_0x42; u16 field_0x44; u16 field_0x46; u16 field_0x48; diff --git a/linker.ld b/linker.ld index a556c55c..6d0e5ff9 100644 --- a/linker.ld +++ b/linker.ld @@ -425,7 +425,7 @@ SECTIONS { asm/vaatiTransfigured.o(.text); asm/enemy50.o(.text); asm/vaatiWrath.o(.text); - asm/vaatiArm.o(.text); + src/enemy/vaatiArm.o(.text); asm/dust.o(.text); src/enemy/vaatiBall.o(.text); src/enemy/slime.o(.text); @@ -1133,7 +1133,7 @@ SECTIONS { data/const/enemy/enemy50.o(.rodata); data/const/enemy/vaatiWrath.o(.rodata); data/animations/enemy/vaatiWrath.o(.rodata); - data/const/enemy/vaatiArm.o(.rodata); + src/enemy/vaatiArm.o(.rodata); data/animations/enemy/vaatiArm.o(.rodata); data/const/enemy/dust.o(.rodata); data/const/enemy/vaatiBall.o(.rodata); diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c new file mode 100644 index 00000000..3b307128 --- /dev/null +++ b/src/enemy/vaatiArm.c @@ -0,0 +1,1460 @@ +#include "global.h" +#include "enemy.h" +#include "entity.h" +#include "audio.h" +#include "object.h" +#include "random.h" +#include "utils.h" +#include "functions.h" + +extern void DoExitTransition(ScreenTransitionData*); + +typedef struct VaatiArm_HeapStruct1 { + union SplitHWord unk00; + u16 unk02; + union SplitHWord unk04; + u16 unk06; + s16 unk08; + s16 unk0a; + u8 unk0c; + u8 unk0d; + u8 unk0e; + u8 unk0f; +} VaatiArm_HeapStruct1; + +typedef struct VaatiArm_HeapStruct { + Entity* entities[5]; + Entity* parent; + VaatiArm_HeapStruct1 s1[5]; +} VaatiArm_HeapStruct; + +u32 sub_080437DC(Entity*); +u32 sub_08043C98(Entity*); +void sub_08042570(Entity*); +void sub_08042588(Entity*); +void sub_080425B4(Entity*); +void sub_08042818(Entity*); +void sub_08042870(Entity*); +void sub_08042A3C(Entity*); +void sub_08042C14(Entity*); +void sub_0804325C(Entity*); +void sub_08043420(Entity*); +void sub_08043680(Entity*); +void nullsub_170(Entity*); +void sub_08042654(Entity*); +void sub_0804259C(Entity*); +void sub_08043A10(Entity*); +void sub_08043ABC(Entity*); +void sub_08043BC8(Entity*); +void sub_08043EB8(Entity*); +void sub_08044000(Entity*); +void sub_08044078(Entity*); +void sub_080440CC(Entity*); +void sub_08043CD4(Entity*); +void sub_08042894(Entity*); +void sub_080428AC(Entity*); +void sub_080428FC(Entity*); +void sub_08042944(Entity*); +void sub_08042970(Entity*); +void sub_080429D4(Entity*); +void sub_080429FC(Entity*); +void sub_08043BF0(Entity*); +void sub_08042A6C(Entity*); +void sub_08042A88(Entity*); +void sub_08042AEC(Entity*); +void sub_08042B20(Entity*); +void sub_08043C40(Entity*, VaatiArm_HeapStruct1*); +void sub_08043A78(Entity*); +void sub_08042C34(Entity*); +void sub_08042D24(Entity*); +void sub_08042D6C(Entity*); +void sub_08042E30(Entity*); +void sub_08042EF4(Entity*); +void sub_08042FD8(Entity*); +void sub_08043048(Entity*); +void sub_080430D0(Entity*); +void sub_08043130(Entity*); +void sub_080431E8(Entity*); +void sub_08043B9C(Entity*); +void sub_0804AA1C(Entity*); +void sub_08043DB0(Entity*); +void sub_08043B7C(Entity*); +void sub_08043D08(Entity*); +void sub_080432A8(Entity*); +void sub_0804334C(Entity*); +void sub_08043440(Entity*); +void sub_08043490(Entity*); +void sub_08043520(Entity*); +void sub_0804355C(Entity*); +void sub_08043580(Entity*); +void sub_080435F4(Entity*); +void sub_08043698(Entity*); +void sub_080436C0(Entity*); +void sub_08043700(Entity*); +void sub_08043738(Entity*); +void sub_08043770(Entity*); + +void (*const gUnk_080D1230[])(Entity*) = { + sub_08042570, sub_08042588, sub_08001324, sub_0804A7D4, sub_08001242, nullsub_170, +}; +void (*const gUnk_080D1248[])(Entity*) = { + sub_0804259C, sub_08044078, sub_08044078, sub_08044078, sub_080440CC, +}; +void (*const gUnk_080D125C[])(Entity*) = { + sub_080425B4, sub_08042654, sub_08042818, sub_08042870, sub_08042A3C, + sub_08042C14, sub_0804325C, sub_08043420, sub_08043680, +}; + +const s16 gUnk_080D1280[] = { 0x140, -0x140 }; +const s8 gUnk_080D1284[] = { 0x40, -0x40 }; +const u8 gUnk_080D1286[] = { 2, 3, 5, 6, 0xc, 0xb, 9, 8, 0, 0 }; + +void (*const gUnk_080D1290[])(Entity*) = { + sub_08042894, sub_080428AC, sub_080428FC, sub_08042944, sub_08042970, sub_080429D4, sub_080429FC, +}; + +const s16 gUnk_080D12AC[] = { -0x200, 0x200 }; +const u8 gUnk_080D12B0[] = { 8, -8 }; +const u8 gUnk_080D12B2[] = { -0x50, 0x50 }; +const s8 gUnk_080D12B4[] = { -0x20, 0x20 }; +const u8 gUnk_080D12B6[] = { 0x70, -0x70 }; + +void (*const gUnk_080D12B8[])(Entity*) = { + sub_08042A6C, + sub_08042A88, + sub_08042AEC, + sub_08042B20, +}; + +const u8 gUnk_080D12C8[] = { 0x60, -0x60 }; +const u16 gUnk_080D12CA[] = { 0x280, -0x280 }; + +void (*const gUnk_080D12D0[])(Entity*) = { + sub_08042C34, sub_08042D24, sub_08042D6C, sub_08042E30, sub_08042EF4, + sub_08042FD8, sub_08043048, sub_080430D0, sub_08043130, sub_080431E8, +}; + +const s8 gUnk_080D12F8[] = { -0x10, 0, 0, -0x10, 0x10, 0, 0, 0x10 }; +const s16 gUnk_080D1300[] = { 0xC0, -0xC0 }; +const u8 gUnk_080D1304[] = { 0, -1, -2, -3, 0, 1, 2, 3 }; +const s16 gUnk_080D130C[] = { 0x5000, -0x5000 }; +const s16 gUnk_080D1310[] = { 0xA0, -0xA0 }; +void (*const gUnk_080D1314[])(Entity*) = { sub_080432A8, sub_0804334C }; +const u8 gUnk_080D131C[] = { 0x70, -0x70 }; +void (*const gUnk_080D1320[])(Entity*) = { + sub_08043440, sub_08043490, sub_08043520, sub_0804355C, sub_08043580, sub_080435F4, +}; +const s16 gUnk_080D1338[] = { 0x4000, -0x4000 }; +const s16 gUnk_080D133C[] = { 0xA0, -0xA0 }; +const u8 gUnk_080D1340[] = { 0, 0x12, 0x12, 0x11, 0x11, 0, 0, 0 }; +void (*const gUnk_080D1348[])(Entity*) = { + sub_08043698, sub_080436C0, sub_08043700, sub_08043738, sub_08043770, +}; +const u16 gUnk_080D135C[] = { 0x4000, -0x4000, 0x8000 }; +const u8 gUnk_080D1362[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, + 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 1, 2, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, +}; +const u8 gUnk_080D13B2[] = { 0, 12, 9, 6, 3 }; +const u8 gUnk_080D13B7[] = { + 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 1, 0, +}; +const Coords gUnk_080D13D8[] = { { .HALF = { -0x60, 0x80 } }, { .HALF = { 0x60, -0x80 } } }; +const u8 gUnk_080D13E0[] = { 0xc, 0xe, 0x10 }; +const u8 gUnk_080D13E3[] = { 8, 9, 10, 4, 4, 5 }; +const s8 gUnk_080D13E9[] = { -8, 8 }; +const ScreenTransitionData gUnk_080D13EC = { 1, { 0, 0, 0, 0 }, 0x98, 0xb8, 0, 0x8a, 0, 1, 0, 0, 0 }; +const u16 gUnk_080D1400[] = { 0x8000, 0x7000, 0x6000, 0x5000, 0x4000, 0x8000, -0x7000 }; +const u16 gUnk_080D140E[] = { -0x6000, -0x5000, -0x4000 }; +const u8 gUnk_080D1414[] = { 0, 0xc, 0xe, 0x10, 0x1c }; +const u8 gUnk_080D1419[] = { 0, 0xa, 0xa, 0xa, 0x1c }; + +extern u8 gEntCount; +extern const Hitbox gUnk_080FD450; +extern const Hitbox gUnk_080FD538; + +void VaatiArm(Entity* this) { + gUnk_080D1230[GetNextFunction(this)](this); +} + +void sub_08042570(Entity* this) { + gUnk_080D1248[this->type](this); +} + +void sub_08042588(Entity* this) { + sub_0804AA30(this, gUnk_080D1230); +} + +void nullsub_170(Entity* this) { +} + +void sub_0804259C(Entity* this) { + gUnk_080D125C[this->action](this); +} + +void sub_080425B4(Entity* this) { + if (sub_080437DC(this)) { + this->field_0x7c.BYTES.byte0 = 0; + this->field_0x7c.BYTES.byte1 = 0; + if ((gScreenTransition.field_0x38 & 1) != 0) { + if (gScreenTransition.field_0x3c == this->type2) { + sub_08043EB8(this); + sub_08043ABC(this); + if ((gScreenTransition.field_0x39 >> (this->type2 + 2) & 1U) != 0) { + this->action = 7; + this->subAction = 4; + } else { + this->action = 8; + this->subAction = 0; + } + } else { + sub_08044000(this); + sub_08043BC8(this); + sub_08043A10(this); + } + } else { + this->action = 1; + this->subAction = gScreenTransition.field_0x38 & 1; + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk08 = gUnk_080D1280[this->type2]; + sub_08042654(this); + } + } +} + +void sub_08042654(Entity* this) { + u32 uVar8; + int index; + VaatiArm_HeapStruct1* ptr; + + index = this->type2 * 4; + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + switch (this->subAction) { + case 0: + this->subAction = 1; + ptr->unk00.HALF.HI = gUnk_080D1284[this->type2]; + uVar8 = gUnk_080D1286[this->type2 * 4]; + InitAnimationForceUpdate(this, uVar8); + SoundReq(SFX_15E); + break; + case 1: + ptr->unk00.HWORD += ptr->unk08; + if ((((VaatiArm_HeapStruct*)this->myHeap)->s1[1].unk0c += 2) < 0xc) + break; + this->subAction = 2; + uVar8 = gUnk_080D1286[index + 1]; + InitAnimationForceUpdate(this, uVar8); + SoundReq(SFX_15E); + break; + case 2: + ptr->unk00.HWORD += ptr->unk08; + if ((((VaatiArm_HeapStruct*)this->myHeap)->s1[2].unk0c += 2) < 0xe) + break; + this->subAction = 3; + uVar8 = gUnk_080D1286[index + 2]; + InitAnimationForceUpdate(this, uVar8); + SoundReq(SFX_15E); + break; + case 3: + ptr->unk00.HWORD += ptr->unk08; + if ((((VaatiArm_HeapStruct*)this->myHeap)->s1[3].unk0c += 2) < 0x10) + break; + this->subAction = 4; + uVar8 = gUnk_080D1286[index + 3]; + InitAnimationForceUpdate(this, uVar8); + SoundReq(SFX_15E); + break; + case 4: + ptr->unk00.HWORD += ptr->unk08; + if ((((VaatiArm_HeapStruct*)this->myHeap)->s1[4].unk0c += 2) < 0x1c) + break; + this->subAction = 5; + this->actionDelay = 0x5a; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->flags |= 0x80; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->spritePriority.b0 = 4; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->flags |= 0x80; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->spritePriority.b0 = 4; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[2]->flags |= 0x80; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[2]->spritePriority.b0 = 4; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]->flags |= 0x80; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]->spritePriority.b0 = 4; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->flags |= 0x80; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->spritePriority.b0 = 4; + InitAnimationForceUpdate(this, 7); + SoundReq(SFX_15E); + break; + default: + if (--this->actionDelay == 0) { + sub_08043BC8(this); + } + break; + } + sub_08043A10(this); +} + +void sub_08042818(Entity* this) { + VaatiArm_HeapStruct1* ptr; + + sub_08043CD4(this); + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + ptr->unk00.HWORD += ptr->unk08; + if (--ptr->unk0d == 0) { + ptr->unk0d = 0x78; + ptr->unk08 *= -1; + } + ptr->unk04.HWORD += ptr->unk0a; + if (--ptr->unk0e == 0) { + ptr->unk0e = 0x50; + ptr->unk0a *= -1; + } + sub_08043A10(this); +} + +void sub_08042870(Entity* this) { + sub_08043CD4(this); + gUnk_080D1290[this->subAction](this); + sub_08043A10(this); +} + +void sub_08042894(Entity* this) { + this->subAction = 1; + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk08 = gUnk_080D12AC[this->type2]; +} + +void sub_080428AC(Entity* this) { + u8 bVar1; + VaatiArm_HeapStruct1* pVVar3; + + pVVar3 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + bVar1 = pVVar3->unk04.HALF.HI; + if (bVar1 != 0x40) { + if (bVar1 >= 0x41) { + pVVar3->unk04.HWORD -= 0x80; + } else { + pVVar3->unk04.HWORD += 0x80; + } + } + if ((u32)(pVVar3->unk00.HALF.HI - gUnk_080D12B0[this->type2] + 1) > 2) { + pVVar3->unk00.HWORD += pVVar3->unk08; + } else { + this->subAction = 2; + this->actionDelay = 0x1e; + } + sub_08043BF0(this); +} + +void sub_080428FC(Entity* this) { + u32 uVar2; + VaatiArm_HeapStruct1* ptr; + + if (--this->actionDelay == 0) { + this->subAction = 3; + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + ptr->unk08 *= -3; + SoundReq(SFX_153); + uVar2 = 0; + do { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[uVar2]->damageType = 0x3b; + uVar2 = uVar2 + 1; + } while (uVar2 < 5); + } +} + +void sub_08042944(Entity* this) { + VaatiArm_HeapStruct1* pVVar1; + + pVVar1 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if ((u32)(pVVar1->unk00.HALF.HI - 0x7c) >= 9) { + pVVar1->unk00.HWORD += pVVar1->unk08; + } else { + this->subAction = 4; + this->speed = pVVar1->unk08; + } + sub_08043BF0(this); +} + +void sub_08042970(Entity* this) { + u32 uVar2; + VaatiArm_HeapStruct1* pVVar3; + + pVVar3 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if ((u32)(pVVar3->unk00.HALF.HI - gUnk_080D12B2[this->type2] + 2) >= 5) { + pVVar3->unk08 += gUnk_080D12B4[this->type2]; + pVVar3->unk00.HWORD += pVVar3->unk08; + } else { + this->subAction = 5; + this->actionDelay = 0x3c; + uVar2 = 0; + do { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[uVar2]->damageType = 0x39; + uVar2 = uVar2 + 1; + } while (uVar2 < 5); + } + sub_08043BF0(this); +} + +void sub_080429D4(Entity* this) { + s16 sVar2; + VaatiArm_HeapStruct1* pVVar3; + + if (--this->actionDelay == 0) { + this->subAction = 6; + pVVar3 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + sVar2 = -this->speed / 6; + pVVar3->unk08 = sVar2; + } +} + +void sub_080429FC(Entity* this) { + VaatiArm_HeapStruct1* pVVar1; + + pVVar1 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if ((u32)(pVVar1->unk00.HALF.HI - gUnk_080D12B6[this->type2]) + 1 >= 3) { + pVVar1->unk00.HWORD += pVVar1->unk08; + sub_08043BF0(this); + } else { + sub_08043BC8(this); + InitAnimationForceUpdate(this, 7); + } +} + +void sub_08042A3C(Entity* this) { + Entity* entity; + + gUnk_080D12B8[this->subAction](this); + sub_08043A10(this); + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + entity->height.HALF.HI += this->field_0x78.HALF.LO; +} + +void sub_08042A6C(Entity* this) { + this->subAction = 1; + this->field_0x78.HALF.LO = 0; + this->field_0x7c.BYTES.byte2 = 1; + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk0a = 0x200; +} + +void sub_08042A88(Entity* this) { + VaatiArm_HeapStruct1* pVVar4; + + pVVar4 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (gUnk_080D12C8[this->type2] != pVVar4->unk00.HALF.HI) { + if (gUnk_080D12C8[this->type2] < pVVar4->unk00.HALF.HI) { + pVVar4->unk00.HWORD -= 0x100; + } else { + pVVar4->unk00.HWORD += 0x100; + } + } + if (pVVar4->unk0a < pVVar4->unk04.HWORD) { + pVVar4->unk04.HWORD -= pVVar4->unk0a; + } else { + pVVar4->unk04.HWORD = 0; + pVVar4->unk08 = gUnk_080D12CA[this->type2]; + this->subAction = 2; + this->actionDelay = 0x1e; + } +} + +void sub_08042AEC(Entity* this) { + if (--this->actionDelay == 0) { + this->subAction = 3; + this->actionDelay = 4; + this->damageType = 0x3d; + InitAnimationForceUpdate(this, 0xe); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->damageType = 0x3d; + } +} + +void sub_08042B20(Entity* this) { + VaatiArm_HeapStruct1* ptr; + Entity* object; + Entity* entity; + u32 i; + + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (ptr->unk04.HALF.HI < 0x7b) { + ptr->unk04.HWORD += 0x500; + } else { + ptr->unk04.HALF.HI = 0x80; + } + if (0x30 < ptr->unk04.HALF.HI) { + ptr->unk00.HWORD += ptr->unk08; + } + if (((VaatiArm_HeapStruct*)this->myHeap)->entities[3]->spriteSettings.b.draw) { + sub_08043C40(this, ptr); + for (i = 0; i < 4; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + if ((-0xa <= entity->height.HALF.HI) && ((entity->spriteSettings.b.draw) == 1)) { + if (i == 0) { + object = CreateObject(OBJECT_AF, 0, 0); + if (object != NULL) { + object->parent = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + } + *(Entity**)&((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->field_0x68 = object; + object = CreateObject(OBJECT_AF, 2, 0); + if (object != NULL) { + CopyPosition(((VaatiArm_HeapStruct*)this->myHeap)->entities[4], object); + } + } + entity->flags &= 0x7f; + entity->spriteSettings.b.draw = 0; + SoundReq(SFX_161); + } + } + } else { + this->field_0x78.HALF.LO += 2; + if (--this->actionDelay == 0) { + this->action = 5; + this->subAction = 0; + this->actionDelay = 0x1e; + this->damageType = 0x39; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->damageType = 0x39; + } + } +} + +void sub_08042C14(Entity* this) { + gUnk_080D12D0[this->subAction](this); + sub_08043A78(this); +} + +void sub_08042C34(Entity* this) { + u32 random; + int y; + u32 i; + Entity* entity; + int x; + const s8* temp; + + VaatiArm_HeapStruct1* ptr; + + if (--this->actionDelay == 0) { + this->actionDelay = 0x3c; + this->field_0xf = 3; + this->subAction = 1; + random = Random() & 6; + temp = &gUnk_080D12F8[random]; + x = gPlayerEntity.x.HALF.HI + *temp; + y = gPlayerEntity.y.HALF.HI + *(temp + 1); + if ((gRoomControls.roomOriginX + 0x20) > x) { + x = gRoomControls.roomOriginX + 0x20; + } + if (gRoomControls.roomOriginX + gRoomControls.width + -0x20 < x) { + x = gRoomControls.roomOriginX + gRoomControls.width + -0x20; + } + if ((gRoomControls.roomOriginY + 0x20) > y) { + y = gRoomControls.roomOriginY + 0x20; + } + if (gRoomControls.roomOriginY + gRoomControls.height + -0x40 < y) { + y = gRoomControls.roomOriginY + gRoomControls.height + -0x40; + } + if (((u32)((x - gRoomControls.roomOriginX) - 0x90) < 0x41) && + ((u32)((y - gRoomControls.roomOriginY) - 8) < 0x41)) { + x = gRoomControls.roomOriginX + 0xb0; + y = gRoomControls.roomOriginY + 0x40; + } + for (i = 0; i < 4; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + entity->x.HALF.HI = x; + entity->y.HALF.HI = y; + entity->height.HALF.HI = 0x32; + entity->damageType = 0x39; + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + ptr->unk00.HWORD = 0x80; + ptr->unk04.HWORD = 0; + ptr->unk0c = gUnk_080D1419[i]; + if (i != 0) { + InitializeAnimation(entity, 0x12); + } + } + } +} + +void sub_08042D24(Entity* this) { + Entity* entity; + + if (--this->actionDelay == 0) { + this->subAction = 2; + this->damageType = 0x3d; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->damageType = 0x3d; + entity = CreateObject(OBJECT_AF, 1, 0); + if (entity != NULL) { + entity->parent = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + } + *(Entity**)&this->field_0x68 = entity; + InitAnimationForceUpdate(this, 0xd); + } +} + +void sub_08042D6C(Entity* this) { + Entity* object; + Entity* entity; + u32 i; + + for (i = 0; i < 4; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + if (entity->height.HALF.HI < 4) { + if (i != 2) { + entity->flags = entity->flags | 0x80; + } + if ((entity->spriteSettings.b.draw == 0u) && (object = CreateObject(OBJECT_AF, 2, 0), object != NULL)) { + CopyPosition(entity, object); + SoundReq(SFX_166); + } + entity->spriteSettings.b.draw = 1; + } + } + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + if (entity->height.HALF.HI <= -3) { + entity->height.HALF.HI = -5; + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk08 = gUnk_080D1300[this->type2]; + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk0a = 0xc0; + this->subAction = 3; + this->actionDelay = 0x1e; + this->damageType = 0x39; + this->field_0x7c.BYTES.byte3 = 0x2d; + InitAnimationForceUpdate(this, 0); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->damageType = 0x39; + } else { + entity->height.HALF.HI -= 2; + } +} + +void sub_08042E30(Entity* this) { + short sVar3; + u32 uVar6; + VaatiArm_HeapStruct1* pVVar9; + + if (this->field_0x7c.BYTES.byte3 == 0) { + if (sub_08043C98(this) != 0) { + return; + } + } else { + this->field_0x7c.BYTES.byte3--; + } + pVVar9 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (--this->actionDelay == 0) { + this->subAction = 4; + this->actionDelay = (Random() & 0x38) + 0x28; + this->speed = 0x200; + this->direction = pVVar9->unk00.HALF.HI >> 3; + uVar6 = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gRoomControls.roomOriginX + 0x110, + gRoomControls.roomOriginY + 0x60); + this->field_0x78.HALF.HI = (gUnk_080D1304[Random() & 7] + uVar6) & 0x1f; + } + pVVar9->unk00.HWORD += pVVar9->unk08; + pVVar9->unk04.HWORD += pVVar9->unk0a; + if (pVVar9->unk0a >= 1) { + if (pVVar9->unk04.HALF.HI >= 0x19) { + sVar3 = pVVar9->unk0a; + pVVar9->unk0a = -sVar3; + } + } else { + if (3 >= pVVar9->unk04.HALF.HI) { + sVar3 = pVVar9->unk0a; + pVVar9->unk0a = -sVar3; + } + } + UpdateAnimationSingleFrame(this); +} + +void sub_08042EF4(Entity* this) { + VaatiArm_HeapStruct1* ptr; + Entity* entity; + u32 temp; + u32 x, y; + + UpdateAnimationSingleFrame(this); + if (sub_08043C98(this) == 0) { + if (--this->actionDelay == 0) { + if (sub_0806FCB8(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x50)) { + this->subAction = 6; + this->actionDelay = 0x28; + } else { + this->subAction = 5; + InitAnimationForceUpdate(this, 0xf); + SoundReq(SFX_19B); + } + } + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (ptr->unk04.HALF.HI < 0x20) { + ptr->unk04.HWORD += 0x100; + } + x = this->parent->x.HALF.HI; + y = this->parent->y.HALF.HI - 0x10; + if (sub_0806FCB8(this, x, y, 0x30)) { + temp = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y); + if ((this->field_0x78.HALF.HI - temp) + 4 < 9) { + this->field_0x78.HALF.HI = temp ^ 0x10; + } + } + if (this->field_0x78.HALF.HI != this->direction) { + sub_08004596(this, this->field_0x78.HALF.HI); + ptr->unk00.HALF.HI = this->direction << 3; + } + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + entity->direction = this->direction; + ProcessMovement(entity); + } +} + +void sub_08042FD8(Entity* this) { + Entity* entity; + + UpdateAnimationSingleFrame(this); + if (!sub_08043C98(this)) { + if ((this->frames.all & 1) != 0) { + entity = sub_080A7EE0(0x20); + if (entity != NULL) { + CopyPosition(this, entity); + entity->height.HALF.HI -= 0x18; + this->frames.all = 0; + } + } else { + if (this->frames.all & 0x80) { + if (--this->field_0xf == 0) { + this->subAction = 8; + this->actionDelay = 0x3c; + } else { + this->subAction = 3; + this->actionDelay = 0x3c; + InitAnimationForceUpdate(this, 0); + } + } + } + } +} + +void sub_08043048(Entity* this) { + VaatiArm_HeapStruct1* ptr; + u32 i; + + if (sub_08043C98(this) == 0) { + ptr = ((VaatiArm_HeapStruct*)this->myHeap)->s1; + if (ptr[0].unk04.HALF.HI < 0x50) { + ptr[0].unk04.HWORD += 0x200; + if (0x4f < ptr[0].unk04.HALF.HI) { + for (i = 0; i < 5; i++) { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]->damageType = 0x3b; + } + SoundReq(SFX_153); + } + } else { + ptr[0].unk00.HWORD += ptr[0].unk08 * 8; + if (--this->actionDelay == 0) { + this->subAction = 7; + for (i = 0; i < 5; i++) { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]->damageType = 0x39; + } + } + } + sub_08043B9C(this); + } +} + +void sub_080430D0(Entity* this) { + VaatiArm_HeapStruct1* ptr; + + if (sub_08043C98(this) == 0) { + ptr = ((VaatiArm_HeapStruct*)this->myHeap)->s1; + ptr[0].unk00.HWORD += ptr[0].unk08; + ptr[0].unk04.HWORD -= 0x100; + if (ptr[0].unk04.HALF.HI < 0x18) { + if (--this->field_0xf == 0) { + this->subAction = 8; + this->actionDelay = 0x3c; + } else { + this->subAction = 3; + this->actionDelay = 0x3c; + ptr[0].unk0a = -0xc0; + InitAnimationForceUpdate(this, 0); + } + } + } +} + +void sub_08043130(Entity* this) { + VaatiArm_HeapStruct1* ptr; + Entity* entity; + u32 i; + + ptr = ((VaatiArm_HeapStruct*)this->myHeap)->s1; + if (ptr[0].unk04.HALF.HI != 0) { + if (sub_08043C98(this) == 0) { + if (--ptr[0].unk04.HALF.HI == 0) { + InitAnimationForceUpdate(this, 0xd); + } + } + } else { + if (this->actionDelay != 0) { + this->actionDelay--; + for (i = 1; i < 4; i++) { + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + if (ptr->unk04.HALF.HI != 0) { + ptr->unk04.HALF.HI -= 1; + } + } + } else { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]->height.HALF.HI += 3; + for (i = 0; i < 4; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + if (entity->height.HALF.HI > -4) { + entity->flags = entity->flags & 0x7f; + if (entity->spriteSettings.b.draw == 1) { + SoundReq(SFX_161); + } + entity->spriteSettings.b.draw = 0; + } + } + if (this->spriteSettings.b.draw == 0) { + this->subAction = 9; + this->actionDelay = 0x3c; + sub_0804AA1C(this); + } + } + } +} + +void sub_080431E8(Entity* this) { + u32 i; + VaatiArm_HeapStruct1* ptr; + + if (--this->actionDelay == 0) { + this->action = 6; + this->subAction = 0; + for (i = 0; i < 4; i++) { + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + ptr->unk00.HWORD = gUnk_080D130C[this->type2]; + ptr->unk04.HWORD = 0x8000; + ptr->unk0c = gUnk_080D1414[i]; + if (i == 3) { + InitializeAnimation(((VaatiArm_HeapStruct*)this->myHeap)->entities[3], 0x11); + } + } + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk08 = gUnk_080D1310[this->type2]; + InitAnimationForceUpdate(this, 0xe); + } +} + +void sub_0804325C(Entity* this) { + Entity* entity; + + sub_08043CD4(this); + gUnk_080D1314[this->subAction](this); + sub_08043A10(this); + if (this->field_0x78.HALF.LO != 0) { + if (this->field_0x78.HALF.LO >= 3) { + this->field_0x78.HALF.LO -= 2; + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + entity->height.HALF.HI += this->field_0x78.HALF.LO; + } else { + this->field_0x78.HALF.LO = 0; + } + } +} + +ASM_FUNC("asm/non_matching/vaati/sub_080432A8.inc", void sub_080432A8(Entity* this)) + +NONMATCH("asm/non_matching/vaati/sub_0804334C.inc", void sub_0804334C(Entity* this)) { + int bVar1; + Entity* entity; + VaatiArm_HeapStruct1* s; + u32 i; + u8* ptr; + + if (this->actionDelay != 0) { + if (--this->actionDelay != 0) { + return; + } + for (i = 0; i < 5; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + entity->flags = entity->flags | 0x80; + entity->spriteSettings.b.draw = 1; + } + } + s = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if ((gUnk_080D131C[this->type2] - s->unk00.HALF.HI) + 1 > 2u) { + s->unk00.HWORD += s->unk08; + bVar1 = 0; + } else { + bVar1 = 1; + } + sub_08043B9C(this); + for (i = 0; i < 5; i++) { + ptr = ((u8*)((VaatiArm_HeapStruct*)this->myHeap)->s1) + 0x10 * i; + if (gUnk_080D1414[i] > ptr[0xc]) { + ptr[0xc]++; + if (gUnk_080D1414[i] != ptr[0xc]) { + return; + } + SoundReq(SFX_15E); + return; + } + if ((bVar1) && (i == 4)) { + sub_08043BC8(this); + InitAnimationForceUpdate(this, 7); + if (this->field_0x7c.BYTES.byte2 != 0) { + this->field_0x7c.BYTES.byte2 = 0; + ((VaatiArm_HeapStruct*)this->myHeap)->parent->subAction = 2; + } + } + } +} +END_NONMATCH + +void sub_08043420(Entity* this) { + gUnk_080D1320[this->subAction](this); + sub_08043ABC(this); +} + +void sub_08043440(Entity* this) { + u32 i; + int iVar4; + u8* ptr; + int offset; + int zero; + + i = 0; + iVar4 = 0; + zero = 0; + offset = 0x18; + do { + ptr = ((u8*)this->myHeap) + offset; + if (ptr[5] >= 0x11) { + ptr[5] -= 0x10; + iVar4++; + } else { + ((u16*)ptr)[2] = zero; + } + offset += 0x10; + i++; + } while (i < 5); + if (iVar4 == 0) { + i = 0; + do { + ((VaatiArm_HeapStruct*)this->myHeap)->s1[i].unk00.HWORD = 0x8000; + i++; + } while (i < 5); + this->subAction = 1; + InitAnimationForceUpdate(this, 0x10); + } +} + +NONMATCH("asm/non_matching/vaati/sub_08043490.inc", void sub_08043490(Entity* this)) { + Entity* entity; + + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + if (entity->height.HALF.HI < -4) { + entity->field_0x20 = 0x18000; + this->subAction = 2; + this->field_0x7c.BYTES.byte2 = 0; + ((VaatiArm_HeapStruct*)this->myHeap)->parent->subAction = 2; + } else { + entity->height.HALF.HI -= 2; + if (entity->height.HALF.HI < 0) { + entity->flags = entity->flags | 0x80; + entity->spriteSettings.b.draw = 1; + entity->field_0x3c = entity->field_0x3c & 0xef; + entity->damageType = 0x3a; + entity->hitbox = (Hitbox*)&gUnk_080FD450; + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[2]; + entity->flags = entity->flags | 0x80; + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + entity->flags = entity->flags & 0x7f; + } + } + UpdateAnimationSingleFrame(this); +} +END_NONMATCH + +void sub_08043520(Entity* this) { + Entity* entity; + + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + sub_08003FC4(entity, 0x1a00); + if ((entity->field_0x20 < 0) && (-6 < entity->height.HALF.HI)) { + entity->height.HALF.HI = -6; + this->subAction = 3; + this->field_0x7a.HWORD = 900; + } +} + +void sub_0804355C(Entity* this) { + sub_08043DB0(this); + if (--this->field_0x7a.HWORD == 0) { + this->subAction = 4; + } + UpdateAnimationSingleFrame(this); +} + +void sub_08043580(Entity* this) { + Entity* entity; + u32 i; + + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->height.HALF.HI += 3; + for (i = 0; i < 5; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + if (-4 < entity->height.HALF.HI) { + entity->flags = entity->flags & 0x7f; + entity->spriteSettings.b.draw = 0; + } + } + if ((this->spriteSettings.b.draw & 3) == 0) { + this->subAction = 5; + this->actionDelay = 0x3c; + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + entity->field_0x3c = entity->field_0x3c | 0x10; + entity->damageType = 0x39; + entity->hitbox = (Hitbox*)&gUnk_080FD538; + sub_0804AA1C(this); + } +} + +void sub_080435F4(Entity* this) { + Entity* entity; + u32 i; + VaatiArm_HeapStruct1* ptr; + + if (--this->actionDelay == 0) { + this->action = 6; + this->subAction = 1; + this->actionDelay = 1; + for (i = 0; i < 5; i++) { + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + ptr->unk00.HWORD = gUnk_080D1338[this->type2]; + ptr->unk04.HWORD = 0x4000; + ptr->unk0c = 0; + ptr->unk08 = gUnk_080D133C[this->type2]; + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + if (i == 0) { + sub_08043B9C(entity); + } else { + InitializeAnimation(entity, gUnk_080D1340[i]); + } + } + } +} + +void sub_08043680(Entity* this) { + gUnk_080D1348[this->subAction](this); +} + +void sub_08043698(Entity* this) { + Entity* entity; + u32 i; + + this->subAction = 1; + this->actionDelay = 0x3c; + for (i = 0; i < 5; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + entity->flags = entity->flags & 0x7f; + } +} + +static inline void deleteThing(Entity* this, const u32 index) { + if (--this->actionDelay == 0) { + this->actionDelay = 0x14; + this->subAction = index + 1; + if (index == 1) { + this->spriteSettings.b.draw = 0; + } + CreateFx(((VaatiArm_HeapStruct*)this->myHeap)->entities[index], 0x51, 0); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[index]->myHeap = NULL; + DeleteEntity(((VaatiArm_HeapStruct*)this->myHeap)->entities[index]); + } +} + +void sub_080436C0(Entity* this) { + deleteThing(this, 1); +} + +void sub_08043700(Entity* this) { + deleteThing(this, 2); +} + +void sub_08043738(Entity* this) { + deleteThing(this, 3); +} + +NONMATCH("asm/non_matching/vaati/sub_08043770.inc", void sub_08043770(Entity* this)) { + Entity* entity; + + if (--this->actionDelay == 0) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->parent; + if ((gScreenTransition.field_0x39 & 0xc) == 0) { + entity->subAction = 2; + } + if (this->type2 == 0) { + ((VaatiArm_HeapStruct*)this->myHeap)->parent = NULL; + gScreenTransition.field_0x39 &= 0xfe; + } else { + *(u32*)((VaatiArm_HeapStruct*)this->myHeap)->s1 = 0; + gScreenTransition.field_0x39 &= 0xfd; + } + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->myHeap = NULL; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->currentHealth = 0; + (*(Entity**)&this->field_0x68)->parent = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + DeleteThisEntity(); + } +} +END_NONMATCH + +u32 sub_080437DC(Entity* this) { + u16 temp; + VaatiArm_HeapStruct* heapStruct; + Entity* entity; + + if (gEntCount >= 0x44) + return 0; + heapStruct = zMalloc(sizeof(VaatiArm_HeapStruct)); + if (heapStruct == NULL) + return 0; + this->spritePriority.b0 = 5; + this->field_0x3c = this->field_0x3c | 0x10; + this->myHeap = (u32*)heapStruct; + heapStruct->entities[0] = this; + entity = CreateEnemy(VAATI_ARM, 1); + entity->spritePriority.b0 = 5; + entity->field_0x3c = entity->field_0x3c | 0x10; + entity->myHeap = (u32*)heapStruct; + heapStruct->entities[1] = entity; + CopyPosition(this, entity); + entity = CreateEnemy(VAATI_ARM, 2); + entity->spritePriority.b0 = 5; + entity->field_0x3c = entity->field_0x3c | 0x10; + entity->myHeap = (u32*)heapStruct; + heapStruct->entities[2] = entity; + CopyPosition(this, entity); + entity = CreateEnemy(VAATI_ARM, 3); + entity->spritePriority.b0 = 5; + entity->field_0x3c = entity->field_0x3c | 0x10; + entity->myHeap = (u32*)heapStruct; + heapStruct->entities[3] = entity; + CopyPosition(this, entity); + entity = CreateEnemy(VAATI_ARM, 4); + entity->spritePriority.b0 = 5; + entity->field_0x3c = entity->field_0x3c | 0x10; + entity->myHeap = (u32*)heapStruct; + heapStruct->entities[4] = entity; + CopyPosition(this, entity); + heapStruct->parent = this->parent; + temp = gUnk_080D135C[this->type2]; + heapStruct->s1[0].unk00.HWORD = temp; + heapStruct->s1[0].unk04.HWORD = 0x4000; + heapStruct->s1[0].unk0c = 0; + heapStruct->s1[1].unk00.HWORD = temp; + heapStruct->s1[1].unk04.HWORD = 0x4000; + heapStruct->s1[1].unk0c = 0; + heapStruct->s1[2].unk00.HWORD = temp; + heapStruct->s1[2].unk04.HWORD = 0x4000; + heapStruct->s1[2].unk0c = 0; + heapStruct->s1[3].unk00.HWORD = temp; + heapStruct->s1[3].unk04.HWORD = 0x4000; + heapStruct->s1[3].unk0c = 0; + heapStruct->s1[4].unk00.HWORD = temp; + heapStruct->s1[4].unk04.HWORD = 0x4000; + heapStruct->s1[4].unk0c = 0; + return 1; +} + +ASM_FUNC("asm/non_matching/vaati/sub_0804393C.inc", void sub_0804393C(Entity* this)) + +void sub_08043A10(Entity* this) { + sub_08043B7C(this); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[4]); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->y.HALF.HI -= 8; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->height.HALF.HI -= 8; + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[3]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[2]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[1]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[0]); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->y.HALF.HI++; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->spriteOffsetY--; + if (this->field_0x7c.BYTES.byte0 != 0) { + this->field_0x7c.BYTES.byte0--; + } +} + +void sub_08043A78(Entity* this) { + this->field_0x7c.BYTES.byte0 = 0; + sub_08043B7C(this); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[2]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[1]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[0]); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->y.HALF.HI++; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->spriteOffsetY--; +} + +void sub_08043ABC(Entity* this) { + this->field_0x7c.BYTES.byte0 = 0; + sub_08043B7C(this); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[3]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[2]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[1]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[0]); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->y.HALF.HI++; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->spriteOffsetY--; +} + +ASM_FUNC("asm/non_matching/vaati/sub_08043B08.inc", void sub_08043B08(Entity* this)) + +void sub_08043B7C(Entity* this) { + sub_08043B08(((VaatiArm_HeapStruct*)this->myHeap)->entities[1]); + sub_08043B08(((VaatiArm_HeapStruct*)this->myHeap)->entities[2]); + sub_08043B08(((VaatiArm_HeapStruct*)this->myHeap)->entities[3]); +} + +void sub_08043B9C(Entity* this) { + u32 index = ((((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk00.HALF.HI + 4) & 0xff) >> 3; + if (gUnk_080D13B7[index] != this->frameIndex - 1) { + InitAnimationForceUpdate(this, gUnk_080D13B7[index]); + } +} + +void sub_08043BC8(Entity* this) { + VaatiArm_HeapStruct1* pVVar2; + const Coords* ptr; + + this->action = 2; + ptr = &gUnk_080D13D8[this->type2]; + pVVar2 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + pVVar2->unk08 = ptr->HALF.x; + pVVar2->unk0a = ptr->HALF.y; + pVVar2->unk0d = 0x5a; + pVVar2->unk0e = 0x28; +} + +void sub_08043BF0(Entity* this) { + u8 bVar1; + u32 uVar2; + VaatiArm_HeapStruct1* ptr; + + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (this->type2 == 0) { + bVar1 = ptr->unk00.HALF.HI; + uVar2 = 6; + if (((0x2f < bVar1) && (uVar2 = 7, 0x5f < bVar1)) && (uVar2 = 9, bVar1 < 0x90)) { + uVar2 = 8; + } + } else { + bVar1 = ptr->unk00.HALF.HI; + uVar2 = 8; + if (((bVar1 < 0xd1) && (uVar2 = 7, bVar1 < 0xa1)) && (uVar2 = 5, 0x70 < bVar1)) { + uVar2 = 6; + } + } + if (this->animIndex != uVar2) { + InitAnimationForceUpdate(this, uVar2); + } +} + +void sub_08043C40(Entity* this, VaatiArm_HeapStruct1* heapStruct) { + u8* iVar3; + int offset; + const u8* puVar6; + u32 i; + + if (heapStruct->unk04.HALF.HI < 0x20) { + puVar6 = gUnk_080D13E0; + } else { + if (heapStruct->unk04.HALF.HI < 0x30) { + puVar6 = gUnk_080D13E3; + } else { + if (heapStruct->unk04.HALF.HI < 0x78) { + puVar6 = &gUnk_080D13E0[6]; + } else { + puVar6 = gUnk_080D13E0; + } + } + } + for (i = 0, offset = 0x28; i < 3; offset += 0x10, i++) { + iVar3 = (u8*)(int)((VaatiArm_HeapStruct*)this->myHeap) + offset; + if (puVar6[i] != iVar3[0xc]) { + if (puVar6[i] < iVar3[0xc]) { + iVar3[0xc] -= 1; + } else { + iVar3[0xc] += 1; + } + } + } +} + +u32 sub_08043C98(Entity* this) { + Entity* e1 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[2]; + Entity* e2 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + if ((e1->bitfield == 0x9d) || (e2->bitfield == 0x9d)) { + sub_08043D08(this); + gScreenTransition.field_0x38 |= 2; + return 1; + } else { + return 0; + } +} + +void sub_08043CD4(Entity* this) { + u32 i; + for (i = 0; i < 5; i++) { + if (((VaatiArm_HeapStruct*)this->myHeap)->entities[i]->bitfield == 0x9d) { + this->field_0x7c.BYTES.byte0 = 0x78; + this->field_0x7c.BYTES.byte1 = i; + return; + } + } +} + +void sub_08043D08(Entity* this) { + Entity* entity; + Entity* fx; + u32 i; + + this->action = 7; + this->subAction = 0; + InitAnimationForceUpdate(this, 0xd); + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + entity->flags &= 0x7f; + entity->spriteSettings.b.draw = 0; + InitializeAnimation(entity, 0x13); + sub_0804AA1C(entity); + fx = CreateFx(entity, 0x51, 0); + if (fx != NULL) { + fx->x.HALF.HI += gUnk_080D13E9[this->type2]; + fx->y.HALF.HI -= 6; + fx->spritePriority.b0 = 3; + } + CopyPosition(((VaatiArm_HeapStruct*)this->myHeap)->entities[3], entity); + entity->height.HALF.HI += ((VaatiArm_HeapStruct*)this->myHeap)->s1[3].unk0c; + for (i = 0; i < 5; i++) { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]->damageType = 0x39; + } + EnqueueSFX(SFX_HIT); +} + +NONMATCH("asm/non_matching/vaati/sub_08043DB0.inc", void sub_08043DB0(Entity* this)) { + s32 cVar1; + u32 uVar2; + Entity* pEVar3; + Entity* pEVar4; + VaatiArm_HeapStruct1* iVar5; + + if (((gPlayerState.flags.all & 0x80) != 0) && + (pEVar3 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3], + uVar2 = CheckPlayerInRegion(pEVar3->x.HALF.HI - gRoomControls.roomOriginX, + pEVar3->y.HALF.HI - gRoomControls.roomOriginY + 2, 3, 3), + uVar2 != 0)) { + DoExitTransition((ScreenTransitionData*)&gUnk_080D13EC); + if ((gScreenTransition.field_0x39 & 3) != 3) { + gScreenTransition.roomID = 1; + } + cVar1 = this->field_0x7a.HWORD / 0x3c; + gScreenTransition.field_0x3d = 0x1e - cVar1; + gScreenTransition.field_0x3c = this->type2; + pEVar3 = ((VaatiArm_HeapStruct*)this->myHeap)->parent; + gScreenTransition.field_0x40 = pEVar3->x.HALF.HI; + gScreenTransition.field_0x42 = pEVar3->y.HALF.HI; + pEVar4 = ((VaatiArm_HeapStruct*)pEVar3->myHeap)->parent; + if (pEVar4 != NULL) { + gScreenTransition.field_0x44 = pEVar4->x.HALF.HI; + gScreenTransition.field_0x46 = pEVar4->y.HALF.HI; + } else { + gScreenTransition.field_0x44 = gRoomControls.roomOriginX + 0x110; + gScreenTransition.field_0x46 = gRoomControls.roomOriginY + 0x60; + } + iVar5 = (VaatiArm_HeapStruct1*)(*(int*)((VaatiArm_HeapStruct*)pEVar3->myHeap)->s1); + if (iVar5 != NULL) { + gScreenTransition.field_0x48 = iVar5[2].unk0e; + gScreenTransition.field_0x4a = iVar5[3].unk02; + } else { + gScreenTransition.field_0x48 = gRoomControls.roomOriginX + 0x110; + gScreenTransition.field_0x4a = gRoomControls.roomOriginY + 0x60; + } + } +} +END_NONMATCH + +void sub_08043EB8(Entity* this) { + u32 i; + Entity* pEVar4; + VaatiArm_HeapStruct1* ptr; + + this->flags = this->flags | 0x80; + this->spritePriority.b0 = 4; + InitAnimationForceUpdate(this, 0xd); + pEVar4 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]; + pEVar4->flags = pEVar4->flags | 0x80; + pEVar4->spritePriority.b0 = 4; + pEVar4 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[2]; + pEVar4->flags = pEVar4->flags | 0x80; + pEVar4->spritePriority.b0 = 4; + pEVar4 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + pEVar4->flags = pEVar4->flags & 0x7f; + pEVar4->spriteSettings.b.draw = 1; + pEVar4->spritePriority.b0 = 4; + pEVar4 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + pEVar4->flags = pEVar4->flags | 0x80; + pEVar4->spriteSettings.b.draw = 1; + pEVar4->spritePriority.b0 = 4; + pEVar4->x.HALF.HI = (this->type2 == 0) ? gScreenTransition.field_0x44 : gScreenTransition.field_0x48; + pEVar4->y.HALF.HI = (this->type2 == 0) ? gScreenTransition.field_0x46 : gScreenTransition.field_0x4a; + pEVar4->height.HALF.HI = 0; + pEVar4->field_0x3c = pEVar4->field_0x3c & 0xef; + pEVar4->damageType = 0x3a; + pEVar4->hitbox = (Hitbox*)&gUnk_080FD450; + pEVar4 = CreateObject(OBJECT_AF, 0, 0); + if (pEVar4 != NULL) { + pEVar4->parent = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + } + *(Entity**)&((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->field_0x68 = pEVar4; + for (i = 0; i < 5; i++) { + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + ptr->unk00.HWORD = 0x8000; + ptr->unk04.HWORD = 0; + ptr->unk0c = gUnk_080D1419[i]; + } +} +NONMATCH("asm/non_matching/vaati/sub_08044000.inc", void sub_08044000(Entity* this)) { + Entity* entity; + u32 i; + VaatiArm_HeapStruct1* ptr; + const u16* ptr2; + + ptr2 = &gUnk_080D1400[this->type2 * 5]; + for (i = 0; i < 5; ptr2++, i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + entity->flags = entity->flags | 0x80; + entity->spritePriority.b0 = 4; + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + ptr->unk00.HWORD = *ptr2; + ptr->unk04.HWORD = 0x4000; + ptr->unk0c = gUnk_080D1414[i]; + } + InitAnimationForceUpdate(this, 7); + CopyPosition(((VaatiArm_HeapStruct*)this->myHeap)->parent, ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]); +} +END_NONMATCH + +void sub_08044078(Entity* this) { + if (this->action == 0) { + this->action = 1; + if (this->type != 3 || + !(((gScreenTransition.field_0x38 & 1) == 0 || + (((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->type2 != gScreenTransition.field_0x3c)))) { + InitializeAnimation(this, 0x12); + } else { + InitializeAnimation(this, 0x11); + } + } + GetNextFrame(this); +} + +void sub_080440CC(Entity* this) { + if (this->action == 0) { + this->action = 1; + if ((gScreenTransition.field_0x38 & 1) != 0 && + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->type2 == gScreenTransition.field_0x3c) { + InitializeAnimation(this, 0x13); + } else { + InitializeAnimation(this, 0x11); + } + } + GetNextFrame(this); +}