diff --git a/asm/ballChainSoldier.s b/asm/ballChainSoldier.s index 515d4854..0f897b81 100644 --- a/asm/ballChainSoldier.s +++ b/asm/ballChainSoldier.s @@ -71,7 +71,7 @@ sub_0803E580: @ 0x0803E580 adds r0, r5, #0 movs r1, #0x19 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent cmp r0, #0 beq _0803E5E4 str r5, [r0, #0x50] diff --git a/asm/bowMoblin.s b/asm/bowMoblin.s index 4ac302e7..1a005d0f 100644 --- a/asm/bowMoblin.s +++ b/asm/bowMoblin.s @@ -344,7 +344,7 @@ _0803C46C: lsrs r2, r2, #0x19 adds r0, r4, #0 movs r1, #0xd - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _0803C49A diff --git a/asm/businessScrubPrologue.s b/asm/businessScrubPrologue.s index f1e8909d..8a48c644 100644 --- a/asm/businessScrubPrologue.s +++ b/asm/businessScrubPrologue.s @@ -261,7 +261,7 @@ _08045D60: adds r0, r4, #0 movs r1, #4 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _08045DF8 diff --git a/asm/code_08049D30.s b/asm/code_08049D30.s index 930b85a7..2368553e 100644 --- a/asm/code_08049D30.s +++ b/asm/code_08049D30.s @@ -1682,13 +1682,13 @@ _0804A982: mov sl, r5 pop {r4, r5, r6, r7, pc} - thumb_func_start sub_0804A98C -sub_0804A98C: @ 0x0804A98C + thumb_func_start CreateProjectileWithParent +CreateProjectileWithParent: @ 0x0804A98C push {r4, r5, r6, lr} adds r6, r0, #0 adds r0, r1, #0 adds r5, r2, #0 - bl sub_080A7EE0 + bl CreateProjectile adds r4, r0, #0 cmp r4, #0 beq _0804A9A8 diff --git a/asm/code_0805E3B0.s b/asm/code_0805E3B0.s index 5a0336df..adb78211 100644 --- a/asm/code_0805E3B0.s +++ b/asm/code_0805E3B0.s @@ -333,7 +333,7 @@ sub_0805E5C0: @ 0x0805E5C0 bl sub_0805E428 bl ClearHitboxList bl sub_0806F0A4 - ldr r1, _0805E5F4 @ =gUnk_03005F40 + ldr r1, _0805E5F4 @ =_UpdateEntities movs r0, #0 bl _call_via_r1 bl ClearAllDeletedEntities @@ -341,18 +341,18 @@ sub_0805E5C0: @ 0x0805E5C0 pop {pc} .align 2, 0 _0805E5F0: .4byte gRoomVars -_0805E5F4: .4byte gUnk_03005F40 +_0805E5F4: .4byte _UpdateEntities thumb_func_start sub_0805E5F8 sub_0805E5F8: @ 0x0805E5F8 push {lr} - ldr r1, _0805E608 @ =gUnk_03005F40 + ldr r1, _0805E608 @ =_UpdateEntities movs r0, #1 bl _call_via_r1 bl ClearAllDeletedEntities pop {pc} .align 2, 0 -_0805E608: .4byte gUnk_03005F40 +_0805E608: .4byte _UpdateEntities thumb_func_start EraseAllEntities EraseAllEntities: @ 0x0805E60C diff --git a/asm/code_080A7C00.s b/asm/code_080A7C00.s index 159cfcbb..38273dbe 100644 --- a/asm/code_080A7C00.s +++ b/asm/code_080A7C00.s @@ -411,8 +411,8 @@ _080A7EDC: _080A7EDE: pop {pc} - thumb_func_start sub_080A7EE0 -sub_080A7EE0: @ 0x080A7EE0 + thumb_func_start CreateProjectile +CreateProjectile: @ 0x080A7EE0 push {r4, r5, lr} adds r5, r0, #0 bl GetEmptyEntity diff --git a/asm/enemy49.s b/asm/enemy49.s index 771bfb54..416bbc1f 100644 --- a/asm/enemy49.s +++ b/asm/enemy49.s @@ -262,7 +262,7 @@ sub_0803D058: @ 0x0803D058 adds r4, r0, #0 movs r1, #0x16 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r5, r0, #0 cmp r5, #0 beq _0803D0AE diff --git a/asm/enemy5A.s b/asm/enemy5A.s deleted file mode 100644 index fedd8dc6..00000000 --- a/asm/enemy5A.s +++ /dev/null @@ -1,652 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Enemy5A -Enemy5A: @ 0x080456D8 - push {lr} - ldr r1, _080456E4 @ =gUnk_080D1888 - bl EnemyFunctionHandler - pop {pc} - .align 2, 0 -_080456E4: .4byte gUnk_080D1888 - - thumb_func_start sub_080456E8 -sub_080456E8: @ 0x080456E8 - push {lr} - ldr r2, _080456FC @ =gUnk_080D18A0 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080456FC: .4byte gUnk_080D18A0 - - thumb_func_start sub_08045700 -sub_08045700: @ 0x08045700 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xa] - cmp r0, #0 - beq _080457D0 - ldr r0, [r5, #0x50] - ldr r3, [r0, #0x50] - adds r0, r5, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080457D0 - movs r0, #0x3f - ands r0, r1 - cmp r0, #0xe - beq _08045728 - cmp r0, #0x15 - bne _08045778 -_08045728: - adds r1, r5, #0 - adds r1, #0x81 - ldrb r0, [r1] - cmp r0, #0 - bne _0804575C - movs r0, #3 - strb r0, [r5, #0xc] - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - ldrb r1, [r5, #0xa] - lsls r1, r1, #3 - ldrb r0, [r5, #0xe] - adds r0, #2 - orrs r1, r0 - adds r0, r5, #0 - bl InitializeAnimation - ldr r0, [r5, #0x50] - ldrb r1, [r0, #0xa] - lsls r1, r1, #3 - ldrb r2, [r5, #0xe] - adds r2, #2 - orrs r1, r2 - bl InitializeAnimation -_0804575C: - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _0804576C - movs r0, #0xbd - lsls r0, r0, #1 - bl SoundReq - b _080457D0 -_0804576C: - ldr r0, _08045774 @ =0x00000119 - bl SoundReq - b _080457D0 - .align 2, 0 -_08045774: .4byte 0x00000119 -_08045778: - adds r2, r5, #0 - adds r2, #0x45 - ldrb r1, [r2] - adds r0, r1, #0 - cmp r0, #0xff - beq _080457D0 - movs r0, #0xff - strb r0, [r2] - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _080457D0 - adds r0, r3, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _080457D0 - adds r0, r3, #0 - adds r0, #0x76 - movs r1, #1 - ldrb r2, [r5, #0xb] - lsls r1, r2 - ldrb r2, [r0] - orrs r1, r2 - strb r1, [r0] - adds r1, r5, #0 - adds r1, #0x85 - ldrb r0, [r1] - cmp r0, #0 - bne _080457D0 - adds r0, #1 - strb r0, [r1] - ldrb r1, [r5, #0xa] - lsls r1, r1, #3 - movs r4, #6 - orrs r1, r4 - adds r0, r5, #0 - bl InitializeAnimation - ldr r0, [r5, #0x50] - ldrb r1, [r0, #0xa] - lsls r1, r1, #3 - orrs r1, r4 - bl InitializeAnimation -_080457D0: - ldr r1, _080457DC @ =gUnk_080D1888 - adds r0, r5, #0 - bl sub_0804AA30 - pop {r4, r5, pc} - .align 2, 0 -_080457DC: .4byte gUnk_080D1888 - - thumb_func_start nullsub_173 -nullsub_173: @ 0x080457E0 - bx lr - .align 2, 0 - - thumb_func_start sub_080457E4 -sub_080457E4: @ 0x080457E4 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08045850 @ =gTextBox - ldrb r0, [r0] - movs r2, #0x7f - ands r2, r0 - cmp r2, #0 - bne _08045868 - movs r3, #1 - strb r3, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - adds r0, #0x80 - strb r2, [r0] - adds r0, #1 - strb r2, [r0] - adds r0, #4 - strb r2, [r0] - strb r2, [r4, #0xf] - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #0x30 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x83 - strb r2, [r0] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _08045854 - adds r0, r4, #0 - bl sub_08045A00 - movs r0, #0x5a - movs r1, #1 - bl CreateEnemy - adds r1, r0, #0 - cmp r1, #0 - beq _0804585A - str r4, [r1, #0x50] - str r1, [r4, #0x54] - ldrb r0, [r4, #0xe] - strb r0, [r1, #0xe] - ldrb r0, [r4, #0xb] - strb r0, [r1, #0xb] - adds r0, r4, #0 - bl CopyPosition - b _0804585A - .align 2, 0 -_08045850: .4byte gTextBox -_08045854: - adds r0, r4, #0 - adds r0, #0x63 - strb r3, [r0] -_0804585A: - ldrb r1, [r4, #0xa] - lsls r1, r1, #3 - movs r0, #1 - orrs r1, r0 - adds r0, r4, #0 - bl InitializeAnimation -_08045868: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0804586C -sub_0804586C: @ 0x0804586C - push {r4, lr} - adds r4, r0, #0 - bl sub_08045A28 - adds r1, r4, #0 - adds r1, #0x82 - ldrb r0, [r1] - cmp r0, #0 - bne _080458AA - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080458C2 - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _0804589A - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] -_0804589A: - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0xa] - lsls r1, r1, #3 - adds r0, r4, #0 - bl InitializeAnimation - b _080458C2 -_080458AA: - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080458C2 - ldrb r0, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #1 - orrs r1, r0 - strb r1, [r4, #0x18] -_080458C2: - pop {r4, pc} - - thumb_func_start sub_080458C4 -sub_080458C4: @ 0x080458C4 - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_08045A28 - ldr r1, [r5, #0x50] - ldrb r2, [r5, #0xa] - cmp r2, #0 - beq _080458D6 - ldr r1, [r1, #0x50] -_080458D6: - ldrb r0, [r1, #0xc] - cmp r0, #3 - bne _08045934 - adds r0, r1, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #1 - bne _08045934 - movs r0, #0 - movs r4, #4 - strb r4, [r5, #0xc] - strb r0, [r5, #0xf] - cmp r2, #0 - beq _08045934 - ldrb r0, [r5, #0x10] - movs r1, #0x7f - ands r1, r0 - strb r1, [r5, #0x10] - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _0804591C - ldrb r1, [r5, #0xa] - lsls r1, r1, #3 - movs r4, #5 - orrs r1, r4 - adds r0, r5, #0 - bl InitializeAnimation - ldr r0, [r5, #0x50] - ldrb r1, [r0, #0xa] - lsls r1, r1, #3 - orrs r1, r4 - bl InitializeAnimation - b _08045934 -_0804591C: - ldrb r1, [r5, #0xa] - lsls r1, r1, #3 - orrs r1, r4 - adds r0, r5, #0 - bl InitializeAnimation - ldr r0, [r5, #0x50] - ldrb r1, [r0, #0xa] - lsls r1, r1, #3 - orrs r1, r4 - bl InitializeAnimation -_08045934: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08045938 -sub_08045938: @ 0x08045938 - push {r4, lr} - adds r4, r0, #0 - bl sub_08045A28 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08045980 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _08045980 - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _08045966 - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x32 - b _0804597E -_08045966: - ldr r0, [r4, #0x50] - ldr r2, [r0, #0x50] - adds r2, #0x76 - movs r0, #1 - ldrb r1, [r4, #0xb] - lsls r0, r1 - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x31 -_0804597E: - strb r0, [r1] -_08045980: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08045984 -sub_08045984: @ 0x08045984 - push {r4, lr} - adds r4, r0, #0 - bl sub_08045A28 - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _080459A6 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080459FE - movs r0, #0x20 - strb r0, [r4, #0xf] - b _080459FE -_080459A6: - ldr r2, [r4, #0x50] - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _080459B0 - ldr r2, [r2, #0x50] -_080459B0: - ldrb r0, [r2, #0x14] - cmp r0, #2 - bhi _080459FE - ldrb r0, [r2, #0xc] - cmp r0, #3 - beq _080459FE - movs r0, #0 - movs r3, #1 - strb r3, [r4, #0xc] - strb r0, [r4, #0xf] - adds r1, r4, #0 - adds r1, #0x81 - strb r0, [r1] - adds r1, #4 - strb r0, [r1] - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _080459DA - subs r1, #0x46 - movs r0, #0x33 - strb r0, [r1] -_080459DA: - adds r0, r2, #0 - adds r0, #0x75 - ldrb r0, [r0] - ldrb r1, [r4, #0xb] - asrs r0, r1 - ands r0, r3 - cmp r0, #0 - beq _080459EE - strb r3, [r4, #0xe] - b _080459F0 -_080459EE: - strb r0, [r4, #0xe] -_080459F0: - ldrb r1, [r4, #0xa] - lsls r1, r1, #3 - movs r0, #1 - orrs r1, r0 - adds r0, r4, #0 - bl InitializeAnimation -_080459FE: - pop {r4, pc} - - thumb_func_start sub_08045A00 -sub_08045A00: @ 0x08045A00 - push {lr} - adds r1, r0, #0 - ldrb r3, [r1, #0xb] - lsls r3, r3, #1 - ldr r0, _08045A24 @ =gUnk_080D18B4 - adds r3, r3, r0 - ldr r0, [r1, #0x50] - movs r2, #0 - ldrsb r2, [r3, r2] - lsls r2, r2, #0x10 - ldrb r3, [r3, #1] - lsls r3, r3, #0x18 - asrs r3, r3, #0x18 - adds r3, #3 - lsls r3, r3, #0x10 - bl PositionRelative - pop {pc} - .align 2, 0 -_08045A24: .4byte gUnk_080D18B4 - - thumb_func_start sub_08045A28 -sub_08045A28: @ 0x08045A28 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - adds r0, #0x82 - ldrb r0, [r0] - cmp r0, #0 - bne _08045A3E - adds r0, r5, #0 - bl GetNextFrame -_08045A3E: - adds r6, r5, #0 - adds r6, #0x5a - ldrb r0, [r6] - movs r1, #0x70 - mov r8, r1 - mov r4, r8 - ands r4, r0 - ldrb r7, [r5, #0xa] - cmp r7, #0 - bne _08045AF8 - adds r0, r5, #0 - bl sub_08045A00 - adds r1, r5, #0 - adds r1, #0x83 - ldrb r0, [r1] - adds r2, r1, #0 - cmp r0, #1 - beq _08045AA4 - cmp r0, #1 - bgt _08045A6E - cmp r0, #0 - beq _08045A78 - b _08045B7C -_08045A6E: - cmp r0, #2 - beq _08045ABC - cmp r0, #3 - beq _08045AE8 - b _08045B7C -_08045A78: - cmp r4, #0x20 - beq _08045A8C - cmp r4, #0x20 - bhi _08045A86 - cmp r4, #0 - beq _08045A96 - b _08045B7C -_08045A86: - cmp r4, #0x40 - beq _08045A96 - b _08045B7C -_08045A8C: - movs r0, #1 - strb r0, [r1] - movs r1, #0x9f - lsls r1, r1, #1 - b _08045B5A -_08045A96: - movs r0, #2 - strb r0, [r2] - ldr r1, _08045AA0 @ =0x0000013F - b _08045B5A - .align 2, 0 -_08045AA0: .4byte 0x0000013F -_08045AA4: - cmp r4, #0 - beq _08045AB0 - cmp r4, #0x10 - bne _08045B7C - strb r7, [r1] - b _08045B58 -_08045AB0: - movs r0, #2 - strb r0, [r1] - ldr r1, _08045AB8 @ =0x0000013F - b _08045B5A - .align 2, 0 -_08045AB8: .4byte 0x0000013F -_08045ABC: - cmp r4, #0x20 - beq _08045AD0 - cmp r4, #0x20 - bhi _08045ACA - cmp r4, #0x10 - beq _08045ADA - b _08045B7C -_08045ACA: - cmp r4, #0x40 - beq _08045ADE - b _08045B7C -_08045AD0: - movs r0, #1 - strb r0, [r1] - movs r1, #0x9f - lsls r1, r1, #1 - b _08045B5A -_08045ADA: - strb r7, [r1] - b _08045B58 -_08045ADE: - strb r0, [r1] - ldr r1, _08045AE4 @ =0x0000013F - b _08045B5A - .align 2, 0 -_08045AE4: .4byte 0x0000013F -_08045AE8: - cmp r4, #0 - bne _08045B7C - movs r0, #2 - strb r0, [r1] - ldr r1, _08045AF4 @ =0x0000013F - b _08045B5A - .align 2, 0 -_08045AF4: .4byte 0x0000013F -_08045AF8: - ldr r0, [r5, #0x50] - ldr r3, _08045B18 @ =0xFFFF0000 - adds r1, r5, #0 - movs r2, #0 - bl PositionRelative - adds r2, r5, #0 - adds r2, #0x83 - ldrb r0, [r2] - cmp r0, #1 - beq _08045B3A - cmp r0, #1 - bgt _08045B1C - cmp r0, #0 - beq _08045B22 - b _08045B7C - .align 2, 0 -_08045B18: .4byte 0xFFFF0000 -_08045B1C: - cmp r0, #2 - beq _08045B68 - b _08045B7C -_08045B22: - ldrb r0, [r6] - mov r1, r8 - ands r1, r0 - cmp r1, #0x10 - beq _08045B54 - cmp r1, #0x20 - bne _08045B7C - movs r0, #1 - strb r0, [r2] - movs r1, #0x9f - lsls r1, r1, #1 - b _08045B5A -_08045B3A: - ldrb r0, [r6] - mov r1, r8 - ands r1, r0 - cmp r1, #0 - beq _08045B4A - cmp r1, #0x10 - beq _08045B54 - b _08045B7C -_08045B4A: - strb r1, [r2] - ldr r1, _08045B50 @ =0x0000013F - b _08045B5A - .align 2, 0 -_08045B50: .4byte 0x0000013F -_08045B54: - movs r0, #2 - strb r0, [r2] -_08045B58: - ldr r1, _08045B64 @ =0x0000013B -_08045B5A: - adds r0, r5, #0 - bl sub_0801D2B4 - b _08045B7C - .align 2, 0 -_08045B64: .4byte 0x0000013B -_08045B68: - ldrb r0, [r6] - mov r1, r8 - ands r1, r0 - cmp r1, #0 - bne _08045B7C - strb r1, [r2] - ldr r1, _08045B84 @ =0x0000013F - adds r0, r5, #0 - bl sub_0801D2B4 -_08045B7C: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08045B84: .4byte 0x0000013F diff --git a/asm/enemy5F.s b/asm/enemy5F.s deleted file mode 100644 index 0c4df266..00000000 --- a/asm/enemy5F.s +++ /dev/null @@ -1,474 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Enemy5F -Enemy5F: @ 0x080482C4 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldr r0, [r0, #4] - cmp r0, #0 - bne _080482D4 - bl DeleteThisEntity -_080482D4: - ldr r0, _080482E8 @ =gUnk_080D1D48 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_080482E8: .4byte gUnk_080D1D48 - - thumb_func_start sub_080482EC -sub_080482EC: @ 0x080482EC - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08048310 @ =gScreenTransition - adds r0, #0x38 - ldrb r1, [r0] - movs r2, #1 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _08048314 - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation - b _08048326 - .align 2, 0 -_08048310: .4byte gScreenTransition -_08048314: - strb r2, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - movs r0, #0xb3 - lsls r0, r0, #1 - bl SoundReq -_08048326: - adds r0, r4, #0 - bl sub_080485D8 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08048330 -sub_08048330: @ 0x08048330 - push {r4, lr} - adds r4, r0, #0 - bl sub_080485D8 - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08048358 - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation -_08048358: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0804835C -sub_0804835C: @ 0x0804835C - push {r4, lr} - adds r4, r0, #0 - bl sub_080485D8 - ldr r0, _08048384 @ =gScreenTransition - adds r0, #0x39 - ldrb r1, [r0] - movs r2, #3 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - bne _08048382 - strb r2, [r4, #0xc] - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r1, r0 - strb r1, [r4, #0x10] - movs r0, #0x80 - strh r0, [r4, #0x24] -_08048382: - pop {r4, pc} - .align 2, 0 -_08048384: .4byte gScreenTransition - - thumb_func_start sub_08048388 -sub_08048388: @ 0x08048388 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r2, [r5, #0x50] - adds r0, r2, #0 - adds r0, #0x79 - ldrb r0, [r0] - cmp r0, #0 - beq _080483A0 - adds r0, r5, #0 - bl sub_080485D8 - b _080483F2 -_080483A0: - ldrb r1, [r5, #0xa] - lsls r1, r1, #1 - ldr r0, _080483F4 @ =gUnk_080D1D98 - adds r1, r1, r0 - movs r0, #0x2e - ldrsh r4, [r2, r0] - movs r0, #0 - ldrsb r0, [r1, r0] - adds r4, r4, r0 - movs r0, #0x32 - ldrsh r2, [r2, r0] - movs r0, #1 - ldrsb r0, [r1, r0] - adds r6, r2, r0 - movs r1, #0x2e - ldrsh r0, [r5, r1] - movs r2, #0x32 - ldrsh r1, [r5, r2] - adds r2, r4, #0 - adds r3, r6, #0 - bl sub_080045D4 - strb r0, [r5, #0x15] - adds r0, r5, #0 - bl sub_0806F69C - ldr r0, [r5, #0x50] - ldrh r0, [r0, #0x36] - strh r0, [r5, #0x36] - movs r1, #0x2e - ldrsh r0, [r5, r1] - cmp r0, r4 - bne _080483F2 - movs r2, #0x32 - ldrsh r0, [r5, r2] - cmp r0, r6 - bne _080483F2 - movs r0, #4 - strb r0, [r5, #0xc] - movs r0, #0x3c - strb r0, [r5, #0xe] -_080483F2: - pop {r4, r5, r6, pc} - .align 2, 0 -_080483F4: .4byte gUnk_080D1D98 - - thumb_func_start sub_080483F8 -sub_080483F8: @ 0x080483F8 - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_080485FC - ldrb r0, [r4, #0xe] - adds r5, r0, #0 - cmp r5, #0 - beq _0804841C - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08048436 - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - b _08048436 -_0804841C: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08048436 - movs r0, #5 - strb r0, [r4, #0xc] - strb r5, [r4, #0xe] -_08048436: - pop {r4, r5, pc} - - thumb_func_start sub_08048438 -sub_08048438: @ 0x08048438 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0804846A - movs r0, #6 - strb r0, [r4, #0xc] - ldr r0, [r4, #0x50] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0x14 - bls _08048454 - movs r0, #0x78 - b _08048456 -_08048454: - movs r0, #0x3c -_08048456: - strb r0, [r4, #0xe] - movs r0, #0 - str r0, [r4, #0x54] - adds r0, r4, #0 - movs r1, #5 - bl InitializeAnimation - ldr r0, _08048474 @ =0x0000019B - bl SoundReq -_0804846A: - adds r0, r4, #0 - bl sub_080485FC - pop {r4, pc} - .align 2, 0 -_08048474: .4byte 0x0000019B - - thumb_func_start sub_08048478 -sub_08048478: @ 0x08048478 - push {r4, lr} - adds r4, r0, #0 - bl sub_080485FC - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0xe] - adds r2, r0, #0 - cmp r2, #0 - beq _080484A2 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080484E6 - adds r0, r4, #0 - movs r1, #6 - bl InitializeAnimation - b _080484E6 -_080484A2: - adds r3, r4, #0 - adds r3, #0x5a - ldrb r1, [r3] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080484BC - movs r0, #7 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - strb r2, [r4, #0xf] - b _080484E6 -_080484BC: - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080484E6 - movs r0, #0xfe - ands r0, r1 - strb r0, [r3] - movs r0, #0x24 - bl sub_080A7EE0 - adds r1, r0, #0 - cmp r1, #0 - beq _080484E6 - str r4, [r1, #0x50] - str r1, [r4, #0x54] - movs r3, #0xc0 - lsls r3, r3, #0xc - adds r0, r4, #0 - movs r2, #0 - bl PositionRelative -_080484E6: - pop {r4, pc} - - thumb_func_start sub_080484E8 -sub_080484E8: @ 0x080484E8 - push {r4, lr} - adds r4, r0, #0 - bl sub_080485FC - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _08048528 - movs r0, #8 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - 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, #0x1f - movs r2, #0x40 - bl CreateFx - ldr r2, [r4, #0x50] - adds r2, #0x7b - movs r0, #0x10 - b _08048542 -_08048528: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0804854C - movs r0, #5 - strb r0, [r4, #0xc] - strb r1, [r4, #0xe] - ldr r2, [r4, #0x50] - adds r2, #0x7b - movs r0, #1 -_08048542: - ldrb r4, [r4, #0xa] - lsls r0, r4 - ldrb r1, [r2] - orrs r0, r1 - strb r0, [r2] -_0804854C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08048550 -sub_08048550: @ 0x08048550 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #0xb - bne _08048562 - movs r0, #0x3c - strb r0, [r4, #0xe] - b _0804859E -_08048562: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0804859E - movs r0, #9 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_080485FC - movs r0, #0xb3 - lsls r0, r0, #1 - bl SoundReq -_0804859E: - pop {r4, pc} - - thumb_func_start sub_080485A0 -sub_080485A0: @ 0x080485A0 - push {r4, lr} - adds r4, r0, #0 - bl sub_080485FC - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080485D6 - movs r0, #4 - strb r0, [r4, #0xc] - movs r1, #1 - strb r1, [r4, #0xe] - ldr r2, [r4, #0x50] - adds r2, #0x7b - ldrb r3, [r2] - movs r0, #0xf - ands r0, r3 - ldrb r4, [r4, #0xa] - lsls r1, r4 - orrs r0, r1 - strb r0, [r2] -_080485D6: - pop {r4, pc} - - thumb_func_start sub_080485D8 -sub_080485D8: @ 0x080485D8 - push {lr} - adds r1, r0, #0 - ldrb r3, [r1, #0xa] - lsls r3, r3, #1 - ldr r0, _080485F8 @ =gUnk_080D1D70 - adds r3, r3, r0 - ldr r0, [r1, #0x50] - movs r2, #0 - ldrsb r2, [r3, r2] - ldrb r3, [r3, #1] - lsls r3, r3, #0x18 - asrs r3, r3, #0x18 - bl sub_0806FA90 - pop {pc} - .align 2, 0 -_080485F8: .4byte gUnk_080D1D70 - - thumb_func_start sub_080485FC -sub_080485FC: @ 0x080485FC - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xa] - lsls r1, r1, #1 - ldr r0, _08048638 @ =gUnk_080D1D98 - adds r1, r1, r0 - ldr r0, [r4, #0x50] - movs r2, #0 - ldrsb r2, [r1, r2] - movs r3, #1 - ldrsb r3, [r1, r3] - adds r1, r4, #0 - bl sub_0806FA90 - ldr r3, _0804863C @ =gUnk_080D1D78 - ldrb r1, [r4, #0xa] - lsls r1, r1, #3 - ldr r0, [r4, #0x50] - adds r0, #0x78 - ldrb r0, [r0] - lsrs r0, r0, #4 - movs r2, #7 - ands r0, r2 - adds r1, r1, r0 - adds r1, r1, r3 - movs r0, #0 - ldrsb r0, [r1, r0] - strh r0, [r4, #0x36] - pop {r4, pc} - .align 2, 0 -_08048638: .4byte gUnk_080D1D98 -_0804863C: .4byte gUnk_080D1D78 diff --git a/asm/enemy64.s b/asm/enemy64.s index 19beed75..d70851ed 100644 --- a/asm/enemy64.s +++ b/asm/enemy64.s @@ -139,7 +139,7 @@ _08049144: bl sub_0807B7D8 _0804916E: movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r2, r0, #0 cmp r2, #0 beq _080491E4 @@ -560,7 +560,7 @@ _0804948C: cmp r0, #0 beq _080494B2 movs r0, #0x23 - bl sub_080A7EE0 + bl CreateProjectile adds r2, r0, #0 cmp r2, #0 beq _080494B2 diff --git a/asm/gleerok.s b/asm/gleerok.s index b1e611bb..9bb5a88a 100644 --- a/asm/gleerok.s +++ b/asm/gleerok.s @@ -1838,7 +1838,7 @@ _0802DD74: adds r0, r4, #0 movs r1, #0xa movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 str r1, [r4, #0x54] cmp r1, #0 @@ -1985,7 +1985,7 @@ _0802DE7E: bne _0802DEC4 adds r0, r5, #0 movs r1, #0xa - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 str r1, [r5, #0x54] cmp r1, #0 @@ -2711,7 +2711,7 @@ _0802E40C: adds r0, r4, #0 movs r1, #0xa movs r2, #3 - bl sub_0804A98C + bl CreateProjectileWithParent _0802E422: adds r0, r4, #0 bl sub_0802E518 diff --git a/asm/gyorgFemale.s b/asm/gyorgFemale.s index 49dd9eda..cd5d79f3 100644 --- a/asm/gyorgFemale.s +++ b/asm/gyorgFemale.s @@ -29,7 +29,7 @@ sub_0804614C: @ 0x0804614C cmp r0, #0x3d bhi _08046244 movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r1, r0, #0 movs r4, #0 strb r4, [r1, #0xa] diff --git a/asm/intr.s b/asm/intr.s index 05967efd..ecb65664 100644 --- a/asm/intr.s +++ b/asm/intr.s @@ -659,6 +659,7 @@ UpdateEntities: @ 0x080B21B0 ldr r8, [fp, #4] ldr r0, [fp, #8] add pc, pc, #0x60 @ =_080B2230 +@ UpdateEntities starts here ldr r1, _080B2274 @ =gUnk_080026A4 add r1, r1, r0, lsl #4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} @@ -682,12 +683,12 @@ _080B21FC: ldr r1, [sl, r1, lsl #2] mov r0, r4 mov lr, pc - bx r1 + bx r1 @ Jump to address stored in r1 _080B2224: ldr r0, [fp, #8] cmp r0, r4 bleq sub_080B1C54 -_080B2230: +_080B2230: @ jumped here if ClearAndUpdateEntities ldr r4, [r0, #4] b _080B21FC _080B2238: @@ -695,7 +696,7 @@ _080B2238: str r0, [fp, #8] pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} bx lr -_080B2248: .4byte DeleteThisEntity +_080B2248: .4byte DeleteThisEntity @ 0x3005fbc _080B224C: .4byte PlayerUpdate _080B2250: .4byte DeleteThisEntity _080B2254: .4byte EnemyUpdate diff --git a/asm/non_matching/projectile19/sub_080AB170.inc b/asm/non_matching/ballAndChain/sub_080AB170.inc similarity index 100% rename from asm/non_matching/projectile19/sub_080AB170.inc rename to asm/non_matching/ballAndChain/sub_080AB170.inc diff --git a/asm/non_matching/eu/sub_080AA044.inc b/asm/non_matching/eu/MandiblesProjectile_Action3.inc similarity index 100% rename from asm/non_matching/eu/sub_080AA044.inc rename to asm/non_matching/eu/MandiblesProjectile_Action3.inc diff --git a/asm/non_matching/projectile23/sub_080AC8DC.inc b/asm/non_matching/gyorgMaleEnergyProjectile/sub_080AC8DC.inc similarity index 94% rename from asm/non_matching/projectile23/sub_080AC8DC.inc rename to asm/non_matching/gyorgMaleEnergyProjectile/sub_080AC8DC.inc index e1bc226d..dbb0ab91 100644 --- a/asm/non_matching/projectile23/sub_080AC8DC.inc +++ b/asm/non_matching/gyorgMaleEnergyProjectile/sub_080AC8DC.inc @@ -35,6 +35,6 @@ _080AC8FE: bl InitializeAnimation _080AC920: adds r0, r4, #0 - bl sub_080AC8C4 + bl GyorgMaleEnergyProjectile_OnTick pop {r4, pc} .syntax divided diff --git a/asm/non_matching/projectile22/sub_080AC388.inc b/asm/non_matching/gyorgTail/sub_080AC388.inc similarity index 100% rename from asm/non_matching/projectile22/sub_080AC388.inc rename to asm/non_matching/gyorgTail/sub_080AC388.inc diff --git a/asm/non_matching/projectile22/sub_080AC5E4.inc b/asm/non_matching/gyorgTail/sub_080AC5E4.inc similarity index 94% rename from asm/non_matching/projectile22/sub_080AC5E4.inc rename to asm/non_matching/gyorgTail/sub_080AC5E4.inc index 7189007f..1bd2d4b8 100644 --- a/asm/non_matching/projectile22/sub_080AC5E4.inc +++ b/asm/non_matching/gyorgTail/sub_080AC5E4.inc @@ -16,7 +16,7 @@ movs r0, #0x11 strb r0, [r1] movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r6, r0, #0 ldrb r0, [r5, #0xa] strb r0, [r6, #0xa] @@ -30,7 +30,7 @@ strb r0, [r1] str r6, [r5, #0x54] movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r7, r0, #0 ldrb r0, [r5, #0xa] strb r0, [r7, #0xa] @@ -46,7 +46,7 @@ strb r1, [r0] str r7, [r6, #0x54] movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile ldrb r1, [r5, #0xa] strb r1, [r0, #0xa] movs r1, #3 @@ -79,7 +79,7 @@ _080AC678: movs r0, #0xf strb r0, [r1] movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r6, r0, #0 ldrb r0, [r5, #0xa] strb r0, [r6, #0xa] @@ -95,7 +95,7 @@ _080AC678: strb r1, [r0] str r6, [r5, #0x54] movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r7, r0, #0 ldrb r0, [r5, #0xa] strb r0, [r7, #0xa] @@ -112,7 +112,7 @@ _080AC678: str r7, [r6, #0x54] _080AC6C8: movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r6, r0, #0 ldrb r0, [r5, #0xa] strb r0, [r6, #0xa] diff --git a/asm/non_matching/projectile22/sub_080AC6F0.inc b/asm/non_matching/gyorgTail/sub_080AC6F0.inc similarity index 100% rename from asm/non_matching/projectile22/sub_080AC6F0.inc rename to asm/non_matching/gyorgTail/sub_080AC6F0.inc diff --git a/asm/non_matching/projectile22/sub_080AC760.inc b/asm/non_matching/gyorgTail/sub_080AC760.inc similarity index 100% rename from asm/non_matching/projectile22/sub_080AC760.inc rename to asm/non_matching/gyorgTail/sub_080AC760.inc diff --git a/asm/non_matching/projectile22/sub_080AC7C4.inc b/asm/non_matching/gyorgTail/sub_080AC7C4.inc similarity index 100% rename from asm/non_matching/projectile22/sub_080AC7C4.inc rename to asm/non_matching/gyorgTail/sub_080AC7C4.inc diff --git a/asm/non_matching/projectile13/sub_080AA320.inc b/asm/non_matching/mandiblesProjectile/sub_080AA320.inc similarity index 100% rename from asm/non_matching/projectile13/sub_080AA320.inc rename to asm/non_matching/mandiblesProjectile/sub_080AA320.inc diff --git a/asm/non_matching/projectile13/sub_080AA374.inc b/asm/non_matching/mandiblesProjectile/sub_080AA374.inc similarity index 100% rename from asm/non_matching/projectile13/sub_080AA374.inc rename to asm/non_matching/mandiblesProjectile/sub_080AA374.inc diff --git a/asm/non_matching/mazaal/sub_08034B38.inc b/asm/non_matching/mazaal/sub_08034B38.inc index 58dda627..319ce862 100644 --- a/asm/non_matching/mazaal/sub_08034B38.inc +++ b/asm/non_matching/mazaal/sub_08034B38.inc @@ -17,7 +17,7 @@ b _08034B9A _08034B58: movs r0, #0xe - bl sub_080A7EE0 + bl CreateProjectile adds r5, r0, #0 cmp r5, #0 beq _08034B9A diff --git a/asm/non_matching/projectile3/sub_080A83B4.inc b/asm/non_matching/moblinSpear/MoblinSpear_Action1.inc similarity index 100% rename from asm/non_matching/projectile3/sub_080A83B4.inc rename to asm/non_matching/moblinSpear/MoblinSpear_Action1.inc diff --git a/asm/non_matching/projectile14/sub_080AA544.inc b/asm/non_matching/projectile14/sub_080AA544.inc deleted file mode 100644 index 22945df2..00000000 --- a/asm/non_matching/projectile14/sub_080AA544.inc +++ /dev/null @@ -1,134 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r6, r0, #0 - ldrb r0, [r6, #0xb] - cmp r0, #8 - bhi _080AA618 - ldr r0, _080AA5E8 @ =gUnk_08129FF8 - mov sb, r0 - movs r1, #0x2e - ldrsh r2, [r6, r1] - ldr r1, _080AA5EC @ =gRoomControls - ldrh r0, [r1, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - movs r3, #0x3f - ands r2, r3 - movs r4, #0x32 - ldrsh r0, [r6, r4] - ldrh r1, [r1, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r2, r0 - ldrb r0, [r6, #0xb] - add r0, sb - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r7, r2, r0 - movs r4, #0 - movs r5, #0 - movs r0, #0x38 - adds r0, r0, r6 - mov r8, r0 -_080AA58E: - mov r1, sb - adds r0, r1, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - subs r0, r7, r0 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - mov r2, r8 - ldrb r1, [r2] - bl sub_080002C8 - cmp r0, #0x3e - bne _080AA5AC - adds r5, #1 -_080AA5AC: - adds r4, #1 - cmp r4, #8 - bls _080AA58E - cmp r5, #8 - bne _080AA5F4 - movs r4, #0 - ldr r5, _080AA5F0 @ =gUnk_08129FD0 -_080AA5BA: - ldrh r0, [r5] - mov r3, sb - adds r1, r3, r4 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - subs r1, r7, r1 - mov r3, r8 - ldrb r2, [r3] - bl sub_0807B7D8 - adds r5, #2 - adds r4, #1 - cmp r4, #8 - bls _080AA5BA - adds r0, r6, #0 - adds r1, r7, #0 - bl sub_080AA654 - ldrh r0, [r6, #0x24] - bl SetFlag - b _080AA648 - .align 2, 0 -_080AA5E8: .4byte gUnk_08129FF8 -_080AA5EC: .4byte gRoomControls -_080AA5F0: .4byte gUnk_08129FD0 -_080AA5F4: - ldr r2, _080AA614 @ =gUnk_08129FE4 - ldrb r1, [r6, #0xb] - lsls r0, r1, #1 - adds r0, r0, r2 - ldrh r0, [r0] - add r1, sb - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - subs r1, r7, r1 - mov r4, r8 - ldrb r2, [r4] - bl sub_0807B7D8 - b _080AA648 - .align 2, 0 -_080AA614: .4byte gUnk_08129FE4 -_080AA618: - movs r1, #0x2e - ldrsh r0, [r6, r1] - ldr r2, _080AA650 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r4, #0x32 - ldrsh r1, [r6, r4] - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r6, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_0807BA8C - ldrh r0, [r6, #0x24] - bl SetFlag -_080AA648: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080AA650: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/projectile1B/sub_080AB634.inc b/asm/non_matching/projectile1B/sub_080AB634.inc deleted file mode 100644 index 95c6b453..00000000 --- a/asm/non_matching/projectile1B/sub_080AB634.inc +++ /dev/null @@ -1,49 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r0, [r6, #0x50] - movs r5, #0 - adds r4, r0, #0 - adds r4, #0x20 -_080AB640: - ldr r1, [r4] - cmp r1, #0 - beq _080AB684 - adds r0, r6, #0 - bl sub_080177A0 - cmp r0, #0 - beq _080AB684 - ldr r1, [r4] - ldrb r0, [r1, #0xc] - cmp r0, #2 - bhi _080AB67A - movs r0, #3 - strb r0, [r1, #0xc] - ldr r1, [r4] - movs r0, #0x1e - strb r0, [r1, #0xe] - ldr r2, [r4] - ldrb r0, [r2, #0x18] - movs r3, #4 - rsbs r3, r3, #0 - adds r1, r3, #0 - ands r0, r1 - strb r0, [r2, #0x18] - ldr r0, [r4] - movs r1, #0x45 - movs r2, #0 - bl CreateFx -_080AB67A: - adds r0, r6, #0 - bl DeleteEntity - movs r0, #1 - b _080AB68E -_080AB684: - adds r4, #4 - adds r5, #1 - cmp r5, #3 - bls _080AB640 - movs r0, #0 -_080AB68E: - pop {r4, r5, r6, pc} - .syntax divided diff --git a/asm/non_matching/projectile15/sub_080AA9E0.inc b/asm/non_matching/spiderWeb/sub_080AA9E0.inc similarity index 100% rename from asm/non_matching/projectile15/sub_080AA9E0.inc rename to asm/non_matching/spiderWeb/sub_080AA9E0.inc diff --git a/asm/non_matching/projectile1E/sub_080ABA74.inc b/asm/non_matching/spikedRollers/sub_080ABA74.inc similarity index 100% rename from asm/non_matching/projectile1E/sub_080ABA74.inc rename to asm/non_matching/spikedRollers/sub_080ABA74.inc diff --git a/asm/non_matching/projectile1E/sub_080ABAE0.inc b/asm/non_matching/spikedRollers/sub_080ABAE0.inc similarity index 100% rename from asm/non_matching/projectile1E/sub_080ABAE0.inc rename to asm/non_matching/spikedRollers/sub_080ABAE0.inc diff --git a/asm/non_matching/projectile18/sub_080AACE0.inc b/asm/non_matching/v1DarkMagicProjectile/sub_080AACE0.inc similarity index 100% rename from asm/non_matching/projectile18/sub_080AACE0.inc rename to asm/non_matching/v1DarkMagicProjectile/sub_080AACE0.inc diff --git a/asm/non_matching/projectile1C/sub_080AB758.inc b/asm/non_matching/v1EyeLaser/sub_080AB758.inc similarity index 100% rename from asm/non_matching/projectile1C/sub_080AB758.inc rename to asm/non_matching/v1EyeLaser/sub_080AB758.inc diff --git a/asm/non_matching/projectile1F/sub_080ABBA8.inc b/asm/non_matching/v2Projectile/sub_080ABBA8.inc similarity index 100% rename from asm/non_matching/projectile1F/sub_080ABBA8.inc rename to asm/non_matching/v2Projectile/sub_080ABBA8.inc diff --git a/asm/non_matching/projectile1F/sub_080ABBF4.inc b/asm/non_matching/v2Projectile/sub_080ABBF4.inc similarity index 100% rename from asm/non_matching/projectile1F/sub_080ABBF4.inc rename to asm/non_matching/v2Projectile/sub_080ABBF4.inc diff --git a/asm/non_matching/projectile1F/sub_080ABE04.inc b/asm/non_matching/v2Projectile/sub_080ABE04.inc similarity index 100% rename from asm/non_matching/projectile1F/sub_080ABE04.inc rename to asm/non_matching/v2Projectile/sub_080ABE04.inc diff --git a/asm/non_matching/projectile21/sub_080ABFEC.inc b/asm/non_matching/v3ElectricProjectile/sub_080ABFEC.inc similarity index 100% rename from asm/non_matching/projectile21/sub_080ABFEC.inc rename to asm/non_matching/v3ElectricProjectile/sub_080ABFEC.inc diff --git a/asm/non_matching/projectile21/sub_080AC168.inc b/asm/non_matching/v3ElectricProjectile/sub_080AC168.inc similarity index 100% rename from asm/non_matching/projectile21/sub_080AC168.inc rename to asm/non_matching/v3ElectricProjectile/sub_080AC168.inc diff --git a/asm/non_matching/projectile21/sub_080AC200.inc b/asm/non_matching/v3ElectricProjectile/sub_080AC200.inc similarity index 97% rename from asm/non_matching/projectile21/sub_080AC200.inc rename to asm/non_matching/v3ElectricProjectile/sub_080AC200.inc index 6c1b2b1b..1d117905 100644 --- a/asm/non_matching/projectile21/sub_080AC200.inc +++ b/asm/non_matching/v3ElectricProjectile/sub_080AC200.inc @@ -12,7 +12,7 @@ movs r0, #0x10 strb r0, [r4, #0xe] movs r0, #0x21 - bl sub_080A7EE0 + bl CreateProjectile adds r1, r0, #0 cmp r1, #0 beq _080AC23C diff --git a/asm/non_matching/projectile24/sub_080ACA68.inc b/asm/non_matching/v3TennisBallProjectile/sub_080ACA68.inc similarity index 100% rename from asm/non_matching/projectile24/sub_080ACA68.inc rename to asm/non_matching/v3TennisBallProjectile/sub_080ACA68.inc diff --git a/asm/non_matching/projectile24/sub_080ACB40.inc b/asm/non_matching/v3TennisBallProjectile/sub_080ACB40.inc similarity index 100% rename from asm/non_matching/projectile24/sub_080ACB40.inc rename to asm/non_matching/v3TennisBallProjectile/sub_080ACB40.inc 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_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/non_matching/projectile1D/sub_080AB950.inc b/asm/non_matching/winder/sub_080AB950.inc similarity index 100% rename from asm/non_matching/projectile1D/sub_080AB950.inc rename to asm/non_matching/winder/sub_080AB950.inc diff --git a/asm/non_matching/projectile1D/sub_080AB9FC.inc b/asm/non_matching/winder/sub_080AB9FC.inc similarity index 100% rename from asm/non_matching/projectile1D/sub_080AB9FC.inc rename to asm/non_matching/winder/sub_080AB9FC.inc diff --git a/asm/object98.s b/asm/object98.s index d72bf8b0..18f11555 100644 --- a/asm/object98.s +++ b/asm/object98.s @@ -50,7 +50,7 @@ _0809E372: movs r6, #0xe _0809E392: movs r0, #0x17 - bl sub_080A7EE0 + bl CreateProjectile strb r6, [r0, #0xe] str r4, [r0, #0x50] adds r6, #0xc diff --git a/asm/objectA0.s b/asm/objectA0.s index fee7ebba..17e17e6d 100644 --- a/asm/objectA0.s +++ b/asm/objectA0.s @@ -92,7 +92,7 @@ sub_0809F1B0: @ 0x0809F1B0 ands r0, r1 strb r0, [r2] movs r0, #0x1b - bl sub_080A7EE0 + bl CreateProjectile adds r5, r0, #0 cmp r5, #0 beq _0809F21E diff --git a/asm/objectA5.s b/asm/objectA5.s index 9e86a2bd..44831ffc 100644 --- a/asm/objectA5.s +++ b/asm/objectA5.s @@ -20,7 +20,7 @@ ObjectA5: @ 0x0809F8A4 movs r5, #0 _0809F8B6: movs r0, #0x1d - bl sub_080A7EE0 + bl CreateProjectile adds r4, r0, #0 cmp r5, #0 bne _0809F8C6 diff --git a/asm/objectB5.s b/asm/objectB5.s deleted file mode 100644 index 7b7556e3..00000000 --- a/asm/objectB5.s +++ /dev/null @@ -1,33 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ObjectB5 -ObjectB5: @ 0x080A0E28 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xc] - cmp r0, #0 - bne _080A0E36 - movs r0, #1 - strb r0, [r1, #0xc] -_080A0E36: -.ifndef EU - ldr r0, _080A0E48 @ =gRoomControls - str r1, [r0, #0x30] -.endif - ldr r0, _080A0E4C @ =gPlayerEntity - ldr r3, _080A0E50 @ =0xFFD80000 - movs r2, #0 - bl PositionRelative - pop {pc} - .align 2, 0 -.ifndef EU -_080A0E48: .4byte gRoomControls -.endif -_080A0E4C: .4byte gPlayerEntity -_080A0E50: .4byte 0xFFD80000 diff --git a/asm/octorokBoss.s b/asm/octorokBoss.s index 88f8bf4a..8c6ff919 100644 --- a/asm/octorokBoss.s +++ b/asm/octorokBoss.s @@ -2505,7 +2505,7 @@ _08035F16: adds r0, r5, #0 movs r1, #0xf movs r2, #3 - bl sub_0804A98C + bl CreateProjectileWithParent _08035F48: ldr r1, _08035F78 @ =gUnk_080CF0C4 ldrb r0, [r5, #0xd] @@ -3096,7 +3096,7 @@ sub_08036390: @ 0x08036390 adds r4, r0, #0 movs r1, #0xf movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent str r0, [r4, #0x54] cmp r0, #0 beq _080363B4 @@ -3526,7 +3526,7 @@ _080366D4: adds r0, r4, #0 movs r1, #0xf movs r2, #2 - bl sub_0804A98C + bl CreateProjectileWithParent str r0, [r4, #0x54] cmp r0, #0 beq _08036706 @@ -3572,7 +3572,7 @@ sub_0803670C: @ 0x0803670C adds r0, r4, #0 movs r1, #0xf movs r2, #3 - bl sub_0804A98C + bl CreateProjectileWithParent _08036746: adds r0, r4, #0 adds r0, #0x76 diff --git a/asm/octorokGolden.s b/asm/octorokGolden.s index 3256ab32..35b51f7e 100644 --- a/asm/octorokGolden.s +++ b/asm/octorokGolden.s @@ -177,7 +177,7 @@ sub_08037D54: @ 0x08037D54 adds r0, r4, #0 movs r1, #1 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _08037E0C diff --git a/asm/scissorsBeetle.s b/asm/scissorsBeetle.s index 956643ba..010a9ff0 100644 --- a/asm/scissorsBeetle.s +++ b/asm/scissorsBeetle.s @@ -122,7 +122,7 @@ sub_08038984: @ 0x08038984 push {r4, r5, r6, lr} adds r5, r0, #0 movs r0, #0x13 - bl sub_080A7EE0 + bl CreateProjectile adds r6, r0, #0 cmp r6, #0 beq _080389E6 diff --git a/asm/stalfos.s b/asm/stalfos.s index 1476b093..fa469360 100644 --- a/asm/stalfos.s +++ b/asm/stalfos.s @@ -142,7 +142,7 @@ _08039390: adds r0, r5, #0 movs r1, #0x10 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _080393DC @@ -258,7 +258,7 @@ sub_08039470: @ 0x08039470 bne _08039494 movs r1, #0x10 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _0803949C @@ -1007,7 +1007,7 @@ sub_08039A20: @ 0x08039A20 adds r4, r0, #0 movs r1, #2 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _08039A44 @@ -1107,7 +1107,7 @@ sub_08039AD4: @ 0x08039AD4 ldrb r2, [r4, #0xb] adds r0, r4, #0 movs r1, #0x10 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _08039B20 diff --git a/asm/vaati.s b/asm/vaati.s deleted file mode 100644 index 4fc88888..00000000 --- a/asm/vaati.s +++ /dev/null @@ -1,335 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Vaati -Vaati: @ 0x08066A5C - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08066A90 @ =gUnk_08110734 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldrb r3, [r4, #0x1a] - lsrs r1, r3, #4 - adds r0, r4, #0 - adds r0, #0x5b - ldrb r2, [r0] - movs r0, #1 - ands r0, r2 - adds r1, r1, r0 - movs r0, #0xf - ands r1, r0 - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r3 - orrs r0, r1 - strb r0, [r4, #0x1a] - pop {r4, pc} - .align 2, 0 -_08066A90: .4byte gUnk_08110734 - - thumb_func_start sub_08066A94 -sub_08066A94: @ 0x08066A94 - push {r4, lr} - adds r4, r0, #0 - movs r2, #0 - movs r3, #1 - movs r0, #1 - strb r0, [r4, #0xc] - strb r2, [r4, #0xd] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r3 - strb r0, [r4, #0x18] - adds r0, r4, #0 - adds r0, #0x68 - strb r2, [r0] - adds r0, #1 - strb r2, [r0] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - bl sub_08066ACC - pop {r4, pc} - - thumb_func_start sub_08066ACC -sub_08066ACC: @ 0x08066ACC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _08066B18 @ =sub_08066B74 - bl sub_0807DD94 - adds r0, r4, #0 - adds r0, #0x69 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _08066AF6 - ldr r0, _08066B1C @ =gScreenTransition - ldr r0, [r0] - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _08066AF6 - adds r0, r4, #0 - bl sub_08095CB0 -_08066AF6: - adds r1, r4, #0 - adds r1, #0x5a - ldrb r2, [r1] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 - adds r5, r1, #0 - cmp r2, #0 - beq _08066B6E - cmp r2, #2 - beq _08066B34 - cmp r2, #2 - bhi _08066B20 - cmp r2, #1 - beq _08066B2A - b _08066B66 - .align 2, 0 -_08066B18: .4byte sub_08066B74 -_08066B1C: .4byte gScreenTransition -_08066B20: - cmp r2, #3 - beq _08066B40 - cmp r2, #4 - beq _08066B52 - b _08066B66 -_08066B2A: - movs r0, #0x87 - lsls r0, r0, #2 - bl EnqueueSFX - b _08066B66 -_08066B34: - ldr r0, _08066B3C @ =0x0000021E - bl EnqueueSFX - b _08066B66 - .align 2, 0 -_08066B3C: .4byte 0x0000021E -_08066B40: - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - movs r0, #4 - str r0, [r1, #4] - adds r0, r4, #0 - bl CreateManager36 - b _08066B66 -_08066B52: - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - str r2, [r1, #4] - adds r0, r4, #0 - bl DeleteManager36 - ldr r0, _08066B70 @ =0x0000021D - bl EnqueueSFX -_08066B66: - ldrb r1, [r5] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5] -_08066B6E: - pop {r4, r5, pc} - .align 2, 0 -_08066B70: .4byte 0x0000021D - - thumb_func_start sub_08066B74 -sub_08066B74: @ 0x08066B74 - push {r4, r5, r6, lr} - mov ip, r0 - ldr r0, [r1, #8] - ldr r4, _08066BCC @ =0xFFF00000 - ands r4, r0 - ldr r2, _08066BD0 @ =0x000FFFFF - ands r0, r2 - str r0, [r1, #8] - cmp r4, #0 - bne _08066B8A - b _08066C86 -_08066B8A: - mov r3, ip - adds r3, #0x80 - mov r5, ip - adds r5, #0x68 - movs r6, #1 -_08066B94: - mvns r0, r4 - adds r1, r0, #1 - ands r1, r4 - eors r4, r1 - mov r2, ip - ldrb r0, [r2, #0x14] - lsrs r2, r0, #1 - movs r0, #0x80 - lsls r0, r0, #0x12 - cmp r1, r0 - beq _08066C4C - cmp r1, r0 - bhi _08066BE6 - movs r0, #0x80 - lsls r0, r0, #0xf - cmp r1, r0 - beq _08066C34 - cmp r1, r0 - bhi _08066BD4 - movs r0, #0x80 - lsls r0, r0, #0xd - cmp r1, r0 - beq _08066C24 - movs r0, #0x80 - lsls r0, r0, #0xe - cmp r1, r0 - beq _08066C2C - b _08066C82 - .align 2, 0 -_08066BCC: .4byte 0xFFF00000 -_08066BD0: .4byte 0x000FFFFF -_08066BD4: - movs r0, #0x80 - lsls r0, r0, #0x10 - cmp r1, r0 - beq _08066C3C - movs r0, #0x80 - lsls r0, r0, #0x11 - cmp r1, r0 - beq _08066C44 - b _08066C82 -_08066BE6: - movs r0, #0x80 - lsls r0, r0, #0x15 - cmp r1, r0 - beq _08066C64 - cmp r1, r0 - bhi _08066C04 - movs r0, #0x80 - lsls r0, r0, #0x13 - cmp r1, r0 - beq _08066C54 - movs r0, #0x80 - lsls r0, r0, #0x14 - cmp r1, r0 - beq _08066C5C - b _08066C82 -_08066C04: - movs r0, #0x80 - lsls r0, r0, #0x17 - cmp r1, r0 - beq _08066C70 - cmp r1, r0 - bhi _08066C1A - movs r0, #0x80 - lsls r0, r0, #0x16 - cmp r1, r0 - beq _08066C6C - b _08066C82 -_08066C1A: - movs r0, #0x80 - lsls r0, r0, #0x18 - cmp r1, r0 - beq _08066C76 - b _08066C82 -_08066C24: - adds r0, r2, #0 - adds r0, #0x10 - strh r0, [r3] - b _08066C82 -_08066C2C: - adds r0, r2, #0 - adds r0, #0x14 - strh r0, [r3] - b _08066C82 -_08066C34: - adds r0, r2, #0 - adds r0, #0x18 - strh r0, [r3] - b _08066C82 -_08066C3C: - adds r0, r2, #0 - adds r0, #0x1c - strh r0, [r3] - b _08066C82 -_08066C44: - adds r0, r2, #0 - adds r0, #0x20 - strh r0, [r3] - b _08066C82 -_08066C4C: - adds r0, r2, #0 - adds r0, #0x24 - strh r0, [r3] - b _08066C82 -_08066C54: - adds r0, r2, #0 - adds r0, #0x28 - strh r0, [r3] - b _08066C82 -_08066C5C: - adds r0, r2, #0 - adds r0, #0x2c - strh r0, [r3] - b _08066C82 -_08066C64: - adds r0, r2, #0 - adds r0, #0x30 - strh r0, [r3] - b _08066C82 -_08066C6C: - strb r6, [r5] - b _08066C82 -_08066C70: - movs r0, #0xff - strb r0, [r5] - b _08066C82 -_08066C76: - mov r2, ip - adds r2, #0x69 - ldrb r1, [r2] - adds r0, r6, #0 - eors r0, r1 - strb r0, [r2] -_08066C82: - cmp r4, #0 - bne _08066B94 -_08066C86: - mov r0, ip - adds r0, #0x84 - ldr r1, [r0] - mov r0, ip - bl HandlePostScriptActions - pop {r4, r5, r6, pc} - - thumb_func_start sub_08066C94 -sub_08066C94: @ 0x08066C94 - push {lr} - movs r1, #0 - bl sub_0805DA90 - movs r0, #0xf7 - bl SoundReq - pop {pc} - - thumb_func_start sub_08066CA4 -sub_08066CA4: @ 0x08066CA4 - push {lr} - movs r1, #1 - bl sub_0805DA90 - movs r0, #0xf6 - bl SoundReq - pop {pc} diff --git a/asm/vaatiArm.s b/asm/vaatiArm.s deleted file mode 100644 index 6315de9b..00000000 --- a/asm/vaatiArm.s +++ /dev/null @@ -1,3797 +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 -.ifdef JP - subs r0, #0x20 -.else -.ifdef EU - subs r0, #0x20 -.else -.ifdef DEMO_JP - subs r0, #0x20 @ TODO deduplicate -.else - subs r0, #0x40 -.endif -.endif -.endif - 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 -.ifdef JP - push {lr} - adds r1, r0, #0 - ldr r0, [r1, #0x64] - ldr r0, [r0, #0xc] - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x9d - beq _08043BC4JP - movs r0, #0 - b _08043BCC -_08043BC4JP: - adds r0, r1, #0 - bl sub_08043D08 - movs r0, #1 -_08043BCC: - pop {pc} - .align 2, 0 -.else -.ifdef EU - push {lr} - adds r1, r0, #0 - ldr r0, [r1, #0x64] - ldr r0, [r0, #0xc] - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x9d - beq _08043AD8 - movs r0, #0 - b _08043AE0 -_08043AD8: - adds r0, r1, #0 - bl sub_08043D08 - movs r0, #1 -_08043AE0: - pop {pc} - .align 2, 0 -.else - 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} -.endif -.endif - - 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/asm/vaatiEyesMacro.s b/asm/vaatiEyesMacro.s deleted file mode 100644 index 8a768333..00000000 --- a/asm/vaatiEyesMacro.s +++ /dev/null @@ -1,631 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start VaatiEyesMacro -VaatiEyesMacro: @ 0x0802EC6C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _0802EC94 @ =gUnk_080CDE34 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r5 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, r5, pc} - .align 2, 0 -_0802EC94: .4byte gUnk_080CDE34 - - thumb_func_start sub_0802EC98 -sub_0802EC98: @ 0x0802EC98 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0802ECBC @ =gUnk_080CDE4C - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldrb r0, [r4, #0xa] - cmp r0, #1 - bhi _0802ECB8 - adds r0, r4, #0 - bl sub_0802EF90 -_0802ECB8: - pop {r4, pc} - .align 2, 0 -_0802ECBC: .4byte gUnk_080CDE4C - - thumb_func_start sub_0802ECC0 -sub_0802ECC0: @ 0x0802ECC0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0802ED2A - adds r0, r4, #0 - adds r0, #0x45 - ldrb r1, [r0] - adds r5, r0, #0 - ldr r3, _0802ED00 @ =gScreenTransition - cmp r1, #0 - bne _0802ECEE - adds r2, r3, #0 - adds r2, #0x39 - adds r0, r3, #0 - adds r0, #0x3c - ldrb r0, [r0] - adds r0, #2 - movs r1, #1 - lsls r1, r0 - ldrb r0, [r2] - bics r0, r1 - strb r0, [r2] -_0802ECEE: - ldr r0, _0802ED04 @ =gRoomControls - ldrb r0, [r0, #5] - cmp r0, #0 - bne _0802ED08 - ldrb r1, [r5] - adds r0, r3, #0 - adds r0, #0x3a - b _0802ED0E - .align 2, 0 -_0802ED00: .4byte gScreenTransition -_0802ED04: .4byte gRoomControls -_0802ED08: - ldrb r1, [r5] - adds r0, r3, #0 - adds r0, #0x3b -_0802ED0E: - strb r1, [r0] - adds r6, r4, #0 - adds r6, #0x79 - ldrb r0, [r6] - ldrb r1, [r5] - cmp r0, r1 - beq _0802ED24 - movs r0, #0xbd - lsls r0, r0, #1 - bl EnqueueSFX -_0802ED24: - ldrb r0, [r5] - strb r0, [r6] - b _0802ED52 -_0802ED2A: - cmp r0, #1 - bne _0802ED52 - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - ble _0802ED3E - rsbs r0, r0, #0 - strb r0, [r1] -_0802ED3E: - adds r5, r4, #0 - adds r5, #0x45 - ldrb r0, [r5] - cmp r0, #0xff - beq _0802ED4E - movs r0, #0xe5 - bl EnqueueSFX -_0802ED4E: - movs r0, #0xff - strb r0, [r5] -_0802ED52: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0802ED64 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_0802ED64: - ldr r1, _0802ED70 @ =gUnk_080CDE34 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, r5, r6, pc} - .align 2, 0 -_0802ED70: .4byte gUnk_080CDE34 - - thumb_func_start sub_0802ED74 -sub_0802ED74: @ 0x0802ED74 - push {lr} - ldr r2, _0802ED88 @ =gUnk_080CDE5C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802ED88: .4byte gUnk_080CDE5C - - thumb_func_start sub_0802ED8C -sub_0802ED8C: @ 0x0802ED8C - push {r4, lr} - adds r4, r0, #0 - ldr r0, _0802EDD0 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x46 - bhi _0802EE0A - bl GetEmptyManager - adds r1, r0, #0 - cmp r1, #0 - beq _0802EE0A - movs r0, #9 - strb r0, [r1, #8] - movs r0, #0x34 - strb r0, [r1, #9] - str r4, [r1, #0x14] - adds r0, r1, #0 - movs r1, #8 - bl AppendEntityToList - movs r0, #0x25 - movs r1, #2 - bl CreateEnemy - str r4, [r0, #0x50] - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _0802EDD4 @ =gRoomControls - ldrb r0, [r0, #5] - cmp r0, #0 - bne _0802EDDC - ldr r0, _0802EDD8 @ =gScreenTransition - adds r0, #0x3a - b _0802EDE0 - .align 2, 0 -_0802EDD0: .4byte gEntCount -_0802EDD4: .4byte gRoomControls -_0802EDD8: .4byte gScreenTransition -_0802EDDC: - ldr r0, _0802EE0C @ =gScreenTransition - adds r0, #0x3b -_0802EDE0: - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x45 - strb r0, [r1] - adds r1, #0x34 - strb r0, [r1] - bl Random - adds r1, r4, #0 - adds r1, #0x78 - strb r0, [r1] - adds r0, r4, #0 - bl sub_0802EFB8 - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0802EF58 -_0802EE0A: - pop {r4, pc} - .align 2, 0 -_0802EE0C: .4byte gScreenTransition - - thumb_func_start sub_0802EE10 -sub_0802EE10: @ 0x0802EE10 - push {r4, lr} - adds r4, r0, #0 - bl sub_0802F04C - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - - thumb_func_start sub_0802EE20 -sub_0802EE20: @ 0x0802EE20 - push {lr} - ldr r2, _0802EE34 @ =gUnk_080CDE64 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802EE34: .4byte gUnk_080CDE64 - - thumb_func_start sub_0802EE38 -sub_0802EE38: @ 0x0802EE38 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _0802EE84 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x46 - bhi _0802EE82 - movs r0, #0x25 - movs r1, #3 - bl CreateEnemy - str r5, [r0, #0x50] - movs r0, #1 - strb r0, [r5, #0xc] - bl Random - adds r4, r0, #0 - movs r1, #3 - ands r0, r1 - adds r0, #1 - strb r0, [r5, #0xe] - bl Random - lsrs r0, r0, #8 - adds r1, r5, #0 - adds r1, #0x78 - strb r0, [r1] - ldr r1, _0802EE88 @ =gUnk_080CDE6C - lsrs r4, r4, #0x10 - movs r0, #3 - ands r4, r0 - adds r4, r4, r1 - ldrb r0, [r4] - strb r0, [r5, #0x15] - adds r0, r5, #0 - movs r1, #1 - bl InitializeAnimation -_0802EE82: - pop {r4, r5, pc} - .align 2, 0 -_0802EE84: .4byte gEntCount -_0802EE88: .4byte gUnk_080CDE6C - - thumb_func_start sub_0802EE8C -sub_0802EE8C: @ 0x0802EE8C - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldr r2, [r0, #4] - cmp r2, #0 - bne _0802EEA8 - ldrb r0, [r4, #0x10] - movs r1, #0x7f - ands r1, r0 - strb r1, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x45 - strb r2, [r0] - b _0802EEB4 -_0802EEA8: - adds r0, r4, #0 - bl sub_0802F04C - adds r0, r4, #0 - bl GetNextFrame -_0802EEB4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802EEB8 -sub_0802EEB8: @ 0x0802EEB8 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldr r0, [r0, #4] - cmp r0, #0 - bne _0802EEC8 - bl DeleteThisEntity -_0802EEC8: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0802EED6 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0xff - strb r0, [r4, #0x14] -_0802EED6: - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPositionAndSpriteOffset - ldr r1, _0802EF14 @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - adds r0, #1 - movs r1, #0x1e - ands r0, r1 - ldr r1, _0802EF18 @ =gUnk_080CDE70 - adds r0, r0, r1 - ldrb r2, [r0] - ldrb r1, [r4, #0x1e] - cmp r2, r1 - beq _0802EF00 - ldrb r0, [r0, #1] - cmp r0, r1 - beq _0802EF00 - strb r2, [r4, #0x1e] -_0802EF00: - ldrh r0, [r4, #0x32] - adds r0, #1 - strh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x63 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - pop {r4, pc} - .align 2, 0 -_0802EF14: .4byte gPlayerEntity -_0802EF18: .4byte gUnk_080CDE70 - - thumb_func_start sub_0802EF1C -sub_0802EF1C: @ 0x0802EF1C - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldr r0, [r0, #4] - cmp r0, #0 - bne _0802EF2C - bl DeleteThisEntity -_0802EF2C: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0802EF4A - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x11 - strb r0, [r4, #0x1e] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0x19 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] -_0802EF4A: - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPositionAndSpriteOffset - movs r0, #0 - strh r0, [r4, #0x36] - pop {r4, pc} - - thumb_func_start sub_0802EF58 -sub_0802EF58: @ 0x0802EF58 - push {r4, r5, r6, lr} - adds r6, r0, #0 - movs r5, #0 -_0802EF5E: - movs r0, #0x25 - movs r1, #1 - bl CreateEnemy - adds r4, r0, #0 - cmp r4, #0 - beq _0802EF86 - strb r5, [r4, #0xb] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] - str r6, [r4, #0x50] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - adds r0, r6, #0 - adds r1, r4, #0 - bl CopyPosition -_0802EF86: - adds r5, #1 - cmp r5, #6 - bls _0802EF5E - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0802EF90 -sub_0802EF90: @ 0x0802EF90 - push {r4, lr} - ldr r4, _0802EFB4 @ =gUnk_080CDE90 - adds r3, r0, #0 - adds r3, #0x78 - ldrb r1, [r3] - adds r2, r1, #1 - strb r2, [r3] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x1b - movs r2, #7 - ands r1, r2 - adds r1, r1, r4 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - strh r1, [r0, #0x36] - pop {r4, pc} - .align 2, 0 -_0802EFB4: .4byte gUnk_080CDE90 - - thumb_func_start sub_0802EFB8 -sub_0802EFB8: @ 0x0802EFB8 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - bl Random - adds r6, r0, #0 - lsrs r0, r6, #0x10 - movs r1, #3 - ands r0, r1 - cmp r0, #0 - beq _0802EFD2 - movs r5, #0x18 - ands r5, r6 - b _0802EFE0 -_0802EFD2: - ldr r0, _0802F01C @ =gPlayerEntity - adds r1, r4, #0 - bl GetFacingDirection - adds r5, r0, #4 - movs r0, #0x18 - ands r5, r0 -_0802EFE0: - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r2, _0802F020 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r7, #0x32 - ldrsh r1, [r4, r7] - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - ldr r2, _0802F024 @ =gUnk_080B4488 - lsrs r1, r5, #2 - adds r1, r1, r2 - movs r2, #0 - ldrsh r1, [r1, r2] - adds r0, r0, r1 - movs r1, #1 - bl sub_080002E0 - cmp r0, #0 - beq _0802F028 - movs r0, #0xff - strb r0, [r4, #0x15] - b _0802F044 - .align 2, 0 -_0802F01C: .4byte gPlayerEntity -_0802F020: .4byte gRoomControls -_0802F024: .4byte gUnk_080B4488 -_0802F028: - movs r1, #3 - adds r0, r6, #0 - ands r0, r1 - adds r0, #1 - strb r0, [r4, #0xe] - strb r5, [r4, #0x15] - ldr r2, _0802F048 @ =gUnk_080CDE98 - lsrs r0, r6, #0x18 - movs r1, #3 - ands r0, r1 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - strh r0, [r4, #0x24] -_0802F044: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0802F048: .4byte gUnk_080CDE98 - - thumb_func_start sub_0802F04C -sub_0802F04C: @ 0x0802F04C - push {r4, r5, r6, lr} - adds r4, r0, #0 - movs r0, #0x2e - ldrsh r5, [r4, r0] - movs r1, #0x32 - ldrsh r6, [r4, r1] - adds r0, r4, #0 - bl ProcessMovement - cmp r0, #0 - bne _0802F06A - adds r0, r4, #0 - bl sub_0802EFB8 - b _0802F112 -_0802F06A: - ldrb r0, [r4, #0x15] - lsrs r0, r0, #3 - cmp r0, #1 - beq _0802F098 - cmp r0, #1 - bgt _0802F07C - cmp r0, #0 - beq _0802F082 - b _0802F0DC -_0802F07C: - cmp r0, #2 - beq _0802F0AE - b _0802F0DC -_0802F082: - movs r2, #0xf - adds r0, r6, #0 - ands r0, r2 - cmp r0, #8 - ble _0802F102 - ldrh r1, [r4, #0x32] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #8 - bgt _0802F102 - b _0802F0C2 -_0802F098: - movs r2, #0xf - adds r0, r5, #0 - ands r0, r2 - cmp r0, #7 - bgt _0802F102 - ldrh r1, [r4, #0x2e] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #7 - ble _0802F102 - b _0802F0F0 -_0802F0AE: - movs r2, #0xf - adds r0, r6, #0 - ands r0, r2 - cmp r0, #7 - bgt _0802F102 - ldrh r1, [r4, #0x32] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #7 - ble _0802F102 -_0802F0C2: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r1, #0x32 - ldrsh r0, [r4, r1] - ldr r1, _0802F0D8 @ =0x0000FFF0 - ands r0, r1 - adds r6, r0, #0 - adds r6, #8 - b _0802F102 - .align 2, 0 -_0802F0D8: .4byte 0x0000FFF0 -_0802F0DC: - movs r2, #0xf - adds r0, r5, #0 - ands r0, r2 - cmp r0, #8 - ble _0802F102 - ldrh r1, [r4, #0x2e] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #8 - bgt _0802F102 -_0802F0F0: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r1, _0802F114 @ =0x0000FFF0 - ands r0, r1 - adds r5, r0, #0 - adds r5, #8 -_0802F102: - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _0802F112 - strh r5, [r4, #0x2e] - strh r6, [r4, #0x32] - adds r0, r4, #0 - bl sub_0802EFB8 -_0802F112: - pop {r4, r5, r6, pc} - .align 2, 0 -_0802F114: .4byte 0x0000FFF0 diff --git a/asm/vaatiProjectile.s b/asm/vaatiProjectile.s deleted file mode 100644 index 2b7617e5..00000000 --- a/asm/vaatiProjectile.s +++ /dev/null @@ -1,713 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start VaatiProjectile -VaatiProjectile: @ 0x0803E08C - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_0803E4A0 - cmp r0, #0 - beq _0803E0AA - ldrb r0, [r5, #0x10] - movs r1, #0x7f - ands r1, r0 - movs r0, #0 - strb r1, [r5, #0x10] - adds r1, r5, #0 - adds r1, #0x45 - strb r0, [r1] - str r0, [r5, #0x50] -_0803E0AA: - ldr r4, _0803E0C0 @ =gUnk_080D0648 - adds r0, r5, #0 - 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 -_0803E0C0: .4byte gUnk_080D0648 - - thumb_func_start sub_0803E0C4 -sub_0803E0C4: @ 0x0803E0C4 - push {lr} - ldr r2, _0803E0D8 @ =gUnk_080D0660 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0803E0D8: .4byte gUnk_080D0660 - - thumb_func_start sub_0803E0DC -sub_0803E0DC: @ 0x0803E0DC -.ifdef EU - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x80 - bne _0803E08E - movs r0, #5 - strb r0, [r5, #0xc] - ldrb r2, [r5, #0x10] - movs r1, #0x7f - adds r0, r1, #0 - ands r0, r2 - strb r0, [r5, #0x10] - adds r3, r5, #0 - adds r3, #0x29 - ldrb r2, [r3] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r2 - strb r0, [r3] - ldr r3, _0803E098 @ =gPlayerEntity - ldrb r0, [r3, #0x10] - ands r1, r0 - strb r1, [r3, #0x10] - ldrb r2, [r5, #0x1b] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r4, [r3, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r4 - orrs r0, r2 - strb r0, [r3, #0x1b] - ldrb r0, [r5, #0x19] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r3, #0x19] - ands r1, r2 - orrs r1, r0 - strb r1, [r3, #0x19] - adds r0, r5, #0 - bl sub_0803E444 -_0803E08E: - ldr r1, _0803E09C @ =gUnk_080D0648 - adds r0, r5, #0 - bl sub_0804AA30 - pop {r4, r5, pc} - .align 2, 0 -_0803E098: .4byte gPlayerEntity -_0803E09C: .4byte gUnk_080D0648 - -.else - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x80 - bne _0803E16C - adds r0, r5, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _0803E158 - movs r0, #5 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x10] - movs r6, #0x7f - adds r0, r6, #0 - ands r0, r1 - strb r0, [r5, #0x10] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - ldr r3, _0803E154 @ =gPlayerEntity - ldrb r1, [r3, #0x10] - adds r0, r6, #0 - ands r0, r1 - strb r0, [r3, #0x10] - ldrb r2, [r5, #0x1b] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r4, [r3, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r4 - orrs r0, r2 - strb r0, [r3, #0x1b] - ldrb r0, [r5, #0x19] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r3, #0x19] - ands r1, r2 - orrs r1, r0 - strb r1, [r3, #0x19] - adds r0, r5, #0 - bl sub_0803E444 - movs r0, #2 - bl sub_08078A90 - ldr r2, [r5, #0x50] - cmp r2, #0 - beq _0803E16C - ldrb r1, [r2, #0x10] - adds r0, r6, #0 - ands r0, r1 - b _0803E16A - .align 2, 0 -_0803E154: .4byte gPlayerEntity -_0803E158: - ldr r2, _0803E178 @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, _0803E17C @ =0xFFFFFEFF - ands r0, r1 - str r0, [r2, #0x30] - ldr r2, _0803E180 @ =gPlayerEntity - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 -_0803E16A: - strb r0, [r2, #0x10] -_0803E16C: - ldr r1, _0803E184 @ =gUnk_080D0648 - adds r0, r5, #0 - bl sub_0804AA30 - pop {r4, r5, r6, pc} - .align 2, 0 -_0803E178: .4byte gPlayerState -_0803E17C: .4byte 0xFFFFFEFF -_0803E180: .4byte gPlayerEntity -_0803E184: .4byte gUnk_080D0648 -.endif - - thumb_func_start sub_0803E188 -sub_0803E188: @ 0x0803E188 - push {lr} - adds r3, r0, #0 - ldr r2, [r3, #0x50] - cmp r2, #0 - beq _0803E19C - ldrb r0, [r2, #0xf] - subs r0, #1 - movs r1, #0 - strb r0, [r2, #0xf] - str r1, [r3, #0x50] -_0803E19C: - adds r0, r3, #0 - bl sub_0804A7D4 - pop {pc} - - thumb_func_start nullsub_19 -nullsub_19: @ 0x0803E1A4 - bx lr - .align 2, 0 - - thumb_func_start sub_0803E1A8 -sub_0803E1A8: @ 0x0803E1A8 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xa] - cmp r0, #0 - bne _0803E1F8 - movs r0, #0x4b - movs r1, #1 - bl CreateEnemy - cmp r0, #0 - beq _0803E250 - str r5, [r0, #0x50] - str r0, [r5, #0x54] - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _0803E1D8 - movs r0, #1 - strb r0, [r5, #0xc] - ldr r0, _0803E1D4 @ =0x0000FFE8 - strh r0, [r5, #0x36] - b _0803E1E8 - .align 2, 0 -_0803E1D4: .4byte 0x0000FFE8 -_0803E1D8: - movs r0, #9 - strb r0, [r5, #0xc] - ldr r0, _0803E1F4 @ =0x0000FF80 - strh r0, [r5, #0x36] - adds r1, r5, #0 - adds r1, #0x3b - movs r0, #1 - strb r0, [r1] -_0803E1E8: - adds r0, r5, #0 - movs r1, #0 - bl InitializeAnimation - b _0803E250 - .align 2, 0 -_0803E1F4: .4byte 0x0000FF80 -_0803E1F8: - movs r0, #8 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5, #0x10] - adds r1, r5, #0 - adds r1, #0x63 - movs r0, #1 - strb r0, [r1] - ldr r4, [r5, #0x50] - ldrb r2, [r4, #0x1b] - lsrs r2, r2, #6 - lsls r2, r2, #6 - ldrb r3, [r5, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r3 - orrs r0, r2 - strb r0, [r5, #0x1b] - ldrb r0, [r4, #0x19] - lsrs r0, r0, #6 - lsls r0, r0, #6 - ldrb r2, [r5, #0x19] - ands r1, r2 - orrs r1, r0 - strb r1, [r5, #0x19] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - ldr r0, [r5, #0x50] - ldr r3, _0803E254 @ =0xFFFF0000 - adds r1, r5, #0 - movs r2, #0 - bl PositionRelative - adds r0, r5, #0 - movs r1, #1 - bl InitializeAnimation -_0803E250: - pop {r4, r5, pc} - .align 2, 0 -_0803E254: .4byte 0xFFFF0000 - - thumb_func_start sub_0803E258 -sub_0803E258: @ 0x0803E258 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803E480 - adds r0, r4, #0 - movs r1, #0 - movs r2, #8 - bl PlayerInRange - cmp r0, #0 - beq _0803E280 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0xa - strb r0, [r4, #0xe] - ldr r0, [r4, #0x54] - movs r1, #2 - bl InitializeAnimation - b _0803E29C -_0803E280: - ldr r0, _0803E2A4 @ =gUnk_020000B0 - ldr r1, [r0] - cmp r1, #0 - beq _0803E29C - adds r0, r4, #0 - bl GetFacingDirection - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 - adds r0, r4, #0 - bl sub_0806F69C -_0803E29C: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 -_0803E2A4: .4byte gUnk_020000B0 - - thumb_func_start sub_0803E2A8 -sub_0803E2A8: @ 0x0803E2A8 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - cmp r0, #0 - beq _0803E2B8 - subs r0, #1 - strb r0, [r1, #0xe] - b _0803E2C8 -_0803E2B8: - ldrh r0, [r1, #0x36] - adds r0, #1 - strh r0, [r1, #0x36] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0803E2C8 - movs r0, #3 - strb r0, [r1, #0xc] -_0803E2C8: - adds r0, r1, #0 - bl GetNextFrame - pop {pc} - - thumb_func_start sub_0803E2D0 -sub_0803E2D0: @ 0x0803E2D0 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x54] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803E312 - ldrh r0, [r4, #0x36] - subs r0, #1 - strh r0, [r4, #0x36] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x18 - rsbs r1, r1, #0 - cmp r0, r1 - bgt _0803E30C - movs r0, #4 - strb r0, [r4, #0xc] - bl Random - movs r1, #0xf - ands r0, r1 - adds r0, #0xf - strb r0, [r4, #0xe] - ldr r0, [r4, #0x54] - movs r1, #1 - bl InitializeAnimation -_0803E30C: - adds r0, r4, #0 - bl GetNextFrame -_0803E312: - pop {r4, pc} - - thumb_func_start sub_0803E314 -sub_0803E314: @ 0x0803E314 - 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 _0803E332 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r1, _0803E33C @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] -_0803E332: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 -_0803E33C: .4byte gPlayerEntity - - thumb_func_start sub_0803E340 -sub_0803E340: @ 0x0803E340 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803E444 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0803E352 - subs r0, #1 - b _0803E36A -_0803E352: - ldrh r0, [r4, #0x36] - subs r0, #1 - strh r0, [r4, #0x36] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x18 - rsbs r1, r1, #0 - cmp r0, r1 - bgt _0803E36C - movs r0, #6 - strb r0, [r4, #0xc] - movs r0, #0x14 -_0803E36A: - strb r0, [r4, #0xe] -_0803E36C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803E370 -sub_0803E370: @ 0x0803E370 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803E38E - movs r0, #7 - strb r0, [r1, #0xc] - movs r0, #0x10 - strb r0, [r1, #0x15] - movs r0, #0xc0 - lsls r0, r0, #2 - strh r0, [r1, #0x24] -_0803E38E: - adds r0, r1, #0 - bl sub_0803E444 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0803E398 -sub_0803E398: @ 0x0803E398 - push {r4, lr} - adds r4, r0, #0 - bl sub_0803E444 - adds r0, r4, #0 - bl sub_0806F69C - adds r0, r4, #0 - bl sub_0803E4D8 - ldr r1, _0803E3CC @ =gRoomControls - ldrh r0, [r1, #8] - ldrh r1, [r1, #0x20] - adds r0, r0, r1 - subs r0, #0x10 - movs r2, #0x32 - ldrsh r1, [r4, r2] - cmp r0, r1 - bgt _0803E3C8 - bl sub_0805E5A8 - ldr r0, _0803E3D0 @ =gUnk_0813AB94 - bl DoExitTransition -_0803E3C8: - pop {r4, pc} - .align 2, 0 -_0803E3CC: .4byte gRoomControls -_0803E3D0: .4byte gUnk_0813AB94 - - thumb_func_start sub_0803E3D4 -sub_0803E3D4: @ 0x0803E3D4 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldr r0, [r0, #4] - cmp r0, #0 - bne _0803E3E4 - bl DeleteThisEntity -_0803E3E4: - ldr r0, [r4, #0x50] - ldr r3, _0803E3F8 @ =0xFFFF0000 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 -_0803E3F8: .4byte 0xFFFF0000 - - thumb_func_start sub_0803E3FC -sub_0803E3FC: @ 0x0803E3FC - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0803E438 @ =gPlayerEntity - ldrh r0, [r1, #0x2e] - strh r0, [r4, #0x2e] - ldrh r0, [r1, #0x32] - strh r0, [r4, #0x32] - ldrh r2, [r4, #0x36] - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #8 - rsbs r0, r0, #0 - cmp r1, r0 - bge _0803E43C - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #2 - beq _0803E42E - movs r0, #0 - strb r0, [r4, #0xe] - ldr r0, [r4, #0x54] - movs r1, #2 - bl InitializeAnimation -_0803E42E: - adds r0, r4, #0 - bl sub_0803E2A8 - b _0803E442 - .align 2, 0 -_0803E438: .4byte gPlayerEntity -_0803E43C: - adds r0, r2, #0 - adds r0, #8 - strh r0, [r4, #0x36] -_0803E442: - pop {r4, pc} - - thumb_func_start sub_0803E444 -sub_0803E444: @ 0x0803E444 - push {r4, lr} - adds r4, r0, #0 - bl ResetPlayer - ldr r2, _0803E478 @ =gPlayerState - ldrb r1, [r2, #0x1a] - movs r0, #0x80 - orrs r1, r0 - strb r1, [r2, #0x1a] - ldrb r1, [r2, #0xa] - orrs r0, r1 - strb r0, [r2, #0xa] - ldr r1, [r4, #0x4c] - movs r3, #2 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r2, #0 - bl sub_0806FA90 - ldr r1, _0803E47C @ =gPlayerEntity - adds r1, #0x63 - ldrb r0, [r1] - adds r0, #0xe - strb r0, [r1] - pop {r4, pc} - .align 2, 0 -_0803E478: .4byte gPlayerState -_0803E47C: .4byte gPlayerEntity - - thumb_func_start sub_0803E480 -sub_0803E480: @ 0x0803E480 - push {lr} - adds r3, r0, #0 - adds r2, r3, #0 - adds r2, #0x78 - ldrh r1, [r2] - movs r0, #0x96 - lsls r0, r0, #3 - cmp r1, r0 - bls _0803E49A - movs r0, #0xc0 - lsls r0, r0, #1 - strh r0, [r3, #0x24] - b _0803E49E -_0803E49A: - adds r0, r1, #1 - strh r0, [r2] -_0803E49E: - pop {pc} - - thumb_func_start sub_0803E4A0 -sub_0803E4A0: @ 0x0803E4A0 -.ifdef EU - push {lr} - adds r1, r0, #0 - ldr r0, _0803E3CCEU @ =gScreenTransition - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #0 - bne _0803E3D0EU - movs r0, #1 - b _0803E3E6 - .align 2, 0 -_0803E3CCEU: .4byte gScreenTransition -_0803E3D0EU: - ldr r0, [r1, #0x50] - cmp r0, #0 - bne _0803E3DA - movs r0, #0 - b _0803E3E6 -_0803E3DA: - movs r1, #0 - ldr r0, [r0, #4] - cmp r0, #0 - bne _0803E3E4EU - movs r1, #1 -_0803E3E4EU: - adds r0, r1, #0 -_0803E3E6: - pop {pc} -.else - push {lr} - adds r1, r0, #0 - ldr r0, _0803E4B8 @ =gScreenTransition - adds r0, #0x39 - ldrb r0, [r0] - cmp r0, #0 - beq _0803E4C6 - ldr r1, [r1, #0x50] - cmp r1, #0 - bne _0803E4BC - movs r0, #0 - b _0803E4D6 - .align 2, 0 -_0803E4B8: .4byte gScreenTransition -_0803E4BC: - adds r0, r1, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0803E4CA -_0803E4C6: - movs r0, #1 - b _0803E4D6 -_0803E4CA: - movs r2, #0 - ldr r0, [r1, #4] - cmp r0, #0 - bne _0803E4D4 - movs r2, #1 -_0803E4D4: - adds r0, r2, #0 -_0803E4D6: - pop {pc} -.endif - - thumb_func_start sub_0803E4D8 -sub_0803E4D8: @ 0x0803E4D8 - push {r4, r5, lr} - movs r2, #0x2e - ldrsh r1, [r0, r2] - ldr r3, _0803E51C @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r4, r1, #4 - movs r2, #0x3f - ands r4, r2 - movs r1, #0x32 - ldrsh r0, [r0, r1] - ldrh r1, [r3, #8] - subs r1, #8 - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r4, r0 - ldr r0, _0803E520 @ =gPlayerEntity - adds r5, r0, #0 - adds r5, #0x38 - ldrb r1, [r5] - adds r0, r4, #0 - bl sub_080002E0 - cmp r0, #0xff - beq _0803E518 - ldr r0, _0803E524 @ =0x00004074 - ldrb r2, [r5] - adds r1, r4, #0 - bl SetTile -_0803E518: - pop {r4, r5, pc} - .align 2, 0 -_0803E51C: .4byte gRoomControls -_0803E520: .4byte gPlayerEntity -_0803E524: .4byte 0x00004074 diff --git a/asm/vaatiReborn.s b/asm/vaatiReborn.s deleted file mode 100644 index 3e900ff0..00000000 --- a/asm/vaatiReborn.s +++ /dev/null @@ -1,451 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start VaatiReborn -VaatiReborn: @ 0x0806B664 - push {lr} - ldr r2, _0806B678 @ =gUnk_08112F78 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0806B678: .4byte gUnk_08112F78 - - thumb_func_start sub_0806B67C -sub_0806B67C: @ 0x0806B67C - push {r4, r5, r6, lr} - adds r6, r0, #0 - movs r1, #0 - movs r0, #1 - strb r0, [r6, #0xc] - strb r1, [r6, #0xd] - strb r1, [r6, #0xe] - ldrb r0, [r6, #0xa] - cmp r0, #5 - bls _0806B692 - b _0806B7B8 -_0806B692: - lsls r0, r0, #2 - ldr r1, _0806B69C @ =_0806B6A0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806B69C: .4byte _0806B6A0 -_0806B6A0: @ jump table - .4byte _0806B6B8 @ case 0 - .4byte _0806B7A6 @ case 1 - .4byte _0806B70C @ case 2 - .4byte _0806B726 @ case 3 - .4byte _0806B7B0 @ case 4 - .4byte _0806B7A6 @ case 5 -_0806B6B8: - ldrh r0, [r6, #0x32] - subs r0, #0xa0 - strh r0, [r6, #0x32] - movs r0, #0xa0 - strb r0, [r6, #0xe] - movs r0, #0x20 - strb r0, [r6, #0xf] - adds r1, r6, #0 - adds r1, #0x63 - strb r0, [r1] - movs r5, #0 -_0806B6CE: - movs r0, #0x3b - movs r1, #2 - adds r2, r5, #0 - bl CreateNPC - adds r4, r0, #0 - cmp r4, #0 - beq _0806B6E0 - str r6, [r4, #0x50] -_0806B6E0: - adds r5, #1 - cmp r5, #3 - bls _0806B6CE - movs r0, #0x3b - movs r1, #1 - movs r2, #0 - bl CreateNPC - adds r4, r0, #0 - str r6, [r4, #0x50] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xff - strb r0, [r1] - movs r3, #0x80 - lsls r3, r3, #9 - adds r0, r6, #0 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - b _0806B7A6 -_0806B70C: - ldrb r1, [r6, #0xb] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0806B71E - ldrb r0, [r6, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r6, #0x18] -_0806B71E: - adds r0, r6, #0 - bl sub_0806B96C - b _0806B7A6 -_0806B726: - movs r0, #1 - strb r0, [r6, #0xe] - movs r0, #0x20 - strb r0, [r6, #0xf] - movs r0, #0x3b - movs r1, #4 - movs r2, #0 - bl CreateNPC - adds r4, r0, #0 - cmp r4, #0 - beq _0806B76C - adds r0, r6, #0 - adds r1, r4, #0 - bl CopyPosition - str r6, [r4, #0x50] - adds r0, r6, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - subs r1, #1 - adds r3, r4, #0 - adds r3, #0x29 - movs r0, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r0, #0 - strb r0, [r4, #0x1e] -_0806B76C: - movs r0, #0x3b - movs r1, #5 - movs r2, #0 - bl CreateNPC - adds r4, r0, #0 - cmp r4, #0 - beq _0806B7A6 - adds r0, r6, #0 - adds r1, r4, #0 - bl CopyPosition - str r6, [r4, #0x50] - adds r0, r6, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - lsrs r1, r1, #0x1d - adds r1, #1 - adds r3, r4, #0 - adds r3, #0x29 - movs r0, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_0806B7A6: - adds r0, r6, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0806B7B8 -_0806B7B0: - adds r0, r6, #0 - movs r1, #0 - bl InitializeAnimation -_0806B7B8: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0806B7BC -sub_0806B7BC: @ 0x0806B7BC - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #3 - bl CheckRoomFlag - cmp r0, #0 - bne _0806B7CC - b _0806B968 -_0806B7CC: - ldrb r0, [r5, #0xa] - cmp r0, #1 - beq _0806B84C - cmp r0, #1 - bgt _0806B7DC - cmp r0, #0 - beq _0806B7E6 - b _0806B93C -_0806B7DC: - cmp r0, #2 - beq _0806B86C - cmp r0, #3 - beq _0806B874 - b _0806B93C -_0806B7E6: - ldrh r0, [r5, #0x32] - adds r0, #1 - strh r0, [r5, #0x32] - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - movs r1, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0806B82C - movs r0, #0x3b - movs r1, #3 - movs r2, #0 - bl CreateNPC - adds r4, r0, #0 - cmp r4, #0 - bne _0806B80C - b _0806B968 -_0806B80C: - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldr r0, _0806B828 @ =0x00001634 - bl TextboxNoOverlapFollow - ldrb r0, [r5, #0xd] - adds r0, #1 - strb r0, [r5, #0xd] - bl DeleteThisEntity - b _0806B968 - .align 2, 0 -_0806B828: .4byte 0x00001634 -_0806B82C: - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - ands r0, r1 - cmp r0, #0 - beq _0806B83A - b _0806B95A -_0806B83A: - movs r0, #0x20 - strb r0, [r5, #0xf] - ldr r0, _0806B848 @ =0x000001A9 - bl SoundReq - b _0806B95A - .align 2, 0 -_0806B848: .4byte 0x000001A9 -_0806B84C: - adds r0, r5, #0 - bl sub_0806B9BC - adds r4, r0, #0 - cmp r4, #0 - bne _0806B85C - bl DeleteThisEntity -_0806B85C: - movs r3, #0x84 - lsls r3, r3, #0xe - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #0 - bl PositionRelative - b _0806B95A -_0806B86C: - adds r0, r5, #0 - bl sub_0806B96C - b _0806B95A -_0806B874: - ldrb r0, [r5, #0xd] - cmp r0, #1 - beq _0806B8A2 - cmp r0, #1 - bgt _0806B884 - cmp r0, #0 - beq _0806B88E - b _0806B91E -_0806B884: - cmp r0, #2 - beq _0806B8C4 - cmp r0, #3 - beq _0806B906 - b _0806B91E -_0806B88E: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0806B91E - ldrb r0, [r5, #0xd] - adds r0, #1 - strb r0, [r5, #0xd] - b _0806B91E -_0806B8A2: - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0806B91E - movs r0, #2 - strb r0, [r5, #0xd] - ldr r1, _0806B8C0 @ =0x0000013F - adds r0, r5, #0 - bl sub_0801D2B4 - b _0806B8FA - .align 2, 0 -_0806B8C0: .4byte 0x0000013F -_0806B8C4: - adds r2, r5, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0806B91E - movs r0, #0xef - ands r0, r1 - strb r0, [r2] - ldrb r0, [r5, #0xe] - adds r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - beq _0806B91E - cmp r0, #0xa - bne _0806B91E - ldrb r0, [r5, #0xd] - adds r0, #1 - strb r0, [r5, #0xd] - movs r0, #0xf4 - bl EnqueueSFX - movs r0, #0 - strb r0, [r5, #0xe] -_0806B8FA: - ldrb r1, [r5, #0xd] - subs r1, #1 - adds r0, r5, #0 - bl InitAnimationForceUpdate - b _0806B91E -_0806B906: - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0806B91E - movs r0, #0 - bl SetRoomFlag - bl DeleteThisEntity -_0806B91E: - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0806B95A - movs r0, #0x20 - strb r0, [r5, #0xf] - ldr r0, _0806B938 @ =0x000001A9 - bl SoundReq - b _0806B95A - .align 2, 0 -_0806B938: .4byte 0x000001A9 -_0806B93C: - adds r0, r5, #0 - bl sub_0806B9BC - adds r4, r0, #0 - cmp r4, #0 - bne _0806B94E - bl DeleteThisEntity - b _0806B968 -_0806B94E: - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _0806B968 - ldrb r0, [r5, #0xa] - cmp r0, #4 - beq _0806B962 -_0806B95A: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - b _0806B968 -_0806B962: - adds r0, r5, #0 - bl GetNextFrame -_0806B968: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0806B96C -sub_0806B96C: @ 0x0806B96C - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_0806B9BC - adds r5, r0, #0 - cmp r5, #0 - bne _0806B97E - bl DeleteThisEntity -_0806B97E: - ldrb r3, [r4, #0xb] - lsls r3, r3, #1 - ldr r0, _0806B9B8 @ =gUnk_08112F80 - adds r3, r3, r0 - ldrb r1, [r5, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r2, #0 - ldrsb r2, [r3, r2] - lsls r2, r2, #0x10 - ldrb r3, [r3, #1] - lsls r3, r3, #0x18 - asrs r3, r3, #0x18 - adds r3, #0x21 - lsls r3, r3, #0x10 - adds r0, r5, #0 - adds r1, r4, #0 - bl PositionRelative - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 -_0806B9B8: .4byte gUnk_08112F80 - - thumb_func_start sub_0806B9BC -sub_0806B9BC: @ 0x0806B9BC - push {lr} - ldr r1, [r0, #0x50] - cmp r1, #0 - beq _0806B9CC - ldr r0, [r1, #4] - cmp r0, #0 - bne _0806B9CC - movs r1, #0 -_0806B9CC: - adds r0, r1, #0 - pop {pc} diff --git a/asm/vaatiRebornEnemy.s b/asm/vaatiRebornEnemy.s deleted file mode 100644 index 1a1a6103..00000000 --- a/asm/vaatiRebornEnemy.s +++ /dev/null @@ -1,2101 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start VaatiRebornEnemy -VaatiRebornEnemy: @ 0x0803D0C8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #1 - beq _0803D0F4 - cmp r0, #1 - bgt _0803D0DC - cmp r0, #0 - beq _0803D0E6 - b _0803D12C -_0803D0DC: - cmp r0, #2 - beq _0803D104 - cmp r0, #3 - beq _0803D11C - b _0803D12C -_0803D0E6: - adds r0, r4, #0 - bl sub_0803DFBC - ldr r0, _0803D0F0 @ =gUnk_080D0470 - b _0803D106 - .align 2, 0 -_0803D0F0: .4byte gUnk_080D0470 -_0803D0F4: - adds r0, r4, #0 - bl sub_0803DC58 - ldr r0, _0803D100 @ =gUnk_080D0490 - b _0803D106 - .align 2, 0 -_0803D100: .4byte gUnk_080D0490 -_0803D104: - ldr r0, _0803D118 @ =gUnk_080D0498 -_0803D106: - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _0803D12C - .align 2, 0 -_0803D118: .4byte gUnk_080D0498 -_0803D11C: - ldr r0, _0803D130 @ =gUnk_080D04A0 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0803D12C: - pop {r4, pc} - .align 2, 0 -_0803D130: .4byte gUnk_080D04A0 - - thumb_func_start sub_0803D134 -sub_0803D134: @ 0x0803D134 - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r0, #0x7b - bl CheckLocalFlag - cmp r0, #0 - beq _0803D146 - bl DeleteThisEntity -_0803D146: - adds r0, r5, #0 - bl sub_0804A720 - movs r0, #0 - bl CheckRoomFlag - cmp r0, #0 - bne _0803D158 - b _0803D25A -_0803D158: - ldr r0, _0803D25C @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x41 - bhi _0803D25A - movs r0, #0 - bl ClearRoomFlag - movs r2, #0 - movs r0, #3 - strb r0, [r5, #0xc] - adds r1, r5, #0 - adds r1, #0x74 - movs r0, #0xff - strb r0, [r1] - strb r2, [r5, #0xe] - adds r0, r5, #0 - adds r0, #0x76 - strb r2, [r0] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r5, #0x18] - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r5, #0x15] - adds r3, r5, #0 - adds r3, #0x29 - ldrb r1, [r3] - subs r0, #7 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r3] - str r2, [r5, #0x34] - adds r1, r5, #0 - adds r1, #0x80 - movs r0, #2 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x86 - strb r2, [r0] - adds r1, #5 - movs r0, #0x30 - strb r0, [r1] - subs r1, #1 - subs r0, #0x31 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x87 - strb r2, [r0] - subs r0, #5 - strb r2, [r0] - adds r0, #1 - strb r2, [r0] - ldr r0, [r5, #0x2c] - str r0, [r5, #0x78] - ldr r0, [r5, #0x30] - str r0, [r5, #0x7c] - movs r0, #0x4a - movs r1, #1 - bl CreateEnemy - adds r4, r0, #0 - str r5, [r4, #0x50] - str r4, [r5, #0x54] - movs r6, #0 -_0803D1E2: - movs r0, #0x54 - movs r1, #0 - bl CreateEnemy - adds r4, r0, #0 - str r5, [r4, #0x50] - adds r0, #0x79 - strb r6, [r0] - adds r6, #1 - cmp r6, #5 - ble _0803D1E2 - movs r6, #0 -_0803D1FA: - movs r0, #0x4a - movs r1, #3 - bl CreateEnemy - adds r4, r0, #0 - str r5, [r4, #0x50] - strb r6, [r4, #0xe] - adds r6, #1 - cmp r6, #3 - ble _0803D1FA - movs r6, #0 -_0803D210: - movs r0, #0x54 - movs r1, #1 - bl CreateEnemy - adds r4, r0, #0 - str r5, [r4, #0x50] - movs r0, #1 - adds r2, r6, #0 - ands r2, r0 - lsls r2, r2, #6 - ldrb r0, [r4, #0x18] - movs r3, #0x41 - rsbs r3, r3, #0 - adds r1, r3, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - lsls r1, r6, #1 - ldr r0, _0803D260 @ =gUnk_080D04A8 - adds r1, r1, r0 - movs r2, #0 - ldrsb r2, [r1, r2] - lsls r2, r2, #0x10 - movs r3, #1 - ldrsb r3, [r1, r3] - lsls r3, r3, #0x10 - adds r0, r5, #0 - adds r1, r4, #0 - bl PositionRelative - adds r6, #1 - cmp r6, #1 - ble _0803D210 - adds r0, r5, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_0803D25A: - pop {r4, r5, r6, pc} - .align 2, 0 -_0803D25C: .4byte gEntCount -_0803D260: .4byte gUnk_080D04A8 - - thumb_func_start sub_0803D264 -sub_0803D264: @ 0x0803D264 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0803D318 - subs r0, #1 - strb r0, [r4, #0xe] - movs r7, #0xff - lsls r0, r0, #0x18 - lsrs r6, r0, #0x18 - cmp r6, #0 - beq _0803D27E - b _0803D400 -_0803D27E: - adds r5, r4, #0 - adds r5, #0x74 - ldrb r1, [r5] - movs r0, #0x70 - ands r0, r1 - cmp r0, #0 - bne _0803D2E4 - ldr r0, [r4, #0x54] - ldrb r0, [r0, #0xe] - cmp r0, #0 - bne _0803D2DE - adds r0, r4, #0 - bl sub_0803DD78 - adds r0, r4, #0 - adds r0, #0x75 - ldrb r0, [r0] - cmp r0, #0 - beq _0803D2B0 - movs r0, #2 - strb r0, [r4, #0xc] - strb r6, [r5] - movs r0, #0x10 - strb r0, [r4, #0xe] - b _0803D2D6 -_0803D2B0: - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - cmp r0, #0 - bne _0803D2C4 - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _0803D2D6 -_0803D2C4: - bl Random - movs r1, #0x80 - ands r1, r0 - lsrs r1, r1, #3 - movs r0, #8 - orrs r1, r0 - strb r1, [r4, #0x15] - b _0803D400 -_0803D2D6: - ldrb r0, [r4, #0x15] - orrs r0, r7 - strb r0, [r4, #0x15] - b _0803D400 -_0803D2DE: - movs r0, #2 - strb r0, [r4, #0xe] - b _0803D400 -_0803D2E4: - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r5] - movs r0, #0x80 - ands r0, r1 - adds r1, r4, #0 - adds r1, #0x75 - strb r0, [r1] - strb r6, [r5] - movs r0, #0xc0 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0x15] - orrs r0, r7 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0803D400 -_0803D318: - adds r1, r4, #0 - adds r1, #0x77 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - movs r6, #0xff - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _0803D3BA - adds r0, r4, #0 - bl sub_0803DEE0 - cmp r0, #1 - beq _0803D366 - cmp r0, #1 - blo _0803D344 - cmp r0, #2 - beq _0803D384 - cmp r0, #3 - beq _0803D374 - b _0803D3BA -_0803D344: - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0xa0 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0x15] - orrs r0, r6 - strb r0, [r4, #0x15] - adds r1, r4, #0 - adds r1, #0x84 - ldrb r0, [r1] - orrs r0, r6 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate - b _0803D3BA -_0803D366: - movs r0, #6 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x74 - strb r5, [r0] - strb r5, [r4, #0xe] - b _0803D3B4 -_0803D374: - movs r0, #5 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x74 - strb r5, [r0] - movs r0, #0x20 - strb r0, [r4, #0xf] - b _0803D3B4 -_0803D384: - adds r0, r4, #0 - adds r0, #0x74 - strb r5, [r0] - movs r0, #0x20 - strb r0, [r4, #0xe] - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - cmp r0, #0 - bne _0803D3A2 - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _0803D3B4 -_0803D3A2: - bl Random - movs r1, #0x80 - ands r1, r0 - lsrs r1, r1, #3 - movs r0, #8 - orrs r1, r0 - strb r1, [r4, #0x15] - b _0803D3BA -_0803D3B4: - ldrb r0, [r4, #0x15] - orrs r0, r6 - strb r0, [r4, #0x15] -_0803D3BA: - ldr r0, [r4, #0x54] - ldrb r0, [r0, #0xe] - cmp r0, #0 - bne _0803D400 - adds r2, r4, #0 - adds r2, #0x85 - ldrb r0, [r2] - adds r1, r0, #1 - strb r1, [r2] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - bne _0803D3FA - movs r0, #0x30 - ands r0, r1 - cmp r0, #0x10 - beq _0803D3F4 - cmp r0, #0x10 - bgt _0803D3E6 - cmp r0, #0 - beq _0803D3EE - b _0803D3FA -_0803D3E6: - cmp r0, #0x20 - beq _0803D3F4 - cmp r0, #0x30 - bne _0803D3FA -_0803D3EE: - ldrh r0, [r4, #0x32] - adds r0, #1 - b _0803D3F8 -_0803D3F4: - ldrh r0, [r4, #0x32] - subs r0, #1 -_0803D3F8: - strh r0, [r4, #0x32] -_0803D3FA: - adds r0, r4, #0 - bl sub_080AEFB4 -_0803D400: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0803D408 -sub_0803D408: @ 0x0803D408 - push {r4, r5, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x74 - ldrb r0, [r2] - cmp r0, #1 - beq _0803D458 - cmp r0, #1 - bgt _0803D420 - cmp r0, #0 - beq _0803D42A - b _0803D558 -_0803D420: - cmp r0, #2 - beq _0803D478 - cmp r0, #3 - beq _0803D4FC - b _0803D558 -_0803D42A: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _0803D438 - b _0803D558 -_0803D438: - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - movs r0, #0x20 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #3 - bl InitAnimationForceUpdate - ldr r0, _0803D454 @ =0x0000019B - bl SoundReq - b _0803D558 - .align 2, 0 -_0803D454: .4byte 0x0000019B -_0803D458: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803D558 - movs r0, #2 - strb r0, [r2] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - strb r0, [r4, #0x18] - movs r0, #0x10 - strb r0, [r4, #0xe] - b _0803D558 -_0803D478: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803D558 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r0, r4, #0 - bl sub_0803E028 - cmp r0, #0 - bne _0803D4D0 - bl Random - adds r5, r4, #0 - adds r5, #0x81 - ldrb r1, [r5] - adds r1, #1 - movs r2, #3 - ands r0, r2 - adds r1, r1, r0 - strb r1, [r5] - ldrb r0, [r5] - movs r1, #5 - bl __modsi3 - strb r0, [r5] - ldrb r1, [r5] - lsls r1, r1, #2 - ldr r0, _0803D4F4 @ =gUnk_080D04AC - adds r1, r1, r0 - ldr r2, _0803D4F8 @ =gRoomControls - ldrh r0, [r1] - ldrh r3, [r2, #6] - adds r0, r0, r3 - adds r0, #0x10 - strh r0, [r4, #0x2e] - ldrh r0, [r1, #2] - ldrh r2, [r2, #8] - adds r0, r0, r2 - adds r0, #0x10 - strh r0, [r4, #0x32] -_0803D4D0: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #0x20 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #4 - bl InitAnimationForceUpdate - movs r0, #0xf5 - bl SoundReq - b _0803D558 - .align 2, 0 -_0803D4F4: .4byte gUnk_080D04AC -_0803D4F8: .4byte gRoomControls -_0803D4FC: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803D558 - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #4 - bls _0803D52E - ldr r1, _0803D544 @ =gPlayerEntity - ldrh r0, [r1, #0x2e] - strh r0, [r4, #0x2e] - ldrh r0, [r1, #0x32] - subs r0, #0x18 - strh r0, [r4, #0x32] -_0803D52E: - adds r1, r4, #0 - adds r1, #0x77 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803D548 - movs r0, #1 - strb r0, [r4, #0xc] - b _0803D54E - .align 2, 0 -_0803D544: .4byte gPlayerEntity -_0803D548: - movs r0, #0 - strb r0, [r2] - movs r0, #0x10 -_0803D54E: - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_0803D558: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - - thumb_func_start sub_0803D560 -sub_0803D560: @ 0x0803D560 - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x74 - ldrb r0, [r2] - cmp r0, #2 - beq _0803D62A - cmp r0, #2 - bgt _0803D57C - cmp r0, #0 - beq _0803D5BC - cmp r0, #1 - beq _0803D5F8 - b _0803D650 -_0803D57C: - cmp r0, #0xfe - beq _0803D590 - cmp r0, #0xfe - bgt _0803D58A - cmp r0, #3 - beq _0803D646 - b _0803D650 -_0803D58A: - cmp r0, #0xff - beq _0803D598 - b _0803D650 -_0803D590: - movs r0, #0 - strb r0, [r2] - movs r0, #1 - b _0803D64E -_0803D598: - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #4 - rsbs r0, r0, #0 - cmp r1, r0 - beq _0803D5AC - ldr r0, [r4, #0x34] - ldr r1, _0803D5B8 @ =0xFFFFE000 - adds r0, r0, r1 - str r0, [r4, #0x34] -_0803D5AC: - ldrb r0, [r4, #0xe] - cmp r0, #2 - bne _0803D650 - movs r0, #0xfe - strb r0, [r2] - b _0803D650 - .align 2, 0 -_0803D5B8: .4byte 0xFFFFE000 -_0803D5BC: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803D650 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x75 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - movs r1, #0x20 - cmp r0, #0 - beq _0803D5E0 - movs r1, #0x14 -_0803D5E0: - strb r1, [r4, #0xe] - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - adds r0, #1 - asrs r0, r0, #1 - lsls r0, r0, #1 - adds r0, #2 - adds r1, r4, #0 - adds r1, #0x80 - strb r0, [r1] - b _0803D650 -_0803D5F8: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803D650 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x75 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0803D620 - movs r0, #0xd8 - lsls r0, r0, #1 - bl SoundReq -_0803D620: - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate - b _0803D650 -_0803D62A: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803D650 - movs r0, #3 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0803D650 -_0803D646: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r2] -_0803D64E: - strb r0, [r4, #0xe] -_0803D650: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - - thumb_func_start sub_0803D658 -sub_0803D658: @ 0x0803D658 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r3, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803D68E - movs r2, #1 - strb r2, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x84 - ldrb r0, [r1] - orrs r0, r3 - strb r0, [r1] - strb r2, [r4, #0xe] - ldrb r0, [r4, #0x15] - adds r0, #0x10 - movs r1, #0x1f - ands r0, r1 - strb r0, [r4, #0x15] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0803D6EE -_0803D68E: - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0803D6EE - movs r0, #0xef - ands r0, r1 - strb r0, [r2] - adds r5, r4, #0 - adds r5, #0x84 - ldrb r0, [r5] - cmp r0, #0xff - bne _0803D6C8 - ldr r1, _0803D6F8 @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - adds r0, #2 - movs r1, #0x1c - ands r0, r1 - ldr r1, _0803D6FC @ =gUnk_080D04C0 - lsrs r0, r0, #2 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r5] - movs r0, #0 - strb r0, [r4, #0xf] -_0803D6C8: - ldrb r0, [r4, #0xf] - cmp r0, #0xf - bhi _0803D6EE - ldrb r2, [r5] - adds r0, r4, #0 - movs r1, #0x1a - bl sub_0804A98C - adds r1, r0, #0 - cmp r1, #0 - beq _0803D6EE - ldrb r0, [r4, #0xf] - strb r0, [r1, #0xf] - str r4, [r1, #0x50] - ldrh r0, [r4, #0x36] - strh r0, [r1, #0x36] - ldrb r0, [r4, #0xf] - adds r0, #1 - strb r0, [r4, #0xf] -_0803D6EE: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 -_0803D6F8: .4byte gPlayerEntity -_0803D6FC: .4byte gUnk_080D04C0 - - thumb_func_start sub_0803D700 -sub_0803D700: @ 0x0803D700 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0803D720 - movs r0, #1 - strb r0, [r4, #0xc] - strb r0, [r4, #0xe] - movs r0, #0xff - strb r0, [r4, #0x15] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0803D82E -_0803D720: - adds r2, r4, #0 - adds r2, #0x74 - ldrb r0, [r2] - adds r6, r2, #0 - cmp r0, #1 - beq _0803D764 - cmp r0, #1 - bgt _0803D736 - cmp r0, #0 - beq _0803D744 - b _0803D73E -_0803D736: - cmp r0, #2 - beq _0803D78E - cmp r0, #3 - beq _0803D7FA -_0803D73E: - adds r5, r4, #0 - adds r5, #0x87 - b _0803D81C -_0803D744: - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - adds r5, r4, #0 - adds r5, #0x87 - cmp r0, #0 - bne _0803D81C - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate - b _0803D81C -_0803D764: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x10 - ands r0, r1 - adds r5, r4, #0 - adds r5, #0x87 - cmp r0, #0 - beq _0803D81C - movs r0, #2 - strb r0, [r2] - bl Random - movs r1, #0x3f - ands r0, r1 - adds r0, #0x40 - strb r0, [r4, #0xf] - movs r0, #0xf4 - bl SoundReq - b _0803D81C -_0803D78E: - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - adds r5, r4, #0 - adds r5, #0x87 - cmp r0, #0 - bne _0803D81C - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - cmp r0, #1 - bls _0803D7E4 - ldrb r0, [r5] - cmp r0, #3 - bhi _0803D7E4 - bl Random - movs r1, #0x10 - ands r1, r0 - cmp r1, #0 - beq _0803D7E4 - ldrb r0, [r5] - adds r0, #1 - strb r0, [r5] - bl Random - movs r1, #0x3f - ands r0, r1 - adds r0, #0x40 - strb r0, [r4, #0xf] - ldr r1, _0803D7E0 @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - movs r1, #0x10 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - b _0803D81A - .align 2, 0 -_0803D7E0: .4byte gPlayerEntity -_0803D7E4: - ldrb r0, [r6] - adds r0, #1 - movs r1, #0 - strb r0, [r6] - strb r1, [r5] - movs r0, #0x30 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _0803D81C -_0803D7FA: - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - movs r3, #0xff - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - adds r5, r4, #0 - adds r5, #0x87 - cmp r1, #0 - bne _0803D81C - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r2] - strb r0, [r4, #0xe] - ldrb r0, [r4, #0x15] - orrs r0, r3 -_0803D81A: - strb r0, [r4, #0x15] -_0803D81C: - ldrb r0, [r5] - cmp r0, #0 - beq _0803D828 - adds r0, r4, #0 - bl sub_080AEFB4 -_0803D828: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_0803D82E: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0803D830 -sub_0803D830: @ 0x0803D830 - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0803D844 - movs r0, #1 - strb r0, [r5, #0xc] - strb r0, [r5, #0xe] - b _0803D8F4 -_0803D844: - adds r4, r5, #0 - adds r4, #0x74 - ldrb r0, [r4] - cmp r0, #1 - beq _0803D870 - cmp r0, #1 - bgt _0803D858 - cmp r0, #0 - beq _0803D862 - b _0803D8EE -_0803D858: - cmp r0, #2 - beq _0803D8C2 - cmp r0, #3 - beq _0803D8CE - b _0803D8EE -_0803D862: - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _0803D8EE - movs r0, #1 - strb r0, [r4] - movs r0, #0x70 - b _0803D8EC -_0803D870: - ldrb r0, [r5, #0xe] - subs r1, r0, #1 - strb r1, [r5, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0803D8B0 - ldrb r0, [r4] - adds r0, #1 - strb r0, [r4] - movs r0, #0xa8 - lsls r0, r0, #1 - bl SoundReq - adds r0, r5, #0 - movs r1, #0x18 - movs r2, #0 - bl sub_0804A98C - adds r4, r0, #0 - cmp r4, #0 - beq _0803D8EE - ldr r3, _0803D8AC @ =0xFFF00000 - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - str r5, [r4, #0x50] - b _0803D8EE - .align 2, 0 -_0803D8AC: .4byte 0xFFF00000 -_0803D8B0: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x40 - bne _0803D8EE - movs r0, #0xcb - lsls r0, r0, #1 - bl SoundReq - b _0803D8EE -_0803D8C2: - ldrb r0, [r5, #0xf] - cmp r0, #0 - beq _0803D8EE - movs r0, #0 - strb r0, [r5, #0xf] - b _0803D8EE -_0803D8CE: - ldrb r0, [r5, #0xf] - cmp r0, #0 - bne _0803D8DE - movs r0, #1 - strb r0, [r5, #0xf] - ldr r0, _0803D8F8 @ =0x0000014F - bl SoundReq -_0803D8DE: - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _0803D8EE - movs r1, #0 - movs r0, #1 - strb r0, [r5, #0xc] - strb r1, [r4] -_0803D8EC: - strb r0, [r5, #0xe] -_0803D8EE: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame -_0803D8F4: - pop {r4, r5, pc} - .align 2, 0 -_0803D8F8: .4byte 0x0000014F - - thumb_func_start sub_0803D8FC -sub_0803D8FC: @ 0x0803D8FC - push {r4, r5, lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - cmp r0, #0 - beq _0803D968 - subs r1, r0, #1 - strb r1, [r2, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0803D918 - movs r0, #1 - bl SetRoomFlag - b _0803D968 -_0803D918: - movs r0, #7 - ands r1, r0 - cmp r1, #0 - bne _0803D968 - adds r0, r2, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r4, r0, #0 - cmp r4, #0 - beq _0803D968 - bl Random - ldr r1, _0803D96C @ =0x00003F3F - ands r0, r1 - movs r3, #0xff - adds r1, r0, #0 - ands r1, r3 - ldr r5, _0803D970 @ =0x0000FFE0 - adds r2, r5, #0 - adds r1, r2, r1 - ldrh r5, [r4, #0x2e] - adds r1, r1, r5 - strh r1, [r4, #0x2e] - lsrs r0, r0, #8 - ands r0, r3 - adds r2, r2, r0 - ldrh r0, [r4, #0x32] - adds r2, r2, r0 - strh r2, [r4, #0x32] -.ifndef EU - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r2] -.endif -_0803D968: - pop {r4, r5, pc} - .align 2, 0 -_0803D96C: .4byte 0x00003F3F -_0803D970: .4byte 0x0000FFE0 - - thumb_func_start sub_0803D974 -sub_0803D974: @ 0x0803D974 - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - adds r5, r4, #0 - adds r5, #0x74 - strb r1, [r5] - adds r2, r4, #0 - adds r2, #0x75 - strb r0, [r2] - strb r1, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xff - strb r0, [r1] - ldr r0, [r4, #0x50] - movs r3, #0x80 - lsls r3, r3, #9 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - movs r0, #0x4a - movs r1, #2 - bl CreateEnemy - str r4, [r0, #0x50] - ldr r1, [r4, #0x50] - str r1, [r0, #0x54] - ldrb r1, [r5] - adds r0, r4, #0 - bl InitAnimationForceUpdate - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803D9BC -sub_0803D9BC: @ 0x0803D9BC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x50] - adds r2, r4, #0 - adds r2, #0x74 - ldrb r0, [r2] - cmp r0, #0 - bne _0803D9E2 - adds r0, r5, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0803DA44 - movs r0, #1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x30 - b _0803D9F6 -_0803D9E2: - adds r0, r5, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _0803DA02 - movs r0, #0 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x2f -_0803D9F6: - strb r0, [r1] - ldrb r1, [r2] - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _0803DA44 -_0803DA02: - adds r2, r4, #0 - adds r2, #0x41 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0803DA2E - adds r0, r4, #0 - adds r0, #0x3d - ldrb r1, [r0] - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _0803DA2E - adds r0, r5, #0 - adds r0, #0x3d - strb r1, [r0] - ldrb r0, [r2] - adds r2, r5, #0 - adds r2, #0x41 - strb r0, [r2] -_0803DA2E: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _0803DA44 - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate -_0803DA44: - adds r1, r4, #0 - adds r1, #0x75 - ldrb r0, [r1] - cmp r0, #0 - bne _0803DA60 - ldrb r0, [r5, #0xc] - cmp r0, #2 - beq _0803DA72 - movs r0, #1 - strb r0, [r1] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - b _0803DA70 -_0803DA60: - ldrb r0, [r5, #0xc] - cmp r0, #2 - bne _0803DA72 - movs r0, #0 - strb r0, [r1] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 -_0803DA70: - strb r0, [r4, #0x10] -_0803DA72: - ldrb r1, [r5, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r5, #0 - adds r0, #0x62 - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x62 - strb r0, [r1] - ldr r0, [r4, #0x50] - movs r3, #0x80 - lsls r3, r3, #9 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803DAA8 -sub_0803DAA8: @ 0x0803DAA8 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldr r0, [r0, #0x50] - movs r3, #0 - movs r2, #1 - strb r2, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x74 - strb r2, [r1] - adds r1, #1 - strb r3, [r1] - adds r2, r4, #0 - adds r2, #0x63 - movs r1, #0xfe - strb r1, [r2] - movs r1, #0xff - strb r1, [r4, #0x15] - movs r3, #0x80 - lsls r3, r3, #0xa - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803DAE4 -sub_0803DAE4: @ 0x0803DAE4 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x50] - adds r0, r5, #0 - adds r0, #0x74 - ldrb r2, [r0] - cmp r2, #0 - bne _0803DB3E - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - cmp r0, #0 - beq _0803DB00 - strb r2, [r1] -_0803DB00: - ldr r0, [r5, #0x50] - ldrb r1, [r0, #0x15] - cmp r1, #0xff - beq _0803DB28 - adds r2, r4, #0 - adds r2, #0x75 - ldrb r0, [r2] - cmp r0, #0 - bne _0803DB16 - movs r0, #1 - strb r0, [r2] -_0803DB16: - ldrb r0, [r4, #0x15] - cmp r1, r0 - beq _0803DB54 - strb r1, [r4, #0x15] - lsrs r1, r1, #3 - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _0803DB54 -_0803DB28: - adds r1, r4, #0 - adds r1, #0x75 - ldrb r0, [r1] - cmp r0, #0 - beq _0803DB54 - strb r2, [r1] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0803DB54 -_0803DB3E: - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - cmp r0, #0 - bne _0803DB54 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate -_0803DB54: - ldrb r1, [r5, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r5, #0 - adds r0, #0x62 - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x62 - strb r0, [r1] - ldr r0, [r5, #0x50] - movs r3, #0x80 - lsls r3, r3, #0xa - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - - thumb_func_start sub_0803DB88 -sub_0803DB88: @ 0x0803DB88 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - adds r2, r4, #0 - adds r2, #0x74 - strb r1, [r2] - movs r0, #0xff - strb r0, [r4, #0x15] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r1] - ldrb r1, [r2] - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0803DC0C - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803DBB8 -sub_0803DBB8: @ 0x0803DBB8 - push {r4, lr} - adds r4, r0, #0 - ldr r2, [r4, #0x50] - ldrb r0, [r2, #0x15] - cmp r0, #0xff - beq _0803DBE8 - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - cmp r0, #0 - bne _0803DBD2 - movs r0, #1 - strb r0, [r1] -_0803DBD2: - ldrb r0, [r2, #0x15] - lsls r1, r0, #0x18 - ldrb r2, [r4, #0x15] - cmp r0, r2 - beq _0803DC02 - strb r0, [r4, #0x15] - lsrs r1, r1, #0x1b - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _0803DC02 -_0803DBE8: - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - cmp r0, #0 - beq _0803DC02 - movs r0, #0 - strb r0, [r1] - movs r0, #0xff - strb r0, [r4, #0x15] - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate -_0803DC02: - adds r0, r4, #0 - bl sub_0803DC0C - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0803DC0C -sub_0803DC0C: @ 0x0803DC0C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldrb r5, [r4, #0xe] - lsls r5, r5, #1 - ldr r1, _0803DC54 @ =gUnk_080D04C8 - adds r5, r5, r1 - ldrb r2, [r0, #0x18] - lsls r2, r2, #0x1e - lsrs r2, r2, #0x1e - ldrb r3, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r3 - orrs r1, r2 - strb r1, [r4, #0x18] - adds r1, r0, #0 - adds r1, #0x62 - ldrb r1, [r1] - adds r2, r4, #0 - adds r2, #0x62 - strb r1, [r2] - movs r2, #0 - ldrsb r2, [r5, r2] - lsls r2, r2, #0x10 - movs r3, #1 - ldrsb r3, [r5, r3] - adds r3, #1 - lsls r3, r3, #0x10 - adds r1, r4, #0 - bl PositionRelative - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 -_0803DC54: .4byte gUnk_080D04C8 - - thumb_func_start sub_0803DC58 -sub_0803DC58: @ 0x0803DC58 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #0x30 - beq _0803DC66 - b _0803DD74 -_0803DC66: - ldr r5, [r4, #0x50] - adds r2, r4, #0 - adds r2, #0x77 - movs r7, #0 - strb r7, [r2] - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - mov ip, r0 - ands r0, r1 - adds r6, r2, #0 - cmp r0, #0 - beq _0803DD20 - ldr r0, _0803DCE4 @ =gUnk_080D04D0 - adds r3, r5, #0 - adds r3, #0x86 - ldrb r2, [r3] - adds r0, r2, r0 - adds r1, r4, #0 - adds r1, #0x45 - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bls _0803DCFA - adds r0, r2, #1 - strb r0, [r3] - movs r3, #0xff - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #2 - bls _0803DCF0 - ldrb r2, [r4, #0x10] - movs r1, #0x7f - adds r0, r1, #0 - ands r0, r2 - strb r0, [r4, #0x10] - movs r0, #7 - strb r0, [r5, #0xc] - ldrb r0, [r5, #0x10] - ands r1, r0 - strb r1, [r5, #0x10] - mov r2, ip - strb r2, [r5, #0xe] - adds r0, r5, #0 - adds r0, #0x62 - strb r7, [r0] - ldrb r0, [r5, #0x15] - orrs r0, r3 - strb r0, [r5, #0x15] - strb r7, [r4, #0xe] - ldr r0, _0803DCE8 @ =0x80100000 - bl SoundReq - ldr r0, _0803DCEC @ =gArea - movs r2, #0x86 - lsls r2, r2, #4 - adds r1, r0, r2 - adds r2, #4 - adds r0, r0, r2 - ldr r0, [r0] - str r0, [r1] - b _0803DD74 - .align 2, 0 -_0803DCE4: .4byte gUnk_080D04D0 -_0803DCE8: .4byte 0x80100000 -_0803DCEC: .4byte gArea -_0803DCF0: - movs r0, #1 - strb r0, [r4, #0xe] - ldrb r0, [r6] - orrs r0, r3 - strb r0, [r6] -_0803DCFA: - adds r0, r4, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _0803DD20 - ldr r0, _0803DD50 @ =0x00000127 - bl SoundReq - movs r0, #0xc - movs r1, #1 - bl sub_08080964 - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _0803DD26 - movs r0, #0x48 - strb r0, [r4, #0xe] -_0803DD20: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0803DD74 -_0803DD26: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r2, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803DD74 - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x2f - strb r0, [r1] - adds r1, #0x35 - movs r0, #1 - strb r0, [r1] - ldrb r0, [r6] - cmp r0, #0 - bne _0803DD54 - adds r1, r5, #0 - adds r1, #0x74 - movs r0, #0xf0 - b _0803DD64 - .align 2, 0 -_0803DD50: .4byte 0x00000127 -_0803DD54: - adds r1, r5, #0 - adds r1, #0x74 - movs r0, #0x70 - strb r0, [r1] - adds r1, r4, #0 - adds r1, #0x45 - ldrb r0, [r1] - orrs r0, r2 -_0803DD64: - strb r0, [r1] - movs r0, #1 - strb r0, [r5, #0xc] - strb r0, [r5, #0xe] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_0803DD74: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0803DD78 -sub_0803DD78: @ 0x0803DD78 - push {r4, r5, lr} - adds r4, r0, #0 - bl Random - movs r1, #0x7c - ands r1, r0 - lsrs r2, r1, #2 - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - cmp r0, #1 - beq _0803DDFE - cmp r0, #1 - bgt _0803DD9A - cmp r0, #0 - beq _0803DDA0 - b _0803DDB6 -_0803DD9A: - cmp r0, #2 - beq _0803DE5C - b _0803DDB6 -_0803DDA0: - adds r0, r4, #0 - adds r0, #0x80 - ldrb r1, [r0] - cmp r1, #0 - bne _0803DDBC - subs r0, #0xb - strb r1, [r0] - adds r1, r4, #0 - adds r1, #0x77 - movs r0, #0x50 - strb r0, [r1] -_0803DDB6: - adds r5, r4, #0 - adds r5, #0x83 - b _0803DED0 -_0803DDBC: - adds r0, r4, #0 - adds r0, #0x83 - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #5 - bls _0803DDCA - b _0803DED0 -_0803DDCA: - lsls r0, r1, #2 - ldr r1, _0803DDD4 @ =_0803DDD8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803DDD4: .4byte _0803DDD8 -_0803DDD8: @ jump table - .4byte _0803DDF0 @ case 0 - .4byte _0803DEC2 @ case 1 - .4byte _0803DDF0 @ case 2 - .4byte _0803DEC2 @ case 3 - .4byte _0803DDF0 @ case 4 - .4byte _0803DEC2 @ case 5 -_0803DDF0: - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #0 - strb r0, [r1] - adds r1, #2 - movs r0, #0x50 - b _0803DECE -_0803DDFE: - adds r0, r4, #0 - adds r0, #0x83 - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #5 - bhi _0803DED0 - lsls r0, r1, #2 - ldr r1, _0803DE14 @ =_0803DE18 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803DE14: .4byte _0803DE18 -_0803DE18: @ jump table - .4byte _0803DE98 @ case 0 - .4byte _0803DEC2 @ case 1 - .4byte _0803DE30 @ case 2 - .4byte _0803DEC2 @ case 3 - .4byte _0803DE46 @ case 4 - .4byte _0803DEC2 @ case 5 -_0803DE30: - movs r1, #8 - ands r1, r2 - cmp r1, #0 - bne _0803DEC2 - adds r0, r4, #0 - adds r0, #0x75 - strb r1, [r0] - adds r1, r4, #0 - adds r1, #0x77 - movs r0, #0x50 - b _0803DECE -_0803DE46: - movs r0, #8 - ands r2, r0 - cmp r2, #0 - beq _0803DE98 - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #0 - strb r0, [r1] - adds r1, #2 - movs r0, #0x50 - b _0803DECE -_0803DE5C: - adds r0, r4, #0 - adds r0, #0x83 - ldrb r1, [r0] - adds r5, r0, #0 - cmp r1, #5 - bhi _0803DED0 - lsls r0, r1, #2 - ldr r1, _0803DE74 @ =_0803DE78 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803DE74: .4byte _0803DE78 -_0803DE78: @ jump table - .4byte _0803DE98 @ case 0 - .4byte _0803DEC2 @ case 1 - .4byte _0803DE90 @ case 2 - .4byte _0803DEC2 @ case 3 - .4byte _0803DEA6 @ case 4 - .4byte _0803DEC2 @ case 5 -_0803DE90: - movs r0, #0xf - ands r2, r0 - cmp r2, #2 - bls _0803DEC2 -_0803DE98: - adds r0, r4, #0 - adds r0, #0x75 - movs r1, #1 - strb r1, [r0] - adds r0, #2 - strb r1, [r0] - b _0803DED0 -_0803DEA6: - cmp r2, #9 - bls _0803DEC2 - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #2 - strb r0, [r1] - bl Random - movs r1, #1 - ands r0, r1 - adds r0, #2 - adds r1, r4, #0 - adds r1, #0x77 - b _0803DECE -_0803DEC2: - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #0 - strb r0, [r1] - adds r1, #2 - movs r0, #1 -_0803DECE: - strb r0, [r1] -_0803DED0: - ldrb r0, [r5] - adds r0, #1 - movs r1, #6 - bl __modsi3 - strb r0, [r5] - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803DEE0 -sub_0803DEE0: @ 0x0803DEE0 - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #2 - bl Random - movs r1, #0xf8 - ands r1, r0 - lsrs r2, r1, #3 - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _0803DFB8 - adds r0, r4, #0 - adds r0, #0x86 - ldrb r0, [r0] - cmp r0, #1 - beq _0803DF28 - cmp r0, #1 - bgt _0803DF0E - cmp r0, #0 - beq _0803DF14 - b _0803DFB8 -_0803DF0E: - cmp r0, #2 - beq _0803DF68 - b _0803DFB8 -_0803DF14: - adds r0, r4, #0 - adds r0, #0x82 - ldrb r1, [r0] - movs r5, #1 - ands r5, r1 - adds r1, #1 - movs r2, #3 - ands r1, r2 - strb r1, [r0] - b _0803DFB8 -_0803DF28: - adds r0, r4, #0 - adds r0, #0x82 - ldrb r1, [r0] - adds r4, r0, #0 - cmp r1, #4 - bhi _0803DFAC - lsls r0, r1, #2 - ldr r1, _0803DF40 @ =_0803DF44 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803DF40: .4byte _0803DF44 -_0803DF44: @ jump table - .4byte _0803DF9E @ case 0 - .4byte _0803DF58 @ case 1 - .4byte _0803DF9E @ case 2 - .4byte _0803DF58 @ case 3 - .4byte _0803DF5C @ case 4 -_0803DF58: - movs r5, #1 - b _0803DFAC -_0803DF5C: - movs r0, #8 - ands r2, r0 - movs r5, #0 - cmp r2, #0 - beq _0803DFAC - b _0803DF9E -_0803DF68: - adds r0, r4, #0 - adds r0, #0x82 - ldrb r1, [r0] - adds r4, r0, #0 - cmp r1, #4 - bhi _0803DFAC - lsls r0, r1, #2 - ldr r1, _0803DF80 @ =_0803DF84 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803DF80: .4byte _0803DF84 -_0803DF84: @ jump table - .4byte _0803DF9E @ case 0 - .4byte _0803DF98 @ case 1 - .4byte _0803DFA2 @ case 2 - .4byte _0803DF9E @ case 3 - .4byte _0803DFAA @ case 4 -_0803DF98: - movs r5, #0 - cmp r2, #5 - bls _0803DFAC -_0803DF9E: - movs r5, #3 - b _0803DFAC -_0803DFA2: - movs r5, #0 - cmp r2, #9 - bhi _0803DFAC - b _0803DF9E -_0803DFAA: - movs r5, #0 -_0803DFAC: - ldrb r0, [r4] - adds r0, #1 - movs r1, #5 - bl __modsi3 - strb r0, [r4] -_0803DFB8: - adds r0, r5, #0 - pop {r4, r5, pc} - - thumb_func_start sub_0803DFBC -sub_0803DFBC: @ 0x0803DFBC - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _0803DFCE - ldr r0, [r4, #0x2c] - str r0, [r4, #0x78] - ldr r0, [r4, #0x30] - str r0, [r4, #0x7c] -_0803DFCE: - adds r5, r4, #0 - adds r5, #0x76 - ldrb r0, [r5] - cmp r0, #0 - bne _0803DFFC - ldrb r0, [r4, #0x15] - cmp r0, #0xff - beq _0803E000 - adds r0, r4, #0 - bl sub_08049FA0 - cmp r0, #0 - bne _0803E000 - adds r0, r4, #0 - bl sub_08049EE4 - movs r1, #0x10 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r4, #0x15] - movs r0, #0x10 - b _0803DFFE -_0803DFFC: - subs r0, #1 -_0803DFFE: - strb r0, [r5] -_0803E000: - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0803E022 - ldrb r0, [r4, #0x14] - adds r0, #1 - movs r1, #3 - ands r0, r1 - strb r0, [r4, #0x14] - ldr r1, _0803E024 @ =gUnk_080D04D3 - ldrb r0, [r4, #0x14] - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x62 - strb r1, [r0] -_0803E022: - pop {r4, r5, pc} - .align 2, 0 -_0803E024: .4byte gUnk_080D04D3 - - thumb_func_start sub_0803E028 -sub_0803E028: @ 0x0803E028 - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #0 - adds r0, #0x75 - ldrb r0, [r0] - cmp r0, #2 - beq _0803E046 - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _0803E046 - movs r0, #0 - b _0803E082 -_0803E046: - adds r0, r4, #0 - adds r0, #0x77 - ldrb r0, [r0] - cmp r0, #1 - bne _0803E080 - ldr r2, _0803E084 @ =gRoomControls - ldrh r0, [r2, #6] - adds r1, r0, #0 - adds r1, #0x58 - ldr r0, _0803E088 @ =gPlayerEntity - movs r3, #0x2e - ldrsh r0, [r0, r3] - cmp r1, r0 - bgt _0803E080 - ldrh r2, [r2, #8] - adds r1, r2, #0 - adds r1, #0x58 - cmp r1, r0 - bgt _0803E080 - adds r1, r2, #0 - adds r1, #0xf8 - cmp r1, r0 - blt _0803E080 - adds r1, r4, #0 - adds r1, #0x81 - ldrb r0, [r1] - adds r0, #5 - strb r0, [r1] - movs r5, #1 -_0803E080: - adds r0, r5, #0 -_0803E082: - pop {r4, r5, pc} - .align 2, 0 -_0803E084: .4byte gRoomControls -_0803E088: .4byte gPlayerEntity diff --git a/asm/vaatiTransfigured.s b/asm/vaatiTransfigured.s deleted file mode 100644 index f3aac9f0..00000000 --- a/asm/vaatiTransfigured.s +++ /dev/null @@ -1,2646 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start VaatiTransfigured -VaatiTransfigured: @ 0x0803F770 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #5 - bhi _0803F810 - lsls r0, r0, #2 - ldr r1, _0803F784 @ =_0803F788 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803F784: .4byte _0803F788 -_0803F788: @ jump table - .4byte _0803F7A0 @ case 0 - .4byte _0803F7D0 @ case 1 - .4byte _0803F7D8 @ case 2 - .4byte _0803F7E0 @ case 3 - .4byte _0803F7E8 @ case 4 - .4byte _0803F800 @ case 5 -_0803F7A0: - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _0803F7C8 - adds r1, r4, #0 - adds r1, #0x78 - ldrh r0, [r1] - adds r2, r4, #0 - adds r2, #0x7a - strh r0, [r2] - ldrh r0, [r4, #0x2e] - strh r0, [r1] - adds r1, #4 - ldrh r0, [r1] - adds r2, #4 - strh r0, [r2] - ldrh r0, [r4, #0x32] - strh r0, [r1] - adds r0, r4, #0 - bl sub_080409B0 -_0803F7C8: - ldr r0, _0803F7CC @ =gUnk_080D0AC8 - b _0803F7EA - .align 2, 0 -_0803F7CC: .4byte gUnk_080D0AC8 -_0803F7D0: - ldr r0, _0803F7D4 @ =gUnk_080D0AE8 - b _0803F7EA - .align 2, 0 -_0803F7D4: .4byte gUnk_080D0AE8 -_0803F7D8: - ldr r0, _0803F7DC @ =gUnk_080D0AF0 - b _0803F7EA - .align 2, 0 -_0803F7DC: .4byte gUnk_080D0AF0 -_0803F7E0: - ldr r0, _0803F7E4 @ =gUnk_080D0AFC - b _0803F7EA - .align 2, 0 -_0803F7E4: .4byte gUnk_080D0AFC -_0803F7E8: - ldr r0, _0803F7FC @ =gUnk_080D0B04 -_0803F7EA: - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _0803F810 - .align 2, 0 -_0803F7FC: .4byte gUnk_080D0B04 -_0803F800: - ldr r0, _0803F814 @ =gUnk_080D0B0C - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0803F810: - pop {r4, pc} - .align 2, 0 -_0803F814: .4byte gUnk_080D0B0C - - thumb_func_start sub_0803F818 -sub_0803F818: @ 0x0803F818 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - bl sub_0804A720 - movs r0, #0 - bl CheckRoomFlag - cmp r0, #0 - beq _0803F910 - ldr r0, _0803F8FC @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x50 - bhi _0803F910 - movs r4, #0 - movs r2, #1 - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - adds r3, r5, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #5 - orrs r0, r1 - strb r0, [r3] - adds r1, r5, #0 - adds r1, #0x6d - ldrb r0, [r1] - orrs r2, r0 - strb r2, [r1] - bl Random - movs r1, #0x17 - ands r0, r1 - adds r0, #4 - strb r0, [r5, #0x15] - movs r0, #0x30 - strb r0, [r5, #0xe] - movs r0, #0xc - strb r0, [r5, #0xf] - adds r1, r5, #0 - adds r1, #0x82 - movs r0, #4 - strb r0, [r1] - subs r1, #2 - movs r0, #0xff - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x74 - strb r4, [r0] - adds r0, #3 - strb r4, [r0] - adds r1, #4 - movs r0, #9 - strb r0, [r1] - strb r4, [r5, #0x14] - adds r0, r5, #0 - adds r0, #0x86 - strb r4, [r0] - adds r0, #1 - strb r4, [r0] - ldrh r1, [r5, #0x2e] - subs r0, #0xf - strh r1, [r0] - ldrh r0, [r5, #0x2e] - adds r1, r5, #0 - adds r1, #0x7a - strh r0, [r1] - ldrh r1, [r5, #0x32] - adds r0, r5, #0 - adds r0, #0x7c - strh r1, [r0] - ldrh r0, [r5, #0x32] - adds r1, r5, #0 - adds r1, #0x7e - strh r0, [r1] - movs r4, #1 - adds r7, r5, #0 - adds r7, #0x75 -_0803F8C2: - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0 - bl sub_08040648 - adds r4, #1 - cmp r4, #5 - bls _0803F8C2 - bl Random - adds r0, r5, #0 - bl sub_080408EC - movs r4, #0 - movs r6, #1 -_0803F8E0: - movs r0, #0x5a - movs r1, #0 - bl CreateEnemy - str r5, [r0, #0x50] - strb r4, [r0, #0xb] - ldrb r1, [r7] - asrs r1, r4 - ands r1, r6 - cmp r1, #0 - beq _0803F900 - strb r6, [r0, #0xe] - b _0803F902 - .align 2, 0 -_0803F8FC: .4byte gEntCount -_0803F900: - strb r1, [r0, #0xe] -_0803F902: - adds r4, #1 - cmp r4, #7 - bls _0803F8E0 - adds r0, r5, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_0803F910: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0803F914 -sub_0803F914: @ 0x0803F914 - push {r4, r5, r6, r7, lr} - sub sp, #4 - adds r7, r0, #0 - adds r4, r7, #0 - adds r4, #0x80 - ldrb r0, [r4] - cmp r0, #2 - beq _0803F998 - cmp r0, #2 - bgt _0803F932 - cmp r0, #0 - beq _0803F95A - cmp r0, #1 - beq _0803F97A - b _0803FA40 -_0803F932: - cmp r0, #4 - bne _0803F938 - b _0803FA3A -_0803F938: - cmp r0, #4 - blt _0803F9CE - adds r3, r4, #0 - cmp r0, #0xff - beq _0803F944 - b _0803FA42 -_0803F944: - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - bne _0803FA42 - strb r0, [r3] - movs r0, #0xb - strb r0, [r7, #0xe] - b _0803FA42 -_0803F95A: - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - adds r3, r4, #0 - cmp r0, #0 - bne _0803FA42 - ldrb r0, [r3] - adds r0, #1 - strb r0, [r3] - movs r0, #0xc0 - lsls r0, r0, #1 - strh r0, [r7, #0x24] - movs r0, #0x14 - strb r0, [r7, #0xe] - b _0803FA42 -_0803F97A: - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - adds r3, r4, #0 - cmp r0, #0 - bne _0803FA42 - ldrb r0, [r3] - adds r0, #1 - strb r0, [r3] - movs r0, #0xc0 - strh r0, [r7, #0x24] - movs r0, #0xc - strb r0, [r7, #0xe] - b _0803FA42 -_0803F998: - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - adds r3, r4, #0 - cmp r1, #0 - bne _0803FA42 - ldrb r0, [r3] - adds r0, #1 - strb r0, [r3] - strh r1, [r7, #0x24] - ldrb r0, [r7, #0x14] - cmp r0, #1 - bhi _0803F9C8 - str r3, [sp] - bl Random - movs r1, #0x7f - ands r0, r1 - adds r0, #0x40 - strb r0, [r7, #0xe] - ldr r3, [sp] - b _0803FA42 -_0803F9C8: - movs r0, #8 - strb r0, [r7, #0xe] - b _0803FA42 -_0803F9CE: - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0803FA32 - movs r0, #0 - strh r1, [r7, #0x36] - strb r0, [r4] - ldr r1, _0803FA04 @ =gUnk_080D0ABF - ldrb r0, [r7, #0x14] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r7, #0xe] - adds r0, r7, #0 - bl sub_08040934 - adds r1, r0, #0 - cmp r1, #2 - beq _0803FA1A - cmp r1, #2 - bhi _0803FA08 - cmp r1, #1 - beq _0803FA0E - b _0803FA26 - .align 2, 0 -_0803FA04: .4byte gUnk_080D0ABF -_0803FA08: - cmp r1, #3 - beq _0803FA20 - b _0803FA26 -_0803FA0E: - movs r0, #4 - strb r0, [r7, #0xc] - adds r0, r7, #0 - adds r0, #0x74 - strb r1, [r0] - b _0803FA40 -_0803FA1A: - movs r0, #5 - strb r0, [r7, #0xc] - b _0803FA40 -_0803FA20: - movs r0, #6 - strb r0, [r7, #0xc] - b _0803FA40 -_0803FA26: - adds r1, r7, #0 - adds r1, #0x80 - movs r0, #4 - strb r0, [r1] - adds r3, r1, #0 - b _0803FA42 -_0803FA32: - adds r0, r7, #0 - bl sub_08040AD4 - b _0803FA40 -_0803FA3A: - adds r0, r7, #0 - bl sub_08040670 -_0803FA40: - adds r3, r4, #0 -_0803FA42: - adds r1, r7, #0 - adds r1, #0x82 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803FAAC - movs r0, #4 - strb r0, [r1] - ldrb r2, [r7, #0x15] - adds r2, #0x12 - movs r0, #0x1c - ands r2, r0 - asrs r2, r2, #2 - movs r0, #0x9b - movs r1, #0 - str r3, [sp] - bl CreateObject - adds r6, r0, #0 - ldr r3, [sp] - cmp r6, #0 - beq _0803FAAC - str r7, [r6, #0x50] - str r3, [sp] - bl Random - movs r5, #0xf - ands r0, r5 - ldr r1, _0803FAC4 @ =0x0000FFF9 - adds r4, r1, #0 - adds r0, r4, r0 - ldrh r1, [r6, #0x2e] - adds r0, r0, r1 - strh r0, [r6, #0x2e] - bl Random - ands r0, r5 - adds r4, r4, r0 - ldrh r0, [r6, #0x32] - adds r4, r4, r0 - strh r4, [r6, #0x32] - adds r2, r6, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - ldr r3, [sp] -_0803FAAC: - ldrb r0, [r3] - cmp r0, #0xff - beq _0803FAB8 - adds r0, r7, #0 - bl ProcessMovement -_0803FAB8: - adds r0, r7, #0 - bl UpdateAnimationSingleFrame - add sp, #4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0803FAC4: .4byte 0x0000FFF9 - - thumb_func_start sub_0803FAC8 -sub_0803FAC8: @ 0x0803FAC8 - push {lr} - bl UpdateAnimationSingleFrame - pop {pc} - - thumb_func_start sub_0803FAD0 -sub_0803FAD0: @ 0x0803FAD0 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #5 - bls _0803FADE - b _0803FD32 -_0803FADE: - lsls r0, r0, #2 - ldr r1, _0803FAE8 @ =_0803FAEC - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803FAE8: .4byte _0803FAEC -_0803FAEC: @ jump table - .4byte _0803FB04 @ case 0 - .4byte _0803FB34 @ case 1 - .4byte _0803FBB8 @ case 2 - .4byte _0803FBE2 @ case 3 - .4byte _0803FC80 @ case 4 - .4byte _0803FD0C @ case 5 -_0803FB04: - movs r1, #0xa0 - lsls r1, r1, #6 - adds r0, r7, #0 - bl sub_080044EC - adds r1, r0, #0 - cmp r1, #1 - beq _0803FB16 - b _0803FD32 -_0803FB16: - adds r0, r7, #0 - adds r0, #0x80 - strb r1, [r0] - movs r0, #0xc0 - strb r0, [r7, #0xe] - ldrb r1, [r7, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r7, #0x10] - movs r0, #0xa6 - lsls r0, r0, #1 - bl SoundReq - movs r0, #0x14 - b _0803FC4A -_0803FB34: - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - lsrs r2, r0, #0x18 - adds r3, r7, #0 - adds r3, #0x80 - cmp r2, #0 - bne _0803FB58 - movs r0, #2 - strb r0, [r3] - adds r1, r7, #0 - adds r1, #0x3f - movs r0, #0x35 - strb r0, [r1] - adds r0, r7, #0 - adds r0, #0x62 - strb r2, [r0] -_0803FB58: - adds r2, r7, #0 - adds r2, #0x45 - ldr r0, _0803FB70 @ =gUnk_080D0ABC - ldrb r1, [r7, #0x14] - adds r1, r1, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bhs _0803FB74 - movs r0, #1 - strb r0, [r7, #0xe] - b _0803FB76 - .align 2, 0 -_0803FB70: .4byte gUnk_080D0ABC -_0803FB74: - movs r0, #0 -_0803FB76: - cmp r0, #0 - bne _0803FB7C - b _0803FD32 -_0803FB7C: - movs r1, #0 - movs r0, #2 - strb r0, [r3] - adds r2, r7, #0 - adds r2, #0x3f - movs r0, #0x35 - strb r0, [r2] - adds r0, r7, #0 - adds r0, #0x62 - strb r1, [r0] - ldrb r0, [r7, #0x14] - adds r0, #1 - strb r0, [r7, #0x14] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #2 - bhi _0803FBA0 - b _0803FD32 -_0803FBA0: - movs r0, #7 - strb r0, [r7, #0xc] - movs r0, #0xe0 - strb r0, [r7, #0xe] - bl sub_0807A108 - ldr r0, _0803FBB4 @ =0x00000127 - bl SoundReq - b _0803FD4E - .align 2, 0 -_0803FBB4: .4byte 0x00000127 -_0803FBB8: - ldr r0, [r7, #0x54] - adds r0, #0x74 - movs r1, #0x10 - strb r1, [r0] - ldrb r0, [r7, #0xe] - cmp r0, #0 - beq _0803FBD4 - adds r0, r7, #0 - adds r0, #0x80 - movs r1, #3 - strb r1, [r0] - movs r0, #0x40 - strb r0, [r7, #0xe] - b _0803FD32 -_0803FBD4: - adds r0, r7, #0 - adds r0, #0x80 - movs r1, #4 - strb r1, [r0] - movs r0, #0x50 - strb r0, [r7, #0xe] - b _0803FD32 -_0803FBE2: - ldrb r0, [r7, #0xe] - cmp r0, #0 - beq _0803FC08 - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _0803FBF4 - b _0803FD32 -_0803FBF4: - ldrb r1, [r7, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r7, #0x10] - movs r0, #0xe0 - lsls r0, r0, #0xa - str r0, [r7, #0x20] - movs r0, #0x10 - strb r0, [r7, #0xf] - b _0803FD32 -_0803FC08: - movs r1, #0xa0 - lsls r1, r1, #6 - adds r0, r7, #0 - bl sub_08003FC4 - adds r2, r0, #0 - cmp r2, #0 - bne _0803FC52 - adds r1, r7, #0 - adds r1, #0x80 - movs r0, #5 - strb r0, [r1] - movs r0, #0x10 - strb r0, [r7, #0xe] - ldrb r1, [r7, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r7, #0x10] - adds r1, r7, #0 - adds r1, #0x45 - movs r0, #0xff - strb r0, [r1] - adds r0, r7, #0 - adds r0, #0x86 - strb r2, [r0] - adds r0, r7, #0 - bl sub_080408EC - movs r0, #0xa6 - lsls r0, r0, #1 - bl SoundReq - movs r0, #0x1e -_0803FC4A: - movs r1, #4 - bl sub_08080964 - b _0803FD32 -_0803FC52: - ldrb r0, [r7, #0xf] - cmp r0, #0 - beq _0803FD32 - subs r1, r0, #1 - strb r1, [r7, #0xf] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0803FC6C - movs r0, #0xd8 - lsls r0, r0, #1 - bl SoundReq - b _0803FD32 -_0803FC6C: - movs r0, #7 - ands r1, r0 - cmp r1, #0 - bne _0803FD32 - ldr r0, _0803FC7C @ =0x00000149 - bl SoundReq - b _0803FD32 - .align 2, 0 -_0803FC7C: .4byte 0x00000149 -_0803FC80: - ldrb r0, [r7, #0xe] - subs r1, r0, #1 - strb r1, [r7, #0xe] - lsls r0, r1, #0x18 - lsrs r2, r0, #0x18 - cmp r2, #0 - bne _0803FCA8 - adds r0, r7, #0 - adds r0, #0x80 - movs r1, #5 - strb r1, [r0] - movs r0, #0x10 - strb r0, [r7, #0xe] - adds r0, r7, #0 - adds r0, #0x86 - strb r2, [r0] - adds r0, r7, #0 - bl sub_080408EC - b _0803FD32 -_0803FCA8: - movs r0, #1 - ands r1, r0 - cmp r1, #0 - beq _0803FD32 - movs r0, #0x9b - movs r1, #1 - movs r2, #0xff - bl CreateObject - adds r6, r0, #0 - cmp r6, #0 - beq _0803FD32 - str r7, [r6, #0x50] - adds r0, r7, #0 - adds r1, r6, #0 - bl CopyPosition - bl Random - movs r5, #0xf - ands r0, r5 - ldr r1, _0803FD08 @ =0x0000FFF9 - adds r4, r1, #0 - adds r0, r4, r0 - ldrh r1, [r6, #0x2e] - adds r0, r0, r1 - strh r0, [r6, #0x2e] - bl Random - ands r0, r5 - adds r4, r4, r0 - ldrh r0, [r6, #0x32] - adds r4, r4, r0 - strh r4, [r6, #0x32] - adds r2, r6, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - movs r0, #0x92 - lsls r0, r0, #1 - bl SoundReq - b _0803FD32 - .align 2, 0 -_0803FD08: .4byte 0x0000FFF9 -_0803FD0C: - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0803FD32 - movs r0, #1 - strb r0, [r7, #0xc] - adds r0, r7, #0 - adds r0, #0x80 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - subs r0, #0xb - strb r1, [r0] - adds r0, r7, #0 - bl sub_08040670 -_0803FD32: - adds r0, r7, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #2 - bls _0803FD48 - ldrb r1, [r7, #0xe] - movs r0, #1 - ands r0, r1 - adds r1, r7, #0 - adds r1, #0x62 - strb r0, [r1] -_0803FD48: - adds r0, r7, #0 - bl UpdateAnimationSingleFrame -_0803FD4E: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0803FD50 -sub_0803FD50: @ 0x0803FD50 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x80 - ldrb r0, [r5] - cmp r0, #1 - beq _0803FDA8 - cmp r0, #1 - bgt _0803FD68 - cmp r0, #0 - beq _0803FD72 - b _0803FE86 -_0803FD68: - cmp r0, #2 - beq _0803FE0C - cmp r0, #3 - beq _0803FE62 - b _0803FE86 -_0803FD72: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _0803FD82 - b _0803FE86 -_0803FD82: - ldrb r0, [r5] - adds r0, #1 - strb r0, [r5] - adds r0, r4, #0 - adds r0, #0x74 - strb r1, [r0] - movs r0, #0x80 - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - movs r0, #0x90 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - ldr r0, _0803FDA4 @ =0x0000012B - bl SoundReq - b _0803FE86 - .align 2, 0 -_0803FDA4: .4byte 0x0000012B -_0803FDA8: - movs r1, #0xa0 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _0803FE86 - ldrb r0, [r5] - adds r0, #1 - strb r0, [r5] - adds r0, r4, #0 - adds r0, #0x84 - ldrb r0, [r0] - cmp r0, #1 - beq _0803FDD8 - cmp r0, #1 - bgt _0803FDD0 - cmp r0, #0 - beq _0803FDDE - b _0803FDE4 -_0803FDD0: - cmp r0, #2 - beq _0803FDDE - cmp r0, #3 - bne _0803FDE4 -_0803FDD8: - movs r0, #1 - strb r0, [r4, #0xf] - b _0803FDF0 -_0803FDDE: - movs r0, #0 - strb r0, [r4, #0xf] - b _0803FDF0 -_0803FDE4: - bl Random - movs r1, #0x20 - ands r1, r0 - lsrs r1, r1, #5 - strb r1, [r4, #0xf] -_0803FDF0: - ldrb r0, [r4, #0x14] - cmp r0, #1 - bls _0803FDFA - movs r0, #1 - strb r0, [r4, #0xf] -_0803FDFA: - movs r0, #0xa6 - lsls r0, r0, #1 - bl SoundReq - movs r0, #0x1e - movs r1, #4 - bl sub_08080964 - b _0803FE86 -_0803FE0C: - ldrb r0, [r4, #0xe] - subs r1, r0, #1 - strb r1, [r4, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0803FE34 - ldrb r0, [r5] - adds r0, #1 - strb r0, [r5] - ldr r2, _0803FE30 @ =gUnk_080D0ABF - ldrb r0, [r4, #0x14] - lsls r0, r0, #1 - movs r1, #1 - orrs r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - strb r0, [r4, #0xe] - b _0803FE86 - .align 2, 0 -_0803FE30: .4byte gUnk_080D0ABF -_0803FE34: - movs r0, #7 - ands r1, r0 - cmp r1, #0 - bne _0803FE46 - ldrb r2, [r4, #0xf] - adds r0, r4, #0 - movs r1, #0x1f - bl sub_0804A98C -_0803FE46: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0803FE86 - ldrb r0, [r4, #0x14] - cmp r0, #1 - bls _0803FE86 - ldrb r0, [r4, #0xe] - cmp r0, #5 - bhi _0803FE86 - movs r0, #0x80 - strb r0, [r4, #0xe] - movs r0, #0 - strb r0, [r4, #0xf] - b _0803FE86 -_0803FE62: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0803FE80 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r5] - strh r1, [r4, #0x36] - adds r0, r4, #0 - bl sub_08040670 - b _0803FE86 -_0803FE80: - adds r0, r4, #0 - bl sub_08040AD4 -_0803FE86: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0803FE90 -sub_0803FE90: @ 0x0803FE90 - push {r4, r5, lr} - adds r4, r0, #0 - adds r3, r4, #0 - adds r3, #0x80 - ldrb r2, [r3] - cmp r2, #1 - beq _0803FED4 - cmp r2, #1 - bgt _0803FEA8 - cmp r2, #0 - beq _0803FEAE - b _0803FF74 -_0803FEA8: - cmp r2, #2 - beq _0803FF52 - b _0803FF74 -_0803FEAE: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0803FF74 - ldrb r0, [r3] - adds r0, #1 - strb r0, [r3] - movs r0, #0x40 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0x14] - cmp r0, #1 - bls _0803FF74 - movs r0, #0x80 - strb r0, [r4, #0xe] - movs r0, #1 - strb r0, [r4, #0xf] - b _0803FF74 -_0803FED4: - ldrb r0, [r4, #0xe] - subs r1, r0, #1 - strb r1, [r4, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0803FEFC - ldrb r0, [r3] - adds r0, #1 - strb r0, [r3] - ldr r1, _0803FEF8 @ =gUnk_080D0ABF - ldrb r0, [r4, #0x14] - lsls r0, r0, #1 - orrs r0, r2 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] - b _0803FF74 - .align 2, 0 -_0803FEF8: .4byte gUnk_080D0ABF -_0803FEFC: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0803FF24 - movs r0, #7 - ands r1, r0 - cmp r1, #0 - bne _0803FF14 - ldrb r2, [r4, #0xf] - adds r0, r4, #0 - movs r1, #0x1f - bl sub_0804A98C -_0803FF14: - ldrb r0, [r4, #0xe] - cmp r0, #5 - bhi _0803FF74 - movs r0, #0x40 - strb r0, [r4, #0xe] - movs r0, #0 - strb r0, [r4, #0xf] - b _0803FF74 -_0803FF24: - movs r5, #0xf - ands r5, r1 - cmp r5, #0 - bne _0803FF74 - adds r0, r4, #0 - movs r1, #0x1f - movs r2, #2 - bl sub_0804A98C - adds r1, r0, #0 - cmp r1, #0 - beq _0803FF74 - strb r5, [r1, #0xb] - adds r0, r4, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _0803FF74 - ldrh r0, [r1, #0x24] - lsls r0, r0, #0x10 - asrs r0, r0, #0x11 - strh r0, [r1, #0x24] - b _0803FF74 -_0803FF52: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0803FF6E - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r3] - adds r0, r4, #0 - bl sub_08040670 - b _0803FF74 -_0803FF6E: - adds r0, r4, #0 - bl sub_08040AD4 -_0803FF74: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - - thumb_func_start sub_0803FF7C -sub_0803FF7C: @ 0x0803FF7C - push {r4, r5, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x80 - ldrb r5, [r2] - cmp r5, #1 - beq _0803FFBC - cmp r5, #1 - bgt _0803FF94 - cmp r5, #0 - beq _0803FF9A - b _08040062 -_0803FF94: - cmp r5, #2 - beq _08040040 - b _08040062 -_0803FF9A: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08040062 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - movs r0, #0x80 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0x14] - cmp r0, #1 - bls _08040062 - movs r0, #1 - strb r0, [r4, #0xf] - b _08040062 -_0803FFBC: - ldrb r0, [r4, #0xe] - subs r1, r0, #1 - strb r1, [r4, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0803FFE4 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - ldr r1, _0803FFE0 @ =gUnk_080D0ABF - ldrb r0, [r4, #0x14] - lsls r0, r0, #1 - orrs r0, r5 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] - b _08040062 - .align 2, 0 -_0803FFE0: .4byte gUnk_080D0ABF -_0803FFE4: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0804000C - movs r0, #7 - ands r1, r0 - cmp r1, #0 - bne _0803FFFC - ldrb r2, [r4, #0xf] - adds r0, r4, #0 - movs r1, #0x1f - bl sub_0804A98C -_0803FFFC: - ldrb r0, [r4, #0xe] - cmp r0, #5 - bhi _08040062 - movs r0, #0x80 - strb r0, [r4, #0xe] - movs r0, #0 - strb r0, [r4, #0xf] - b _08040062 -_0804000C: - movs r0, #0x1f - ands r1, r0 - cmp r1, #0 - bne _08040062 - adds r0, r4, #0 - movs r1, #0x1f - movs r2, #2 - bl sub_0804A98C - adds r1, r0, #0 - cmp r1, #0 - beq _08040062 - strb r5, [r1, #0xb] - ldrh r0, [r1, #0x32] - subs r0, #0x20 - strh r0, [r1, #0x32] - adds r0, r4, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _08040062 - ldrh r0, [r1, #0x24] - lsls r0, r0, #0x10 - asrs r0, r0, #0x11 - strh r0, [r1, #0x24] - b _08040062 -_08040040: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0804005C - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r2] - adds r0, r4, #0 - bl sub_08040670 - b _08040062 -_0804005C: - adds r0, r4, #0 - bl sub_08040AD4 -_08040062: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0804006C -sub_0804006C: @ 0x0804006C - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl sub_08078B48 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08040090 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080400C2 - movs r0, #2 - bl SetRoomFlag - movs r0, #8 - strb r0, [r4, #0xf] - b _080400BA -_08040090: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _080400B4 - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - bne _080400BA - adds r1, r4, #0 - adds r1, #0x45 - strb r0, [r1] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - b _080400BA -_080400B4: - adds r0, r4, #0 - bl sub_0804A7D4 -_080400BA: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - b _08040126 -_080400C2: - ldrb r0, [r4, #0xf] - adds r0, #1 - movs r1, #7 - ands r0, r1 - strb r0, [r4, #0xf] - cmp r0, #0 - bne _08040120 - adds r0, r4, #0 - movs r1, #0x55 - movs r2, #0 - bl CreateFx - adds r5, r0, #0 - cmp r5, #0 - beq _08040120 - bl Random - ldr r1, _08040128 @ =0x00003F3F - ands r0, r1 - movs r3, #0xff - adds r1, r0, #0 - ands r1, r3 - ldr r6, _0804012C @ =0x0000FFE0 - adds r2, r6, #0 - adds r1, r2, r1 - ldrh r6, [r5, #0x2e] - adds r1, r1, r6 - strh r1, [r5, #0x2e] - lsrs r0, r0, #8 - ands r0, r3 - adds r2, r2, r0 - ldrh r0, [r5, #0x32] - adds r2, r2, r0 - strh r2, [r5, #0x32] -.ifndef EU - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - strb r0, [r2] -.endif - movs r0, #0xb7 - lsls r0, r0, #1 - bl SoundReq -_08040120: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08040126: - pop {r4, r5, r6, pc} - .align 2, 0 -_08040128: .4byte 0x00003F3F -_0804012C: .4byte 0x0000FFE0 - - thumb_func_start sub_08040130 -sub_08040130: @ 0x08040130 - push {lr} - movs r2, #0 - movs r1, #1 - strb r1, [r0, #0xc] - strb r2, [r0, #0xe] - adds r1, r0, #0 - adds r1, #0x80 - strb r2, [r1] - adds r3, r0, #0 - adds r3, #0x29 - ldrb r2, [r3] - movs r1, #8 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #6 - orrs r1, r2 - strb r1, [r3] - ldrb r1, [r0, #0xe] - bl InitAnimationForceUpdate - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804015C -sub_0804015C: @ 0x0804015C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x50] - adds r0, r5, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0804017C - adds r2, r4, #0 - adds r2, #0x6d - ldrb r1, [r2] - movs r0, #2 - orrs r0, r1 - strb r0, [r2] - bl DeleteThisEntity -_0804017C: - adds r0, r5, #0 - adds r0, #0x7a - ldrh r0, [r0] - strh r0, [r4, #0x2e] - adds r0, r5, #0 - adds r0, #0x7e - ldrh r0, [r0] - strh r0, [r4, #0x32] - adds r0, r5, #0 - adds r0, #0x74 - ldrb r0, [r0] - cmp r0, #0 - bne _0804019E - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - b _080401A6 -_0804019E: - adds r0, r4, #0 - movs r1, #2 - bl sub_080042BA -_080401A6: - ldrb r0, [r5, #0xc] - cmp r0, #4 - bls _080401C0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _080401D2 - movs r0, #1 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate - b _080401D2 -_080401C0: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _080401D2 - movs r0, #0 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_080401D2: - ldrb r0, [r5, #0xc] - cmp r0, #3 - beq _080401DC - ldrh r0, [r5, #0x36] - strh r0, [r4, #0x36] -_080401DC: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080401E0 -sub_080401E0: @ 0x080401E0 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xb] - adds r5, r1, #0 - cmp r5, #0 - beq _08040212 - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, #1 - adds r3, r4, #0 - adds r3, #0x29 - movs r0, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrb r1, [r4, #0xb] - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate - b _08040260 -_08040212: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _08040264 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x45 - bhi _08040260 - adds r0, r4, #0 - movs r1, #2 - movs r2, #1 - bl sub_08040648 - adds r0, r4, #0 - movs r1, #2 - movs r2, #2 - bl sub_08040648 - movs r0, #1 - strb r0, [r4, #0xc] - strb r5, [r4, #0xe] - bl Random - movs r1, #0x7f - ands r0, r1 - adds r0, #0x17 - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x74 - strb r5, [r0] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_08040260: - pop {r4, r5, pc} - .align 2, 0 -_08040264: .4byte gEntCount - - thumb_func_start sub_08040268 -sub_08040268: @ 0x08040268 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _08040286 - adds r2, r4, #0 - adds r2, #0x6d - ldrb r1, [r2] - movs r0, #2 - orrs r0, r1 - strb r0, [r2] - bl DeleteThisEntity -_08040286: - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPosition - ldrb r2, [r4, #0xb] - cmp r2, #1 - beq _080402C6 - cmp r2, #1 - bgt _0804029E - cmp r2, #0 - beq _080402E4 - b _08040382 -_0804029E: - cmp r2, #2 - bne _08040382 - ldr r1, _080402DC @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - lsls r0, r0, #1 - ldr r1, _080402E0 @ =gUnk_080D0B18 - adds r0, r0, r1 - movs r1, #0 - ldrsb r1, [r0, r1] - ldrh r2, [r4, #0x2e] - adds r1, r1, r2 - strh r1, [r4, #0x2e] - ldrb r0, [r0, #1] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r4, #0x32] - adds r0, r0, r1 - strh r0, [r4, #0x32] -_080402C6: - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0x1e] - cmp r0, #2 - beq _08040382 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - strb r0, [r4, #0x18] - b _08040382 - .align 2, 0 -_080402DC: .4byte gPlayerEntity -_080402E0: .4byte gUnk_080D0B18 -_080402E4: - adds r5, r4, #0 - adds r5, #0x74 - ldrb r0, [r5] - cmp r0, #1 - beq _0804032E - cmp r0, #1 - bgt _080402F8 - cmp r0, #0 - beq _08040302 - b _08040382 -_080402F8: - cmp r0, #0x10 - beq _08040354 - cmp r0, #0x11 - beq _08040366 - b _08040382 -_08040302: - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08040382 - bl Random - movs r1, #0x7f - ands r0, r1 - adds r0, #0x27 - strb r0, [r4, #0xf] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _08040382 - strb r1, [r5] - adds r0, r4, #0 - movs r1, #8 - bl InitAnimationForceUpdate - b _08040382 -_0804032E: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08040382 - strb r2, [r5] - bl Random - movs r1, #0x7f - ands r0, r1 - adds r0, #0x17 - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _08040382 -_08040354: - adds r0, r4, #0 - movs r1, #7 - bl InitAnimationForceUpdate - movs r0, #0x11 - strb r0, [r5] - movs r0, #0x50 - strb r0, [r4, #0xf] - b _08040382 -_08040366: - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08040382 - movs r0, #1 - strb r0, [r5] - movs r0, #0x30 - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #8 - bl InitAnimationForceUpdate -_08040382: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0804038C -sub_0804038C: @ 0x0804038C - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _080403AA - adds r2, r4, #0 - adds r2, #0x6d - ldrb r1, [r2] - movs r0, #2 - orrs r0, r1 - strb r0, [r2] - bl DeleteThisEntity -_080403AA: - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPosition - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0x1e] - cmp r0, #2 - bne _080403CA - movs r2, #1 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] -_080403CA: - pop {r4, pc} - - thumb_func_start sub_080403CC -sub_080403CC: @ 0x080403CC - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - adds r3, r0, #0 - adds r3, #0x29 - ldrb r2, [r3] - subs r1, #9 - ands r1, r2 - movs r2, #4 - orrs r1, r2 - strb r1, [r3] - movs r1, #0 - bl InitAnimationForceUpdate - pop {pc} - .align 2, 0 - - thumb_func_start sub_080403EC -sub_080403EC: @ 0x080403EC - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0804040A - adds r2, r4, #0 - adds r2, #0x6d - ldrb r1, [r2] - movs r0, #2 - orrs r0, r1 - strb r0, [r2] - bl DeleteThisEntity -_0804040A: - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPosition - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0804041C -sub_0804041C: @ 0x0804041C - push {lr} - movs r2, #0 - movs r1, #1 - strb r1, [r0, #0xc] - adds r1, r0, #0 - adds r1, #0x80 - strb r2, [r1] - movs r1, #0xa - strb r1, [r0, #0xe] - ldrb r2, [r0, #0x18] - subs r1, #0xe - ands r1, r2 - strb r1, [r0, #0x18] - adds r3, r0, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r2, #7 - orrs r1, r2 - strb r1, [r3] - movs r1, #0 - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804044C -sub_0804044C: @ 0x0804044C - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0804046A - adds r2, r4, #0 - adds r2, #0x6d - ldrb r1, [r2] - movs r0, #2 - orrs r0, r1 - strb r0, [r2] - bl DeleteThisEntity -_0804046A: - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #5 - beq _0804048A - adds r1, r4, #0 - adds r1, #0x80 - ldrb r0, [r1] - cmp r0, #0 - beq _080404BC - movs r0, #0 - strb r0, [r1] - ldrb r1, [r4, #0x18] - subs r0, #4 - ands r0, r1 - strb r0, [r4, #0x18] - b _080404BC -_0804048A: - adds r1, r4, #0 - adds r1, #0x80 - ldrb r0, [r1] - cmp r0, #0 - bne _080404A6 - adds r0, #1 - strb r0, [r1] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] -_080404A6: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080404BC - movs r0, #0xa - strb r0, [r4, #0xe] - ldr r0, _080404CC @ =0x00000149 - bl SoundReq -_080404BC: - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPosition - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 -_080404CC: .4byte 0x00000149 - - thumb_func_start sub_080404D0 -sub_080404D0: @ 0x080404D0 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xb] - cmp r0, #0 - beq _080404FC - movs r0, #2 - strb r0, [r2, #0xc] - movs r0, #0xa - strb r0, [r2, #0xe] - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - subs r0, #0x12 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r3] - adds r0, r2, #0 - movs r1, #2 - bl InitializeAnimation - b _08040518 -_080404FC: - movs r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x18] - subs r0, #5 - ands r0, r1 - strb r0, [r2, #0x18] - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] -_08040518: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804051C -sub_0804051C: @ 0x0804051C - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _0804053A - adds r2, r4, #0 - adds r2, #0x6d - ldrb r1, [r2] - movs r0, #2 - orrs r0, r1 - strb r0, [r2] - bl DeleteThisEntity -_0804053A: - adds r1, r4, #0 - adds r1, #0x80 - ldrb r0, [r1] - cmp r0, #0 - beq _0804054A - cmp r0, #1 - beq _0804056C - b _080405C4 -_0804054A: - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #6 - bne _080405CC - movs r0, #1 - movs r2, #1 - strb r0, [r1] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation - b _080405C4 -_0804056C: - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #6 - beq _08040582 - movs r0, #0 - strb r0, [r1] - ldrb r1, [r4, #0x18] - subs r0, #4 - ands r0, r1 - strb r0, [r4, #0x18] - b _080405C4 -_08040582: - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080405A8 - movs r0, #0x7f - ands r0, r1 - strb r0, [r2] - ldr r0, _080405D0 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x46 - bhi _080405A8 - ldrb r1, [r4, #0xa] - adds r0, r4, #0 - movs r2, #1 - bl sub_08040648 -_080405A8: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080405BE - movs r0, #0xa - strb r0, [r4, #0xe] - ldr r0, _080405D4 @ =0x00000149 - bl SoundReq -_080405BE: - adds r0, r4, #0 - bl GetNextFrame -_080405C4: - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPosition -_080405CC: - pop {r4, pc} - .align 2, 0 -_080405D0: .4byte gEntCount -_080405D4: .4byte 0x00000149 - - thumb_func_start sub_080405D8 -sub_080405D8: @ 0x080405D8 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - bne _080405F6 - adds r2, r4, #0 - adds r2, #0x6d - ldrb r1, [r2] - movs r0, #2 - orrs r0, r1 - strb r0, [r2] - bl DeleteThisEntity -_080405F6: - adds r3, r4, #0 - adds r3, #0x80 - ldrb r2, [r3] - cmp r2, #0 - bne _08040626 - ldr r0, [r4, #0x50] - ldr r0, [r0, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #6 - beq _08040638 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08040638 - adds r0, r2, #1 - strb r0, [r3] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - b _08040638 -_08040626: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08040638 - bl DeleteThisEntity -_08040638: - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPosition - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - - thumb_func_start sub_08040648 -sub_08040648: @ 0x08040648 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - adds r4, r1, #0 - adds r7, r2, #0 - movs r0, #0x4f - bl CreateEnemy - adds r5, r0, #0 - strb r7, [r5, #0xb] - str r6, [r5, #0x50] - adds r0, r6, #0 - adds r1, r5, #0 - bl CopyPosition - cmp r4, #2 - bne _0804066E - cmp r7, #0 - bne _0804066E - str r5, [r6, #0x54] -_0804066E: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08040670 -sub_08040670: @ 0x08040670 - push {lr} - adds r2, r0, #0 - movs r1, #0 - movs r0, #1 - strb r0, [r2, #0xc] - adds r0, r2, #0 - adds r0, #0x80 - strb r1, [r0] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r2, #0x24] - movs r0, #0xc - strb r0, [r2, #0xe] - ldrb r0, [r2, #0x14] - cmp r0, #0 - bne _08040698 - adds r0, r2, #0 - bl sub_080406A0 - b _0804069E -_08040698: - adds r0, r2, #0 - bl sub_08040770 -_0804069E: - pop {pc} - - thumb_func_start sub_080406A0 -sub_080406A0: @ 0x080406A0 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - bl Random - mov r8, r0 - movs r0, #0x30 - mov r1, r8 - ands r1, r0 - mov r8, r1 - adds r0, r5, #0 - adds r0, #0x86 - ldrb r6, [r0] - ldr r2, _080406F0 @ =gRoomControls - ldrh r3, [r2, #6] - ldr r4, _080406F4 @ =gUnk_080D0B58 - lsls r1, r6, #1 - lsls r0, r6, #2 - adds r0, r0, r4 - ldrh r0, [r0] - adds r7, r3, r0 - ldrh r2, [r2, #8] - adds r1, #1 - lsls r1, r1, #1 - adds r1, r1, r4 - ldrh r0, [r1] - adds r4, r2, r0 - adds r0, r5, #0 - adds r1, r7, #0 - adds r2, r4, #0 - movs r3, #0x1c - bl sub_0806FCB8 - cmp r0, #0 - beq _0804071E - cmp r6, #0 - beq _080406F8 - movs r6, #0 - b _08040702 - .align 2, 0 -_080406F0: .4byte gRoomControls -_080406F4: .4byte gUnk_080D0B58 -_080406F8: - bl Random - movs r1, #1 - ands r1, r0 - adds r6, r1, #1 -_08040702: - ldr r2, _0804074C @ =gRoomControls - ldrh r3, [r2, #6] - ldr r4, _08040750 @ =gUnk_080D0B58 - lsls r1, r6, #1 - lsls r0, r6, #2 - adds r0, r0, r4 - ldrh r0, [r0] - adds r7, r3, r0 - ldrh r2, [r2, #8] - adds r1, #1 - lsls r1, r1, #1 - adds r1, r1, r4 - ldrh r0, [r1] - adds r4, r2, r0 -_0804071E: - movs r2, #0x2e - ldrsh r0, [r5, r2] - movs r2, #0x32 - ldrsh r1, [r5, r2] - adds r2, r7, #0 - adds r3, r4, #0 - bl sub_080045D4 - strb r0, [r5, #0x15] - movs r0, #0x20 - mov r1, r8 - ands r0, r1 - cmp r0, #0 - beq _0804075A - ldrb r1, [r5, #0x15] - movs r0, #0x10 - mov r2, r8 - ands r2, r0 - cmp r2, #0 - beq _08040754 - adds r0, r1, #1 - b _08040758 - .align 2, 0 -_0804074C: .4byte gRoomControls -_08040750: .4byte gUnk_080D0B58 -_08040754: - adds r0, r1, #0 - adds r0, #0x1f -_08040758: - strb r0, [r5, #0x15] -_0804075A: - ldrb r0, [r5, #0x15] - movs r1, #0x1f - ands r1, r0 - strb r1, [r5, #0x15] - adds r0, r5, #0 - adds r0, #0x86 - strb r6, [r0] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08040770 -sub_08040770: @ 0x08040770 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - bl Random - mov r8, r0 - movs r0, #0x38 - mov r1, r8 - ands r1, r0 - mov r8, r1 - adds r0, r7, #0 - adds r0, #0x86 - ldrb r5, [r0] - ldr r2, _080407CC @ =gRoomControls - ldrh r3, [r2, #6] - ldr r4, _080407D0 @ =gUnk_080D0B64 - lsls r1, r5, #1 - lsls r0, r5, #2 - adds r0, r0, r4 - ldrh r0, [r0] - adds r6, r3, r0 - ldrh r2, [r2, #8] - adds r1, #1 - lsls r1, r1, #1 - adds r1, r1, r4 - ldrh r0, [r1] - adds r4, r2, r0 - adds r0, r7, #0 - adds r1, r6, #0 - adds r2, r4, #0 - movs r3, #0x1c - bl sub_0806FCB8 - cmp r0, #0 - beq _0804089A - ldrb r0, [r7, #0x14] - cmp r0, #2 - beq _08040822 - movs r0, #8 - mov r2, r8 - ands r0, r2 - cmp r0, #0 - beq _080407D4 - adds r5, #1 - b _080407D6 - .align 2, 0 -_080407CC: .4byte gRoomControls -_080407D0: .4byte gUnk_080D0B64 -_080407D4: - adds r5, #3 -_080407D6: - movs r0, #3 - ands r5, r0 - adds r0, r7, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _0804087E - adds r0, r7, #0 - adds r0, #0x75 - ldrb r0, [r0] - cmp r0, #0x3c - beq _0804080A - cmp r0, #0x3c - bgt _080407F8 - cmp r0, #0xf - beq _08040802 - b _0804087E -_080407F8: - cmp r0, #0xc3 - beq _0804081A - cmp r0, #0xf0 - beq _08040812 - b _0804087E -_08040802: - cmp r5, #0 - bne _0804087E - movs r5, #2 - b _0804087E -_0804080A: - cmp r5, #1 - bne _0804087E - movs r5, #3 - b _0804087E -_08040812: - cmp r5, #2 - bne _0804087E - movs r5, #0 - b _0804087E -_0804081A: - cmp r5, #3 - bne _0804087E - movs r5, #1 - b _0804087E -_08040822: - adds r1, r7, #0 - adds r1, #0x87 - ldrb r2, [r1] - movs r0, #0x7f - ands r0, r2 - adds r4, r1, #0 - cmp r0, #0 - beq _08040848 - movs r0, #0x80 - ands r0, r2 - cmp r0, #0 - beq _0804083E - adds r5, #1 - b _08040840 -_0804083E: - adds r5, #3 -_08040840: - ldrb r0, [r4] - subs r0, #1 - strb r0, [r4] - b _0804087A -_08040848: - bl Random - movs r1, #7 - ands r0, r1 - adds r0, #4 - strb r0, [r4] - ldrb r6, [r4] - bl Random - movs r1, #0x20 - ands r1, r0 - cmp r1, #0 - bne _08040868 - movs r1, #0x80 - orrs r1, r6 - b _0804086A -_08040868: - adds r1, r6, #0 -_0804086A: - strb r1, [r4] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08040878 - adds r5, #1 - b _0804087A -_08040878: - adds r5, #3 -_0804087A: - movs r0, #3 - ands r5, r0 -_0804087E: - ldr r2, _080408C8 @ =gRoomControls - ldrh r3, [r2, #6] - ldr r4, _080408CC @ =gUnk_080D0B64 - lsls r1, r5, #1 - lsls r0, r5, #2 - adds r0, r0, r4 - ldrh r0, [r0] - adds r6, r3, r0 - ldrh r2, [r2, #8] - adds r1, #1 - lsls r1, r1, #1 - adds r1, r1, r4 - ldrh r0, [r1] - adds r4, r2, r0 -_0804089A: - movs r1, #0x2e - ldrsh r0, [r7, r1] - movs r2, #0x32 - ldrsh r1, [r7, r2] - adds r2, r6, #0 - adds r3, r4, #0 - bl sub_080045D4 - strb r0, [r7, #0x15] - movs r0, #0x20 - mov r1, r8 - ands r0, r1 - cmp r0, #0 - beq _080408D6 - ldrb r1, [r7, #0x15] - movs r0, #0x10 - mov r2, r8 - ands r2, r0 - cmp r2, #0 - beq _080408D0 - adds r0, r1, #1 - b _080408D4 - .align 2, 0 -_080408C8: .4byte gRoomControls -_080408CC: .4byte gUnk_080D0B64 -_080408D0: - adds r0, r1, #0 - adds r0, #0x1f -_080408D4: - strb r0, [r7, #0x15] -_080408D6: - ldrb r0, [r7, #0x15] - movs r1, #0x1f - ands r1, r0 - strb r1, [r7, #0x15] - adds r0, r7, #0 - adds r0, #0x86 - strb r5, [r0] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_080408EC -sub_080408EC: @ 0x080408EC - push {r4, r5, r6, r7, lr} - adds r2, r0, #0 - ldrb r0, [r2, #0x14] - cmp r0, #0 - bne _08040902 - movs r1, #0xf0 - adds r4, r2, #0 - adds r4, #0x75 - adds r5, r2, #0 - adds r5, #0x76 - b _08040926 -_08040902: - adds r4, r2, #0 - adds r4, #0x75 - adds r5, r2, #0 - adds r5, #0x76 - ldr r7, _08040930 @ =gUnk_080D0B74 - movs r6, #0x3c -_0804090E: - bl Random - ands r0, r6 - lsrs r0, r0, #2 - adds r0, r0, r7 - ldrb r1, [r0] - ldrb r0, [r4] - cmp r1, r0 - bne _08040922 - movs r1, #0xff -_08040922: - cmp r1, #0xff - beq _0804090E -_08040926: - movs r0, #0 - strb r1, [r4] - strb r0, [r5] - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08040930: .4byte gUnk_080D0B74 - - thumb_func_start sub_08040934 -sub_08040934: @ 0x08040934 - push {r4, lr} - adds r4, r0, #0 - bl Random - movs r1, #0x3e - ands r1, r0 - movs r2, #0 - cmp r1, #0x2e - bhi _08040948 - movs r2, #1 -_08040948: - adds r0, r4, #0 - adds r0, #0x87 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - beq _08040958 - movs r2, #0 -_08040958: - adds r4, #0x84 - ldrb r0, [r4] - cmp r0, #9 - beq _080409A4 - cmp r2, #0 - beq _080409AA - adds r0, #1 - movs r1, #5 - bl __modsi3 - strb r0, [r4] - bl Random - movs r1, #0xf8 - ands r1, r0 - lsrs r1, r1, #3 - ldr r0, _08040998 @ =gUnk_080D0B84 - adds r0, r1, r0 - ldrb r2, [r0] - ldrb r0, [r4] - cmp r0, #1 - beq _0804099C - cmp r0, #1 - blt _080409AA - cmp r0, #4 - bgt _080409AA - cmp r0, #3 - blt _080409AA - cmp r2, #0 - bne _080409AA - b _080409A8 - .align 2, 0 -_08040998: .4byte gUnk_080D0B84 -_0804099C: - cmp r2, #0 - beq _080409A8 - movs r2, #3 - b _080409AA -_080409A4: - movs r0, #0 - strb r0, [r4] -_080409A8: - movs r2, #1 -_080409AA: - adds r0, r2, #0 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080409B0 -sub_080409B0: @ 0x080409B0 - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #0x81 - adds r0, r0, r4 - mov ip, r0 - ldrb r1, [r0] - cmp r1, #1 - beq _080409EA - cmp r1, #1 - bgt _080409CA - cmp r1, #0 - beq _080409D0 - b _08040A68 -_080409CA: - cmp r1, #2 - beq _08040A04 - b _08040A68 -_080409D0: - adds r0, r4, #0 - adds r0, #0x75 - adds r2, r4, #0 - adds r2, #0x76 - ldrb r0, [r0] - ldrb r3, [r2] - cmp r0, r3 - bne _08040A68 - movs r0, #1 - mov r3, ip - strb r0, [r3] - strb r1, [r2] - b _08040A68 -_080409EA: - adds r0, r4, #0 - adds r0, #0x76 - ldrb r0, [r0] - cmp r0, #0 - beq _08040A68 - movs r0, #2 - mov r1, ip - strb r0, [r1] - adds r1, r4, #0 - adds r1, #0x77 - movs r0, #0x10 - strb r0, [r1] - b _08040A68 -_08040A04: - adds r1, r4, #0 - adds r1, #0x77 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r2, r0, #0x18 - cmp r2, #0 - bne _08040A68 - adds r0, r4, #0 - adds r0, #0x75 - adds r3, r4, #0 - adds r3, #0x76 - ldrb r1, [r0] - ldrb r0, [r3] - ands r0, r1 - cmp r1, r0 - beq _08040A3C - movs r0, #1 - mov r1, ip - strb r0, [r1] - strb r2, [r3] - ldr r0, _08040A38 @ =0x00000155 - bl SoundReq - b _08040A68 - .align 2, 0 -_08040A38: .4byte 0x00000155 -_08040A3C: - movs r1, #3 - strb r1, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x80 - strb r2, [r0] - mov r3, ip - strb r1, [r3] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x36 - strb r0, [r1] - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r4, #0x20] - movs r0, #0xb2 - lsls r0, r0, #1 - bl SoundReq -_08040A68: - adds r0, r4, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #2 - bhi _08040A84 - adds r0, r4, #0 - adds r0, #0x42 - ldrb r0, [r0] - cmp r0, #0 - beq _08040AC8 - adds r0, r4, #0 - bl sub_080AF18C - b _08040AC8 -_08040A84: - adds r2, r4, #0 - adds r2, #0x41 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - adds r5, r2, #0 - cmp r0, #0 - beq _08040AB0 - adds r0, r4, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _08040AB0 - movs r0, #0xc - movs r1, #1 - bl sub_08080964 - ldr r0, _08040ACC @ =0x00000127 - bl SoundReq -_08040AB0: - ldrb r0, [r5] - cmp r0, #0x8a - bne _08040AC8 - ldr r0, _08040AD0 @ =gPlayerState - adds r0, #0xa0 - ldrb r0, [r0] - cmp r0, #5 - bne _08040AC8 - adds r1, r4, #0 - adds r1, #0x45 - movs r0, #0xc0 - strb r0, [r1] -_08040AC8: - pop {r4, r5, pc} - .align 2, 0 -_08040ACC: .4byte 0x00000127 -_08040AD0: .4byte gPlayerState - - thumb_func_start sub_08040AD4 -sub_08040AD4: @ 0x08040AD4 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - movs r1, #0x3f - ands r1, r0 - lsls r6, r1, #0x18 - lsrs r4, r6, #0x18 - movs r0, #0x1f - ands r0, r4 - cmp r0, #0 - bne _08040AF0 - ldr r0, _08040B0C @ =0x000001A9 - bl SoundReq -_08040AF0: - movs r0, #3 - ands r4, r0 - cmp r4, #0 - bne _08040B2A - lsrs r4, r6, #0x1a - movs r0, #0x2e - ldrsh r2, [r5, r0] - adds r0, r4, #4 - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _08040B10 - subs r0, r2, #1 - b _08040B12 - .align 2, 0 -_08040B0C: .4byte 0x000001A9 -_08040B10: - adds r0, r2, #1 -_08040B12: - strh r0, [r5, #0x2e] - movs r0, #0x32 - ldrsh r2, [r5, r0] - adds r0, r4, #2 - movs r1, #4 - ands r0, r1 - cmp r0, #0 - beq _08040B26 - subs r0, r2, #1 - b _08040B28 -_08040B26: - adds r0, r2, #1 -_08040B28: - strh r0, [r5, #0x32] -_08040B2A: - pop {r4, r5, r6, pc} diff --git a/asm/vaatiWrath.s b/asm/vaatiWrath.s deleted file mode 100644 index 6ef91bf2..00000000 --- a/asm/vaatiWrath.s +++ /dev/null @@ -1,2627 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start VaatiWrath -VaatiWrath: @ 0x08041330 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _08041384 - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08041384 - adds r2, r4, #0 - adds r2, #0x45 - ldrb r0, [r2] - cmp r0, #0 - bne _08041384 - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - movs r0, #0xff - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x84 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _08041384 - movs r0, #0xd - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - ldr r0, _08041398 @ =0x80010000 - bl SoundReq - movs r0, #0x94 - lsls r0, r0, #1 - bl SoundReq -_08041384: - ldr r0, _0804139C @ =gUnk_080D0E1C - ldrb r1, [r4, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_08041398: .4byte 0x80010000 -_0804139C: .4byte gUnk_080D0E1C - - thumb_func_start sub_080413A0 -sub_080413A0: @ 0x080413A0 -.ifdef DEMO_JP @ TODO deduplicate - push {r4, lr} - adds r4, r0, #0 - bl sub_080423A4 - ldr r1, _080413BC @ =gUnk_080D0E2C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_080413BC: .4byte gUnk_080D0E2C -.else -.ifdef JP - push {lr} - ldr r2, _08041358 @ =gUnk_080D0E2C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08041358: .4byte gUnk_080D0E2C -.else -.ifdef EU - push {lr} - ldr r2, _08041288 @ =gUnk_080D0E2C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08041288: .4byte gUnk_080D0E2C -.else - push {r4, lr} - adds r4, r0, #0 - bl sub_080423A4 - ldr r1, _080413BC @ =gUnk_080D0E2C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_080413BC: .4byte gUnk_080D0E2C -.endif -.endif -.endif - - thumb_func_start sub_080413C0 -sub_080413C0: @ 0x080413C0 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldr r7, _080413F8 @ =gScreenTransition - adds r0, r7, #0 - adds r0, #0x38 - ldrb r0, [r0] - movs r6, #1 - adds r5, r6, #0 - ands r5, r0 - cmp r5, #0 - beq _08041420 - adds r0, r4, #0 - bl sub_08041FCC - cmp r0, #0 - beq _08041486 - adds r0, r7, #0 - adds r0, #0x39 - ldrb r1, [r0] - movs r0, #0xc - ands r0, r1 - cmp r0, #0 - bne _080413FC - movs r0, #5 - strb r0, [r4, #0xc] - strb r6, [r4, #0xd] - b _08041404 - .align 2, 0 -_080413F8: .4byte gScreenTransition -_080413FC: - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] -_08041404: - ldr r0, _0804141C @ =gScreenTransition - adds r1, r0, #0 - adds r1, #0x40 - ldrh r1, [r1] - strh r1, [r4, #0x2e] - adds r0, #0x42 - ldrh r0, [r0] - strh r0, [r4, #0x32] - adds r0, r4, #0 - bl sub_08042004 - b _0804144A - .align 2, 0 -_0804141C: .4byte gScreenTransition -_08041420: - adds r0, r4, #0 - bl sub_08041ED4 - cmp r0, #0 - beq _08041486 - strb r6, [r4, #0xc] - strb r5, [r4, #0xd] - movs r0, #0x78 - strb r0, [r4, #0xe] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0xb1 - ands r0, r1 - strb r0, [r2] - ldr r0, _08041488 @ =0x0000FFB0 - strh r0, [r4, #0x36] - ldr r0, _0804148C @ =gRoomControls - str r4, [r0, #0x30] - bl sub_080809D4 -_0804144A: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r3, r4, #0 - adds r3, #0x6d - ldrb r0, [r3] - movs r2, #0 - orrs r1, r0 - strb r1, [r3] - adds r0, r4, #0 - adds r0, #0x79 - strb r2, [r0] - adds r1, r4, #0 - adds r1, #0x7c - movs r0, #0x3c - strh r0, [r1] - adds r1, #2 - movs r0, #0x78 - strh r0, [r1] - adds r1, #6 - movs r0, #3 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_08041486: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08041488: .4byte 0x0000FFB0 -_0804148C: .4byte gRoomControls - - thumb_func_start sub_08041490 -sub_08041490: @ 0x08041490 - push {r4, r5, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xd] - cmp r0, #5 - bls _080414A0 - b _080415CC -_080414A0: - lsls r0, r0, #2 - ldr r1, _080414AC @ =_080414B0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080414AC: .4byte _080414B0 -_080414B0: @ jump table - .4byte _080415E6 @ case 0 - .4byte _080414C8 @ case 1 - .4byte _08041510 @ case 2 - .4byte _08041532 @ case 3 - .4byte _0804155C @ case 4 - .4byte _08041592 @ case 5 -_080414C8: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #8 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r4, #0x34] - movs r1, #0x80 - lsls r1, r1, #8 - adds r0, r0, r1 - str r0, [r4, #0x34] - ldrh r1, [r4, #0x36] - movs r0, #0x3f - ands r0, r1 - cmp r0, #0 - bne _080414F4 - ldr r0, _0804150C @ =0x000001A9 - bl SoundReq -_080414F4: - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #6 - rsbs r0, r0, #0 - cmp r1, r0 - ble _080415E6 - movs r0, #2 - strb r0, [r4, #0xd] - ldr r0, _0804150C @ =0x000001A9 - bl SoundReq - b _080415E6 - .align 2, 0 -_0804150C: .4byte 0x000001A9 -_08041510: - adds r0, r4, #0 - bl sub_08042004 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08041520 - subs r0, #1 - b _080415E4 -_08041520: - adds r0, r4, #0 - movs r1, #0 - bl sub_08041F74 - cmp r0, #0 - beq _080415E6 - movs r0, #3 - strb r0, [r4, #0xd] - b _080415E2 -_08041532: - adds r0, r4, #0 - bl sub_08042004 - ldrb r0, [r4, #0xe] - adds r5, r0, #0 - cmp r5, #0 - beq _08041544 - subs r0, #1 - b _080415E4 -_08041544: - adds r0, r4, #0 - movs r1, #1 - bl sub_08041F74 - cmp r0, #0 - beq _080415E6 - movs r0, #4 - strb r0, [r4, #0xd] - movs r0, #0x78 - strb r0, [r4, #0xe] - strb r5, [r4, #0xf] - b _080415E6 -_0804155C: - adds r0, r4, #0 - bl sub_08042004 - ldrb r0, [r4, #0xe] - subs r1, r0, #1 - strb r1, [r4, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _08041574 - movs r0, #5 - strb r0, [r4, #0xd] - b _080415E6 -_08041574: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x3c - bhi _080415E6 - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _080415E6 - adds r0, r4, #0 - bl sub_08041F1C - cmp r0, #0 - beq _080415E6 - movs r0, #1 - strb r0, [r4, #0xf] - b _080415E6 -_08041592: - adds r0, r4, #0 - bl sub_08042004 - movs r0, #6 - strb r0, [r4, #0xd] - movs r0, #0x1e - strb r0, [r4, #0xe] - ldr r1, _080415BC @ =gScreenTransition - adds r1, #0x38 - ldrb r2, [r1] - movs r0, #1 - orrs r0, r2 - strb r0, [r1] - ldr r1, _080415C0 @ =gRoomControls - ldr r0, _080415C4 @ =gPlayerEntity - str r0, [r1, #0x30] - ldr r0, _080415C8 @ =gPlayerState - adds r0, #0x8b - movs r1, #1 - strb r1, [r0] - b _080415E6 - .align 2, 0 -_080415BC: .4byte gScreenTransition -_080415C0: .4byte gRoomControls -_080415C4: .4byte gPlayerEntity -_080415C8: .4byte gPlayerState -_080415CC: - adds r0, r4, #0 - bl sub_08042004 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080415E6 - movs r0, #2 - strb r0, [r4, #0xc] -_080415E2: - movs r0, #0x3c -_080415E4: - strb r0, [r4, #0xe] -_080415E6: - pop {r4, r5, pc} - - thumb_func_start sub_080415E8 -sub_080415E8: @ 0x080415E8 - push {r4, lr} - adds r4, r0, #0 - bl sub_08042004 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08041614 - bl Random - movs r1, #1 - ands r0, r1 - adds r0, #1 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_08042028 -_08041614: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08041618 -sub_08041618: @ 0x08041618 - push {r4, lr} - adds r4, r0, #0 - bl sub_08042004 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl ProcessMovement - ldr r0, _0804165C @ =gRoomControls - ldrh r2, [r0, #8] - adds r0, r2, #0 - adds r0, #0x90 - movs r3, #0x32 - ldrsh r1, [r4, r3] - cmp r0, r1 - blt _08041644 - adds r0, r2, #0 - adds r0, #0x40 - cmp r0, r1 - ble _08041646 -_08041644: - strh r0, [r4, #0x32] -_08041646: - ldrb r0, [r4, #0xe] - subs r1, r0, #1 - strb r1, [r4, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _08041660 - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #8 - strb r0, [r4, #0xe] - b _08041694 - .align 2, 0 -_0804165C: .4byte gRoomControls -_08041660: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x1d - bhi _0804166E - ldrh r0, [r4, #0x24] - subs r0, #8 - b _0804167A -_0804166E: - ldrh r1, [r4, #0x24] - movs r2, #0x24 - ldrsh r0, [r4, r2] - cmp r0, #0xff - bgt _0804167C - adds r0, r1, #6 -_0804167A: - strh r0, [r4, #0x24] -_0804167C: - ldrb r1, [r4, #0xe] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - bne _08041694 - adds r0, r4, #0 - bl sub_0804207C - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 -_08041694: - adds r0, r4, #0 - bl sub_0804212C - adds r0, r4, #0 - bl sub_080421AC - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080416A4 -sub_080416A4: @ 0x080416A4 - push {r4, lr} - adds r4, r0, #0 - bl sub_08042004 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r1, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080416DA - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - ands r0, r1 - cmp r0, #0 - bne _080416D4 - adds r0, r4, #0 - bl sub_08042120 - b _080416DA -_080416D4: - adds r0, r4, #0 - bl sub_08042028 -_080416DA: - pop {r4, pc} - - thumb_func_start sub_080416DC -sub_080416DC: @ 0x080416DC - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_08042004 - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - adds r0, r5, #0 - bl sub_0804212C - adds r0, r5, #0 - bl sub_080421AC - ldrb r1, [r5, #0xd] - cmp r1, #0 - bne _08041748 - movs r4, #1 - strb r4, [r5, #0xd] - bl Random - ands r0, r4 - cmp r0, #0 - beq _08041716 - ldr r0, [r5, #0x64] - ldr r2, [r0, #0x14] - cmp r2, #0 - bne _08041724 - ldr r2, [r0, #0x18] - b _08041720 -_08041716: - ldr r0, [r5, #0x64] - ldr r2, [r0, #0x18] - cmp r2, #0 - bne _08041724 - ldr r2, [r0, #0x14] -_08041720: - cmp r2, #0 - beq _08041734 -_08041724: - ldrb r0, [r2, #0xc] - cmp r0, #2 - bne _08041734 - movs r1, #0 - movs r0, #4 - strb r0, [r2, #0xc] - strb r1, [r2, #0xd] - b _080417AA -_08041734: - bl Random - movs r1, #1 - ands r0, r1 - adds r0, #1 - strb r0, [r5, #0xf] - adds r0, r5, #0 - bl sub_08042028 - b _080417AA -_08041748: - adds r0, r5, #0 - adds r0, #0x79 - ldrb r0, [r0] - cmp r0, #0 - bne _080417AA - adds r2, r1, #0 - cmp r2, #2 - bne _080417AA - ldr r0, _0804179C @ =gScreenTransition - adds r0, #0x39 - ldrb r1, [r0] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - bne _080417A4 - movs r0, #0xb5 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _080417AA - str r5, [r2, #0x50] - ldr r1, [r5, #0x64] - str r2, [r1, #0x10] - ldr r0, _080417A0 @ =gRoomControls - str r2, [r0, #0x30] - movs r0, #6 - strb r0, [r5, #0xc] - movs r0, #0x1e - strb r0, [r5, #0xe] - ldr r1, [r1, #4] - movs r0, #1 - strb r0, [r1, #0xd] - ldr r0, [r5, #0x64] - ldr r0, [r0, #4] - movs r1, #0xe - bl InitializeAnimation - b _080417AA - .align 2, 0 -_0804179C: .4byte gScreenTransition -_080417A0: .4byte gRoomControls -_080417A4: - strb r2, [r5, #0xc] - movs r0, #0x3c - strb r0, [r5, #0xe] -_080417AA: - pop {r4, r5, pc} - - thumb_func_start sub_080417AC -sub_080417AC: @ 0x080417AC - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - cmp r0, #0 - bne _08041816 - ldr r0, [r5, #0x64] - ldr r4, [r0, #4] - adds r0, r4, #0 - bl GetNextFrame - adds r4, #0x5a - ldrb r1, [r4] - adds r0, r1, #0 - cmp r0, #1 - bne _080417DA - movs r0, #0xfe - ands r0, r1 - strb r0, [r4] - adds r0, r5, #0 - movs r1, #4 - bl InitAnimationForceUpdate - b _0804181A -_080417DA: - cmp r0, #2 - bne _08041806 - movs r0, #0x51 - movs r1, #3 - bl CreateEnemy - adds r1, r0, #0 - cmp r1, #0 - beq _0804181A - ldr r0, [r5, #0x64] - str r0, [r1, #0x64] - ldr r0, [r5, #0x64] - str r1, [r0, #0xc] - ldr r0, [r0, #8] - movs r1, #0x14 - bl InitializeAnimation - ldrb r1, [r4] - movs r0, #0xfd - ands r0, r1 - strb r0, [r4] - b _0804181A -_08041806: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0804181A - adds r0, r5, #0 - bl sub_0804235C - b _0804181A -_08041816: - subs r0, #1 - strb r0, [r5, #0xe] -_0804181A: - adds r0, r5, #0 - bl sub_08042004 - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - - thumb_func_start sub_08041828 -sub_08041828: @ 0x08041828 - push {r4, lr} - adds r4, r0, #0 - bl sub_08042214 - adds r0, r4, #0 - bl sub_08042004 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldr r2, _08041868 @ =gRoomControls - ldrh r0, [r2, #8] - adds r0, #0x48 - movs r3, #0x32 - ldrsh r1, [r4, r3] - cmp r0, r1 - beq _0804186C - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - ldrh r0, [r2, #8] - adds r0, #0x48 - movs r2, #0 - cmp r0, r1 - blt _0804185C - movs r2, #0x10 -_0804185C: - strb r2, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F69C - b _0804187E - .align 2, 0 -_08041868: .4byte gRoomControls -_0804186C: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0804187E - adds r0, r4, #0 - bl sub_08042050 -_0804187E: - pop {r4, pc} - - thumb_func_start sub_08041880 -sub_08041880: @ 0x08041880 - push {r4, lr} - adds r4, r0, #0 - bl sub_08042004 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_0806F69C - ldr r0, _080418D4 @ =gRoomControls - ldrh r2, [r0, #6] - adds r0, r2, #0 - adds r0, #0x20 - movs r3, #0x2e - ldrsh r1, [r4, r3] - cmp r0, r1 - bgt _080418AE - movs r3, #0xa0 - lsls r3, r3, #1 - adds r0, r2, r3 - cmp r0, r1 - bge _080418BE -_080418AE: - movs r1, #0x24 - ldrsh r0, [r4, r1] - cmp r0, #0x3f - ble _080418BE - ldrb r0, [r4, #0x15] - movs r1, #0x10 - eors r0, r1 - strb r0, [r4, #0x15] -_080418BE: - ldrb r0, [r4, #0xe] - subs r1, r0, #1 - strb r1, [r4, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _080418D8 - movs r0, #9 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - b _080418F8 - .align 2, 0 -_080418D4: .4byte gRoomControls -_080418D8: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x1d - bhi _080418E6 - ldrh r0, [r4, #0x24] - subs r0, #0xc - b _080418F6 -_080418E6: - ldrh r2, [r4, #0x24] - movs r3, #0x24 - ldrsh r1, [r4, r3] - ldr r0, _08041900 @ =0x000001FF - cmp r1, r0 - bgt _080418F8 - adds r0, r2, #0 - adds r0, #0x10 -_080418F6: - strh r0, [r4, #0x24] -_080418F8: - adds r0, r4, #0 - bl sub_08042214 - pop {r4, pc} - .align 2, 0 -_08041900: .4byte 0x000001FF - - thumb_func_start sub_08041904 -sub_08041904: @ 0x08041904 - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_08042004 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r3, r4, #0 - adds r3, #0x79 - ldrb r0, [r3] - cmp r0, #0 - beq _08041924 - adds r0, r4, #0 - bl sub_08042214 - b _0804197A -_08041924: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r2, r0, #0x18 - cmp r2, #0 - bne _0804197A - ldr r0, _0804196C @ =gPlayerEntity - movs r1, #0x2e - ldrsh r0, [r0, r1] - movs r5, #0x2e - ldrsh r1, [r4, r5] - subs r0, r0, r1 - adds r0, #0x40 - cmp r0, #0x80 - bhi _08041970 - movs r0, #0xa - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x7b - strb r2, [r0] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x1c] - movs r1, #1 - strb r1, [r0, #0xe] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x20] - strb r1, [r0, #0xe] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x24] - strb r1, [r0, #0xe] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x28] - strb r1, [r0, #0xe] - b _0804197A - .align 2, 0 -_0804196C: .4byte gPlayerEntity -_08041970: - movs r0, #7 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - strb r2, [r3] -_0804197A: - pop {r4, r5, pc} - - thumb_func_start sub_0804197C -sub_0804197C: @ 0x0804197C - push {r4, lr} - adds r4, r0, #0 - bl sub_08042004 - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x7b - ldrb r0, [r0] - cmp r0, #0xf - bne _080419A6 - movs r1, #0 - movs r0, #7 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - adds r0, r4, #0 - adds r0, #0x79 - strb r1, [r0] - b _080419F6 -_080419A6: - cmp r0, #0xf0 - bne _080419F6 - movs r1, #0 - movs r0, #0xb - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - strb r1, [r4, #0x15] - adds r0, #0xf5 - strh r0, [r4, #0x24] - movs r0, #0x90 - lsls r0, r0, #9 - str r0, [r4, #0x20] - ldr r1, _080419F8 @ =0x0000016B - adds r0, r4, #0 - bl sub_0801D2B4 - adds r0, r4, #0 - movs r1, #5 - bl InitAnimationForceUpdate - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - movs r1, #1 - strb r1, [r0, #0xd] - movs r1, #0xf - bl InitializeAnimation - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - movs r1, #0x15 - bl InitializeAnimation - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - movs r1, #0x1e - bl InitializeAnimation - ldr r0, _080419FC @ =0x00000127 - bl SoundReq -_080419F6: - pop {r4, pc} - .align 2, 0 -_080419F8: .4byte 0x0000016B -_080419FC: .4byte 0x00000127 - - thumb_func_start sub_08041A00 -sub_08041A00: @ 0x08041A00 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _08041A60 - cmp r0, #1 - beq _08041ABC - ldr r2, _08041A5C @ =gUnk_080D0E64 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r1, #0xff - ands r0, r1 - movs r1, #3 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x62 - strb r0, [r1] - ldrb r1, [r4, #0xe] - cmp r1, #0 - bne _08041AF0 - movs r0, #0xc - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - movs r1, #0xa0 - lsls r1, r1, #1 - adds r0, r4, #0 - bl sub_0801D2B4 - adds r0, r4, #0 - movs r1, #8 - bl InitAnimationForceUpdate - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - movs r1, #0x10 - bl InitializeAnimation - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - movs r1, #0x18 - bl InitializeAnimation - b _08041AF0 - .align 2, 0 -_08041A5C: .4byte gUnk_080D0E64 -_08041A60: - adds r0, r4, #0 - bl sub_0806F69C - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl GetNextFrame - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl GetNextFrame - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _08041AF0 - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0xf0 - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x45 - movs r0, #8 - strb r0, [r1] - subs r1, #6 - movs r0, #0x38 - strb r0, [r1] - movs r0, #0x14 - movs r1, #0 - bl sub_08080964 - adds r0, r4, #0 - movs r1, #6 - bl InitAnimationForceUpdate - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - movs r1, #0x16 - bl InitializeAnimation - b _08041AF0 -_08041ABC: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl GetNextFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r2, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08041AF0 - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x39 - strb r0, [r1] - adds r1, #6 - ldrb r0, [r1] - orrs r0, r2 - strb r0, [r1] -_08041AF0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08041AF4 -sub_08041AF4: @ 0x08041AF4 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl GetNextFrame - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _08041B12 - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl GetNextFrame -_08041B12: - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _08041B44 - cmp r0, #1 - beq _08041B70 - adds r0, r4, #0 - bl sub_08042004 - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - adds r2, r0, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08041BC0 - movs r0, #0xfe - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - movs r1, #9 - bl InitAnimationForceUpdate - b _08041BCE -_08041B44: - ldr r0, [r4, #0x34] - ldr r1, _08041B6C @ =0xFFFF8000 - adds r0, r0, r1 - str r0, [r4, #0x34] - movs r2, #0x36 - ldrsh r1, [r4, r2] - movs r0, #4 - rsbs r0, r0, #0 - cmp r1, r0 - bge _08041BCE - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0x78 - strb r0, [r4, #0xe] - movs r0, #0x10 - strb r0, [r4, #0x15] - movs r0, #0x80 - strh r0, [r4, #0x24] - b _08041BCE - .align 2, 0 -_08041B6C: .4byte 0xFFFF8000 -_08041B70: - adds r0, r4, #0 - bl sub_08042004 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08041B82 - subs r0, #1 - strb r0, [r4, #0xe] - b _08041BCE -_08041B82: - adds r0, r4, #0 - bl sub_0806F69C - ldr r0, _08041BBC @ =gRoomControls - ldrh r0, [r0, #8] - adds r0, #0x48 - movs r2, #0x32 - ldrsh r1, [r4, r2] - cmp r0, r1 - bne _08041BCE - movs r0, #2 - strb r0, [r4, #0xd] - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - movs r1, #0x11 - bl InitializeAnimation - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - movs r1, #0x19 - bl InitializeAnimation - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - movs r1, #0x1f - bl InitializeAnimation - b _08041BCE - .align 2, 0 -_08041BBC: .4byte gRoomControls -_08041BC0: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08041BCE - adds r0, r4, #0 - bl sub_0804235C -_08041BCE: - pop {r4, pc} - - thumb_func_start sub_08041BD0 -sub_08041BD0: @ 0x08041BD0 - push {lr} - ldr r2, _08041BE4 @ =gUnk_080D0E68 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08041BE4: .4byte gUnk_080D0E68 - - thumb_func_start sub_08041BE8 -sub_08041BE8: @ 0x08041BE8 -.ifdef EU - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - bl sub_08079F8C - cmp r0, #0 - beq _08041B72 - movs r5, #0 - movs r0, #1 - strb r0, [r6, #0xd] - movs r0, #0x78 - strb r0, [r6, #0xe] - ldrb r1, [r6, #0x11] - movs r4, #0x10 - rsbs r4, r4, #0 - adds r0, r4, #0 - ands r0, r1 - movs r1, #3 - mov r8, r1 - mov r1, r8 - orrs r0, r1 - strb r0, [r6, #0x11] - adds r0, r6, #0 - movs r1, #0xa - bl InitAnimationForceUpdate - ldr r0, [r6, #0x64] - ldr r7, [r0, #4] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #4] - ldr r7, [r0, #8] - ldrb r0, [r7, #0x11] - ands r4, r0 - mov r0, r8 - orrs r4, r0 - strb r4, [r7, #0x11] - adds r0, r7, #0 - bl sub_080AE068 - ldr r1, _08041B78 @ =0x000001F5 - adds r0, r7, #0 - bl LoadFixedGFX - ldr r1, _08041B7C @ =0x0000016B - adds r0, r7, #0 - bl sub_0801D2B4 - adds r0, r7, #0 - movs r1, #0x1a - bl InitializeAnimation - ldr r0, [r6, #0x64] - ldr r7, [r0, #0xc] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #0xc] - ldr r7, [r0, #0x1c] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #0x1c] - ldr r7, [r0, #0x20] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #0x20] - ldr r7, [r0, #0x24] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #0x24] - ldr r7, [r0, #0x28] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #0x28] - movs r0, #2 - bl sub_08078A90 -_08041B72: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08041B78: .4byte 0x000001F5 -_08041B7C: .4byte 0x0000016B - -.else - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - bl sub_08079F8C - cmp r0, #0 - beq _08041CBA - movs r5, #0 - movs r0, #1 - strb r0, [r6, #0xd] - movs r0, #0x78 - strb r0, [r6, #0xe] - ldrb r1, [r6, #0x11] - movs r4, #0x10 - rsbs r4, r4, #0 - adds r0, r4, #0 - ands r0, r1 - movs r1, #3 - mov r8, r1 - mov r1, r8 - orrs r0, r1 - strb r0, [r6, #0x11] - adds r0, r6, #0 - movs r1, #0xa - bl InitAnimationForceUpdate - ldr r0, [r6, #0x64] - ldr r7, [r0, #4] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #4] - ldr r7, [r0, #8] - ldrb r0, [r7, #0x11] - ands r4, r0 - mov r0, r8 - orrs r4, r0 - strb r4, [r7, #0x11] - adds r0, r7, #0 - bl sub_080AE068 - ldr r1, _08041CC0 @ =0x000001F5 - adds r0, r7, #0 - bl LoadFixedGFX - ldr r1, _08041CC4 @ =0x0000016B - adds r0, r7, #0 - bl sub_0801D2B4 - adds r0, r7, #0 - movs r1, #0x1a - bl InitializeAnimation - ldr r0, [r6, #0x64] - ldr r7, [r0, #0xc] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #0xc] - ldr r7, [r0, #0x10] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r2, [r6, #0x64] - str r5, [r2, #0x10] - ldr r1, _08041CC8 @ =gRoomControls - ldr r0, _08041CCC @ =gPlayerEntity - str r0, [r1, #0x30] - ldr r7, [r2, #0x1c] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #0x1c] - ldr r7, [r0, #0x20] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #0x20] - ldr r7, [r0, #0x24] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #0x24] - ldr r7, [r0, #0x28] - str r5, [r7, #0x64] - adds r0, r7, #0 - bl DeleteEntity - ldr r0, [r6, #0x64] - str r5, [r0, #0x28] - movs r0, #2 - bl sub_08078A90 -_08041CBA: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08041CC0: .4byte 0x000001F5 -_08041CC4: .4byte 0x0000016B -_08041CC8: .4byte gRoomControls -_08041CCC: .4byte gPlayerEntity -.endif - - thumb_func_start sub_08041CD0 -sub_08041CD0: @ 0x08041CD0 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08041D0C - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08041CF6 - subs r0, #1 - strb r0, [r4, #0xe] - b _08041D12 -_08041CF6: - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldr r0, _08041D08 @ =0x00001651 - bl TextboxNoOverlapFollow - b _08041D12 - .align 2, 0 -_08041D08: .4byte 0x00001651 -_08041D0C: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08041D12: - pop {r4, pc} - - thumb_func_start sub_08041D14 -sub_08041D14: @ 0x08041D14 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl GetNextFrame - ldr r0, _08041D3C @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08041D7C - ldrb r0, [r4, #0xe] - adds r5, r0, #0 - cmp r5, #0 - beq _08041D40 - subs r0, #1 - strb r0, [r4, #0xe] - b _08041D7C - .align 2, 0 -_08041D3C: .4byte gTextBox -_08041D40: - ldr r0, _08041D80 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x45 - bhi _08041D7C - movs r0, #0xb6 - movs r1, #0 - movs r2, #0 - bl CreateObject - str r4, [r0, #0x50] - str r0, [r4, #0x54] - movs r0, #0xb6 - movs r1, #1 - movs r2, #0 - bl CreateObject - str r4, [r0, #0x50] - movs r0, #3 - strb r0, [r4, #0xd] - movs r0, #0x96 - strb r0, [r4, #0xe] - strb r5, [r4, #0xf] - ldrb r1, [r4, #0x18] - subs r0, #0x9a - ands r0, r1 - strb r0, [r4, #0x18] - movs r0, #0xe2 - lsls r0, r0, #1 - bl SoundReq -_08041D7C: - pop {r4, r5, pc} - .align 2, 0 -_08041D80: .4byte gEntCount - - thumb_func_start sub_08041D84 -sub_08041D84: @ 0x08041D84 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, [r5, #0x64] - ldr r0, [r0, #8] - bl GetNextFrame - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _08041D9C - subs r0, #1 - strb r0, [r5, #0xe] - b _08041E18 -_08041D9C: - ldrb r1, [r5, #0xf] - adds r0, r1, #0 - cmp r0, #0xef - bhi _08041DEC - cmp r0, #0xb7 - bls _08041DD8 - movs r0, #7 - ands r0, r1 - cmp r0, #0 - bne _08041DD8 - ldr r0, [r5, #0x64] - ldr r0, [r0, #8] - ldr r4, _08041DE8 @ =gUnk_080D0E80 - ldrb r1, [r5, #0xf] - subs r1, #0xb8 - asrs r1, r1, #3 - lsls r1, r1, #1 - adds r1, r1, r4 - ldrh r1, [r1] - bl sub_0801D2B4 - ldr r0, [r5, #0x54] - ldrb r1, [r5, #0xf] - subs r1, #0xb8 - asrs r1, r1, #3 - lsls r1, r1, #1 - adds r1, r1, r4 - ldrh r1, [r1] - bl sub_0801D2B4 -_08041DD8: - ldrb r0, [r5, #0xf] - cmp r0, #0xe6 - bne _08041E0C - movs r0, #7 - movs r1, #4 - bl DoFade - b _08041E0C - .align 2, 0 -_08041DE8: .4byte gUnk_080D0E80 -_08041DEC: - movs r0, #4 - strb r0, [r5, #0xd] - ldrb r1, [r5, #0x18] - subs r0, #8 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r5, #0x18] - ldr r1, _08041E1C @ =0x00000173 - adds r0, r5, #0 - bl sub_0801D2B4 - adds r0, r5, #0 - movs r1, #0xb - bl InitAnimationForceUpdate -_08041E0C: - ldrb r0, [r5, #0xf] - adds r0, #1 - strb r0, [r5, #0xf] - adds r0, r5, #0 - bl sub_08041E78 -_08041E18: - pop {r4, r5, pc} - .align 2, 0 -_08041E1C: .4byte 0x00000173 - - thumb_func_start sub_08041E20 -sub_08041E20: @ 0x08041E20 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - adds r0, #1 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_08041E78 - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl GetNextFrame - ldr r0, _08041E4C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08041E48 - movs r0, #5 - strb r0, [r4, #0xd] - movs r0, #0x5a - strb r0, [r4, #0xe] -_08041E48: - pop {r4, pc} - .align 2, 0 -_08041E4C: .4byte gFadeControl - - thumb_func_start sub_08041E50 -sub_08041E50: @ 0x08041E50 - 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 _08041E76 - movs r0, #0x51 - bl SetGlobalFlag - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - str r5, [r0, #0x64] - bl DeleteEntity - bl DeleteThisEntity -_08041E76: - pop {r4, r5, pc} - - thumb_func_start sub_08041E78 -sub_08041E78: @ 0x08041E78 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xf] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - bne _08041ECE - adds r0, r4, #0 - movs r1, #0x51 - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _08041ECE - ldrb r1, [r4, #0xf] - lsrs r1, r1, #3 - movs r0, #0xe - ands r1, r0 - ldr r0, _08041ED0 @ =gUnk_080D0E90 - adds r1, r1, r0 - movs r0, #0 - ldrsb r0, [r1, r0] - ldrh r3, [r2, #0x2e] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - movs r0, #1 - ldrsb r0, [r1, r0] - ldrh r1, [r2, #0x32] - adds r0, r0, r1 - 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] - movs r0, #4 - movs r1, #0 - bl sub_08080964 -_08041ECE: - pop {r4, pc} - .align 2, 0 -_08041ED0: .4byte gUnk_080D0E90 - - thumb_func_start sub_08041ED4 -sub_08041ED4: @ 0x08041ED4 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _08041F14 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x45 - bhi _08041F18 - movs r0, #0x2c - bl zMalloc - adds r4, r0, #0 - cmp r4, #0 - beq _08041F18 - str r4, [r5, #0x64] - str r5, [r4] - movs r0, #0 - str r0, [r4, #0xc] - str r0, [r4, #0x14] - str r0, [r4, #0x18] - movs r0, #0x51 - movs r1, #1 - bl CreateEnemy - str r4, [r0, #0x64] - str r0, [r4, #4] - movs r0, #0x51 - movs r1, #2 - bl CreateEnemy - str r4, [r0, #0x64] - str r0, [r4, #8] - movs r0, #1 - b _08041F1A - .align 2, 0 -_08041F14: .4byte gEntCount -_08041F18: - movs r0, #0 -_08041F1A: - pop {r4, r5, pc} - - thumb_func_start sub_08041F1C -sub_08041F1C: @ 0x08041F1C - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08041F6C @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x43 - bhi _08041F70 - movs r0, #0x5f - movs r1, #0 - bl CreateEnemy - adds r1, r0, #0 - str r4, [r1, #0x50] - ldr r0, [r4, #0x64] - str r1, [r0, #0x1c] - movs r0, #0x5f - movs r1, #1 - bl CreateEnemy - adds r1, r0, #0 - str r4, [r1, #0x50] - ldr r0, [r4, #0x64] - str r1, [r0, #0x20] - movs r0, #0x5f - movs r1, #2 - bl CreateEnemy - adds r1, r0, #0 - str r4, [r1, #0x50] - ldr r0, [r4, #0x64] - str r1, [r0, #0x24] - movs r0, #0x5f - movs r1, #3 - bl CreateEnemy - adds r1, r0, #0 - str r4, [r1, #0x50] - ldr r0, [r4, #0x64] - str r1, [r0, #0x28] - movs r0, #1 - b _08041F72 - .align 2, 0 -_08041F6C: .4byte gEntCount -_08041F70: - movs r0, #0 -_08041F72: - pop {r4, pc} - - thumb_func_start sub_08041F74 -sub_08041F74: @ 0x08041F74 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r6, r1, #0 - ldr r0, _08041F88 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x46 - bls _08041F8C - movs r0, #0 - b _08041FC8 - .align 2, 0 -_08041F88: .4byte gEntCount -_08041F8C: - ldr r7, [r5, #0x64] - movs r4, #0 - ldr r0, _08041FC0 @ =gScreenTransition - adds r0, #0x39 - ldrb r0, [r0] - asrs r0, r6 - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _08041FB6 - movs r0, #0x52 - movs r1, #0 - bl CreateEnemy - adds r4, r0, #0 - strb r6, [r4, #0xb] - str r5, [r4, #0x50] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition -_08041FB6: - cmp r6, #0 - bne _08041FC4 - str r4, [r7, #0x14] - b _08041FC6 - .align 2, 0 -_08041FC0: .4byte gScreenTransition -_08041FC4: - str r4, [r7, #0x18] -_08041FC6: - movs r0, #1 -_08041FC8: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08041FCC -sub_08041FCC: @ 0x08041FCC - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08041FFC @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x4c - bhi _08042000 - adds r0, r4, #0 - bl sub_08041ED4 - cmp r0, #0 - beq _08042000 - adds r0, r4, #0 - movs r1, #0 - bl sub_08041F74 - adds r0, r4, #0 - movs r1, #1 - bl sub_08041F74 - adds r0, r4, #0 - bl sub_08041F1C - movs r0, #1 - b _08042002 - .align 2, 0 -_08041FFC: .4byte gEntCount -_08042000: - movs r0, #0 -_08042002: - pop {r4, pc} - - thumb_func_start sub_08042004 -sub_08042004: @ 0x08042004 - ldr r3, _08042024 @ =gUnk_080D0EA0 - adds r2, r0, #0 - adds r2, #0x78 - ldrb r1, [r2] - adds r1, #1 - strb r1, [r2] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x1c - movs r2, #7 - ands r1, r2 - adds r1, r1, r3 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - strh r1, [r0, #0x36] - bx lr - .align 2, 0 -_08042024: .4byte gUnk_080D0EA0 - - thumb_func_start sub_08042028 -sub_08042028: @ 0x08042028 - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #3 - strb r5, [r4, #0xc] - bl Random - ldr r1, _0804204C @ =gUnk_080D0EA8 - ands r0, r5 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] - movs r0, #0x40 - strh r0, [r4, #0x24] - adds r0, r4, #0 - bl sub_0804207C - strb r0, [r4, #0x15] - pop {r4, r5, pc} - .align 2, 0 -_0804204C: .4byte gUnk_080D0EA8 - - thumb_func_start sub_08042050 -sub_08042050: @ 0x08042050 - push {r4, lr} - adds r4, r0, #0 - movs r0, #8 - strb r0, [r4, #0xc] - bl Random - ldr r2, _08042078 @ =gUnk_080D0EAC - movs r1, #3 - ands r1, r0 - adds r1, r1, r2 - ldrb r1, [r1] - strb r1, [r4, #0xe] - movs r1, #0x20 - strh r1, [r4, #0x24] - lsrs r0, r0, #8 - movs r1, #0x10 - ands r0, r1 - adds r0, #8 - strb r0, [r4, #0x15] - pop {r4, pc} - .align 2, 0 -_08042078: .4byte gUnk_080D0EAC - - thumb_func_start sub_0804207C -sub_0804207C: @ 0x0804207C - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - movs r0, #0x2e - ldrsh r6, [r5, r0] - movs r1, #0x32 - ldrsh r0, [r5, r1] - adds r7, r0, #0 - subs r7, #0x10 - ldr r0, [r5, #0x64] - ldr r4, [r0, #0x14] - cmp r4, #0 - beq _080420B8 - ldrb r0, [r4, #0xc] - cmp r0, #4 - bls _080420B8 - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r7, #0 - movs r3, #0x30 - bl sub_0806FCB8 - cmp r0, #0 - beq _080420B8 - movs r2, #0x2e - ldrsh r0, [r4, r2] - movs r2, #0x32 - ldrsh r1, [r4, r2] - adds r2, r6, #0 - adds r3, r7, #0 - b _08042118 -_080420B8: - ldr r0, [r5, #0x64] - ldr r4, [r0, #0x18] - cmp r4, #0 - beq _080420E4 - ldrb r0, [r4, #0xc] - cmp r0, #4 - bls _080420E4 - adds r0, r4, #0 - adds r1, r6, #0 - adds r2, r7, #0 - movs r3, #0x30 - bl sub_0806FCB8 - cmp r0, #0 - beq _080420E4 - movs r1, #0x2e - ldrsh r0, [r4, r1] - movs r2, #0x32 - ldrsh r1, [r4, r2] - adds r2, r6, #0 - adds r3, r7, #0 - b _08042118 -_080420E4: - ldr r0, _080420FC @ =gPlayerEntity - movs r4, #0x32 - ldrsh r1, [r0, r4] - adds r2, r0, #0 - cmp r1, #0x3f - bgt _08042104 - ldr r0, _08042100 @ =gRoomControls - ldrh r0, [r0, #8] - adds r3, r0, #0 - adds r3, #0x18 - b _0804210C - .align 2, 0 -_080420FC: .4byte gPlayerEntity -_08042100: .4byte gRoomControls -_08042104: - movs r1, #0x32 - ldrsh r0, [r2, r1] - adds r3, r0, #0 - subs r3, #0x28 -_0804210C: - movs r4, #0x2e - ldrsh r0, [r5, r4] - movs r4, #0x32 - ldrsh r1, [r5, r4] - movs r4, #0x2e - ldrsh r2, [r2, r4] -_08042118: - bl sub_080045D4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08042120 -sub_08042120: @ 0x08042120 - movs r2, #0 - movs r1, #5 - strb r1, [r0, #0xc] - strb r2, [r0, #0xd] - bx lr - .align 2, 0 - - thumb_func_start sub_0804212C -sub_0804212C: @ 0x0804212C - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x7c - ldrh r0, [r1] - cmp r0, #0 - beq _0804213E - subs r0, #1 - b _080421A8 -_0804213E: - movs r5, #0 - movs r0, #0x32 - ldrsh r1, [r4, r0] - subs r1, #0x44 - ldr r3, _0804216C @ =gPlayerEntity - movs r2, #0x32 - ldrsh r0, [r3, r2] - subs r0, r0, r1 - cmp r0, #0x60 - bhi _0804217A - movs r6, #0x2e - ldrsh r2, [r4, r6] - adds r0, r2, #0 - subs r0, #0x38 - movs r6, #0x2e - ldrsh r1, [r3, r6] - subs r0, r1, r0 - cmp r0, #0x38 - bhi _08042170 - ldr r0, [r4, #0x64] - ldr r5, [r0, #0x18] - b _0804217A - .align 2, 0 -_0804216C: .4byte gPlayerEntity -_08042170: - subs r0, r1, r2 - cmp r0, #0x38 - bhi _0804217A - ldr r0, [r4, #0x64] - ldr r5, [r0, #0x14] -_0804217A: - cmp r5, #0 - beq _080421A2 - ldrb r0, [r5, #0xc] - cmp r0, #2 - bne _080421AA - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _080421AA - movs r1, #0 - movs r0, #3 - strb r0, [r5, #0xc] - strb r1, [r5, #0xd] - adds r1, r4, #0 - adds r1, #0x7c - movs r0, #0xb4 - lsls r0, r0, #2 - b _080421A8 -_080421A2: - adds r1, r4, #0 - adds r1, #0x7c - movs r0, #0x3c -_080421A8: - strh r0, [r1] -_080421AA: - pop {r4, r5, r6, pc} - - thumb_func_start sub_080421AC -sub_080421AC: @ 0x080421AC - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x7e - ldrh r0, [r5] - adds r7, r0, #0 - cmp r7, #0 - beq _080421C0 - subs r0, #1 - b _08042210 -_080421C0: - adds r6, r4, #0 - adds r6, #0x79 - ldrb r0, [r6] - cmp r0, #0 - bne _080421FE - bl Random - movs r5, #1 - ands r0, r5 - cmp r0, #0 - beq _080421F4 - ldr r0, _080421F0 @ =gScreenTransition - adds r0, #0x39 - ldrb r1, [r0] - movs r0, #0xc - ands r0, r1 - cmp r0, #0 - beq _080421F4 - adds r0, r4, #0 - bl sub_08042264 - strb r5, [r6] - b _08042212 - .align 2, 0 -_080421F0: .4byte gScreenTransition -_080421F4: - adds r1, r4, #0 - adds r1, #0x7e - movs r0, #0x1e - strh r0, [r1] - b _08042212 -_080421FE: - adds r0, r4, #0 - movs r1, #0 - bl sub_080422C0 - cmp r0, #0 - beq _08042212 - strb r7, [r6] - movs r0, #0xb4 - lsls r0, r0, #1 -_08042210: - strh r0, [r5] -_08042212: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08042214 -sub_08042214: @ 0x08042214 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r6, r4, #0 - adds r6, #0x7e - ldrh r0, [r6] - adds r7, r0, #0 - cmp r7, #0 - beq _08042228 - subs r0, #1 - b _0804225E -_08042228: - adds r5, r4, #0 - adds r5, #0x79 - ldrb r0, [r5] - cmp r0, #0 - bne _0804224E - bl Random - movs r1, #3 - ands r1, r0 - cmp r1, #0 - beq _0804224A - adds r0, r4, #0 - bl sub_0804228C - movs r0, #1 - strb r0, [r5] - b _08042260 -_0804224A: - movs r0, #0x1e - b _0804225E -_0804224E: - adds r0, r4, #0 - movs r1, #1 - bl sub_080422C0 - cmp r0, #0 - beq _08042260 - strb r7, [r5] - movs r0, #0xb4 -_0804225E: - strh r0, [r6] -_08042260: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08042264 -sub_08042264: @ 0x08042264 - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl InitAnimationForceUpdate - ldr r0, [r4, #0x64] - ldr r1, [r0, #4] - movs r0, #1 - strb r0, [r1, #0xd] - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - movs r1, #0xd - bl InitializeAnimation - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - movs r1, #0x13 - bl InitializeAnimation - pop {r4, pc} - - thumb_func_start sub_0804228C -sub_0804228C: @ 0x0804228C - push {r4, lr} - adds r4, r0, #0 - movs r1, #2 - bl InitAnimationForceUpdate - ldr r0, [r4, #0x64] - ldr r1, [r0, #4] - movs r0, #1 - strb r0, [r1, #0xd] - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - movs r1, #0xd - bl InitializeAnimation - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - movs r1, #0x13 - bl InitializeAnimation - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - movs r1, #0x1d - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080422C0 -sub_080422C0: @ 0x080422C0 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - mov r8, r1 - bl UpdateAnimationSingleFrame - ldr r0, [r5, #0x64] - ldr r0, [r0, #8] - bl GetNextFrame - ldr r0, [r5, #0x64] - ldr r7, [r0, #4] - adds r0, r7, #0 - bl GetNextFrame - mov r0, r8 - adds r0, #1 - adds r6, r7, #0 - adds r6, #0x5a - ldrb r4, [r6] - cmp r0, r4 - bne _08042306 - movs r0, #0x21 - bl sub_080A7EE0 - cmp r0, #0 - beq _08042354 - mov r1, r8 - strb r1, [r0, #0xa] - str r5, [r0, #0x50] - ldrb r0, [r6] - bics r0, r4 - strb r0, [r6] - b _08042354 -_08042306: - cmp r4, #4 - bne _0804231A - movs r0, #0xfb - ands r4, r0 - strb r4, [r6] - adds r0, r5, #0 - movs r1, #3 - bl InitAnimationForceUpdate - b _08042354 -_0804231A: - movs r0, #0x80 - ands r4, r0 - cmp r4, #0 - beq _08042354 - adds r0, r5, #0 - movs r1, #0 - bl InitAnimationForceUpdate - movs r0, #0 - strb r0, [r7, #0xd] - adds r0, r7, #0 - movs r1, #0xc - bl InitializeAnimation - ldr r0, [r5, #0x64] - ldr r0, [r0, #8] - movs r1, #0x12 - bl InitializeAnimation - mov r0, r8 - cmp r0, #1 - bne _08042350 - ldr r0, [r5, #0x64] - ldr r0, [r0, #0xc] - movs r1, #0x1b - bl InitializeAnimation -_08042350: - movs r0, #1 - b _08042356 -_08042354: - movs r0, #0 -_08042356: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0804235C -sub_0804235C: @ 0x0804235C - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #0 - movs r0, #7 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - adds r0, r4, #0 - adds r0, #0x79 - strb r1, [r0] - adds r1, r4, #0 - adds r1, #0x7e - movs r5, #0 - movs r0, #0xf0 - strh r0, [r1] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - strb r5, [r0, #0xd] - movs r1, #0xc - bl InitializeAnimation - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - movs r1, #0x12 - bl InitializeAnimation - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - movs r1, #0x1b - bl InitializeAnimation - pop {r4, r5, pc} - -.ifdef USA - thumb_func_start sub_080423A4 -sub_080423A4: @ 0x080423A4 - push {r4, lr} - ldr r0, _080423CC @ =gScreenTransition - adds r4, r0, #0 - adds r4, #0x38 - ldrb r1, [r4] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _0804241C - ldr r0, _080423D0 @ =gSave - movs r2, #0x93 - lsls r2, r2, #3 - adds r1, r0, r2 - ldr r0, [r1] - cmp r0, #0 - beq _080423D4 - subs r0, #1 - str r0, [r1] - b _0804241C - .align 2, 0 -_080423CC: .4byte gScreenTransition -_080423D0: .4byte gSave -_080423D4: - ldr r2, _08042420 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0xa9 - ldrb r0, [r0] - cmp r0, #1 - bgt _0804241C - cmp r0, #0 - blt _0804241C - ldr r0, [r2, #0x2c] - cmp r0, #0 - bne _0804241C - ldr r1, _08042424 @ =gPlayerEntity - adds r0, r1, #0 - adds r0, #0x7a - ldrh r0, [r0] - cmp r0, #0 - bne _0804241C - movs r3, #0x36 - ldrsh r0, [r1, r3] - movs r1, #0x80 - lsls r1, r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0804240A - ldrb r0, [r2, #0xa] - cmp r0, #0 - beq _0804241C -_0804240A: - movs r0, #0xb7 - lsls r0, r0, #4 - movs r1, #0 - bl sub_08078AA8 - ldrb r0, [r4] - movs r1, #2 - orrs r0, r1 - strb r0, [r4] -_0804241C: - pop {r4, pc} - .align 2, 0 -_08042420: .4byte gPlayerState -_08042424: .4byte gPlayerEntity -.else -.ifdef DEMO_USA -@ TODO is there a way to not duplicate this? - thumb_func_start sub_080423A4 -sub_080423A4: @ 0x080423A4 - push {r4, lr} - ldr r0, _080423CC @ =gScreenTransition - adds r4, r0, #0 - adds r4, #0x38 - ldrb r1, [r4] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _0804241C - ldr r0, _080423D0 @ =gSave - movs r2, #0x93 - lsls r2, r2, #3 - adds r1, r0, r2 - ldr r0, [r1] - cmp r0, #0 - beq _080423D4 - subs r0, #1 - str r0, [r1] - b _0804241C - .align 2, 0 -_080423CC: .4byte gScreenTransition -_080423D0: .4byte gSave -_080423D4: - ldr r2, _08042420 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0xa9 - ldrb r0, [r0] - cmp r0, #1 - bgt _0804241C - cmp r0, #0 - blt _0804241C - ldr r0, [r2, #0x2c] - cmp r0, #0 - bne _0804241C - ldr r1, _08042424 @ =gPlayerEntity - adds r0, r1, #0 - adds r0, #0x7a - ldrh r0, [r0] - cmp r0, #0 - bne _0804241C - movs r3, #0x36 - ldrsh r0, [r1, r3] - movs r1, #0x80 - lsls r1, r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0804240A - ldrb r0, [r2, #0xa] - cmp r0, #0 - beq _0804241C -_0804240A: - movs r0, #0xb7 - lsls r0, r0, #4 - movs r1, #0 - bl sub_08078AA8 - ldrb r0, [r4] - movs r1, #2 - orrs r0, r1 - strb r0, [r4] -_0804241C: - pop {r4, pc} - .align 2, 0 -_08042420: .4byte gPlayerState -_08042424: .4byte gPlayerEntity -.else -.ifdef DEMO_JP -@ TODO is there a way to not duplicate this? - thumb_func_start sub_080423A4 -sub_080423A4: @ 0x080423A4 - push {r4, lr} - ldr r0, _080423CC @ =gScreenTransition - adds r4, r0, #0 - adds r4, #0x38 - ldrb r1, [r4] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _0804241C - ldr r0, _080423D0 @ =gSave - movs r2, #0x93 - lsls r2, r2, #3 - adds r1, r0, r2 - ldr r0, [r1] - cmp r0, #0 - beq _080423D4 - subs r0, #1 - str r0, [r1] - b _0804241C - .align 2, 0 -_080423CC: .4byte gScreenTransition -_080423D0: .4byte gSave -_080423D4: - ldr r2, _08042420 @ =gPlayerState - adds r0, r2, #0 - adds r0, #0xa9 - ldrb r0, [r0] - cmp r0, #1 - bgt _0804241C - cmp r0, #0 - blt _0804241C - ldr r0, [r2, #0x2c] - cmp r0, #0 - bne _0804241C - ldr r1, _08042424 @ =gPlayerEntity - adds r0, r1, #0 - adds r0, #0x7a - ldrh r0, [r0] - cmp r0, #0 - bne _0804241C - movs r3, #0x36 - ldrsh r0, [r1, r3] - movs r1, #0x80 - lsls r1, r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0804240A - ldrb r0, [r2, #0xa] - cmp r0, #0 - beq _0804241C -_0804240A: - movs r0, #0xb7 - lsls r0, r0, #4 - movs r1, #0 - bl sub_08078AA8 - ldrb r0, [r4] - movs r1, #2 - orrs r0, r1 - strb r0, [r4] -_0804241C: - pop {r4, pc} - .align 2, 0 -_08042420: .4byte gPlayerState -_08042424: .4byte gPlayerEntity -.endif -.endif -.endif - - thumb_func_start sub_08042428 -sub_08042428: @ 0x08042428 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r0, [r0] - ldr r0, [r0, #4] - cmp r0, #0 - bne _0804243C - str r0, [r4, #0x64] - bl DeleteThisEntity -_0804243C: - ldrb r1, [r4, #0xc] - cmp r1, #0 - bne _08042450 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - adds r0, r4, #0 - movs r1, #0xc - bl InitializeAnimation -_08042450: - ldrb r0, [r4, #0xd] - cmp r0, #0 - bne _0804245C - adds r0, r4, #0 - bl GetNextFrame -_0804245C: - ldr r0, [r4, #0x58] - ldr r1, _0804249C @ =0x008000FF - ands r0, r1 - subs r1, #0xf3 - cmp r0, r1 - bne _08042480 - adds r0, r4, #0 - movs r1, #0xc - bl InitializeAnimation - bl Random - movs r1, #0x78 - ands r0, r1 - adds r0, #0x78 - adds r1, r4, #0 - adds r1, #0x59 - strb r0, [r1] -_08042480: - ldr r0, [r4, #0x64] - ldr r0, [r0] - adds r1, r4, #0 - movs r2, #0 - movs r3, #1 - bl sub_0806FA90 - adds r1, r4, #0 - adds r1, #0x63 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - pop {r4, pc} - .align 2, 0 -_0804249C: .4byte 0x008000FF - - thumb_func_start sub_080424A0 -sub_080424A0: @ 0x080424A0 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r0, [r0] - ldr r0, [r0, #4] - cmp r0, #0 - bne _080424B4 - str r0, [r4, #0x64] - bl DeleteThisEntity -_080424B4: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080424C6 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0x12 - bl InitializeAnimation -_080424C6: - ldr r0, [r4, #0x64] - ldr r0, [r0] - movs r3, #1 - rsbs r3, r3, #0 - adds r1, r4, #0 - movs r2, #0 - bl sub_0806FA90 - adds r1, r4, #0 - adds r1, #0x63 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0x12 - bne _08042502 - ldr r1, _08042504 @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - ldr r1, _08042508 @ =gUnk_080D0EB0 - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r4, #0x2e] - adds r0, r0, r1 - strh r0, [r4, #0x2e] -_08042502: - pop {r4, pc} - .align 2, 0 -_08042504: .4byte gPlayerEntity -_08042508: .4byte gUnk_080D0EB0 - - thumb_func_start sub_0804250C -sub_0804250C: @ 0x0804250C - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r0, [r0] - ldr r0, [r0, #4] - cmp r0, #0 - bne _08042520 - str r0, [r4, #0x64] - bl DeleteThisEntity -_08042520: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08042532 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0x1c - bl InitializeAnimation -_08042532: - ldr r0, [r4, #0x64] - ldr r0, [r0] - movs r3, #1 - rsbs r3, r3, #0 - adds r1, r4, #0 - movs r2, #0 - bl sub_0806FA90 - adds r1, r4, #0 - adds r1, #0x63 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} diff --git a/asm/wizzrobeFire.s b/asm/wizzrobeFire.s index 43f398ff..17a05df2 100644 --- a/asm/wizzrobeFire.s +++ b/asm/wizzrobeFire.s @@ -98,7 +98,7 @@ sub_0802FBB8: @ 0x0802FBB8 adds r0, r4, #0 movs r1, #8 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _0802FBF6 @@ -248,7 +248,7 @@ _0802FCDE: adds r0, r4, #0 movs r1, #8 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _0802FDCA diff --git a/asm/wizzrobeIce.s b/asm/wizzrobeIce.s index f74293ee..8e5c95ee 100644 --- a/asm/wizzrobeIce.s +++ b/asm/wizzrobeIce.s @@ -125,7 +125,7 @@ sub_0802FE90: @ 0x0802FE90 adds r0, r4, #0 movs r1, #9 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _0802FECE @@ -275,7 +275,7 @@ _0802FFB6: adds r0, r4, #0 movs r1, #9 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _080300A2 diff --git a/asm/wizzrobeWind.s b/asm/wizzrobeWind.s index b411d030..0e24ccf7 100644 --- a/asm/wizzrobeWind.s +++ b/asm/wizzrobeWind.s @@ -151,7 +151,7 @@ _0802F5B8: adds r0, r4, #0 movs r1, #7 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _0802F5D0 @@ -300,7 +300,7 @@ _0802F6B6: adds r0, r4, #0 movs r1, #7 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _0802F7A2 @@ -493,7 +493,7 @@ _0802F84C: adds r0, r4, #0 movs r1, #7 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r5, r0, #0 cmp r5, #0 beq _0802F884 diff --git a/asmdiff.sh b/asmdiff.sh index bf6a907a..54cac7b5 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,7 +1,7 @@ #!/bin/bash -buildname=tmc -baserom=baserom +buildname=tmc_eu +baserom=baserom_eu OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" diff --git a/data/animations/enemy/enemy5A.s b/data/animations/enemy/vaatiTransfiguredEye.s similarity index 100% rename from data/animations/enemy/enemy5A.s rename to data/animations/enemy/vaatiTransfiguredEye.s diff --git a/data/animations/enemy/enemy5F.s b/data/animations/enemy/vaatiWrathEye.s similarity index 100% rename from data/animations/enemy/enemy5F.s rename to data/animations/enemy/vaatiWrathEye.s diff --git a/data/animations/projectile/projectileD.s b/data/animations/projectile/arrowProjectile.s similarity index 100% rename from data/animations/projectile/projectileD.s rename to data/animations/projectile/arrowProjectile.s diff --git a/data/animations/projectile/projectile2.s b/data/animations/projectile/boneProjectile.s similarity index 100% rename from data/animations/projectile/projectile2.s rename to data/animations/projectile/boneProjectile.s diff --git a/data/animations/projectile/projectile1B.s b/data/animations/projectile/cannonballProjectile.s similarity index 100% rename from data/animations/projectile/projectile1B.s rename to data/animations/projectile/cannonballProjectile.s diff --git a/data/animations/projectile/projectile6.s b/data/animations/projectile/dirtBallProjectile.s similarity index 100% rename from data/animations/projectile/projectile6.s rename to data/animations/projectile/dirtBallProjectile.s diff --git a/data/animations/projectile/projectile8.s b/data/animations/projectile/fireProjectile.s similarity index 100% rename from data/animations/projectile/projectile8.s rename to data/animations/projectile/fireProjectile.s diff --git a/data/animations/projectile/projectile23.s b/data/animations/projectile/gyorgMaleEnergyProjectile.s similarity index 100% rename from data/animations/projectile/projectile23.s rename to data/animations/projectile/gyorgMaleEnergyProjectile.s diff --git a/data/animations/projectile/projectile9.s b/data/animations/projectile/iceProjectile.s similarity index 100% rename from data/animations/projectile/projectile9.s rename to data/animations/projectile/iceProjectile.s diff --git a/data/animations/projectile/projectile11.s b/data/animations/projectile/lakituCloudProjectile.s similarity index 100% rename from data/animations/projectile/projectile11.s rename to data/animations/projectile/lakituCloudProjectile.s diff --git a/data/animations/projectile/projectile12.s b/data/animations/projectile/lakituLightning.s similarity index 100% rename from data/animations/projectile/projectile12.s rename to data/animations/projectile/lakituLightning.s diff --git a/data/animations/projectile/projectile13.s b/data/animations/projectile/mandiblesProjectile.s similarity index 100% rename from data/animations/projectile/projectile13.s rename to data/animations/projectile/mandiblesProjectile.s diff --git a/data/animations/projectile/projectileE.s b/data/animations/projectile/mazaalEnergyBeam.s similarity index 100% rename from data/animations/projectile/projectileE.s rename to data/animations/projectile/mazaalEnergyBeam.s diff --git a/data/animations/projectile/projectile1.s b/data/animations/projectile/rockProjectile.s similarity index 100% rename from data/animations/projectile/projectile1.s rename to data/animations/projectile/rockProjectile.s diff --git a/data/animations/projectile/projectile15.s b/data/animations/projectile/spiderWeb.s similarity index 100% rename from data/animations/projectile/projectile15.s rename to data/animations/projectile/spiderWeb.s diff --git a/data/animations/projectile/projectile1E.s b/data/animations/projectile/spikedRollers.s similarity index 100% rename from data/animations/projectile/projectile1E.s rename to data/animations/projectile/spikedRollers.s diff --git a/data/animations/projectile/projectile16.s b/data/animations/projectile/torchTrapProjectile.s similarity index 62% rename from data/animations/projectile/projectile16.s rename to data/animations/projectile/torchTrapProjectile.s index 674977d7..a0f8153d 100644 --- a/data/animations/projectile/projectile16.s +++ b/data/animations/projectile/torchTrapProjectile.s @@ -4,6 +4,13 @@ .section .rodata .align 2 +gUnk_0812A3E0:: @ 0812A3E0 + .incbin "baserom.gba", 0x12A3E0, 0x0000014 + +gUnk_0812A3F4:: @ 0812A3F4 + .4byte gUnk_0812A3E0 + .4byte 00000000 + gUnk_0812A3FC:: @ 0812A3FC .incbin "baserom.gba", 0x12A3FC, 0x0000014 diff --git a/data/animations/projectile/projectile18.s b/data/animations/projectile/v1DarkMagicProjectile.s similarity index 100% rename from data/animations/projectile/projectile18.s rename to data/animations/projectile/v1DarkMagicProjectile.s diff --git a/data/animations/projectile/projectile1C.s b/data/animations/projectile/v1EyeLaser.s similarity index 100% rename from data/animations/projectile/projectile1C.s rename to data/animations/projectile/v1EyeLaser.s diff --git a/data/animations/projectile/projectile1F.s b/data/animations/projectile/v2Projectile.s similarity index 100% rename from data/animations/projectile/projectile1F.s rename to data/animations/projectile/v2Projectile.s diff --git a/data/animations/projectile/projectile20.s b/data/animations/projectile/v3HandProjectile.s similarity index 100% rename from data/animations/projectile/projectile20.s rename to data/animations/projectile/v3HandProjectile.s diff --git a/data/animations/projectile/projectile7.s b/data/animations/projectile/windProjectile.s similarity index 100% rename from data/animations/projectile/projectile7.s rename to data/animations/projectile/windProjectile.s diff --git a/data/const/enemy/enemy5A.s b/data/const/enemy/enemy5A.s deleted file mode 100644 index 4ed7b471..00000000 --- a/data/const/enemy/enemy5A.s +++ /dev/null @@ -1,24 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - - -gUnk_080D1888:: @ 080D1888 - .4byte sub_080456E8 - .4byte sub_08045700 - .4byte sub_080456E8 - .4byte sub_0804A7D4 - .4byte sub_08001242 - .4byte nullsub_173 - -gUnk_080D18A0:: @ 080D18A0 - .4byte sub_080457E4 - .4byte sub_0804586C - .4byte sub_080458C4 - .4byte sub_08045938 - .4byte sub_08045984 - -gUnk_080D18B4:: @ 080D18B4 - .incbin "baserom.gba", 0x0D18B4, 0x0000010 diff --git a/data/const/enemy/enemy5F.s b/data/const/enemy/enemy5F.s deleted file mode 100644 index 97c16ab6..00000000 --- a/data/const/enemy/enemy5F.s +++ /dev/null @@ -1,26 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D1D48:: @ 080D1D48 - .4byte sub_080482EC - .4byte sub_08048330 - .4byte sub_0804835C - .4byte sub_08048388 - .4byte sub_080483F8 - .4byte sub_08048438 - .4byte sub_08048478 - .4byte sub_080484E8 - .4byte sub_08048550 - .4byte sub_080485A0 - -gUnk_080D1D70:: @ 080D1D70 - .incbin "baserom.gba", 0x0D1D70, 0x0000008 - -gUnk_080D1D78:: @ 080D1D78 - .incbin "baserom.gba", 0x0D1D78, 0x0000020 - -gUnk_080D1D98:: @ 080D1D98 - .incbin "baserom.gba", 0x0D1D98, 0x0000008 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/data/const/enemy/vaatiEyesMacro.s b/data/const/enemy/vaatiEyesMacro.s deleted file mode 100644 index 384d4a80..00000000 --- a/data/const/enemy/vaatiEyesMacro.s +++ /dev/null @@ -1,39 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080CDE34:: @ 080CDE34 - .4byte sub_0802EC98 - .4byte sub_0802ECC0 - .4byte sub_08001324 - .4byte sub_0804A7D4 - .4byte sub_08001242 - .4byte sub_0802EC98 - -gUnk_080CDE4C:: @ 080CDE4C - .4byte sub_0802ED74 - .4byte sub_0802EE20 - .4byte sub_0802EEB8 - .4byte sub_0802EF1C - -gUnk_080CDE5C:: @ 080CDE5C - .4byte sub_0802ED8C - .4byte sub_0802EE10 - -gUnk_080CDE64:: @ 080CDE64 - .4byte sub_0802EE38 - .4byte sub_0802EE8C - -gUnk_080CDE6C:: @ 080CDE6C - .incbin "baserom.gba", 0x0CDE6C, 0x0000004 - -gUnk_080CDE70:: @ 080CDE70 - .incbin "baserom.gba", 0x0CDE70, 0x0000020 - -gUnk_080CDE90:: @ 080CDE90 - .incbin "baserom.gba", 0x0CDE90, 0x0000008 - -gUnk_080CDE98:: @ 080CDE98 - .incbin "baserom.gba", 0x0CDE98, 0x0000008 diff --git a/data/const/enemy/vaatiProjectile.s b/data/const/enemy/vaatiProjectile.s deleted file mode 100644 index fb8d37a3..00000000 --- a/data/const/enemy/vaatiProjectile.s +++ /dev/null @@ -1,25 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D0648:: @ 080D0648 - .4byte sub_0803E0C4 - .4byte sub_0803E0DC - .4byte sub_08001328 - .4byte sub_0803E188 - .4byte sub_08001242 - .4byte nullsub_19 - -gUnk_080D0660:: @ 080D0660 - .4byte sub_0803E1A8 - .4byte sub_0803E258 - .4byte sub_0803E2A8 - .4byte sub_0803E2D0 - .4byte sub_0803E314 - .4byte sub_0803E340 - .4byte sub_0803E370 - .4byte sub_0803E398 - .4byte sub_0803E3D4 - .4byte sub_0803E3FC diff --git a/data/const/enemy/vaatiRebornEnemy.s b/data/const/enemy/vaatiRebornEnemy.s deleted file mode 100644 index 5398d7ab..00000000 --- a/data/const/enemy/vaatiRebornEnemy.s +++ /dev/null @@ -1,49 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D0470:: @ 080D0470 - .4byte sub_0803D134 - .4byte sub_0803D264 - .4byte sub_0803D408 - .4byte sub_0803D560 - .4byte sub_0803D658 - .4byte sub_0803D700 - .4byte sub_0803D830 - .4byte sub_0803D8FC - -gUnk_080D0490:: @ 080D0490 - .4byte sub_0803D974 - .4byte sub_0803D9BC - -gUnk_080D0498:: @ 080D0498 - .4byte sub_0803DAA8 - .4byte sub_0803DAE4 - -gUnk_080D04A0:: @ 080D04A0 - .4byte sub_0803DB88 - .4byte sub_0803DBB8 - -gUnk_080D04A8:: @ 080D04A8 - .incbin "baserom.gba", 0x0D04A8, 0x0000004 - -gUnk_080D04AC:: @ 080D04AC - .incbin "baserom.gba", 0x0D04AC, 0x0000014 - -gUnk_080D04C0:: @ 080D04C0 - .incbin "baserom.gba", 0x0D04C0, 0x0000008 - -gUnk_080D04C8:: @ 080D04C8 - .incbin "baserom.gba", 0x0D04C8, 0x0000008 - -gUnk_080D04D0:: @ 080D04D0 -.ifdef EU - .incbin "baserom_eu.gba", 0x0CFBFC, 0x0000003 -.else - .incbin "baserom.gba", 0x0D04D0, 0x0000003 -.endif - -gUnk_080D04D3:: @ 080D04D3 - .incbin "baserom.gba", 0x0D04D3, 0x0000004 diff --git a/data/const/enemy/vaatiTransfigured.s b/data/const/enemy/vaatiTransfigured.s deleted file mode 100644 index 57f0135d..00000000 --- a/data/const/enemy/vaatiTransfigured.s +++ /dev/null @@ -1,69 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D0ABC:: @ 080D0ABC -.ifdef EU - .incbin "baserom_eu.gba", 0x0D01E8, 0x0000003 -.else - .incbin "baserom.gba", 0x0D0ABC, 0x0000003 -.endif - -gUnk_080D0ABF:: @ 080D0ABF - .incbin "baserom.gba", 0x0D0ABF, 0x0000009 - -gUnk_080D0AC8:: @ 080D0AC8 - .4byte sub_0803F818 - .4byte sub_0803F914 - .4byte sub_0803FAC8 - .4byte sub_0803FAD0 - .4byte sub_0803FD50 - .4byte sub_0803FE90 - .4byte sub_0803FF7C - .4byte sub_0804006C - -gUnk_080D0AE8:: @ 080D0AE8 - .4byte sub_08040130 - .4byte sub_0804015C - -gUnk_080D0AF0:: @ 080D0AF0 - .4byte sub_080401E0 - .4byte sub_08040268 - .4byte sub_0804038C - -gUnk_080D0AFC:: @ 080D0AFC - .4byte sub_080403CC - -gUnk_080D0B00:: @ 080D0B00 - .4byte sub_080403EC - -gUnk_080D0B04:: @ 080D0B04 - .4byte sub_0804041C - .4byte sub_0804044C - -gUnk_080D0B0C:: @ 080D0B0C - .4byte sub_080404D0 - -gUnk_080D0B10:: @ 080D0B10 - .4byte sub_0804051C - .4byte sub_080405D8 - -gUnk_080D0B18:: @ 080D0B18 - .incbin "baserom.gba", 0x0D0B18, 0x0000011 - -gUnk_080D0B29:: @ 080D0B29 - .incbin "baserom.gba", 0x0D0B29, 0x000002F - -gUnk_080D0B58:: @ 080D0B58 - .incbin "baserom.gba", 0x0D0B58, 0x000000C - -gUnk_080D0B64:: @ 080D0B64 - .incbin "baserom.gba", 0x0D0B64, 0x0000010 - -gUnk_080D0B74:: @ 080D0B74 - .incbin "baserom.gba", 0x0D0B74, 0x0000010 - -gUnk_080D0B84:: @ 080D0B84 - .incbin "baserom.gba", 0x0D0B84, 0x0000020 diff --git a/data/const/enemy/vaatiWrath.s b/data/const/enemy/vaatiWrath.s deleted file mode 100644 index 28d979da..00000000 --- a/data/const/enemy/vaatiWrath.s +++ /dev/null @@ -1,56 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D0E1C:: @ 080D0E1C - .4byte sub_080413A0 - .4byte sub_08042428 - .4byte sub_080424A0 - .4byte sub_0804250C - -gUnk_080D0E2C:: @ 080D0E2C - .4byte sub_080413C0 - .4byte sub_08041490 - .4byte sub_080415E8 - .4byte sub_08041618 - .4byte sub_080416A4 - .4byte sub_080416DC - .4byte sub_080417AC - .4byte sub_08041828 - .4byte sub_08041880 - .4byte sub_08041904 - .4byte sub_0804197C - .4byte sub_08041A00 - .4byte sub_08041AF4 - .4byte sub_08041BD0 - -gUnk_080D0E64:: @ 080D0E64 - .incbin "baserom.gba", 0x0D0E64, 0x0000004 - -gUnk_080D0E68:: @ 080D0E68 - .4byte sub_08041BE8 - .4byte sub_08041CD0 - .4byte sub_08041D14 - .4byte sub_08041D84 - .4byte sub_08041E20 - .4byte sub_08041E50 - -gUnk_080D0E80:: @ 080D0E80 - .incbin "baserom.gba", 0x0D0E80, 0x0000010 - -gUnk_080D0E90:: @ 080D0E90 - .incbin "baserom.gba", 0x0D0E90, 0x0000010 - -gUnk_080D0EA0:: @ 080D0EA0 - .incbin "baserom.gba", 0x0D0EA0, 0x0000008 - -gUnk_080D0EA8:: @ 080D0EA8 - .incbin "baserom.gba", 0x0D0EA8, 0x0000004 - -gUnk_080D0EAC:: @ 080D0EAC - .incbin "baserom.gba", 0x0D0EAC, 0x0000004 - -gUnk_080D0EB0:: @ 080D0EB0 - .incbin "baserom.gba", 0x0D0EB0, 0x0000020 diff --git a/data/const/npc/vaati.s b/data/const/npc/vaati.s deleted file mode 100644 index cf25ef3d..00000000 --- a/data/const/npc/vaati.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08110734:: @ 08110734 - .4byte sub_08066A94 - .4byte sub_08066ACC diff --git a/data/const/npc/vaatiReborn.s b/data/const/npc/vaatiReborn.s deleted file mode 100644 index b9db1ee2..00000000 --- a/data/const/npc/vaatiReborn.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08112F78:: @ 08112F78 - .4byte sub_0806B67C - .4byte sub_0806B7BC - -gUnk_08112F80:: @ 08112F80 - .incbin "baserom.gba", 0x112F80, 0x0000008 diff --git a/data/const/projectile/projectile0.s b/data/const/projectile/projectile0.s deleted file mode 100644 index bd83c6d7..00000000 --- a/data/const/projectile/projectile0.s +++ /dev/null @@ -1,197 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081293B8:: @ 081293B8 - .incbin "baserom.gba", 0x1293B8, 0x0000014 - -gUnk_081293CC:: @ 081293CC - .4byte sub_080A7FB4 - .4byte sub_080A801C - .4byte sub_080A7FD8 - .4byte sub_080A7FEC - .4byte sub_080A7FEC - -gUnk_081293E0:: @ 081293E0 - .4byte gUnk_08129460 - .4byte gUnk_081294A8 - .4byte gUnk_081294F0 - .4byte gUnk_08129538 - -gUnk_081293F0:: @ 081293F0 - .4byte gUnk_08129550 - .4byte gUnk_08129558 - .4byte gUnk_08129560 - .4byte gUnk_08129568 - -gUnk_08129400:: @ 08129400 - .4byte gUnk_08129590 - .4byte gUnk_081295A0 - .4byte gUnk_081295B0 - .4byte gUnk_081295C0 - -gUnk_08129410:: @ 08129410 - .4byte gUnk_08129598 - .4byte gUnk_081295A8 - .4byte gUnk_081295B8 - .4byte gUnk_081295C8 - -gUnk_08129420:: @ 08129420 - .4byte gUnk_08129570 - .4byte gUnk_08129578 - .4byte gUnk_08129580 - .4byte gUnk_08129588 - -gUnk_08129430:: @ 08129430 - .incbin "baserom.gba", 0x129430, 0x0000008 - -gUnk_08129438:: @ 08129438 - .incbin "baserom.gba", 0x129438, 0x0000008 - -gUnk_08129440:: @ 08129440 - .incbin "baserom.gba", 0x129440, 0x0000008 - -gUnk_08129448:: @ 08129448 - .incbin "baserom.gba", 0x129448, 0x0000008 - -gUnk_08129450:: @ 08129450 - .incbin "baserom.gba", 0x129450, 0x0000008 - -gUnk_08129458:: @ 08129458 - .incbin "baserom.gba", 0x129458, 0x0000008 - -gUnk_08129460:: @ 08129460 - .4byte gUnk_08129430 - .4byte gUnk_08129438 - .4byte gUnk_08129440 - .4byte gUnk_08129448 - .4byte gUnk_08129450 - .4byte gUnk_08129458 - -gUnk_08129478:: @ 08129478 - .incbin "baserom.gba", 0x129478, 0x0000008 - -gUnk_08129480:: @ 08129480 - .incbin "baserom.gba", 0x129480, 0x0000008 - -gUnk_08129488:: @ 08129488 - .incbin "baserom.gba", 0x129488, 0x0000008 - -gUnk_08129490:: @ 08129490 - .incbin "baserom.gba", 0x129490, 0x0000008 - -gUnk_08129498:: @ 08129498 - .incbin "baserom.gba", 0x129498, 0x0000008 - -gUnk_081294A0:: @ 081294A0 - .incbin "baserom.gba", 0x1294A0, 0x0000008 - -gUnk_081294A8:: @ 081294A8 - .4byte gUnk_08129478 - .4byte gUnk_08129480 - .4byte gUnk_08129488 - .4byte gUnk_08129490 - .4byte gUnk_08129498 - .4byte gUnk_081294A0 - -gUnk_081294C0:: @ 081294C0 - .incbin "baserom.gba", 0x1294C0, 0x0000008 - -gUnk_081294C8:: @ 081294C8 - .incbin "baserom.gba", 0x1294C8, 0x0000008 - -gUnk_081294D0:: @ 081294D0 - .incbin "baserom.gba", 0x1294D0, 0x0000008 - -gUnk_081294D8:: @ 081294D8 - .incbin "baserom.gba", 0x1294D8, 0x0000008 - -gUnk_081294E0:: @ 081294E0 - .incbin "baserom.gba", 0x1294E0, 0x0000008 - -gUnk_081294E8:: @ 081294E8 - .incbin "baserom.gba", 0x1294E8, 0x0000008 - -gUnk_081294F0:: @ 081294F0 - .4byte gUnk_081294C0 - .4byte gUnk_081294C8 - .4byte gUnk_081294D0 - .4byte gUnk_081294D8 - .4byte gUnk_081294E0 - .4byte gUnk_081294E8 - -gUnk_08129508:: @ 08129508 - .incbin "baserom.gba", 0x129508, 0x0000008 - -gUnk_08129510:: @ 08129510 - .incbin "baserom.gba", 0x129510, 0x0000008 - -gUnk_08129518:: @ 08129518 - .incbin "baserom.gba", 0x129518, 0x0000008 - -gUnk_08129520:: @ 08129520 - .incbin "baserom.gba", 0x129520, 0x0000008 - -gUnk_08129528:: @ 08129528 - .incbin "baserom.gba", 0x129528, 0x0000008 - -gUnk_08129530:: @ 08129530 - .incbin "baserom.gba", 0x129530, 0x0000008 - -gUnk_08129538:: @ 08129538 - .4byte gUnk_08129508 - .4byte gUnk_08129510 - .4byte gUnk_08129518 - .4byte gUnk_08129520 - .4byte gUnk_08129528 - .4byte gUnk_08129530 - -gUnk_08129550:: @ 08129550 - .incbin "baserom.gba", 0x129550, 0x0000008 - -gUnk_08129558:: @ 08129558 - .incbin "baserom.gba", 0x129558, 0x0000008 - -gUnk_08129560:: @ 08129560 - .incbin "baserom.gba", 0x129560, 0x0000008 - -gUnk_08129568:: @ 08129568 - .incbin "baserom.gba", 0x129568, 0x0000008 - -gUnk_08129570:: @ 08129570 - .incbin "baserom.gba", 0x129570, 0x0000008 - -gUnk_08129578:: @ 08129578 - .incbin "baserom.gba", 0x129578, 0x0000008 - -gUnk_08129580:: @ 08129580 - .incbin "baserom.gba", 0x129580, 0x0000008 - -gUnk_08129588:: @ 08129588 - .incbin "baserom.gba", 0x129588, 0x0000008 - -gUnk_08129590:: @ 08129590 - .incbin "baserom.gba", 0x129590, 0x0000008 - -gUnk_08129598:: @ 08129598 - .incbin "baserom.gba", 0x129598, 0x0000008 - -gUnk_081295A0:: @ 081295A0 - .incbin "baserom.gba", 0x1295A0, 0x0000008 - -gUnk_081295A8:: @ 081295A8 - .incbin "baserom.gba", 0x1295A8, 0x0000008 - -gUnk_081295B0:: @ 081295B0 - .incbin "baserom.gba", 0x1295B0, 0x0000008 - -gUnk_081295B8:: @ 081295B8 - .incbin "baserom.gba", 0x1295B8, 0x0000008 - -gUnk_081295C0:: @ 081295C0 - .incbin "baserom.gba", 0x1295C0, 0x0000008 - -gUnk_081295C8:: @ 081295C8 - .incbin "baserom.gba", 0x1295C8, 0x0000008 diff --git a/data/const/projectile/projectile1.s b/data/const/projectile/projectile1.s deleted file mode 100644 index e874227b..00000000 --- a/data/const/projectile/projectile1.s +++ /dev/null @@ -1,18 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081295D0:: @ 081295D0 - .4byte sub_080A804C - .4byte sub_080A8064 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_081295E4:: @ 081295E4 - .4byte sub_080A8088 - .4byte sub_080A80A0 - .4byte sub_080A80F4 - .4byte sub_080A8118 diff --git a/data/const/projectile/projectile10.s b/data/const/projectile/projectile10.s deleted file mode 100644 index 231ecc8f..00000000 --- a/data/const/projectile/projectile10.s +++ /dev/null @@ -1,33 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129AE0:: @ 08129AE0 - .4byte sub_080A9A1C - .4byte sub_080A9A34 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080A9A64 - -gUnk_08129AF8:: @ 08129AF8 - .4byte sub_080A9ACC - .4byte sub_080A9B24 - .4byte sub_080A9B54 - .4byte sub_080A9B80 - -gUnk_08129B08:: @ 08129B08 - .4byte sub_080A9A94 - .4byte sub_080A9AA4 - .4byte sub_080A9AAC - .4byte sub_080A9AB4 - .4byte nullsub_128 - .4byte sub_080A9AC4 - -gUnk_08129B20:: @ 08129B20 - .incbin "baserom.gba", 0x129B20, 0x0000030 - -gUnk_08129B50:: @ 08129B50 - .incbin "baserom.gba", 0x129B50, 0x0000008 diff --git a/data/const/projectile/projectile11.s b/data/const/projectile/projectile11.s deleted file mode 100644 index 7ea1628a..00000000 --- a/data/const/projectile/projectile11.s +++ /dev/null @@ -1,23 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129B58:: @ 08129B58 - .4byte sub_080A9CD4 - .4byte nullsub_539 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080A9CF0 - -gUnk_08129B70:: @ 08129B70 - .4byte sub_080A9D6C - .4byte sub_080A9D80 - -gUnk_08129B78:: @ 08129B78 - .4byte sub_080A9D20 - .4byte nullsub_540 - .4byte sub_080A9D2C - diff --git a/data/const/projectile/projectile12.s b/data/const/projectile/projectile12.s deleted file mode 100644 index abf0a5ac..00000000 --- a/data/const/projectile/projectile12.s +++ /dev/null @@ -1,17 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129BEC:: @ 08129BEC - .4byte sub_080A9DC0 - .4byte sub_080A9DD8 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129C00:: @ 08129C00 - .4byte sub_080A9DFC - .4byte sub_080A9E14 - diff --git a/data/const/projectile/projectile13.s b/data/const/projectile/projectile13.s deleted file mode 100644 index 25bcf3ac..00000000 --- a/data/const/projectile/projectile13.s +++ /dev/null @@ -1,63 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129C7C:: @ 08129C7C - .4byte sub_080A9E94 - .4byte sub_080A9EBC - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129C90:: @ 08129C90 - .4byte sub_080A9F50 - .4byte sub_080A9F90 - .4byte sub_080A9FD0 - .4byte sub_080AA044 - .4byte sub_080AA110 - -gUnk_08129CA4:: @ 08129CA4 - .incbin "baserom.gba", 0x129CA4, 0x0000008 - -gUnk_08129CAC:: @ 08129CAC - .incbin "baserom.gba", 0x129CAC, 0x0000008 - -gUnk_08129CB4:: @ 08129CB4 - .incbin "baserom.gba", 0x129CB4, 0x0000008 - -gUnk_08129CBC:: @ 08129CBC - .incbin "baserom.gba", 0x129CBC, 0x0000008 - -gUnk_08129CC4:: @ 08129CC4 - .incbin "baserom.gba", 0x129CC4, 0x0000008 - -gUnk_08129CCC:: @ 08129CCC - .incbin "baserom.gba", 0x129CCC, 0x0000008 - -gUnk_08129CD4:: @ 08129CD4 - .incbin "baserom.gba", 0x129CD4, 0x0000008 - -gUnk_08129CDC:: @ 08129CDC - .incbin "baserom.gba", 0x129CDC, 0x0000008 - -gUnk_08129CE4:: @ 08129CE4 - .incbin "baserom.gba", 0x129CE4, 0x0000008 - -gUnk_08129CEC:: @ 08129CEC - .incbin "baserom.gba", 0x129CEC, 0x0000008 - -gUnk_08129CF4:: @ 08129CF4 - .4byte gUnk_08129CB4 - .4byte gUnk_08129CBC - .4byte gUnk_08129CC4 - .4byte gUnk_08129CCC - .4byte gUnk_08129CD4 - .4byte gUnk_08129CDC - .4byte gUnk_08129CE4 - .4byte gUnk_08129CEC - -gUnk_08129D14:: @ 08129D14 - .incbin "baserom.gba", 0x129D14, 0x0000008 - diff --git a/data/const/projectile/projectile14.s b/data/const/projectile/projectile14.s deleted file mode 100644 index d0e22677..00000000 --- a/data/const/projectile/projectile14.s +++ /dev/null @@ -1,25 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129FB8:: @ 08129FB8 - .4byte sub_080AA41C - .4byte sub_080AA450 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080AA464 - -gUnk_08129FD0:: @ 08129FD0 - .incbin "baserom.gba", 0x129FD0, 0x0000014 - -gUnk_08129FE4:: @ 08129FE4 - .incbin "baserom.gba", 0x129FE4, 0x0000014 - -gUnk_08129FF8:: @ 08129FF8 - .incbin "baserom.gba", 0x129FF8, 0x000000C - -gUnk_0812A004:: @ 0812A004 - .incbin "baserom.gba", 0x12A004, 0x0000010 diff --git a/data/const/projectile/projectile15.s b/data/const/projectile/projectile15.s deleted file mode 100644 index a309d3b0..00000000 --- a/data/const/projectile/projectile15.s +++ /dev/null @@ -1,45 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A014:: @ 0812A014 - .4byte sub_080AA6A8 - .4byte sub_080AA6C0 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080AA78C - -gUnk_0812A02C:: @ 0812A02C - .4byte sub_080AA834 - .4byte sub_080AA878 - .4byte sub_080AA898 - .4byte sub_080AA9C4 - -gUnk_0812A03C:: @ 0812A03C - .incbin "baserom.gba", 0x12A03C, 0x0000010 - -gUnk_0812A04C:: @ 0812A04C - .4byte gUnk_080FD41C - .4byte gUnk_080FD424 - .4byte gUnk_080FD42C - .4byte gUnk_080FD434 - -gUnk_0812A05C:: @ 0812A05C - .4byte sub_080AA8B8 - .4byte sub_080AA9AC - -gUnk_0812A064:: @ 0812A064 - .incbin "baserom.gba", 0x12A064, 0x0000008 - -gUnk_0812A06C:: @ 0812A06C - .incbin "baserom.gba", 0x12A06C, 0x0000008 - -gUnk_0812A074:: @ 0812A074 - .incbin "baserom.gba", 0x12A074, 0x0000010 - -gUnk_0812A084:: @ 0812A084 - .incbin "baserom.gba", 0x12A084, 0x0000008 - diff --git a/data/const/projectile/projectile16.s b/data/const/projectile/projectile16.s deleted file mode 100644 index bc333109..00000000 --- a/data/const/projectile/projectile16.s +++ /dev/null @@ -1,24 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A3C0:: @ 0812A3C0 - .4byte sub_080AAB04 - .4byte sub_080AAB1C - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812A3D4:: @ 0812A3D4 - .4byte sub_080AAB24 - .4byte sub_080AAB38 - .4byte sub_080AAB64 - -gUnk_0812A3E0:: @ 0812A3E0 - .incbin "baserom.gba", 0x12A3E0, 0x0000014 - -gUnk_0812A3F4:: @ 0812A3F4 - .4byte gUnk_0812A3E0 - .incbin "baserom.gba", 0x12A3F8, 0x0000004 diff --git a/data/const/projectile/projectile18.s b/data/const/projectile/projectile18.s deleted file mode 100644 index 591ae81c..00000000 --- a/data/const/projectile/projectile18.s +++ /dev/null @@ -1,25 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A418:: @ 0812A418 - .4byte sub_080AAC0C - .4byte sub_080AAC44 - .4byte DeleteEntity - .4byte sub_080AACE0 - .4byte DeleteEntity - .4byte sub_080AAD70 - -gUnk_0812A430:: @ 0812A430 - .4byte sub_080AADBC - .4byte sub_080AAE88 - .4byte sub_080AAF00 - .4byte sub_080AAF10 - -gUnk_0812A440:: @ 0812A440 - .4byte sub_080AAD98 - .4byte nullsub_541 - .4byte sub_080AADA4 - diff --git a/data/const/projectile/projectile19.s b/data/const/projectile/projectile19.s deleted file mode 100644 index 98b34416..00000000 --- a/data/const/projectile/projectile19.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A494:: @ 0812A494 - .4byte sub_080AB074 - .4byte sub_080AB170 - .4byte sub_080AB170 - .4byte sub_080AB170 - .4byte sub_080AB26C - -gUnk_0812A4A8:: @ 0812A4A8 - .incbin "baserom.gba", 0x12A4A8, 0x0000020 diff --git a/data/const/projectile/projectile1A.s b/data/const/projectile/projectile1A.s deleted file mode 100644 index 44136b7c..00000000 --- a/data/const/projectile/projectile1A.s +++ /dev/null @@ -1,21 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A4C8:: @ 0812A4C8 - .4byte sub_080AB2C4 - .4byte sub_080AB2DC - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812A4DC:: @ 0812A4DC - .4byte sub_080AB318 - .4byte sub_080AB414 - .4byte sub_080AB45C - .4byte sub_080AB488 - -gUnk_0812A4EC:: @ 0812A4EC - .incbin "baserom.gba", 0x12A4EC, 0x00000A0 diff --git a/data/const/projectile/projectile1B.s b/data/const/projectile/projectile1B.s deleted file mode 100644 index 8b32f41b..00000000 --- a/data/const/projectile/projectile1B.s +++ /dev/null @@ -1,17 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A58C:: @ 0812A58C - .4byte sub_080AB52C - .4byte sub_080AB544 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812A5A0:: @ 0812A5A0 - .4byte sub_080AB580 - .4byte sub_080AB59C - .4byte sub_080AB5C4 diff --git a/data/const/projectile/projectile1C.s b/data/const/projectile/projectile1C.s deleted file mode 100644 index 373c5b54..00000000 --- a/data/const/projectile/projectile1C.s +++ /dev/null @@ -1,36 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A5E8:: @ 0812A5E8 - .4byte sub_080AB6B8 - .4byte sub_080AB6FC - .4byte sub_080AB728 - -gUnk_0812A5F4:: @ 0812A5F4 - .4byte gUnk_0812A61C - .4byte gUnk_0812A61C - .4byte gUnk_0812A624 - .4byte gUnk_0812A61C - .4byte gUnk_0812A62C - .4byte gUnk_0812A624 - .4byte gUnk_0812A634 - .4byte gUnk_0812A624 - -gUnk_0812A614:: @ 0812A614 - .incbin "baserom.gba", 0x12A614, 0x0000008 - -gUnk_0812A61C:: @ 0812A61C - .incbin "baserom.gba", 0x12A61C, 0x0000008 - -gUnk_0812A624:: @ 0812A624 - .incbin "baserom.gba", 0x12A624, 0x0000008 - -gUnk_0812A62C:: @ 0812A62C - .incbin "baserom.gba", 0x12A62C, 0x0000008 - -gUnk_0812A634:: @ 0812A634 - .incbin "baserom.gba", 0x12A634, 0x0000008 - diff --git a/data/const/projectile/projectile1D.s b/data/const/projectile/projectile1D.s deleted file mode 100644 index 4da32524..00000000 --- a/data/const/projectile/projectile1D.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A6B4:: @ 0812A6B4 - .4byte sub_080AB8E8 - .4byte sub_080AB950 - -gUnk_0812A6BC:: @ 0812A6BC - .incbin "baserom.gba", 0x12A6BC, 0x0000008 - -gUnk_0812A6C4:: @ 0812A6C4 - .incbin "baserom.gba", 0x12A6C4, 0x0000008 diff --git a/data/const/projectile/projectile1E.s b/data/const/projectile/projectile1E.s deleted file mode 100644 index a47f97ea..00000000 --- a/data/const/projectile/projectile1E.s +++ /dev/null @@ -1,13 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A6CC:: @ 0812A6CC - .4byte sub_080ABA74 - .4byte sub_080ABAE0 - -gUnk_0812A6D4:: @ 0812A6D4 - .incbin "baserom.gba", 0x12A6D4, 0x000000E - diff --git a/data/const/projectile/projectile1F.s b/data/const/projectile/projectile1F.s deleted file mode 100644 index 9d9f75dc..00000000 --- a/data/const/projectile/projectile1F.s +++ /dev/null @@ -1,32 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A7D4:: @ 0812A7D4 - .4byte sub_080ABBA8 - .4byte sub_080ABBF4 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080ABC54 - -gUnk_0812A7EC:: @ 0812A7EC - .4byte sub_080ABCC4 - .4byte sub_080ABD44 - .4byte sub_080ABD70 - -gUnk_0812A7F8:: @ 0812A7F8 - .4byte sub_080ABE04 - .4byte sub_080ABE88 - -gUnk_0812A800:: @ 0812A800 - .4byte sub_080ABEA8 - .4byte sub_080ABF04 - -gUnk_0812A808:: @ 0812A808 - .4byte sub_080ABC84 - .4byte nullsub_542 - .4byte sub_080ABC90 - diff --git a/data/const/projectile/projectile2.s b/data/const/projectile/projectile2.s deleted file mode 100644 index 18bfec58..00000000 --- a/data/const/projectile/projectile2.s +++ /dev/null @@ -1,20 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812960C:: @ 0812960C - .4byte sub_080A81AC - .4byte sub_080A81C4 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129620:: @ 08129620 - .4byte sub_080A81E0 - .4byte sub_080A81FC - .4byte sub_080A8248 - .4byte sub_080A827C - .4byte sub_080A82B4 - diff --git a/data/const/projectile/projectile20.s b/data/const/projectile/projectile20.s deleted file mode 100644 index 48714f7a..00000000 --- a/data/const/projectile/projectile20.s +++ /dev/null @@ -1,13 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A84C:: @ 0812A84C - .4byte sub_080ABF40 - .4byte sub_080ABFA8 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - diff --git a/data/const/projectile/projectile21.s b/data/const/projectile/projectile21.s deleted file mode 100644 index 2ed70c39..00000000 --- a/data/const/projectile/projectile21.s +++ /dev/null @@ -1,28 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A954:: @ 0812A954 - .4byte sub_080ABFCC - .4byte sub_080ABFE4 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812A968:: @ 0812A968 - .4byte sub_080ABFEC - .4byte sub_080AC074 - .4byte sub_080AC100 - .4byte sub_080AC168 - .4byte sub_080AC200 - -gUnk_0812A97C:: @ 0812A97C - .incbin "baserom.gba", 0x12A97C, 0x0000006 - -gUnk_0812A982:: @ 0812A982 - .incbin "baserom.gba", 0x12A982, 0x0000008 - -gUnk_0812A98A:: @ 0812A98A - .incbin "baserom.gba", 0x12A98A, 0x000000A diff --git a/data/const/projectile/projectile22.s b/data/const/projectile/projectile22.s deleted file mode 100644 index 9504fae5..00000000 --- a/data/const/projectile/projectile22.s +++ /dev/null @@ -1,29 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A994:: @ 0812A994 - .4byte sub_080AC328 - .4byte sub_080AC510 - .4byte sub_080AC510 - .4byte sub_080AC510 - .4byte sub_080AC560 - -gUnk_0812A9A8:: @ 0812A9A8 - .4byte sub_080AC340 - .4byte sub_080AC388 - .4byte sub_080AC480 - -gUnk_0812A9B4:: @ 0812A9B4 - .incbin "baserom.gba", 0x12A9B4, 0x0000004 - -gUnk_0812A9B8:: @ 0812A9B8 - .incbin "baserom.gba", 0x12A9B8, 0x0000002 - -gUnk_0812A9BA:: @ 0812A9BA - .incbin "baserom.gba", 0x12A9BA, 0x0000006 - -gUnk_0812A9C0:: @ 0812A9C0 - .incbin "baserom.gba", 0x12A9C0, 0x0000018 diff --git a/data/const/projectile/projectile23.s b/data/const/projectile/projectile23.s deleted file mode 100644 index 61448e8c..00000000 --- a/data/const/projectile/projectile23.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A9D8:: @ 0812A9D8 - .4byte sub_080AC8C4 - .4byte sub_080AC8DC - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812A9EC:: @ 0812A9EC - .4byte sub_080AC928 - .4byte sub_080AC954 - .4byte sub_080AC9CC - .4byte sub_080ACA14 - diff --git a/data/const/projectile/projectile24.s b/data/const/projectile/projectile24.s deleted file mode 100644 index 3572d9a1..00000000 --- a/data/const/projectile/projectile24.s +++ /dev/null @@ -1,18 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812AA5C:: @ 0812AA5C - .4byte sub_080ACA50 - .4byte sub_080ACA68 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080ACA50 - -gUnk_0812AA74:: @ 0812AA74 - .4byte sub_080ACAC8 - .4byte sub_080ACAF0 - .4byte sub_080ACB10 diff --git a/data/const/projectile/projectile3.s b/data/const/projectile/projectile3.s deleted file mode 100644 index 80e4e71e..00000000 --- a/data/const/projectile/projectile3.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129650:: @ 08129650 - .4byte sub_080A8314 - .4byte sub_080A832C - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129664:: @ 08129664 - .4byte sub_080A83A0 - .4byte sub_080A83B4 - -gUnk_0812966C:: @ 0812966C - .incbin "baserom.gba", 0x12966C, 0x0000084 diff --git a/data/const/projectile/projectile4.s b/data/const/projectile/projectile4.s deleted file mode 100644 index 7fd5ed49..00000000 --- a/data/const/projectile/projectile4.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081296F0:: @ 081296F0 - .4byte sub_080A8458 - .4byte sub_080A8470 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129704:: @ 08129704 - .4byte sub_080A84C8 - .4byte sub_080A8504 - .4byte sub_080A85B8 - .4byte sub_080A8610 - .4byte sub_080A862C diff --git a/data/const/projectile/projectile5.s b/data/const/projectile/projectile5.s deleted file mode 100644 index e0ca1b24..00000000 --- a/data/const/projectile/projectile5.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129718:: @ 08129718 - .4byte sub_080A86D8 - .4byte sub_080A86F0 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812972C:: @ 0812972C - .4byte sub_080A8770 - .4byte sub_080A878C - -gUnk_08129734:: @ 08129734 - .incbin "baserom.gba", 0x129734, 0x000000C diff --git a/data/const/projectile/projectile6.s b/data/const/projectile/projectile6.s deleted file mode 100644 index ab466be0..00000000 --- a/data/const/projectile/projectile6.s +++ /dev/null @@ -1,22 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129740:: @ 08129740 - .4byte sub_080A87E4 - .4byte sub_080A881C - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129754:: @ 08129754 - .4byte sub_080A8868 - .4byte sub_080A88C8 - .4byte sub_080A8988 - .4byte sub_080A8A48 - -gUnk_08129764:: @ 08129764 - .incbin "baserom.gba", 0x129764, 0x000000C - diff --git a/data/const/projectile/projectile7.s b/data/const/projectile/projectile7.s deleted file mode 100644 index c6e1c457..00000000 --- a/data/const/projectile/projectile7.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812979C:: @ 0812979C - .4byte sub_080A8A90 - .4byte sub_080A8AC8 - .4byte sub_080A8B38 - .4byte sub_080A8B78 - diff --git a/data/const/projectile/projectile8.s b/data/const/projectile/projectile8.s deleted file mode 100644 index 87d3d5f2..00000000 --- a/data/const/projectile/projectile8.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812982C:: @ 0812982C - .4byte sub_080A8BC0 - .4byte sub_080A8BF8 - .4byte sub_080A8C4C - .4byte sub_080A8C8C - diff --git a/data/const/projectile/projectile9.s b/data/const/projectile/projectile9.s deleted file mode 100644 index 344cb8ae..00000000 --- a/data/const/projectile/projectile9.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081298B8:: @ 081298B8 - .4byte sub_080A8CD4 - .4byte sub_080A8D0C - .4byte sub_080A8D60 - .4byte sub_080A8DA0 - diff --git a/data/const/projectile/projectileA.s b/data/const/projectile/projectileA.s deleted file mode 100644 index 368f60e8..00000000 --- a/data/const/projectile/projectileA.s +++ /dev/null @@ -1,27 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129954:: @ 08129954 - .4byte sub_080A8DDC - .4byte sub_080A8DDC - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129968:: @ 08129968 - .4byte sub_080A8E28 - .4byte sub_080A8FB8 - .4byte sub_080A9058 - .4byte sub_080A90BC - -gUnk_08129978:: @ 08129978 - .incbin "baserom.gba", 0x129978, 0x0000008 - -gUnk_08129980:: @ 08129980 - .incbin "baserom.gba", 0x129980, 0x0000008 - -gUnk_08129988:: @ 08129988 - .incbin "baserom.gba", 0x129988, 0x0000010 diff --git a/data/const/projectile/projectileB.s b/data/const/projectile/projectileB.s deleted file mode 100644 index 7150bf8f..00000000 --- a/data/const/projectile/projectileB.s +++ /dev/null @@ -1,23 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129998:: @ 08129998 - .4byte gUnk_081299A8 - .4byte gUnk_081299B0 - .4byte gUnk_081299B8 - .4byte gUnk_081299C0 - -gUnk_081299A8:: @ 081299A8 - .incbin "baserom.gba", 0x1299A8, 0x0000008 - -gUnk_081299B0:: @ 081299B0 - .incbin "baserom.gba", 0x1299B0, 0x0000008 - -gUnk_081299B8:: @ 081299B8 - .incbin "baserom.gba", 0x1299B8, 0x0000008 - -gUnk_081299C0:: @ 081299C0 - .incbin "baserom.gba", 0x1299C0, 0x0000008 diff --git a/data/const/projectile/projectileC.s b/data/const/projectile/projectileC.s deleted file mode 100644 index 6968edb3..00000000 --- a/data/const/projectile/projectileC.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081299C8:: @ 081299C8 - .incbin "baserom.gba", 0x1299C8, 0x0000008 diff --git a/data/const/projectile/projectileD.s b/data/const/projectile/projectileD.s deleted file mode 100644 index 3290016f..00000000 --- a/data/const/projectile/projectileD.s +++ /dev/null @@ -1,35 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081299D0:: @ 081299D0 - .4byte sub_080A931C - .4byte sub_080A9334 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_081299E4:: @ 081299E4 - .4byte sub_080A9370 - .4byte sub_080A93A0 - .4byte sub_080A93DC - .4byte sub_080A942C - .4byte sub_080A9448 - -gUnk_081299F8:: @ 081299F8 - .incbin "baserom.gba", 0x1299F8, 0x0000004 - .4byte gUnk_08129A20 - .incbin "baserom.gba", 0x129A00, 0x0000004 - .4byte gUnk_08129A18 - .incbin "baserom.gba", 0x129A08, 0x0000004 - .4byte gUnk_08129A20 - .incbin "baserom.gba", 0x129A10, 0x0000004 - .4byte gUnk_08129A18 - -gUnk_08129A18:: @ 08129A18 - .incbin "baserom.gba", 0x129A18, 0x0000008 - -gUnk_08129A20:: @ 08129A20 - .incbin "baserom.gba", 0x129A20, 0x0000008 diff --git a/data/const/projectile/projectileE.s b/data/const/projectile/projectileE.s deleted file mode 100644 index 69b605ec..00000000 --- a/data/const/projectile/projectileE.s +++ /dev/null @@ -1,11 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129A64:: @ 08129A64 - .4byte sub_080A9518 - .4byte sub_080A9540 - .4byte sub_080A95BC - diff --git a/data/const/projectile/projectileF.s b/data/const/projectile/projectileF.s deleted file mode 100644 index ca3e4a4f..00000000 --- a/data/const/projectile/projectileF.s +++ /dev/null @@ -1,20 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129ABC:: @ 08129ABC - .4byte sub_080A95F8 - .4byte sub_080A95F8 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129AD0:: @ 08129AD0 - .4byte sub_080A9610 - .4byte sub_080A976C - .4byte sub_080A99F0 - -gUnk_08129ADC:: @ 08129ADC - .incbin "baserom.gba", 0x129ADC, 0x0000004 diff --git a/data/data_08129320.s b/data/data_08129320.s index c0088c02..41b4d6ba 100644 --- a/data/data_08129320.s +++ b/data/data_08129320.s @@ -5,41 +5,41 @@ .align 2 gProjectileFunctions:: @ 08129320 - .4byte Projectile0 - .4byte Projectile1 - .4byte Projectile2 - .4byte Projectile3 - .4byte Projectile4 + .4byte DarkNutSwordSlash + .4byte RockProjectile + .4byte BoneProjectile + .4byte MoblinSpear + .4byte DekuSeedProjectile .4byte Projectile5 - .4byte Projectile6 - .4byte Projectile7 - .4byte Projectile8 - .4byte Projectile9 - .4byte ProjectileA - .4byte ProjectileB - .4byte ProjectileC - .4byte ProjectileD - .4byte ProjectileE - .4byte ProjectileF - .4byte Projectile10 - .4byte Projectile11 - .4byte Projectile12 - .4byte Projectile13 - .4byte Projectile14 - .4byte Projectile15 - .4byte Projectile16 - .4byte Projectile17 - .4byte Projectile18 - .4byte Projectile19 - .4byte Projectile1A - .4byte Projectile1B - .4byte Projectile1C - .4byte Projectile1D - .4byte Projectile1E - .4byte Projectile1F - .4byte Projectile20 - .4byte Projectile21 - .4byte Projectile22 - .4byte Projectile23 - .4byte Projectile24 + .4byte DirtBallProjectile + .4byte WindProjectile + .4byte FireProjectile + .4byte IceProjectile + .4byte GleerokProjectile + .4byte KeatonDagger + .4byte GuardLineOfSight + .4byte ArrowProjectile + .4byte MazaalEnergyBeam + .4byte OctorokBossProjectile + .4byte StalfosProjectile + .4byte LakituCloudProjectile + .4byte LakituLightning + .4byte MandiblesProjectile + .4byte RemovableDust + .4byte SpiderWeb + .4byte TorchTrapProjectile + .4byte GuruguruBarProjectile + .4byte V1DarkMagicProjectile + .4byte BallAndChain + .4byte V1FireProjectile + .4byte CannonballProjectile + .4byte V1EyeLaser + .4byte Winder + .4byte SpikedRollers + .4byte V2Projectile + .4byte V3HandProjectile + .4byte V3ElectricProjectile + .4byte GyorgTail + .4byte GyorgMaleEnergyProjectile + .4byte V3TennisBallProjectile .4byte DeleteEntity diff --git a/include/enemy.h b/include/enemy.h index 39317a43..6b187642 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -95,12 +95,12 @@ typedef enum { /*0x57*/ MINI_SLIME, /*0x58*/ FIREBALL_GUY, /*0x59*/ MINI_FIREBALL_GUY, - /*0x5a*/ ENEMY_5A, + /*0x5a*/ VAATI_TRANSFIGURED_EYE, /*0x5b*/ BUSINESS_SCRUB_PROLOGUE, /*0x5c*/ GYORG_FEMALE, /*0x5d*/ GYORG_MALE, /*0x5e*/ CURTAIN, - /*0x5f*/ ENEMY_5F, + /*0x5f*/ VAATI_WRATH_EYE, /*0x60*/ GYORG_CHILD, /*0x61*/ GYORG_FEMALE_EYE, /*0x62*/ ENEMY_62, @@ -199,12 +199,12 @@ extern void Slime(Entity*); extern void MiniSlime(Entity*); extern void FireballGuy(Entity*); extern void MiniFireballGuy(Entity*); -extern void Enemy5A(Entity*); +extern void VaatiTransfiguredEye(Entity*); extern void BusinessScrubPrologue(Entity*); extern void GyorgFemale(Entity*); extern void GyorgMale(Entity*); extern void Curtain(Entity*); -extern void Enemy5F(Entity*); +extern void VaatiWrathEye(Entity*); extern void GyorgChild(Entity*); extern void GyorgFemaleEye(Entity*); extern void Enemy62(Entity*); diff --git a/include/functions.h b/include/functions.h index 22915222..45e0f294 100644 --- a/include/functions.h +++ b/include/functions.h @@ -80,7 +80,7 @@ extern u32 sub_08049FA0(Entity*); extern u32 sub_08049FDC(Entity*, u32); extern u32 sub_080041A0(Entity*, Entity*, u32, u32); extern u32 sub_08049EE4(Entity*); -extern Entity* sub_0804A98C(Entity*, u8, u8); +extern Entity* CreateProjectileWithParent(Entity*, u8, u8); extern u32 GetBottleContaining(u32); extern void sub_08077E54(ItemBehavior*); extern void sub_080042BA(Entity*, u32); @@ -206,7 +206,7 @@ extern void sub_0802F45C(Entity*); extern u32 sub_0800419C(Entity*, Entity*, u32, u32); extern void sub_08004542(Entity*); extern void sub_08077B20(); -extern u32 sub_080040A8(Entity*); +extern bool32 sub_080040A8(Entity*); extern u32 sub_08017850(Entity*); extern void sub_080809D4(void); extern void sub_08080CB4(Entity*); @@ -227,7 +227,7 @@ extern u32 sub_0805F7A0(u32); extern u32* sub_0805F25C(u32); extern u32 sub_080045DA(s32, s32); u32 sub_0806FCB8(Entity*, u32, u32, u32); -extern Entity* sub_080A7EE0(u32); +extern Entity* CreateProjectile(u32); extern void sub_080A1D70(Entity*, u32); extern void sub_0806F62C(Entity*, u32, u32); extern void sub_080A1ED0(u32, u32, u32); diff --git a/include/npc.h b/include/npc.h index feec7fd9..c30b628b 100644 --- a/include/npc.h +++ b/include/npc.h @@ -5,6 +5,137 @@ #ifndef NPC_H #define NPC_H +enum NPC { + /*0x00*/ NPC_NONE_0, + /*0x01*/ GENTARI, + /*0x02*/ FESTARI, + /*0x03*/ FOREST_MINISH, + /*0x04*/ POSTMAN, + /*0x05*/ NPC_UNK_5, + /*0x06*/ TPWNSPERSON, + /*0x07*/ KID, + /*0x08*/ GUARD, + /*0x09*/ NPC_UNK_9, + /*0x0a*/ STAMP, + /*0x0b*/ MAID, + /*0x0c*/ MARCY, + /*0x0d*/ WHEATON, + /*0x0e*/ PITA, + /*0x0f*/ MINISH_EZLO, + /*0x10*/ MAILBOX, + /*0x11*/ BEEDLE, + /*0x12*/ BROCCO, + /*0x13*/ SITTING_PERSON, + /*0x14*/ PINA, + /*0x15*/ GUARD_1, + /*0x16*/ MAID_1, + /*0x17*/ DIN, + /*0x18*/ NAYRU, + /*0x19*/ FARORE, + /*0x1a*/ STURGEON, + /*0x1b*/ TINGLE_SIBLINGS, + /*0x1c*/ STOCKWELL, + /*0x1d*/ TALON, + /*0x1e*/ MALON, + /*0x1f*/ EPONA, + /*0x20*/ MILK_CART, + /*0x21*/ GHOST_BROTHERS, + /*0x22*/ SMITH, + /*0x23*/ NPC_UNK_23, + /*0x24*/ KING_DALTUS, + /*0x25*/ MINISTER_POTHO, + /*0x26*/ NPC_UNK_26, + /*0x27*/ VAATI, + /*0x28*/ ZELDA, + /*0x29*/ MUTOH, + /*0x2a*/ CARPENTER, + /*0x2b*/ CASTOR_WILDS_STATUE, + /*0x2c*/ CAT, + /*0x2d*/ MOUNTAIN_MINISH, + /*0x2e*/ ZELDA_FOLLOWER, + /*0x2f*/ MELARI, + /*0x30*/ BLADE_BROTHERS, + /*0x31*/ COW, + /*0x32*/ GORON, + /*0x33*/ GORON_MERCHANT, + /*0x34*/ GORMAN, + /*0x35*/ DOG, + /*0x36*/ SYRUP, + /*0x37*/ REM, + /*0x38*/ TOWN_MINISH, + /*0x39*/ LIBRARI, + /*0x3a*/ PERCY, + /*0x3b*/ VAATI_REBORN, + /*0x3c*/ MOBLIN_LADY, + /*0x3d*/ LIBRARIANS, + /*0x3e*/ FARMERS, + /*0x3f*/ CARLOV, + /*0x40*/ DAMPE, + /*0x41*/ DR_LEFT, + /*0x42*/ KING_GUSTAF, + /*0x43*/ GINA, + /*0x44*/ SIMON, + /*0x45*/ ANJU, + /*0x46*/ MAMA, + /*0x47*/ EMMA, + /*0x48*/ TEACHERS, + /*0x49*/ WIND_TRIBESPEOPLE, + /*0x4a*/ GREGAL, + /*0x4b*/ MAYOR_HAGEN, + /*0x4c*/ BIG_GORON, + /*0x4d*/ EZLO_CAP, + /*0x4e*/ NPC_UNK_4E, + /*0x4f*/ NPC_UNK_4F, + /*0x50*/ CLOTHES_RACK, + /*0x51*/ PICOLYTE_BOTTLE, + /*0x52*/ SMALL_TOWN_MINISH, + /*0x53*/ HURDY_GURDY_MAN, + /*0x54*/ CUCCO, + /*0x55*/ CUCCO_CHICK, + /*0x56*/ FUSION_MENU_NPC, + /*0x57*/ PHONOGRAPH, + /*0x58*/ NPC_UNK_58, + /*0x59*/ NPC_NONE_1, + /*0x5a*/ NPC_NONE_2, + /*0x5b*/ NPC_NONE_3, + /*0x5c*/ NPC_NONE_4, + /*0x5d*/ NPC_NONE_5, + /*0x5e*/ NPC_NONE_6, + /*0x5f*/ NPC_NONE_7, + /*0x60*/ NPC_NONE_8, + /*0x61*/ NPC_NONE_9, + /*0x62*/ NPC_NONE_10, + /*0x63*/ NPC_NONE_11, + /*0x64*/ NPC_NONE_12, + /*0x65*/ NPC_NONE_13, + /*0x66*/ NPC_NONE_14, + /*0x67*/ NPC_NONE_15, + /*0x68*/ NPC_NONE_16, + /*0x69*/ NPC_NONE_17, + /*0x6a*/ NPC_NONE_18, + /*0x6b*/ NPC_NONE_19, + /*0x6c*/ NPC_NONE_20, + /*0x6d*/ NPC_NONE_21, + /*0x6e*/ NPC_NONE_22, + /*0x6f*/ NPC_NONE_23, + /*0x70*/ NPC_NONE_24, + /*0x71*/ NPC_NONE_25, + /*0x72*/ NPC_NONE_26, + /*0x73*/ NPC_NONE_27, + /*0x74*/ NPC_NONE_28, + /*0x75*/ NPC_NONE_29, + /*0x76*/ NPC_NONE_30, + /*0x77*/ NPC_NONE_31, + /*0x78*/ NPC_NONE_32, + /*0x79*/ NPC_NONE_33, + /*0x7a*/ NPC_NONE_34, + /*0x7b*/ NPC_NONE_35, + /*0x7c*/ NPC_NONE_36, + /*0x7d*/ NPC_NONE_37, + /*0x7e*/ NPC_NONE_38, + /*0x7f*/ NPC_NONE_39, +}; + extern void Gentari(Entity*); extern void Gentari_Fusion(Entity*); extern void Festari(Entity*); diff --git a/include/script.h b/include/script.h index 7a72550f..a251d2d5 100644 --- a/include/script.h +++ b/include/script.h @@ -36,6 +36,7 @@ void sub_0807DEDC(Entity*, ScriptExecutionContext*, u32, u32); ScriptExecutionContext* StartCutscene(Entity* entity, u16* script); void ExecuteScriptForEntity(Entity* entity, void (*postScriptCallback)(Entity*, ScriptExecutionContext*)); +void HandlePostScriptActions(Entity* entity, ScriptExecutionContext* context); void HandleEntity0x82Actions(Entity* entity); void sub_0807DD94(Entity*, void (*function)(Entity*, ScriptExecutionContext*)); #endif diff --git a/include/structures.h b/include/structures.h index e05d0f78..86962b43 100644 --- a/include/structures.h +++ b/include/structures.h @@ -56,9 +56,13 @@ typedef struct { u8 field_0x24[0x14]; u8 field_0x38; u8 field_0x39; - u16 field_0x3a; + u8 field_0x3a; + u8 field_0x3b; 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 75b630db..7a63e85e 100644 --- a/linker.ld +++ b/linker.ld @@ -162,7 +162,7 @@ SECTIONS { #else . = 0x00036A50; gEEPROMConfig = .; . = 0x00036A58; gUnk_02036A58 = .; - . = 0x00036AD8; gUnk_02036AD8 = .; + . = 0x00036AD8; gUnk_02036AD8 = .; . = 0x00036BB8; gUnk_02036BB8 = .; . = 0x00036BC0; gMPlayTracks = .; . = 0x00038560; gUnk_02038560 = .; @@ -277,8 +277,8 @@ SECTIONS { . = 0x00005D90; IntrMain = .; . = 0x00005E60; gUnk_03005E60 = .; . = 0x00005E98; gUnk_03005E98 = .; - . = 0x00005F24; _EntUpdate = .; - . = 0x00005F40; gUnk_03005F40 = .; + . = 0x00005F24; _ClearAndUpdateEntities = .; + . = 0x00005F40; _UpdateEntities = .; . = 0x00005FBC; gUnk_03005FBC = .; . = 0x00005FF0; gUnk_03005FF0 = .; . = 0x000060F0; gUnk_030060F0 = .; @@ -398,7 +398,7 @@ SECTIONS { src/enemy/bobomb.o(.text); src/enemy/wallMaster2.o(.text); asm/gleerok.o(.text); - asm/vaatiEyesMacro.o(.text); + src/enemy/vaatiEyesMacro.o(.text); src/enemy/tektite.o(.text); asm/wizzrobeWind.o(.text); asm/wizzrobeFire.o(.text); @@ -438,16 +438,16 @@ SECTIONS { src/enemy/lakitu.o(.text); src/enemy/lakituCloud.o(.text); asm/enemy49.o(.text); - asm/vaatiRebornEnemy.o(.text); - asm/vaatiProjectile.o(.text); + src/enemy/vaatiRebornEnemy.o(.text); + src/enemy/vaatiProjectile.o(.text); asm/ballChainSoldier.o(.text); src/enemy/enemy4D.o(.text); asm/enemy4D.o(.text); asm/ghini.o(.text); - asm/vaatiTransfigured.o(.text); + src/enemy/vaatiTransfigured.o(.text); asm/enemy50.o(.text); - asm/vaatiWrath.o(.text); - asm/vaatiArm.o(.text); + src/enemy/vaatiWrath.o(.text); + src/enemy/vaatiArm.o(.text); asm/dust.o(.text); src/enemy/vaatiBall.o(.text); src/enemy/slime.o(.text); @@ -455,12 +455,12 @@ SECTIONS { src/enemy/miniSlime.o(.text); src/enemy/fireballGuy.o(.text); src/enemy/miniFireballGuy.o(.text); - asm/enemy5A.o(.text); + src/enemy/vaatiTransfiguredEye.o(.text); asm/businessScrubPrologue.o(.text); asm/gyorgFemale.o(.text); src/enemy/gyorgMale.o(.text); asm/curtain.o(.text); - asm/enemy5F.o(.text); + src/enemy/vaatiWrathEye.o(.text); asm/gyorgChild.o(.text); asm/gyorgFemaleEye.o(.text); asm/enemy62.o(.text); @@ -605,7 +605,7 @@ SECTIONS { src/npc/kingDaltus.o(.text); src/npc/ministerPotho.o(.text); src/npc/npc26.o(.text); - asm/vaati.o(.text); + src/npc/vaati.o(.text); src/npc/zelda.o(.text); src/npc/mutoh.o(.text); src/npc/carpenter.o(.text); @@ -625,7 +625,7 @@ SECTIONS { src/npc/townMinish.o(.text); src/npc/librari.o(.text); src/npc/percy.o(.text); - asm/vaatiReborn.o(.text); + src/npc/vaatiReborn.o(.text); src/npc/moblinLady.o(.text); src/npc/librarians.o(.text); src/npc/farmers.o(.text); @@ -892,7 +892,7 @@ SECTIONS { src/object/objectB2.o(.text); asm/objectB3.o(.text); asm/objectB4.o(.text); - asm/objectB5.o(.text); + src/object/objectB5.o(.text); asm/objectB6.o(.text); src/object/well.o(.text); asm/windTribeTeleporter.o(.text); @@ -924,43 +924,43 @@ SECTIONS { asm/code_080A5574.o(.text); src/playerItem/playerItemSword.o(.text); asm/code_080A7C00.o(.text); - src/projectile/projectile0.o(.text); - src/projectile/projectile1.o(.text); - src/projectile/projectile2.o(.text); - src/projectile/projectile3.o(.text); - src/projectile/projectile4.o(.text); + src/projectile/darkNutSwordSlash.o(.text); + src/projectile/rockProjectile.o(.text); + src/projectile/boneProjectile.o(.text); + src/projectile/moblinSpear.o(.text); + src/projectile/dekuSeedProjectile.o(.text); src/projectile/projectile5.o(.text); - src/projectile/projectile6.o(.text); - src/projectile/projectile7.o(.text); - src/projectile/projectile8.o(.text); - src/projectile/projectile9.o(.text); - src/projectile/projectileA.o(.text); - src/projectile/projectileB.o(.text); - src/projectile/projectileC.o(.text); - src/projectile/projectileD.o(.text); - src/projectile/projectileE.o(.text); - src/projectile/projectileF.o(.text); - src/projectile/projectile10.o(.text); - src/projectile/projectile11.o(.text); - src/projectile/projectile12.o(.text); - src/projectile/projectile13.o(.text); - src/projectile/projectile14.o(.text); - src/projectile/projectile15.o(.text); - src/projectile/projectile16.o(.text); - src/projectile/projectile17.o(.text); - src/projectile/projectile18.o(.text); - src/projectile/projectile19.o(.text); - src/projectile/projectile1A.o(.text); - src/projectile/projectile1B.o(.text); - src/projectile/projectile1C.o(.text); - src/projectile/projectile1D.o(.text); - src/projectile/projectile1E.o(.text); - src/projectile/projectile1F.o(.text); - src/projectile/projectile20.o(.text); - src/projectile/projectile21.o(.text); - src/projectile/projectile22.o(.text); - src/projectile/projectile23.o(.text); - src/projectile/projectile24.o(.text); + src/projectile/dirtBallProjectile.o(.text); + src/projectile/windProjectile.o(.text); + src/projectile/fireProjectile.o(.text); + src/projectile/iceProjectile.o(.text); + src/projectile/gleerokProjectile.o(.text); + src/projectile/keatonDagger.o(.text); + src/projectile/guardLineOfSight.o(.text); + src/projectile/arrowProjectile.o(.text); + src/projectile/mazaalEnergyBeam.o(.text); + src/projectile/octorokBossProjectile.o(.text); + src/projectile/stalfosProjectile.o(.text); + src/projectile/lakituCloudProjectile.o(.text); + src/projectile/lakituLightning.o(.text); + src/projectile/mandiblesProjectile.o(.text); + src/projectile/removableDust.o(.text); + src/projectile/spiderWeb.o(.text); + src/projectile/torchTrapProjectile.o(.text); + src/projectile/guruguruBarProjectile.o(.text); + src/projectile/v1DarkMagicProjectile.o(.text); + src/projectile/ballAndChain.o(.text); + src/projectile/v1FireProjectile.o(.text); + src/projectile/cannonballProjectile.o(.text); + src/projectile/v1EyeLaser.o(.text); + src/projectile/winder.o(.text); + src/projectile/spikedRollers.o(.text); + src/projectile/v2Projectile.o(.text); + src/projectile/v3HandProjectile.o(.text); + src/projectile/v3ElectricProjectile.o(.text); + src/projectile/gyorgTail.o(.text); + src/projectile/gyorgMaleEnergyProjectile.o(.text); + src/projectile/v3TennisBallProjectile.o(.text); src/playerItem/playerItem10.o(.text); src/playerItem/playerItem13.o(.text); src/intro.o(.text); @@ -1067,7 +1067,7 @@ SECTIONS { src/enemy/wallMaster2.o(.rodata); data/const/enemy/gleerok.o(.rodata); data/animations/enemy/gleerok.o(.rodata); - data/const/enemy/vaatiEyesMacro.o(.rodata); + src/enemy/vaatiEyesMacro.o(.rodata); data/animations/enemy/vaatiEyesMacro.o(.rodata); data/const/enemy/tektite.o(.rodata); data/animations/enemy/tektite.o(.rodata); @@ -1131,21 +1131,21 @@ SECTIONS { data/animations/enemy/lakitu.o(.rodata); src/enemy/lakituCloud.o(.rodata); data/const/enemy/enemy49.o(.rodata); - data/const/enemy/vaatiRebornEnemy.o(.rodata); + src/enemy/vaatiRebornEnemy.o(.rodata); data/animations/enemy/vaatiRebornEnemy.o(.rodata); - data/const/enemy/vaatiProjectile.o(.rodata); + src/enemy/vaatiProjectile.o(.rodata); data/animations/enemy/vaatiProjectile.o(.rodata); data/const/enemy/ballChainSoldier.o(.rodata); data/animations/enemy/ballChainSoldier.o(.rodata); data/const/enemy/enemy4D.o(.rodata); data/const/enemy/ghini.o(.rodata); data/animations/enemy/ghini.o(.rodata); - data/const/enemy/vaatiTransfigured.o(.rodata); + src/enemy/vaatiTransfigured.o(.rodata); data/animations/enemy/vaatiTransfigured.o(.rodata); data/const/enemy/enemy50.o(.rodata); - data/const/enemy/vaatiWrath.o(.rodata); + src/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); @@ -1156,16 +1156,16 @@ SECTIONS { data/const/enemy/fireballGuy.o(.rodata); data/animations/enemy/fireballGuy.o(.rodata); data/const/enemy/miniFireballGuy.o(.rodata); - data/const/enemy/enemy5A.o(.rodata); - data/animations/enemy/enemy5A.o(.rodata); + src/enemy/vaatiTransfiguredEye.o(.rodata); + data/animations/enemy/vaatiTransfiguredEye.o(.rodata); data/const/enemy/businessScrubPrologue.o(.rodata); data/const/enemy/gyorgFemale.o(.rodata); src/enemy/gyorgMale.o(.rodata); data/animations/enemy/gyorgMale.o(.rodata); data/const/enemy/curtain.o(.rodata); data/animations/enemy/curtain.o(.rodata); - data/const/enemy/enemy5F.o(.rodata); - data/animations/enemy/enemy5F.o(.rodata); + src/enemy/vaatiWrathEye.o(.rodata); + data/animations/enemy/vaatiWrathEye.o(.rodata); data/const/enemy/gyorgChild.o(.rodata); data/animations/enemy/gyorgChild.o(.rodata); data/const/enemy/gyorgFemaleEye.o(.rodata); @@ -1304,7 +1304,7 @@ SECTIONS { data/animations/npc/ministerPotho.o(.rodata); src/npc/npc26.o(.rodata); data/animations/npc/npc26.o(.rodata); - data/const/npc/vaati.o(.rodata); + src/npc/vaati.o(.rodata); data/animations/npc/vaati.o(.rodata); data/const/npc/zelda.o(.rodata); data/const/npc/mutoh.o(.rodata); @@ -1341,7 +1341,7 @@ SECTIONS { data/animations/npc/librari.o(.rodata); data/const/npc/percy.o(.rodata); data/animations/npc/percy.o(.rodata); - data/const/npc/vaatiReborn.o(.rodata); + src/npc/vaatiReborn.o(.rodata); data/animations/npc/vaatiReborn.o(.rodata); data/const/npc/moblinLady.o(.rodata); data/animations/npc/moblinLady.o(.rodata); @@ -1655,62 +1655,62 @@ data/const/object/object1D.o(.rodata); data/data_08127280.o(.rodata); data/const/playerItem/playerItemSword.o(.rodata); data/data_08129320.o(.rodata); - data/const/projectile/projectile0.o(.rodata); - data/const/projectile/projectile1.o(.rodata); - data/animations/projectile/projectile1.o(.rodata); - data/const/projectile/projectile2.o(.rodata); - data/animations/projectile/projectile2.o(.rodata); - data/const/projectile/projectile3.o(.rodata); - data/const/projectile/projectile4.o(.rodata); - data/const/projectile/projectile5.o(.rodata); - data/const/projectile/projectile6.o(.rodata); - data/animations/projectile/projectile6.o(.rodata); - data/const/projectile/projectile7.o(.rodata); - data/animations/projectile/projectile7.o(.rodata); - data/const/projectile/projectile8.o(.rodata); - data/animations/projectile/projectile8.o(.rodata); - data/const/projectile/projectile9.o(.rodata); - data/animations/projectile/projectile9.o(.rodata); - data/const/projectile/projectileA.o(.rodata); - data/const/projectile/projectileB.o(.rodata); - data/const/projectile/projectileC.o(.rodata); - data/const/projectile/projectileD.o(.rodata); - data/animations/projectile/projectileD.o(.rodata); - data/const/projectile/projectileE.o(.rodata); - data/animations/projectile/projectileE.o(.rodata); - data/const/projectile/projectileF.o(.rodata); - data/const/projectile/projectile10.o(.rodata); - data/const/projectile/projectile11.o(.rodata); - data/animations/projectile/projectile11.o(.rodata); - data/const/projectile/projectile12.o(.rodata); - data/animations/projectile/projectile12.o(.rodata); - data/const/projectile/projectile13.o(.rodata); - data/animations/projectile/projectile13.o(.rodata); - data/const/projectile/projectile14.o(.rodata); - data/const/projectile/projectile15.o(.rodata); - data/animations/projectile/projectile15.o(.rodata); - data/const/projectile/projectile16.o(.rodata); - data/animations/projectile/projectile16.o(.rodata); - data/const/projectile/projectile18.o(.rodata); - data/animations/projectile/projectile18.o(.rodata); - data/const/projectile/projectile19.o(.rodata); - data/const/projectile/projectile1A.o(.rodata); - data/const/projectile/projectile1B.o(.rodata); - data/animations/projectile/projectile1B.o(.rodata); - data/const/projectile/projectile1C.o(.rodata); - data/animations/projectile/projectile1C.o(.rodata); - data/const/projectile/projectile1D.o(.rodata); - data/const/projectile/projectile1E.o(.rodata); - data/animations/projectile/projectile1E.o(.rodata); - data/const/projectile/projectile1F.o(.rodata); - data/animations/projectile/projectile1F.o(.rodata); - data/const/projectile/projectile20.o(.rodata); - data/animations/projectile/projectile20.o(.rodata); - data/const/projectile/projectile21.o(.rodata); - data/const/projectile/projectile22.o(.rodata); - data/const/projectile/projectile23.o(.rodata); - data/animations/projectile/projectile23.o(.rodata); - data/const/projectile/projectile24.o(.rodata); + src/projectile/darkNutSwordSlash.o(.rodata); + src/projectile/rockProjectile.o(.rodata); + data/animations/projectile/rockProjectile.o(.rodata); + src/projectile/boneProjectile.o(.rodata); + data/animations/projectile/boneProjectile.o(.rodata); + src/projectile/moblinSpear.o(.rodata); + src/projectile/dekuSeedProjectile.o(.rodata); + src/projectile/projectile5.o(.rodata); + src/projectile/dirtBallProjectile.o(.rodata); + data/animations/projectile/dirtBallProjectile.o(.rodata); + src/projectile/windProjectile.o(.rodata); + data/animations/projectile/windProjectile.o(.rodata); + src/projectile/fireProjectile.o(.rodata); + data/animations/projectile/fireProjectile.o(.rodata); + src/projectile/iceProjectile.o(.rodata); + data/animations/projectile/iceProjectile.o(.rodata); + src/projectile/gleerokProjectile.o(.rodata); + src/projectile/keatonDagger.o(.rodata); + src/projectile/guardLineOfSight.o(.rodata); + src/projectile/arrowProjectile.o(.rodata); + data/animations/projectile/arrowProjectile.o(.rodata); + src/projectile/mazaalEnergyBeam.o(.rodata); + data/animations/projectile/mazaalEnergyBeam.o(.rodata); + src/projectile/octorokBossProjectile.o(.rodata); + src/projectile/stalfosProjectile.o(.rodata); + src/projectile/lakituCloudProjectile.o(.rodata); + data/animations/projectile/lakituCloudProjectile.o(.rodata); + src/projectile/lakituLightning.o(.rodata); + data/animations/projectile/lakituLightning.o(.rodata); + src/projectile/mandiblesProjectile.o(.rodata); + data/animations/projectile/mandiblesProjectile.o(.rodata); + src/projectile/removableDust.o(.rodata); + src/projectile/spiderWeb.o(.rodata); + data/animations/projectile/spiderWeb.o(.rodata); + src/projectile/torchTrapProjectile.o(.rodata); + data/animations/projectile/torchTrapProjectile.o(.rodata); + src/projectile/v1DarkMagicProjectile.o(.rodata); + data/animations/projectile/v1DarkMagicProjectile.o(.rodata); + src/projectile/ballAndChain.o(.rodata); + src/projectile/v1FireProjectile.o(.rodata); + src/projectile/cannonballProjectile.o(.rodata); + data/animations/projectile/cannonballProjectile.o(.rodata); + src/projectile/v1EyeLaser.o(.rodata); + data/animations/projectile/v1EyeLaser.o(.rodata); + src/projectile/winder.o(.rodata); + src/projectile/spikedRollers.o(.rodata); + data/animations/projectile/spikedRollers.o(.rodata); + src/projectile/v2Projectile.o(.rodata); + data/animations/projectile/v2Projectile.o(.rodata); + src/projectile/v3HandProjectile.o(.rodata); + data/animations/projectile/v3HandProjectile.o(.rodata); + src/projectile/v3ElectricProjectile.o(.rodata); + src/projectile/gyorgTail.o(.rodata); + src/projectile/gyorgMaleEnergyProjectile.o(.rodata); + data/animations/projectile/gyorgMaleEnergyProjectile.o(.rodata); + src/projectile/v3TennisBallProjectile.o(.rodata); data/const/playerItem/playerItem10.o(.rodata); data/data_0812AA88.o(.rodata); data/const/playerItem/playerItem13.o(.rodata); diff --git a/src/enemy.c b/src/enemy.c index 88f48905..523d9b61 100644 --- a/src/enemy.c +++ b/src/enemy.c @@ -94,12 +94,12 @@ void (*const gEnemyFunctions[])(Entity* ent) = { [MINI_SLIME] = MiniSlime, [FIREBALL_GUY] = FireballGuy, [MINI_FIREBALL_GUY] = MiniFireballGuy, - [ENEMY_5A] = Enemy5A, + [VAATI_TRANSFIGURED_EYE] = VaatiTransfiguredEye, [BUSINESS_SCRUB_PROLOGUE] = BusinessScrubPrologue, [GYORG_FEMALE] = GyorgFemale, [GYORG_MALE] = GyorgMale, [CURTAIN] = Curtain, - [ENEMY_5F] = Enemy5F, + [VAATI_WRATH_EYE] = VaatiWrathEye, [GYORG_CHILD] = GyorgChild, [GYORG_FEMALE_EYE] = GyorgFemaleEye, [ENEMY_62] = Enemy62, diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c index d15eb877..3d592781 100644 --- a/src/enemy/businessScrub.c +++ b/src/enemy/businessScrub.c @@ -138,7 +138,7 @@ void sub_08028A74(Entity* this) { unk = 1; sub_080290FC(this); if (this->frames.all & 1) { - Entity* ent = sub_0804A98C(this, 4, 0); + Entity* ent = CreateProjectileWithParent(this, 4, 0); if (ent != NULL) { ent->parent = this; ent->direction = this->direction; diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c index 6f9d08e7..4ede2e2d 100644 --- a/src/enemy/darkNut.c +++ b/src/enemy/darkNut.c @@ -224,7 +224,7 @@ void sub_08020F48(Entity* this) { this->action = 14; sub_08021218(this, 13, uVar2 >> 3); - pEVar3 = sub_0804A98C(this, 0, 1); + pEVar3 = CreateProjectileWithParent(this, 0, 1); if (pEVar3) { pEVar3->parent = this; this->attachedEntity = pEVar3; @@ -270,7 +270,7 @@ void sub_08021010(Entity* this) { void sub_08021038(Entity* this) { if (this->attachedEntity == NULL && this->frames.all) { - Entity* pEVar2 = (Entity*)sub_0804A98C(this, 0, 0); + Entity* pEVar2 = (Entity*)CreateProjectileWithParent(this, 0, 0); if (pEVar2) { pEVar2->parent = this; this->attachedEntity = pEVar2; @@ -309,7 +309,7 @@ void sub_080210E4(Entity* this) { Entity* ent; this->frames.all &= ~1; - ent = sub_0804A98C(this, 0, 2); + ent = CreateProjectileWithParent(this, 0, 2); if (ent) { ent->parent = this; this->attachedEntity = ent; @@ -569,7 +569,7 @@ void sub_0802159C(Entity* this) { this->frames.all = 0; this->damageType = 0x51; - ent = sub_0804A98C(this, 0, 3); + ent = CreateProjectileWithParent(this, 0, 3); if (ent) { ent->parent = this; this->attachedEntity = ent; @@ -590,7 +590,7 @@ void sub_08021600(Entity* this) { this->frames.all = 0; this->damageType = 0x51; - ent = sub_0804A98C(this, 0, 4); + ent = CreateProjectileWithParent(this, 0, 4); if (ent) { ent->parent = this; this->attachedEntity = ent; diff --git a/src/enemy/enemy4D.c b/src/enemy/enemy4D.c index a29157bc..0049a853 100644 --- a/src/enemy/enemy4D.c +++ b/src/enemy/enemy4D.c @@ -36,7 +36,7 @@ void sub_0803EB44(Entity* this) { Entity* pEVar1; sub_0804A720(this); - pEVar1 = sub_0804A98C(this, 0x19, 0); + pEVar1 = CreateProjectileWithParent(this, 0x19, 0); if (pEVar1 != NULL) { pEVar1->parent = this; this->attachedEntity = pEVar1; diff --git a/src/enemy/gyorgMale.c b/src/enemy/gyorgMale.c index 921784df..effceb3b 100644 --- a/src/enemy/gyorgMale.c +++ b/src/enemy/gyorgMale.c @@ -109,7 +109,7 @@ void GyorgMale(Entity* this) { } void sub_08046898(Entity* this) { - Entity* tmp = sub_080A7EE0(0x22); + Entity* tmp = CreateProjectile(0x22); u32 tmp2; if (!tmp) return; @@ -402,7 +402,7 @@ void sub_08046EF4(Entity* this) { if ((--this->field_0xf & 0xFF) == 0) { Entity* tmp; this->field_0xf = (Random() & 0x38) + 0x78; - tmp = sub_080A7EE0(0x23); + tmp = CreateProjectile(0x23); if (tmp) { tmp->collisionLayer = 2; tmp->parent = this; @@ -426,7 +426,7 @@ void sub_08046F64(Entity* this) { if (--this->field_0x7c.HALF.HI == 0) { Entity* tmp; this->field_0x7c.HALF.HI = 0x78; - tmp = sub_080A7EE0(0x23); + tmp = CreateProjectile(0x23); if (tmp) { tmp->collisionLayer = 2; tmp->parent = this; diff --git a/src/enemy/keaton.c b/src/enemy/keaton.c index 79e98065..df748792 100644 --- a/src/enemy/keaton.c +++ b/src/enemy/keaton.c @@ -232,7 +232,7 @@ void sub_08032794(Entity* this) { void sub_080327C8(Entity* this) { Entity* child; - child = sub_0804A98C(this, 11, 0); + child = CreateProjectileWithParent(this, 11, 0); if (child != NULL) { child->parent = this; this->attachedEntity = child; diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c index cd9ce2b2..d97bec40 100644 --- a/src/enemy/lakitu.c +++ b/src/enemy/lakitu.c @@ -117,7 +117,7 @@ void sub_0803C86C(Entity* this) { } void Lakitu_Initialize(Entity* this) { - Entity* cloud = sub_0804A98C(this, 17, 0); + Entity* cloud = CreateProjectileWithParent(this, 17, 0); if (cloud == NULL) { return; } @@ -303,7 +303,7 @@ void Lakitu_SpawnLightning(Entity* this) { Entity* lightning; const OffsetCoords* offset; - lightning = sub_0804A98C(this, 18, 0); + lightning = CreateProjectileWithParent(this, 18, 0); if (lightning == NULL) { return; diff --git a/src/enemy/mazaalHead.c b/src/enemy/mazaalHead.c index 1672b5c4..bfa45e69 100644 --- a/src/enemy/mazaalHead.c +++ b/src/enemy/mazaalHead.c @@ -779,7 +779,7 @@ NONMATCH("asm/non_matching/mazaal/sub_08034B38.inc", void sub_08034B38(Entity* t this->action = 3; InitializeAnimation(this, this->type + 3); } else { - target = sub_080A7EE0(0xe); + target = CreateProjectile(0xe); if (target != NULL) { target->type -= 2; if (target->type == 0) { diff --git a/src/enemy/octorok.c b/src/enemy/octorok.c index 565ed259..525ad1bf 100644 --- a/src/enemy/octorok.c +++ b/src/enemy/octorok.c @@ -126,7 +126,7 @@ void Octorok_Move(Entity* this) { void Octorok_ShootNut(Entity* this) { GetNextFrame(this); if (this->frames.all & 1) { - Entity* ent = sub_0804A98C(this, 1, 0); + Entity* ent = CreateProjectileWithParent(this, 1, 0); if (ent) { const s8* off; ent->direction = this->direction; diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c index 1277f0c6..698edc94 100644 --- a/src/enemy/pesto.c +++ b/src/enemy/pesto.c @@ -170,7 +170,7 @@ void sub_080240B8(Entity* this) { Entity* ent; this->field_0x82.HALF.HI = 0; - ent = sub_0804A98C(this, 6, this->field_0x82.HALF.HI); + ent = CreateProjectileWithParent(this, 6, this->field_0x82.HALF.HI); if (ent) { this->attachedEntity = ent; ent->parent = this; @@ -413,7 +413,7 @@ void sub_080244E8(Entity* this) { this->height.HALF.HI -= 0xe; this->field_0x78.HWORD -= 0xe; - ent = sub_0804A98C(this, 6, this->field_0x82.HALF.HI); + ent = CreateProjectileWithParent(this, 6, this->field_0x82.HALF.HI); if (ent) { ent->parent = this; ent->height.HALF.HI += 0xe; @@ -436,7 +436,7 @@ void sub_080244E8(Entity* this) { this->height.HALF.HI -= 0xe; this->field_0x78.HWORD -= 0xe; - ent = sub_0804A98C(this, 6, this->field_0x82.HALF.HI); + ent = CreateProjectileWithParent(this, 6, this->field_0x82.HALF.HI); if (ent) { ent->parent = this; ent->height.HALF.HI += 0xe; diff --git a/src/enemy/spearMoblin.c b/src/enemy/spearMoblin.c index b12186e0..68f52f04 100644 --- a/src/enemy/spearMoblin.c +++ b/src/enemy/spearMoblin.c @@ -94,7 +94,7 @@ void sub_08028314(Entity* this) { sub_08028604(this); } - pEVar2 = sub_080A7EE0(3); + pEVar2 = CreateProjectile(3); if (pEVar2 != NULL) { pEVar2->parent = this; this->attachedEntity = pEVar2; diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c new file mode 100644 index 00000000..66aa67c9 --- /dev/null +++ b/src/enemy/vaatiArm.c @@ -0,0 +1,1474 @@ +#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 defined EU || defined JP || defined DEMO_JP + if (gRoomControls.roomOriginY + gRoomControls.height + -0x20 < y) { + y = gRoomControls.roomOriginY + gRoomControls.height + -0x20; + } +#else + if (gRoomControls.roomOriginY + gRoomControls.height + -0x40 < y) { + y = gRoomControls.roomOriginY + gRoomControls.height + -0x40; + } +#endif + 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 = CreateProjectile(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) { +#if defined EU || defined JP + Entity* e1 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + if ((e1->bitfield == 0x9d)) { + sub_08043D08(this); + return 1; + } else { + return 0; + } +#else + 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; + } +#endif +} + +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); +} + +void sub_08043DB0(Entity* this) { + s32 cVar1; + Entity* pEVar2; + Entity* pEVar3; + Entity* pEVar4; + + if (((gPlayerState.flags.all & 0x80) != 0)) { + pEVar3 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + if (CheckPlayerInRegion(pEVar3->x.HALF.HI - gRoomControls.roomOriginX, + pEVar3->y.HALF.HI - gRoomControls.roomOriginY + 2, 3, 3)) { + DoExitTransition((ScreenTransitionData*)&gUnk_080D13EC); + if ((gScreenTransition.field_0x39 & 3) != 3) { + gScreenTransition.roomID = 1; + } + cVar1 = this->field_0x7a.HWORD; + gScreenTransition.field_0x3d = 0x1e - (cVar1 / 0x3c); + gScreenTransition.field_0x3c = this->type2; + pEVar2 = ((VaatiArm_HeapStruct*)this->myHeap)->parent; + gScreenTransition.field_0x40 = pEVar2->x.HALF.HI; + gScreenTransition.field_0x42 = pEVar2->y.HALF.HI; + pEVar4 = ((VaatiArm_HeapStruct*)pEVar2->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; + } + pEVar4 = (Entity*)(*(int*)((VaatiArm_HeapStruct*)pEVar2->myHeap)->s1); + if (pEVar4 != NULL) { + gScreenTransition.field_0x48 = pEVar4->x.HALF.HI; + gScreenTransition.field_0x4a = pEVar4->y.HALF.HI; + } else { + gScreenTransition.field_0x48 = gRoomControls.roomOriginX + 0x110; + gScreenTransition.field_0x4a = gRoomControls.roomOriginY + 0x60; + } + } + } +} + +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); +} diff --git a/src/enemy/vaatiBall.c b/src/enemy/vaatiBall.c index 903a84db..00c3f24c 100644 --- a/src/enemy/vaatiBall.c +++ b/src/enemy/vaatiBall.c @@ -185,7 +185,7 @@ void sub_08044868(Entity* this) { if (*(u8*)&vaati->field_0x86 > 1) { u8 draw = this->spriteSettings.b.draw; if (draw == 1 && this->cutsceneBeh.HALF.LO == 0) { - vaati = sub_0804A98C(this, 0x18, 0); + vaati = CreateProjectileWithParent(this, 0x18, 0); if (vaati) { vaati->type2 = 1; vaati->parent = this; @@ -275,7 +275,7 @@ void sub_080449F8(Entity* this) { this->field_0x74.HALF.LO++; draw = this->spriteSettings.b.draw; if (draw) { - vaati = sub_0804A98C(this, 0x1c, 0); + vaati = CreateProjectileWithParent(this, 0x1c, 0); if (vaati) { vaati->y.HALF.HI += 4; vaati->parent = this; diff --git a/src/enemy/vaatiEyesMacro.c b/src/enemy/vaatiEyesMacro.c new file mode 100644 index 00000000..f2d3041d --- /dev/null +++ b/src/enemy/vaatiEyesMacro.c @@ -0,0 +1,302 @@ +#include "global.h" +#include "enemy.h" +#include "audio.h" +#include "random.h" +#include "functions.h" + +extern u32 sub_080002E0(u32, u32); +extern s16 gUnk_080B4488[]; + +void VaatiEyesMacroFunction0(Entity*); +void VaatiEyesMacroFunction1(Entity*); +void VaatiEyesMacroFunction0Type0(Entity*); +void VaatiEyesMacroFunction0Type1(Entity*); +void VaatiEyesMacroFunction0Type2(Entity*); +void VaatiEyesMacroFunction0Type3(Entity*); +void VaatiEyesMacroFunction0Type0Action0(Entity*); +void VaatiEyesMacroFunction0Type0Action1(Entity*); +void VaatiEyesMacroFunction0Type1Action0(Entity*); +void VaatiEyesMacroFunction0Type1Action1(Entity*); +void sub_0802EF90(Entity*); +void sub_0802EFB8(Entity*); +void sub_0802EF58(Entity*); +void sub_0802F04C(Entity*); + +void (*const vaatiEyesMacroFunctions[])(Entity*) = { + VaatiEyesMacroFunction0, VaatiEyesMacroFunction1, sub_08001324, sub_0804A7D4, sub_08001242, VaatiEyesMacroFunction0, +}; +void (*const vaatiEyesMacroFunction0Types[])(Entity*) = { + VaatiEyesMacroFunction0Type0, + VaatiEyesMacroFunction0Type1, + VaatiEyesMacroFunction0Type2, + VaatiEyesMacroFunction0Type3, +}; +void (*const vaatiEyesMacroFunction0Type0Actions[])(Entity*) = { + VaatiEyesMacroFunction0Type0Action0, + VaatiEyesMacroFunction0Type0Action1, +}; +void (*const vaatiEyesMacroFunction0Type1Actions[])(Entity*) = { + VaatiEyesMacroFunction0Type1Action0, + VaatiEyesMacroFunction0Type1Action1, +}; +const u8 gUnk_080CDE6C[] = { 0, 8, 0x18, 0 }; +const u8 gUnk_080CDE70[] = { + 9, 9, 8, 9, 8, 8, 8, 7, 7, 7, 6, 7, 6, 6, 6, 5, 5, 5, 12, 5, 12, 12, 12, 11, 11, 11, 10, 11, 10, 10, 10, 9, +}; +const s8 gUnk_080CDE90[] = { -2, -3, -4, -5, -6, -5, -4, -3 }; +const u16 gUnk_080CDE98[] = { 0xc0, 0x100, 0x140, 0x180 }; + +extern u8 gEntCount; + +void VaatiEyesMacro(Entity* this) { + vaatiEyesMacroFunctions[GetNextFunction(this)](this); + SetChildOffset(this, 0, 1, -0x10); +} + +void VaatiEyesMacroFunction0(Entity* this) { + vaatiEyesMacroFunction0Types[this->type](this); + if (this->type < 2) { + sub_0802EF90(this); + } +} + +void VaatiEyesMacroFunction1(Entity* this) { + if (this->type == 0) { + if (this->currentHealth == 0) { + gScreenTransition.field_0x39 &= ~(1 << (gScreenTransition.field_0x3c + 2)); + } + if (gRoomControls.roomID == 0) { + gScreenTransition.field_0x3a = this->currentHealth; + } else { + gScreenTransition.field_0x3b = this->currentHealth; + } + if (this->field_0x78.HALF.HI != this->currentHealth) { + EnqueueSFX(SFX_17A); + } + this->field_0x78.HALF.HI = this->currentHealth; + } else { + if (this->type == 1) { + if (0 < this->iframes) { + this->iframes *= -1; + } + if (this->currentHealth != 0xff) { + EnqueueSFX(SFX_BUTTON_DEPRESS); + } + this->currentHealth = 0xff; + } + } + if (this->field_0x43 != 0) { + sub_0804A9FC(this, 0x1c); + } + sub_0804AA30(this, vaatiEyesMacroFunctions); +} + +void VaatiEyesMacroFunction0Type0(Entity* this) { + vaatiEyesMacroFunction0Type0Actions[this->action](this); +} + +void VaatiEyesMacroFunction0Type0Action0(Entity* this) { + Manager* manager; + Entity* enemy; + + if ((gEntCount < 0x47) && (manager = GetEmptyManager(), manager != NULL)) { + manager->type = 9; + manager->subtype = 0x34; + manager->parent = (Manager*)this; + AppendEntityToList((Entity*)manager, 8); + enemy = CreateEnemy(VAATI_EYES_MACRO, 2); + enemy->parent = this; + this->action = 1; + if (gRoomControls.roomID == 0) { + this->field_0x78.HALF.HI = this->currentHealth = gScreenTransition.field_0x3a; + } else { + this->field_0x78.HALF.HI = this->currentHealth = gScreenTransition.field_0x3b; + } + this->field_0x78.HALF.LO = Random(); + sub_0802EFB8(this); + InitializeAnimation(this, 0); + sub_0802EF58(this); + } +} + +void VaatiEyesMacroFunction0Type0Action1(Entity* this) { + sub_0802F04C(this); + GetNextFrame(this); +} + +void VaatiEyesMacroFunction0Type1(Entity* this) { + vaatiEyesMacroFunction0Type1Actions[this->action](this); +} + +void VaatiEyesMacroFunction0Type1Action0(Entity* this) { + Entity* entity; + u32 rand; + + if (gEntCount < 0x47) { + entity = CreateEnemy(VAATI_EYES_MACRO, 3); + entity->parent = this; + this->action = 1; + rand = Random(); + this->actionDelay = (rand & 3) + 1; + this->field_0x78.HALF.LO = Random() >> 8; + this->direction = gUnk_080CDE6C[rand >> 0x10 & 3]; + InitializeAnimation(this, 1); + } +} + +void VaatiEyesMacroFunction0Type1Action1(Entity* this) { + if (this->parent->next == NULL) { + this->flags &= 0x7f; + this->currentHealth = 0; + } else { + sub_0802F04C(this); + GetNextFrame(this); + } +} + +typedef struct xy { + u8 x; + u8 y; +} xy; + +void VaatiEyesMacroFunction0Type2(Entity* this) { + u32 uVar2; + xy* temp; + + if (this->parent->next == NULL) { + DeleteThisEntity(); + } + if (this->action == 0) { + this->action = 1; + this->animationState = 0xff; + } + CopyPositionAndSpriteOffset(this->parent, this); + uVar2 = (GetFacingDirection(this, &gPlayerEntity) + 1) & 0x1e; + temp = (xy*)&gUnk_080CDE70[uVar2]; + if (temp->x != this->frameIndex) { + if (temp->y != this->frameIndex) { + this->frameIndex = temp->x; + } + } + this->y.HALF.HI++; + this->spriteOffsetY -= 1; +} + +void VaatiEyesMacroFunction0Type3(Entity* this) { + if (this->parent->next == NULL) { + DeleteThisEntity(); + } + if (this->action == 0) { + this->action = 1; + this->frameIndex = 0x11; + this->spritePriority.b0 = 6; + } + CopyPositionAndSpriteOffset(this->parent, this); + this->height.HALF.HI = 0; +} + +void sub_0802EF58(Entity* this) { + Entity* entity; + u32 i; + + for (i = 0; i < 7; i++) { + entity = CreateEnemy(VAATI_EYES_MACRO, 1); + if (entity != NULL) { + entity->type2 = i; + entity->collisionLayer = 1; + entity->parent = this; + UpdateSpriteForCollisionLayer(entity); + CopyPosition(this, entity); + } + } +} + +void sub_0802EF90(Entity* this) { + this->height.HALF.HI = gUnk_080CDE90[this->field_0x78.HALF.LO++ >> 3 & 7]; +} + +void sub_0802EFB8(Entity* this) { + u32 uVar1; + u32 rand; + u32 uVar3; + int iVar4; + + rand = Random(); + if ((rand >> 0x10 & 3) != 0) { + uVar1 = rand & 0x18; + } else { + uVar3 = GetFacingDirection(&gPlayerEntity, this); + uVar1 = (uVar3 + 4) & 0x18; + } + iVar4 = sub_080002E0(TILE(this->x.HALF.HI, this->y.HALF.HI) + gUnk_080B4488[((uVar1) >> 3)], 1); + if (iVar4 != 0) { + this->direction = 0xff; + } else { + this->actionDelay = (rand & 3) + 1; + this->direction = (uVar1 & 0x18); + this->speed = gUnk_080CDE98[rand >> 0x18 & 3]; + } +} + +void sub_0802F04C(Entity* this) { + s32 oldX; + s32 oldY; + + oldX = this->x.HALF.HI; + oldY = this->y.HALF.HI; + if (ProcessMovement(this) == 0) { + sub_0802EFB8(this); + return; + } + switch (this->direction >> 3) { + case 0: + if (((oldY & 0xf) > 8) && ((this->y.HALF.HI & 0xf) < 9)) { + this->actionDelay--; + oldY = (this->y.HALF.HI & 0xfff0) + 8; + } + if (this->actionDelay == 0) { + this->x.HALF.HI = oldX; + this->y.HALF.HI = oldY; + } else { + return; + } + break; + case 1: + if (((oldX & 0xf) < 8) && ((this->x.HALF.HI & 0xf) >= 8)) { + this->actionDelay--; + oldX = (this->x.HALF.HI & 0xfff0) + 8; + } + if (this->actionDelay == 0) { + this->x.HALF.HI = oldX; + this->y.HALF.HI = oldY; + } else { + return; + } + break; + case 2: + if (((oldY & 0xf) < 8) && ((this->y.HALF.HI & 0xf) >= 8)) { + this->actionDelay--; + oldY = (this->y.HALF.HI & 0xfff0) + 8; + } + if (this->actionDelay == 0) { + this->x.HALF.HI = oldX; + this->y.HALF.HI = oldY; + } else { + return; + } + break; + default: + if (((oldX & 0xf) >= 9) && ((this->x.HALF.HI & 0xf) < 9)) { + this->actionDelay--; + oldX = (this->x.HALF.HI & 0xfff0) + 8; + } + if (this->actionDelay == 0) { + this->x.HALF.HI = oldX; + this->y.HALF.HI = oldY; + } else { + return; + } + break; + } + sub_0802EFB8(this); +} diff --git a/src/enemy/vaatiProjectile.c b/src/enemy/vaatiProjectile.c new file mode 100644 index 00000000..1d77249e --- /dev/null +++ b/src/enemy/vaatiProjectile.c @@ -0,0 +1,279 @@ +#include "global.h" +#include "enemy.h" +#include "random.h" +#include "functions.h" + +extern bool32 PlayerInRange(Entity*, u32, u32); +extern void DoExitTransition(ScreenTransitionData*); +extern u32 sub_080002E0(u32, u32); +extern Entity* gUnk_020000B0; +extern const ScreenTransitionData gUnk_0813AB94; + +bool32 sub_0803E4A0(Entity*); +void VaatiProjectileFunction0(Entity*); +void VaatiProjectileFunction1(Entity*); +void sub_08001328(Entity*); +void VaatiProjectileFunction3(Entity*); +void VaatiProjectileNoop(Entity*); +void VaatiProjectileFunction0Action0(Entity*); +void VaatiProjectileFunction0Action1(Entity*); +void VaatiProjectileFunction0Action2(Entity*); +void VaatiProjectileFunction0Action3(Entity*); +void VaatiProjectileFunction0Action4(Entity*); +void VaatiProjectileFunction0Action5(Entity*); +void VaatiProjectileFunction0Action6(Entity*); +void VaatiProjectileFunction0Action7(Entity*); +void VaatiProjectileFunction0Action8(Entity*); +void VaatiProjectileFunction0Action9(Entity*); +void sub_0803E444(Entity*); +void sub_0803E480(Entity*); +void sub_0803E4D8(Entity*); + +void (*const vaatiProjectileFunctions[])(Entity*) = { + VaatiProjectileFunction0, VaatiProjectileFunction1, sub_08001328, VaatiProjectileFunction3, sub_08001242, + VaatiProjectileNoop, +}; +void (*const vaatiProjectileFunction0Actions[])(Entity*) = { + VaatiProjectileFunction0Action0, VaatiProjectileFunction0Action1, VaatiProjectileFunction0Action2, + VaatiProjectileFunction0Action3, VaatiProjectileFunction0Action4, VaatiProjectileFunction0Action5, + VaatiProjectileFunction0Action6, VaatiProjectileFunction0Action7, VaatiProjectileFunction0Action8, + VaatiProjectileFunction0Action9, +}; + +void VaatiProjectile(Entity* this) { + if (sub_0803E4A0(this)) { + this->flags &= 0x7f; + this->currentHealth = 0; + this->parent = NULL; + } + vaatiProjectileFunctions[GetNextFunction(this)](this); +} + +void VaatiProjectileFunction0(Entity* this) { + vaatiProjectileFunction0Actions[this->action](this); +} + +void VaatiProjectileFunction1(Entity* this) { + Entity* entity; + + if (this->bitfield == 0x80) { +#ifndef EU + if (this->currentHealth != 0) { +#endif + this->action = 5; + this->flags = this->flags & 0x7f; + this->spritePriority.b1 = 0; + gPlayerEntity.flags &= 0x7f; + gPlayerEntity.spriteOrientation.flipY = this->spriteOrientation.flipY; + gPlayerEntity.spriteRendering.b3 = this->spriteRendering.b3; + sub_0803E444(this); +#ifndef EU + sub_08078A90(2); + entity = this->parent; + if (entity != NULL) { + entity->flags = entity->flags & 0x7f; + } + } else { + gPlayerState.flags.all &= 0xfffffeff; // using b.unk8 does not match + entity = &gPlayerEntity; + entity->flags = gPlayerEntity.flags | 0x80; + } +#endif + } + sub_0804AA30(this, vaatiProjectileFunctions); +} + +void VaatiProjectileFunction3(Entity* this) { + if (this->parent != NULL) { + this->parent->field_0xf--; + this->parent = NULL; + } + sub_0804A7D4(this); +} + +void VaatiProjectileNoop(Entity* this) { +} + +void VaatiProjectileFunction0Action0(Entity* this) { + Entity* entity; + + if (this->type == 0) { + entity = CreateEnemy(VAATI_PROJECTILE, 1); + if (entity != NULL) { + entity->parent = this; + this->attachedEntity = entity; + if (this->type2 == 0) { + this->action = 1; + this->height.HALF.HI = -0x18; + } else { + this->action = 9; + this->height.HALF.HI = -0x80; + this->flags2 = 1; + } + InitializeAnimation(this, 0); + } + } else { + this->action = 8; + this->flags = this->flags & 0x7f; + this->spriteOffsetY = 1; + this->spriteOrientation.flipY = this->parent->spriteOrientation.flipY; + this->spriteRendering.b3 = this->parent->spriteRendering.b3; + this->spritePriority.b1 = 0; + PositionRelative(this->parent, this, 0, -0x10000); + InitializeAnimation(this, 1); + } +} + +void VaatiProjectileFunction0Action1(Entity* this) { + sub_0803E480(this); + if (PlayerInRange(this, 0, 8) != 0) { + this->action = 2; + this->actionDelay = 10; + InitializeAnimation(this->attachedEntity, 2); + } else { + if (gUnk_020000B0 != NULL) { + sub_08004596(this, GetFacingDirection(this, gUnk_020000B0)); + sub_0806F69C(this); + } + } + GetNextFrame(this); +} + +void VaatiProjectileFunction0Action2(Entity* this) { + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + if (++this->height.HALF.HI == 0) { + this->action = 3; + } + } + GetNextFrame(this); +} + +void VaatiProjectileFunction0Action3(Entity* this) { + if ((this->attachedEntity->frames.b.f3) != 0) { + if (--this->height.HALF.HI <= -0x18) { + this->action = 4; + this->actionDelay = (Random() & 0xf) + 0xf; + InitializeAnimation(this->attachedEntity, 1); + } + GetNextFrame(this); + } +} + +void VaatiProjectileFunction0Action4(Entity* this) { + if (--this->actionDelay == 0) { + this->action = 1; + this->direction = GetFacingDirection(this, &gPlayerEntity); + } + GetNextFrame(this); +} + +void VaatiProjectileFunction0Action5(Entity* this) { + sub_0803E444(this); + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + if (-0x18 < --this->height.HALF.HI) { + return; + } + this->action = 6; + this->actionDelay = 0x14; + } +} + +void VaatiProjectileFunction0Action6(Entity* this) { + if (--this->actionDelay == 0) { + this->action = 7; + this->direction = 0x10; + this->speed = 0x300; + } + sub_0803E444(this); +} + +void VaatiProjectileFunction0Action7(Entity* this) { + sub_0803E444(this); + sub_0806F69C(this); + sub_0803E4D8(this); + if ((gRoomControls.roomOriginY + gRoomControls.height + -0x10) <= this->y.HALF.HI) { + sub_0805E5A8(); + DoExitTransition((ScreenTransitionData*)&gUnk_0813AB94); + } +} + +void VaatiProjectileFunction0Action8(Entity* this) { + if (this->parent->next == NULL) { + DeleteThisEntity(); + } + PositionRelative(this->parent, this, 0, -0x10000); + GetNextFrame(this); +} + +void VaatiProjectileFunction0Action9(Entity* this) { + this->x.HALF.HI = gPlayerEntity.x.HALF.HI; + this->y.HALF.HI = gPlayerEntity.y.HALF.HI; + if (this->height.HALF.HI < -8) { + if (this->animIndex != 2) { + this->actionDelay = 0; + InitializeAnimation(this->attachedEntity, 2); + } + VaatiProjectileFunction0Action2(this); + } else { + this->height.HALF.HI += 8; + } +} + +void sub_0803E444(Entity* this) { + ResetPlayer(); + gPlayerState.field_0x1a[0] = gPlayerState.field_0x1a[0] | 0x80; + gPlayerState.field_0xa = gPlayerState.field_0xa | 0x80; + sub_0806FA90(this, this->field_0x4c, 0, -2); + gPlayerEntity.spriteOffsetY += 0xe; +} + +void sub_0803E480(Entity* this) { + if (this->field_0x78.HWORD >= 0x4b1) { + this->speed = 0x180; + } else { + this->field_0x78.HWORD++; + } +} + +bool32 sub_0803E4A0(Entity* this) { +#ifdef EU + bool32 ret; + if (gScreenTransition.field_0x39 == 0) { + return TRUE; + } else { + if (this->parent == NULL) { + return FALSE; + } + ret = this->parent->next == NULL; + } + return ret; +#else + bool32 ret; + if (gScreenTransition.field_0x39 != 0) { + if (this->parent == NULL) { + return FALSE; + } + if (this->parent->currentHealth == 0) { + return TRUE; + } else { + ret = this->parent->next == NULL; + } + } else { + return TRUE; + } + return ret; +#endif +} + +void sub_0803E4D8(Entity* this) { + u32 tile; + + tile = TILE(this->x.HALF.HI, this->y.HALF.HI + 8); + if (sub_080002E0(tile, gPlayerEntity.collisionLayer) != 0xff) { + SetTile(0x4074, tile, gPlayerEntity.collisionLayer); + } +} diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c new file mode 100644 index 00000000..9df23058 --- /dev/null +++ b/src/enemy/vaatiRebornEnemy.c @@ -0,0 +1,902 @@ +#include "global.h" +#include "enemy.h" +#include "coord.h" +#include "flags.h" +#include "random.h" +#include "audio.h" +#include "area.h" +#include "functions.h" + +extern void sub_080AEFB4(Entity*); +extern u8 gEntCount; + +void VaatiRebornEnemyType0PreAction(Entity*); +void VaatiRebornEnemyType1PreAction(Entity*); +void VaatiRebornEnemyType0Action0(Entity*); +void VaatiRebornEnemyType0Action1(Entity*); +void VaatiRebornEnemyType0Action2(Entity*); +void VaatiRebornEnemyType0Action3(Entity*); +void VaatiRebornEnemyType0Action4(Entity*); +void VaatiRebornEnemyType0Action5(Entity*); +void VaatiRebornEnemyType0Action6(Entity*); +void VaatiRebornEnemyType0Action7(Entity*); +void VaatiRebornEnemyType1Action0(Entity*); +void VaatiRebornEnemyType1Action1(Entity*); +void VaatiRebornEnemyType2Action0(Entity*); +void VaatiRebornEnemyType2Action1(Entity*); +void VaatiRebornEnemyType3Action0(Entity*); +void VaatiRebornEnemyType3Action1(Entity*); +void sub_0803DD78(Entity*); +u32 sub_0803DEE0(Entity*); +u32 sub_0803E028(Entity*); +void sub_0803DC0C(Entity*); + +typedef struct xy { + s8 x; + s8 y; +} PACKED xy; + +void (*const vaatiRebornEnemyType0Actions[])(Entity*) = { + VaatiRebornEnemyType0Action0, VaatiRebornEnemyType0Action1, VaatiRebornEnemyType0Action2, + VaatiRebornEnemyType0Action3, VaatiRebornEnemyType0Action4, VaatiRebornEnemyType0Action5, + VaatiRebornEnemyType0Action6, VaatiRebornEnemyType0Action7, +}; +void (*const vaatiRebornEnemyType1Actions[])(Entity*) = { + VaatiRebornEnemyType1Action0, + VaatiRebornEnemyType1Action1, +}; +void (*const vaatiRebornEnemyType2Actions[])(Entity*) = { + VaatiRebornEnemyType2Action0, + VaatiRebornEnemyType2Action1, +}; +void (*const vaatiRebornEnemyType3Actions[])(Entity*) = { + VaatiRebornEnemyType3Action0, + VaatiRebornEnemyType3Action1, +}; + +const xy gUnk_080D04A8[] = { { 16, -43 }, { -16, -43 } }; +const Coords gUnk_080D04AC[] = { { .HALF = { 0x58, 0x60 } }, + { .HALF = { 0x58, 0x90 } }, + { .HALF = { 0x98, 0x78 } }, + { .HALF = { 0xd8, 0x60 } }, + { .HALF = { 0xd8, 0x90 } } }; +const u8 gUnk_080D04C0[] = { 2, 0, 0, 2, 2, 2, 4, 4 }; +const xy gUnk_080D04C8[] = { { 10, -29 }, { -10, -29 }, { 15, -21 }, { -15, -21 } }; +#ifdef EU +const u8 gUnk_080D04D0[] = { -12, -20, -32 }; +#else +const u8 gUnk_080D04D0[] = { -24, -40, -48 }; +#endif +const u8 gUnk_080D04D3[] = { 0, 1, 0, -1 }; + +void VaatiRebornEnemy(Entity* this) { + switch (this->type) { + case 0: + VaatiRebornEnemyType0PreAction(this); + vaatiRebornEnemyType0Actions[this->action](this); + break; + case 1: + VaatiRebornEnemyType1PreAction(this); + vaatiRebornEnemyType1Actions[this->action](this); + break; + case 2: + vaatiRebornEnemyType2Actions[this->action](this); + break; + case 3: + vaatiRebornEnemyType3Actions[this->action](this); + break; + } +} + +void VaatiRebornEnemyType0Action0(Entity* this) { + s32 i; + Entity* entity; + const xy* ptr; + + if (CheckLocalFlag(0x7b) != 0) { + DeleteThisEntity(); + } + sub_0804A720(this); + if (CheckRoomFlag(0) && (gEntCount < 0x42)) { + ClearRoomFlag(0); + this->action = 3; + this->field_0x74.HALF.LO = -1; + this->actionDelay = 0; + this->field_0x76.HALF.LO = 0; + this->spriteSettings.b.draw = 1; + this->direction = 0xff; + this->spritePriority.b0 = 4; + this->height.WORD = 0; + this->field_0x80.HALF.LO = 2; + this->field_0x86.HALF.LO = 0; + this->cutsceneBeh.HALF.HI = 0x30; + this->cutsceneBeh.HALF.LO = -1; + this->field_0x86.HALF.HI = 0; + this->field_0x82.HALF.LO = 0; + this->field_0x82.HALF.HI = 0; + *(u32*)(&this->field_0x78) = this->x.WORD; + this->field_0x7c = this->y; + entity = CreateEnemy(VAATI_REBORN_ENEMY, 1); + entity->parent = this; + this->attachedEntity = entity; + for (i = 0; i < 6; i++) { + entity = CreateEnemy(VAATI_BALL, 0); + entity->parent = this; + entity->field_0x78.HALF.HI = i; + } + for (i = 0; i < 4; i++) { + entity = CreateEnemy(VAATI_REBORN_ENEMY, 3); + entity->parent = this; + entity->actionDelay = i; + } + for (i = 0; i < 2; i++) { + entity = CreateEnemy(VAATI_BALL, 1); + entity->parent = this; + entity->spriteSettings.b.flipX = i; + ptr = &gUnk_080D04A8[i]; + PositionRelative(this, entity, ptr->x << 0x10, ptr->y << 0x10); + } + InitAnimationForceUpdate(this, 0); + } +} + +void VaatiRebornEnemyType0Action1(Entity* this) { + if (this->actionDelay != 0) { + if (--this->actionDelay == 0) { + if ((this->field_0x74.HALF.LO & 0x70) == 0) { + if (this->attachedEntity->actionDelay == 0) { + sub_0803DD78(this); + if (this->field_0x74.HALF.HI != 0) { + this->action = 2; + this->field_0x74.HALF.LO = 0; + this->actionDelay = 0x10; + this->direction = 0xff; + } else { + if ((this->field_0x86.HALF.LO != 0) || (this->field_0x80.HALF.LO != 0)) { + this->direction = ((Random() & 0x80) >> 3) | 8; + } else { + this->direction = 0xff; + } + } + } else { + this->actionDelay = 2; + } + } else { + this->action = 3; + this->field_0x74.HALF.HI = this->field_0x74.HALF.LO & 0x80; + this->field_0x74.HALF.LO = 0; + this->actionDelay = 0xc0; + this->direction = 0xff; + this->spriteSettings.b.draw = 1; + InitAnimationForceUpdate(this, 0); + } + } + } else { + if (--this->field_0x76.HALF.HI == 0) { + switch (sub_0803DEE0(this)) { + case 0: + this->action = 4; + this->actionDelay = 0xa0; + this->direction = 0xff; + this->cutsceneBeh.HALF.LO = 0xff; + InitAnimationForceUpdate(this, 1); + break; + case 1: + this->action = 6; + this->field_0x74.HALF.LO = 0; + this->actionDelay = 0; + this->direction = 0xff; + break; + case 3: + this->action = 5; + this->field_0x74.HALF.LO = 0; + this->field_0xf = 0x20; + this->direction = 0xff; + break; + case 2: + this->field_0x74.HALF.LO = 0; + this->actionDelay = 0x20; + if ((this->field_0x86.HALF.LO != 0) || (this->field_0x80.HALF.LO != 0)) { + this->direction = ((Random() & 0x80) >> 3) | 8; + } else { + this->direction = 0xff; + } + break; + } + } + if (this->attachedEntity->actionDelay == 0) { + this->cutsceneBeh.HALF.HI++; + if ((this->cutsceneBeh.HALF.HI & 3) == 0) { + switch (this->cutsceneBeh.HALF.HI & 0x30) { + case 0: + case 0x30: + this->y.HALF.HI++; + break; + case 0x10: + case 0x20: + this->y.HALF.HI--; + } + } + sub_080AEFB4(this); + } + } + UpdateAnimationSingleFrame(this); +} + +void VaatiRebornEnemyType0Action2(Entity* this) { + const Coords* ptr; + + switch (this->field_0x74.HALF.LO) { + case 0: + if (--this->actionDelay == 0) { + this->field_0x74.HALF.LO++; + this->actionDelay = 0x20; + InitAnimationForceUpdate(this, 3); + SoundReq(SFX_19B); + } + break; + case 1: + if ((this->frames.all & 0x80) != 0) { + this->field_0x74.HALF.LO = 2; + this->spriteSettings.b.draw = 0; + this->actionDelay = 0x10; + } + break; + case 2: + if (--this->actionDelay == 0) { + this->field_0x74.HALF.LO++; + if (sub_0803E028(this) == 0) { + s32 tmp; + this->field_0x80.HALF.HI += 1 + (Random() & 3); + tmp = this->field_0x80.HALF.HI; + this->field_0x80.HALF.HI = tmp % 5; + ptr = &gUnk_080D04AC[this->field_0x80.HALF.HI]; + this->x.HALF.HI = gRoomControls.roomOriginX + ptr->HALF.x + 0x10; + this->y.HALF.HI = gRoomControls.roomOriginY + ptr->HALF.y + 0x10; + } + this->spriteSettings.b.draw = 1; + this->actionDelay = 0x20; + InitAnimationForceUpdate(this, 4); + SoundReq(SFX_F5); + } + break; + case 3: + if ((this->frames.all & 0x80) != 0) { + this->spriteSettings.b.draw = 1; + if (4 < this->field_0x80.HALF.HI) { + this->x.HALF.HI = gPlayerEntity.x.HALF.HI; + this->y.HALF.HI = gPlayerEntity.y.HALF.HI - 0x18; + } + if (--this->field_0x76.HALF.HI == 0) { + this->action = 1; + this->actionDelay = 1; + } else { + this->field_0x74.HALF.LO = 0; + this->actionDelay = 0x10; + } + InitAnimationForceUpdate(this, 0); + } + break; + } + UpdateAnimationSingleFrame(this); +} + +void VaatiRebornEnemyType0Action3(Entity* this) { + u8 temp; + + switch (this->field_0x74.HALF.LO) { + case 0xfe: + this->field_0x74.HALF.LO = 0; + this->actionDelay = 1; + break; + case 0xff: + if (this->height.HALF.HI != -4) { + this->height.WORD -= 0x2000; + } + if (this->actionDelay == 2) { + this->field_0x74.HALF.LO = 0xfe; + } + break; + case 0: + if (--this->actionDelay == 0) { + this->field_0x74.HALF.LO++; + if ((this->field_0x74.HALF.HI & 0x80) != 0) { + temp = 0x14; + } else { + temp = 0x20; + } + this->actionDelay = temp; + this->field_0x80.HALF.LO = ((this->field_0x86.HALF.LO + 1) >> 1) * 2 + 2; + } + break; + case 1: + if (--this->actionDelay == 0) { + this->field_0x74.HALF.LO++; + if ((this->field_0x74.HALF.HI & 0x80) == 0) { + SoundReq(SFX_1B0); + } + InitAnimationForceUpdate(this, 1); + } + break; + case 2: + if ((this->frames.all & 0x80) != 0) { + this->field_0x74.HALF.LO = 3; + InitAnimationForceUpdate(this, 0); + } + break; + case 3: + this->action = 1; + this->field_0x74.HALF.LO = 0; + this->actionDelay = 1; + break; + } + UpdateAnimationSingleFrame(this); +} + +void VaatiRebornEnemyType0Action4(Entity* this) { + u32 index; + Entity* entity; + + if (--this->actionDelay == 0) { + this->action = 1; + this->cutsceneBeh.HALF.LO = 0xff; + this->actionDelay = 1; + this->direction = (this->direction + 0x10) & 0x1f; + InitAnimationForceUpdate(this, 0); + } else { + if ((this->frames.all & 0x10) != 0) { + this->frames.all &= 0xef; + if (this->cutsceneBeh.HALF.LO == 0xff) { + index = Direction8RoundUp(GetFacingDirection(this, &gPlayerEntity)); + this->cutsceneBeh.HALF.LO = gUnk_080D04C0[index >> 2]; + this->field_0xf = 0; + } + if ((this->field_0xf < 0x10) && + (entity = CreateProjectileWithParent(this, 0x1a, this->cutsceneBeh.HALF.LO), entity != NULL)) { + entity->field_0xf = this->field_0xf; + entity->parent = this; + entity->height.HALF.HI = this->height.HALF.HI; + this->field_0xf = this->field_0xf + 1; + } + } + } + UpdateAnimationSingleFrame(this); +} + +void VaatiRebornEnemyType0Action5(Entity* this) { + u32 uVar3; + + if (this->field_0x80.HALF.LO == 0) { + this->action = 1; + this->actionDelay = 1; + this->direction = 0xff; + InitAnimationForceUpdate(this, 0); + return; + } + + switch (this->field_0x74.HALF.LO) { + case 0: + if (--this->field_0xf == 0) { + this->field_0x74.HALF.LO++; + InitAnimationForceUpdate(this, 1); + } + break; + case 1: + if ((this->frames.all & 0x10) != 0) { + this->field_0x74.HALF.LO = 2; + this->field_0xf = (Random() & 0x3f) + 0x40; + SoundReq(SFX_SUMMON); + } + break; + case 2: + if (--this->field_0xf == 0) { + if (!((this->field_0x86.HALF.LO < 2) || (3 < this->field_0x86.HALF.HI)) && (Random() & 0x10) != 0) { + this->field_0x86.HALF.HI++; + this->field_0xf = (Random() & 0x3f) + 0x40; + uVar3 = GetFacingDirection(this, &gPlayerEntity); + this->direction = (uVar3 & 0x10) | 8; + } else { + this->field_0x74.HALF.LO++; + this->field_0x86.HALF.HI = 0; + this->field_0xf = 0x30; + InitAnimationForceUpdate(this, 0); + } + } + break; + case 3: + if (--this->field_0xf == 0) { + this->action = 1; + this->field_0x74.HALF.LO = 0; + this->actionDelay = 1; + this->direction = 0xff; + } + break; + } + + if (this->field_0x86.HALF.HI != 0) { + sub_080AEFB4(this); + } + UpdateAnimationSingleFrame(this); +} + +void VaatiRebornEnemyType0Action6(Entity* this) { + Entity* target; + + if (this->field_0x80.HALF.LO == 0) { + this->action = 1; + this->actionDelay = 1; + return; + } + + switch (this->field_0x74.HALF.LO) { + case 0: + if (this->actionDelay != 0) { + this->field_0x74.HALF.LO = 1; + this->actionDelay = 0x70; + } + break; + case 1: + if (--this->actionDelay == 0) { + this->field_0x74.HALF.LO++; + SoundReq(SFX_150); + target = CreateProjectileWithParent(this, 0x18, 0); + if (target != NULL) { + PositionRelative(this, target, 0, -0x100000); + target->parent = this; + } + } else if (this->actionDelay == 0x40) { + SoundReq(SFX_196); + } + break; + case 2: + if (this->field_0xf != 0) { + this->field_0xf = 0; + } + break; + case 3: + if (this->field_0xf == 0) { + this->field_0xf = 1; + SoundReq(SFX_14F); + } + if (this->actionDelay) { + this->action = 1; + this->field_0x74.HALF.LO = 0; + this->actionDelay = 1; + } + break; + } + UpdateAnimationSingleFrame(this); +} + +void VaatiRebornEnemyType0Action7(Entity* this) { + Entity* fx; + u32 tmp; + + if (this->actionDelay != 0) { + if (--this->actionDelay == 0) { + SetRoomFlag(1); + } else { + if ((this->actionDelay & 7) == 0) { + fx = CreateFx(this, 2, 0); + if (fx != NULL) { + tmp = Random() & 0x3f3f; + fx->x.HALF.HI = ((tmp & 0xff) - 0x20) + fx->x.HALF.HI; + fx->y.HALF.HI = ((tmp >> 8) & 0xff) - 0x20 + fx->y.HALF.HI; +#ifndef EU + fx->spritePriority.b0 = 2; +#endif + } + } + } + } +} + +void VaatiRebornEnemyType1Action0(Entity* this) { + Entity* enemy; + + this->action = 1; + this->field_0x74.HALF.LO = 0; + this->field_0x74.HALF.HI = 1; + this->actionDelay = 0; + this->spriteOffsetY = -1; + PositionRelative(this->parent, this, 0, 0x10000); + enemy = CreateEnemy(VAATI_REBORN_ENEMY, 2); + enemy->parent = this; + enemy->attachedEntity = this->parent; + InitAnimationForceUpdate(this, this->field_0x74.HALF.LO); +} + +void VaatiRebornEnemyType1Action1(Entity* this) { + Entity* parent; + + parent = this->parent; + if (this->field_0x74.HALF.LO == 0) { + if (parent->field_0x80.HALF.LO == 0) { + this->field_0x74.HALF.LO = 1; + this->damageType = 0x30; + InitAnimationForceUpdate(this, this->field_0x74.HALF.LO); + } + } else { + if (parent->field_0x80.HALF.LO != 0) { + this->field_0x74.HALF.LO = 0; + this->damageType = 0x2f; + InitAnimationForceUpdate(this, this->field_0x74.HALF.LO); + } else { + if (((this->bitfield & 0x80) != 0) && (0 < this->iframes)) { + parent->iframes = this->iframes; + parent->bitfield = this->bitfield; + } + if ((this->frames.all & 0x40) != 0) { + InitAnimationForceUpdate(this, 2); + } + } + } + + if (this->field_0x74.HALF.HI == 0) { + if (parent->action != 2) { + this->field_0x74.HALF.HI = 1; + this->flags |= 0x80; + } + } else { + if (parent->action == 2) { + this->field_0x74.HALF.HI = 0; + this->flags &= 0x7f; + } + } + this->spriteSettings.b.draw = parent->spriteSettings.b.draw; + this->spriteOffsetX = parent->spriteOffsetX; + PositionRelative(this->parent, this, 0, 0x10000); + UpdateAnimationSingleFrame(this); +} + +void VaatiRebornEnemyType2Action0(Entity* this) { + Entity* source; + + source = this->parent->parent; + this->action = 1; + this->field_0x74.HALF.LO = 1; + this->field_0x74.HALF.HI = 0; + this->spriteOffsetY = -2; + this->direction = 0xff; + PositionRelative(source, this, 0, 0x20000); + InitAnimationForceUpdate(this, 2); +} + +void VaatiRebornEnemyType2Action1(Entity* this) { + u8 parentDirection; + Entity* parent; + + parent = this->parent; + if (parent->field_0x74.HALF.LO == 0) { + if (this->field_0x74.HALF.LO != 0) { + this->field_0x74.HALF.LO = 0; + } + parentDirection = parent->parent->direction; + if (parentDirection != 0xff) { + if (this->field_0x74.HALF.HI == 0) { + this->field_0x74.HALF.HI = 1; + } + if (parentDirection != this->direction) { + this->direction = parentDirection; + InitAnimationForceUpdate(this, parentDirection >> 3); + } + } else { + if (this->field_0x74.HALF.HI != 0) { + this->field_0x74.HALF.HI = 0; + InitAnimationForceUpdate(this, 0); + } + } + } else { + if (this->field_0x74.HALF.LO == 0) { + this->field_0x74.HALF.LO = 1; + InitAnimationForceUpdate(this, 2); + } + } + this->spriteSettings.b.draw = parent->spriteSettings.b.draw; + this->spriteOffsetX = parent->spriteOffsetX; + PositionRelative(parent->parent, this, 0, 0x20000); + UpdateAnimationSingleFrame(this); +} + +void VaatiRebornEnemyType3Action0(Entity* this) { + this->action = 1; + this->field_0x74.HALF.LO = 0; + this->direction = 0xff; + this->spriteOffsetY = -1; + InitAnimationForceUpdate(this, this->field_0x74.HALF.LO); + sub_0803DC0C(this); +} + +void VaatiRebornEnemyType3Action1(Entity* this) { + Entity* parent = this->parent; + + if (this->parent->direction != 0xff) { + if (this->field_0x74.HALF.LO == 0) { + this->field_0x74.HALF.LO = 1; + } + if (parent->direction != this->direction) { + this->direction = parent->direction; + InitAnimationForceUpdate(this, this->direction >> 3); + } + } else { + if (this->field_0x74.HALF.LO != 0) { + this->field_0x74.HALF.LO = 0; + this->direction = 0xff; + InitAnimationForceUpdate(this, 2); + } + } + sub_0803DC0C(this); +} + +void sub_0803DC0C(Entity* this) { + Entity* parent; + const xy* tmp; + + parent = this->parent; + tmp = &gUnk_080D04C8[this->actionDelay]; + this->spriteSettings.b.draw = parent->spriteSettings.b.draw; + this->spriteOffsetX = parent->spriteOffsetX; + PositionRelative(parent, this, tmp->x << 0x10, (tmp->y + 1) * 0x10000); + UpdateAnimationSingleFrame(this); +} + +void VaatiRebornEnemyType1PreAction(Entity* this) { + Entity* parent; + + if (this->damageType != 0x30) { + return; + } + parent = this->parent; + this->field_0x76.HALF.HI = 0; + if ((this->bitfield & 0x80) != 0) { + if (gUnk_080D04D0[parent->field_0x86.HALF.LO] > this->currentHealth) { + if (2 < ++parent->field_0x86.HALF.LO) { + this->flags &= 0x7f; + parent->action = 7; + parent->flags &= 0x7f; + parent->actionDelay = 0x80; + parent->spriteOffsetX = 0; + parent->direction = -1; + this->actionDelay = 0; + SoundReq(SONG_STOP_BGM); + gArea.musicIndex = gArea.pMusicIndex; + return; + } + this->actionDelay = 1; + this->field_0x76.HALF.HI = 0xff; + } + if (0 < this->iframes) { + SoundReq(0x127); + sub_08080964(0xc, 1); + if (this->actionDelay == 0) + this->actionDelay = 0x48; + } + } + if (this->actionDelay != 0) { + if (--this->actionDelay == 0) { + this->damageType = 0x2f; + this->field_0x74.HALF.LO = 1; + if (this->field_0x76.HALF.HI == 0) { + parent->field_0x74.HALF.LO = 0xf0; + } else { + parent->field_0x74.HALF.LO = 0x70; + this->currentHealth = 0xff; + } + parent->action = 1; + parent->actionDelay = 1; + InitAnimationForceUpdate(this, 0); + } + } +} + +void sub_0803DD78(Entity* this) { + u32 random_number; + + random_number = ((u32)Random() & 0x7c) >> 2; + + switch (this->field_0x86.HALF.LO) { + case 0: + if (this->field_0x80.HALF.LO == 0) { + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 0x50; + break; + } + switch (this->field_0x82.HALF.HI) { + case 0: + case 2: + case 4: + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 0x50; + break; + case 1: + case 3: + case 5: + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + break; + default: + break; + } + break; + case 1: + switch (this->field_0x82.HALF.HI) { + case 1: + case 3: + case 5: + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + break; + case 2: + if ((random_number & 8) != 0) { + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + } else { + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 0x50; + } + break; + case 4: + if ((random_number & 8) != 0) { + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 0x50; + break; + } + case 0: + this->field_0x74.HALF.HI = 1; + this->field_0x76.HALF.HI = 1; + break; + default: + break; + } + break; + case 2: + switch (this->field_0x82.HALF.HI) { + case 2: + if ((random_number & 0xf) < 3) { + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + } else { + this->field_0x74.HALF.HI = 1; + this->field_0x76.HALF.HI = 1; + } + break; + case 0: + this->field_0x74.HALF.HI = 1; + this->field_0x76.HALF.HI = 1; + break; + case 4: + if (9 < random_number) { + this->field_0x74.HALF.HI = 2; + this->field_0x76.HALF.HI = (Random() & 1) + 2; + break; + } + case 1: + case 3: + case 5: + this->field_0x74.HALF.HI = 0; + this->field_0x76.HALF.HI = 1; + break; + default: + break; + } + } + + this->field_0x82.HALF.HI = (this->field_0x82.HALF.HI + 1) % 6; +} + +u32 sub_0803DEE0(Entity* this) { + u32 randomValue; + u32 ret; + + ret = 2; + randomValue = (Random() & 0xf8) >> 3; + if (this->field_0x80.HALF.LO) { + switch (this->field_0x86.HALF.LO) { + case 0: + ret = this->field_0x82.HALF.LO & 1; + this->field_0x82.HALF.LO = (this->field_0x82.HALF.LO + 1) & 3; + break; + case 1: + switch (this->field_0x82.HALF.LO) { + case 0: + case 2: + ret = 3; + break; + case 1: + case 3: + ret = 1; + break; + case 4: + if (randomValue & 8) { + ret = 3; + } else { + ret = 0; + } + break; + } + this->field_0x82.HALF.LO = (this->field_0x82.HALF.LO + 1) % 5; + break; + case 2: + switch (this->field_0x82.HALF.LO) { + case 0: + case 3: + ret = 3; + break; + case 1: + ret = 0; + if (randomValue > 5) { + ret = 3; + } + break; + case 2: + ret = 0; + if (randomValue < 10) { + ret = 3; + } + break; + case 4: + ret = 0; + break; + default: + ret = 2; + } + this->field_0x82.HALF.LO = (this->field_0x82.HALF.LO + 1) % 5; + break; + } + } + return ret; +} + +void VaatiRebornEnemyType0PreAction(Entity* this) { + u32 bVar1; + + if (this->action != 0) { + *(u32*)&this->field_0x78 = this->x.WORD; + this->field_0x7c = this->y; + } + if (this->field_0x76.HALF.LO == 0) { + if ((this->direction == 0xff) || sub_08049FA0(this)) { + if (this->field_0x80.HALF.LO == 0) { + this->animationState = (this->animationState + 1) & 3; + this->spriteOffsetX = gUnk_080D04D3[this->animationState]; + } + return; + } + bVar1 = sub_08049EE4(this); + this->direction = (bVar1 & 0x10) | 8; + this->field_0x76.HALF.LO = 0x10; + } else { + this->field_0x76.HALF.LO--; + } + if (this->field_0x80.HALF.LO == 0) { + this->animationState = (this->animationState + 1) & 3; + this->spriteOffsetX = gUnk_080D04D3[this->animationState]; + } +} + +u32 sub_0803E028(Entity* this) { + u32 ret; + s32 tmp; + + ret = 0; + if ((this->field_0x74.HALF.HI != 2) && ((Random() & 1) != 0)) { + return 0; + } + if (this->field_0x76.HALF.HI != 1) { + return ret; + } + tmp = gRoomControls.roomOriginX + 0x58; + if (tmp > gPlayerEntity.x.HALF.HI) { + return ret; + } + tmp = gRoomControls.roomOriginY + 0x58; + if (tmp > gPlayerEntity.x.HALF.HI) { + return ret; + } + tmp = gRoomControls.roomOriginY + 0xf8; + if (tmp >= gPlayerEntity.x.HALF.HI) { + this->field_0x80.HALF.HI += 5; + ret = 1; + } + return ret; +} diff --git a/src/enemy/vaatiTransfigured.c b/src/enemy/vaatiTransfigured.c new file mode 100644 index 00000000..399f511b --- /dev/null +++ b/src/enemy/vaatiTransfigured.c @@ -0,0 +1,1097 @@ +#include "entity.h" +#include "enemy.h" +#include "object.h" +#include "random.h" +#include "flags.h" +#include "audio.h" +#include "functions.h" + +void sub_080409B0(Entity*); +void sub_080408EC(Entity*); +void sub_08040AD4(Entity*); +void sub_08040670(Entity*); +void sub_080406A0(Entity*); +void sub_08040770(Entity*); +void sub_080AF18C(Entity*); +u32 sub_08040934(Entity*); +void sub_08040648(Entity*, u32, u32); + +void VaatiTransfiguredType0Action0(Entity*); +void VaatiTransfiguredType0Action1(Entity*); +void VaatiTransfiguredType0Action2(Entity*); +void VaatiTransfiguredType0Action3(Entity*); +void VaatiTransfiguredType0Action4(Entity*); +void VaatiTransfiguredType0Action5(Entity*); +void VaatiTransfiguredType0Action6(Entity*); +void VaatiTransfiguredType0Action7(Entity*); +void VaatiTransfiguredType1Action0(Entity*); +void VaatiTransfiguredType1Action1(Entity*); +void VaatiTransfiguredType2Action0(Entity*); +void VaatiTransfiguredType2Action1(Entity*); +void VaatiTransfiguredType2Action2(Entity*); +void VaatiTransfiguredType3Action0(Entity*); +void VaatiTransfiguredType3Action1(Entity*); +void VaatiTransfiguredType4Action0(Entity*); +void VaatiTransfiguredType4Action1(Entity*); +void VaatiTransfiguredType5Action0(Entity*); +void VaatiTransfiguredType5Action1(Entity*); +void VaatiTransfiguredType5Action2(Entity*); + +typedef struct { + s8 x; + s8 y; +} PACKED xy; +extern u8 gEntCount; + +#ifdef EU +const u8 gUnk_080D0ABC[] = { 0xf0, 0xd0, 0xb0 }; +#else +const u8 gUnk_080D0ABC[] = { 0xf0, 0xd0, 0xc0 }; +#endif +const u8 gUnk_080D0ABF[] = { 0x3c, 0x3c, 0x1e, 0x14, 0x14, 0x14, 0, 0, 0 }; +void (*const vaatiTransfiguredType0Actions[])(Entity*) = { + VaatiTransfiguredType0Action0, VaatiTransfiguredType0Action1, VaatiTransfiguredType0Action2, + VaatiTransfiguredType0Action3, VaatiTransfiguredType0Action4, VaatiTransfiguredType0Action5, + VaatiTransfiguredType0Action6, VaatiTransfiguredType0Action7, +}; +void (*const vaatiTransfiguredType1Actions[])(Entity*) = { + VaatiTransfiguredType1Action0, + VaatiTransfiguredType1Action1, +}; +void (*const vaatiTransfiguredType2Actions[])(Entity*) = { + VaatiTransfiguredType2Action0, + VaatiTransfiguredType2Action1, + VaatiTransfiguredType2Action2, +}; +void (*const vaatiTransfiguredType3Actions[])(Entity*) = { + VaatiTransfiguredType3Action0, + VaatiTransfiguredType3Action1, +}; +void (*const vaatiTransfiguredType4Actions[])(Entity*) = { + VaatiTransfiguredType4Action0, + VaatiTransfiguredType4Action1, +}; +void (*const vaatiTransfiguredType5Actions[])(Entity*) = { + VaatiTransfiguredType5Action0, + VaatiTransfiguredType5Action1, + VaatiTransfiguredType5Action2, +}; + +const xy gUnk_080D0B18[] = { { 0x00, 0xfe }, { 0x01, 0xfe }, { 0x01, 0xfe }, { 0x02, 0xfe }, { 0x02, 0xfe }, + { 0x03, 0xfe }, { 0x03, 0xfe }, { 0x04, 0xfe }, { 0x04, 0xff }, { 0x03, 0xff }, + { 0x03, 0x00 }, { 0x02, 0x00 }, { 0x02, 0x00 }, { 0x01, 0x00 }, { 0x01, 0x00 }, + { 0x00, 0x00 }, { 0x00, 0x00 }, { 0x00, 0x00 }, { 0xff, 0x00 }, { 0xff, 0x00 }, + { 0xfe, 0x00 }, { 0xfe, 0x00 }, { 0xfd, 0x00 }, { 0xfd, 0xff }, { 0xfc, 0xff }, + { 0xfc, 0xfe }, { 0xfd, 0xfe }, { 0xfd, 0xfe }, { 0xfe, 0xfe }, { 0xfe, 0xfe }, + { 0xff, 0xfe }, { 0xff, 0xfe } }; + +const u16 gUnk_080D0B58[] = { 0x00b0, 0x0070, 0x0110, 0x0040, 0x0050, 0x0040 }; + +const u16 gUnk_080D0B64[] = { 0x00b0, 0x0040, 0x0110, 0x00a0, 0x00b0, 0x00c0, 0x0050, 0x00a0 }; + +const u8 gUnk_080D0B74[] = { 0xf0, 0xc3, 0xf0, 0x3c, 0xc3, 0x3c, 0x3c, 0xf0, + 0x0f, 0x3c, 0xc3, 0xf0, 0xf0, 0xc3, 0x3c, 0xc3 }; + +const u8 gUnk_080D0B84[] = { 0x01, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x02, + 0x01, 0x02, 0x01, 0x00, 0x02, 0x01, 0x02, 0x00, 0x01, 0x02, 0x01, + 0x02, 0x00, 0x02, 0x01, 0x00, 0x01, 0x01, 0x00, 0x02, 0x00 }; + +void VaatiTransfigured(Entity* this) { + switch (this->type) { + case 0: + if (this->action != 0) { + this->field_0x7a.HWORD = this->field_0x78.HWORD; + this->field_0x78.HWORD = this->x.HALF.HI; + this->field_0x7c.HALF.HI = this->field_0x7c.HALF.LO; + this->field_0x7c.HALF.LO = this->y.HALF.HI; + sub_080409B0(this); + } + vaatiTransfiguredType0Actions[this->action](this); + break; + case 1: + vaatiTransfiguredType1Actions[this->action](this); + break; + case 2: + vaatiTransfiguredType2Actions[this->action](this); + break; + case 3: + vaatiTransfiguredType3Actions[this->action](this); + break; + case 4: + vaatiTransfiguredType4Actions[this->action](this); + break; + case 5: + vaatiTransfiguredType5Actions[this->action](this); + return; + default: + break; + } +} + +void VaatiTransfiguredType0Action0(Entity* this) { + Entity* enemy; + u32 i; + + sub_0804A720(this); + if ((CheckRoomFlag(0) != 0) && (gEntCount < 0x51)) { + this->action = 1; + this->spriteSettings.b.draw = 1; + this->spritePriority.b0 = 5; + this->field_0x6c.HALF.HI |= 1; + this->direction = (Random() & 0x17) + 4; + this->actionDelay = 48; + this->field_0xf = 12; + this->field_0x82.HALF.LO = 4; + this->field_0x80.HALF.LO = 0xff; + this->field_0x74.HALF.LO = 0; + this->field_0x76.HALF.HI = 0; + this->cutsceneBeh.HALF.LO = 9; + this->animationState = 0; + this->field_0x86.HALF.LO = 0; + this->field_0x86.HALF.HI = 0; + this->field_0x78.HWORD = this->x.HALF.HI; + this->field_0x7a.HWORD = this->x.HALF.HI; + this->field_0x7c.HALF.LO = this->y.HALF.HI; + this->field_0x7c.HALF.HI = this->y.HALF.HI; + for (i = 1; i < 6; i++) { + sub_08040648(this, i, 0); + } + Random(); + sub_080408EC(this); + for (i = 0; i < 8; ++i) { + enemy = CreateEnemy(VAATI_TRANSFIGURED_EYE, 0); + enemy->parent = this; + enemy->type2 = i; + if ((this->field_0x74.HALF.HI >> (i)&1) != 0) { + enemy->actionDelay = 1; + } else { + enemy->actionDelay = 0; + } + } + InitAnimationForceUpdate(this, 0); + } +} + +void VaatiTransfiguredType0Action1(Entity* this) { + Entity* object; + + switch (this->field_0x80.HALF.LO) { + case 0xff: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO = 0; + this->actionDelay = 11; + } + break; + case 0: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO += 1; + this->speed = 0x180; + this->actionDelay = 0x14; + } + break; + case 1: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO += 1; + this->speed = 0xc0; + this->actionDelay = 12; + } + break; + case 2: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO += 1; + this->speed = 0; + if (this->animationState < 2) { + this->actionDelay = (Random() & 0x7f) + 0x40; + } else { + this->actionDelay = 8; + } + } + break; + case 3: + if (--this->actionDelay == 0) { + this->height.HALF.HI = 0; + this->field_0x80.HALF.LO = 0; + this->actionDelay = gUnk_080D0ABF[(u32)this->animationState * 2]; + switch (sub_08040934(this)) { + case 1: + this->action = 4; + this->field_0x74.HALF.LO = 1; + break; + case 2: + this->action = 5; + break; + case 3: + this->action = 6; + break; + default: + this->field_0x80.HALF.LO = 4; + break; + } + } else { + sub_08040AD4(this); + } + break; + case 4: + sub_08040670(this); + break; + } + + if (--this->field_0x82.HALF.LO == 0) { + this->field_0x82.HALF.LO = 4; + object = CreateObject(OBJECT_9B, 0, ((this->direction + 0x12) & 0x1c) >> 2); + if (object != NULL) { + object->parent = this; + object->x.HALF.HI += (Random() & 0xf) - 7; + object->y.HALF.HI += (Random() & 0xf) - 7; + object->spritePriority.b0 = 6; + } + } + if (this->field_0x80.HALF.LO != 0xff) { + ProcessMovement(this); + } + UpdateAnimationSingleFrame(this); +} + +void VaatiTransfiguredType0Action2(Entity* this) { + UpdateAnimationSingleFrame(this); +} + +void VaatiTransfiguredType0Action3(Entity* this) { + Entity* pEVar3; + u32 uVar4; + u32 tmp; + + switch (this->field_0x80.HALF.LO) { + case 0: + uVar4 = sub_080044EC(this, 0x2800); + if (uVar4 != 1) + break; + this->field_0x80.HALF.LO = 1; + this->actionDelay = 0xc0; + this->flags |= 0x80; + SoundReq(SFX_14C); + sub_08080964(0x14, 4); + break; + case 1: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO = 2; + this->damageType = 0x35; + this->spriteOffsetX = 0; + } + if (this->currentHealth < gUnk_080D0ABC[this->animationState]) { + tmp = 1; + this->actionDelay = 1; + } else { + tmp = 0; + } + if (tmp) { + this->field_0x80.HALF.LO = 2; + this->damageType = 0x35; + this->spriteOffsetX = 0; + this->animationState++; + if (this->animationState > 2) { + this->action = 7; + this->actionDelay = 0xe0; + sub_0807A108(); + SoundReq(SFX_BOSS_HIT); + return; + } + } + break; + case 2: + this->attachedEntity->field_0x74.HALF.LO = 0x10; + if (this->actionDelay) { + this->field_0x80.HALF.LO = 3; + this->actionDelay = 0x40; + } else { + this->field_0x80.HALF.LO = 4; + this->actionDelay = 0x50; + } + break; + case 3: + if (this->actionDelay != 0) { + if (--this->actionDelay == 0) { + this->flags &= 0x7f; + this->field_0x20 = 0x38000; + this->field_0xf = 0x10; + } + break; + } + if (sub_08003FC4(this, 0x2800) == 0) { + this->field_0x80.HALF.LO = 5; + this->actionDelay = 0x10; + this->flags |= 0x80; + this->currentHealth = 0xff; + this->field_0x86.HALF.LO = 0; + sub_080408EC(this); + SoundReq(SFX_14C); + sub_08080964(0x1e, 4); + } else { + if (this->field_0xf != 0) { + if (--this->field_0xf == 0) { + SoundReq(SFX_1B0); + } else { + if ((this->field_0xf & 7) == 0) { + SoundReq(SFX_149); + } + } + } + } + break; + case 4: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO = 5; + this->actionDelay = 0x10; + this->field_0x86.HALF.LO = 0; + sub_080408EC(this); + } else { + if (((this->actionDelay & 1) != 0) && (pEVar3 = CreateObject(0x9b, 1, 0xff), pEVar3 != NULL)) { + pEVar3->parent = this; + CopyPosition(this, pEVar3); + pEVar3->x.HALF.HI += (Random() & 0xf) - 7; + pEVar3->y.HALF.HI += (Random() & 0xf) - 7; + pEVar3->spritePriority.b0 = 4; + SoundReq(SFX_124); + } + } + break; + case 5: + if (--this->actionDelay == 0) { + this->action = 1; + this->field_0x80.HALF.LO = 0; + this->field_0x80.HALF.HI = 0; + this->field_0x76.HALF.LO = 0; + sub_08040670(this); + } + } + if (this->field_0x80.HALF.LO > 2) { + this->spriteOffsetX = this->actionDelay & 1; + } + UpdateAnimationSingleFrame(this); +} + +void VaatiTransfiguredType0Action4(Entity* this) { + switch (this->field_0x80.HALF.LO) { + case 0: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO += 1; + this->field_0x74.HALF.LO = 0; + this->actionDelay = 0x80; + this->field_0xf = 0; + this->field_0x20 = 0x24000; + SoundReq(SFX_12B); + } + break; + case 1: + if (sub_08003FC4(this, 0x2800) != 0) + break; + this->field_0x80.HALF.LO += 1; + switch (this->cutsceneBeh.HALF.LO) { + case 1: + case 3: + this->field_0xf = 1; + break; + case 0: + case 2: + this->field_0xf = 0; + break; + default: + this->field_0xf = (Random() & 0x20) >> 5; + break; + } + if (1 < this->animationState) { + this->field_0xf = 1; + } + SoundReq(SFX_14C); + sub_08080964(0x1e, 4); + break; + case 2: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO += 1; + this->actionDelay = gUnk_080D0ABF[((u32)this->animationState << 1 | 1)]; + } else { + if ((this->actionDelay & 7) == 0) { + CreateProjectileWithParent(this, 0x1f, this->field_0xf); + } + if (((this->field_0xf != 0) && (1 < this->animationState)) && (this->actionDelay < 6)) { + this->actionDelay = 0x80; + this->field_0xf = 0; + } + } + break; + case 3: + if (--this->actionDelay == 0) { + this->action = 1; + this->field_0x80.HALF.LO = 0; + this->height.HALF.HI = 0; + sub_08040670(this); + } else { + sub_08040AD4(this); + } + break; + default: + break; + } + + UpdateAnimationSingleFrame(this); +} + +void VaatiTransfiguredType0Action5(Entity* this) { + Entity* entity; + + switch (this->field_0x80.HALF.LO) { + case 0: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO += 1; + this->actionDelay = 0x40; + if (1 < this->animationState) { + this->actionDelay = 0x80; + this->field_0xf = 1; + } + } + break; + case 1: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO += 1; + this->actionDelay = gUnk_080D0ABF[(this->animationState << 1 | 1)]; + } else { + if (this->field_0xf) { + if ((this->actionDelay & 7) == 0) { + CreateProjectileWithParent(this, 0x1f, this->field_0xf); + } + if (this->actionDelay < 6) { + this->actionDelay = 0x40; + this->field_0xf = 0; + } + } else { + if ((this->actionDelay & 0xf) == 0) { + entity = CreateProjectileWithParent(this, 0x1f, 2); + if (entity != NULL) { + entity->type2 = 0; + if (this->field_0x80.HALF.HI != 0) { + entity->speed = entity->speed >> 1; + } + } + } + } + } + break; + case 2: + if (--this->actionDelay == 0) { + this->action = 1; + this->field_0x80.HALF.LO = 0; + sub_08040670(this); + } else { + sub_08040AD4(this); + } + break; + } + UpdateAnimationSingleFrame(this); +} + +void VaatiTransfiguredType0Action6(Entity* this) { + Entity* pEVar2; + + switch (this->field_0x80.HALF.LO) { + case 0: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO += 1; + this->actionDelay = 0x80; + if (1 < this->animationState) { + this->field_0xf = 1; + } + } + break; + case 1: + if (--this->actionDelay == 0) { + this->field_0x80.HALF.LO += 1; + this->actionDelay = gUnk_080D0ABF[(this->animationState << 1) | 1]; + } else { + if (this->field_0xf) { + if ((this->actionDelay & 7) == 0) { + CreateProjectileWithParent(this, 0x1f, this->field_0xf); + } + if (this->actionDelay < 6) { + this->actionDelay = 0x80; + this->field_0xf = 0; + } + } else { + if ((this->actionDelay & 0x1f) == 0) { + pEVar2 = CreateProjectileWithParent(this, 0x1f, 2); + if (pEVar2 != NULL) { + pEVar2->type2 = 1; + pEVar2->y.HALF.HI += -0x20; + if (this->field_0x80.HALF.HI != 0) { + pEVar2->speed = pEVar2->speed >> 1; + } + } + } + } + } + break; + case 2: + if (--this->actionDelay == 0) { + this->action = 1; + this->field_0x80.HALF.LO = 0; + sub_08040670(this); + } else { + sub_08040AD4(this); + } + } + UpdateAnimationSingleFrame(this); +} + +void VaatiTransfiguredType0Action7(Entity* this) { + Entity* pEVar3; + u32 uVar4; + + sub_08078B48(); + if (this->actionDelay) { + if (--this->actionDelay == 0) { + SetRoomFlag(2); + this->field_0xf = 8; + UpdateAnimationSingleFrame(this); + return; + } + } else { + if (this->field_0xf != 0) { + if (--this->field_0xf == 0) { + this->currentHealth = 0; + this->spriteSettings.b.draw = 0; + } + } else { + sub_0804A7D4(this); + } + UpdateAnimationSingleFrame(this); + return; + } + this->field_0xf = (this->field_0xf + 1) & 7; + if (this->field_0xf == 0) { + pEVar3 = CreateFx(this, 0x55, 0); + if (pEVar3 != NULL) { + uVar4 = Random() & 0x3f3f; + pEVar3->x.HALF.HI += (uVar4 & 0xff) - 0x20; + pEVar3->y.HALF.HI += ((uVar4 >> 8) & 0xff) - 0x20; +#ifndef EU + pEVar3->spritePriority.b0 = 2; +#endif + SoundReq(SFX_16E); + } + } + UpdateAnimationSingleFrame(this); +} + +void VaatiTransfiguredType1Action0(Entity* this) { + this->action = 1; + this->actionDelay = 0; + this->field_0x80.HALF.LO = 0; + this->spritePriority.b0 = 6; + InitAnimationForceUpdate(this, (u32)this->actionDelay); +} + +void VaatiTransfiguredType1Action1(Entity* this) { + Entity* parent; + + parent = this->parent; + if (parent->currentHealth == 0) { + this->field_0x6c.HALF.HI |= 2; + DeleteThisEntity(); + } + this->x.HALF.HI = parent->field_0x7a.HWORD; + this->y.HALF.HI = parent->field_0x7c.HALF.HI; + if (parent->field_0x74.HALF.LO == 0) { + UpdateAnimationSingleFrame(this); + } else { + sub_080042BA(this, 2); + } + if (parent->action >= 5) { + if (this->actionDelay == 0) { + this->actionDelay = 1; + InitAnimationForceUpdate(this, 1); + } + } else { + if (this->actionDelay != 0) { + this->actionDelay = 0; + InitAnimationForceUpdate(this, 0); + } + } + if (parent->action != 3) { + this->height.HALF.HI = parent->height.HALF.HI; + } +} + +void VaatiTransfiguredType2Action0(Entity* this) { + if (this->type2 != 0) { + this->action = 1; + this->spritePriority.b0 = this->type2 + 1; + InitAnimationForceUpdate(this, this->type2 + 4); + } else { + this->spritePriority.b0 = 4; + if (gEntCount < 0x46) { + sub_08040648(this, 2, 1); + sub_08040648(this, 2, 2); + this->action = 1; + this->actionDelay = 0; + this->field_0xf = (Random() & 0x7f) + 0x17; + this->field_0x74.HALF.LO = 0; + InitAnimationForceUpdate(this, 0); + } + } +} + +void VaatiTransfiguredType2Action1(Entity* this) { + u32 uVar3; + + const xy* t; + + if (this->parent->currentHealth == 0) { + this->field_0x6c.HALF.HI |= 2; + DeleteThisEntity(); + } + CopyPosition(this->parent, this); + switch (this->type2) { + case 2: + uVar3 = GetFacingDirection(this, &gPlayerEntity); + t = &gUnk_080D0B18[uVar3]; + this->x.HALF.HI += t->x; + this->y.HALF.HI += t->y; + case 1: + if (this->parent->frameIndex != 2) { + this->action = 2; + this->spriteSettings.b.draw = 0; + } + break; + case 0: + switch (this->field_0x74.HALF.LO) { + case 0: + if (--this->field_0xf == 0) { + this->field_0xf = (Random() & 0x7f) + 0x27; + if ((this->field_0xf & 1) != 0) { + this->field_0x74.HALF.LO = 1; + InitAnimationForceUpdate(this, 8); + } + } + break; + case 1: + if ((this->frames.all & 0x80) != 0) { + this->field_0x74.HALF.LO = 0; + this->field_0xf = (Random() & 0x7f) + 0x17; + InitAnimationForceUpdate(this, 0); + } + break; + case 0x10: + InitAnimationForceUpdate(this, 7); + this->field_0x74.HALF.LO = 0x11; + this->field_0xf = 0x50; + break; + case 0x11: + if (--this->field_0xf == 0) { + this->field_0x74.HALF.LO = 1; + this->field_0xf = 0x30; + InitAnimationForceUpdate(this, 8); + } + } + break; + } + UpdateAnimationSingleFrame(this); +} + +void VaatiTransfiguredType2Action2(Entity* this) { + if (this->parent->currentHealth == 0) { + this->field_0x6c.HALF.HI |= 2; + DeleteThisEntity(); + } + CopyPosition(this->parent, this); + if (this->parent->frameIndex == 2) { + this->action = 1; + this->spriteSettings.b.draw = 1; + } +} + +void VaatiTransfiguredType3Action0(Entity* this) { + this->action = 1; + this->spritePriority.b0 = 4; + InitAnimationForceUpdate(this, 0); +} + +void VaatiTransfiguredType3Action1(Entity* this) { + if (this->parent->currentHealth == 0) { + this->field_0x6c.HALF.HI |= 2; + DeleteThisEntity(); + } + CopyPosition(this->parent, this); + UpdateAnimationSingleFrame(this); +} + +void VaatiTransfiguredType4Action0(Entity* this) { + this->action = 1; + this->field_0x80.HALF.LO = 0; + this->actionDelay = 10; + this->spriteSettings.b.draw = 0; + this->spritePriority.b0 = 7; + InitializeAnimation(this, 0); +} + +void VaatiTransfiguredType4Action1(Entity* this) { + if (this->parent->currentHealth == 0) { + this->field_0x6c.HALF.HI |= 2; + DeleteThisEntity(); + } + if (this->parent->action != 5) { + if (this->field_0x80.HALF.LO != 0) { + this->field_0x80.HALF.LO = 0; + this->spriteSettings.b.draw = 0; + } + } else { + if (this->field_0x80.HALF.LO == 0) { + this->field_0x80.HALF.LO += 1; + this->spriteSettings.b.draw = 1; + } + if (--this->actionDelay == 0) { + this->actionDelay = 10; + SoundReq(SFX_149); + } + } + CopyPosition(this->parent, this); + GetNextFrame(this); +} + +void VaatiTransfiguredType5Action0(Entity* this) { + if (this->type2 != 0) { + this->action = 2; + this->actionDelay = 10; + this->spritePriority.b0 = 3; + InitializeAnimation(this, 2); + } else { + this->action = 1; + this->spriteSettings.b.draw = 0; + this->spritePriority.b0 = 4; + } +} + +void VaatiTransfiguredType5Action1(Entity* this) { + if (this->parent->currentHealth == 0) { + this->field_0x6c.HALF.HI |= 2; + DeleteThisEntity(); + } + switch (this->field_0x80.HALF.LO) { + case 0: + if (this->parent->action != 6) { + return; + } + this->field_0x80.HALF.LO += 1; + this->spriteSettings.b.draw = 1; + InitializeAnimation(this, 1); + break; + case 1: + if (this->parent->action != 6) { + this->field_0x80.HALF.LO = 0; + this->spriteSettings.b.draw = 0; + } else { + if (this->frames.b.f3 != 0) { + this->frames.b.f3 = 0; + if (gEntCount < 0x47) { + sub_08040648(this, this->type, 1); + } + } + if (--this->actionDelay == 0) { + this->actionDelay = 10; + SoundReq(SFX_149); + } + GetNextFrame(this); + } + break; + } + CopyPosition(this->parent, this); +} + +void VaatiTransfiguredType5Action2(Entity* this) { + if (this->parent->currentHealth == 0) { + this->field_0x6c.HALF.HI |= 2; + DeleteThisEntity(); + } + if (this->field_0x80.HALF.LO == 0) { + if (this->parent->parent->action != 6) { + if ((this->frames.all & 0x80) != 0) { + this->field_0x80.HALF.LO += 1; + InitializeAnimation(this, 3); + } + } + } else { + if ((this->frames.all & 0x80) != 0) { + DeleteThisEntity(); + } + } + CopyPosition(this->parent, this); + GetNextFrame(this); +} + +void sub_08040648(Entity* this, u32 type, u32 type2) { + Entity* enemy; + + enemy = CreateEnemy(VAATI_TRANSFIGURED, type); + enemy->type2 = type2; + enemy->parent = this; + CopyPosition(this, enemy); + if ((type == 2) && (type2 == 0)) { + this->attachedEntity = enemy; + } +} + +void sub_08040670(Entity* this) { + this->action = 1; + this->field_0x80.HALF.LO = 0; + this->speed = 0x100; + this->actionDelay = 12; + if (this->animationState == 0) { + sub_080406A0(this); + } else { + sub_08040770(this); + } +} + +void sub_080406A0(Entity* this) { + u32 uVar2; + u32 uVar3; + u32 uVar4; + u32 uVar5; + u32 uVar6; + + uVar2 = Random() & 0x30; + uVar5 = this->field_0x86.HALF.LO; + { + u32 tmp; + uVar6 = gRoomControls.roomOriginX + gUnk_080D0B58[tmp = uVar5 * 2]; + uVar4 = gRoomControls.roomOriginY + gUnk_080D0B58[tmp + 1]; + } + if (sub_0806FCB8(this, uVar6, uVar4, 0x1c)) { + if (uVar5 != 0) { + uVar5 = 0; + } else { + uVar5 = (Random() & 1) + 1; + } + { + u32 tmp; + uVar6 = gRoomControls.roomOriginX + gUnk_080D0B58[tmp = uVar5 * 2]; + uVar4 = gRoomControls.roomOriginY + gUnk_080D0B58[tmp + 1]; + } + } + uVar3 = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, uVar6, uVar4); + this->direction = uVar3; + if (uVar2 & 0x20) { + u32 tmp = this->direction; + if (uVar2 & 0x10) { + this->direction = tmp + 1; + } else { + this->direction = tmp + 0x1f; + } + } + this->direction &= 0x1f; + this->field_0x86.HALF.LO = uVar5; +} + +void sub_08040770(Entity* this) { + u32 tmp = Random() & 0x38; + u32 tmp2 = this->field_0x86.HALF.LO; + u32 tmp5, tmp6; + { + u32 index; + tmp5 = gRoomControls.roomOriginX + gUnk_080D0B64[index = tmp2 * 2]; + tmp6 = gRoomControls.roomOriginY + gUnk_080D0B64[index + 1]; + } + if (sub_0806FCB8(this, tmp5, tmp6, 0x1c)) { + if (this->animationState != 2) { + if (tmp & 8) { + tmp2 += 1; + } else { + tmp2 += 3; + } + tmp2 &= 3; + if (this->field_0x80.HALF.HI) { + switch (this->field_0x74.HALF.HI) { + case 0xf: + if (tmp2 == 0) { + tmp2 = 2; + } + break; + case 0x3c: + if (tmp2 == 1) { + tmp2 = 3; + } + break; + case 0xf0: + if (tmp2 == 2) { + tmp2 = 0; + } + break; + case 0xc3: + if (tmp2 == 3) { + tmp2 = 1; + } + break; + } + } + } else { + if (this->field_0x86.HALF.HI & 0x7f) { + if (this->field_0x86.HALF.HI & 0x80) { + tmp2 += 1; + } else { + tmp2 += 3; + } + this->field_0x86.HALF.HI--; + } else { + u32 tmp3; + this->field_0x86.HALF.HI = (Random() & 7) + 4; + tmp5 = this->field_0x86.HALF.HI; + if (!(Random() & 0x20)) { + tmp3 = tmp5 | 0x80; + } else { + tmp3 = tmp5; + } + this->field_0x86.HALF.HI = tmp3; + if (tmp3 & 0x80) { + tmp2 += 1; + } else { + tmp2 += 3; + } + } + tmp2 &= 3; + } + { + u32 tmp3; + tmp5 = gRoomControls.roomOriginX + gUnk_080D0B64[tmp3 = tmp2 * 2], + tmp6 = gRoomControls.roomOriginY + gUnk_080D0B64[tmp3 + 1]; + } + } + this->direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, tmp5, tmp6); + if (tmp & 0x20) { + u32 tmp3 = this->direction; + if (tmp & 0x10) { + this->direction = tmp3 + 1; + } else { + this->direction = tmp3 + 0x1F; + } + } + this->direction &= 0x1F; + this->field_0x86.HALF.LO = tmp2; +} + +void sub_080408EC(Entity* this) { + u32 tmp; + + if (this->animationState == 0) { + tmp = 0xf0; + } else { + do { + tmp = gUnk_080D0B74[(Random() & 0x3c) >> 2]; + if (tmp == this->field_0x74.HALF.HI) { + tmp = 0xff; + } + } while (tmp == 0xff); + } + this->field_0x74.HALF.HI = tmp; + this->field_0x76.HALF.LO = 0; +} + +u32 sub_08040934(Entity* this) { + u32 t; + u32 r2; + + t = Random() & 0x3e; + if (t < 0x2f) { + r2 = 1; + } else { + r2 = 0; + } + if ((this->field_0x86.HALF.HI & 0x7f) != 0) { + r2 = 0; + } + if (this->cutsceneBeh.HALF.LO != 9) { + if (r2 != 0) { + this->cutsceneBeh.HALF.LO = (this->cutsceneBeh.HALF.LO + 1) % 5; + t = (Random() & 0xf8) >> 3; + r2 = gUnk_080D0B84[t]; + switch (this->cutsceneBeh.HALF.LO) { + case 3: + case 4: + if (r2 == 0) { + r2 = 1; + } + break; + case 1: + if (r2 != 0) { + r2 = 3; + } else { + r2 = 1; + } + break; + } + } + } else { + this->cutsceneBeh.HALF.LO = 0; + r2 = 1; + } + return r2; +} + +void sub_080409B0(Entity* this) { + switch (this->field_0x80.HALF.HI) { + case 0: + if (this->field_0x74.HALF.HI == this->field_0x76.HALF.LO) { + this->field_0x80.HALF.HI = 1; + this->field_0x76.HALF.LO = 0; + } + break; + case 1: + if (this->field_0x76.HALF.LO != 0) { + this->field_0x80.HALF.HI = 2; + this->field_0x76.HALF.HI = 0x10; + } + break; + case 2: + if (--this->field_0x76.HALF.HI == 0) { + if (this->field_0x74.HALF.HI != (this->field_0x74.HALF.HI & this->field_0x76.HALF.LO)) { + this->field_0x80.HALF.HI = 1; + this->field_0x76.HALF.LO = 0; + SoundReq(SFX_155); + } else { + this->action = 3; + this->field_0x80.HALF.LO = 0; + this->field_0x80.HALF.HI = 3; + this->flags &= 0x7f; + this->damageType = 0x36; + this->field_0x20 = 0x18000; + SoundReq(SFX_164); + } + } + break; + } + + if (this->field_0x80.HALF.HI < 3) { + if (this->field_0x42 != 0) { + sub_080AF18C(this); + } + } else { + if (((this->bitfield & 0x80) != 0) && (0 < this->iframes)) { + sub_08080964(0xc, 1); + SoundReq(SFX_BOSS_HIT); + } + if ((this->bitfield == 0x8a) && (gPlayerState.field_0xa0[0] == 5)) { + this->currentHealth = 0xc0; + } + } +} + +void sub_08040AD4(Entity* this) { + u32 actionDelay; + + actionDelay = this->actionDelay & 0x3f; + if ((actionDelay & 0x1f) == 0) { + SoundReq(SFX_1A9); + } + if ((actionDelay & 3) == 0) { + actionDelay >>= 2; + this->x.HALF.HI += ((actionDelay + 4) & 8) ? -1 : 1; + this->y.HALF.HI += ((actionDelay + 2) & 4) ? -1 : 1; + } +} diff --git a/src/enemy/vaatiTransfiguredEye.c b/src/enemy/vaatiTransfiguredEye.c new file mode 100644 index 00000000..ab0bd34a --- /dev/null +++ b/src/enemy/vaatiTransfiguredEye.c @@ -0,0 +1,333 @@ +#include "entity.h" +#include "enemy.h" +#include "audio.h" +#include "textbox.h" +#include "coord.h" +#include "functions.h" + +void sub_08045A00(Entity*); +void sub_08045A28(Entity*); + +void VaatiTransfiguredEyeFunction0(Entity*); +void VaatiTransfiguredEyeFunction1(Entity*); +void VaatiTransfiguredEyeNoop(Entity*); +void VaatiTransfiguredEyeFunction0Action0(Entity*); +void VaatiTransfiguredEyeFunction0Action1(Entity*); +void VaatiTransfiguredEyeFunction0Action2(Entity*); +void VaatiTransfiguredEyeFunction0Action3(Entity*); +void VaatiTransfiguredEyeFunction0Action4(Entity*); + +void (*const vaatiTransfiguredEyeFunctions[])(Entity*) = { + VaatiTransfiguredEyeFunction0, + VaatiTransfiguredEyeFunction1, + VaatiTransfiguredEyeFunction0, + sub_0804A7D4, + sub_08001242, + VaatiTransfiguredEyeNoop, +}; + +void (*const vaatiTransfiguredEyeFunction0Actions[])(Entity*) = { + VaatiTransfiguredEyeFunction0Action0, VaatiTransfiguredEyeFunction0Action1, VaatiTransfiguredEyeFunction0Action2, + VaatiTransfiguredEyeFunction0Action3, VaatiTransfiguredEyeFunction0Action4, +}; + +struct xy { + s8 x; + s8 y; +} PACKED; + +const struct xy gUnk_080D18B4[] = { { 0xe8, 0xf6 }, { 0xf6, 0xe8 }, { 0x0a, 0xe8 }, { 0x18, 0xf6 }, + { 0x18, 0x0a }, { 0x0a, 0x18 }, { 0xf6, 0x18 }, { 0xe8, 0x0a } }; + +void VaatiTransfiguredEye(Entity* this) { + EnemyFunctionHandler(this, vaatiTransfiguredEyeFunctions); +} + +void VaatiTransfiguredEyeFunction0(Entity* this) { + vaatiTransfiguredEyeFunction0Actions[this->action](this); +} + +void VaatiTransfiguredEyeFunction1(Entity* this) { + u8 bVar1; + Entity* pEVar4; + + if (this->type != 0) { + pEVar4 = this->parent->parent; + if ((this->bitfield & 0x80) != 0) { + bVar1 = this->bitfield & 0x3f; + if ((bVar1 == 0xe) || (bVar1 == 0x15)) { + + if (this->field_0x80.HALF.HI == 0) { + this->action = 3; + this->field_0x80.HALF.HI += 1; + InitializeAnimation(this, (this->type << 3) | (this->actionDelay + 2)); + InitializeAnimation(this->parent, (this->parent->type << 3) | (this->actionDelay + 2)); + } + if (this->actionDelay != 0) { + SoundReq(SFX_17A); + } else { + SoundReq(SFX_ITEM_GLOVES_KNOCKBACK); + } + } else { + if (this->currentHealth != 0xff) { + this->currentHealth = 0xff; + if (this->actionDelay != 0 && (pEVar4->field_0x80.HALF.HI != 0)) { + pEVar4->field_0x76.HALF.LO |= (1 << this->type2); + if (this->cutsceneBeh.HALF.HI == 0) { + this->cutsceneBeh.HALF.HI += 1; + InitializeAnimation(this, this->type << 3 | 6); + InitializeAnimation(this->parent, this->parent->type << 3 | 6); + } + } + } + } + } + } + sub_0804AA30(this, vaatiTransfiguredEyeFunctions); +} + +void VaatiTransfiguredEyeNoop(Entity* this) { +} + +void VaatiTransfiguredEyeFunction0Action0(Entity* this) { + Entity* child; + u8 bVar2; + + bVar2 = gTextBox.doTextBox & 0x7f; + if ((gTextBox.doTextBox & 0x7f) == 0) { + this->action = 1; + this->spriteSettings.b.draw = 0; + this->field_0x80.HALF.LO = bVar2; + this->field_0x80.HALF.HI = bVar2; + this->cutsceneBeh.HALF.HI = bVar2; + this->field_0xf = bVar2; + this->field_0x82.HALF.LO = 0x30; + this->field_0x82.HALF.HI = bVar2; + if (this->type == 0) { + sub_08045A00(this); + child = CreateEnemy(VAATI_TRANSFIGURED_EYE, 1); + if (child != NULL) { + child->parent = this; + this->attachedEntity = child; + child->actionDelay = this->actionDelay; + child->type2 = this->type2; + CopyPosition(this, child); + } + } else { + this->spriteOffsetY = 1; + } + InitializeAnimation(this, (u32)this->type << 3 | 1); + } +} + +void VaatiTransfiguredEyeFunction0Action1(Entity* this) { + sub_08045A28(this); + if (this->field_0x82.HALF.LO == 0) { + if ((this->frames.all & 0x80) != 0) { + if (this->type != 0) { + this->flags |= 0x80; + } + this->action = 2; + InitializeAnimation(this, this->type << 3); + } + } else { + if (--this->field_0x82.HALF.LO == 0) { + this->spriteSettings.b.draw = 1; + } + } +} + +void VaatiTransfiguredEyeFunction0Action2(Entity* this) { + Entity* parent; + + sub_08045A28(this); + parent = this->parent; + if (this->type != 0) { + parent = parent->parent; + } + if ((parent->action == 3) && (parent->field_0x80.HALF.LO == 1)) { + this->action = 4; + this->field_0xf = 0; + if (this->type != 0) { + this->flags &= 0x7f; + if (this->actionDelay != 0) { + InitializeAnimation(this, this->type << 3 | 5); + InitializeAnimation(this->parent, this->parent->type << 3 | 5); + } else { + InitializeAnimation(this, this->type << 3 | 4); + InitializeAnimation(this->parent, this->parent->type << 3 | 4); + } + } + } +} + +void VaatiTransfiguredEyeFunction0Action3(Entity* this) { + sub_08045A28(this); + if ((this->frames.all & 0x80) != 0) { + this->action = 2; + if (this->type != 0) { + if (this->actionDelay == 0) { + this->damageType = 0x32; + } else { + this->parent->parent->field_0x76.HALF.LO |= (1 << this->type2); + this->damageType = 0x31; + } + } + } +} + +void VaatiTransfiguredEyeFunction0Action4(Entity* this) { + Entity* parent; + + sub_08045A28(this); + if (this->field_0xf == 0) { + if ((this->frames.all & 0x80) != 0) { + this->field_0xf = 0x20; + } + } else { + parent = this->parent; + if (this->type != 0) { + parent = parent->parent; + } + if ((parent->animationState < 3) && (parent->action != 3)) { + this->action = 1; + this->field_0xf = 0; + this->field_0x80.HALF.HI = 0; + this->cutsceneBeh.HALF.HI = 0; + if (this->type != 0) { + this->damageType = 0x33; + } + if ((parent->field_0x74.HALF.HI >> this->type2 & 1U) != 0) { + this->actionDelay = 1; + } else { + this->actionDelay = 0; + } + InitializeAnimation(this, this->type << 3 | 1); + } + } +} + +void sub_08045A00(Entity* this) { + const struct xy* t = &gUnk_080D18B4[this->type2]; + PositionRelative(this->parent, this, t->x << 0x10, (t->y + 3) * 0x10000); +} + +void sub_08045A28(Entity* this) { + u32 frames; + u32 type; + + if (this->field_0x82.HALF.LO == 0) { + GetNextFrame(this); + } + frames = this->frames.all & 0x70; + type = this->type; + if (type == 0) { + sub_08045A00(this); + switch (this->field_0x82.HALF.HI) { + case 0: + switch (frames) { + case 0x20: + this->field_0x82.HALF.HI = 1; + sub_0801D2B4(this, 0x13e); + break; + case 0x00: + case 0x40: + this->field_0x82.HALF.HI = 2; + sub_0801D2B4(this, 0x13f); + break; + default: + break; + } + break; + case 1: + switch (frames) { + case 0x10: + this->field_0x82.HALF.HI = type; + sub_0801D2B4(this, 0x13b); + break; + case 0: + this->field_0x82.HALF.HI = 2; + sub_0801D2B4(this, 0x13f); + break; + default: + break; + } + break; + case 2: + switch (frames) { + case 0x20: + this->field_0x82.HALF.HI = 1; + sub_0801D2B4(this, 0x13e); + break; + case 0x10: + this->field_0x82.HALF.HI = 0; + sub_0801D2B4(this, 0x13b); + break; + case 0x40: + this->field_0x82.HALF.HI = 2; + sub_0801D2B4(this, 0x13f); + break; + default: + break; + } + break; + case 3: + switch (frames) { + case 0: + this->field_0x82.HALF.HI = 2; + sub_0801D2B4(this, 0x13f); + break; + default: + break; + } + break; + default: + break; + } + } else { + PositionRelative(this->parent, this, 0, -0x10000); + switch (this->field_0x82.HALF.HI) { + case 0: + switch (this->frames.all & 0x70) { + case 0x10: + this->field_0x82.HALF.HI = 2; + sub_0801D2B4(this, 0x13b); + break; + case 0x20: + this->field_0x82.HALF.HI = 1; + sub_0801D2B4(this, 0x13e); + break; + default: + break; + } + break; + case 1: { + u32 temp = this->frames.all & 0x70; + switch (temp) { + case 0: + this->field_0x82.HALF.HI = temp; + sub_0801D2B4(this, 0x13f); + break; + case 0x10: + this->field_0x82.HALF.HI = 2; + sub_0801D2B4(this, 0x13b); + break; + default: + break; + } + } break; + case 2: + switch (this->frames.all & 0x70) { + case 0: + this->field_0x82.HALF.HI = this->frames.all & 0x70; + sub_0801D2B4(this, 0x13f); + break; + default: + break; + } + break; + default: + break; + } + } +} diff --git a/src/enemy/vaatiWrath.c b/src/enemy/vaatiWrath.c new file mode 100644 index 00000000..6a4df2d7 --- /dev/null +++ b/src/enemy/vaatiWrath.c @@ -0,0 +1,1076 @@ +#include "entity.h" +#include "enemy.h" +#include "audio.h" +#include "room.h" +#include "random.h" +#include "object.h" +#include "textbox.h" +#include "flags.h" +#include "utils.h" +#include "structures.h" +#include "functions.h" +#include "save.h" + +extern u8 gEntCount; + +void VaatiWrathType0PreAction(Entity*); +u32 sub_08041FCC(Entity*); +void sub_08042004(Entity*); +u32 sub_08041ED4(Entity*); +u32 sub_08041F74(Entity*, u32); +u32 sub_08041F1C(Entity*); +void sub_08042028(Entity*); +u32 sub_0804207C(Entity*); +void sub_0804212C(Entity*); +void sub_080421AC(Entity*); +void sub_08042120(Entity*); +void sub_0804235C(Entity*); +void sub_08042214(Entity*); +void sub_08042050(Entity*); +void sub_08041E78(Entity*); +void sub_08042264(Entity*); +u32 sub_080422C0(Entity*, u32); +void sub_0804228C(Entity*); + +void VaatiWrathType0(Entity*); +void VaatiWrathType1(Entity*); +void VaatiWrathType2(Entity*); +void VaatiWrathType3(Entity*); +void VaatiWrathType0Action0(Entity*); +void VaatiWrathType0Action1(Entity*); +void VaatiWrathType0Action2(Entity*); +void VaatiWrathType0Action3(Entity*); +void VaatiWrathType0Action4(Entity*); +void VaatiWrathType0Action5(Entity*); +void VaatiWrathType0Action6(Entity*); +void VaatiWrathType0Action7(Entity*); +void VaatiWrathType0Action8(Entity*); +void VaatiWrathType0Action9(Entity*); +void VaatiWrathType0ActionA(Entity*); +void VaatiWrathType0ActionB(Entity*); +void VaatiWrathType0ActionC(Entity*); +void VaatiWrathType0ActionD(Entity*); +void sub_08041BE8(Entity*); +void sub_08041CD0(Entity*); +void sub_08041D14(Entity*); +void sub_08041D84(Entity*); +void sub_08041E20(Entity*); +void sub_08041E50(Entity*); + +typedef struct { + Entity* type0; + Entity* type1; + Entity* type2; + Entity* type3; + Entity* object5b; + Entity* arms[2]; + Entity* eyes[4]; +} VaatiWrathHeapStruct; + +void (*const vaatiWrathTypes[])(Entity*) = { + VaatiWrathType0, + VaatiWrathType1, + VaatiWrathType2, + VaatiWrathType3, +}; +void (*const vaatiWrathType0Actions[])(Entity*) = { + VaatiWrathType0Action0, VaatiWrathType0Action1, VaatiWrathType0Action2, VaatiWrathType0Action3, + VaatiWrathType0Action4, VaatiWrathType0Action5, VaatiWrathType0Action6, VaatiWrathType0Action7, + VaatiWrathType0Action8, VaatiWrathType0Action9, VaatiWrathType0ActionA, VaatiWrathType0ActionB, + VaatiWrathType0ActionC, VaatiWrathType0ActionD, +}; + +const u8 gUnk_080D0E64[] = { 0, -1, 0, 1 }; + +void (*const gUnk_080D0E68[])(Entity*) = { + sub_08041BE8, sub_08041CD0, sub_08041D14, sub_08041D84, sub_08041E20, sub_08041E50, +}; + +const u16 gUnk_080D0E80[] = { 0x16c, 0x16d, 0x16e, 0x16f, 0x170, 0x171, 0x172, 0x173 }; + +const s8 gUnk_080D0E90[] = { 0x00, 0xf0, 0xf8, 0xe6, 0xff, 0x00, 0x0e, 0xe1, + 0x02, 0xf4, 0xf1, 0x02, 0x04, 0xec, 0xf6, 0xf8 }; + +const s8 gUnk_080D0EA0[] = { 0xfc, 0xfb, 0xfa, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd }; + +const u8 gUnk_080D0EA8[] = { 0x78, 0xa0, 0xc8, 0xf0 }; + +const u8 gUnk_080D0EAC[] = { 0x3c, 0x50, 0x64, 0x78 }; + +const s8 gUnk_080D0EB0[] = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xfe, + 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd }; + +void VaatiWrath(Entity* this) { + if (((this->type == 0) && ((this->bitfield & 0x80) != 0)) && (this->currentHealth == 0)) { + this->flags |= 0x80; + this->currentHealth = 0xff; + if (--this->cutsceneBeh.HALF.LO == 0) { + this->action = 0xd; + this->subAction = 0; + SoundReq(SONG_STOP_ALL); + SoundReq(SFX_BOSS_DIE); + } + } + vaatiWrathTypes[this->type](this); +} + +void VaatiWrathType0(Entity* this) { +#if !(defined EU || defined JP) + VaatiWrathType0PreAction(this); +#endif + vaatiWrathType0Actions[this->action](this); +} + +void VaatiWrathType0Action0(Entity* this) { + u32 bVar1; + + bVar1 = gScreenTransition.field_0x38 & 1; + if (bVar1 != 0) { + if (sub_08041FCC(this) == 0) { + return; + } + if ((gScreenTransition.field_0x39 & 0xc) == 0) { + this->action = 5; + this->subAction = 1; + } else { + this->action = 2; + this->actionDelay = 0x3c; + } + this->x.HALF.HI = gScreenTransition.field_0x40; + this->y.HALF.HI = gScreenTransition.field_0x42; + sub_08042004(this); + } else { + if (sub_08041ED4(this) == 0) { + return; + } + this->action = 1; + this->subAction = bVar1; + this->actionDelay = 120; + this->spritePriority.b1 = 0; + this->height.HALF.HI = 0xffb0; + gRoomControls.cameraTarget = this; + sub_080809D4(); + } + this->spriteSettings.b.draw = 1; + this->field_0x6c.HALF.HI |= 1; + this->field_0x78.HALF.HI = 0; + this->field_0x7c.HALF.LO = 0x3c; + this->field_0x7c.HALF.HI = 0x78; + this->cutsceneBeh.HALF.LO = 3; + InitAnimationForceUpdate(this, 0); +} + +void VaatiWrathType0Action1(Entity* this) { + UpdateAnimationSingleFrame(this); + switch (this->subAction) { + case 0: + break; + case 1: + this->spritePriority.b1 = 1; + this->height.WORD += 0x8000; + if ((this->height.HALF.HI & 0x3f) == 0) { + SoundReq(SFX_1A9); + } + if (-6 < this->height.HALF.HI) { + this->subAction = 2; + SoundReq(SFX_1A9); + } + break; + case 2: + sub_08042004(this); + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + if (sub_08041F74(this, 0) == 0) { + return; + } + this->subAction = 3; + this->actionDelay = 0x3c; + } + break; + case 3: + sub_08042004(this); + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + if (sub_08041F74(this, 1) != 0) { + this->subAction = 4; + this->actionDelay = 120; + this->field_0xf = 0; + } + } + break; + case 4: + sub_08042004(this); + if (--this->actionDelay == 0) { + this->subAction = 5; + } else { + if ((this->actionDelay < 0x3d) && (this->field_0xf == 0)) { + if (sub_08041F1C(this) != 0) { + this->field_0xf = 1; + } + } + } + break; + case 5: + sub_08042004(this); + this->subAction = 6; + this->actionDelay = 0x1e; + gScreenTransition.field_0x38 |= 1; + gRoomControls.cameraTarget = &gPlayerEntity; + gPlayerState.field_0x8b = 1; + break; + default: + sub_08042004(this); + if (--this->actionDelay != 0) { + return; + } + this->action = 2; + this->actionDelay = 0x3c; + break; + } +} + +void VaatiWrathType0Action2(Entity* this) { + sub_08042004(this); + UpdateAnimationSingleFrame(this); + if (--this->actionDelay == 0) { + this->field_0xf = (Random() & 1) + 1; + sub_08042028(this); + } +} + +void VaatiWrathType0Action3(Entity* this) { + s32 bound; + s32 thisY; + + u32 roomY; + + sub_08042004(this); + UpdateAnimationSingleFrame(this); + ProcessMovement(this); + + roomY = gRoomControls.roomOriginY; + bound = roomY + 0x90; + thisY = this->y.HALF.HI; + if ((bound < thisY)) { + this->y.HALF.HI = bound; + } else { + bound = roomY + 0x40; + if ((bound > thisY)) { + this->y.HALF.HI = bound; + } + } + + if (--this->actionDelay == 0) { + this->action = 4; + this->actionDelay = 8; + } else { + if (this->actionDelay < 0x1e) { + this->speed -= 8; + } else { + if (this->speed < 0x100) { + this->speed += 6; + } + } + if ((this->actionDelay & 3) == 0) { + sub_08004596(this, sub_0804207C(this)); + } + } + sub_0804212C(this); + sub_080421AC(this); +} + +void VaatiWrathType0Action4(Entity* this) { + sub_08042004(this); + UpdateAnimationSingleFrame(this); + if (--this->actionDelay == 0) { + if (--this->field_0xf == 0) { + sub_08042120(this); + } else { + sub_08042028(this); + } + } +} + +void VaatiWrathType0Action5(Entity* this) { + Entity* object; + u32 subAction; + Entity* arm; + + sub_08042004(this); + UpdateAnimationSingleFrame(this); + sub_0804212C(this); + sub_080421AC(this); + subAction = this->subAction; + if (subAction == 0) { + this->subAction = 1; + if ((Random() & 1) != 0) { + arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[0]; + if (arm == NULL) { + arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[1]; + } + } else { + arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[1]; + if (arm == NULL) { + arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[0]; + } + } + if (arm != NULL && arm->action == 2) { + arm->action = 4; + arm->subAction = 0; + } else { + this->field_0xf = (Random() & 1) + 1; + sub_08042028(this); + } + } else { + if (this->field_0x78.HALF.HI == 0) { + if (this->subAction == 2) { + if ((gScreenTransition.field_0x39 & 3) == 0) { + object = CreateObject(OBJECT_B5, 0, 0); + if (object != NULL) { + object->parent = this; + ((VaatiWrathHeapStruct*)this->myHeap)->object5b = object; + gRoomControls.cameraTarget = object; + this->action = 6; + this->actionDelay = 0x1e; + ((VaatiWrathHeapStruct*)this->myHeap)->type1->subAction = 1; + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type1, 0xe); + } + } else { + this->action = 2; + this->actionDelay = 0x3c; + } + } + } + } +} + +void VaatiWrathType0Action6(Entity* this) { + Entity* type1; + + if (this->actionDelay == 0) { + type1 = ((VaatiWrathHeapStruct*)this->myHeap)->type1; + GetNextFrame(type1); + if (type1->frames.all == 1) { + type1->frames.all &= 0xfe; + InitAnimationForceUpdate(this, 4); + } else { + if (type1->frames.all == 2) { + Entity* type3 = CreateEnemy(VAATI_WRATH, 3); + if (type3 != NULL) { + type3->myHeap = this->myHeap; + ((VaatiWrathHeapStruct*)this->myHeap)->type3 = type3; + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x14); + type1->frames.all &= 0xfd; + } + } else { + if ((type1->frames.all & 0x80) != 0) { + sub_0804235C(this); + } + } + } + } else { + this->actionDelay--; + } + sub_08042004(this); + UpdateAnimationSingleFrame(this); +} + +void VaatiWrathType0Action7(Entity* this) { + sub_08042214(this); + sub_08042004(this); + UpdateAnimationSingleFrame(this); + if (gRoomControls.roomOriginY + 0x48 != this->y.HALF.HI) { + this->speed = 0x100; + this->direction = ((gRoomControls.roomOriginY + 0x48) >= this->y.HALF.HI) ? 0x10 : 0; + sub_0806F69C(this); + } else { + if (--this->actionDelay == 0) { + sub_08042050(this); + } + } +} + +void VaatiWrathType0Action8(Entity* this) { + sub_08042004(this); + UpdateAnimationSingleFrame(this); + sub_0806F69C(this); + if (((gRoomControls.roomOriginX + 0x20) > this->x.HALF.HI) || + ((gRoomControls.roomOriginX + 0x140) < this->x.HALF.HI)) { + if (0x3f < this->speed) { + this->direction ^= 0x10; + } + } + if (--this->actionDelay == 0) { + this->action = 9; + this->actionDelay = 0x3c; + } else { + if (this->actionDelay < 0x1e) { + this->speed -= 0xc; + } else { + if (0x1ff >= this->speed) + this->speed += 0x10; + } + } + sub_08042214(this); +} + +void VaatiWrathType0Action9(Entity* this) { + sub_08042004(this); + UpdateAnimationSingleFrame(this); + if (this->field_0x78.HALF.HI != 0) { + sub_08042214(this); + } else { + if (--this->actionDelay == 0) { + if ((gPlayerEntity.x.HALF.HI - this->x.HALF.HI) + 0x40u < 0x81) { + this->action = 10; + this->field_0x7a.HALF.HI = 0; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[0]->actionDelay = 1; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[1]->actionDelay = 1; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[2]->actionDelay = 1; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[3]->actionDelay = 1; + } else { + this->action = 7; + this->actionDelay = 0x1e; + this->field_0x78.HALF.HI = 0; + } + } + } +} + +void VaatiWrathType0ActionA(Entity* this) { + Entity* type1; + + sub_08042004(this); + UpdateAnimationSingleFrame(this); + if (this->field_0x7a.HALF.HI == 0x0f) { + this->action = 7; + this->actionDelay = 120; + this->field_0x78.HALF.HI = 0; + } else { + if (this->field_0x7a.HALF.HI == 0xf0) { + this->action = 0xb; + this->subAction = 0; + this->direction = 0; + this->speed = 0x100; + this->field_0x20 = 0x12000; + sub_0801D2B4(this, 0x16b); + InitAnimationForceUpdate(this, 5); + type1 = ((VaatiWrathHeapStruct*)this->myHeap)->type1; + type1->subAction = 1; + InitializeAnimation(type1, 0xf); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x15); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type3, 0x1e); + SoundReq(SFX_BOSS_HIT); + } + } +} + +void VaatiWrathType0ActionB(Entity* this) { + switch (this->subAction) { + case 0: + sub_0806F69C(this); + UpdateAnimationSingleFrame(this); + GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type1); + GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type2); + if (sub_08003FC4(this, 0x2000) == 0) { + this->subAction = 1; + this->actionDelay = 0xf0; + this->currentHealth = 8; + this->damageType = 0x38; + sub_08080964(0x14, 0); + InitAnimationForceUpdate(this, 6); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x16); + } + break; + case 1: + UpdateAnimationSingleFrame(this); + GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type2); + if (--this->actionDelay == 0) { + this->subAction = 2; + this->actionDelay = 0x3c; + this->damageType = 0x39; + this->currentHealth = 0xff; + } + break; + default: + this->spriteOffsetX = gUnk_080D0E64[--this->actionDelay & 3]; + if (this->actionDelay == 0) { + this->action = 0xc; + this->subAction = 0; + sub_0801D2B4(this, 0x140); + InitAnimationForceUpdate(this, 8); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type1, 0x10); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x18); + } + break; + } +} + +void VaatiWrathType0ActionC(Entity* this) { + Entity* entity; + + UpdateAnimationSingleFrame(this); + GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type2); + if (this->subAction != 0) { + GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type1); + } + switch (this->subAction) { + case 0: + this->height.WORD -= 0x8000; + if (this->height.HALF.HI < -4) { + this->subAction = 1; + this->actionDelay = 120; + this->direction = 0x10; + this->speed = 0x80; + } + break; + case 1: + sub_08042004(this); + if (this->actionDelay) { + this->actionDelay--; + } else { + sub_0806F69C(this); + if (gRoomControls.roomOriginY + 0x48 == this->y.HALF.HI) { + this->subAction = 2; + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type1, 0x11); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x19); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type3, 0x1f); + } + } + break; + default: + sub_08042004(this); + entity = ((VaatiWrathHeapStruct*)this->myHeap)->type1; + if (entity->frames.b.f0) { + entity->frames.all &= 0xfe; + InitAnimationForceUpdate(this, 9); + } else { + if (entity->frames.b.f3 != 0) { + sub_0804235C(this); + } + } + break; + } +} + +void VaatiWrathType0ActionD(Entity* this) { + gUnk_080D0E68[this->subAction](this); +} + +void sub_08041BE8(Entity* this) { + Entity* entity; + + if (sub_08079F8C() != 0) { + this->subAction = 1; + this->actionDelay = 120; + this->scriptedScene = 3; + InitAnimationForceUpdate(this, 10); + + entity = ((VaatiWrathHeapStruct*)this->myHeap)->type1; + entity->myHeap = NULL; + DeleteEntity(entity); + ((VaatiWrathHeapStruct*)this->myHeap)->type1 = NULL; + + entity = ((VaatiWrathHeapStruct*)this->myHeap)->type2; + entity->scriptedScene = 3; + sub_080AE068(entity); + LoadFixedGFX(entity, 0x1f5); + sub_0801D2B4(entity, 0x16b); + InitializeAnimation(entity, 0x1a); + + entity = ((VaatiWrathHeapStruct*)this->myHeap)->type3; + entity->myHeap = NULL; + DeleteEntity(entity); + ((VaatiWrathHeapStruct*)this->myHeap)->type3 = NULL; +#ifndef EU + entity = ((VaatiWrathHeapStruct*)this->myHeap)->object5b; + entity->myHeap = NULL; + DeleteEntity(entity); + ((VaatiWrathHeapStruct*)this->myHeap)->object5b = NULL; + + gRoomControls.cameraTarget = &gPlayerEntity; +#endif + entity = ((VaatiWrathHeapStruct*)this->myHeap)->eyes[0]; + entity->myHeap = NULL; + DeleteEntity(entity); + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[0] = NULL; + + entity = ((VaatiWrathHeapStruct*)this->myHeap)->eyes[1]; + entity->myHeap = NULL; + DeleteEntity(entity); + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[1] = NULL; + + entity = ((VaatiWrathHeapStruct*)this->myHeap)->eyes[2]; + entity->myHeap = NULL; + DeleteEntity(entity); + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[2] = NULL; + + entity = ((VaatiWrathHeapStruct*)this->myHeap)->eyes[3]; + entity->myHeap = NULL; + DeleteEntity(entity); + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[3] = NULL; + + sub_08078A90(2); + } +} + +void sub_08041CD0(Entity* this) { + GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type2); + if (this->frames.b.f3) { + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + this->subAction = 2; + this->actionDelay = 0x3c; + TextboxNoOverlapFollow(0x1651); + } + } else { + UpdateAnimationSingleFrame(this); + } +} + +void sub_08041D14(Entity* this) { + Entity* pEVar1; + + GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type2); + if ((gTextBox.doTextBox & 0x7f) == 0) { + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + if (gEntCount < 0x46) { + pEVar1 = CreateObject(OBJECT_B6, 0, 0); + pEVar1->parent = this; + this->attachedEntity = pEVar1; + pEVar1 = CreateObject(OBJECT_B6, 1, 0); + pEVar1->parent = this; + this->subAction = 3; + this->actionDelay = 0x96; + this->field_0xf = 0; + this->spriteSettings.b.draw = 0; + SoundReq(SFX_1C4); + } + } + } +} + +void sub_08041D84(Entity* this) { + GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type2); + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + if (this->field_0xf < 0xf0) { + if ((0xb7 < this->field_0xf) && ((this->field_0xf & 7) == 0)) { + sub_0801D2B4(((VaatiWrathHeapStruct*)this->myHeap)->type2, + gUnk_080D0E80[(this->field_0xf - 0xb8) >> 3]); + sub_0801D2B4(this->attachedEntity, gUnk_080D0E80[(this->field_0xf - 0xb8) >> 3]); + } + if (this->field_0xf == 0xe6) { + DoFade(7, 4); + } + } else { + this->subAction = 4; + this->spriteSettings.b.draw = 1; + sub_0801D2B4(this, 0x173); + InitAnimationForceUpdate(this, 0xb); + } + this->field_0xf++; + sub_08041E78(this); + } +} + +void sub_08041E20(Entity* this) { + this->field_0xf += 1; + sub_08041E78(this); + GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type2); + if (gFadeControl.active == 0) { + this->subAction = 5; + this->actionDelay = 0x5a; + } +} + +void sub_08041E50(Entity* this) { + Entity* type2; + + if (--this->actionDelay == 0) { + SetGlobalFlag(ENDING); + type2 = ((VaatiWrathHeapStruct*)this->myHeap)->type2; + type2->myHeap = NULL; + DeleteEntity(type2); + DeleteThisEntity(); + } +} + +void sub_08041E78(Entity* this) { + Entity* fx; + const s8* temp; + + if ((this->field_0xf & 0xf) == 0) { + fx = CreateFx(this, 0x51, 0); + if (fx != NULL) { + temp = &gUnk_080D0E90[this->field_0xf >> 3 & 0xe]; + fx->x.HALF.HI += *temp++; + fx->y.HALF.HI += *temp; + fx->spritePriority.b0 = 3; + sub_08080964(4, 0); + } + } +} + +u32 sub_08041ED4(Entity* this) { + VaatiWrathHeapStruct* heap; + Entity* entity; + + if (gEntCount < 0x46) { + heap = zMalloc(sizeof(VaatiWrathHeapStruct)); + if (heap != NULL) { + this->myHeap = (void*)heap; + heap->type0 = this; + heap->type3 = NULL; + heap->arms[0] = NULL; + heap->arms[1] = NULL; + entity = CreateEnemy(VAATI_WRATH, 1); + entity->myHeap = (void*)heap; + heap->type1 = entity; + entity = CreateEnemy(VAATI_WRATH, 2); + entity->myHeap = (void*)heap; + heap->type2 = entity; + return 1; + } + } + return 0; +} + +u32 sub_08041F1C(Entity* this) { + Entity* eye; + + if (!(gEntCount < 0x44)) { + return 0; + } + + eye = CreateEnemy(VAATI_WRATH_EYE, 0); + eye->parent = this; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[0] = eye; + eye = CreateEnemy(VAATI_WRATH_EYE, 1); + eye->parent = this; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[1] = eye; + eye = CreateEnemy(VAATI_WRATH_EYE, 2); + eye->parent = this; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[2] = eye; + eye = CreateEnemy(VAATI_WRATH_EYE, 3); + eye->parent = this; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[3] = eye; + return 1; +} + +u32 sub_08041F74(Entity* this, u32 unk1) { + Entity* arm; + VaatiWrathHeapStruct* heap; + + if (!(gEntCount < 0x47)) { + return 0; + } + heap = ((VaatiWrathHeapStruct*)this->myHeap); + arm = NULL; + if ((gScreenTransition.field_0x39 >> unk1 & 1U) != 0) { + arm = CreateEnemy(VAATI_ARM, 0); + arm->type2 = unk1; + arm->parent = this; + CopyPosition(this, arm); + } + if (unk1 == 0) { + heap->arms[0] = arm; + } else { + heap->arms[1] = arm; + } + return 1; +} + +u32 sub_08041FCC(Entity* this) { + if (gEntCount < 0x4d) { + if (sub_08041ED4(this)) { + sub_08041F74(this, 0); + sub_08041F74(this, 1); + sub_08041F1C(this); + return 1; + } + } + return 0; +} + +void sub_08042004(Entity* this) { + this->height.HALF.HI = gUnk_080D0EA0[(++this->field_0x78.HALF.LO >> 4) & 7]; +} + +void sub_08042028(Entity* this) { + this->action = 3; + this->actionDelay = gUnk_080D0EA8[Random() & 3]; + this->speed = 0x40; + this->direction = sub_0804207C(this); +} + +void sub_08042050(Entity* this) { + u32 uVar1; + + this->action = 8; + uVar1 = Random(); + this->actionDelay = gUnk_080D0EAC[uVar1 & 3]; + this->speed = 0x20; + this->direction = ((uVar1 >> 8) & 0x10) + 8; +} + +u32 sub_0804207C(Entity* this) { + Entity* arm; + u32 x; + u32 y; + u32 tmp; + + x = this->x.HALF.HI; + y = this->y.HALF.HI - 0x10; + arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[0]; + if ((arm != NULL) && (arm->action >= 5) && sub_0806FCB8(arm, x, y, 0x30)) { + return sub_080045D4(arm->x.HALF.HI, arm->y.HALF.HI, x, y); + } else { + arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[1]; + if (((arm != NULL) && (arm->action >= 5)) && sub_0806FCB8(arm, x, y, 0x30)) { + return sub_080045D4(arm->x.HALF.HI, arm->y.HALF.HI, x, y); + } else { + if (gPlayerEntity.y.HALF.HI < 0x40) { + tmp = gRoomControls.roomOriginY + 0x18; + + } else { + tmp = gPlayerEntity.y.HALF.HI - 0x28; + } + return sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gPlayerEntity.x.HALF.HI, tmp); + } + } +} + +void sub_08042120(Entity* this) { + this->action = 5; + this->subAction = 0; +} + +void sub_0804212C(Entity* this) { + Entity* arm; + u32 y, x; + + if (this->field_0x7c.HALF.LO != 0u) { + this->field_0x7c.HALF.LO--; + return; + } + arm = NULL; + y = this->y.HALF.HI - 0x44; + if (gPlayerEntity.y.HALF.HI - y < 0x61u) { + x = this->x.HALF.HI - 0x38; + if (gPlayerEntity.x.HALF.HI - x < 0x39u) { + arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[1]; + } else { + if ((gPlayerEntity.x.HALF.HI - this->x.HALF.HI) < 0x39u) { + arm = ((VaatiWrathHeapStruct*)this->myHeap)->arms[0]; + } + } + } + if (arm != NULL) { + if (arm->action != 2) { + return; + } + if ((Random() & 1) == 0) { + return; + } + arm->action = 3; + arm->subAction = 0; + this->field_0x7c.HALF.LO = 0x2d0; + } else { + this->field_0x7c.HALF.LO = 0x3c; + } +} + +void sub_080421AC(Entity* this) { + if (this->field_0x7c.HALF_U.HI != 0) { + this->field_0x7c.HALF_U.HI--; + } else { + if (this->field_0x78.HALF.HI == 0) { + if (((Random() & 1) != 0) && ((gScreenTransition.field_0x39 & 0xc) != 0)) { + sub_08042264(this); + this->field_0x78.HALF.HI = 1; + return; + } + this->field_0x7c.HALF_U.HI = 0x1e; + return; + } + if (sub_080422C0(this, 0) == 0) { + return; + } + this->field_0x78.HALF.HI = 0; + this->field_0x7c.HALF_U.HI = 0x168; + } +} + +void sub_08042214(Entity* this) { + if (this->field_0x7c.HALF_U.HI != 0) { + this->field_0x7c.HALF_U.HI--; + } else { + if (this->field_0x78.HALF.HI == 0) { + if ((Random() & 3) != 0) { + sub_0804228C(this); + this->field_0x78.HALF.HI = 1; + return; + } + this->field_0x7c.HALF_U.HI = 0x1e; + } else { + if (sub_080422C0(this, 1) == 0) { + return; + } + this->field_0x78.HALF.HI = 0; + this->field_0x7c.HALF_U.HI = 0xb4; + } + } +} + +void sub_08042264(Entity* this) { + InitAnimationForceUpdate(this, 1); + ((VaatiWrathHeapStruct*)this->myHeap)->type1->subAction = 1; + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type1, 0xd); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x13); +} + +void sub_0804228C(Entity* this) { + InitAnimationForceUpdate(this, 2); + ((VaatiWrathHeapStruct*)this->myHeap)->type1->subAction = 1; + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type1, 0xd); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x13); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type3, 0x1d); +} + +u32 sub_080422C0(Entity* this, u32 unk1) { + Entity* type1; + Entity* child; + u32 tmp; + + UpdateAnimationSingleFrame(this); + GetNextFrame(((VaatiWrathHeapStruct*)this->myHeap)->type2); + type1 = ((VaatiWrathHeapStruct*)this->myHeap)->type1; + GetNextFrame(type1); + if (unk1 + 1 == (tmp = type1->frames.all)) { + child = CreateProjectile(0x21); + if (child != NULL) { + child->type = unk1; + child->parent = this; + type1->frames.all &= ~tmp; + } + } else { + if (type1->frames.all == 4) { + type1->frames.all &= 0xfb; + InitAnimationForceUpdate(this, 3); + } else { + if ((type1->frames.b.f3) != 0) { + InitAnimationForceUpdate(this, 0); + type1->subAction = 0; + InitializeAnimation(type1, 0xc); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x12); + if (unk1 == 1) { + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type3, 0x1b); + } + return 1; + } + } + } + return 0; +} + +void sub_0804235C(Entity* this) { + Entity* type1; + + this->action = 7; + this->actionDelay = 120; + this->field_0x78.HALF.HI = 0; + this->field_0x7c.HALF.HI = 0xf0; + InitAnimationForceUpdate(this, 0); + type1 = ((VaatiWrathHeapStruct*)this->myHeap)->type1; + type1->subAction = 0; + InitializeAnimation(type1, 0xc); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type2, 0x12); + InitializeAnimation(((VaatiWrathHeapStruct*)this->myHeap)->type3, 0x1b); +} + +#if defined USA || defined DEMO +void VaatiWrathType0PreAction(Entity* this) { + int temp; + if ((gScreenTransition.field_0x38 & 2) == 0) { + if (gSave.unk498 != 0) { + gSave.unk498--; + } else { + temp = gPlayerState.field_0xa9; + if (temp < 2) { + if (temp >= 0) { + if (gPlayerState.field_0x2c == NULL) { + if (gPlayerEntity.field_0x7a.HWORD == 0) { + if ((gPlayerEntity.height.HALF.HI & 0x8000U) == 0 || (gPlayerState.field_0xa != 0)) { + sub_08078AA8(0xb70, 0); + gScreenTransition.field_0x38 |= 2; + } + } + } + } + } + } + } +} +#endif + +void VaatiWrathType1(Entity* this) { + if (((VaatiWrathHeapStruct*)this->myHeap)->type0->next == NULL) { + this->myHeap = NULL; + DeleteThisEntity(); + } + if (this->action == 0) { + this->action = 1; + this->subAction = 0; + InitializeAnimation(this, 0xc); + } + if (this->subAction == 0) { + GetNextFrame(this); + } + if ((*(u32*)&this->animIndex & 0x8000ff) == 0x80000c) { + InitializeAnimation(this, 0xc); + this->frameDuration = (Random() & 0x78) + 0x78; + } + sub_0806FA90(((VaatiWrathHeapStruct*)this->myHeap)->type0, this, 0, 1); + this->spriteOffsetY--; +} + +void VaatiWrathType2(Entity* this) { + u32 uVar1; + + if (((VaatiWrathHeapStruct*)this->myHeap)->type0->next == NULL) { + this->myHeap = NULL; + DeleteThisEntity(); + } + if (this->action == 0) { + this->action = 1; + InitializeAnimation(this, 0x12); + } + sub_0806FA90(((VaatiWrathHeapStruct*)this->myHeap)->type0, this, 0, -1); + this->spriteOffsetY += 1; + if (this->animIndex == 0x12) { + uVar1 = GetFacingDirection(this, &gPlayerEntity); + this->x.HALF.HI = gUnk_080D0EB0[uVar1] + this->x.HALF.HI; + } +} + +void VaatiWrathType3(Entity* this) { + if (((VaatiWrathHeapStruct*)this->myHeap)->type0->next == NULL) { + this->myHeap = NULL; + DeleteThisEntity(); + } + if (this->action == 0) { + this->action = 1; + InitializeAnimation(this, 0x1c); + } + sub_0806FA90(((VaatiWrathHeapStruct*)this->myHeap)->type0, this, 0, -1); + this->spriteOffsetY += 1; + GetNextFrame(this); +} diff --git a/src/enemy/vaatiWrathEye.c b/src/enemy/vaatiWrathEye.c new file mode 100644 index 00000000..53434faa --- /dev/null +++ b/src/enemy/vaatiWrathEye.c @@ -0,0 +1,211 @@ +#include "entity.h" +#include "audio.h" +#include "structures.h" +#include "functions.h" + +void sub_080485D8(Entity*); +void sub_080485FC(Entity*); +void VaatiWrathEyeAction0(Entity*); +void VaatiWrathEyeAction1(Entity*); +void VaatiWrathEyeAction2(Entity*); +void VaatiWrathEyeAction3(Entity*); +void VaatiWrathEyeAction4(Entity*); +void VaatiWrathEyeAction5(Entity*); +void VaatiWrathEyeAction6(Entity*); +void VaatiWrathEyeAction7(Entity*); +void VaatiWrathEyeAction8(Entity*); +void VaatiWrathEyeAction9(Entity*); + +void (*const vaatiWrathEyeActions[])(Entity*) = { + VaatiWrathEyeAction0, VaatiWrathEyeAction1, VaatiWrathEyeAction2, VaatiWrathEyeAction3, VaatiWrathEyeAction4, + VaatiWrathEyeAction5, VaatiWrathEyeAction6, VaatiWrathEyeAction7, VaatiWrathEyeAction8, VaatiWrathEyeAction9, +}; + +const s8 gUnk_080D1D70[] = { 0xee, 0x01, 0xfa, 0x04, 0x06, 0x04, 0x13, 0x01 }; + +const s8 gUnk_080D1D78[] = { 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfc, + 0xfb, 0xfa, 0xf9, 0xfa, 0xfb, 0xfb, 0xfc, 0xfd, 0xfc, 0xfb, 0xfa, + 0xf9, 0xfa, 0xfa, 0xfb, 0xfc, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9 }; + +const s8 gUnk_080D1D98[] = { 0xe8, 0x04, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x04 }; + +void VaatiWrathEye(Entity* this) { + if (this->parent->next == NULL) { + DeleteThisEntity(); + } + vaatiWrathEyeActions[this->action](this); +} + +void VaatiWrathEyeAction0(Entity* this) { + if ((gScreenTransition.field_0x38 & 1) != 0) { + this->action = 2; + InitializeAnimation(this, 1); + } else { + this->action = 1; + InitializeAnimation(this, 0); + SoundReq(SFX_166); + } + sub_080485D8(this); +} + +void VaatiWrathEyeAction1(Entity* this) { + sub_080485D8(this); + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->action = 2; + InitializeAnimation(this, 1); + } +} + +void VaatiWrathEyeAction2(Entity* this) { + sub_080485D8(this); + if ((gScreenTransition.field_0x39 & 3) == 0) { + this->action = 3; + this->flags |= 0x80; + this->speed = 0x80; + } +} + +void VaatiWrathEyeAction3(Entity* this) { + u32 direction; + Entity* parent; + u32 x; + u32 y; + + const s8* ptr; + + parent = this->parent; + if (parent->field_0x78.HALF.HI != 0) { + sub_080485D8(this); + } else { + ptr = &gUnk_080D1D98[this->type * 2]; + x = parent->x.HALF.HI + ptr[0]; + y = parent->y.HALF.HI + ptr[1]; + direction = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y); + this->direction = direction; + sub_0806F69C(this); + this->height.HALF.HI = this->parent->height.HALF.HI; + if ((this->x.HALF.HI == x) && (this->y.HALF.HI == y)) { + this->action = 4; + this->actionDelay = 0x3c; + } + } +} + +void VaatiWrathEyeAction4(Entity* this) { + sub_080485FC(this); + if (this->actionDelay != 0) { + if (--this->actionDelay == 0) { + InitializeAnimation(this, 3); + } + } else { + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->action = 5; + this->actionDelay = 0; + } + } +} + +void VaatiWrathEyeAction5(Entity* this) { + if (this->actionDelay != 0) { + this->action = 6; + if (this->parent->currentHealth >= 0x15) { + this->actionDelay = 120; + } else { + this->actionDelay = 0x3c; + } + this->attachedEntity = NULL; + InitializeAnimation(this, 5); + SoundReq(SFX_19B); + } + sub_080485FC(this); +} + +void VaatiWrathEyeAction6(Entity* this) { + Entity* pEVar3; + + sub_080485FC(this); + GetNextFrame(this); + if (this->actionDelay != 0) { + if (--this->actionDelay == 0) { + InitializeAnimation(this, 6); + } + } else { + if (this->frames.b.f3) { + this->action = 7; + this->actionDelay = 120; + this->field_0xf = 0; + } else { + if (this->frames.b.f0 != 0) { + this->frames.all &= 0xfe; + pEVar3 = CreateProjectile(0x24); + if (pEVar3 != NULL) { + pEVar3->parent = this; + this->attachedEntity = pEVar3; + PositionRelative(this, pEVar3, 0, 0xc0000); + } + } + } + } +} + +void VaatiWrathEyeAction7(Entity* this) { + sub_080485FC(this); + GetNextFrame(this); + if (this->field_0xf != 0) { + this->action = 8; + this->actionDelay = 0x3c; + this->flags &= 0x7f; + this->spriteSettings.b.draw = 0; + CreateFx(this, 0x1f, 0x40); + this->parent->field_0x7a.HALF.HI |= 0x10 << this->type; + } else { + if (--this->actionDelay != 0) { + return; + } + this->action = 5; + this->actionDelay = 0; + this->parent->field_0x7a.HALF.HI |= 1 << this->type; + } +} + +void VaatiWrathEyeAction8(Entity* this) { + if (this->parent->action == 0xb) { + this->actionDelay = 0x3c; + } else { + if (--this->actionDelay == 0) { + this->action = 9; + this->flags |= 0x80; + this->spriteSettings.b.draw = 1; + InitializeAnimation(this, 0); + sub_080485FC(this); + SoundReq(SFX_166); + } + } +} + +void VaatiWrathEyeAction9(Entity* this) { + sub_080485FC(this); + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->action = 4; + this->actionDelay = 1; + this->parent->field_0x7a.HALF.HI = (this->parent->field_0x7a.HALF.HI & 0xf) | (1 << this->type); + } +} + +void sub_080485D8(Entity* this) { + const s8* ptr; + + ptr = &gUnk_080D1D70[this->type * 2]; + sub_0806FA90(this->parent, this, ptr[0], ptr[1]); +} + +void sub_080485FC(Entity* this) { + const s8* ptr; + + ptr = &gUnk_080D1D98[this->type * 2]; + sub_0806FA90(this->parent, this, ptr[0], ptr[1]); + this->height.HALF.HI = gUnk_080D1D78[this->type * 8 + (this->parent->field_0x78.HALF.LO >> 4 & 7)]; +} diff --git a/src/entity.c b/src/entity.c index 02230491..60e571ff 100644 --- a/src/entity.c +++ b/src/entity.c @@ -48,11 +48,11 @@ typedef struct { extern struct_03003DD0 gUnk_03003DD0; extern u32 _call_via_r0(u32*); -extern u32 _EntUpdate; +extern u32 _ClearAndUpdateEntities; void DeleteThisEntity(void) { DeleteEntityAny(gUnk_03003DD0.field_0x8); - _call_via_r0((u32*)&_EntUpdate); + _call_via_r0((u32*)&_ClearAndUpdateEntities); } void DeleteManager(OtherEntity*); diff --git a/src/manager/manager34.c b/src/manager/manager34.c index 77e9dee4..1fb2b9ef 100644 --- a/src/manager/manager34.c +++ b/src/manager/manager34.c @@ -22,7 +22,7 @@ void Manager34_Main(Manager34* this) { void sub_0805DBB4(Manager34* this) { this->manager.action = 1; - this->field_0x20 = gScreenTransition.filler[0] * 0x3c; + this->field_0x20 = gScreenTransition.field_0x3d * 0x3c; } void sub_0805DBCC(Manager34* this) { diff --git a/src/npc.c b/src/npc.c index 4a94399b..50e4c7ff 100644 --- a/src/npc.c +++ b/src/npc.c @@ -4,134 +4,134 @@ //clang-format off void (*const gNPCFunctions[][3])(Entity* ent) = { - /*0x00*/ { DeleteEntity, NULL, NULL }, - /*0x01*/ { Gentari, NULL, Gentari_Fusion }, - /*0x02*/ { Festari, NULL, Festari_Fusion }, - /*0x03*/ { ForestMinish, ForestMinish_Head, ForestMinish_Fusion }, - /*0x04*/ { Postman, NULL, Postman_Fusion }, - /*0x05*/ { NPC5, NULL, NULL }, - /*0x06*/ { Townsperson, Townsperson_Head, Townsperson_Fusion }, - /*0x07*/ { Kid, Kid_Head, Kid_Fusion }, - /*0x08*/ { Guard, Guard_Head, NULL }, - /*0x09*/ { NPC9, NULL, NULL }, - /*0x0a*/ { Stamp, NULL, NULL }, - /*0x0b*/ { Maid, Maid_Head, NULL }, - /*0x0c*/ { Marcy, NULL, NULL }, - /*0x0d*/ { Wheaton, NULL, NULL }, - /*0x0e*/ { Pita, NULL, NULL }, - /*0x0f*/ { MinishEzlo, MinishEzlo_Head, NULL }, - /*0x10*/ { Mailbox, NULL, NULL }, - /*0x11*/ { Beedle, Beedle_Head, NULL }, - /*0x12*/ { Brocco, NULL, Brocco_Fusion }, - /*0x13*/ { SittingPerson, SittingPerson_Head, SittingPerson_Fusion }, - /*0x14*/ { Pina, NULL, Pina_Fusion }, - /*0x15*/ { Guard, Guard_Head, NULL }, - /*0x16*/ { Maid, Maid_Head, NULL }, - /*0x17*/ { Din, NULL, Din_Fusion }, - /*0x18*/ { Nayru, NULL, Nayru_Fusion }, - /*0x19*/ { Farore, NULL, Farore_Fusion }, - /*0x1a*/ { Sturgeon, Sturgeon_Head, Sturgeon_Fusion }, - /*0x1b*/ { TingleSiblings, NULL, TingleSiblings_Fusion }, - /*0x1c*/ { Stockwell, NULL, NULL }, - /*0x1d*/ { Talon, Talon_Head, Talon_Fusion }, - /*0x1e*/ { Malon, NULL, Malon_Fusion }, - /*0x1f*/ { Epona, NULL, Epona_Fusion }, - /*0x20*/ { MilkCart, NULL, NULL }, - /*0x21*/ { GhostBrothers, NULL, GhostBrothers_Fusion }, - /*0x22*/ { Smith, Smith_Head, Smith_Fusion }, - /*0x23*/ { NPC23, NULL, NULL }, - /*0x24*/ { KingDaltus, NULL, KingDaltus_Fusion }, - /*0x25*/ { MinisterPotho, NULL, MinisterPotho_Fusion }, - /*0x26*/ { NPC26, NULL, NULL }, - /*0x27*/ { Vaati, NULL, NULL }, - /*0x28*/ { Zelda, NULL, NULL }, - /*0x29*/ { Mutoh, Mutoh_Head, Mutoh_Fusion }, - /*0x2a*/ { Carpenter, Carpenter_Head, Carpenter_Fusion }, - /*0x2b*/ { CastorWildsStatue, NULL, CastorWildsStatue_Fusion }, - /*0x2c*/ { Cat, NULL, Cat_Fusion }, - /*0x2d*/ { MountainMinish, MountainMinish_Head, MountainMinish_Fusion }, - /*0x2e*/ { ZeldaFollower, NULL, NULL }, - /*0x2f*/ { Melari, Melari_Head, Melari_Fusion }, - /*0x30*/ { BladeBrothers, NULL, BladeBrothers_Fusion }, - /*0x31*/ { Cow, NULL, Cow_Fusion }, - /*0x32*/ { Goron, NULL, Goron_Fusion }, - /*0x33*/ { GoronMerchant, NULL, NULL }, - /*0x34*/ { Gorman, Gorman_Head, NULL }, - /*0x35*/ { Dog, Dog_Head, Dog_Fusion }, - /*0x36*/ { Syrup, Syrup_Head, NULL }, - /*0x37*/ { Rem, NULL, NULL }, - /*0x38*/ { TownMinish, TownMinish_Head, TownMinish_Fusion }, - /*0x39*/ { Librari, NULL, Librari_Fusion }, - /*0x3a*/ { Percy, Percy_Head, Percy_Fusion }, - /*0x3b*/ { VaatiReborn, NULL, NULL }, - /*0x3c*/ { MoblinLady, NULL, NULL }, - /*0x3d*/ { Librarians, NULL, NULL }, - /*0x3e*/ { Farmers, Farmers_Head, Farmers_Fusion }, - /*0x3f*/ { Carlov, NULL, NULL }, - /*0x40*/ { Dampe, NULL, Dampe_Fusion }, - /*0x41*/ { DrLeft, NULL, NULL }, - /*0x42*/ { KingGustaf, NULL, NULL }, - /*0x43*/ { Gina, NULL, Gina_Fusion }, - /*0x44*/ { Simon, NULL, NULL }, - /*0x45*/ { Anju, NULL, Anju_Fusion }, - /*0x46*/ { Mama, Mama_Head, Mama_Fusion }, - /*0x47*/ { Emma, NULL, NULL }, - /*0x48*/ { Teachers, Teachers_Head, Teachers_Fusion }, - /*0x49*/ { WindTribespeople, WindTribespeople_Head, WindTribespeople_Fusion }, - /*0x4a*/ { Gregal, NULL, Gregal_Fusion }, - /*0x4b*/ { MayorHagen, NULL, MayorHagen_Fusion }, - /*0x4c*/ { BigGoron, NULL, NULL }, - /*0x4d*/ { EzloCap, NULL, NULL }, - /*0x4e*/ { NPC4E, NULL, NPC4E_Fusion }, - /*0x4f*/ { NPC4F, NULL, NULL }, - /*0x50*/ { ClothesRack, NULL, NULL }, - /*0x51*/ { PicolyteBottle, NULL, NULL }, - /*0x52*/ { SmallTownMinish, NULL, NULL }, - /*0x53*/ { HurdyGurdyMan, HurdyGurdyMan_Head, HurdyGurdyMan_Fusion }, - /*0x54*/ { Cucco, NULL, Cucco_Fusion }, - /*0x55*/ { CuccoChick, NULL, CuccoChick_Fusion }, - /*0x56*/ { FusionMenuNPC, FusionMenuNPC_Head, NULL }, - /*0x57*/ { Phonograph, NULL, NULL }, - /*0x58*/ { NPC58, NPC58_Head, NULL }, - /*0x59*/ { DeleteEntity, NULL, NULL }, - /*0x5a*/ { DeleteEntity, NULL, NULL }, - /*0x5b*/ { DeleteEntity, NULL, NULL }, - /*0x5c*/ { DeleteEntity, NULL, NULL }, - /*0x5d*/ { DeleteEntity, NULL, NULL }, - /*0x5e*/ { DeleteEntity, NULL, NULL }, - /*0x5f*/ { DeleteEntity, NULL, NULL }, - /*0x60*/ { DeleteEntity, NULL, NULL }, - /*0x61*/ { DeleteEntity, NULL, NULL }, - /*0x62*/ { DeleteEntity, NULL, NULL }, - /*0x63*/ { DeleteEntity, NULL, NULL }, - /*0x64*/ { DeleteEntity, NULL, NULL }, - /*0x65*/ { DeleteEntity, NULL, NULL }, - /*0x66*/ { DeleteEntity, NULL, NULL }, - /*0x67*/ { DeleteEntity, NULL, NULL }, - /*0x68*/ { DeleteEntity, NULL, NULL }, - /*0x69*/ { DeleteEntity, NULL, NULL }, - /*0x6a*/ { DeleteEntity, NULL, NULL }, - /*0x6b*/ { DeleteEntity, NULL, NULL }, - /*0x6c*/ { DeleteEntity, NULL, NULL }, - /*0x6d*/ { DeleteEntity, NULL, NULL }, - /*0x6e*/ { DeleteEntity, NULL, NULL }, - /*0x6f*/ { DeleteEntity, NULL, NULL }, - /*0x70*/ { DeleteEntity, NULL, NULL }, - /*0x71*/ { DeleteEntity, NULL, NULL }, - /*0x72*/ { DeleteEntity, NULL, NULL }, - /*0x73*/ { DeleteEntity, NULL, NULL }, - /*0x74*/ { DeleteEntity, NULL, NULL }, - /*0x75*/ { DeleteEntity, NULL, NULL }, - /*0x76*/ { DeleteEntity, NULL, NULL }, - /*0x77*/ { DeleteEntity, NULL, NULL }, - /*0x78*/ { DeleteEntity, NULL, NULL }, - /*0x79*/ { DeleteEntity, NULL, NULL }, - /*0x7a*/ { DeleteEntity, NULL, NULL }, - /*0x7b*/ { DeleteEntity, NULL, NULL }, - /*0x7c*/ { DeleteEntity, NULL, NULL }, - /*0x7d*/ { DeleteEntity, NULL, NULL }, - /*0x7e*/ { DeleteEntity, NULL, NULL }, - /*0x7f*/ { DeleteEntity, NULL, NULL } + [NPC_NONE_0] = { DeleteEntity, NULL, NULL }, + [GENTARI] = { Gentari, NULL, Gentari_Fusion }, + [FESTARI] = { Festari, NULL, Festari_Fusion }, + [FOREST_MINISH] = { ForestMinish, ForestMinish_Head, ForestMinish_Fusion }, + [POSTMAN] = { Postman, NULL, Postman_Fusion }, + [NPC_UNK_5] = { NPC5, NULL, NULL }, + [TPWNSPERSON] = { Townsperson, Townsperson_Head, Townsperson_Fusion }, + [KID] = { Kid, Kid_Head, Kid_Fusion }, + [GUARD] = { Guard, Guard_Head, NULL }, + [NPC_UNK_9] = { NPC9, NULL, NULL }, + [STAMP] = { Stamp, NULL, NULL }, + [MAID] = { Maid, Maid_Head, NULL }, + [MARCY] = { Marcy, NULL, NULL }, + [WHEATON] = { Wheaton, NULL, NULL }, + [PITA] = { Pita, NULL, NULL }, + [MINISH_EZLO] = { MinishEzlo, MinishEzlo_Head, NULL }, + [MAILBOX] = { Mailbox, NULL, NULL }, + [BEEDLE] = { Beedle, Beedle_Head, NULL }, + [BROCCO] = { Brocco, NULL, Brocco_Fusion }, + [SITTING_PERSON] = { SittingPerson, SittingPerson_Head, SittingPerson_Fusion }, + [PINA] = { Pina, NULL, Pina_Fusion }, + [GUARD_1] = { Guard, Guard_Head, NULL }, + [MAID_1] = { Maid, Maid_Head, NULL }, + [DIN] = { Din, NULL, Din_Fusion }, + [NAYRU] = { Nayru, NULL, Nayru_Fusion }, + [FARORE] = { Farore, NULL, Farore_Fusion }, + [STURGEON] = { Sturgeon, Sturgeon_Head, Sturgeon_Fusion }, + [TINGLE_SIBLINGS] = { TingleSiblings, NULL, TingleSiblings_Fusion }, + [STOCKWELL] = { Stockwell, NULL, NULL }, + [TALON] = { Talon, Talon_Head, Talon_Fusion }, + [MALON] = { Malon, NULL, Malon_Fusion }, + [EPONA] = { Epona, NULL, Epona_Fusion }, + [MILK_CART] = { MilkCart, NULL, NULL }, + [GHOST_BROTHERS] = { GhostBrothers, NULL, GhostBrothers_Fusion }, + [SMITH] = { Smith, Smith_Head, Smith_Fusion }, + [NPC_UNK_23] = { NPC23, NULL, NULL }, + [KING_DALTUS] = { KingDaltus, NULL, KingDaltus_Fusion }, + [MINISTER_POTHO] = { MinisterPotho, NULL, MinisterPotho_Fusion }, + [NPC_UNK_26] = { NPC26, NULL, NULL }, + [VAATI] = { Vaati, NULL, NULL }, + [ZELDA] = { Zelda, NULL, NULL }, + [MUTOH] = { Mutoh, Mutoh_Head, Mutoh_Fusion }, + [CARPENTER] = { Carpenter, Carpenter_Head, Carpenter_Fusion }, + [CASTOR_WILDS_STATUE] = { CastorWildsStatue, NULL, CastorWildsStatue_Fusion }, + [CAT] = { Cat, NULL, Cat_Fusion }, + [MOUNTAIN_MINISH] = { MountainMinish, MountainMinish_Head, MountainMinish_Fusion }, + [ZELDA_FOLLOWER] = { ZeldaFollower, NULL, NULL }, + [MELARI] = { Melari, Melari_Head, Melari_Fusion }, + [BLADE_BROTHERS] = { BladeBrothers, NULL, BladeBrothers_Fusion }, + [COW] = { Cow, NULL, Cow_Fusion }, + [GORON] = { Goron, NULL, Goron_Fusion }, + [GORON_MERCHANT] = { GoronMerchant, NULL, NULL }, + [GORMAN] = { Gorman, Gorman_Head, NULL }, + [DOG] = { Dog, Dog_Head, Dog_Fusion }, + [SYRUP] = { Syrup, Syrup_Head, NULL }, + [REM] = { Rem, NULL, NULL }, + [TOWN_MINISH] = { TownMinish, TownMinish_Head, TownMinish_Fusion }, + [LIBRARI] = { Librari, NULL, Librari_Fusion }, + [PERCY] = { Percy, Percy_Head, Percy_Fusion }, + [VAATI_REBORN] = { VaatiReborn, NULL, NULL }, + [MOBLIN_LADY] = { MoblinLady, NULL, NULL }, + [LIBRARIANS] = { Librarians, NULL, NULL }, + [FARMERS] = { Farmers, Farmers_Head, Farmers_Fusion }, + [CARLOV] = { Carlov, NULL, NULL }, + [DAMPE] = { Dampe, NULL, Dampe_Fusion }, + [DR_LEFT] = { DrLeft, NULL, NULL }, + [KING_GUSTAF] = { KingGustaf, NULL, NULL }, + [GINA] = { Gina, NULL, Gina_Fusion }, + [SIMON] = { Simon, NULL, NULL }, + [ANJU] = { Anju, NULL, Anju_Fusion }, + [MAMA] = { Mama, Mama_Head, Mama_Fusion }, + [EMMA] = { Emma, NULL, NULL }, + [TEACHERS] = { Teachers, Teachers_Head, Teachers_Fusion }, + [WIND_TRIBESPEOPLE] = { WindTribespeople, WindTribespeople_Head, WindTribespeople_Fusion }, + [GREGAL] = { Gregal, NULL, Gregal_Fusion }, + [MAYOR_HAGEN] = { MayorHagen, NULL, MayorHagen_Fusion }, + [BIG_GORON] = { BigGoron, NULL, NULL }, + [EZLO_CAP] = { EzloCap, NULL, NULL }, + [NPC_UNK_4E] = { NPC4E, NULL, NPC4E_Fusion }, + [NPC_UNK_4F] = { NPC4F, NULL, NULL }, + [CLOTHES_RACK] = { ClothesRack, NULL, NULL }, + [PICOLYTE_BOTTLE] = { PicolyteBottle, NULL, NULL }, + [SMALL_TOWN_MINISH] = { SmallTownMinish, NULL, NULL }, + [HURDY_GURDY_MAN] = { HurdyGurdyMan, HurdyGurdyMan_Head, HurdyGurdyMan_Fusion }, + [CUCCO] = { Cucco, NULL, Cucco_Fusion }, + [CUCCO_CHICK] = { CuccoChick, NULL, CuccoChick_Fusion }, + [FUSION_MENU_NPC] = { FusionMenuNPC, FusionMenuNPC_Head, NULL }, + [PHONOGRAPH] = { Phonograph, NULL, NULL }, + [NPC_UNK_58] = { NPC58, NPC58_Head, NULL }, + [NPC_NONE_1] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_2] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_3] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_4] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_5] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_6] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_7] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_8] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_9] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_10] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_11] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_12] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_13] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_14] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_15] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_16] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_17] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_18] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_19] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_20] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_21] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_22] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_23] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_24] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_25] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_26] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_27] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_28] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_29] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_30] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_31] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_32] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_33] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_34] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_35] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_36] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_37] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_38] = { DeleteEntity, NULL, NULL }, + [NPC_NONE_39] = { DeleteEntity, NULL, NULL } }; //clang-format on const u8 npc_unk[] = { 0x04, 0x05, 0x06, 0x06 }; diff --git a/src/npc/guard.c b/src/npc/guard.c index d94827c4..7e9b0034 100644 --- a/src/npc/guard.c +++ b/src/npc/guard.c @@ -64,7 +64,7 @@ void sub_08063D44(Entity* this) { sub_0806EE04(this, gUnk_0810F6BC[this->type], 0); switch (this->type) { case 0 ... 3: - ent = sub_080A7EE0(0xc); + ent = CreateProjectile(0xc); ent->parent = this; ent->field_0xf = 0x3c; break; diff --git a/src/npc/vaati.c b/src/npc/vaati.c new file mode 100644 index 00000000..c5b8a757 --- /dev/null +++ b/src/npc/vaati.c @@ -0,0 +1,130 @@ +#include "global.h" +#include "entity.h" +#include "script.h" +#include "audio.h" +#include "structures.h" +#include "functions.h" + +extern void sub_08095CB0(Entity*); +extern void CreateManager36(Entity*); +extern void DeleteManager36(Entity*); +extern void sub_0805DA90(Entity*, u32); + +void VaatiAction0(Entity*); +void VaatiAction1(Entity*); +void sub_08066B74(Entity*, ScriptExecutionContext*); + +void (*const vaatiActions[])(Entity*) = { VaatiAction0, VaatiAction1 }; + +void Vaati(Entity* this) { + vaatiActions[this->action](this); + this->palette.b.b0 = this->palette.b.b4 + (this->frameSpriteSettings & 1); +} + +void VaatiAction0(Entity* this) { + this->action = 1; + this->subAction = 0; + this->spriteSettings.b.draw = 1; + this->field_0x68.HALF.LO = 0; + this->field_0x68.HALF.HI = 0; + sub_0805E3A0(this, 2); + sub_0807DD64(this); + VaatiAction1(this); +} + +void VaatiAction1(Entity* this) { + ScriptExecutionContext* tmp; + sub_0807DD94(this, sub_08066B74); + if ((*(s8*)&this->field_0x68.HALF.HI != 0) && ((gScreenTransition.frameCount & 3) == 0)) { + sub_08095CB0(this); + } + + if ((this->frames.all & ~0x80) != 0) { + switch (this->frames.all & ~0x80u) { + case 1: + EnqueueSFX(SFX_21C); + break; + case 2: + EnqueueSFX(SFX_21E); + break; + case 3: + tmp = (*(ScriptExecutionContext**)&this->cutsceneBeh); + tmp->intVariable = 4; + CreateManager36(this); + break; + case 4: + tmp = (*(ScriptExecutionContext**)&this->cutsceneBeh); + tmp->intVariable = 4; + DeleteManager36(this); + EnqueueSFX(SFX_21D); + break; + } + this->frames.b.f3 = 0; + } +} + +void sub_08066B74(Entity* this, ScriptExecutionContext* context) { + u8 animationState; + u32 currentAction; + u32 actions; + + actions = context->postScriptActions & 0xfff00000; + context->postScriptActions = context->postScriptActions & 0xfffff; + if (actions != 0) { + do { + currentAction = (~actions + 1) & actions; + actions = actions ^ currentAction; + animationState = this->animationState >> 1; + + switch (currentAction) { + case 1 << 20: + this->field_0x80.HWORD = animationState + 0x10; + break; + case 1 << 21: + this->field_0x80.HWORD = animationState + 0x14; + break; + case 1 << 22: + this->field_0x80.HWORD = animationState + 0x18; + break; + case 1 << 23: + this->field_0x80.HWORD = animationState + 0x1c; + break; + case 1 << 24: + this->field_0x80.HWORD = animationState + 0x20; + break; + case 1 << 25: + this->field_0x80.HWORD = animationState + 0x24; + break; + case 1 << 26: + this->field_0x80.HWORD = animationState + 0x28; + break; + case 1 << 27: + this->field_0x80.HWORD = animationState + 0x2c; + break; + case 1 << 28: + this->field_0x80.HWORD = animationState + 0x30; + break; + case 1 << 29: + this->field_0x68.HALF.LO = 1; + break; + case 1 << 30: + this->field_0x68.HALF.LO = 0xff; + break; + case 1 << 31: + this->field_0x68.HALF.HI ^= 1; + break; + } + } while (actions != 0); + } + HandlePostScriptActions(this, *(ScriptExecutionContext**)&this->cutsceneBeh); +} + +void sub_08066C94(Entity* this) { + sub_0805DA90(this, 0); + SoundReq(SFX_APPARATE); +} + +void sub_08066CA4(Entity* this) { + sub_0805DA90(this, 1); + SoundReq(SFX_EVAPORATE); +} diff --git a/src/npc/vaatiReborn.c b/src/npc/vaatiReborn.c new file mode 100644 index 00000000..b3555aeb --- /dev/null +++ b/src/npc/vaatiReborn.c @@ -0,0 +1,213 @@ +#include "global.h" +#include "npc.h" +#include "coord.h" +#include "flags.h" +#include "audio.h" +#include "textbox.h" +#include "functions.h" + +void VaatiRebornAction0(Entity* this); +void VaatiRebornAction1(Entity* this); +void sub_0806B96C(Entity*); +Entity* sub_0806B9BC(Entity*); + +typedef struct xy { + s8 x; + s8 y; +} PACKED xy; + +void (*const vaatiRebornActions[])(Entity*) = { + VaatiRebornAction0, + VaatiRebornAction1, +}; +const xy gUnk_08112F80[] = { { 10, -29 }, { -10, -29 }, { 15, -21 }, { -15, -21 } }; + +void VaatiReborn(Entity* this) { + vaatiRebornActions[this->action](this); +} + +void VaatiRebornAction0(Entity* this) { + Entity* entity; + u32 i; + + this->action = 1; + this->subAction = 0; + this->actionDelay = 0; + switch (this->type) { + case 0: + this->y.HALF.HI -= 0xa0; + this->actionDelay = 0xa0; + this->field_0xf = 0x20; + this->spriteOffsetY = 0x20; + for (i = 0; i < 4; i++) { + entity = CreateNPC(VAATI_REBORN, 2, i); + if (entity != NULL) { + entity->parent = this; + } + } + entity = CreateNPC(VAATI_REBORN, 1, 0); + entity->parent = this; + entity->spriteOffsetY = -1; + PositionRelative(this, entity, 0, 0x10000); + InitAnimationForceUpdate(this, 0); + break; + case 1: + case 5: + InitAnimationForceUpdate(this, 0); + break; + case 2: + if ((this->type2 & 2) != 0) { + this->spriteSettings.b.flipX = 1; + } + sub_0806B96C(this); + InitAnimationForceUpdate(this, 0); + break; + case 3: + this->actionDelay = 1; + this->field_0xf = 0x20; + entity = CreateNPC(VAATI_REBORN, 4, 0); + if (entity != NULL) { + CopyPosition(this, entity); + entity->parent = this; + entity->spritePriority.b0 = this->spritePriority.b0 - 1; + entity->frameIndex = 0; + } + entity = CreateNPC(VAATI_REBORN, 5, 0); + if (entity != NULL) { + CopyPosition(this, entity); + entity->parent = this; + entity->spritePriority.b0 = this->spritePriority.b0 + 1; + } + InitAnimationForceUpdate(this, 0); + break; + case 4: + InitializeAnimation(this, 0); + break; + default: + break; + } +} + +void VaatiRebornAction1(Entity* this) { + Entity* entity; + + if (CheckRoomFlag(3) == 0) { + return; + } + switch (this->type) { + case 0: + this->y.HALF.HI++; + if (--this->actionDelay == 0) { + entity = CreateNPC(VAATI_REBORN, 3, 0); + if (entity == NULL) { + break; + } + CopyPosition(this, entity); + TextboxNoOverlapFollow(0x1634); + this->subAction = this->subAction + 1; + DeleteThisEntity(); + return; + } + if (this->field_0xf-- == 1) { + this->field_0xf = 0x20; + SoundReq(SFX_1A9); + } + UpdateAnimationSingleFrame(this); + break; + case 1: + entity = sub_0806B9BC(this); + if (entity == NULL) { + DeleteThisEntity(); + } + PositionRelative(entity, this, 0, 0x210000); + UpdateAnimationSingleFrame(this); + break; + case 2: + sub_0806B96C(this); + UpdateAnimationSingleFrame(this); + break; + case 3: + switch (this->subAction) { + case 0: + if (--this->actionDelay == 0) { + this->subAction += 1; + } + break; + case 1: + if (this->frames.b.f3 != 0) { + this->subAction = 2; + sub_0801D2B4(this, 0x13f); + InitAnimationForceUpdate(this, this->subAction - 1); + } + break; + case 2: + if ((this->frames.all & 0x10) != 0) { + this->frames.all &= 0xef; + + switch (++this->actionDelay) { + case 1: + break; + case 10: + this->subAction++; + EnqueueSFX(SFX_SUMMON); + this->actionDelay = 0; + InitAnimationForceUpdate(this, this->subAction - 1); + break; + } + } + break; + case 3: + if (this->frames.b.f3 != 0) { + SetRoomFlag(0); + DeleteThisEntity(); + } + break; + } + + if (--this->field_0xf == 0) { + this->field_0xf = 0x20; + SoundReq(SFX_1A9); + } + UpdateAnimationSingleFrame(this); + break; + default: + entity = sub_0806B9BC(this); + if (entity == NULL) { + DeleteThisEntity(); + break; + } + if (entity->subAction == 0) { + break; + } + if (this->type != 4) { + UpdateAnimationSingleFrame(this); + } else { + GetNextFrame(this); + } + break; + } +} + +void sub_0806B96C(Entity* this) { + Entity* entity; + const xy* ptr; + + entity = sub_0806B9BC(this); + if (entity == NULL) { + DeleteThisEntity(); + } + ptr = &gUnk_08112F80[this->type2]; + this->spriteSettings.b.draw = entity->spriteSettings.b.draw; + PositionRelative(entity, this, ptr->x << 0x10, (ptr->y + 0x21) << 0x10); + UpdateAnimationSingleFrame(this); +} + +Entity* sub_0806B9BC(Entity* this) { + Entity* entity; + + entity = this->parent; + if (entity != NULL && entity->next == NULL) { + entity = NULL; + } + return entity; +} diff --git a/src/object/objectB5.c b/src/object/objectB5.c new file mode 100644 index 00000000..5aae8152 --- /dev/null +++ b/src/object/objectB5.c @@ -0,0 +1,14 @@ +#include "entity.h" +#include "room.h" +#include "player.h" +#include "coord.h" + +void ObjectB5(Entity* this) { + if (this->action == 0) { + this->action = 1; + } +#ifndef EU + gRoomControls.cameraTarget = this; +#endif + PositionRelative(&gPlayerEntity, this, 0, -0x280000); +} diff --git a/src/projectile/projectileD.c b/src/projectile/arrowProjectile.c similarity index 61% rename from src/projectile/projectileD.c rename to src/projectile/arrowProjectile.c index 931728dd..48db32b3 100644 --- a/src/projectile/projectileD.c +++ b/src/projectile/arrowProjectile.c @@ -4,31 +4,29 @@ #include "audio.h" #include "createObject.h" -extern void (*const gUnk_081299D0[])(Entity*); - -extern void (*const gUnk_081299E4[])(Entity*); - -void sub_080A9488(Entity*); - -void sub_080A94C0(Entity*, u32); - extern s32 sub_080AF090(Entity*); +extern void (*const gArrowProjectile[])(Entity*); +extern void (*const gArrowProjectileActions[])(Entity*); + typedef struct { u8 flipX; u8 flipY; u8 animIndex; u8 unk; - Hitbox* hitbox; + const Hitbox* hitbox; } struct_081299F8; -extern struct_081299F8 gUnk_081299F8[]; +extern const struct_081299F8 gUnk_081299F8[]; -void ProjectileD(Entity* this) { - gUnk_081299D0[GetNextFunction(this)](this); +void sub_080A9488(Entity*); +void sub_080A94C0(Entity*, u32); + +void ArrowProjectile(Entity* this) { + gArrowProjectile[GetNextFunction(this)](this); } -void sub_080A931C(Entity* this) { - gUnk_081299E4[this->action](this); +void ArrowProjectile_OnTick(Entity* this) { + gArrowProjectileActions[this->action](this); } void sub_080A9334(Entity* this) { @@ -44,7 +42,7 @@ void sub_080A9334(Entity* this) { } } -void sub_080A9370(Entity* this) { +void ArrowProjectile_Init(Entity* this) { this->action = 1; this->spriteSettings.b.draw = 1; this->flags &= 0x7f; @@ -54,10 +52,8 @@ void sub_080A9370(Entity* this) { sub_080A94C0(this, this->type); } -void sub_080A93A0(Entity* this) { - Entity* parent; - - parent = this->parent; +void ArrowProjectile_Action1(Entity* this) { + Entity* parent = this->parent; if ((parent == NULL) || (parent->next == NULL)) { DeleteThisEntity(); } @@ -72,7 +68,7 @@ void sub_080A93A0(Entity* this) { } } -void sub_080A93DC(Entity* this) { +void ArrowProjectile_Action2(Entity* this) { if (this->collisions != 0) { this->action = 3; this->flags &= 0x7f; @@ -86,14 +82,14 @@ void sub_080A93DC(Entity* this) { sub_080AF090(this); } -void sub_080A942C(Entity* this) { +void ArrowProjectile_Action3(Entity* this) { if (--this->actionDelay == 0) { DeleteThisEntity(); } GetNextFrame(this); } -void sub_080A9448(Entity* this) { +void ArrowProjectile_Action4(Entity* this) { if (sub_08003FC4(this, 0x2800) == 0) { CreateDust(this); DeleteThisEntity(); @@ -116,11 +112,32 @@ void sub_080A9488(Entity* this) { sub_080A94C0(this, this->animationState); } -void sub_080A94C0(Entity* this, u32 param) { - struct_081299F8* entry = &gUnk_081299F8[param]; +void sub_080A94C0(Entity* this, u32 animationState) { + const struct_081299F8* entry = &gUnk_081299F8[animationState]; this->spriteSettings.b.flipX = entry->flipX; this->spriteSettings.b.flipY = entry->flipY; this->animIndex = entry->animIndex; - this->hitbox = entry->hitbox; + this->hitbox = (Hitbox*)entry->hitbox; InitializeAnimation(this, this->animIndex); } + +void (*const gArrowProjectile[])(Entity*) = { + ArrowProjectile_OnTick, sub_080A9334, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const gArrowProjectileActions[])(Entity*) = { + ArrowProjectile_Init, ArrowProjectile_Action1, ArrowProjectile_Action2, + ArrowProjectile_Action3, ArrowProjectile_Action4, +}; + +extern const Hitbox gUnk_08129A18; +extern const Hitbox gUnk_08129A20; + +const struct_081299F8 gUnk_081299F8[] = { + { 0, 0, 1, 0, &gUnk_08129A20 }, + { 1, 0, 0, 0, &gUnk_08129A18 }, + { 0, 1, 1, 0, &gUnk_08129A20 }, + { 0, 0, 0, 0, &gUnk_08129A18 }, +}; + +const Hitbox gUnk_08129A18 = { 0, 0, { 4, 0, 0, 0 }, 6, 4 }; +const Hitbox gUnk_08129A20 = { 0, 0, { 0, 0, 0, 4 }, 4, 6 }; diff --git a/src/projectile/projectile19.c b/src/projectile/ballAndChain.c similarity index 74% rename from src/projectile/projectile19.c rename to src/projectile/ballAndChain.c index 8c23bd65..065c9e8a 100644 --- a/src/projectile/projectile19.c +++ b/src/projectile/ballAndChain.c @@ -1,13 +1,13 @@ #include "entity.h" #include "functions.h" -extern void (*const gUnk_0812A494[])(Entity*); - extern u8 gEntCount; - bool32 sub_080AB12C(Entity* this); -void Projectile19(Entity* this) { +extern void (*const gUnk_0812A494[])(Entity*); +extern const u8 gUnk_0812A4A8[]; + +void BallAndChain(Entity* this) { gUnk_0812A494[this->type](this); } @@ -35,7 +35,7 @@ void sub_080AB074(Entity* this) { this->height.HALF.HI += (s8)parent->field_0x7c.BYTES.byte3; if (parent->field_0x7a.HALF.HI != 0) { - parent = sub_080A7EE0(0x19); + parent = CreateProjectile(0x19); if (parent != NULL) { parent->type = 4; CopyPositionAndSpriteOffset(this, parent); @@ -49,19 +49,19 @@ bool32 sub_080AB12C(Entity* this) { if (gEntCount > 0x44) { return FALSE; } - entity = sub_080A7EE0(0x19); + entity = CreateProjectile(0x19); entity->type = 1; entity->parent = this; - entity = sub_080A7EE0(0x19); + entity = CreateProjectile(0x19); entity->type = 2; entity->parent = this; - entity = sub_080A7EE0(0x19); + entity = CreateProjectile(0x19); entity->type = 3; entity->parent = this; return TRUE; } -ASM_FUNC("asm/non_matching/projectile19/sub_080AB170.inc", void sub_080AB170(Entity* this)) +ASM_FUNC("asm/non_matching/ballAndChain/sub_080AB170.inc", void sub_080AB170(Entity* this)) void sub_080AB26C(Entity* this) { if (this->action == 0) { @@ -78,3 +78,11 @@ void sub_080AB26C(Entity* this) { this->frameIndex += 1; } } + +void (*const gUnk_0812A494[])(Entity*) = { + sub_080AB074, sub_080AB170, sub_080AB170, sub_080AB170, sub_080AB26C, +}; +const u8 gUnk_0812A4A8[] = { + 6, 240, 10, 242, 10, 240, 8, 240, 252, 242, 248, 242, 252, 246, 4, 246, + 250, 242, 248, 240, 246, 242, 248, 244, 4, 242, 8, 242, 4, 246, 252, 246, +}; diff --git a/src/projectile/projectile2.c b/src/projectile/boneProjectile.c similarity index 65% rename from src/projectile/projectile2.c rename to src/projectile/boneProjectile.c index fa163358..61f60863 100644 --- a/src/projectile/projectile2.c +++ b/src/projectile/boneProjectile.c @@ -2,22 +2,21 @@ #include "enemy.h" #include "functions.h" -extern void (*const gUnk_0812960C[])(Entity*); - -extern void (*const gUnk_08129620[])(Entity*); - -void sub_080A82D8(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); -void Projectile2(Entity* this) { - gUnk_0812960C[GetNextFunction(this)](this); +extern void (*const BoneProjectile_Functions[])(Entity*); +extern void (*const BoneProjectile_Actions[])(Entity*); + +void sub_080A82D8(Entity*); + +void BoneProjectile(Entity* this) { + BoneProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A81AC(Entity* this) { - gUnk_08129620[this->action](this); +void BoneProjectile_OnTick(Entity* this) { + BoneProjectile_Actions[this->action](this); } void sub_080A81C4(Entity* this) { @@ -28,14 +27,14 @@ void sub_080A81C4(Entity* this) { } } -void sub_080A81E0(Entity* this) { +void BoneProjectile_Init(Entity* this) { this->action = 1; this->actionDelay = 0x3c; this->height.HALF.HI = 0xfffe; InitializeAnimation(this, 0); } -void sub_080A81FC(Entity* this) { +void BoneProjectile_Action1(Entity* this) { GetNextFrame(this); sub_080AF090(this); if (this->collisions == 0) { @@ -53,7 +52,7 @@ void sub_080A81FC(Entity* this) { } } -void sub_080A8248(Entity* this) { +void BoneProjectile_Action2(Entity* this) { GetNextFrame(this); sub_080AF090(this); if (sub_08003FC4(this, 0x1800) == 0) { @@ -64,7 +63,7 @@ void sub_080A8248(Entity* this) { } } -void sub_080A827C(Entity* this) { +void BoneProjectile_Action3(Entity* this) { this->spriteSettings.b.draw ^= 1; sub_0806F69C(this); GetNextFrame(this); @@ -73,7 +72,7 @@ void sub_080A827C(Entity* this) { } } -void sub_080A82B4(Entity* this) { +void BoneProjectile_Action4(Entity* this) { GetNextFrame(this); sub_0806F69C(this); if (sub_08003FC4(this, 0x1800) == 0) { @@ -88,3 +87,10 @@ void sub_080A82D8(Entity* this) { this->direction ^= 0x10; this->speed = 0x80; } + +void (*const BoneProjectile_Functions[])(Entity*) = { + BoneProjectile_OnTick, sub_080A81C4, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const BoneProjectile_Actions[])(Entity*) = { + BoneProjectile_Init, BoneProjectile_Action1, BoneProjectile_Action2, BoneProjectile_Action3, BoneProjectile_Action4, +}; diff --git a/src/projectile/cannonballProjectile.c b/src/projectile/cannonballProjectile.c new file mode 100644 index 00000000..950b6159 --- /dev/null +++ b/src/projectile/cannonballProjectile.c @@ -0,0 +1,104 @@ +#include "entity.h" +#include "enemy.h" +#include "functions.h" + +extern void CreateItemOnGround(Entity*); +extern s32 sub_080AF090(Entity*); +extern void sub_080043A8(Entity*); +extern void CreateChestSpawner(Entity*); +extern u32 sub_080177A0(Entity*, Entity*); + +extern void (*const CannonballProjectile_Functions[])(Entity*); +extern void (*const CannonballProjectile_Actions[])(Entity*); + +bool32 sub_080AB5F4(Entity*); +bool32 sub_080AB634(Entity*); + +void CannonballProjectile(Entity* this) { + CannonballProjectile_Functions[GetNextFunction(this)](this); +} + +void CannonballProjectile_OnTick(Entity* this) { + CannonballProjectile_Actions[this->action](this); +} + +void sub_080AB544(Entity* this) { + u32 tmp; + + if (this->iframes < -4) { + this->action = 2; + this->direction = this->field_0x3e; + tmp = (this->type ^ 2) << 3; + if (this->direction - tmp + 1 < 3) { + this->direction = tmp; + } + this->speed = 0x280; + } +} + +void CannonballProjectile_Init(Entity* this) { + this->action = 1; + this->direction = this->type << 3; + this->height.HALF.HI = 0xfffc; + InitializeAnimation(this, this->type); +} + +void CannonballProjectile_Action1(Entity* this) { + GetNextFrame(this); + if (sub_080AF090(this) == 0) { + CreateFx(this, 2, 0); + DeleteThisEntity(); + } + sub_080AB5F4(this); +} + +void CannonballProjectile_Action2(Entity* this) { + GetNextFrame(this); + sub_080AF090(this); + if ((sub_080AB634(this) == 0) && (this->collisions != 0)) { + CreateFx(this, 2, 0); + DeleteThisEntity(); + } +} + +bool32 sub_080AB5F4(Entity* this) { + switch (sub_080043E8(this)) { + case 1: + CreateItemOnGround(this); + return TRUE; + case 2: + sub_080043A8(this); + return TRUE; + case 3: + CreateChestSpawner(this); + return TRUE; + } + return FALSE; +} + +bool32 sub_080AB634(Entity* this) { + Entity** entities = ((Entity**)&this->parent->field_0x20); + u32 i; + for (i = 0; i <= 3; ++i) { + if (entities[i] != NULL && (sub_080177A0(this, entities[i]) != 0)) { + if (entities[i]->action < 3) { + entities[i]->action = 3; + entities[i]->actionDelay = 0x1e; + entities[i]->spriteSettings.b.draw = 0; + CreateFx(entities[i], 0x45, 0); + } + DeleteEntity(this); + return TRUE; + } + } + return FALSE; +} + +void (*const CannonballProjectile_Functions[])(Entity*) = { + CannonballProjectile_OnTick, sub_080AB544, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const CannonballProjectile_Actions[])(Entity*) = { + CannonballProjectile_Init, + CannonballProjectile_Action1, + CannonballProjectile_Action2, +}; diff --git a/src/projectile/darkNutSwordSlash.c b/src/projectile/darkNutSwordSlash.c new file mode 100644 index 00000000..51123fc7 --- /dev/null +++ b/src/projectile/darkNutSwordSlash.c @@ -0,0 +1,188 @@ +#include "entity.h" +#include "player.h" +#include "coord.h" + +extern const u8 DarkNutSwordSlash_DamageTypes[]; +extern void (*const DarkNutSwordSlash_UpdatesForType[])(Entity*); +extern Hitbox const* const* const gUnk_081293E0[]; +extern const Hitbox* const gUnk_081293F0[]; +extern const Hitbox* const gUnk_08129400[]; +extern const Hitbox* const gUnk_08129410[]; +extern const Hitbox* const gUnk_08129420[]; + +void DarkNutSwordSlash_Init(Entity*); +void DarkNutSwordSlash_OnTick(Entity*); + +void DarkNutSwordSlash(Entity* this) { + if (this->action == 0) { + this->action = 1; + DarkNutSwordSlash_Init(this); + if (this->type == 3) { + InitAnimationForceUpdate(this, this->parent->animationState + 0x18); + } + } + if ((this->parent == NULL) || (this->parent->currentHealth == 0)) { + DeleteThisEntity(); + } + if (((this->bitfield & 0x80) != 0) && (this->field_0x4c == &gPlayerEntity)) { + this->iframes = -0x2d; + } + this->bitfield = 0; + CopyPositionAndSpriteOffset(this->parent, this); + DarkNutSwordSlash_OnTick(this); + if (this->type == 3) { + this->y.HALF.HI += 1; + UpdateAnimationSingleFrame(this); + } +} + +void DarkNutSwordSlash_Init(Entity* this) { + this->damageType = DarkNutSwordSlash_DamageTypes[this->parent->type + this->type * 4]; +} + +void DarkNutSwordSlash_OnTick(Entity* this) { + DarkNutSwordSlash_UpdatesForType[this->type](this); +} + +void DarkNutSwordSlash_UpdateType0(Entity* this) { + Entity* parent = this->parent; + this->hitbox = (Hitbox*)gUnk_081293E0[parent->animationState][(parent->frames.all & 0xf) - 1]; +} + +void DarkNutSwordSlash_UpdateType2(Entity* this) { + Entity* parent = this->parent; + this->hitbox = (Hitbox*)gUnk_081293F0[parent->animationState]; +} + +void DarkNutSwordSlash_UpdateType34(Entity* this) { + if ((this->parent->frames.all & 0x10) != 0) { + this->hitbox = (Hitbox*)gUnk_08129410[this->parent->animationState]; + } else { + this->hitbox = (Hitbox*)gUnk_08129400[this->parent->animationState]; + } +} + +void DarkNutSwordSlash_UpdateType1(Entity* this) { + Entity* parent = this->parent; + this->hitbox = (Hitbox*)gUnk_08129420[parent->animationState]; +} + +const u8 DarkNutSwordSlash_DamageTypes[] = { + 76, 76, 78, 77, 83, 83, 83, 83, 79, 79, 76, 80, 84, 84, 84, 85, 79, 79, 76, 80, +}; +void (*const DarkNutSwordSlash_UpdatesForType[])(Entity*) = { + DarkNutSwordSlash_UpdateType0, DarkNutSwordSlash_UpdateType1, DarkNutSwordSlash_UpdateType2, + DarkNutSwordSlash_UpdateType34, DarkNutSwordSlash_UpdateType34, +}; + +extern const Hitbox* const gUnk_08129460[]; +extern const Hitbox* const gUnk_081294A8[]; +extern const Hitbox* const gUnk_081294F0[]; +extern const Hitbox* const gUnk_08129538[]; +Hitbox const* const* const gUnk_081293E0[] = { + gUnk_08129460, + gUnk_081294A8, + gUnk_081294F0, + gUnk_08129538, +}; +extern const Hitbox gUnk_08129550; +extern const Hitbox gUnk_08129558; +extern const Hitbox gUnk_08129560; +extern const Hitbox gUnk_08129568; +const Hitbox* const gUnk_081293F0[] = { + &gUnk_08129550, + &gUnk_08129558, + &gUnk_08129560, + &gUnk_08129568, +}; +extern const Hitbox gUnk_08129590; +extern const Hitbox gUnk_081295A0; +extern const Hitbox gUnk_081295B0; +extern const Hitbox gUnk_081295C0; +const Hitbox* const gUnk_08129400[] = { + &gUnk_08129590, + &gUnk_081295A0, + &gUnk_081295B0, + &gUnk_081295C0, +}; +extern const Hitbox gUnk_08129598; +extern const Hitbox gUnk_081295A8; +extern const Hitbox gUnk_081295B8; +extern const Hitbox gUnk_081295C8; +const Hitbox* const gUnk_08129410[] = { + &gUnk_08129598, + &gUnk_081295A8, + &gUnk_081295B8, + &gUnk_081295C8, +}; +extern const Hitbox gUnk_08129570; +extern const Hitbox gUnk_08129578; +extern const Hitbox gUnk_08129580; +extern const Hitbox gUnk_08129588; +const Hitbox* const gUnk_08129420[] = { + &gUnk_08129570, + &gUnk_08129578, + &gUnk_08129580, + &gUnk_08129588, +}; + +const Hitbox gUnk_08129430 = { -5, -32, { 0, 0, 0, 0 }, 8, 10 }; +const Hitbox gUnk_08129438 = { 2, -37, { 0, 0, 0, 0 }, 8, 10 }; +const Hitbox gUnk_08129440 = { 19, -33, { 0, 0, 0, 0 }, 10, 11 }; +const Hitbox gUnk_08129448 = { 28, -14, { 0, 0, 0, 0 }, 16, 6 }; +const Hitbox gUnk_08129450 = { 34, -18, { 0, 0, 0, 0 }, 8, 4 }; +const Hitbox gUnk_08129458 = { 25, 15, { 0, 0, 0, 0 }, 4, 4 }; + +const Hitbox* const gUnk_08129460[] = { + &gUnk_08129430, &gUnk_08129438, &gUnk_08129440, &gUnk_08129448, &gUnk_08129450, &gUnk_08129458, +}; + +const Hitbox gUnk_08129478 = { 21, -6, { 0, 0, 0, 0 }, 12, 8 }; +const Hitbox gUnk_08129480 = { 21, -20, { 0, 0, 0, 0 }, 16, 8 }; +const Hitbox gUnk_08129488 = { 15, -31, { 0, 0, 0, 0 }, 8, 10 }; +const Hitbox gUnk_08129490 = { 3, -39, { 0, 0, 0, 0 }, 8, 12 }; +const Hitbox gUnk_08129498 = { 7, -38, { 0, 0, 0, 0 }, 7, 8 }; +const Hitbox gUnk_081294A0 = { 1, -29, { 0, 0, 0, 0 }, 4, 5 }; + +const Hitbox* const gUnk_081294A8[] = { + &gUnk_08129478, &gUnk_08129480, &gUnk_08129488, &gUnk_08129490, &gUnk_08129498, &gUnk_081294A0, +}; + +const Hitbox gUnk_081294C0 = { 7, 7, { 0, 0, 0, 0 }, 8, 11 }; +const Hitbox gUnk_081294C8 = { -6, 10, { 0, 0, 0, 0 }, 8, 12 }; +const Hitbox gUnk_081294D0 = { -22, 2, { 0, 0, 0, 0 }, 8, 8 }; +const Hitbox gUnk_081294D8 = { -27, -11, { 0, 0, 0, 0 }, 12, 8 }; +const Hitbox gUnk_081294E0 = { -28, -9, { 0, 0, 0, 0 }, 15, 6 }; +const Hitbox gUnk_081294E8 = { -21, -12, { 0, 0, 0, 0 }, 6, 2 }; + +const Hitbox* const gUnk_081294F0[] = { + &gUnk_081294C0, &gUnk_081294C8, &gUnk_081294D0, &gUnk_081294D8, &gUnk_081294E0, &gUnk_081294E8, +}; + +const Hitbox gUnk_08129508 = { -21, -6, { 0, 0, 0, 0 }, 12, 8 }; +const Hitbox gUnk_08129510 = { -21, -20, { 0, 0, 0, 0 }, 16, 8 }; +const Hitbox gUnk_08129518 = { -15, -31, { 0, 0, 0, 0 }, 8, 10 }; +const Hitbox gUnk_08129520 = { -3, -39, { 0, 0, 0, 0 }, 8, 12 }; +const Hitbox gUnk_08129528 = { -7, -38, { 0, 0, 0, 0 }, 7, 8 }; +const Hitbox gUnk_08129530 = { -1, -29, { 0, 0, 0, 0 }, 4, 5 }; + +const Hitbox* const gUnk_08129538[] = { + &gUnk_08129508, &gUnk_08129510, &gUnk_08129518, &gUnk_08129520, &gUnk_08129528, &gUnk_08129530, +}; + +const Hitbox gUnk_08129550 = { 3, -30, { 0, 0, 0, 0 }, 7, 10 }; +const Hitbox gUnk_08129558 = { 28, -12, { 0, 0, 0, 0 }, 14, 7 }; +const Hitbox gUnk_08129560 = { -2, 14, { 0, 0, 0, 0 }, 12, 7 }; +const Hitbox gUnk_08129568 = { -28, -12, { 0, 0, 0, 0 }, 14, 7 }; +const Hitbox gUnk_08129570 = { 1, -29, { 0, 0, 0, 0 }, 8, 8 }; +const Hitbox gUnk_08129578 = { 19, -8, { 0, 0, 0, 0 }, 8, 8 }; +const Hitbox gUnk_08129580 = { 0, 10, { 0, 0, 0, 0 }, 8, 8 }; +const Hitbox gUnk_08129588 = { -19, -8, { 0, 0, 0, 0 }, 8, 8 }; +const Hitbox gUnk_08129590 = { 4, -37, { 0, 0, 0, 0 }, 7, 10 }; +const Hitbox gUnk_08129598 = { 4, -35, { 0, 0, 0, 0 }, 2, 8 }; +const Hitbox gUnk_081295A0 = { 32, -14, { 0, 0, 0, 0 }, 14, 6 }; +const Hitbox gUnk_081295A8 = { 30, -14, { 0, 0, 0, 0 }, 12, 2 }; +const Hitbox gUnk_081295B0 = { -1, 22, { 0, 0, 0, 0 }, 7, 12 }; +const Hitbox gUnk_081295B8 = { -1, 20, { 0, 0, 0, 0 }, 2, 10 }; +const Hitbox gUnk_081295C0 = { -32, -14, { 0, 0, 0, 0 }, 14, 6 }; +const Hitbox gUnk_081295C8 = { -30, -14, { 0, 0, 0, 0 }, 12, 2 }; diff --git a/src/projectile/projectile4.c b/src/projectile/dekuSeedProjectile.c similarity index 77% rename from src/projectile/projectile4.c rename to src/projectile/dekuSeedProjectile.c index 7d58f00a..e17caa58 100644 --- a/src/projectile/projectile4.c +++ b/src/projectile/dekuSeedProjectile.c @@ -4,24 +4,23 @@ #include "audio.h" #include "flags.h" -extern void (*const gUnk_081296F0[])(Entity*); - -extern void (*const gUnk_08129704[])(Entity*); - -void sub_080A8680(Entity*); -void sub_080A86A0(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); extern u32 sub_080177A0(Entity*, Entity*); -void Projectile4(Entity* this) { - gUnk_081296F0[GetNextFunction(this)](this); +extern void (*const DekuSeedProjectile_Functions[])(Entity*); +extern void (*const DekuSeedProjectile_Actions[])(Entity*); + +void sub_080A8680(Entity*); +void sub_080A86A0(Entity*); + +void DekuSeedProjectile(Entity* this) { + DekuSeedProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A8458(Entity* this) { - gUnk_08129704[this->action](this); +void DekuSeedProjectile_OnTick(Entity* this) { + DekuSeedProjectile_Actions[this->action](this); } void sub_080A8470(Entity* this) { @@ -41,7 +40,7 @@ void sub_080A8470(Entity* this) { } } -void sub_080A84C8(Entity* this) { +void DekuSeedProjectile_Init(Entity* this) { this->action = 1; this->actionDelay = 0x30; this->field_0xf = 0; @@ -53,7 +52,7 @@ void sub_080A84C8(Entity* this) { InitializeAnimation(this, 0x18); } -void sub_080A8504(Entity* this) { +void DekuSeedProjectile_Action1(Entity* this) { Entity* parent; GetNextFrame(this); @@ -88,7 +87,7 @@ void sub_080A8504(Entity* this) { } } -void sub_080A85B8(Entity* this) { +void DekuSeedProjectile_Action2(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) != 0) { if (sub_080A7EB0(this) != 0) { @@ -106,14 +105,14 @@ void sub_080A85B8(Entity* this) { } } -void sub_080A8610(Entity* this) { +void DekuSeedProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteThisEntity(); } } -void sub_080A862C(Entity* this) { +void DekuSeedProjectile_Action4(Entity* this) { GetNextFrame(this); sub_080AF090(this); switch (sub_080044EC(this, 0x2800)) { @@ -145,3 +144,11 @@ void sub_080A86A0(Entity* this) { this->speed = 0; EnqueueSFX(SFX_18E); } + +void (*const DekuSeedProjectile_Functions[])(Entity*) = { + DekuSeedProjectile_OnTick, sub_080A8470, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const DekuSeedProjectile_Actions[])(Entity*) = { + DekuSeedProjectile_Init, DekuSeedProjectile_Action1, DekuSeedProjectile_Action2, + DekuSeedProjectile_Action3, DekuSeedProjectile_Action4, +}; diff --git a/src/projectile/projectile6.c b/src/projectile/dirtBallProjectile.c similarity index 78% rename from src/projectile/projectile6.c rename to src/projectile/dirtBallProjectile.c index 92c0b83e..fd2765e7 100644 --- a/src/projectile/projectile6.c +++ b/src/projectile/dirtBallProjectile.c @@ -4,19 +4,17 @@ #include "coord.h" #include "functions.h" -extern void (*const gUnk_08129740[])(Entity*); - -extern void (*const gUnk_08129754[])(Entity*); - -extern Hitbox gUnk_08129764; - extern void sub_08078954(Entity*); -void Projectile6(Entity* this) { - gUnk_08129740[GetNextFunction(this)](this); +extern void (*const DirtBallProjectile_Functions[])(Entity*); +extern void (*const DirtBallProjectile_Actions[])(Entity*); +extern const Hitbox3D gUnk_08129764; + +void DirtBallProjectile(Entity* this) { + DirtBallProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A87E4(Entity* this) { +void DirtBallProjectile_OnTick(Entity* this) { if (this->type == 1) { if (this->attachedEntity == NULL) { DeleteThisEntity(); @@ -25,7 +23,7 @@ void sub_080A87E4(Entity* this) { DeleteThisEntity(); } } - gUnk_08129754[this->action](this); + DirtBallProjectile_Actions[this->action](this); } void sub_080A881C(Entity* this) { @@ -45,12 +43,12 @@ void sub_080A881C(Entity* this) { } } -void sub_080A8868(Entity* this) { +void DirtBallProjectile_Init(Entity* this) { this->action = 1; this->subAction = 0; this->spriteSettings.b.shadow = 1; this->field_0x20 = 0x8000; - this->hitbox = &gUnk_08129764; + this->hitbox = (Hitbox*)&gUnk_08129764; this->field_0x3c |= 0x10; switch (this->type) { case 0: @@ -66,7 +64,7 @@ void sub_080A8868(Entity* this) { } } -void sub_080A88C8(Entity* this) { +void DirtBallProjectile_Action1(Entity* this) { Entity* entity; Entity* parent; @@ -106,7 +104,7 @@ void sub_080A88C8(Entity* this) { } } -void sub_080A8988(Entity* this) { +void DirtBallProjectile_Action2(Entity* this) { u8 bVar1; u32 uVar2; u32 tmp; @@ -160,9 +158,20 @@ void sub_080A8988(Entity* this) { } } -void sub_080A8A48(Entity* this) { +void DirtBallProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteEntity(this); } } + +void (*const DirtBallProjectile_Functions[])(Entity*) = { + DirtBallProjectile_OnTick, sub_080A881C, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const DirtBallProjectile_Actions[])(Entity*) = { + DirtBallProjectile_Init, + DirtBallProjectile_Action1, + DirtBallProjectile_Action2, + DirtBallProjectile_Action3, +}; +const Hitbox3D gUnk_08129764 = { 0, -3, { 5, 3, 3, 5 }, 6, 6, 10, { 0, 0, 0 } }; diff --git a/src/projectile/projectile8.c b/src/projectile/fireProjectile.c similarity index 74% rename from src/projectile/projectile8.c rename to src/projectile/fireProjectile.c index 08a5a555..0e32bede 100644 --- a/src/projectile/projectile8.c +++ b/src/projectile/fireProjectile.c @@ -4,20 +4,20 @@ #include "functions.h" #include "audio.h" -extern void (*const gUnk_0812982C[])(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); -void Projectile8(Entity* this) { +extern void (*const FireProjectile_Actions[])(Entity*); + +void FireProjectile(Entity* this) { if (GetNextFunction(this) != 0) { DeleteThisEntity(); } - gUnk_0812982C[this->action](this); + FireProjectile_Actions[this->action](this); } -void sub_080A8BC0(Entity* this) { +void FireProjectile_Init(Entity* this) { if (this->type == 0) { this->action = 1; InitializeAnimation(this, this->direction >> 3); @@ -28,11 +28,9 @@ void sub_080A8BC0(Entity* this) { } } -void sub_080A8BF8(Entity* this) { +void FireProjectile_Action1(Entity* this) { u32 direction; - Entity* parent; - - parent = this->parent; + Entity* parent = this->parent; if (parent == NULL) { DeleteEntity(this); } else { @@ -53,7 +51,7 @@ void sub_080A8BF8(Entity* this) { } } -void sub_080A8C4C(Entity* this) { +void FireProjectile_Action2(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) != 0) { if (sub_080A7EB0(this) != 0) { @@ -68,9 +66,16 @@ void sub_080A8C4C(Entity* this) { } } -void sub_080A8C8C(Entity* this) { +void FireProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteEntity(this); } } + +void (*const FireProjectile_Actions[])(Entity*) = { + FireProjectile_Init, + FireProjectile_Action1, + FireProjectile_Action2, + FireProjectile_Action3, +}; diff --git a/src/projectile/projectileA.c b/src/projectile/gleerokProjectile.c similarity index 77% rename from src/projectile/projectileA.c rename to src/projectile/gleerokProjectile.c index 1699a1a5..287b0013 100644 --- a/src/projectile/projectileA.c +++ b/src/projectile/gleerokProjectile.c @@ -6,33 +6,31 @@ #include "random.h" #include "audio.h" -extern void (*const gUnk_08129954[])(Entity*); - -extern void (*const gUnk_08129968[])(Entity*); - -void sub_080A90D8(Entity*); - extern void sub_0806F5BC(Entity*, u32, u32); extern u32 sub_080041DC(Entity*, u32, u32); -extern s8 gUnk_08129978[]; -extern s8 gUnk_08129980[]; -extern s8 gUnk_08129988[]; +extern void (*const GleerokProjectile_Functions[])(Entity*); +extern void (*const GleerokProjectile_Actions[])(Entity*); +extern const s8 gUnk_08129978[]; +extern const s8 gUnk_08129980[]; +extern const s8 gUnk_08129988[]; -void ProjectileA(Entity* this) { - gUnk_08129954[GetNextFunction(this)](this); +void sub_080A90D8(Entity*); + +void GleerokProjectile(Entity* this) { + GleerokProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A8DDC(Entity* this) { +void GleerokProjectile_OnTick(Entity* this) { if (((this->type != 3) && ((this->bitfield & 0x80) != 0)) && ((this->bitfield & 0x7f) != 0x1e)) { this->action = 3; this->flags &= 0x7f; InitializeAnimation(this, 0x53); } - gUnk_08129968[this->action](this); + GleerokProjectile_Actions[this->action](this); } -void sub_080A8E28(Entity* this) { +void GleerokProjectile_Init(Entity* this) { u32 uVar1; s32 iVar2; @@ -88,7 +86,7 @@ void sub_080A8E28(Entity* this) { } } -void sub_080A8FB8(Entity* this) { +void GleerokProjectile_Action1(Entity* this) { if (this->type == 3) { if (sub_08003FC4(this, 0x1800) == 0) { sub_08008790(this, 7); @@ -115,7 +113,7 @@ void sub_080A8FB8(Entity* this) { } } -void sub_080A9058(Entity* this) { +void GleerokProjectile_Action2(Entity* this) { GetNextFrame(this); if (this->type == 2) { if (--this->actionDelay == 0xff) { @@ -135,7 +133,7 @@ void sub_080A9058(Entity* this) { } } -void sub_080A90BC(Entity* this) { +void GleerokProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteThisEntity(); @@ -153,3 +151,16 @@ void sub_080A90D8(Entity* this) { } } } + +void (*const GleerokProjectile_Functions[])(Entity*) = { + GleerokProjectile_OnTick, GleerokProjectile_OnTick, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const GleerokProjectile_Actions[])(Entity*) = { + GleerokProjectile_Init, + GleerokProjectile_Action1, + GleerokProjectile_Action2, + GleerokProjectile_Action3, +}; +const s8 gUnk_08129978[] = { 80, 0, 0, 80, -96, 0, 0, -96 }; +const s8 gUnk_08129980[] = { 0, 16, -16, 0, 16, -16, 16, -16 }; +const s8 gUnk_08129988[] = { 0, -16, -32, -48, -64, -80, -96, -112, 0, 16, 32, 48, 64, 80, 96, 112 }; diff --git a/src/projectile/projectileC.c b/src/projectile/guardLineOfSight.c similarity index 87% rename from src/projectile/projectileC.c rename to src/projectile/guardLineOfSight.c index 8af3163a..9cbe3a22 100644 --- a/src/projectile/projectileC.c +++ b/src/projectile/guardLineOfSight.c @@ -3,13 +3,14 @@ #include "coord.h" #include "functions.h" -extern Hitbox gUnk_080FD1E4; extern u32 sub_080644C8(Entity*); -extern u8 gUnk_081299C8[]; extern bool32 sub_080AE4CC(Entity*, u32, u32, u32); extern Entity gUnk_02027EB4; +extern const Hitbox gUnk_080FD1E4; -void ProjectileC(Entity* this) { +extern const u8 gUnk_081299C8[]; + +void GuardLineOfSight(Entity* this) { Entity* entity; u8 tmp; @@ -31,7 +32,7 @@ void ProjectileC(Entity* this) { } else { if (sub_080644C8(this) != 0) { if (((this->actionDelay++) & 3) == 0) { - entity = sub_080A7EE0(0xc); + entity = CreateProjectile(0xc); if (entity != NULL) { entity->type = 1; tmp = this->parent->field_0x3e; @@ -48,7 +49,7 @@ void ProjectileC(Entity* this) { this->actionDelay = 0x12; this->spriteSettings.b.draw = 0; this->speed = 0x800; - this->hitbox = &gUnk_080FD1E4; + this->hitbox = (Hitbox*)&gUnk_080FD1E4; InitializeAnimation(this, 0); } if (this->bitfield == 0x80) { @@ -66,3 +67,7 @@ void ProjectileC(Entity* this) { } } } + +const u8 gUnk_081299C8[] = { + 0, 254, 0, 254, 0, 2, 0, 2, +}; diff --git a/src/projectile/projectile17.c b/src/projectile/guruguruBarProjectile.c similarity index 92% rename from src/projectile/projectile17.c rename to src/projectile/guruguruBarProjectile.c index 47a0cb1b..de504cf5 100644 --- a/src/projectile/projectile17.c +++ b/src/projectile/guruguruBarProjectile.c @@ -5,7 +5,7 @@ void sub_080AABB0(Entity*); -void Projectile17(Entity* this) { +void GuruguruBarProjectile(Entity* this) { if (this->action == 0) { this->action = 1; InitializeAnimation(this, 0); diff --git a/src/projectile/projectile23.c b/src/projectile/gyorgMaleEnergyProjectile.c similarity index 52% rename from src/projectile/projectile23.c rename to src/projectile/gyorgMaleEnergyProjectile.c index ae9edb41..56ff4307 100644 --- a/src/projectile/projectile23.c +++ b/src/projectile/gyorgMaleEnergyProjectile.c @@ -4,35 +4,34 @@ #include "player.h" #include "audio.h" -extern void (*const gUnk_0812A9D8[])(Entity*); - -extern void (*const gUnk_0812A9EC[])(Entity*); - -void sub_080AC954(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); -void Projectile23(Entity* this) { - gUnk_0812A9D8[GetNextFunction(this)](this); +extern void (*const GyorgMaleEnergyProjectile_Functions[])(Entity*); +extern void (*const GyorgMaleEnergyProjectile_Actions[])(Entity*); + +void GyorgMaleEnergyProjectile_Action1(Entity*); + +void GyorgMaleEnergyProjectile(Entity* this) { + GyorgMaleEnergyProjectile_Functions[GetNextFunction(this)](this); } -void sub_080AC8C4(Entity* this) { - gUnk_0812A9EC[this->action](this); +void GyorgMaleEnergyProjectile_OnTick(Entity* this) { + GyorgMaleEnergyProjectile_Actions[this->action](this); } -ASM_FUNC("asm/non_matching/projectile23/sub_080AC8DC.inc", void sub_080AC8DC(Entity* this)) +ASM_FUNC("asm/non_matching/gyorgMaleEnergyProjectile/sub_080AC8DC.inc", void sub_080AC8DC(Entity* this)) -void sub_080AC928(Entity* this) { +void GyorgMaleEnergyProjectile_Init(Entity* this) { this->action = 1; this->actionDelay = 0x3c; this->collisionLayer = 2; UpdateSpriteForCollisionLayer(this); InitializeAnimation(this, 0); - sub_080AC954(this); + GyorgMaleEnergyProjectile_Action1(this); } -void sub_080AC954(Entity* this) { +void GyorgMaleEnergyProjectile_Action1(Entity* this) { u32 animationState; if (this->parent->next == NULL) { @@ -50,7 +49,7 @@ void sub_080AC954(Entity* this) { } } -void sub_080AC9CC(Entity* this) { +void GyorgMaleEnergyProjectile_Action2(Entity* this) { sub_080AF090(this); GetNextFrame(this); if (sub_080A7EB0(this) != 0) { @@ -64,10 +63,20 @@ void sub_080AC9CC(Entity* this) { } } -void sub_080ACA14(Entity* this) { +void GyorgMaleEnergyProjectile_Action3(Entity* this) { sub_080AF090(this); GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteThisEntity(); } } + +void (*const GyorgMaleEnergyProjectile_Functions[])(Entity*) = { + GyorgMaleEnergyProjectile_OnTick, sub_080AC8DC, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const GyorgMaleEnergyProjectile_Actions[])(Entity*) = { + GyorgMaleEnergyProjectile_Init, + GyorgMaleEnergyProjectile_Action1, + GyorgMaleEnergyProjectile_Action2, + GyorgMaleEnergyProjectile_Action3, +}; diff --git a/src/projectile/projectile22.c b/src/projectile/gyorgTail.c similarity index 80% rename from src/projectile/projectile22.c rename to src/projectile/gyorgTail.c index bbc4fc58..d75a8123 100644 --- a/src/projectile/projectile22.c +++ b/src/projectile/gyorgTail.c @@ -4,27 +4,25 @@ #include "audio.h" #include "functions.h" -extern void (*const gUnk_0812A9A8[])(Entity*); - -extern u16 gUnk_0812A9B4[]; -bool32 sub_080AC5E4(Entity*); -void sub_080AC388(Entity*); - -extern u8 gUnk_0812A9BA[]; +extern u8 gEntCount; extern Hitbox gUnk_080FD458; - extern Hitbox gUnk_080FD168; extern Hitbox gUnk_080FD448; extern void (*const gUnk_0812A994[])(Entity*); +extern void (*const GyorgTail_Actions[])(Entity*); +extern const s16 gUnk_0812A9B4[]; +extern const u8 gUnk_0812A9B8[]; +extern const u8 gUnk_0812A9BA[]; +extern const u8 gUnk_0812A9C0[]; +bool32 sub_080AC5E4(Entity*); +void sub_080AC388(Entity*); void sub_080AC6F0(Entity*); void sub_080AC760(Entity*); void sub_080AC7C4(Entity*); -extern u8 gEntCount; - -void Projectile22(Entity* this) { +void GyorgTail(Entity* this) { Entity* parent; if (this->parent->next == NULL) { @@ -50,10 +48,10 @@ void Projectile22(Entity* this) { } void sub_080AC328(Entity* this) { - gUnk_0812A9A8[this->action](this); + GyorgTail_Actions[this->action](this); } -void sub_080AC340(Entity* this) { +void GyorgTail_Init(Entity* this) { if (sub_080AC5E4(this) != 0) { this->action = 1; this->frameIndex = 0xc; @@ -64,7 +62,7 @@ void sub_080AC340(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile22/sub_080AC388.inc", void sub_080AC388(Entity* this)) +ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC388.inc", void sub_080AC388(Entity* this)) void sub_080AC480(Entity* this) { if (this->actionDelay != 0) { @@ -126,7 +124,7 @@ void sub_080AC560(Entity* this) { this->y.WORD = entity->y.WORD - gSineTable[entity->direction + 0x40] * factor; } -NONMATCH("asm/non_matching/projectile22/sub_080AC5E4.inc", bool32 sub_080AC5E4(Entity* this)) { +NONMATCH("asm/non_matching/gyorgTail/sub_080AC5E4.inc", bool32 sub_080AC5E4(Entity* this)) { // TODO regalloc Entity* entity; Entity* entity2; @@ -139,20 +137,20 @@ NONMATCH("asm/non_matching/projectile22/sub_080AC5E4.inc", bool32 sub_080AC5E4(E return 0; } this->field_0x78.HALF.HI = 0x11; - entity = sub_080A7EE0(0x22); + entity = CreateProjectile(0x22); entity->type = this->type; entity->type2 = 1; entity->parent = this->parent; entity->field_0x78.HALF.HI = 0x12; this->attachedEntity = entity; - entity2 = sub_080A7EE0(0x22); + entity2 = CreateProjectile(0x22); entity2->type = this->type; entity2->type2 = 2; entity2->parent = this->parent; entity2->field_0x78.HALF.HI = 0x14; uVar3 = entity2->field_0x78.HALF.HI; entity->attachedEntity = entity2; - entity3 = sub_080A7EE0(0x22); + entity3 = CreateProjectile(0x22); entity3->type = this->type; entity3->type2 = 3; entity3->parent = this->parent; @@ -164,14 +162,14 @@ NONMATCH("asm/non_matching/projectile22/sub_080AC5E4.inc", bool32 sub_080AC5E4(E return 0; } this->field_0x78.HALF.HI = 0xf; - entity = sub_080A7EE0(0x22); + entity = CreateProjectile(0x22); entity->type = this->type; entity->type2 = 1; entity->parent = this->parent; entity->field_0x78.HALF.HI = 0x10; uVar3 = entity->field_0x78.HALF.HI; this->attachedEntity = entity; - entity2 = sub_080A7EE0(0x22); + entity2 = CreateProjectile(0x22); entity2->type = this->type; entity2->type2 = 2; entity2->parent = this->parent; @@ -179,7 +177,7 @@ NONMATCH("asm/non_matching/projectile22/sub_080AC5E4.inc", bool32 sub_080AC5E4(E entity2->field_0x78.HALF.HI = 0x20; entity->attachedEntity = entity2; } - entity4 = sub_080A7EE0(0x22); + entity4 = CreateProjectile(0x22); entity4->type = this->type; entity4->type2 = 4; entity4->parent = this->parent; @@ -189,11 +187,11 @@ NONMATCH("asm/non_matching/projectile22/sub_080AC5E4.inc", bool32 sub_080AC5E4(E } END_NONMATCH -ASM_FUNC("asm/non_matching/projectile22/sub_080AC6F0.inc", void sub_080AC6F0(Entity* this)) +ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC6F0.inc", void sub_080AC6F0(Entity* this)) -ASM_FUNC("asm/non_matching/projectile22/sub_080AC760.inc", void sub_080AC760(Entity* this)) +ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC760.inc", void sub_080AC760(Entity* this)) -NONMATCH("asm/non_matching/projectile22/sub_080AC7C4.inc", void sub_080AC7C4(Entity* this)) { +NONMATCH("asm/non_matching/gyorgTail/sub_080AC7C4.inc", void sub_080AC7C4(Entity* this)) { // TODO regalloc Entity* entity1; Entity* entity2; @@ -227,3 +225,16 @@ void sub_080AC884(Entity* this) { this->field_0xf = 0x56; } } + +void (*const gUnk_0812A994[])(Entity*) = { + sub_080AC328, sub_080AC510, sub_080AC510, sub_080AC510, sub_080AC560, +}; +void (*const GyorgTail_Actions[])(Entity*) = { + GyorgTail_Init, + sub_080AC388, + sub_080AC480, +}; +const s16 gUnk_0812A9B4[] = { -64, 64 }; +const u8 gUnk_0812A9B8[] = { 24, 20 }; +const u8 gUnk_0812A9BA[] = { 24, 25, 25, 24, 24, 24 }; +const u8 gUnk_0812A9C0[] = { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; diff --git a/src/projectile/projectile9.c b/src/projectile/iceProjectile.c similarity index 77% rename from src/projectile/projectile9.c rename to src/projectile/iceProjectile.c index dfb8e213..0cd93e21 100644 --- a/src/projectile/projectile9.c +++ b/src/projectile/iceProjectile.c @@ -4,20 +4,20 @@ #include "functions.h" #include "audio.h" -extern void (*const gUnk_081298B8[])(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); -void Projectile9(Entity* this) { +extern void (*const IceProjectile_Actions[])(Entity*); + +void IceProjectile(Entity* this) { if (GetNextFunction(this) != 0) { DeleteThisEntity(); } - gUnk_081298B8[this->action](this); + IceProjectile_Actions[this->action](this); } -void sub_080A8CD4(Entity* this) { +void IceProjectile_Init(Entity* this) { if (this->type == 0) { this->action = 1; InitializeAnimation(this, this->direction >> 3); @@ -28,7 +28,7 @@ void sub_080A8CD4(Entity* this) { } } -void sub_080A8D0C(Entity* this) { +void IceProjectile_Action1(Entity* this) { u32 direction; Entity* parent; @@ -53,7 +53,7 @@ void sub_080A8D0C(Entity* this) { } } -void sub_080A8D60(Entity* this) { +void IceProjectile_Action2(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) != 0) { if (sub_080A7EB0(this) != 0) { @@ -68,9 +68,16 @@ void sub_080A8D60(Entity* this) { } } -void sub_080A8DA0(Entity* this) { +void IceProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteEntity(this); } } + +void (*const IceProjectile_Actions[])(Entity*) = { + IceProjectile_Init, + IceProjectile_Action1, + IceProjectile_Action2, + IceProjectile_Action3, +}; diff --git a/src/projectile/keatonDagger.c b/src/projectile/keatonDagger.c new file mode 100644 index 00000000..b7a876e0 --- /dev/null +++ b/src/projectile/keatonDagger.c @@ -0,0 +1,45 @@ +#include "entity.h" +#include "player.h" +#include "coord.h" + +extern void sub_0803C0AC(Entity*); + +extern const Hitbox* const gUnk_08129998[]; + +void KeatonDagger(Entity* this) { + Entity* parent; + + if (this->action == 0) { + this->action = 1; + } + parent = this->parent; + if (((parent == NULL) || (parent->currentHealth == 0)) || (parent->next == NULL)) { + if (((this->bitfield & 0x80) != 0) && (this->field_0x4c == &gPlayerEntity)) { + sub_0803C0AC(this); + } + DeleteEntity(this); + } else { + this->hitbox = (Hitbox*)gUnk_08129998[parent->animationState]; + CopyPosition(parent, this); + if ((parent->iframes != 0) && (this->iframes == 0)) { + this->iframes = 0xff; + } + } +} + +extern const Hitbox gUnk_081299A8; +extern const Hitbox gUnk_081299B0; +extern const Hitbox gUnk_081299B8; +extern const Hitbox gUnk_081299C0; + +const Hitbox* const gUnk_08129998[] = { + &gUnk_081299A8, + &gUnk_081299B0, + &gUnk_081299B8, + &gUnk_081299C0, +}; + +const Hitbox gUnk_081299A8 = { 4, -16, { 0, 0, 0, 0 }, 2, 3 }; +const Hitbox gUnk_081299B0 = { 9, -2, { 0, 0, 0, 0 }, 3, 2 }; +const Hitbox gUnk_081299B8 = { -4, 1, { 0, 0, 0, 0 }, 2, 3 }; +const Hitbox gUnk_081299C0 = { -9, -2, { 0, 0, 0, 0 }, 3, 3 }; diff --git a/src/projectile/lakituCloudProjectile.c b/src/projectile/lakituCloudProjectile.c new file mode 100644 index 00000000..76ac9ea5 --- /dev/null +++ b/src/projectile/lakituCloudProjectile.c @@ -0,0 +1,77 @@ +#include "entity.h" +#include "enemy.h" +#include "functions.h" +#include "player.h" + +extern void sub_0800449C(Entity*, u32); +extern void sub_08079D84(void); + +extern void (*const LakituCloudProjectile_Functions[])(Entity*); +extern void (*const LakituCloudProjectile_Actions[])(Entity*); +extern void (*const LakituCloudProjectile_SubActions[])(Entity*); + +void LakituCloudProjectile(Entity* this) { + if (this->parent->next == NULL) { + DeleteThisEntity(); + } + LakituCloudProjectile_Functions[GetNextFunction(this)](this); +} + +void LakituCloudProjectile_OnTick(Entity* this) { + LakituCloudProjectile_Actions[this->action](this); +} + +void nullsub_539(Entity* this) { +} + +void sub_080A9CF0(Entity* this) { + if (sub_0806F520() == 0) { + CreateFx(this, 2, 0); + DeleteThisEntity(); + } + LakituCloudProjectile_SubActions[this->subAction](this); +} + +void LakituCloudProjectile_SubAction0(Entity* this) { + this->subAction = 2; +} + +void LakituCloudProjectile_SubAction1(Entity* this) { +} + +void LakituCloudProjectile_SubAction2(Entity* this) { + if (sub_0806F3E4(this) != 0) { + if (this->damageType == 0xa6) { + ModHealth(-2); + sub_0800449C(&gPlayerEntity, 0x7a); + sub_08079D84(); + } + CreateFx(this, 2, 0); + DeleteThisEntity(); + } +} + +void LakituCloudProjectile_Init(Entity* this) { + this->action = 1; + this->animationState = this->parent->animationState; + InitAnimationForceUpdate(this, this->animationState); +} + +void LakituCloudProjectile_Action1(Entity* this) { + PositionRelative(this->parent, this, 0, -0x10000); + this->height.HALF.HI = 0xfffe; + UpdateAnimationSingleFrame(this); +} + +void (*const LakituCloudProjectile_Functions[])(Entity*) = { + LakituCloudProjectile_OnTick, nullsub_539, DeleteEntity, DeleteEntity, DeleteEntity, sub_080A9CF0, +}; +void (*const LakituCloudProjectile_Actions[])(Entity*) = { + LakituCloudProjectile_Init, + LakituCloudProjectile_Action1, +}; +void (*const LakituCloudProjectile_SubActions[])(Entity*) = { + LakituCloudProjectile_SubAction0, + LakituCloudProjectile_SubAction1, + LakituCloudProjectile_SubAction2, +}; diff --git a/src/projectile/lakituLightning.c b/src/projectile/lakituLightning.c new file mode 100644 index 00000000..8d055ba6 --- /dev/null +++ b/src/projectile/lakituLightning.c @@ -0,0 +1,52 @@ +#include "entity.h" +#include "enemy.h" + +extern s32 sub_080AF090(Entity*); +extern s32 sub_080A7EB0(Entity*); + +extern void (*const LakituLightning_Functions[])(Entity*); +extern void (*const LakituLightning_Actions[])(Entity*); + +void LakituLightning_OnTick(Entity*); + +void LakituLightning(Entity* this) { + LakituLightning_Functions[GetNextFunction(this)](this); +} + +void LakituLightning_OnTick(Entity* this) { + LakituLightning_Actions[this->action](this); +} + +void sub_080A9DD8(Entity* this) { + if ((this->currentHealth == 0) || (this->bitfield == 0x80)) { + DeleteThisEntity(); + } + LakituLightning_OnTick(this); +} + +void LakituLightning_Init(Entity* this) { + this->action = 1; + this->actionDelay = 0xb4; + this->currentHealth = 1; + InitializeAnimation(this, 0); +} + +void LakituLightning_Action1(Entity* this) { + GetNextFrame(this); + sub_080AF090(this); + if ((this->collisions != 0) || (--this->actionDelay == 0)) { + CreateFx(this, 0x4f, 0); + DeleteThisEntity(); + } + if (sub_080A7EB0(this) != 0) { + DeleteThisEntity(); + } +} + +void (*const LakituLightning_Functions[])(Entity*) = { + LakituLightning_OnTick, sub_080A9DD8, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const LakituLightning_Actions[])(Entity*) = { + LakituLightning_Init, + LakituLightning_Action1, +}; diff --git a/src/projectile/projectile13.c b/src/projectile/mandiblesProjectile.c similarity index 78% rename from src/projectile/projectile13.c rename to src/projectile/mandiblesProjectile.c index fc8e06a2..0ab5c3ad 100644 --- a/src/projectile/projectile13.c +++ b/src/projectile/mandiblesProjectile.c @@ -6,51 +6,42 @@ #include "random.h" #include "game.h" -extern void (*const gUnk_08129C7C[])(Entity*); +extern Entity* sub_08049DF4(u32); +extern u32 sub_08049F1C(Entity*, Entity*, u32); +extern s32 sub_080AF090(Entity*); +extern u32 sub_0806F824(Entity*, Entity*, u32, u32); +extern Hitbox gUnk_080FD150; + +extern void (*const MandiblesProjectile_Functions[])(Entity*); +extern void (*const MandiblesProjectile_Actions[])(Entity*); +extern const u8 gUnk_08129CA4[]; +extern const Hitbox* const gUnk_08129CF4[]; +extern const u8 gUnk_08129CAC[]; +extern const s8 gUnk_08129D14[]; -extern void (*const gUnk_08129C90[])(Entity*); void sub_080AA1D8(Entity*); - void sub_080AA270(Entity*); - bool32 sub_080AA2E0(Entity*); void sub_080AA320(Entity*); - void sub_080AA3E0(Entity*, u32); bool32 sub_080AA374(Entity*); -extern u8 gUnk_08129CA4[]; -extern Hitbox* gUnk_08129CF4[]; -extern u8 gUnk_08129CAC[]; - -extern Entity* sub_08049DF4(u32); -extern u32 sub_08049F1C(Entity*, Entity*, u32); - -extern s32 sub_080AF090(Entity*); - -extern Hitbox gUnk_080FD150; - -extern s8 gUnk_08129D14[]; -extern u32 sub_0806F824(Entity*, Entity*, u32, u32); - -void Projectile13(Entity* this) { - Entity* entity; - - entity = this->attachedEntity; +void MandiblesProjectile(Entity* this) { + Entity* entity = this->attachedEntity; if (entity == NULL) { entity = this->parent; } if ((entity->field_0x43 == 0) && ((this->flags & 0x80) == 0)) { this->flags |= 0x80; } - gUnk_08129C7C[GetNextFunction(this)](this); + MandiblesProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A9E94(Entity* this) { +void MandiblesProjectile_OnTick(Entity* this) { if (this->action < 3) { sub_080AA1D8(this); } - gUnk_08129C90[this->action](this); + MandiblesProjectile_Actions[this->action](this); } void sub_080A9EBC(Entity* this) { @@ -86,7 +77,7 @@ void sub_080A9EBC(Entity* this) { } } -void sub_080A9F50(Entity* this) { +void MandiblesProjectile_Init(Entity* this) { this->action = 1; this->field_0x80.HWORD = 0; this->animationState = 0xff; @@ -96,7 +87,7 @@ void sub_080A9F50(Entity* this) { sub_080AA270(this); } -void sub_080A9F90(Entity* this) { +void MandiblesProjectile_Action1(Entity* this) { if (this->field_0x80.HWORD != 0) { this->field_0x80.HWORD -= 1; } else { @@ -111,7 +102,7 @@ void sub_080A9F90(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_080A9FD0(Entity* this) { +void MandiblesProjectile_Action2(Entity* this) { UpdateAnimationSingleFrame(this); if ((this->frames.all & 0x40) != 0) { this->frames.all &= 0xbf; @@ -124,9 +115,9 @@ void sub_080A9FD0(Entity* this) { } #ifdef EU -ASM_FUNC("asm/non_matching/eu/sub_080AA044.inc", void sub_080AA044(Entity* this)) +ASM_FUNC("asm/non_matching/eu/MandiblesProjectile_Action3.inc", void MandiblesProjectile_Action3(Entity* this)) #else -void sub_080AA044(Entity* this) { +void MandiblesProjectile_Action3(Entity* this) { u32 uVar1; s8* tmp; Entity* entity; @@ -168,7 +159,7 @@ void sub_080AA044(Entity* this) { } #endif -void sub_080AA110(Entity* this) { +void MandiblesProjectile_Action4(Entity* this) { s32 iVar1; u32 uVar2; Entity* entity; @@ -254,13 +245,13 @@ void sub_080AA270(Entity* this) { animationState = parent->animationState; if (this->animationState == 0xff) { this->animationState = animationState; - this->hitbox = gUnk_08129CF4[animationState]; + this->hitbox = (Hitbox*)gUnk_08129CF4[animationState]; sub_080AA3E0(this, 0); } else { animationState = (gUnk_08129CAC[Random() & 7] + animationState) & 7; if (animationState != this->animationState) { this->animationState = animationState; - this->hitbox = gUnk_08129CF4[animationState]; + this->hitbox = (Hitbox*)gUnk_08129CF4[animationState]; sub_080AA3E0(this, 0); } } @@ -286,7 +277,7 @@ bool32 sub_080AA2E0(Entity* this) { return TRUE; } -NONMATCH("asm/non_matching/projectile13/sub_080AA320.inc", void sub_080AA320(Entity* this)) { +NONMATCH("asm/non_matching/mandiblesProjectile/sub_080AA320.inc", void sub_080AA320(Entity* this)) { u32 uVar2; Entity* parent; @@ -308,7 +299,7 @@ NONMATCH("asm/non_matching/projectile13/sub_080AA320.inc", void sub_080AA320(Ent } END_NONMATCH -NONMATCH("asm/non_matching/projectile13/sub_080AA374.inc", bool32 sub_080AA374(Entity* this)) { +NONMATCH("asm/non_matching/mandiblesProjectile/sub_080AA374.inc", bool32 sub_080AA374(Entity* this)) { u32 uVar1; u32 animationState; Entity* entity; @@ -340,3 +331,28 @@ void sub_080AA3E0(Entity* this, u32 param) { } InitAnimationForceUpdate(this, tmp); } + +void (*const MandiblesProjectile_Functions[])(Entity*) = { + MandiblesProjectile_OnTick, sub_080A9EBC, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const MandiblesProjectile_Actions[])(Entity*) = { + MandiblesProjectile_Init, MandiblesProjectile_Action1, MandiblesProjectile_Action2, + MandiblesProjectile_Action3, MandiblesProjectile_Action4, +}; +const u8 gUnk_08129CA4[] = { 24, 36, 52, 32, 60, 28, 44, 40 }; +const u8 gUnk_08129CAC[] = { + 1, 0, 7, 1, 0, 7, 0, 0, +}; +const Hitbox gUnk_08129CB4 = { 0, -4, { 5, 5, 3, 7 }, 6, 8 }; +const Hitbox gUnk_08129CBC = { 3, -3, { 5, 3, 3, 5 }, 6, 6 }; +const Hitbox gUnk_08129CC4 = { 4, 0, { 7, 3, 5, 5 }, 8, 6 }; +const Hitbox gUnk_08129CCC = { 3, 3, { 5, 3, 3, 5 }, 6, 6 }; +const Hitbox gUnk_08129CD4 = { 0, 4, { 5, 5, 3, 7 }, 6, 8 }; +const Hitbox gUnk_08129CDC = { -3, 3, { 5, 3, 3, 5 }, 6, 6 }; +const Hitbox gUnk_08129CE4 = { -4, 0, { 7, 3, 5, 5 }, 8, 6 }; +const Hitbox gUnk_08129CEC = { -3, -3, { 5, 3, 3, 5 }, 6, 6 }; +const Hitbox* const gUnk_08129CF4[] = { + &gUnk_08129CB4, &gUnk_08129CBC, &gUnk_08129CC4, &gUnk_08129CCC, + &gUnk_08129CD4, &gUnk_08129CDC, &gUnk_08129CE4, &gUnk_08129CEC, +}; +const s8 gUnk_08129D14[] = { 0, -16, 6, -10, 0, 4, -6, -10 }; diff --git a/src/projectile/projectileE.c b/src/projectile/mazaalEnergyBeam.c similarity index 66% rename from src/projectile/projectileE.c rename to src/projectile/mazaalEnergyBeam.c index cc5745e5..4fe557b0 100644 --- a/src/projectile/projectileE.c +++ b/src/projectile/mazaalEnergyBeam.c @@ -2,13 +2,13 @@ #include "audio.h" #include "coord.h" -extern void (*const gUnk_08129A64[])(Entity*); +extern void (*const MazaalEnergyBeam_Actions[])(Entity*); -void ProjectileE(Entity* this) { - gUnk_08129A64[this->action](this); +void MazaalEnergyBeam(Entity* this) { + MazaalEnergyBeam_Actions[this->action](this); } -void sub_080A9518(Entity* this) { +void MazaalEnergyBeam_Init(Entity* this) { this->action = 1; this->actionDelay = 10; this->height.HALF.HI -= 2; @@ -17,7 +17,7 @@ void sub_080A9518(Entity* this) { SoundReq(SFX_149); } -void sub_080A9540(Entity* this) { +void MazaalEnergyBeam_Action1(Entity* this) { const s16* tmp; if (--this->actionDelay == 0) { @@ -38,9 +38,15 @@ void sub_080A9540(Entity* this) { } } -void sub_080A95BC(Entity* this) { +void MazaalEnergyBeam_Action2(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteEntity(this); } } + +void (*const MazaalEnergyBeam_Actions[])(Entity*) = { + MazaalEnergyBeam_Init, + MazaalEnergyBeam_Action1, + MazaalEnergyBeam_Action2, +}; diff --git a/src/projectile/projectile3.c b/src/projectile/moblinSpear.c similarity index 50% rename from src/projectile/projectile3.c rename to src/projectile/moblinSpear.c index b1f86734..a4123e20 100644 --- a/src/projectile/projectile3.c +++ b/src/projectile/moblinSpear.c @@ -1,27 +1,25 @@ #include "entity.h" #include "enemy.h" -extern void (*const gUnk_08129650[])(Entity*); - -extern void (*const gUnk_08129664[])(Entity*); - extern bool32 AllocMutableHitbox(Entity*); - typedef struct { - u8 offsetX; - u8 offsetY; + s8 offsetX; + s8 offsetY; u8 width; u8 height; -} Test; +} HitboxChange; -extern Test gUnk_0812966C[]; +extern void (*const MoblinSpear_Functions[])(Entity*); +extern void (*const MoblinSpear_Actions[])(Entity*); -void Projectile3(Entity* this) { - gUnk_08129650[GetNextFunction(this)](this); +extern const HitboxChange gUnk_0812966C[]; + +void MoblinSpear(Entity* this) { + MoblinSpear_Functions[GetNextFunction(this)](this); } -void sub_080A8314(Entity* this) { - gUnk_08129664[this->action](this); +void MoblinSpear_OnTick(Entity* this) { + MoblinSpear_Actions[this->action](this); } void sub_080A832C(Entity* this) { @@ -45,17 +43,17 @@ void sub_080A832C(Entity* this) { this->field_0x42 = 0; } -void sub_080A83A0(Entity* this) { +void MoblinSpear_Init(Entity* this) { if (AllocMutableHitbox(this) != 0) { this->action = 1; } } -NONMATCH("asm/non_matching/projectile3/sub_080A83B4.inc", void sub_080A83B4(Entity* this)) { +NONMATCH("asm/non_matching/moblinSpear/MoblinSpear_Action1.inc", void MoblinSpear_Action1(Entity* this)) { u8 frames; Entity* parent; u32 tmp; - Test* a; + const HitboxChange* a; parent = this->parent; if (parent == NULL) { @@ -67,7 +65,7 @@ NONMATCH("asm/non_matching/projectile3/sub_080A83B4.inc", void sub_080A83B4(Enti frames = parent->frames.all * 4; a = &gUnk_0812966C[frames / 4]; this->hitbox->offset_x = a->offsetX; - // TODO offset used to increate a pointer is already increated here? + // TODO offset used to increase a pointer is already increated here? if (parent->frameSpriteSettings == 0x40) { this->hitbox->offset_x = -this->hitbox->offset_x; } @@ -85,3 +83,20 @@ NONMATCH("asm/non_matching/projectile3/sub_080A83B4.inc", void sub_080A83B4(Enti } } END_NONMATCH + +void (*const MoblinSpear_Functions[])(Entity*) = { + MoblinSpear_OnTick, sub_080A832C, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const MoblinSpear_Actions[])(Entity*) = { + MoblinSpear_Init, + MoblinSpear_Action1, +}; + +const HitboxChange gUnk_0812966C[] = { + { 6, 11, 2, 4 }, { -12, 2, 3, 3 }, { -13, -15, 1, 2 }, { 5, 12, 1, 3 }, { 7, 10, 1, 2 }, { 8, 9, 1, 3 }, + { 7, 10, 1, 2 }, { -22, 1, 4, 2 }, { -12, 1, 3, 2 }, { -6, 2, 4, 2 }, { -12, 1, 3, 2 }, { -1, -19, 1, 1 }, + { -4, -19, 1, 1 }, { -4, -20, 1, 1 }, { -4, -19, 1, 1 }, { 6, 9, 1, 2 }, { 6, 10, 1, 2 }, { 6, 9, 1, 2 }, + { 6, 10, 1, 2 }, { -29, -11, 3, 2 }, { -29, -9, 3, 2 }, { -29, -11, 3, 2 }, { -29, -9, 3, 2 }, { -5, -25, 1, 2 }, + { -5, -24, 1, 2 }, { -5, -25, 1, 2 }, { -5, -24, 1, 2 }, { 7, 12, 1, 2 }, { 7, 11, 1, 2 }, { -12, 3, 3, 1 }, + { -12, 2, 3, 1 }, { -13, -16, 1, 2 }, { -13, -15, 1, 2 }, +}; diff --git a/src/projectile/projectileF.c b/src/projectile/octorokBossProjectile.c similarity index 80% rename from src/projectile/projectileF.c rename to src/projectile/octorokBossProjectile.c index 5f9ce5a4..e927283e 100644 --- a/src/projectile/projectileF.c +++ b/src/projectile/octorokBossProjectile.c @@ -4,25 +4,23 @@ #include "functions.h" #include "audio.h" -extern void (*const gUnk_08129ABC[])(Entity*); - -extern void (*const gUnk_08129AD0[])(Entity*); - -void sub_080A99F0(Entity*); +void OctorokBossProjectile_Action2(Entity*); extern void sub_080AE58C(Entity*, u32, u32); extern u32 sub_0806FC80(Entity*, Entity*, s32); -extern u8 gUnk_08129ADC[]; +extern void (*const OctorokBossProjectile_Functions[])(Entity*); +extern void (*const OctorokBossProjectile_Actions[])(Entity*); +extern const u8 gUnk_08129ADC[]; -void ProjectileF(Entity* this) { - gUnk_08129ABC[GetNextFunction(this)](this); +void OctorokBossProjectile(Entity* this) { + OctorokBossProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A95F8(Entity* this) { - gUnk_08129AD0[this->action](this); +void OctorokBossProjectile_OnTick(Entity* this) { + OctorokBossProjectile_Actions[this->action](this); } -void sub_080A9610(Entity* this) { +void OctorokBossProjectile_Init(Entity* this) { u32 uVar1; u32 uVar2; @@ -74,7 +72,7 @@ void sub_080A9610(Entity* this) { SoundReq(SFX_1B5); } -void sub_080A976C(Entity* this) { +void OctorokBossProjectile_Action1(Entity* this) { u32 index; switch (this->type) { @@ -84,7 +82,7 @@ void sub_080A976C(Entity* this) { } if ((this->type2 == 0) && ((this->bitfield & 0x80) != 0)) { if ((this->bitfield & 0x7f) == 0) { - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); } this->direction = this->field_0x3e << 3; this->speed = 0x400; @@ -105,7 +103,7 @@ void sub_080A976C(Entity* this) { this->parent->field_0x3e = this->direction >> 3; } SoundReq(SFX_BOSS_HIT); - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); } } UpdateAnimationSingleFrame(this); @@ -133,18 +131,18 @@ void sub_080A976C(Entity* this) { return; } for (index = 0; index < 3; ++index) { - this->attachedEntity = sub_0804A98C(this, 0xf, 1); + this->attachedEntity = CreateProjectileWithParent(this, 0xf, 1); if (this->attachedEntity != NULL) { this->attachedEntity->parent = this->parent; this->attachedEntity->direction = this->direction + gUnk_08129ADC[index]; CopyPosition(this, this->attachedEntity); } } - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); break; case 1: if (this->parent->action == 2) { - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); } GetNextFrame(this); if (sub_08003FC4(this, 0x1800) != 0) { @@ -152,7 +150,7 @@ void sub_080A976C(Entity* this) { if (this->collisions == 0) { sub_0806F62C(this, (s32)this->speed, (u32)this->direction); } else { - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); } } if (*(u32*)&this->field_0x78 < 0x1e) { @@ -163,12 +161,12 @@ void sub_080A976C(Entity* this) { } } if (--*(u32*)&this->field_0x78 == -1) { - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); } if ((this->bitfield & 0x80) == 0) { return; } - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); break; case 2: GetNextFrame(this); @@ -191,7 +189,22 @@ void sub_080A976C(Entity* this) { } } -void sub_080A99F0(Entity* this) { +void OctorokBossProjectile_Action2(Entity* this) { CreateFx(this, 4, 0); DeleteThisEntity(); } + +void (*const OctorokBossProjectile_Functions[])(Entity*) = { + OctorokBossProjectile_OnTick, OctorokBossProjectile_OnTick, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const OctorokBossProjectile_Actions[])(Entity*) = { + OctorokBossProjectile_Init, + OctorokBossProjectile_Action1, + OctorokBossProjectile_Action2, +}; +const u8 gUnk_08129ADC[] = { + 0, + 224, + 32, + 0, +}; diff --git a/src/projectile/projectile0.c b/src/projectile/projectile0.c deleted file mode 100644 index 644d9686..00000000 --- a/src/projectile/projectile0.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "entity.h" -#include "player.h" -#include "coord.h" - -void sub_080A7F80(Entity*); -void sub_080A7F9C(Entity*); - -extern u8 gUnk_081293B8[]; - -extern void (*const gUnk_081293CC[])(Entity*); - -extern Hitbox** gUnk_081293E0[]; - -extern Hitbox* gUnk_081293F0[]; - -extern Hitbox* gUnk_08129400[]; -extern Hitbox* gUnk_08129410[]; - -extern Hitbox* gUnk_08129420[]; - -void Projectile0(Entity* this) { - if (this->action == 0) { - this->action = 1; - sub_080A7F80(this); - if (this->type == 3) { - InitAnimationForceUpdate(this, this->parent->animationState + 0x18); - } - } - if ((this->parent == NULL) || (this->parent->currentHealth == 0)) { - DeleteThisEntity(); - } - if (((this->bitfield & 0x80) != 0) && (this->field_0x4c == &gPlayerEntity)) { - this->iframes = -0x2d; - } - this->bitfield = 0; - CopyPositionAndSpriteOffset(this->parent, this); - sub_080A7F9C(this); - if (this->type == 3) { - this->y.HALF.HI += 1; - UpdateAnimationSingleFrame(this); - } -} - -void sub_080A7F80(Entity* this) { - this->damageType = gUnk_081293B8[this->parent->type + this->type * 4]; -} - -void sub_080A7F9C(Entity* this) { - gUnk_081293CC[this->type](this); -} - -void sub_080A7FB4(Entity* this) { - Entity* parent = this->parent; - this->hitbox = gUnk_081293E0[parent->animationState][(parent->frames.all & 0xf) - 1]; -} - -void sub_080A7FD8(Entity* this) { - Entity* parent = this->parent; - this->hitbox = gUnk_081293F0[parent->animationState]; -} - -void sub_080A7FEC(Entity* this) { - if ((this->parent->frames.all & 0x10) != 0) { - this->hitbox = gUnk_08129410[this->parent->animationState]; - } else { - this->hitbox = gUnk_08129400[this->parent->animationState]; - } -} - -void sub_080A801C(Entity* this) { - Entity* parent = this->parent; - this->hitbox = gUnk_08129420[parent->animationState]; -} diff --git a/src/projectile/projectile11.c b/src/projectile/projectile11.c deleted file mode 100644 index a3b62c6e..00000000 --- a/src/projectile/projectile11.c +++ /dev/null @@ -1,66 +0,0 @@ -#include "entity.h" -#include "enemy.h" -#include "functions.h" -#include "player.h" - -extern void (*const gUnk_08129B58[])(Entity*); - -extern void (*const gUnk_08129B70[])(Entity*); - -extern void (*const gUnk_08129B78[])(Entity*); - -extern void sub_0800449C(Entity*, u32); -extern void sub_08079D84(void); - -void Projectile11(Entity* this) { - if (this->parent->next == NULL) { - DeleteThisEntity(); - } - gUnk_08129B58[GetNextFunction(this)](this); -} - -void sub_080A9CD4(Entity* this) { - gUnk_08129B70[this->action](this); -} - -void nullsub_539(Entity* this) { -} - -void sub_080A9CF0(Entity* this) { - if (sub_0806F520() == 0) { - CreateFx(this, 2, 0); - DeleteThisEntity(); - } - gUnk_08129B78[this->subAction](this); -} - -void sub_080A9D20(Entity* this) { - this->subAction = 2; -} - -void nullsub_540(Entity* this) { -} - -void sub_080A9D2C(Entity* this) { - if (sub_0806F3E4(this) != 0) { - if (this->damageType == 0xa6) { - ModHealth(-2); - sub_0800449C(&gPlayerEntity, 0x7a); - sub_08079D84(); - } - CreateFx(this, 2, 0); - DeleteThisEntity(); - } -} - -void sub_080A9D6C(Entity* this) { - this->action = 1; - this->animationState = this->parent->animationState; - InitAnimationForceUpdate(this, this->animationState); -} - -void sub_080A9D80(Entity* this) { - PositionRelative(this->parent, this, 0, -0x10000); - this->height.HALF.HI = 0xfffe; - UpdateAnimationSingleFrame(this); -} diff --git a/src/projectile/projectile12.c b/src/projectile/projectile12.c deleted file mode 100644 index 98c2d546..00000000 --- a/src/projectile/projectile12.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "entity.h" -#include "enemy.h" - -extern void (*const gUnk_08129BEC[])(Entity*); - -extern void (*const gUnk_08129C00[])(Entity*); - -void sub_080A9DC0(Entity*); - -extern s32 sub_080AF090(Entity*); -extern s32 sub_080A7EB0(Entity*); - -void Projectile12(Entity* this) { - gUnk_08129BEC[GetNextFunction(this)](this); -} - -void sub_080A9DC0(Entity* this) { - gUnk_08129C00[this->action](this); -} - -void sub_080A9DD8(Entity* this) { - if ((this->currentHealth == 0) || (this->bitfield == 0x80)) { - DeleteThisEntity(); - } - sub_080A9DC0(this); -} - -void sub_080A9DFC(Entity* this) { - this->action = 1; - this->actionDelay = 0xb4; - this->currentHealth = 1; - InitializeAnimation(this, 0); -} - -void sub_080A9E14(Entity* this) { - GetNextFrame(this); - sub_080AF090(this); - if ((this->collisions != 0) || (--this->actionDelay == 0)) { - CreateFx(this, 0x4f, 0); - DeleteThisEntity(); - } - if (sub_080A7EB0(this) != 0) { - DeleteThisEntity(); - } -} diff --git a/src/projectile/projectile16.c b/src/projectile/projectile16.c deleted file mode 100644 index 93208ac9..00000000 --- a/src/projectile/projectile16.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "entity.h" -#include "enemy.h" -#include "functions.h" - -extern void (*const gUnk_0812A3C0[])(Entity*); - -extern void (*const gUnk_0812A3D4[])(Entity*); - -extern s32 sub_080AF090(Entity*); - -extern s32 sub_080A7EB0(Entity*); - -void Projectile16(Entity* this) { - gUnk_0812A3C0[GetNextFunction(this)](this); -} - -void sub_080AAB04(Entity* this) { - gUnk_0812A3D4[this->action](this); -} - -void sub_080AAB1C(Entity* this) { - DeleteThisEntity(); -} - -void sub_080AAB24(Entity* this) { - this->action = 1; - this->actionDelay = 0x1e; - InitializeAnimation(this, 0); -} - -void sub_080AAB38(Entity* this) { - GetNextFrame(this); - if (this->actionDelay != 0) { - this->actionDelay -= 1; - } else { - if (sub_080AF090(this) == 0) { - sub_0806F69C(this); - } else { - this->action = 2; - } - } -} - -void sub_080AAB64(Entity* this) { - GetNextFrame(this); - sub_080AF090(this); - if (this->collisions != 0) { - DeleteThisEntity(); - } - if (sub_080A7EB0(this) != 0) { - DeleteThisEntity(); - } -} diff --git a/src/projectile/projectile1B.c b/src/projectile/projectile1B.c deleted file mode 100644 index 01284bc3..00000000 --- a/src/projectile/projectile1B.c +++ /dev/null @@ -1,82 +0,0 @@ -#include "entity.h" -#include "enemy.h" -#include "functions.h" - -extern void (*const gUnk_0812A58C[])(Entity*); - -extern void (*const gUnk_0812A5A0[])(Entity*); - -extern s32 sub_080AF090(Entity*); -bool32 sub_080AB5F4(Entity*); - -bool32 sub_080AB634(Entity*); - -extern void sub_080043A8(Entity*); -extern void CreateItemOnGround(Entity*); -extern void CreateChestSpawner(Entity*); - -void Projectile1B(Entity* this) { - gUnk_0812A58C[GetNextFunction(this)](this); -} - -void sub_080AB52C(Entity* this) { - gUnk_0812A5A0[this->action](this); -} - -void sub_080AB544(Entity* this) { - u32 tmp; - - if (this->iframes < -4) { - this->action = 2; - this->direction = this->field_0x3e; - tmp = (this->type ^ 2) << 3; - if (this->direction - tmp + 1 < 3) { - this->direction = tmp; - } - this->speed = 0x280; - } -} - -void sub_080AB580(Entity* this) { - this->action = 1; - this->direction = this->type << 3; - this->height.HALF.HI = 0xfffc; - InitializeAnimation(this, this->type); -} - -void sub_080AB59C(Entity* this) { - GetNextFrame(this); - if (sub_080AF090(this) == 0) { - CreateFx(this, 2, 0); - DeleteThisEntity(); - } - sub_080AB5F4(this); -} - -void sub_080AB5C4(Entity* this) { - GetNextFrame(this); - sub_080AF090(this); - if ((sub_080AB634(this) == 0) && (this->collisions != 0)) { - CreateFx(this, 2, 0); - DeleteThisEntity(); - } -} - -bool32 sub_080AB5F4(Entity* this) { - u32 uVar1; - - switch (sub_080043E8(this)) { - case 1: - CreateItemOnGround(this); - return TRUE; - case 2: - sub_080043A8(this); - return TRUE; - case 3: - CreateChestSpawner(this); - return TRUE; - } - return FALSE; -} - -ASM_FUNC("asm/non_matching/projectile1B/sub_080AB634.inc", bool32 sub_080AB634(Entity* this)) diff --git a/src/projectile/projectile1E.c b/src/projectile/projectile1E.c deleted file mode 100644 index 9b160f9d..00000000 --- a/src/projectile/projectile1E.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "entity.h" - -extern void (*const gUnk_0812A6CC[])(Entity*); - -void Projectile1E(Entity* this) { - gUnk_0812A6CC[this->action](this); -} - -ASM_FUNC("asm/non_matching/projectile1E/sub_080ABA74.inc", void sub_080ABA74(Entity* this)) - -ASM_FUNC("asm/non_matching/projectile1E/sub_080ABAE0.inc", void sub_080ABAE0(Entity* this)) diff --git a/src/projectile/projectile24.c b/src/projectile/projectile24.c deleted file mode 100644 index d60bf32b..00000000 --- a/src/projectile/projectile24.c +++ /dev/null @@ -1,66 +0,0 @@ -#include "entity.h" -#include "enemy.h" -#include "audio.h" -#include "functions.h" - -extern void (*const gUnk_0812AA5C[])(Entity*); - -extern void (*const gUnk_0812AA74[])(Entity*); - -extern s32 sub_080AF090(Entity*); -extern s32 sub_080A7EB0(Entity*); - -void sub_080ACB90(Entity*); - -void Projectile24(Entity* this) { - gUnk_0812AA5C[GetNextFunction(this)](this); -} - -void sub_080ACA50(Entity* this) { - gUnk_0812AA74[this->action](this); -} - -ASM_FUNC("asm/non_matching/projectile24/sub_080ACA68.inc", void sub_080ACA68(Entity* this)) - -void sub_080ACAC8(Entity* this) { - this->action = 1; - this->direction = 0x10; - this->height.HALF.HI = 0xfffc; - this->attachedEntity = NULL; - InitializeAnimation(this, 7); - SoundReq(SFX_199); -} - -void sub_080ACAF0(Entity* this) { - sub_080AF090(this); - GetNextFrame(this); - if (sub_080A7EB0(this) != 0) { - DeleteThisEntity(); - } -} - -void sub_080ACB10(Entity* this) { - sub_080AF090(this); - if (this->collisions != 0) { - DeleteThisEntity(); - } - GetNextFrame(this); - sub_080ACB90(this); - if (sub_080A7EB0(this) != 0) { - DeleteThisEntity(); - } -} - -ASM_FUNC("asm/non_matching/projectile24/sub_080ACB40.inc", void sub_080ACB40(Entity* this)) - -void sub_080ACB90(Entity* this) { - Entity* parent; - - parent = this->parent; - if ((this->x.HALF.HI == parent->x.HALF.HI) && (this->y.HALF.HI <= parent->y.HALF.HI)) { - parent->field_0xf = 1; - CreateFx(this, 0x1f, 0x40); - EnqueueSFX(SFX_ITEM_GLOVES_KNOCKBACK); - DeleteThisEntity(); - } -} diff --git a/src/projectile/projectile5.c b/src/projectile/projectile5.c index 1d0d6c5a..1010eb45 100644 --- a/src/projectile/projectile5.c +++ b/src/projectile/projectile5.c @@ -1,24 +1,22 @@ - #include "entity.h" #include "enemy.h" #include "player.h" #include "room.h" #include "coord.h" -extern void (*const gUnk_08129718[])(Entity*); - -extern void (*const gUnk_0812972C[])(Entity*); - extern u32 sub_080002E0(u32, u32); -extern Hitbox gUnk_08129734; +extern void (*const Projectile5_Functions[])(Entity*); +extern void (*const Projectile5_Actions[])(Entity*); + +extern const Hitbox3D gUnk_08129734; void Projectile5(Entity* this) { - gUnk_08129718[GetNextFunction(this)](this); + Projectile5_Functions[GetNextFunction(this)](this); } -void sub_080A86D8(Entity* this) { - gUnk_0812972C[this->action](this); +void Projectile5_OnTick(Entity* this) { + Projectile5_Actions[this->action](this); } void sub_080A86F0(Entity* this) { @@ -43,16 +41,14 @@ void sub_080A86F0(Entity* this) { } } -void sub_080A8770(Entity* this) { +void Projectile5_Init(Entity* this) { this->action = 1; this->field_0x3c |= 0x10; - this->hitbox = &gUnk_08129734; + this->hitbox = (Hitbox*)&gUnk_08129734; } -void sub_080A878C(Entity* this) { - Entity* parent; - - parent = this->parent; +void Projectile5_Action1(Entity* this) { + Entity* parent = this->parent; if (parent == NULL) { DeleteThisEntity(); } @@ -65,3 +61,12 @@ void sub_080A878C(Entity* this) { CopyPosition(parent, this); this->height.HALF.HI += 2; } + +void (*const Projectile5_Functions[])(Entity*) = { + Projectile5_OnTick, sub_080A86F0, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const Projectile5_Actions[])(Entity*) = { + Projectile5_Init, + Projectile5_Action1, +}; +const Hitbox3D gUnk_08129734 = { 0, 0, { 9, 6, 6, 9 }, 10, 10, 12, { 0, 0, 0 } }; diff --git a/src/projectile/projectileB.c b/src/projectile/projectileB.c deleted file mode 100644 index 0a4c6898..00000000 --- a/src/projectile/projectileB.c +++ /dev/null @@ -1,27 +0,0 @@ -#include "entity.h" -#include "player.h" -#include "coord.h" - -extern Hitbox* gUnk_08129998[]; -extern void sub_0803C0AC(Entity*); - -void ProjectileB(Entity* this) { - Entity* parent; - - if (this->action == 0) { - this->action = 1; - } - parent = this->parent; - if (((parent == NULL) || (parent->currentHealth == 0)) || (parent->next == NULL)) { - if (((this->bitfield & 0x80) != 0) && (this->field_0x4c == &gPlayerEntity)) { - sub_0803C0AC(this); - } - DeleteEntity(this); - } else { - this->hitbox = gUnk_08129998[parent->animationState]; - CopyPosition(parent, this); - if ((parent->iframes != 0) && (this->iframes == 0)) { - this->iframes = 0xff; - } - } -} diff --git a/src/projectile/projectile14.c b/src/projectile/removableDust.c similarity index 74% rename from src/projectile/projectile14.c rename to src/projectile/removableDust.c index 0284e5d0..f6bc3346 100644 --- a/src/projectile/projectile14.c +++ b/src/projectile/removableDust.c @@ -5,30 +5,26 @@ #include "flags.h" #include "utils.h" -extern void (*const gUnk_08129FB8[])(Entity*); +extern u32 sub_080002C8(u16, u8); +extern Entity* LoadRoomEntity(EntityData*); + +extern void (*const RemovableDust_Functions[])(Entity*); +extern const u16 gUnk_08129FD0[]; +extern const u16 gUnk_08129FE4[]; +extern const s8 gUnk_08129FF8[]; +extern const u8 gUnk_0812A004[]; void sub_080AA494(Entity*); void sub_080AA534(Entity*); - void sub_080AA464(Entity*); - void sub_080AA544(Entity*); - -extern u16 gUnk_08129FD0[]; void sub_080AA654(Entity*, u32); -extern s8 gUnk_08129FF8[]; -extern u16 gUnk_08129FE4[]; -extern u32 sub_080002C8(u16, u8); - -extern u32 gUnk_0812A004; -extern Entity* LoadRoomEntity(EntityData*); - -void Projectile14(Entity* this) { - gUnk_08129FB8[GetNextFunction(this)](this); +void RemovableDust(Entity* this) { + RemovableDust_Functions[GetNextFunction(this)](this); } -void sub_080AA41C(Entity* this) { +void RemovableDust_OnTick(Entity* this) { if (this->action == 0) { this->action = 1; this->frameIndex = this->type; @@ -63,7 +59,7 @@ void sub_080AA464(Entity* this) { void sub_080AA494(Entity* this) { u32 tileType; - u16* iterator; + const u16* iterator; u32 index; index = 0; @@ -91,14 +87,14 @@ void sub_080AA534(Entity* this) { UpdateSpriteForCollisionLayer(this); } -NONMATCH("asm/non_matching/projectile14/sub_080AA544.inc", void sub_080AA544(Entity* this)) { +void sub_080AA544(Entity* this) { u8* pbVar1; s32 iVar2; u32 uVar3; s32 iVar4; - u16* puVar5; + const u16* puVar5; u32 param; - s8* tmp; + const s8* tmp; if (this->type2 < 9) { tmp = gUnk_08129FF8; @@ -124,18 +120,13 @@ NONMATCH("asm/non_matching/projectile14/sub_080AA544.inc", void sub_080AA544(Ent sub_080AA654(this, param); SetFlag((u16)this->speed); } else { - sub_0807B7D8(gUnk_08129FE4[this->type2], - param - - // TODO this array access is wrong - *((s8*)gUnk_08129FE4 + this->type2), - this->collisionLayer); + sub_0807B7D8(gUnk_08129FE4[this->type2], param - tmp[this->type2], this->collisionLayer); } } else { sub_0807BA8C(TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer); SetFlag((u16)this->speed); } } -END_NONMATCH void sub_080AA654(Entity* this, u32 param) { EntityData* entityData; @@ -148,3 +139,13 @@ void sub_080AA654(Entity* this, u32 param) { LoadRoomEntity(entityData); } + +void (*const RemovableDust_Functions[])(Entity*) = { + RemovableDust_OnTick, sub_080AA450, DeleteEntity, DeleteEntity, DeleteEntity, sub_080AA464, +}; +const u16 gUnk_08129FD0[] = { 387, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 0 }; +const u16 gUnk_08129FE4[] = { 388, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 0 }; +const s8 gUnk_08129FF8[] = { 65, 64, 63, 1, 0, -1, -63, -64, -65, 0, 0, 0 }; +const u8 gUnk_0812A004[] = { + 9, 0, 3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; diff --git a/src/projectile/projectile1.c b/src/projectile/rockProjectile.c similarity index 67% rename from src/projectile/projectile1.c rename to src/projectile/rockProjectile.c index d300cd5f..e9e47b2c 100644 --- a/src/projectile/projectile1.c +++ b/src/projectile/rockProjectile.c @@ -2,22 +2,21 @@ #include "enemy.h" #include "functions.h" -extern void (*const gUnk_081295D0[])(Entity*); - -extern void (*const gUnk_081295E4[])(Entity*); - -void sub_080A8178(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); -void Projectile1(Entity* this) { - gUnk_081295D0[GetNextFunction(this)](this); +extern void (*const RockProjectile_Functions[])(Entity*); +extern void (*const RockProjectile_Actions[])(Entity*); + +void sub_080A8178(Entity*); + +void RockProjectile(Entity* this) { + RockProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A804C(Entity* this) { - gUnk_081295E4[this->action](this); +void RockProjectile_OnTick(Entity* this) { + RockProjectile_Actions[this->action](this); } void sub_080A8064(Entity* this) { @@ -29,14 +28,14 @@ void sub_080A8064(Entity* this) { } } -void sub_080A8088(Entity* this) { +void RockProjectile_Init(Entity* this) { this->action = 1; this->actionDelay = 0x30; this->field_0x20 = 0xa000; InitializeAnimation(this, 0); } -void sub_080A80A0(Entity* this) { +void RockProjectile_Action1(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) != 0) { if (sub_080A7EB0(this) != 0) { @@ -54,7 +53,7 @@ void sub_080A80A0(Entity* this) { } } -void sub_080A80F4(Entity* this) { +void RockProjectile_Action2(Entity* this) { sub_0806F69C(this); GetNextFrame(this); if (sub_08003FC4(this, 0x1800) == 0) { @@ -62,7 +61,7 @@ void sub_080A80F4(Entity* this) { } } -void sub_080A8118(Entity* this) { +void RockProjectile_Action3(Entity* this) { GetNextFrame(this); sub_080AF090(this); switch (sub_080044EC(this, 0x2800)) { @@ -89,3 +88,13 @@ void sub_080A8178(Entity* this) { this->speed = 0x40; this->field_0x20 = 0x14000; } + +void (*const RockProjectile_Functions[])(Entity*) = { + RockProjectile_OnTick, sub_080A8064, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const RockProjectile_Actions[])(Entity*) = { + RockProjectile_Init, + RockProjectile_Action1, + RockProjectile_Action2, + RockProjectile_Action3, +}; diff --git a/src/projectile/projectile15.c b/src/projectile/spiderWeb.c similarity index 69% rename from src/projectile/projectile15.c rename to src/projectile/spiderWeb.c index 0130e3a7..68d6e868 100644 --- a/src/projectile/projectile15.c +++ b/src/projectile/spiderWeb.c @@ -5,35 +5,30 @@ #include "object.h" #include "flags.h" -extern void (*const gUnk_0812A014[])(Entity*); +extern void sub_0806FBB4(Entity*); +extern u32 sub_080002D4(s32, s32, u32); -extern void (*const gUnk_0812A02C[])(Entity*); - -extern u8 gUnk_0812A03C[]; +extern void (*const SpiderWeb_Functions[])(Entity*); +extern void (*const SpiderWeb_Actions[])(Entity*); +extern const u8 gUnk_0812A03C[]; +extern const Hitbox* const gUnk_0812A04C[]; +extern void (*const SpiderWeb_SubActions[])(Entity*); +extern const s8 gUnk_0812A064[]; +extern const s8 gUnk_0812A06C[]; +extern const u8 gUnk_0812A074[]; +extern const u16 gUnk_0812A084[]; void sub_080AA6C0(Entity*); void sub_080AAAA8(Entity*); - -extern Hitbox* gUnk_0812A04C[]; void sub_080AAA68(Entity*); - void sub_080AA9E0(Entity*); -extern void (*const gUnk_0812A05C[])(Entity*); -extern void sub_0806FBB4(Entity*); - -extern u16 gUnk_0812A084[]; - -extern u32 sub_080002D4(s32, s32, u32); -extern s8 gUnk_0812A064[]; -extern s8 gUnk_0812A06C[]; - -void Projectile15(Entity* this) { - gUnk_0812A014[GetNextFunction(this)](this); +void SpiderWeb(Entity* this) { + SpiderWeb_Functions[GetNextFunction(this)](this); } -void sub_080AA6A8(Entity* this) { - gUnk_0812A02C[this->action](this); +void SpiderWeb_OnTick(Entity* this) { + SpiderWeb_Actions[this->action](this); } void sub_080AA6C0(Entity* this) { @@ -101,32 +96,32 @@ void sub_080AA78C(Entity* this) { } } -void sub_080AA834(Entity* this) { +void SpiderWeb_Init(Entity* this) { if (CheckFlags(this->field_0x86.HWORD) != 0) { DeleteThisEntity(); } this->action = 1; this->field_0x1c = 1; this->field_0x16 = 1; - this->hitbox = gUnk_0812A04C[this->type]; + this->hitbox = (Hitbox*)gUnk_0812A04C[this->type]; this->cutsceneBeh.HALF.LO = 0; InitAnimationForceUpdate(this, this->type); sub_080AAA68(this); } -void sub_080AA878(Entity* this) { +void SpiderWeb_Action1(Entity* this) { if ((this->frames.all & 0x80) == 0) { UpdateAnimationSingleFrame(this); } sub_080AA9E0(this); } -void sub_080AA898(Entity* this) { +void SpiderWeb_Action2(Entity* this) { sub_0806FBB4(this); - gUnk_0812A05C[this->subAction - 5](this); + SpiderWeb_SubActions[this->subAction - 5](this); } -void sub_080AA8B8(Entity* this) { +void SpiderWeb_SubAction0(Entity* this) { u32 tmp; u16 x; u16 y; @@ -160,20 +155,20 @@ void sub_080AA8B8(Entity* this) { } } -void sub_080AA9AC(Entity* this) { +void SpiderWeb_SubAction1(Entity* this) { this->action = 1; this->cutsceneBeh.HALF.LO = 0; InitAnimationForceUpdate(this, this->type + 0xc); } -void sub_080AA9C4(Entity* this) { +void SpiderWeb_Action3(Entity* this) { GetNextFrame(this); if (--this->actionDelay == 0) { sub_080AAAA8(this); } } -ASM_FUNC("asm/non_matching/projectile15/sub_080AA9E0.inc", void sub_080AA9E0(Entity* this)) +ASM_FUNC("asm/non_matching/spiderWeb/sub_080AA9E0.inc", void sub_080AA9E0(Entity* this)) void sub_080AAA68(Entity* this) { SetTile(gUnk_0812A084[this->type], TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer); @@ -184,3 +179,34 @@ void sub_080AAAA8(Entity* this) { sub_0807BA8C(TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer); DeleteThisEntity(); } + +void (*const SpiderWeb_Functions[])(Entity*) = { + SpiderWeb_OnTick, sub_080AA6C0, DeleteEntity, DeleteEntity, DeleteEntity, sub_080AA78C, +}; +void (*const SpiderWeb_Actions[])(Entity*) = { + SpiderWeb_Init, + SpiderWeb_Action1, + SpiderWeb_Action2, + SpiderWeb_Action3, +}; +const u8 gUnk_0812A03C[] = { + 248, 252, 6, 1, 4, 245, 253, 3, 249, 253, 6, 4, 252, 245, 3, 3, +}; +extern const Hitbox gUnk_080FD41C; +extern const Hitbox gUnk_080FD424; +extern const Hitbox gUnk_080FD42C; +extern const Hitbox gUnk_080FD434; +const Hitbox* const gUnk_0812A04C[] = { + &gUnk_080FD41C, + &gUnk_080FD424, + &gUnk_080FD42C, + &gUnk_080FD434, +}; +void (*const SpiderWeb_SubActions[])(Entity*) = { + SpiderWeb_SubAction0, + SpiderWeb_SubAction1, +}; +const s8 gUnk_0812A064[] = { 0, 17, -15, 4, 0, -11, 15, 4 }; +const s8 gUnk_0812A06C[] = { 0, 2, -2, 0, 0, -2, 2, 0 }; +const u8 gUnk_0812A074[] = { 4, 0, 5, 16, 3, 8, 5, 24, 3, 16, 5, 0, 3, 24, 5, 8 }; +const u16 gUnk_0812A084[] = { 16419, 16421, 16422, 16420 }; diff --git a/src/projectile/spikedRollers.c b/src/projectile/spikedRollers.c new file mode 100644 index 00000000..503792ba --- /dev/null +++ b/src/projectile/spikedRollers.c @@ -0,0 +1,20 @@ +#include "entity.h" + +extern void (*const SpikedRollers_Actions[])(Entity*); +extern const u8 gUnk_0812A6D4[]; + +void SpikedRollers(Entity* this) { + SpikedRollers_Actions[this->action](this); +} + +ASM_FUNC("asm/non_matching/spikedRollers/sub_080ABA74.inc", void sub_080ABA74(Entity* this)) + +ASM_FUNC("asm/non_matching/spikedRollers/sub_080ABAE0.inc", void sub_080ABAE0(Entity* this)) + +void (*const SpikedRollers_Actions[])(Entity*) = { + sub_080ABA74, + sub_080ABAE0, +}; +const u8 gUnk_0812A6D4[] = { + 8, 16, 24, 32, 40, 48, 56, 16, 24, 32, 40, 48, 56, 64, +}; diff --git a/src/projectile/projectile10.c b/src/projectile/stalfosProjectile.c similarity index 61% rename from src/projectile/projectile10.c rename to src/projectile/stalfosProjectile.c index d93f9e0c..c743fcbc 100644 --- a/src/projectile/projectile10.c +++ b/src/projectile/stalfosProjectile.c @@ -2,33 +2,30 @@ #include "enemy.h" #include "functions.h" -extern void (*const gUnk_08129AE0[])(Entity*); - -extern void (*const gUnk_08129AF8[])(Entity*); - -extern void (*const gUnk_08129B08[])(Entity*); -void sub_080A9BA8(Entity*); - -void sub_080A9BD0(Entity*); -void sub_080A9C34(Entity*); - -void sub_080A9C50(Entity*); +extern void (*const StalfosProjectile_Functions[])(Entity*); +extern void (*const StalfosProjectile_Actions[])(Entity*); +extern void (*const StalfosProjectile_SubActions[])(Entity*); typedef struct { s8 unk_0; s8 unk_1; s8 unk_2; } PACKED struct_08129B20; -extern struct_08129B20 gUnk_08129B20[]; +extern const struct_08129B20 gUnk_08129B20[]; -extern u8 gUnk_08129B50[]; +extern const u8 gUnk_08129B50[]; -void Projectile10(Entity* this) { - gUnk_08129AE0[GetNextFunction(this)](this); +void sub_080A9BA8(Entity*); +void sub_080A9BD0(Entity*); +void sub_080A9C34(Entity*); +void sub_080A9C50(Entity*); + +void StalfosProjectile(Entity* this) { + StalfosProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A9A1C(Entity* this) { - gUnk_08129AF8[this->action](this); +void StalfosProjectile_OnTick(Entity* this) { + StalfosProjectile_Actions[this->action](this); } void sub_080A9A34(Entity* this) { @@ -44,34 +41,34 @@ void sub_080A9A64(Entity* this) { if ((this->subAction < 3) && (sub_0806F520(this) == 0)) { sub_080A9BA8(this); } - gUnk_08129B08[this->subAction](this); + StalfosProjectile_SubActions[this->subAction](this); } -void sub_080A9A94(Entity* this) { +void StalfosProjectile_SubAction0(Entity* this) { this->subAction = 2; this->height.HALF.HI = 0xfffe; } -void sub_080A9AA4(Entity* this) { +void StalfosProjectile_SubAction1(Entity* this) { sub_0806F4E8(this); } -void sub_080A9AAC(Entity* this) { +void StalfosProjectile_SubAction2(Entity* this) { sub_0806F3E4(this); } -void sub_080A9AB4(Entity* this) { +void StalfosProjectile_SubAction3(Entity* this) { this->flags &= 0x7f; } -void nullsub_128(Entity* this) { +void StalfosProjectile_SubAction4(Entity* this) { } -void sub_080A9AC4(Entity* this) { +void StalfosProjectile_SubAction5(Entity* this) { sub_080A9BA8(this); } -void sub_080A9ACC(Entity* this) { +void StalfosProjectile_Init(Entity* this) { switch (this->type2) { case 1: this->action = 2; @@ -95,7 +92,7 @@ void sub_080A9ACC(Entity* this) { } } -void sub_080A9B24(Entity* this) { +void StalfosProjectile_Action1(Entity* this) { if (this->parent->next == NULL) { sub_080A9BA8(this); } @@ -107,7 +104,7 @@ void sub_080A9B24(Entity* this) { } } -void sub_080A9B54(Entity* this) { +void StalfosProjectile_Action2(Entity* this) { if (this->parent->next == NULL) { sub_080A9BA8(this); } @@ -118,7 +115,7 @@ void sub_080A9B54(Entity* this) { } } -void sub_080A9B80(Entity* this) { +void StalfosProjectile_Action3(Entity* this) { if (this->field_0x20 < 0) { this->spriteSettings.b.flipY = 1; } @@ -140,7 +137,7 @@ void sub_080A9BD0(Entity* this) { Entity* parent; s32 tmp; u32 tmp2; - struct_08129B20* entry; + const struct_08129B20* entry; parent = this->parent; switch (parent->animationState) { @@ -186,3 +183,23 @@ void sub_080A9C50(Entity* this) { sub_0806FA90(parent, this, 0, 1); this->spriteOffsetY += gUnk_08129B50[tmp]; } + +void (*const StalfosProjectile_Functions[])(Entity*) = { + StalfosProjectile_OnTick, sub_080A9A34, DeleteEntity, DeleteEntity, DeleteEntity, sub_080A9A64, +}; +void (*const StalfosProjectile_Actions[])(Entity*) = { + StalfosProjectile_Init, + StalfosProjectile_Action1, + StalfosProjectile_Action2, + StalfosProjectile_Action3, +}; +void (*const StalfosProjectile_SubActions[])(Entity*) = { + StalfosProjectile_SubAction0, StalfosProjectile_SubAction1, StalfosProjectile_SubAction2, + StalfosProjectile_SubAction3, StalfosProjectile_SubAction4, StalfosProjectile_SubAction5, +}; +const struct_08129B20 gUnk_08129B20[] = { + { 0, -9, -1 }, { 0, 5, -25 }, { 0, 3, -20 }, { 0, 0, -14 }, { 10, 0, -1 }, { -5, 0, -24 }, + { -3, 0, -20 }, { 0, 0, -13 }, { 0, 5, -1 }, { 0, -5, -19 }, { 0, -3, -16 }, { 0, 0, -11 }, + { -10, 0, -1 }, { 5, 0, -24 }, { 3, 0, -20 }, { 0, 0, -13 }, +}; +const u8 gUnk_08129B50[] = { 241, 243, 242, 241, 243, 242, 0, 0 }; diff --git a/src/projectile/torchTrapProjectile.c b/src/projectile/torchTrapProjectile.c new file mode 100644 index 00000000..aa550c6a --- /dev/null +++ b/src/projectile/torchTrapProjectile.c @@ -0,0 +1,60 @@ +#include "entity.h" +#include "enemy.h" +#include "functions.h" + +extern s32 sub_080AF090(Entity*); +extern s32 sub_080A7EB0(Entity*); + +extern void (*const TorchTrapProjectile_Functions[])(Entity*); +extern void (*const TorchTrapProjectile_Actions[])(Entity*); + +void TorchTrapProjectile(Entity* this) { + TorchTrapProjectile_Functions[GetNextFunction(this)](this); +} + +void TorchTrapProjectile_OnTick(Entity* this) { + TorchTrapProjectile_Actions[this->action](this); +} + +void sub_080AAB1C(Entity* this) { + DeleteThisEntity(); +} + +void TorchTrapProjectile_Init(Entity* this) { + this->action = 1; + this->actionDelay = 0x1e; + InitializeAnimation(this, 0); +} + +void TorchTrapProjectile_Action1(Entity* this) { + GetNextFrame(this); + if (this->actionDelay != 0) { + this->actionDelay -= 1; + } else { + if (sub_080AF090(this) == 0) { + sub_0806F69C(this); + } else { + this->action = 2; + } + } +} + +void TorchTrapProjectile_Action2(Entity* this) { + GetNextFrame(this); + sub_080AF090(this); + if (this->collisions != 0) { + DeleteThisEntity(); + } + if (sub_080A7EB0(this) != 0) { + DeleteThisEntity(); + } +} + +void (*const TorchTrapProjectile_Functions[])(Entity*) = { + TorchTrapProjectile_OnTick, sub_080AAB1C, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const TorchTrapProjectile_Actions[])(Entity*) = { + TorchTrapProjectile_Init, + TorchTrapProjectile_Action1, + TorchTrapProjectile_Action2, +}; diff --git a/src/projectile/projectile18.c b/src/projectile/v1DarkMagicProjectile.c similarity index 75% rename from src/projectile/projectile18.c rename to src/projectile/v1DarkMagicProjectile.c index 7efec1c5..baa70ecb 100644 --- a/src/projectile/projectile18.c +++ b/src/projectile/v1DarkMagicProjectile.c @@ -6,23 +6,21 @@ #include "functions.h" #include "random.h" -extern void (*const gUnk_0812A418[])(Entity*); +extern void sub_0800449C(Entity*, u32); -extern void (*const gUnk_0812A430[])(Entity*); - -extern void (*const gUnk_0812A440[])(Entity*); +extern void (*const V1DarkMagicProjectile_Functions[])(Entity*); +extern void (*const V1DarkMagicProjectile_Actions[])(Entity*); +extern void (*const V1DarkMagicProjectile_SubActions[])(Entity*); void sub_080AAF74(Entity*); void sub_080AB034(Entity*); -extern void sub_0800449C(Entity*, u32); - -void Projectile18(Entity* this) { - gUnk_0812A418[GetNextFunction(this)](this); +void V1DarkMagicProjectile(Entity* this) { + V1DarkMagicProjectile_Functions[GetNextFunction(this)](this); } -void sub_080AAC0C(Entity* this) { - gUnk_0812A430[this->action](this); +void V1DarkMagicProjectile_OnTick(Entity* this) { + V1DarkMagicProjectile_Actions[this->action](this); if ((this->type2 == 0) && (--this->cutsceneBeh.HWORD == 0)) { this->currentHealth = 0; } @@ -56,29 +54,29 @@ void sub_080AAC44(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile18/sub_080AACE0.inc", void sub_080AACE0(Entity* this)) +ASM_FUNC("asm/non_matching/v1DarkMagicProjectile/sub_080AACE0.inc", void sub_080AACE0(Entity* this)) void sub_080AAD70(Entity* this) { if (sub_0806F520() == 0) { this->currentHealth = 0; } - gUnk_0812A440[this->subAction](this); + V1DarkMagicProjectile_SubActions[this->subAction](this); } -void sub_080AAD98(Entity* this) { +void V1DarkMagicProjectile_SubAction0(Entity* this) { this->subAction = 2; } -void nullsub_541(Entity* this) { +void V1DarkMagicProjectile_SubAction1(Entity* this) { } -void sub_080AADA4(Entity* this) { +void V1DarkMagicProjectile_SubAction2(Entity* this) { if (sub_0806F3E4(this) != 0) { this->currentHealth = 0; } } -void sub_080AADBC(Entity* this) { +void V1DarkMagicProjectile_Init(Entity* this) { Entity* entity; if (this->type2 == 0) { @@ -101,7 +99,7 @@ void sub_080AADBC(Entity* this) { this->direction = GetFacingDirection(this, &gPlayerEntity); this->field_0x86.HALF.LO = 0; this->cutsceneBeh.HWORD = 300; - entity = sub_080A7EE0(0x18); + entity = CreateProjectile(0x18); if (entity != NULL) { entity->type = 1; entity->type2 = this->type2; @@ -115,7 +113,7 @@ void sub_080AADBC(Entity* this) { InitializeAnimation(this, this->type); } -void sub_080AAE88(Entity* this) { +void V1DarkMagicProjectile_Action1(Entity* this) { u8 bVar1; u32 uVar2; @@ -142,12 +140,12 @@ void sub_080AAE88(Entity* this) { sub_080AB034(this); } -void sub_080AAF00(Entity* this) { +void V1DarkMagicProjectile_Action2(Entity* this) { sub_080AAF74(this); sub_080AB034(this); } -void sub_080AAF10(Entity* this) { +void V1DarkMagicProjectile_Action3(Entity* this) { CopyPosition(this->parent, this); sub_080AB034(this); this->spriteSettings.b.draw = this->parent->spriteSettings.b.draw; @@ -206,3 +204,18 @@ void sub_080AB034(Entity* this) { } sub_0801D2B4(this, tmp); } + +void (*const V1DarkMagicProjectile_Functions[])(Entity*) = { + V1DarkMagicProjectile_OnTick, sub_080AAC44, DeleteEntity, sub_080AACE0, DeleteEntity, sub_080AAD70, +}; +void (*const V1DarkMagicProjectile_Actions[])(Entity*) = { + V1DarkMagicProjectile_Init, + V1DarkMagicProjectile_Action1, + V1DarkMagicProjectile_Action2, + V1DarkMagicProjectile_Action3, +}; +void (*const V1DarkMagicProjectile_SubActions[])(Entity*) = { + V1DarkMagicProjectile_SubAction0, + V1DarkMagicProjectile_SubAction1, + V1DarkMagicProjectile_SubAction2, +}; diff --git a/src/projectile/projectile1C.c b/src/projectile/v1EyeLaser.c similarity index 52% rename from src/projectile/projectile1C.c rename to src/projectile/v1EyeLaser.c index 5b5f1938..2af3ae08 100644 --- a/src/projectile/projectile1C.c +++ b/src/projectile/v1EyeLaser.c @@ -1,32 +1,27 @@ #include "entity.h" #include "functions.h" -extern void (*const gUnk_0812A5E8[])(Entity*); - -extern Hitbox gUnk_0812A614; +extern void (*const V1EyeLaser_Actions[])(Entity*); +extern const Hitbox* const gUnk_0812A5F4[]; +extern const Hitbox gUnk_0812A614; +extern const Hitbox gUnk_0812A61C; void sub_080AB758(Entity*); - void sub_080AB888(Entity*); -extern Hitbox gUnk_0812A614; -extern Hitbox gUnk_0812A61C; - -extern Hitbox* gUnk_0812A5F4[]; - -void Projectile1C(Entity* this) { +void V1EyeLaser(Entity* this) { if (this->parent->spriteSettings.b.draw == 0) { DeleteThisEntity(); } - gUnk_0812A5E8[this->action](this); + V1EyeLaser_Actions[this->action](this); } -void sub_080AB6B8(Entity* this) { +void V1EyeLaser_Init(Entity* this) { *(u32*)&this->field_0x74 = this->parent->x.WORD; if (this->type == 0) { this->action = 1; this->flags &= 0x7f; - this->hitbox = &gUnk_0812A614; + this->hitbox = (Hitbox*)&gUnk_0812A614; InitializeAnimation(this, 0); } else { this->action = 2; @@ -35,7 +30,7 @@ void sub_080AB6B8(Entity* this) { } } -void sub_080AB6FC(Entity* this) { +void V1EyeLaser_Action1(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { this->action = 2; @@ -44,7 +39,7 @@ void sub_080AB6FC(Entity* this) { } } -void sub_080AB728(Entity* this) { +void V1EyeLaser_Action2(Entity* this) { GetNextFrame(this); this->x.WORD += (this->parent->x.WORD - *(u32*)&this->field_0x74); *(u32*)&this->field_0x74 = this->parent->x.WORD; @@ -54,21 +49,21 @@ void sub_080AB728(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile1C/sub_080AB758.inc", void sub_080AB758(Entity* this)) +ASM_FUNC("asm/non_matching/v1EyeLaser/sub_080AB758.inc", void sub_080AB758(Entity* this)) void sub_080AB844(Entity* this, s32 param_1, s32 param_2) { Entity* entity; - entity = sub_080A7EE0(0x1c); + entity = CreateProjectile(0x1c); if (entity != NULL) { entity->type = 1; entity->actionDelay = param_1; entity->parent = this->parent; PositionRelative(this, entity, 0, param_2 << 0x10); if (param_1 != 1) { - entity->hitbox = &gUnk_0812A61C; + entity->hitbox = (Hitbox*)&gUnk_0812A61C; } else { - entity->hitbox = &gUnk_0812A614; + entity->hitbox = (Hitbox*)&gUnk_0812A614; } } } @@ -83,7 +78,7 @@ void sub_080AB888(Entity* this) { case 3: index = 1; case 4: - this->hitbox = gUnk_0812A5F4[this->field_0xf * 2 + index]; + this->hitbox = (Hitbox*)gUnk_0812A5F4[this->field_0xf * 2 + index]; break; case 0: case 1: @@ -96,3 +91,24 @@ void sub_080AB888(Entity* this) { this->field_0xf = 4; } } + +void (*const V1EyeLaser_Actions[])(Entity*) = { + V1EyeLaser_Init, + V1EyeLaser_Action1, + V1EyeLaser_Action2, +}; + +extern const Hitbox gUnk_0812A624; +extern const Hitbox gUnk_0812A62C; +extern const Hitbox gUnk_0812A634; + +const Hitbox* const gUnk_0812A5F4[] = { + &gUnk_0812A61C, &gUnk_0812A61C, &gUnk_0812A624, &gUnk_0812A61C, + &gUnk_0812A62C, &gUnk_0812A624, &gUnk_0812A634, &gUnk_0812A624, +}; + +const Hitbox gUnk_0812A614 = { 0, 4, { 0, 0, 0, 0 }, 1, 3 }; +const Hitbox gUnk_0812A61C = { 0, 8, { 0, 0, 0, 0 }, 1, 6 }; +const Hitbox gUnk_0812A624 = { 0, 24, { 0, 0, 0, 0 }, 1, 6 }; +const Hitbox gUnk_0812A62C = { 0, 40, { 0, 0, 0, 0 }, 1, 6 }; +const Hitbox gUnk_0812A634 = { 0, 56, { 0, 0, 0, 0 }, 1, 6 }; diff --git a/src/projectile/projectile1A.c b/src/projectile/v1FireProjectile.c similarity index 56% rename from src/projectile/projectile1A.c rename to src/projectile/v1FireProjectile.c index de519353..cad6d879 100644 --- a/src/projectile/projectile1A.c +++ b/src/projectile/v1FireProjectile.c @@ -5,24 +5,22 @@ #include "audio.h" #include "random.h" -extern void (*const gUnk_0812A4C8[])(Entity*); - -extern void (*const gUnk_0812A4DC[])(Entity*); - -void sub_080AB4A4(Entity*); - extern void sub_0806F5BC(Entity*, u32, u32); extern u32 sub_080041DC(Entity*, u32, u32); + +extern void (*const V1FireProjectile_Functions[])(Entity*); +extern void (*const V1FireProjectile_Actions[])(Entity*); +extern const s8 gUnk_0812A4EC[]; + +void sub_080AB4A4(Entity*); s8* sub_080AB4F8(Entity*); -extern s8 gUnk_0812A4EC[]; - -void Projectile1A(Entity* this) { - gUnk_0812A4C8[GetNextFunction(this)](this); +void V1FireProjectile(Entity* this) { + V1FireProjectile_Functions[GetNextFunction(this)](this); } -void sub_080AB2C4(Entity* this) { - gUnk_0812A4DC[this->action](this); +void V1FireProjectile_OnTick(Entity* this) { + V1FireProjectile_Actions[this->action](this); } void sub_080AB2DC(Entity* this) { @@ -36,7 +34,7 @@ void sub_080AB2DC(Entity* this) { } } -void sub_080AB318(Entity* this) { +void V1FireProjectile_Init(Entity* this) { s32 iVar2; u32 rnd; u32 x; @@ -75,7 +73,7 @@ void sub_080AB318(Entity* this) { this->direction = sub_080045B4(this, x, y); } -void sub_080AB414(Entity* this) { +void V1FireProjectile_Action1(Entity* this) { GetNextFrame(this); sub_0806F69C(this); if (sub_08003FC4(this, 0) == 0) { @@ -90,7 +88,7 @@ void sub_080AB414(Entity* this) { } } -void sub_080AB45C(Entity* this) { +void V1FireProjectile_Action2(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { this->action = 3; @@ -99,7 +97,7 @@ void sub_080AB45C(Entity* this) { } } -void sub_080AB488(Entity* this) { +void V1FireProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteThisEntity(); @@ -124,5 +122,24 @@ void sub_080AB4A4(Entity* this) { } s8* sub_080AB4F8(Entity* this) { - return &gUnk_0812A4EC[this->type << 5 | this->field_0xf << 1]; + return (s8*)&gUnk_0812A4EC[this->type << 5 | this->field_0xf << 1]; } + +void (*const V1FireProjectile_Functions[])(Entity*) = { + V1FireProjectile_OnTick, sub_080AB2DC, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const V1FireProjectile_Actions[])(Entity*) = { + V1FireProjectile_Init, + V1FireProjectile_Action1, + V1FireProjectile_Action2, + V1FireProjectile_Action3, +}; +const s8 gUnk_0812A4EC[] = { 16, 0, 64, -48, 80, -32, 80, 0, 80, 32, 64, 48, 32, 16, 48, 0, 32, -16, + 80, -64, 80, -64, 32, 0, 48, -32, 64, -16, 64, 16, 48, 32, 16, 16, 64, 16, + 64, 32, 48, 48, 32, 64, 16, 64, 16, 32, 32, 16, 80, 16, 80, 48, 64, 64, + 48, 80, 16, 80, 16, 48, 32, 32, 48, 16, 0, 16, -48, 48, -32, 64, 32, 64, + 48, 48, 80, 80, 0, 80, -80, 80, 0, 32, 64, 64, 48, 80, -48, 80, -64, 64, + -16, 16, 0, 48, 16, 16, -16, 16, -64, 16, -64, 32, -48, 48, -32, 64, -16, 64, + -16, 32, -32, 16, -80, 16, -80, 48, -64, 64, -48, 80, -16, 80, -16, 48, -32, 32, + -48, 16, -16, 0, -64, -48, -80, -32, -80, 0, -80, 32, -64, 48, -32, 16, -48, 0, + -32, -16, -80, -64, -80, -64, -32, 0, -48, -32, -64, -16, -64, 16, -48, 32 }; diff --git a/src/projectile/projectile1F.c b/src/projectile/v2Projectile.c similarity index 73% rename from src/projectile/projectile1F.c rename to src/projectile/v2Projectile.c index 93941e4c..0420790b 100644 --- a/src/projectile/projectile1F.c +++ b/src/projectile/v2Projectile.c @@ -5,8 +5,10 @@ #include "random.h" #include "audio.h" -extern void (*const gUnk_0812A7D4[])(Entity*); - +extern void (*const V2Projectile_Functions[])(Entity*); +extern void (*const gUnk_0812A7EC[])(Entity*); +extern void (*const gUnk_0812A7F8[])(Entity*); +extern void (*const gUnk_0812A800[])(Entity*); extern void (*const gUnk_0812A808[])(Entity*); extern void sub_0800449C(Entity*, u32); @@ -14,13 +16,13 @@ extern void sub_08079D84(void); extern s32 sub_080AF090(Entity*); -void Projectile1F(Entity* this) { - gUnk_0812A7D4[GetNextFunction(this)](this); +void V2Projectile(Entity* this) { + V2Projectile_Functions[GetNextFunction(this)](this); } -ASM_FUNC("asm/non_matching/projectile1F/sub_080ABBA8.inc", void sub_080ABBA8(Entity* this)) +ASM_FUNC("asm/non_matching/v2Projectile/sub_080ABBA8.inc", void sub_080ABBA8(Entity* this)) -ASM_FUNC("asm/non_matching/projectile1F/sub_080ABBF4.inc", void sub_080ABBF4(Entity* this)) +ASM_FUNC("asm/non_matching/v2Projectile/sub_080ABBF4.inc", void sub_080ABBF4(Entity* this)) void sub_080ABC54(Entity* this) { if (sub_0806F520() == 0) { @@ -90,7 +92,7 @@ void sub_080ABD70(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile1F/sub_080ABE04.inc", void sub_080ABE04(Entity* this)) +ASM_FUNC("asm/non_matching/v2Projectile/sub_080ABE04.inc", void sub_080ABE04(Entity* this)) void sub_080ABE88(Entity* this) { if (sub_08003FC4(this, 0x1800) == 0) { @@ -121,3 +123,25 @@ void sub_080ABF04(Entity* this) { sub_0806F69C(this); GetNextFrame(this); } + +void (*const V2Projectile_Functions[])(Entity*) = { + sub_080ABBA8, sub_080ABBF4, DeleteEntity, DeleteEntity, DeleteEntity, sub_080ABC54, +}; +void (*const gUnk_0812A7EC[])(Entity*) = { + sub_080ABCC4, + sub_080ABD44, + sub_080ABD70, +}; +void (*const gUnk_0812A7F8[])(Entity*) = { + sub_080ABE04, + sub_080ABE88, +}; +void (*const gUnk_0812A800[])(Entity*) = { + sub_080ABEA8, + sub_080ABF04, +}; +void (*const gUnk_0812A808[])(Entity*) = { + sub_080ABC84, + nullsub_542, + sub_080ABC90, +}; diff --git a/src/projectile/projectile21.c b/src/projectile/v3ElectricProjectile.c similarity index 52% rename from src/projectile/projectile21.c rename to src/projectile/v3ElectricProjectile.c index d8ac77fc..4d18a8ba 100644 --- a/src/projectile/projectile21.c +++ b/src/projectile/v3ElectricProjectile.c @@ -5,28 +5,30 @@ #include "coord.h" #include "functions.h" -extern void (*const gUnk_0812A954[])(Entity*); - -extern void (*const gUnk_0812A968[])(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); -void Projectile21(Entity* this) { - gUnk_0812A954[GetNextFunction(this)](this); +extern void (*const V3ElectricProjectile_Functions[])(Entity*); +extern void (*const V3ElectricProjectile_Actions[])(Entity*); +extern const u16 gUnk_0812A97C[]; +extern const u8 gUnk_0812A982[]; +extern const u8 gUnk_0812A98A[]; + +void V3ElectricProjectile(Entity* this) { + V3ElectricProjectile_Functions[GetNextFunction(this)](this); } -void sub_080ABFCC(Entity* this) { - gUnk_0812A968[this->action](this); +void V3ElectricProjectile_OnTick(Entity* this) { + V3ElectricProjectile_Actions[this->action](this); } void sub_080ABFE4(Entity* this) { DeleteThisEntity(); } -ASM_FUNC("asm/non_matching/projectile21/sub_080ABFEC.inc", void sub_080ABFEC(Entity* this)) +ASM_FUNC("asm/non_matching/v3ElectricProjectile/sub_080ABFEC.inc", void sub_080ABFEC(Entity* this)) -void sub_080AC074(Entity* this) { +void V3ElectricProjectile_Action1(Entity* this) { if (this->parent->next == NULL) { DeleteThisEntity(); } @@ -52,7 +54,7 @@ void sub_080AC074(Entity* this) { } } -void sub_080AC100(Entity* this) { +void V3ElectricProjectile_Action2(Entity* this) { u8 bVar1; s32 iVar2; u32 uVar3; @@ -75,6 +77,20 @@ void sub_080AC100(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile21/sub_080AC168.inc", void sub_080AC168(Entity* this)) +ASM_FUNC("asm/non_matching/v3ElectricProjectile/sub_080AC168.inc", void sub_080AC168(Entity* this)) -ASM_FUNC("asm/non_matching/projectile21/sub_080AC200.inc", void sub_080AC200(Entity* this)) +ASM_FUNC("asm/non_matching/v3ElectricProjectile/sub_080AC200.inc", void sub_080AC200(Entity* this)) + +void (*const V3ElectricProjectile_Functions[])(Entity*) = { + V3ElectricProjectile_OnTick, sub_080ABFE4, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const V3ElectricProjectile_Actions[])(Entity*) = { + sub_080ABFEC, V3ElectricProjectile_Action1, V3ElectricProjectile_Action2, sub_080AC168, sub_080AC200, +}; +const u16 gUnk_0812A97C[] = { 352, 480, 480 }; +const u8 gUnk_0812A982[] = { + 5, 6, 7, 8, 5, 6, 7, 6, +}; +const u8 gUnk_0812A98A[] = { + 6, 9, 9, 12, 6, 9, 9, 9, 0, 0, +}; diff --git a/src/projectile/projectile20.c b/src/projectile/v3HandProjectile.c similarity index 65% rename from src/projectile/projectile20.c rename to src/projectile/v3HandProjectile.c index 4c97790d..2c4ff6d2 100644 --- a/src/projectile/projectile20.c +++ b/src/projectile/v3HandProjectile.c @@ -3,16 +3,16 @@ #include "player.h" #include "audio.h" -extern void (*const gUnk_0812A84C[])(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); -void Projectile20(Entity* this) { - gUnk_0812A84C[GetNextFunction(this)](this); +extern void (*const V3HandProjectile_Functions[])(Entity*); + +void V3HandProjectile(Entity* this) { + V3HandProjectile_Functions[GetNextFunction(this)](this); } -void sub_080ABF40(Entity* this) { +void V3HandProjectile_OnTick(Entity* this) { if (this->action == 0) { this->action = 1; this->direction = GetFacingDirection(this, &gPlayerEntity); @@ -35,3 +35,7 @@ void sub_080ABF40(Entity* this) { void sub_080ABFA8(Entity* this) { DeleteThisEntity(); } + +void (*const V3HandProjectile_Functions[])(Entity*) = { + V3HandProjectile_OnTick, sub_080ABFA8, DeleteEntity, DeleteEntity, DeleteEntity, +}; diff --git a/src/projectile/v3TennisBallProjectile.c b/src/projectile/v3TennisBallProjectile.c new file mode 100644 index 00000000..82d64a3c --- /dev/null +++ b/src/projectile/v3TennisBallProjectile.c @@ -0,0 +1,73 @@ +#include "entity.h" +#include "enemy.h" +#include "audio.h" +#include "functions.h" + +extern s32 sub_080AF090(Entity*); +extern s32 sub_080A7EB0(Entity*); + +extern void (*const V3TennisBallProjectile_Functions[])(Entity*); +extern void (*const V3TennisBallProjectile_Actions[])(Entity*); + +void sub_080ACB90(Entity*); + +void V3TennisBallProjectile(Entity* this) { + V3TennisBallProjectile_Functions[GetNextFunction(this)](this); +} + +void V3TennisBallProjectile_OnTick(Entity* this) { + V3TennisBallProjectile_Actions[this->action](this); +} + +ASM_FUNC("asm/non_matching/v3TennisBallProjectile/sub_080ACA68.inc", void sub_080ACA68(Entity* this)) + +void V3TennisBallProjectile_Init(Entity* this) { + this->action = 1; + this->direction = 0x10; + this->height.HALF.HI = 0xfffc; + this->attachedEntity = NULL; + InitializeAnimation(this, 7); + SoundReq(SFX_199); +} + +void V3TennisBallProjectile_Action1(Entity* this) { + sub_080AF090(this); + GetNextFrame(this); + if (sub_080A7EB0(this) != 0) { + DeleteThisEntity(); + } +} + +void V3TennisBallProjectile_Action2(Entity* this) { + sub_080AF090(this); + if (this->collisions != 0) { + DeleteThisEntity(); + } + GetNextFrame(this); + sub_080ACB90(this); + if (sub_080A7EB0(this) != 0) { + DeleteThisEntity(); + } +} + +ASM_FUNC("asm/non_matching/v3TennisBallProjectile/sub_080ACB40.inc", void sub_080ACB40(Entity* this)) + +void sub_080ACB90(Entity* this) { + Entity* parent = this->parent; + if ((this->x.HALF.HI == parent->x.HALF.HI) && (this->y.HALF.HI <= parent->y.HALF.HI)) { + parent->field_0xf = 1; + CreateFx(this, 0x1f, 0x40); + EnqueueSFX(SFX_ITEM_GLOVES_KNOCKBACK); + DeleteThisEntity(); + } +} + +void (*const V3TennisBallProjectile_Functions[])(Entity*) = { + V3TennisBallProjectile_OnTick, sub_080ACA68, DeleteEntity, DeleteEntity, DeleteEntity, + V3TennisBallProjectile_OnTick, +}; +void (*const V3TennisBallProjectile_Actions[])(Entity*) = { + V3TennisBallProjectile_Init, + V3TennisBallProjectile_Action1, + V3TennisBallProjectile_Action2, +}; diff --git a/src/projectile/projectile7.c b/src/projectile/windProjectile.c similarity index 78% rename from src/projectile/projectile7.c rename to src/projectile/windProjectile.c index 9d59e7eb..92308f75 100644 --- a/src/projectile/projectile7.c +++ b/src/projectile/windProjectile.c @@ -3,20 +3,20 @@ #include "functions.h" #include "audio.h" -extern void (*const gUnk_0812979C[])(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); -void Projectile7(Entity* this) { +extern void (*const WindProjectile_Actions[])(Entity*); + +void WindProjectile(Entity* this) { if (GetNextFunction(this) != 0) { DeleteThisEntity(); } - gUnk_0812979C[this->action](this); + WindProjectile_Actions[this->action](this); } -void sub_080A8A90(Entity* this) { +void WindProjectile_Init(Entity* this) { if (this->type == 0) { this->action = 1; InitializeAnimation(this, this->direction >> 3); @@ -27,11 +27,9 @@ void sub_080A8A90(Entity* this) { } } -void sub_080A8AC8(Entity* this) { +void WindProjectile_Action1(Entity* this) { u32 direction; - Entity* parent; - - parent = this->parent; + Entity* parent = this->parent; if (parent == NULL) { DeleteEntity(this); } else { @@ -59,7 +57,7 @@ void sub_080A8AC8(Entity* this) { } } -void sub_080A8B38(Entity* this) { +void WindProjectile_Action2(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) != 0) { if (sub_080A7EB0(this) != 0) { @@ -74,9 +72,16 @@ void sub_080A8B38(Entity* this) { } } -void sub_080A8B78(Entity* this) { +void WindProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteEntity(this); } } + +void (*const WindProjectile_Actions[])(Entity*) = { + WindProjectile_Init, + WindProjectile_Action1, + WindProjectile_Action2, + WindProjectile_Action3, +}; diff --git a/src/projectile/projectile1D.c b/src/projectile/winder.c similarity index 60% rename from src/projectile/projectile1D.c rename to src/projectile/winder.c index c6dfe87f..19e35248 100644 --- a/src/projectile/projectile1D.c +++ b/src/projectile/winder.c @@ -3,15 +3,18 @@ #include "functions.h" #include "utils.h" -extern void (*const gUnk_0812A6B4[])(Entity*); +extern void (*const Winder_Actions[])(Entity*); +extern const u8 gUnk_0812A6BC[]; +extern const u8 gUnk_0812A6C4[]; + void sub_080AB9DC(Entity*); -void Projectile1D(Entity* this) { - gUnk_0812A6B4[this->action](this); +void Winder(Entity* this) { + Winder_Actions[this->action](this); sub_080AB9DC(this); } -void sub_080AB8E8(Entity* this) { +void Winder_Init(Entity* this) { Entity* entity; u16* puVar3; s32 index; @@ -25,7 +28,7 @@ void sub_080AB8E8(Entity* this) { } InitializeAnimation(this, 0); if (this->type < 4) { - entity = sub_080A7EE0(0x1d); + entity = CreateProjectile(0x1d); entity->type = this->type + 1; entity->parent = this->parent; entity->attachedEntity = this; @@ -41,7 +44,7 @@ void sub_080AB8E8(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile1D/sub_080AB950.inc", void sub_080AB950(Entity* this)) +ASM_FUNC("asm/non_matching/winder/sub_080AB950.inc", void sub_080AB950(Entity* this)) void sub_080AB9DC(Entity* this) { MemCopy(&this->field_0x6c, &this->field_0x68, 0x1c); @@ -49,4 +52,15 @@ void sub_080AB9DC(Entity* this) { this->field_0x86.HWORD = this->y.HALF.HI; } -ASM_FUNC("asm/non_matching/projectile1D/sub_080AB9FC.inc", void sub_080AB9FC(Entity* this)) +ASM_FUNC("asm/non_matching/winder/sub_080AB9FC.inc", void sub_080AB9FC(Entity* this)) + +void (*const Winder_Actions[])(Entity*) = { + Winder_Init, + sub_080AB950, +}; +const u8 gUnk_0812A6BC[] = { + 8, 24, 0, 16, 8, 24, 0, 16, +}; +const u8 gUnk_0812A6C4[] = { + 14, 0, 0, 224, 224, 0, 0, 14, +};