From 38b21f63fea66576d0a369e2f981836d65614b25 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 7 Mar 2022 21:42:07 +0100 Subject: [PATCH] Decompile most of FrozenOctorok --- .../frozenOctorok/FrozenOctorok_Action1.inc | 267 ++++ .../FrozenOctorok_Action1SubAction5.inc | 122 ++ .../frozenOctorok/FrozenOctorok_Init.inc | 236 ++++ .../frozenOctorok/sub_0809CBE4.inc | 40 + asm/object/object90.s | 41 - asm/object/object91.s | 1129 ----------------- asm/vram.s | 1083 ---------------- assets/assets.json | 15 - data/const/object/object90.s | 9 - data/const/object/object91.s | 28 - include/enemy/octorokBoss.h | 22 +- include/object.h | 4 +- linker.ld | 8 +- src/enemy/octorokBoss.c | 16 +- src/object.c | 2 +- src/object/frozenOctorok.c | 280 ++++ src/object/frozenWaterElement.c | 2 +- src/object/object90.c | 31 + 18 files changed, 1003 insertions(+), 2332 deletions(-) create mode 100644 asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc create mode 100644 asm/non_matching/frozenOctorok/FrozenOctorok_Action1SubAction5.inc create mode 100644 asm/non_matching/frozenOctorok/FrozenOctorok_Init.inc create mode 100644 asm/non_matching/frozenOctorok/sub_0809CBE4.inc delete mode 100644 asm/object/object90.s delete mode 100644 asm/object/object91.s delete mode 100644 asm/vram.s delete mode 100644 data/const/object/object90.s delete mode 100644 data/const/object/object91.s create mode 100644 src/object/frozenOctorok.c create mode 100644 src/object/object90.c diff --git a/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc b/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc new file mode 100644 index 00000000..a764d5b5 --- /dev/null +++ b/asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc @@ -0,0 +1,267 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + ldrb r0, [r5, #0xa] + cmp r0, #7 + bls _0809C5D0 + b _0809C7DE +_0809C5D0: + lsls r0, r0, #2 + ldr r1, _0809C5DC @ =_0809C5E0 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0809C5DC: .4byte _0809C5E0 +_0809C5E0: @ jump table + .4byte _0809C738 @ case 0 + .4byte _0809C600 @ case 1 + .4byte _0809C600 @ case 2 + .4byte _0809C600 @ case 3 + .4byte _0809C600 @ case 4 + .4byte _0809C6B8 @ case 5 + .4byte _0809C7B4 @ case 6 + .4byte _0809C7D2 @ case 7 +_0809C600: + ldr r0, [r5, #0x50] + adds r1, r5, #0 + bl SortEntityBelow + ldr r0, [r5, #0x50] + ldrb r0, [r0, #0xd] + adds r6, r5, #0 + adds r6, #0x84 + cmp r0, #6 + bne _0809C630 + movs r0, #0xf + ldrsb r0, [r5, r0] + cmp r0, #0 + bge _0809C624 + ldr r0, [r6] + ldrb r0, [r0] + rsbs r0, r0, #0 + b _0809C628 +_0809C624: + ldr r0, [r6] + ldrb r0, [r0] +_0809C628: + strb r0, [r5, #0xf] + adds r0, r5, #0 + bl sub_0809CBE4 +_0809C630: + ldr r4, [r5, #0x50] + adds r0, r4, #0 + adds r0, #0x76 + ldrh r1, [r0] + movs r0, #0x80 + lsls r0, r0, #9 + bl __divsi3 + adds r3, r0, #0 + lsls r0, r3, #0xd + lsrs r3, r0, #8 + ldr r0, _0809C660 @ =0xFFFFE000 + adds r3, r3, r0 + ldr r0, [r6] + ldr r0, [r0, #8] + adds r0, #0x45 + ldrb r0, [r0] + cmp r0, #1 + bne _0809C664 + movs r1, #0x88 + lsls r1, r1, #6 + adds r3, r3, r1 + b _0809C66C + .align 2, 0 +_0809C660: .4byte 0xFFFFE000 +_0809C664: + lsrs r0, r3, #1 + movs r1, #0x88 + lsls r1, r1, #6 + adds r3, r0, r1 +_0809C66C: + adds r2, r4, #0 + adds r2, #0x7b + ldr r1, _0809C6B0 @ =gUnk_08123E18 + ldrb r0, [r5, #0xa] + subs r0, #1 + adds r0, r0, r1 + ldrb r0, [r0] + ldrb r2, [r2] + adds r0, r0, r2 + rsbs r0, r0, #0 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 + adds r0, r5, #0 + adds r2, r3, #0 + bl sub_0809CB70 + ldr r2, [r5, #0x50] + adds r2, #0x7b + ldr r1, _0809C6B4 @ =gUnk_08123E1C + ldrb r0, [r5, #0xa] + subs r0, #1 + adds r0, r0, r1 + ldrb r1, [r0] + ldrb r2, [r2] + adds r1, r1, r2 + adds r0, r5, #0 + adds r0, #0x79 + ldrb r0, [r0] + adds r0, r0, r1 + adds r1, r5, #0 + adds r1, #0x7b + strb r0, [r1] + b _0809C7BC + .align 2, 0 +_0809C6B0: .4byte gUnk_08123E18 +_0809C6B4: .4byte gUnk_08123E1C +_0809C6B8: + ldr r0, [r5, #0x50] + adds r1, r5, #0 + bl SortEntityBelow + ldr r0, [r5, #0x50] + ldrb r0, [r0, #0xd] + adds r6, r5, #0 + adds r6, #0x79 + adds r7, r5, #0 + adds r7, #0x76 + cmp r0, #4 + beq _0809C6F6 + adds r0, r5, #0 + adds r0, #0x45 + ldrb r0, [r0] + cmp r0, #1 + beq _0809C6F6 + ldrb r0, [r6] + cmp r0, #0x1c + bls _0809C6E4 + subs r0, #1 + strb r0, [r6] +_0809C6E4: + ldrh r0, [r7] + movs r1, #0x80 + lsls r1, r1, #1 + cmp r0, r1 + bls _0809C6F4 + subs r0, #1 + strh r0, [r7] + b _0809C6F6 +_0809C6F4: + strh r1, [r7] +_0809C6F6: + ldr r4, [r5, #0x50] + adds r0, r4, #0 + adds r0, #0x74 + ldrh r1, [r0] + movs r0, #0x80 + lsls r0, r0, #9 + bl __divsi3 + adds r3, r0, #0 + ldrb r0, [r6] + lsls r0, r0, #8 + muls r0, r3, r0 + lsrs r3, r0, #8 + adds r4, #0x7b + ldrb r0, [r4] + adds r0, #0x80 + rsbs r0, r0, #0 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 + adds r0, r5, #0 + adds r2, r3, #0 + bl sub_0809CB70 + ldr r0, [r5, #0x50] + adds r0, #0x7b + ldrb r0, [r0] + adds r1, r5, #0 + adds r1, #0x7b + strb r0, [r1] + ldrh r1, [r7] + adds r0, r5, #0 + adds r0, #0x74 + b _0809C7C4 +_0809C738: + movs r0, #0x37 + bl CheckFlags + cmp r0, #0 + beq _0809C74A + adds r0, r5, #0 + movs r1, #0x1e + bl RequestPriorityDuration +_0809C74A: + ldr r1, _0809C7A8 @ =FrozenOctorok_Action1SubActions + ldrb r0, [r5, #0xd] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + adds r0, r5, #0 + bl _call_via_r1 + ldrb r0, [r5, #0xf] + cmp r0, #0 + beq _0809C7BC + ldr r0, _0809C7AC @ =gRoomTransition + ldr r0, [r0] + movs r1, #7 + ands r0, r1 + cmp r0, #0 + bne _0809C772 + ldr r0, [r5, #0x54] + bl CreateSparkle +_0809C772: + adds r3, r5, #0 + adds r3, #0x7e + ldrh r0, [r3] + cmp r0, #0 + beq _0809C7BC + ldr r2, [r5, #0x54] + movs r1, #0 + ldrsh r0, [r3, r1] + ldr r1, [r2, #0x20] + subs r1, r1, r0 + str r1, [r2, #0x20] + ldr r0, [r2, #0x34] + adds r0, r0, r1 + str r0, [r2, #0x34] + ldr r0, [r5, #0x54] + ldr r1, [r0, #0x20] + movs r0, #0xc0 + lsls r0, r0, #6 + cmp r1, r0 + beq _0809C7A0 + ldr r0, _0809C7B0 @ =0xFFFFD000 + cmp r1, r0 + bne _0809C7BC +_0809C7A0: + ldrh r0, [r3] + rsbs r0, r0, #0 + strh r0, [r3] + b _0809C7BC + .align 2, 0 +_0809C7A8: .4byte FrozenOctorok_Action1SubActions +_0809C7AC: .4byte gRoomTransition +_0809C7B0: .4byte 0xFFFFD000 +_0809C7B4: + ldr r0, [r5, #0x50] + adds r1, r5, #0 + bl CopyPosition +_0809C7BC: + adds r0, r5, #0 + adds r0, #0x76 + ldrh r1, [r0] + subs r0, #2 +_0809C7C4: + ldrh r2, [r0] + adds r0, #6 + ldrh r3, [r0] + adds r0, r5, #0 + bl sub_0805EC9C + b _0809C7DE +_0809C7D2: + ldr r0, _0809C7E0 @ =gRoomControls + ldr r0, [r0, #0x30] + cmp r0, r5 + beq _0809C7DE + bl DeleteThisEntity +_0809C7DE: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0809C7E0: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/frozenOctorok/FrozenOctorok_Action1SubAction5.inc b/asm/non_matching/frozenOctorok/FrozenOctorok_Action1SubAction5.inc new file mode 100644 index 00000000..b5be2bc9 --- /dev/null +++ b/asm/non_matching/frozenOctorok/FrozenOctorok_Action1SubAction5.inc @@ -0,0 +1,122 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldr r0, _0809CA04 @ =gRoomTransition + ldr r1, [r0] + movs r2, #2 + ands r1, r2 + adds r7, r0, #0 + cmp r1, #0 + beq _0809CA08 + adds r2, r4, #0 + adds r2, #0x84 + ldr r0, [r2] + ldr r1, [r0, #8] + adds r1, #0x76 + ldrh r0, [r1] + subs r0, #8 + b _0809CA16 + .align 2, 0 +_0809CA04: .4byte gRoomTransition +_0809CA08: + adds r2, r4, #0 + adds r2, #0x84 + ldr r0, [r2] + ldr r1, [r0, #8] + adds r1, #0x76 + ldrh r0, [r1] + adds r0, #8 +_0809CA16: + strh r0, [r1] + adds r5, r2, #0 + ldr r0, [r7] + movs r6, #3 + ands r0, r6 + cmp r0, #0 + bne _0809CA30 + adds r0, r4, #0 + movs r1, #0x87 + movs r2, #2 + movs r3, #0 + bl CreateObjectWithParent +_0809CA30: + adds r2, r4, #0 + adds r2, #0x79 + ldrb r0, [r2] + adds r1, r0, #0 + cmp r1, #0 + bne _0809CA92 + ldr r0, [r4, #0x54] + adds r0, #0x62 + strb r1, [r0] + ldr r0, [r4, #0x54] + movs r1, #0x80 + lsls r1, r1, #2 + adds r2, #2 + ldrb r2, [r2] + rsbs r2, r2, #0 + bl LinearMoveAngle + ldr r1, [r4, #0x54] + adds r0, r4, #0 + movs r2, #0x48 + bl sub_0806FC80 + cmp r0, #0 + beq _0809CAC4 + movs r0, #6 + strb r0, [r4, #0xd] + movs r1, #0 + movs r0, #0xc0 + strh r0, [r4, #0x24] + strb r1, [r4, #0xb] + strb r1, [r4, #0xf] + ldr r2, [r4, #0x54] + ldrb r1, [r2, #0x18] + subs r0, #0xc4 + ands r0, r1 + strb r0, [r2, #0x18] + ldr r0, [r5] + ldr r0, [r0, #8] + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r0] + ldr r1, [r5] + movs r0, #1 + strb r0, [r1] + movs r0, #0xed + bl SoundReq + b _0809CAC4 +_0809CA92: + subs r0, #1 + strb r0, [r2] + ldr r0, [r7] + ands r0, r6 + cmp r0, #1 + beq _0809CAB4 + cmp r0, #1 + blo _0809CAAC + cmp r0, #2 + beq _0809CAAC + cmp r0, #3 + beq _0809CABC + b _0809CAC4 +_0809CAAC: + ldr r0, [r4, #0x54] + adds r0, #0x62 + movs r1, #0 + b _0809CAC2 +_0809CAB4: + ldr r0, [r4, #0x54] + adds r0, #0x62 + movs r1, #0xfc + b _0809CAC2 +_0809CABC: + ldr r0, [r4, #0x54] + adds r0, #0x62 + movs r1, #4 +_0809CAC2: + strb r1, [r0] +_0809CAC4: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/frozenOctorok/FrozenOctorok_Init.inc b/asm/non_matching/frozenOctorok/FrozenOctorok_Init.inc new file mode 100644 index 00000000..07fe19c3 --- /dev/null +++ b/asm/non_matching/frozenOctorok/FrozenOctorok_Init.inc @@ -0,0 +1,236 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r4, r0, #0 + movs r0, #1 + strb r0, [r4, #0xc] + ldrb r0, [r4, #0xa] + cmp r0, #7 + bls _0809C400 + b _0809C5A4 +_0809C400: + lsls r0, r0, #2 + ldr r1, _0809C40C @ =_0809C410 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0809C40C: .4byte _0809C410 +_0809C410: @ jump table + .4byte _0809C430 @ case 0 + .4byte _0809C53E @ case 1 + .4byte _0809C53E @ case 2 + .4byte _0809C53E @ case 3 + .4byte _0809C53E @ case 4 + .4byte _0809C586 @ case 5 + .4byte _0809C440 @ case 6 + .4byte _0809C5BA @ case 7 +_0809C430: + adds r0, r4, #0 + movs r1, #6 + bl SetDefaultPriority + adds r1, r4, #0 + adds r1, #0x7e + movs r0, #0 + strh r0, [r1] +_0809C440: + movs r0, #1 + strb r0, [r4, #0xe] + movs r0, #0x10 + strb r0, [r4, #0x15] + adds r1, r4, #0 + adds r1, #0x79 + movs r0, #0xf0 + strb r0, [r1] + ldr r1, _0809C4B4 @ =gRoomControls + movs r2, #0x84 + lsls r2, r2, #1 + adds r0, r2, #0 + ldrh r2, [r1, #6] + adds r0, r0, r2 + strh r0, [r4, #0x2e] + movs r2, #0xb4 + lsls r2, r2, #1 + adds r0, r2, #0 + ldrh r1, [r1, #8] + adds r0, r0, r1 + strh r0, [r4, #0x32] + ldrb r0, [r4, #0x19] + movs r1, #3 + orrs r0, r1 + strb r0, [r4, #0x19] + adds r0, r4, #0 + adds r0, #0x76 + movs r1, #0xa0 + strh r1, [r0] + subs r0, #2 + strh r1, [r0] + adds r1, r4, #0 + adds r1, #0x7b + movs r0, #0x80 + strb r0, [r1] + ldrb r0, [r4, #0xa] + cmp r0, #0 + bne _0809C52E + subs r1, #0x19 + movs r0, #0x29 + strb r0, [r1] + adds r1, #1 + movs r0, #0xe0 + strb r0, [r1] + movs r0, #0x30 + bl zMalloc + adds r2, r0, #0 + adds r0, r4, #0 + adds r0, #0x84 + str r2, [r0] + mov r8, r0 + cmp r2, #0 + bne _0809C4B8 + bl DeleteThisEntity + b _0809C5BA + .align 2, 0 +_0809C4B4: .4byte gRoomControls +_0809C4B8: + str r2, [r4, #0x64] + mov r0, r8 + ldr r1, [r0] + movs r0, #5 + strb r0, [r1, #1] + movs r5, #0 + mov r7, r8 +_0809C4C6: + adds r6, r5, #1 + adds r0, r4, #0 + movs r1, #0x91 + adds r2, r6, #0 + movs r3, #0 + bl CreateObjectWithParent + str r0, [r4, #0x54] + cmp r0, #0 + beq _0809C4EE + adds r1, r0, #0 + adds r1, #0x84 + ldr r0, [r7] + str r0, [r1] + ldr r1, [r7] + lsls r0, r5, #2 + adds r1, #0x20 + adds r1, r1, r0 + ldr r0, [r4, #0x54] + str r0, [r1] +_0809C4EE: + adds r5, r6, #0 + cmp r5, #3 + bls _0809C4C6 + adds r0, r4, #0 + movs r1, #0x91 + movs r2, #5 + movs r3, #0 + bl CreateObjectWithParent + str r0, [r4, #0x54] + cmp r0, #0 + beq _0809C510 + adds r1, r0, #0 + adds r1, #0x84 + mov r2, r8 + ldr r0, [r2] + str r0, [r1] +_0809C510: + adds r0, r4, #0 + movs r1, #0x91 + movs r2, #6 + movs r3, #0 + bl CreateObjectWithParent + str r0, [r4, #0x50] + cmp r0, #0 + beq _0809C5A4 + adds r1, r0, #0 + adds r1, #0x84 + mov r2, r8 + ldr r0, [r2] + str r0, [r1] + b _0809C5A4 +_0809C52E: + adds r1, r4, #0 + adds r1, #0x62 + movs r0, #0xd7 + strb r0, [r1] + adds r1, #1 + movs r0, #0xe0 + strb r0, [r1] + b _0809C5A4 +_0809C53E: + movs r1, #0 + movs r0, #0x10 + strb r0, [r4, #0xe] + adds r0, r4, #0 + adds r0, #0x79 + strb r1, [r0] + ldrb r1, [r4, #0xa] + movs r2, #2 + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _0809C55A + strb r2, [r4, #0xf] + b _0809C55E +_0809C55A: + movs r0, #0xfe + strb r0, [r4, #0xf] +_0809C55E: + adds r0, r4, #0 + adds r0, #0x74 + movs r2, #0x80 + lsls r2, r2, #1 + strh r2, [r0] + ldrb r1, [r4, #0xa] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _0809C57E + adds r1, r4, #0 + adds r1, #0x76 + movs r0, #0xff + lsls r0, r0, #8 + strh r0, [r1] + b _0809C5A4 +_0809C57E: + adds r0, r4, #0 + adds r0, #0x76 + strh r2, [r0] + b _0809C5A4 +_0809C586: + adds r0, r4, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r0] + subs r0, #2 + strh r1, [r0] + adds r1, r4, #0 + adds r1, #0x79 + movs r0, #0x1c + strb r0, [r1] + adds r0, r4, #0 + adds r0, #0x84 + ldr r0, [r0] + str r4, [r0, #8] +_0809C5A4: + ldr r0, _0809C5C0 @ =gUnk_08123DDC + ldrb r1, [r4, #0xa] + lsls r1, r1, #2 + adds r1, r1, r0 + ldrb r1, [r1] + adds r0, r4, #0 + bl InitializeAnimation + adds r0, r4, #0 + bl FrozenOctorok_Action1 +_0809C5BA: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0809C5C0: .4byte gUnk_08123DDC + .syntax divided diff --git a/asm/non_matching/frozenOctorok/sub_0809CBE4.inc b/asm/non_matching/frozenOctorok/sub_0809CBE4.inc new file mode 100644 index 00000000..eac592d4 --- /dev/null +++ b/asm/non_matching/frozenOctorok/sub_0809CBE4.inc @@ -0,0 +1,40 @@ + .syntax unified + push {r4, lr} + adds r2, r0, #0 + adds r3, r2, #0 + adds r3, #0x79 + ldrb r0, [r2, #0xf] + ldrb r4, [r3] + adds r1, r0, r4 + strb r1, [r3] + ldrb r4, [r2, #0xf] + movs r0, #0xf + ldrsb r0, [r2, r0] + cmp r0, #0 + bge _0809CC16 + ldrb r0, [r2, #0xe] + lsls r1, r1, #0x18 + lsls r0, r0, #0x18 + cmn r1, r0 + bge _0809CC2C + rsbs r0, r4, #0 + strb r0, [r2, #0xf] + movs r0, #0xcf + lsls r0, r0, #1 + bl SoundReq + b _0809CC2C +_0809CC16: + movs r0, #0 + ldrsb r0, [r3, r0] + ldrb r1, [r2, #0xe] + cmp r0, r1 + ble _0809CC2C + rsbs r0, r4, #0 + strb r0, [r2, #0xf] + movs r0, #0xcf + lsls r0, r0, #1 + bl SoundReq +_0809CC2C: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/object/object90.s b/asm/object/object90.s deleted file mode 100644 index 277942fc..00000000 --- a/asm/object/object90.s +++ /dev/null @@ -1,41 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object90 -Object90: @ 0x0809C394 - push {lr} - ldr r2, _0809C3A8 @ =gUnk_08123DCC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809C3A8: .4byte gUnk_08123DCC - - thumb_func_start sub_0809C3AC -sub_0809C3AC: @ 0x0809C3AC - movs r2, #0 - movs r1, #1 - strb r1, [r0, #0xc] - strb r2, [r0, #0x1e] - adds r0, #0x29 - ldrb r2, [r0] - subs r1, #9 - ands r1, r2 - movs r2, #5 - orrs r1, r2 - strb r1, [r0] - bx lr - - thumb_func_start nullsub_536 -nullsub_536: @ 0x0809C3C4 - bx lr - .align 2, 0 diff --git a/asm/object/object91.s b/asm/object/object91.s deleted file mode 100644 index f4fed50e..00000000 --- a/asm/object/object91.s +++ /dev/null @@ -1,1129 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object91 -Object91: @ 0x0809C3C8 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0809C3E8 @ =gUnk_08123DD4 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldrb r0, [r4, #0x19] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r4, #0x19] - pop {r4, pc} - .align 2, 0 -_0809C3E8: .4byte gUnk_08123DD4 - - thumb_func_start sub_0809C3EC -sub_0809C3EC: @ 0x0809C3EC - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - cmp r0, #7 - bls _0809C400 - b _0809C5A4 -_0809C400: - lsls r0, r0, #2 - ldr r1, _0809C40C @ =_0809C410 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809C40C: .4byte _0809C410 -_0809C410: @ jump table - .4byte _0809C430 @ case 0 - .4byte _0809C53E @ case 1 - .4byte _0809C53E @ case 2 - .4byte _0809C53E @ case 3 - .4byte _0809C53E @ case 4 - .4byte _0809C586 @ case 5 - .4byte _0809C440 @ case 6 - .4byte _0809C5BA @ case 7 -_0809C430: - adds r0, r4, #0 - movs r1, #6 - bl SetDefaultPriority - adds r1, r4, #0 - adds r1, #0x7e - movs r0, #0 - strh r0, [r1] -_0809C440: - movs r0, #1 - strb r0, [r4, #0xe] - movs r0, #0x10 - strb r0, [r4, #0x15] - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #0xf0 - strb r0, [r1] - ldr r1, _0809C4B4 @ =gRoomControls - movs r2, #0x84 - lsls r2, r2, #1 - adds r0, r2, #0 - ldrh r2, [r1, #6] - adds r0, r0, r2 - strh r0, [r4, #0x2e] - movs r2, #0xb4 - lsls r2, r2, #1 - adds r0, r2, #0 - ldrh r1, [r1, #8] - adds r0, r0, r1 - strh r0, [r4, #0x32] - ldrb r0, [r4, #0x19] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - adds r0, #0x76 - movs r1, #0xa0 - strh r1, [r0] - subs r0, #2 - strh r1, [r0] - adds r1, r4, #0 - adds r1, #0x7b - movs r0, #0x80 - strb r0, [r1] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0809C52E - subs r1, #0x19 - movs r0, #0x29 - strb r0, [r1] - adds r1, #1 - movs r0, #0xe0 - strb r0, [r1] - movs r0, #0x30 - bl zMalloc - adds r2, r0, #0 - adds r0, r4, #0 - adds r0, #0x84 - str r2, [r0] - mov r8, r0 - cmp r2, #0 - bne _0809C4B8 - bl DeleteThisEntity - b _0809C5BA - .align 2, 0 -_0809C4B4: .4byte gRoomControls -_0809C4B8: - str r2, [r4, #0x64] - mov r0, r8 - ldr r1, [r0] - movs r0, #5 - strb r0, [r1, #1] - movs r5, #0 - mov r7, r8 -_0809C4C6: - adds r6, r5, #1 - adds r0, r4, #0 - movs r1, #0x91 - adds r2, r6, #0 - movs r3, #0 - bl CreateObjectWithParent - str r0, [r4, #0x54] - cmp r0, #0 - beq _0809C4EE - adds r1, r0, #0 - adds r1, #0x84 - ldr r0, [r7] - str r0, [r1] - ldr r1, [r7] - lsls r0, r5, #2 - adds r1, #0x20 - adds r1, r1, r0 - ldr r0, [r4, #0x54] - str r0, [r1] -_0809C4EE: - adds r5, r6, #0 - cmp r5, #3 - bls _0809C4C6 - adds r0, r4, #0 - movs r1, #0x91 - movs r2, #5 - movs r3, #0 - bl CreateObjectWithParent - str r0, [r4, #0x54] - cmp r0, #0 - beq _0809C510 - adds r1, r0, #0 - adds r1, #0x84 - mov r2, r8 - ldr r0, [r2] - str r0, [r1] -_0809C510: - adds r0, r4, #0 - movs r1, #0x91 - movs r2, #6 - movs r3, #0 - bl CreateObjectWithParent - str r0, [r4, #0x50] - cmp r0, #0 - beq _0809C5A4 - adds r1, r0, #0 - adds r1, #0x84 - mov r2, r8 - ldr r0, [r2] - str r0, [r1] - b _0809C5A4 -_0809C52E: - adds r1, r4, #0 - adds r1, #0x62 - movs r0, #0xd7 - strb r0, [r1] - adds r1, #1 - movs r0, #0xe0 - strb r0, [r1] - b _0809C5A4 -_0809C53E: - movs r1, #0 - movs r0, #0x10 - strb r0, [r4, #0xe] - adds r0, r4, #0 - adds r0, #0x79 - strb r1, [r0] - ldrb r1, [r4, #0xa] - movs r2, #2 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - bne _0809C55A - strb r2, [r4, #0xf] - b _0809C55E -_0809C55A: - movs r0, #0xfe - strb r0, [r4, #0xf] -_0809C55E: - adds r0, r4, #0 - adds r0, #0x74 - movs r2, #0x80 - lsls r2, r2, #1 - strh r2, [r0] - ldrb r1, [r4, #0xa] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _0809C57E - adds r1, r4, #0 - adds r1, #0x76 - movs r0, #0xff - lsls r0, r0, #8 - strh r0, [r1] - b _0809C5A4 -_0809C57E: - adds r0, r4, #0 - adds r0, #0x76 - strh r2, [r0] - b _0809C5A4 -_0809C586: - adds r0, r4, #0 - adds r0, #0x76 - movs r1, #0x80 - lsls r1, r1, #1 - strh r1, [r0] - subs r0, #2 - strh r1, [r0] - adds r1, r4, #0 - adds r1, #0x79 - movs r0, #0x1c - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - str r4, [r0, #8] -_0809C5A4: - ldr r0, _0809C5C0 @ =gUnk_08123DDC - ldrb r1, [r4, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r1, [r1] - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0809C5C4 -_0809C5BA: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809C5C0: .4byte gUnk_08123DDC - - thumb_func_start sub_0809C5C4 -sub_0809C5C4: @ 0x0809C5C4 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xa] - cmp r0, #7 - bls _0809C5D0 - b _0809C7DE -_0809C5D0: - lsls r0, r0, #2 - ldr r1, _0809C5DC @ =_0809C5E0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809C5DC: .4byte _0809C5E0 -_0809C5E0: @ jump table - .4byte _0809C738 @ case 0 - .4byte _0809C600 @ case 1 - .4byte _0809C600 @ case 2 - .4byte _0809C600 @ case 3 - .4byte _0809C600 @ case 4 - .4byte _0809C6B8 @ case 5 - .4byte _0809C7B4 @ case 6 - .4byte _0809C7D2 @ case 7 -_0809C600: - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl SortEntityBelow - ldr r0, [r5, #0x50] - ldrb r0, [r0, #0xd] - adds r6, r5, #0 - adds r6, #0x84 - cmp r0, #6 - bne _0809C630 - movs r0, #0xf - ldrsb r0, [r5, r0] - cmp r0, #0 - bge _0809C624 - ldr r0, [r6] - ldrb r0, [r0] - rsbs r0, r0, #0 - b _0809C628 -_0809C624: - ldr r0, [r6] - ldrb r0, [r0] -_0809C628: - strb r0, [r5, #0xf] - adds r0, r5, #0 - bl sub_0809CBE4 -_0809C630: - ldr r4, [r5, #0x50] - adds r0, r4, #0 - adds r0, #0x76 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #9 - bl __divsi3 - adds r3, r0, #0 - lsls r0, r3, #0xd - lsrs r3, r0, #8 - ldr r0, _0809C660 @ =0xFFFFE000 - adds r3, r3, r0 - ldr r0, [r6] - ldr r0, [r0, #8] - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #1 - bne _0809C664 - movs r1, #0x88 - lsls r1, r1, #6 - adds r3, r3, r1 - b _0809C66C - .align 2, 0 -_0809C660: .4byte 0xFFFFE000 -_0809C664: - lsrs r0, r3, #1 - movs r1, #0x88 - lsls r1, r1, #6 - adds r3, r0, r1 -_0809C66C: - adds r2, r4, #0 - adds r2, #0x7b - ldr r1, _0809C6B0 @ =gUnk_08123E18 - ldrb r0, [r5, #0xa] - subs r0, #1 - adds r0, r0, r1 - ldrb r0, [r0] - ldrb r2, [r2] - adds r0, r0, r2 - rsbs r0, r0, #0 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - adds r0, r5, #0 - adds r2, r3, #0 - bl sub_0809CB70 - ldr r2, [r5, #0x50] - adds r2, #0x7b - ldr r1, _0809C6B4 @ =gUnk_08123E1C - ldrb r0, [r5, #0xa] - subs r0, #1 - adds r0, r0, r1 - ldrb r1, [r0] - ldrb r2, [r2] - adds r1, r1, r2 - adds r0, r5, #0 - adds r0, #0x79 - ldrb r0, [r0] - adds r0, r0, r1 - adds r1, r5, #0 - adds r1, #0x7b - strb r0, [r1] - b _0809C7BC - .align 2, 0 -_0809C6B0: .4byte gUnk_08123E18 -_0809C6B4: .4byte gUnk_08123E1C -_0809C6B8: - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl SortEntityBelow - ldr r0, [r5, #0x50] - ldrb r0, [r0, #0xd] - adds r6, r5, #0 - adds r6, #0x79 - adds r7, r5, #0 - adds r7, #0x76 - cmp r0, #4 - beq _0809C6F6 - adds r0, r5, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #1 - beq _0809C6F6 - ldrb r0, [r6] - cmp r0, #0x1c - bls _0809C6E4 - subs r0, #1 - strb r0, [r6] -_0809C6E4: - ldrh r0, [r7] - movs r1, #0x80 - lsls r1, r1, #1 - cmp r0, r1 - bls _0809C6F4 - subs r0, #1 - strh r0, [r7] - b _0809C6F6 -_0809C6F4: - strh r1, [r7] -_0809C6F6: - ldr r4, [r5, #0x50] - adds r0, r4, #0 - adds r0, #0x74 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #9 - bl __divsi3 - adds r3, r0, #0 - ldrb r0, [r6] - lsls r0, r0, #8 - muls r0, r3, r0 - lsrs r3, r0, #8 - adds r4, #0x7b - ldrb r0, [r4] - adds r0, #0x80 - rsbs r0, r0, #0 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - adds r0, r5, #0 - adds r2, r3, #0 - bl sub_0809CB70 - ldr r0, [r5, #0x50] - adds r0, #0x7b - ldrb r0, [r0] - adds r1, r5, #0 - adds r1, #0x7b - strb r0, [r1] - ldrh r1, [r7] - adds r0, r5, #0 - adds r0, #0x74 - b _0809C7C4 -_0809C738: - movs r0, #0x37 - bl CheckFlags - cmp r0, #0 - beq _0809C74A - adds r0, r5, #0 - movs r1, #0x1e - bl RequestPriorityDuration -_0809C74A: - ldr r1, _0809C7A8 @ =gUnk_08123DF8 - ldrb r0, [r5, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - ldrb r0, [r5, #0xf] - cmp r0, #0 - beq _0809C7BC - ldr r0, _0809C7AC @ =gRoomTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _0809C772 - ldr r0, [r5, #0x54] - bl CreateSparkle -_0809C772: - adds r3, r5, #0 - adds r3, #0x7e - ldrh r0, [r3] - cmp r0, #0 - beq _0809C7BC - ldr r2, [r5, #0x54] - movs r1, #0 - ldrsh r0, [r3, r1] - ldr r1, [r2, #0x20] - subs r1, r1, r0 - str r1, [r2, #0x20] - ldr r0, [r2, #0x34] - adds r0, r0, r1 - str r0, [r2, #0x34] - ldr r0, [r5, #0x54] - ldr r1, [r0, #0x20] - movs r0, #0xc0 - lsls r0, r0, #6 - cmp r1, r0 - beq _0809C7A0 - ldr r0, _0809C7B0 @ =0xFFFFD000 - cmp r1, r0 - bne _0809C7BC -_0809C7A0: - ldrh r0, [r3] - rsbs r0, r0, #0 - strh r0, [r3] - b _0809C7BC - .align 2, 0 -_0809C7A8: .4byte gUnk_08123DF8 -_0809C7AC: .4byte gRoomTransition -_0809C7B0: .4byte 0xFFFFD000 -_0809C7B4: - ldr r0, [r5, #0x50] - adds r1, r5, #0 - bl CopyPosition -_0809C7BC: - adds r0, r5, #0 - adds r0, #0x76 - ldrh r1, [r0] - subs r0, #2 -_0809C7C4: - ldrh r2, [r0] - adds r0, #6 - ldrh r3, [r0] - adds r0, r5, #0 - bl sub_0805EC9C - b _0809C7DE -_0809C7D2: - ldr r0, _0809C7E0 @ =gRoomControls - ldr r0, [r0, #0x30] - cmp r0, r5 - beq _0809C7DE - bl DeleteThisEntity -_0809C7DE: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809C7E0: .4byte gRoomControls - - thumb_func_start sub_0809C7E4 -sub_0809C7E4: @ 0x0809C7E4 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xf] - cmp r0, #0 - beq _0809C84A - adds r3, r5, #0 - adds r3, #0x7e - ldrh r0, [r3] - cmp r0, #0 - bne _0809C82A - ldr r2, [r5, #0x54] - movs r0, #0x36 - ldrsh r1, [r2, r0] - movs r0, #0x10 - rsbs r0, r0, #0 - cmp r1, r0 - ble _0809C814 - ldr r0, [r2, #0x34] - ldr r1, _0809C810 @ =0xFFFFC000 - adds r0, r0, r1 - str r0, [r2, #0x34] - b _0809C82A - .align 2, 0 -_0809C810: .4byte 0xFFFFC000 -_0809C814: - ldr r0, [r2, #0x34] - ldr r1, _0809C84C @ =0xFFFFF000 - adds r0, r0, r1 - str r0, [r2, #0x34] - ldr r1, [r5, #0x54] - movs r0, #0xc0 - lsls r0, r0, #6 - str r0, [r1, #0x20] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r3] -_0809C82A: - adds r4, r5, #0 - adds r4, #0x79 - ldrb r0, [r4] - subs r0, #1 - strb r0, [r4] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _0809C84A - ldr r0, _0809C850 @ =0x00000B43 - bl MessageFromTarget - movs r0, #1 - strb r0, [r5, #0xd] - movs r0, #8 - strb r0, [r4] -_0809C84A: - pop {r4, r5, pc} - .align 2, 0 -_0809C84C: .4byte 0xFFFFF000 -_0809C850: .4byte 0x00000B43 - - thumb_func_start sub_0809C854 -sub_0809C854: @ 0x0809C854 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _0809C8A8 @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _0809C8B8 - adds r5, r4, #0 - adds r5, #0x79 - ldrb r0, [r5] - subs r0, #1 - strb r0, [r5] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _0809C8B8 - adds r0, r4, #0 - movs r1, #0x91 - movs r2, #7 - movs r3, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - cmp r1, #0 - beq _0809C892 - ldrh r0, [r1, #0x32] - subs r0, #0x50 - strh r0, [r1, #0x32] - ldr r0, _0809C8AC @ =gRoomControls - str r1, [r0, #0x30] -_0809C892: - ldrb r0, [r4, #0xf] - cmp r0, #2 - bhi _0809C8B0 - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x1e - strb r0, [r5] - movs r0, #0xe6 - bl SoundReq - b _0809C8B8 - .align 2, 0 -_0809C8A8: .4byte gMessage -_0809C8AC: .4byte gRoomControls -_0809C8B0: - movs r0, #3 - strb r0, [r4, #0xd] - movs r0, #0x78 - strb r0, [r5] -_0809C8B8: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0809C8BC -sub_0809C8BC: @ 0x0809C8BC - push {lr} - adds r2, r0, #0 - adds r3, r2, #0 - adds r3, #0x79 - ldrb r0, [r3] - subs r1, r0, #1 - strb r1, [r3] - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _0809C8E2 - movs r0, #1 - strb r0, [r2, #0xd] - movs r0, #0x1e - strb r0, [r3] - ldrb r0, [r2, #0xf] - adds r0, #1 - strb r0, [r2, #0xf] - b _0809C922 -_0809C8E2: - movs r0, #3 - ands r0, r1 - cmp r0, #1 - beq _0809C90A - cmp r0, #1 - bgt _0809C8F4 - cmp r0, #0 - beq _0809C8FE - b _0809C922 -_0809C8F4: - cmp r0, #2 - beq _0809C8FE - cmp r0, #3 - beq _0809C916 - b _0809C922 -_0809C8FE: - ldrh r1, [r2, #0x2e] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - adds r0, #8 - b _0809C920 -_0809C90A: - ldrh r1, [r2, #0x2e] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - adds r0, #4 - b _0809C920 -_0809C916: - ldrh r1, [r2, #0x2e] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - subs r0, #4 -_0809C920: - strh r0, [r2, #0x2e] -_0809C922: - pop {pc} - - thumb_func_start sub_0809C924 -sub_0809C924: @ 0x0809C924 - push {r4, r5, lr} - adds r5, r0, #0 - adds r1, r5, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - beq _0809C948 - adds r0, r5, #0 - movs r1, #0x87 - movs r2, #6 - movs r3, #0 - bl CreateObjectWithParent - b _0809C980 -_0809C948: - movs r0, #4 - strb r0, [r5, #0xd] - movs r0, #0x3c - strb r0, [r1] - ldr r4, _0809C984 @ =0x00000115 - adds r0, r5, #0 - adds r1, r4, #0 - bl LoadFixedGFX - ldr r0, [r5, #0x50] - adds r1, r4, #0 - bl LoadFixedGFX - adds r0, r5, #0 - movs r1, #0xef - bl ChangeObjPalette - ldr r0, [r5, #0x50] - movs r1, #0xef - bl ChangeObjPalette - adds r0, r5, #0 - movs r1, #0xef - bl sub_0809CC30 - movs r0, #0xe8 - bl SoundReq -_0809C980: - pop {r4, r5, pc} - .align 2, 0 -_0809C984: .4byte 0x00000115 - - thumb_func_start sub_0809C988 -sub_0809C988: @ 0x0809C988 - push {lr} - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x79 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _0809C9AC - movs r0, #5 - strb r0, [r2, #0xd] - movs r0, #0xb4 - strb r0, [r1] - movs r0, #3 - strb r0, [r2, #0xb] - b _0809C9DC -_0809C9AC: - ldr r0, _0809C9C8 @ =gRoomTransition - ldr r0, [r0] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0809C9CC - adds r0, r2, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r1, [r0, #8] - adds r1, #0x76 - ldrh r0, [r1] - subs r0, #4 - b _0809C9DA - .align 2, 0 -_0809C9C8: .4byte gRoomTransition -_0809C9CC: - adds r0, r2, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r1, [r0, #8] - adds r1, #0x76 - ldrh r0, [r1] - adds r0, #4 -_0809C9DA: - strh r0, [r1] -_0809C9DC: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0809C9E0 -sub_0809C9E0: @ 0x0809C9E0 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldr r0, _0809CA04 @ =gRoomTransition - ldr r1, [r0] - movs r2, #2 - ands r1, r2 - adds r7, r0, #0 - cmp r1, #0 - beq _0809CA08 - adds r2, r4, #0 - adds r2, #0x84 - ldr r0, [r2] - ldr r1, [r0, #8] - adds r1, #0x76 - ldrh r0, [r1] - subs r0, #8 - b _0809CA16 - .align 2, 0 -_0809CA04: .4byte gRoomTransition -_0809CA08: - adds r2, r4, #0 - adds r2, #0x84 - ldr r0, [r2] - ldr r1, [r0, #8] - adds r1, #0x76 - ldrh r0, [r1] - adds r0, #8 -_0809CA16: - strh r0, [r1] - adds r5, r2, #0 - ldr r0, [r7] - movs r6, #3 - ands r0, r6 - cmp r0, #0 - bne _0809CA30 - adds r0, r4, #0 - movs r1, #0x87 - movs r2, #2 - movs r3, #0 - bl CreateObjectWithParent -_0809CA30: - adds r2, r4, #0 - adds r2, #0x79 - ldrb r0, [r2] - adds r1, r0, #0 - cmp r1, #0 - bne _0809CA92 - ldr r0, [r4, #0x54] - adds r0, #0x62 - strb r1, [r0] - ldr r0, [r4, #0x54] - movs r1, #0x80 - lsls r1, r1, #2 - adds r2, #2 - ldrb r2, [r2] - rsbs r2, r2, #0 - bl LinearMoveAngle - ldr r1, [r4, #0x54] - adds r0, r4, #0 - movs r2, #0x48 - bl sub_0806FC80 - cmp r0, #0 - beq _0809CAC4 - movs r0, #6 - strb r0, [r4, #0xd] - movs r1, #0 - movs r0, #0xc0 - strh r0, [r4, #0x24] - strb r1, [r4, #0xb] - strb r1, [r4, #0xf] - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x18] - subs r0, #0xc4 - ands r0, r1 - strb r0, [r2, #0x18] - ldr r0, [r5] - ldr r0, [r0, #8] - adds r0, #0x76 - movs r1, #0x80 - lsls r1, r1, #1 - strh r1, [r0] - ldr r1, [r5] - movs r0, #1 - strb r0, [r1] - movs r0, #0xed - bl SoundReq - b _0809CAC4 -_0809CA92: - subs r0, #1 - strb r0, [r2] - ldr r0, [r7] - ands r0, r6 - cmp r0, #1 - beq _0809CAB4 - cmp r0, #1 - blo _0809CAAC - cmp r0, #2 - beq _0809CAAC - cmp r0, #3 - beq _0809CABC - b _0809CAC4 -_0809CAAC: - ldr r0, [r4, #0x54] - adds r0, #0x62 - movs r1, #0 - b _0809CAC2 -_0809CAB4: - ldr r0, [r4, #0x54] - adds r0, #0x62 - movs r1, #0xfc - b _0809CAC2 -_0809CABC: - ldr r0, [r4, #0x54] - adds r0, #0x62 - movs r1, #4 -_0809CAC2: - strb r1, [r0] -_0809CAC4: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0809CAC8 -sub_0809CAC8: @ 0x0809CAC8 - push {r4, r5, lr} - adds r5, r0, #0 - bl LinearMoveUpdate - ldr r2, _0809CB3C @ =gRoomControls - ldrh r0, [r2, #8] - movs r1, #0xe4 - lsls r1, r1, #1 - adds r0, r0, r1 - movs r3, #0x32 - ldrsh r1, [r5, r3] - cmp r0, r1 - bge _0809CB26 - movs r0, #4 - strb r0, [r2, #0xe] - ldr r0, _0809CB40 @ =gPlayerEntity - str r0, [r2, #0x30] - movs r0, #0x9b - bl SetLocalFlag - ldr r0, [r5, #0x50] - bl DeleteEntity - adds r4, r5, #0 - adds r4, #0x84 - ldr r0, [r4] - ldr r0, [r0, #8] - bl DeleteEntity - ldr r0, [r4] - ldr r0, [r0, #0x20] - bl DeleteEntity - ldr r0, [r4] - ldr r0, [r0, #0x24] - bl DeleteEntity - ldr r0, [r4] - ldr r0, [r0, #0x28] - bl DeleteEntity - ldr r0, [r4] - ldr r0, [r0, #0x2c] - bl DeleteEntity - movs r0, #7 - strb r0, [r5, #0xd] -_0809CB26: - ldr r0, _0809CB44 @ =gRoomTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _0809CB38 - ldr r0, _0809CB48 @ =0x00000163 - bl SoundReq -_0809CB38: - pop {r4, r5, pc} - .align 2, 0 -_0809CB3C: .4byte gRoomControls -_0809CB40: .4byte gPlayerEntity -_0809CB44: .4byte gRoomTransition -_0809CB48: .4byte 0x00000163 - - thumb_func_start sub_0809CB4C -sub_0809CB4C: @ 0x0809CB4C - push {lr} - ldr r0, _0809CB68 @ =gRoomControls - ldrb r1, [r0, #0xf] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _0809CB66 - ldr r0, _0809CB6C @ =0x00000B44 - movs r1, #0 - bl CreateEzloHint - bl DeleteThisEntity -_0809CB66: - pop {pc} - .align 2, 0 -_0809CB68: .4byte gRoomControls -_0809CB6C: .4byte 0x00000B44 - - thumb_func_start sub_0809CB70 -sub_0809CB70: @ 0x0809CB70 - push {r4, r5, r6, lr} - mov r6, sb - mov r5, r8 - push {r5, r6} - adds r6, r0, #0 - adds r4, r1, #0 - adds r5, r2, #0 - ldr r0, _0809CBE0 @ =gSineTable - mov sb, r0 - lsls r0, r4, #1 - add r0, sb - movs r1, #0 - ldrsh r0, [r0, r1] - lsls r5, r5, #0x10 - asrs r5, r5, #0x10 - adds r1, r5, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #1 - mov r8, r1 - bl FixedDiv - ldr r1, [r6, #0x50] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r1, #0x2c] - adds r1, r1, r0 - str r1, [r6, #0x2c] - adds r4, #0x40 - lsls r4, r4, #1 - add r4, sb - movs r1, #0 - ldrsh r0, [r4, r1] - adds r1, r5, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - mov r1, r8 - bl FixedDiv - ldr r2, [r6, #0x50] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r2, #0x30] - subs r1, r1, r0 - str r1, [r6, #0x30] - ldr r0, [r2, #0x34] - str r0, [r6, #0x34] - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, pc} - .align 2, 0 -_0809CBE0: .4byte gSineTable - - thumb_func_start sub_0809CBE4 -sub_0809CBE4: @ 0x0809CBE4 - push {r4, lr} - adds r2, r0, #0 - adds r3, r2, #0 - adds r3, #0x79 - ldrb r0, [r2, #0xf] - ldrb r4, [r3] - adds r1, r0, r4 - strb r1, [r3] - ldrb r4, [r2, #0xf] - movs r0, #0xf - ldrsb r0, [r2, r0] - cmp r0, #0 - bge _0809CC16 - ldrb r0, [r2, #0xe] - lsls r1, r1, #0x18 - lsls r0, r0, #0x18 - cmn r1, r0 - bge _0809CC2C - rsbs r0, r4, #0 - strb r0, [r2, #0xf] - movs r0, #0xcf - lsls r0, r0, #1 - bl SoundReq - b _0809CC2C -_0809CC16: - movs r0, #0 - ldrsb r0, [r3, r0] - ldrb r1, [r2, #0xe] - cmp r0, r1 - ble _0809CC2C - rsbs r0, r4, #0 - strb r0, [r2, #0xf] - movs r0, #0xcf - lsls r0, r0, #1 - bl SoundReq -_0809CC2C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0809CC30 -sub_0809CC30: @ 0x0809CC30 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r1, #0 - adds r4, #0x84 - ldr r0, [r4] - ldr r0, [r0, #8] - bl ChangeObjPalette - movs r5, #0 -_0809CC42: - ldr r0, [r4] - lsls r1, r5, #2 - adds r0, #0x20 - adds r0, r0, r1 - ldr r0, [r0] - adds r1, r6, #0 - bl ChangeObjPalette - adds r5, #1 - cmp r5, #3 - bls _0809CC42 - pop {r4, r5, r6, pc} - .align 2, 0 diff --git a/asm/vram.s b/asm/vram.s deleted file mode 100644 index 31e20355..00000000 --- a/asm/vram.s +++ /dev/null @@ -1,1083 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ResetPalettes -ResetPalettes: @ 0x080ADD30 - push {r4, r5, r6, lr} - ldr r4, _080ADD6C @ =gGFXSlots - movs r1, #0x85 - lsls r1, r1, #2 - adds r0, r4, #0 - bl MemClear - movs r5, #0 - adds r4, #4 - movs r0, #0x10 - rsbs r0, r0, #0 - adds r6, r0, #0 -_080ADD48: - adds r0, r5, #0 - movs r1, #0 - movs r2, #1 - bl ReserveGFXSlots - ldrb r0, [r4] - ands r0, r6 - movs r1, #6 - orrs r0, r1 - strb r0, [r4] - movs r0, #0x80 - strb r0, [r4, #2] - adds r4, #0xc - adds r5, #1 - cmp r5, #3 - bls _080ADD48 - pop {r4, r5, r6, pc} - .align 2, 0 -_080ADD6C: .4byte gGFXSlots - - thumb_func_start sub_080ADD70 -sub_080ADD70: @ 0x080ADD70 -.ifdef EU - push {r4, r5, lr} - ldr r0, _080AD540 @ =gGFXSlots - ldrb r0, [r0] - cmp r0, #0 - beq _080AD56A - movs r4, #0 - movs r5, #0 -_080AD522: - ldr r0, _080AD544 @ =gUnk_02024494 - adds r2, r5, r0 - ldrb r1, [r2] - lsls r0, r1, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #2 - bne _080AD548 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r3, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2] - b _080AD562 - .align 2, 0 -_080AD540: .4byte gGFXSlots -_080AD544: .4byte gUnk_02024494 -_080AD548: - cmp r0, #2 - blt _080AD562 - cmp r0, #6 - bgt _080AD562 - cmp r0, #4 - blt _080AD562 - movs r0, #0xf0 - ands r0, r1 - cmp r0, #0x30 - bne _080AD562 - adds r0, r4, #0 - bl sub_080ADE74 -_080AD562: - adds r5, #0xc - adds r4, #1 - cmp r4, #0x2b - bls _080AD522 -_080AD56A: - pop {r4, r5, pc} - -.else - push {r4, r5, lr} - ldr r1, _080ADD88 @ =gGFXSlots - ldrb r0, [r1] - cmp r0, #0 - beq _080ADDD6 - ldrb r0, [r1, #3] - cmp r0, #0 - beq _080ADD8C - bl sub_080ADE24 - b _080ADDD6 - .align 2, 0 -_080ADD88: .4byte gGFXSlots -_080ADD8C: - movs r4, #0 - movs r5, #0 -_080ADD90: - ldr r0, _080ADDB0 @ =gUnk_02024494 - adds r2, r5, r0 - ldrb r1, [r2] - lsls r0, r1, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #2 - bne _080ADDB4 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r3, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2] - b _080ADDCE - .align 2, 0 -_080ADDB0: .4byte gUnk_02024494 -_080ADDB4: - cmp r0, #2 - blt _080ADDCE - cmp r0, #6 - bgt _080ADDCE - cmp r0, #4 - blt _080ADDCE - movs r0, #0xf0 - ands r0, r1 - cmp r0, #0x30 - bne _080ADDCE - adds r0, r4, #0 - bl sub_080ADE74 -_080ADDCE: - adds r5, #0xc - adds r4, #1 - cmp r4, #0x2b - bls _080ADD90 -_080ADDD6: - pop {r4, r5, pc} -.endif - - thumb_func_start sub_080ADDD8 -sub_080ADDD8: @ 0x080ADDD8 - push {lr} - adds r2, r1, #0 - lsls r1, r0, #1 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _080ADDFC @ =gUnk_02024494 - adds r3, r1, r0 - ldr r0, _080ADE00 @ =0x00FFFFFC - ands r0, r2 - ldr r1, _080ADE04 @ =gGlobalGfxAndPalettes - adds r0, r0, r1 - str r0, [r3, #8] - movs r0, #1 - ands r0, r2 - cmp r0, #0 - beq _080ADE0C - ldr r0, _080ADE08 @ =0x0000FFFF - b _080ADE14 - .align 2, 0 -_080ADDFC: .4byte gUnk_02024494 -_080ADE00: .4byte 0x00FFFFFC -_080ADE04: .4byte gGlobalGfxAndPalettes -_080ADE08: .4byte 0x0000FFFF -_080ADE0C: - movs r0, #0xfe - lsls r0, r0, #0x17 - ands r0, r2 - lsrs r0, r0, #0x14 -_080ADE14: - strh r0, [r3, #6] - ldrb r0, [r3] - movs r1, #0xf - ands r1, r0 - movs r0, #0x30 - orrs r1, r0 - strb r1, [r3] - pop {pc} - - thumb_func_start sub_080ADE24 -sub_080ADE24: @ 0x080ADE24 - push {r4, r5, lr} - ldr r1, _080ADE50 @ =gGFXSlots - movs r0, #1 - strb r0, [r1, #3] - movs r4, #0 - movs r5, #0 -_080ADE30: - ldr r0, _080ADE54 @ =gUnk_02024494 - adds r1, r5, r0 - ldrb r0, [r1] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #3 - beq _080ADE60 - cmp r0, #3 - blt _080ADE58 - cmp r0, #6 - bgt _080ADE58 - adds r0, r4, #0 - bl sub_080ADE74 - b _080ADE60 - .align 2, 0 -_080ADE50: .4byte gGFXSlots -_080ADE54: .4byte gUnk_02024494 -_080ADE58: - adds r0, r1, #0 - movs r1, #0xc - bl MemClear -_080ADE60: - adds r5, #0xc - adds r4, #1 - cmp r4, #0x2b - bls _080ADE30 - movs r1, #0 - ldr r0, _080ADE70 @ =gGFXSlots - strb r1, [r0, #3] - pop {r4, r5, pc} - .align 2, 0 -_080ADE70: .4byte gGFXSlots - - thumb_func_start sub_080ADE74 -sub_080ADE74: @ 0x080ADE74 - push {r4, r5, r6, lr} - adds r2, r0, #0 - lsls r0, r2, #1 - adds r0, r0, r2 - lsls r0, r0, #2 - ldr r1, _080ADF00 @ =gUnk_02024494 - adds r3, r0, r1 - ldrb r1, [r3] - movs r0, #0xf0 - ands r0, r1 - cmp r0, #0 - beq _080ADF7C - movs r0, #0xf - ands r0, r1 - movs r1, #0x10 - orrs r0, r1 - strb r0, [r3] - ldrh r1, [r3, #6] - ldr r0, _080ADF04 @ =0x0000FFFF - cmp r1, r0 - beq _080ADF18 - ldrb r0, [r3, #3] - cmp r0, #0 - beq _080ADF18 - lsls r0, r0, #6 - ldr r1, _080ADF08 @ =gUnk_020000C0 - adds r4, r0, r1 - movs r5, #4 - movs r6, #9 - rsbs r6, r6, #0 -_080ADEB0: - ldrb r1, [r4] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - beq _080ADEF6 - ldr r0, _080ADF0C @ =gGFXSlots - ldrb r0, [r0, #3] - cmp r0, #0 - bne _080ADECA - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _080ADEF6 -_080ADECA: - adds r0, r6, #0 - ands r0, r1 - strb r0, [r4] - ldrb r0, [r4, #9] - lsls r2, r0, #5 - cmp r2, #0 - beq _080ADEF6 - ldrh r0, [r4, #0xa] - lsls r0, r0, #5 - ldr r3, _080ADF10 @ =0x06010000 - adds r1, r0, r3 - ldr r3, _080ADF14 @ =0x040000D4 - ldr r0, [r4, #0xc] - str r0, [r3] - str r1, [r3, #4] - adds r0, r2, #0 - asrs r0, r0, #2 - movs r1, #0x84 - lsls r1, r1, #0x18 - orrs r0, r1 - str r0, [r3, #8] - ldr r0, [r3, #8] -_080ADEF6: - adds r4, #0x10 - subs r5, #1 - cmp r5, #0 - bgt _080ADEB0 - b _080ADF7C - .align 2, 0 -_080ADF00: .4byte gUnk_02024494 -_080ADF04: .4byte 0x0000FFFF -_080ADF08: .4byte gUnk_020000C0 -_080ADF0C: .4byte gGFXSlots -_080ADF10: .4byte 0x06010000 -_080ADF14: .4byte 0x040000D4 -_080ADF18: - lsls r0, r2, #9 - ldr r2, _080ADF4C @ =0x06012800 - adds r1, r0, r2 - ldrh r2, [r3, #6] - cmp r2, #0 - beq _080ADF58 - ldr r0, _080ADF50 @ =0x0000FFFF - cmp r2, r0 - beq _080ADF62 - ldr r2, _080ADF54 @ =0x040000D4 - ldr r0, [r3, #8] - str r0, [r2] - str r1, [r2, #4] - ldrh r0, [r3, #6] - lsls r0, r0, #3 - movs r1, #0x84 - lsls r1, r1, #0x18 - orrs r0, r1 - str r0, [r2, #8] - ldr r0, [r2, #8] - ldrh r2, [r3, #6] - subs r2, #0x10 - cmp r2, #0 - ble _080ADF7C - b _080ADF70 - .align 2, 0 -_080ADF4C: .4byte 0x06012800 -_080ADF50: .4byte 0x0000FFFF -_080ADF54: .4byte 0x040000D4 -_080ADF58: - ldrb r1, [r3] - movs r0, #0xf - ands r0, r1 - strb r0, [r3] - b _080ADF7C -_080ADF62: - ldrb r0, [r3, #3] - cmp r0, #0 - bne _080ADF7C - ldr r0, [r3, #8] - bl LZ77UnCompVram - b _080ADF7C -_080ADF70: - adds r3, #0xc - movs r0, #0 - strh r0, [r3, #6] - subs r2, #0x10 - cmp r2, #0 - bgt _080ADF70 -_080ADF7C: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start LoadFixedGFX -LoadFixedGFX: @ 0x080ADF80 -.ifdef EU - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r5, r1, #0 - cmp r5, #0 - bne _080AD726 - movs r0, #1 - b _080AD77E -_080AD726: - movs r4, #4 - ldr r0, _080AD774 @ =gGFXSlots - adds r0, #0x30 -_080AD72C: - ldrh r1, [r0, #8] - cmp r5, r1 - beq _080AD766 - adds r0, #0xc - adds r4, #1 - cmp r4, #0x2b - bls _080AD72C - ldr r0, _080AD778 @ =gFixedTypeGfxData - lsls r1, r5, #2 - adds r1, r1, r0 - ldr r7, [r1] - movs r0, #0xfe - lsls r0, r0, #0x17 - ands r0, r7 - lsrs r6, r0, #0x18 - adds r0, r6, #0 - bl FindFreeGFXSlots - adds r4, r0, #0 - cmp r4, #0 - beq _080AD77C - adds r1, r5, #0 - adds r2, r6, #0 - bl ReserveGFXSlots - adds r0, r4, #0 - adds r1, r7, #0 - bl sub_080ADDD8 -_080AD766: - adds r0, r4, #0 - mov r1, r8 - movs r2, #4 - bl sub_080AE0C8 - movs r0, #1 - b _080AD77E - .align 2, 0 -_080AD774: .4byte gGFXSlots -_080AD778: .4byte gFixedTypeGfxData -_080AD77C: - movs r0, #0 -_080AD77E: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - -.else - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r7, r1, #0 - cmp r7, #0 - beq _080ADFFC - movs r5, #4 - ldr r0, _080ADFD4 @ =gGFXSlots - adds r0, #0x30 -_080ADF94: - ldrh r1, [r0, #8] - cmp r7, r1 - beq _080ADFF2 - adds r0, #0xc - adds r5, #1 - cmp r5, #0x2b - bls _080ADF94 - ldr r0, _080ADFD8 @ =gFixedTypeGfxData - lsls r4, r7, #2 - adds r0, r4, r0 - ldr r0, [r0] - movs r1, #0xfe - lsls r1, r1, #0x17 - ands r0, r1 - lsrs r6, r0, #0x18 - adds r0, r6, #0 - bl FindFreeGFXSlots - adds r5, r0, #0 - cmp r5, #0 - bne _080ADFDC - bl CleanUpGFXSlots - adds r0, r6, #0 - bl FindFreeGFXSlots - adds r5, r0, #0 - cmp r5, #0 - bne _080ADFDC - movs r0, #0 - b _080ADFFE - .align 2, 0 -_080ADFD4: .4byte gGFXSlots -_080ADFD8: .4byte gFixedTypeGfxData -_080ADFDC: - adds r0, r5, #0 - adds r1, r7, #0 - adds r2, r6, #0 - bl ReserveGFXSlots - ldr r0, _080AE004 @ =gFixedTypeGfxData - adds r0, r4, r0 - ldr r1, [r0] - adds r0, r5, #0 - bl sub_080ADDD8 -_080ADFF2: - adds r0, r5, #0 - mov r1, r8 - movs r2, #4 - bl sub_080AE0C8 -_080ADFFC: - movs r0, #1 -_080ADFFE: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080AE004: .4byte gFixedTypeGfxData -.endif - - thumb_func_start LoadSwapGFX -LoadSwapGFX: @ 0x080AE008 -.ifdef EU - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r5, r1, #0 - adds r4, r2, #0 - cmp r4, #0 - bne _080AD79C - adds r0, r5, #0 - bl FindFreeGFXSlots - adds r4, r0, #0 - cmp r4, #0 - beq _080AD7C4 -_080AD79C: - ldr r0, _080AD7D0 @ =gGFXSlots - lsls r1, r4, #1 - adds r1, r1, r4 - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r0, [r1, #4] - lsls r0, r0, #0x1c - lsrs r2, r0, #0x1c - cmp r2, #6 - beq _080AD7BC - adds r0, r4, #0 - movs r1, #0 - adds r2, r5, #0 - bl ReserveGFXSlots - movs r2, #5 -_080AD7BC: - adds r0, r4, #0 - adds r1, r6, #0 - bl sub_080AE0C8 -_080AD7C4: - adds r0, r4, #0 - cmp r0, #0 - beq _080AD7CC - movs r0, #1 -_080AD7CC: - pop {r4, r5, r6, pc} - .align 2, 0 -_080AD7D0: .4byte gGFXSlots - -.else - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r5, r1, #0 - adds r4, r2, #0 - cmp r4, #0 - bne _080AE030 - adds r0, r5, #0 - bl FindFreeGFXSlots - adds r4, r0, #0 - cmp r4, #0 - bne _080AE030 - bl CleanUpGFXSlots - adds r0, r5, #0 - bl FindFreeGFXSlots - adds r4, r0, #0 - cmp r4, #0 - beq _080AE058 -_080AE030: - ldr r0, _080AE064 @ =gGFXSlots - lsls r1, r4, #1 - adds r1, r1, r4 - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r0, [r1, #4] - lsls r0, r0, #0x1c - lsrs r2, r0, #0x1c - cmp r2, #6 - beq _080AE050 - adds r0, r4, #0 - movs r1, #0 - adds r2, r5, #0 - bl ReserveGFXSlots - movs r2, #5 -_080AE050: - adds r0, r4, #0 - adds r1, r6, #0 - bl sub_080AE0C8 -_080AE058: - adds r0, r4, #0 - cmp r0, #0 - beq _080AE060 - movs r0, #1 -_080AE060: - pop {r4, r5, r6, pc} - .align 2, 0 -_080AE064: .4byte gGFXSlots -.endif - - thumb_func_start UnloadGFXSlots -UnloadGFXSlots: @ 0x080AE068 - push {r4, r5, lr} - adds r0, #0x26 - ldrb r2, [r0] - movs r1, #0 - strb r1, [r0] - cmp r2, #0 - beq _080AE0C2 - lsls r0, r2, #1 - adds r0, r0, r2 - lsls r0, r0, #2 - ldr r1, _080AE0C4 @ =gUnk_02024494 - adds r3, r0, r1 - ldrb r0, [r3] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #5 - bgt _080AE0C2 - cmp r0, #4 - blt _080AE0C2 - ldrb r0, [r3, #2] - cmp r0, #0 - beq _080AE0C2 - subs r0, #1 - strb r0, [r3, #2] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080AE0C2 - ldrb r2, [r3, #1] - adds r0, r2, #0 - subs r2, #1 - cmp r0, #0 - ble _080AE0C2 - movs r5, #0x10 - rsbs r5, r5, #0 - movs r4, #1 -_080AE0AE: - ldrb r0, [r3] - adds r1, r5, #0 - ands r1, r0 - orrs r1, r4 - strb r1, [r3] - adds r3, #0xc - adds r0, r2, #0 - subs r2, #1 - cmp r0, #0 - bgt _080AE0AE -_080AE0C2: - pop {r4, r5, pc} - .align 2, 0 -_080AE0C4: .4byte gUnk_02024494 - - thumb_func_start sub_080AE0C8 -sub_080AE0C8: @ 0x080AE0C8 - push {r4, lr} - adds r4, r2, #0 - lsls r2, r0, #4 - movs r3, #0xa0 - lsls r3, r3, #1 - adds r2, r2, r3 - adds r3, r1, #0 - adds r3, #0x60 - strh r2, [r3] - adds r1, #0x26 - strb r0, [r1] - lsls r1, r0, #1 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _080AE100 @ =gUnk_02024494 - adds r1, r1, r0 - ldrb r2, [r1, #2] - movs r0, #2 - ldrsb r0, [r1, r0] - cmp r0, #0 - blt _080AE0F6 - adds r0, r2, #1 - strb r0, [r1, #2] -_080AE0F6: - adds r0, r1, #0 - adds r1, r4, #0 - bl SetGFXSlotStatus - pop {r4, pc} - .align 2, 0 -_080AE100: .4byte gUnk_02024494 - - thumb_func_start ReserveGFXSlots -ReserveGFXSlots: @ 0x080AE104 - push {r4, r5, r6, lr} - adds r6, r1, #0 - adds r5, r2, #0 - lsls r4, r0, #1 - adds r4, r4, r0 - lsls r4, r4, #2 - ldr r0, _080AE130 @ =gUnk_02024494 - adds r4, r4, r0 - lsls r1, r5, #1 - adds r1, r1, r5 - lsls r1, r1, #2 - adds r0, r4, #0 - bl MemClear - strb r5, [r4, #1] - strh r6, [r4, #4] - adds r0, r4, #0 - movs r1, #4 - bl SetGFXSlotStatus - pop {r4, r5, r6, pc} - .align 2, 0 -_080AE130: .4byte gUnk_02024494 - - thumb_func_start SetGFXSlotStatus -SetGFXSlotStatus: @ 0x080AE134 - push {r4, r5, r6, lr} - adds r3, r0, #0 - adds r4, r1, #0 - movs r6, #0xf - adds r0, r4, #0 - ands r0, r6 - ldrb r2, [r3] - movs r5, #0x10 - rsbs r5, r5, #0 - adds r1, r5, #0 - ands r1, r2 - orrs r1, r0 - strb r1, [r3] - ldrb r2, [r3, #1] - cmp r4, #6 - beq _080AE156 - movs r4, #3 -_080AE156: - subs r2, #1 - cmp r2, #0 - ble _080AE170 - ands r4, r6 -_080AE15E: - adds r3, #0xc - ldrb r1, [r3] - adds r0, r5, #0 - ands r0, r1 - orrs r0, r4 - strb r0, [r3] - subs r2, #1 - cmp r2, #0 - bgt _080AE15E -_080AE170: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start FindFreeGFXSlots -FindFreeGFXSlots: @ 0x080AE174 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - movs r2, #4 - ldr r0, _080AE194 @ =gGFXSlots - adds r3, r0, #0 - adds r3, #0x30 -_080AE182: - ldrb r0, [r3, #4] - lsls r0, r0, #0x1c - cmp r0, #0 - bne _080AE198 - adds r1, #1 - cmp r4, r1 - bhi _080AE19A - b _080AE1BC - .align 2, 0 -_080AE194: .4byte gGFXSlots -_080AE198: - movs r1, #0 -_080AE19A: - adds r3, #0xc - adds r2, #1 - cmp r2, #0x2b - bls _080AE182 - movs r1, #0 - movs r2, #4 - ldr r0, _080AE1C4 @ =gGFXSlots - adds r3, r0, #0 - adds r3, #0x30 -_080AE1AC: - ldrb r0, [r3, #4] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #1 -.ifdef EU - bne _080AE1C8 -.else - bhi _080AE1C8 -.endif - adds r1, #1 - cmp r4, r1 - bhi _080AE1CA -_080AE1BC: - subs r0, r2, r1 - adds r0, #1 - b _080AE1D4 - .align 2, 0 -_080AE1C4: .4byte gGFXSlots -_080AE1C8: - movs r1, #0 -_080AE1CA: - adds r3, #0xc - adds r2, #1 - cmp r2, #0x2b - bls _080AE1AC - movs r0, #0 -_080AE1D4: - pop {r4, pc} - .align 2, 0 - -.ifndef EU - thumb_func_start CleanUpGFXSlots -CleanUpGFXSlots: @ 0x080AE1D8 - push {r4, r5, lr} - ldr r0, _080AE1E8 @ =gGFXSlots - ldrb r0, [r0] - cmp r0, #0 - beq _080AE216 - movs r5, #4 - b _080AE20A - .align 2, 0 -_080AE1E8: .4byte gGFXSlots -_080AE1EC: - bl FindFirstFreeGFXSlot - adds r4, r0, #0 - cmp r4, r5 - bhi _080AE208 - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_080AE218 - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_080AE324 - adds r5, r4, #0 -_080AE208: - adds r5, #1 -_080AE20A: - adds r0, r5, #0 - bl FindNextOccupiedGFXSlot - adds r5, r0, #0 - cmp r5, #0 - bne _080AE1EC -_080AE216: - pop {r4, r5, pc} - - thumb_func_start sub_080AE218 -sub_080AE218: @ 0x080AE218 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - mov sl, r0 - mov r8, r1 - lsls r0, r1, #4 - movs r1, #0xa0 - lsls r1, r1, #1 - adds r0, r0, r1 - mov ip, r0 - mov r2, sl - lsls r0, r2, #4 - adds r3, r0, r1 - ldr r1, _080AE30C @ =gGFXSlots - lsls r0, r2, #1 - add r0, sl - lsls r0, r0, #2 - adds r0, r0, r1 - ldrb r0, [r0, #5] - lsls r0, r0, #4 - adds r7, r3, r0 - movs r4, #0 - ldr r6, _080AE310 @ =gUnk_020000C0 - mov sb, r6 - ldr r0, _080AE314 @ =gPlayerEntity - adds r2, r0, #0 - adds r2, #0x26 - adds r5, r0, #0 -_080AE254: - ldr r0, [r5, #4] - cmp r0, #0 - beq _080AE276 - ldrb r0, [r2] - cmp sl, r0 - bne _080AE264 - mov r1, r8 - strb r1, [r2] -_080AE264: - ldrh r0, [r2, #0x3a] - cmp r3, r0 - bhi _080AE276 - cmp r7, r0 - bls _080AE276 - subs r0, r0, r3 - mov r6, ip - adds r1, r0, r6 - strh r1, [r2, #0x3a] -_080AE276: - adds r2, #0x88 - adds r5, #0x88 - adds r4, #1 - cmp r4, #0x4f - bls _080AE254 - movs r0, #0 -_080AE282: - movs r4, #0 - adds r1, r0, #1 - mov r8, r1 - lsls r5, r0, #6 -_080AE28A: - lsls r0, r4, #4 - add r0, sb - adds r2, r5, r0 - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080AE2B4 - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _080AE2B4 - ldrh r1, [r2, #0xa] - cmp r3, r1 - bhi _080AE2B4 - cmp r7, r1 - bls _080AE2B4 - subs r0, r1, r3 - mov r6, ip - adds r1, r0, r6 - strh r1, [r2, #0xa] -_080AE2B4: - adds r4, #1 - cmp r4, #3 - bls _080AE28A - mov r0, r8 - cmp r0, #0x2f - bls _080AE282 - movs r4, #0 - ldr r0, _080AE318 @ =0xFFFFFC00 - mov sl, r0 - ldr r5, _080AE31C @ =gOAMControls - adds r5, #0x24 - ldr r1, _080AE320 @ =0x000003FF - mov sb, r1 - movs r2, #1 - mov r8, r2 -_080AE2D2: - ldrh r2, [r5] - lsls r0, r2, #0x16 - lsrs r1, r0, #0x16 - cmp r3, r1 - bhi _080AE2F8 - cmp r7, r1 - bls _080AE2F8 - subs r0, r1, r3 - mov r6, ip - adds r1, r0, r6 - mov r0, sb - ands r1, r0 - mov r0, sl - ands r0, r2 - orrs r0, r1 - strh r0, [r5] - mov r2, r8 - ldr r1, _080AE31C @ =gOAMControls - strb r2, [r1] -_080AE2F8: - adds r5, #8 - adds r4, #1 - cmp r4, #0x7f - bls _080AE2D2 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080AE30C: .4byte gGFXSlots -_080AE310: .4byte gUnk_020000C0 -_080AE314: .4byte gPlayerEntity -_080AE318: .4byte 0xFFFFFC00 -_080AE31C: .4byte gOAMControls -_080AE320: .4byte 0x000003FF - - thumb_func_start sub_080AE324 -sub_080AE324: @ 0x080AE324 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r3, r1, #0 - ldr r2, _080AE380 @ =gGFXSlots - lsls r1, r0, #1 - adds r1, r1, r0 - lsls r1, r1, #2 - adds r5, r1, r2 - ldrb r4, [r5, #5] - subs r4, #1 - movs r0, #1 - rsbs r0, r0, #0 - cmp r4, r0 - beq _080AE372 - lsls r0, r3, #1 - adds r0, r0, r3 - lsls r0, r0, #2 - adds r0, r0, r2 - mov r8, r0 - adds r0, r1, #4 - adds r6, r0, r2 -_080AE350: - mov r0, r8 - adds r0, #4 - adds r1, r5, #4 - ldm r1!, {r2, r3, r7} - stm r0!, {r2, r3, r7} - adds r0, r6, #0 - movs r1, #0xc - bl MemClear - adds r6, #0xc - adds r5, #0xc - movs r0, #0xc - add r8, r0 - subs r4, #1 - subs r0, #0xd - cmp r4, r0 - bne _080AE350 -_080AE372: - ldr r1, _080AE380 @ =gGFXSlots - movs r0, #1 - strb r0, [r1, #3] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080AE380: .4byte gGFXSlots - - thumb_func_start FindNextOccupiedGFXSlot -FindNextOccupiedGFXSlot: @ 0x080AE384 - push {lr} - adds r2, r0, #0 - cmp r2, #0x2a - bhi _080AE3B4 - ldr r1, _080AE3A8 @ =gGFXSlots - lsls r0, r2, #1 - adds r0, r0, r2 - lsls r0, r0, #2 - adds r1, r0, r1 -_080AE396: - ldrb r0, [r1, #4] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #5 - bgt _080AE3AC - cmp r0, #4 - blt _080AE3AC - adds r0, r2, #0 - b _080AE3B6 - .align 2, 0 -_080AE3A8: .4byte gGFXSlots -_080AE3AC: - adds r1, #0xc - adds r2, #1 - cmp r2, #0x2a - bls _080AE396 -_080AE3B4: - movs r0, #0 -_080AE3B6: - pop {pc} - - thumb_func_start FindFirstFreeGFXSlot -FindFirstFreeGFXSlot: @ 0x080AE3B8 - push {lr} - movs r1, #4 - ldr r0, _080AE3D4 @ =gGFXSlots - adds r2, r0, #0 - adds r2, #0x30 -_080AE3C2: - ldrb r0, [r2, #4] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #1 - bgt _080AE3D8 - cmp r0, #0 - blt _080AE3D8 - adds r0, r1, #0 - b _080AE3E2 - .align 2, 0 -_080AE3D4: .4byte gGFXSlots -_080AE3D8: - adds r2, #0xc - adds r1, #1 - cmp r1, #0x2b - bls _080AE3C2 - movs r0, #0 -_080AE3E2: - pop {pc} -.endif - diff --git a/assets/assets.json b/assets/assets.json index 1b5baf28..1275f250 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -44869,21 +44869,6 @@ "size": 41, "type": "animation" }, - { - "path": "object91/gUnk_08123DDC.bin", - "start": 1195484, - "size": 28 - }, - { - "path": "object91/gUnk_08123E18.bin", - "start": 1195544, - "size": 4 - }, - { - "path": "object91/gUnk_08123E1C.bin", - "start": 1195548, - "size": 4 - }, { "path": "animations/gSpriteAnimations_BakerOven_0.bin", "start": 1195564, diff --git a/data/const/object/object90.s b/data/const/object/object90.s deleted file mode 100644 index 893a15d5..00000000 --- a/data/const/object/object90.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123DCC:: @ 08123DCC - .4byte sub_0809C3AC - .4byte nullsub_536 diff --git a/data/const/object/object91.s b/data/const/object/object91.s deleted file mode 100644 index 329728ac..00000000 --- a/data/const/object/object91.s +++ /dev/null @@ -1,28 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123DD4:: @ 08123DD4 - .4byte sub_0809C3EC - .4byte sub_0809C5C4 - -gUnk_08123DDC:: @ 08123DDC - .incbin "object91/gUnk_08123DDC.bin" - -gUnk_08123DF8:: @ 08123DF8 - .4byte sub_0809C7E4 - .4byte sub_0809C854 - .4byte sub_0809C8BC - .4byte sub_0809C924 - .4byte sub_0809C988 - .4byte sub_0809C9E0 - .4byte sub_0809CAC8 - .4byte sub_0809CB4C - -gUnk_08123E18:: @ 08123E18 - .incbin "object91/gUnk_08123E18.bin" - -gUnk_08123E1C:: @ 08123E1C - .incbin "object91/gUnk_08123E1C.bin" diff --git a/include/enemy/octorokBoss.h b/include/enemy/octorokBoss.h index 2f28ffb3..dcdfa2ca 100644 --- a/include/enemy/octorokBoss.h +++ b/include/enemy/octorokBoss.h @@ -5,17 +5,17 @@ typedef struct OctorokBossEntity OctorokBossEntity; typedef struct { - u8 field_0x0; // [0,1,2,4] is later stored in super->field_0xf - u8 tailCount; - u8 field_0x2; // [0,1] - u8 targetAngle; // relates to this->field_0x7a.HALF.HI - u8 rotation; // [0,1,0xff] - u8 phase4PrevAttackPattern; // [0-4], sets this->phase4AttackPattern - u8 fallingStonesTimer; - u8 field_0x7; // some sort of counter that is only set when hit for the first time? - OctorokBossEntity* mouthObject; - OctorokBossEntity* tailObjects[5]; - OctorokBossEntity* legObjects[4]; + /*0x00*/ u8 unk_0; // [0,1,2,4] is later stored in super->field_0xf + /*0x01*/ u8 tailCount; + /*0x02*/ u8 field_0x2; // [0,1] + /*0x03*/ u8 targetAngle; // relates to this->field_0x7a.HALF.HI + /*0x04*/ u8 rotation; // [0,1,0xff] + /*0x05*/ u8 phase4PrevAttackPattern; // [0-4], sets this->phase4AttackPattern + /*0x06*/ u8 fallingStonesTimer; + /*0x07*/ u8 field_0x7; // some sort of counter that is only set when hit for the first time? + /*0x08*/ OctorokBossEntity* mouthObject; + /*0x0c*/ OctorokBossEntity* tailObjects[5]; + /*0x20*/ OctorokBossEntity* legObjects[4]; } OctorokBossHeap; static_assert(sizeof(OctorokBossHeap) == 0x30); diff --git a/include/object.h b/include/object.h index 9969a39e..740bbeb4 100644 --- a/include/object.h +++ b/include/object.h @@ -175,7 +175,7 @@ typedef enum { OBJECT_8E, FROZEN_WATER_ELEMENT, OBJECT_90, - OBJECT_91, + FROZEN_OCTOROK, BAKER_OVEN, LAMP, WIND_TRIBE_FLAG, @@ -371,7 +371,7 @@ void Fireplace(Entity*); void Object8E(); void FrozenWaterElement(); void Object90(Entity*); -void Object91(Entity*); +void FrozenOctorok(); void BakerOven(Entity*); void Lamp(Entity*); void WindTribeFlag(Entity*); diff --git a/linker.ld b/linker.ld index 6bfd2c96..868956de 100644 --- a/linker.ld +++ b/linker.ld @@ -766,8 +766,8 @@ SECTIONS { src/object/fireplace.o(.text); src/object/object8E.o(.text); src/object/frozenWaterElement.o(.text); - asm/object/object90.o(.text); - asm/object/object91.o(.text); + src/object/object90.o(.text); + src/object/frozenOctorok.o(.text); src/object/bakerOven.o(.text); src/object/lamp.o(.text); src/object/windTribeFlag.o(.text); @@ -1519,8 +1519,8 @@ SECTIONS { data/const/object/fireplace.o(.rodata); src/object/object8E.o(.rodata); src/object/frozenWaterElement.o(.rodata); - data/const/object/object90.o(.rodata); - data/const/object/object91.o(.rodata); + src/object/object90.o(.rodata); + src/object/frozenOctorok.o(.rodata); data/const/object/bakerOven.o(.rodata); data/animations/object/bakerOven.o(.rodata); src/object/lamp.o(.rodata); diff --git a/src/enemy/octorokBoss.c b/src/enemy/octorokBoss.c index de6b829d..b4fbc73a 100644 --- a/src/enemy/octorokBoss.c +++ b/src/enemy/octorokBoss.c @@ -335,7 +335,7 @@ void OctorokBoss_Intro_SubAction0(OctorokBossEntity* this) { if (this->timer-- == 0) { super->subAction = 1; this->angularSpeed.HWORD = 0x100; - this->heap->field_0x0 = 2; + this->heap->unk_0 = 2; } } @@ -344,7 +344,7 @@ void OctorokBoss_Intro_SubAction1(OctorokBossEntity* this) { if (this->angle.HALF.HI == 0x80) { this->timer = 0x3c; super->subAction = 2; - this->heap->field_0x0 = 0; + this->heap->unk_0 = 0; // Octorok scream SoundReq(SFX_159); } else { @@ -457,9 +457,9 @@ void OctorokBoss_Action1(OctorokBossEntity* this) { if (((this->heap->field_0x2 != 0) || (super->parent->action == INTRO)) || (1 < (u8)(super->parent->subAction - 3))) { if ((s8)super->field_0xf < 0) { - super->field_0xf = -this->heap->field_0x0; + super->field_0xf = -this->heap->unk_0; } else { - super->field_0xf = this->heap->field_0x0; + super->field_0xf = this->heap->unk_0; } sub_08036998(this); } @@ -915,7 +915,7 @@ void OctorokBoss_Burning_SubAction0(OctorokBossEntity* this) { super->direction = (u8)(-this->angle.HALF.HI ^ 0x80U) >> 3; this->timer = 0x78; this->angularSpeed.HWORD = 0x180; - this->heap->field_0x0 = 4; + this->heap->unk_0 = 4; sub_080368D8(this); OctorokBoss_Burning_SubAction1(this); } @@ -1085,7 +1085,7 @@ void OctorokBoss_SetAttackTimer(OctorokBossEntity* this) { void OctorokBoss_ResetToSubAction0(OctorokBossEntity* this) { this->angularSpeed.HWORD = 0x100; - this->heap->field_0x0 = 2; + this->heap->unk_0 = 2; this->heap->rotation = NO_ROTATION; super->subAction = ACTION1_AIMTOWARDSPLAYER; } @@ -1105,7 +1105,7 @@ void OctorokBoss_WaitAnotherTurn(OctorokBossEntity* this) { }; super->subAction = ACTION1_WAITFORTURN; super->speed = 0xc0; - this->heap->field_0x0 = 1; + this->heap->unk_0 = 1; this->timer = OctorokBoss_TurnTimeValues[GetRandomByWeight(OctorokBoss_TurnTimeWeights)]; } @@ -1162,7 +1162,7 @@ void OctorokBoss_StartRegularAttack(OctorokBossEntity* this) { super->speed = 0x200; this->timer = 0x3c; super->collisions = 0; - this->heap->field_0x0 = 4; + this->heap->unk_0 = 4; SoundReq(SFX_159); return; } diff --git a/src/object.c b/src/object.c index a2ffb4b8..caddaddc 100644 --- a/src/object.c +++ b/src/object.c @@ -147,7 +147,7 @@ void (*const gObjectFunctions[])(Entity*) = { [OBJECT_8E] = Object8E, [FROZEN_WATER_ELEMENT] = FrozenWaterElement, [OBJECT_90] = Object90, - [OBJECT_91] = Object91, + [FROZEN_OCTOROK] = FrozenOctorok, [BAKER_OVEN] = BakerOven, [LAMP] = Lamp, [WIND_TRIBE_FLAG] = WindTribeFlag, diff --git a/src/object/frozenOctorok.c b/src/object/frozenOctorok.c new file mode 100644 index 00000000..ea1ea894 --- /dev/null +++ b/src/object/frozenOctorok.c @@ -0,0 +1,280 @@ +/** + * @file frozenOctorok.c + * @ingroup Objects + * + * @brief Frozen Octorok object + */ + +#define NENT_DEPRECATED +#include "enemy/octorokBoss.h" +#include "global.h" +#include "object.h" +#include "functions.h" +#include "message.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[0xc]; + /*0x74*/ u16 unk_74; + /*0x76*/ u16 unk_76; + /*0x78*/ u8 unk_78; + /*0x79*/ u8 unk_79; + /*0x7a*/ u8 unk_7a; + /*0x7b*/ u8 unk_7b; + /*0x7c*/ u8 unk_7c[2]; + /*0x7e*/ u16 unk_7e; + /*0x7f*/ u8 unk_7f[4]; + /*0x84*/ OctorokBossHeap* heap; +} FrozenOctorokEntity; + +void FrozenOctorok_Init(FrozenOctorokEntity*); +void FrozenOctorok_Action1(FrozenOctorokEntity*); +void FrozenOctorok_Action1SubAction0(FrozenOctorokEntity*); +void FrozenOctorok_Action1SubAction1(FrozenOctorokEntity*); +void FrozenOctorok_Action1SubAction2(FrozenOctorokEntity*); +void FrozenOctorok_Action1SubAction3(FrozenOctorokEntity*); +void FrozenOctorok_Action1SubAction4(FrozenOctorokEntity*); +void FrozenOctorok_Action1SubAction5(FrozenOctorokEntity*); +void FrozenOctorok_Action1SubAction6(FrozenOctorokEntity*); +void FrozenOctorok_Action1SubAction7(FrozenOctorokEntity*); +void FrozenOctorok_ChangeObjPaletteOfChildren(FrozenOctorokEntity*, u32); +void sub_0809CBE4(FrozenOctorokEntity*); +void sub_0809CB70(FrozenOctorokEntity*, s32, s32); + +void FrozenOctorok(FrozenOctorokEntity* this) { + static void (*const FrozenOctorok_Actions[])(FrozenOctorokEntity*) = { + FrozenOctorok_Init, + FrozenOctorok_Action1, + }; + FrozenOctorok_Actions[super->action](this); + super->spriteRendering.b3 = 3; +} + +const u8 gUnk_08123DDC[] = { + 9, 4, 0, 0, 1, 5, 0, 0, 1, 4, 0, 0, 1, 3, 0, 0, 1, 2, 0, 0, 2, 1, 0, 0, 10, 4, 0, 0, +}; + +ASM_FUNC("asm/non_matching/frozenOctorok/FrozenOctorok_Init.inc", void FrozenOctorok_Init(FrozenOctorokEntity* this)) + +void (*const FrozenOctorok_Action1SubActions[])(FrozenOctorokEntity*) = { + FrozenOctorok_Action1SubAction0, FrozenOctorok_Action1SubAction1, FrozenOctorok_Action1SubAction2, + FrozenOctorok_Action1SubAction3, FrozenOctorok_Action1SubAction4, FrozenOctorok_Action1SubAction5, + FrozenOctorok_Action1SubAction6, FrozenOctorok_Action1SubAction7, +}; + +const u8 gUnk_08123E18[] = { + 40, + 80, + 176, + 216, +}; +const u8 gUnk_08123E1C[] = { + 128, + 0, + 0, + 128, +}; + +ASM_FUNC("asm/non_matching/frozenOctorok/FrozenOctorok_Action1.inc", + void FrozenOctorok_Action1(FrozenOctorokEntity* this)) + +void FrozenOctorok_Action1SubAction0(FrozenOctorokEntity* this) { + Entity* child; + if (super->field_0xf != 0) { + if (this->unk_7e == 0) { + child = super->child; + if (child->z.HALF.HI > -0x10) { + child->z.WORD -= 0x4000; + } else { + child->z.WORD -= 0x1000; + (super->child)->zVelocity = 0x3000; + this->unk_7e = 0x200; + } + } + if (this->unk_79-- == 0) { + MessageFromTarget(0xb43); + super->subAction = 1; + this->unk_79 = 8; + } + } +} + +void FrozenOctorok_Action1SubAction1(FrozenOctorokEntity* this) { + Entity* obj; + if ((gMessage.doTextBox & 0x7f) == 0) { + if (this->unk_79-- == 0) { + obj = CreateObjectWithParent(super, FROZEN_OCTOROK, 7, 0); + if (obj != NULL) { + obj->y.HALF.HI -= 0x50; + gRoomControls.camera_target = obj; + } + if (super->field_0xf < 3) { + super->subAction = 2; + this->unk_79 = 0x1e; + SoundReq(SFX_THUD_HEAVY); + } else { + super->subAction = 3; + this->unk_79 = 0x78; + } + } + } +} + +void FrozenOctorok_Action1SubAction2(FrozenOctorokEntity* this) { + if (this->unk_79-- == 0) { + super->subAction = 1; + this->unk_79 = 0x1e; + super->field_0xf++; + return; + } + switch (this->unk_79 & 3) { + case 0: + case 2: + super->x.HALF.HI = (super->x.HALF.HI & 0xfff0) + 8; + break; + case 1: + super->x.HALF.HI = (super->x.HALF.HI & 0xfff8) + 4; + break; + case 3: + super->x.HALF.HI = (super->x.HALF.HI & 0xfff8) - 4; + break; + } +} + +void FrozenOctorok_Action1SubAction3(FrozenOctorokEntity* this) { + if (this->unk_79-- != 0) { + CreateObjectWithParent(super, OCTOROK_BOSS_OBJECT, 6, 0); + } else { + super->subAction = 4; + this->unk_79 = 0x3c; + LoadFixedGFX(super, 0x115); + LoadFixedGFX(super->parent, 0x115); + ChangeObjPalette(super, 0xef); + ChangeObjPalette(super->parent, 0xef); + FrozenOctorok_ChangeObjPaletteOfChildren(this, 0xef); + SoundReq(SFX_WIND2); + } +} + +void FrozenOctorok_Action1SubAction4(FrozenOctorokEntity* this) { + u8 bVar1; + s16 sVar2; + u8* pbVar3; + u8* puVar4; + + if (this->unk_79-- == 0) { + super->subAction = 5; + this->unk_79 = 0xb4; + super->type2 = 3; + } else { + if ((gRoomTransition.frameCount & 8) != 0) { + this->heap->mouthObject->unk_76 -= 4; + } else { + this->heap->mouthObject->unk_76 += 4; + } + } +} + +NONMATCH("asm/non_matching/frozenOctorok/FrozenOctorok_Action1SubAction5.inc", + void FrozenOctorok_Action1SubAction5(FrozenOctorokEntity* this)) { + Entity* child; + + if ((gRoomTransition.frameCount & 2) != 0) { + this->heap->mouthObject->unk_76 -= 8; + } else { + this->heap->mouthObject->unk_76 += 8; + } + if ((gRoomTransition.frameCount & 3) == 0) { + CreateObjectWithParent(super, OCTOROK_BOSS_OBJECT, 2, 0); + } + if (this->unk_79 == 0) { + (super->child)->spriteOffsetX = 0; + LinearMoveAngle(super->child, 0x200, -this->unk_7b); + if (sub_0806FC80(super, super->child, 0x48) != 0) { + super->subAction = 6; + super->speed = 0xc0; + super->type2 = 0; + super->field_0xf = 0; + child = super->child; + child->spriteSettings.draw = 0; + this->heap->mouthObject->unk_76 = 0x100; + this->heap->unk_0 = 1; + SoundReq(SFX_ED); + } + } else { + this->unk_79--; + switch ((gRoomTransition.frameCount & 3)) { + case 0: + case 2: + (super->child)->spriteOffsetX = 0; + break; + case 1: + (super->child)->spriteOffsetX = 0xfc; + break; + case 3: + (super->child)->spriteOffsetX = 4; + break; + } + } +} +END_NONMATCH + +void FrozenOctorok_Action1SubAction6(FrozenOctorokEntity* this) { + LinearMoveUpdate(super); + if ((gRoomControls.origin_y + 0x1c8) < super->y.HALF.HI) { + gRoomControls.unk5 = 4; + gRoomControls.camera_target = &gPlayerEntity; + SetLocalFlag(0x9b); + DeleteEntity(super->parent); + DeleteEntity(&this->heap->mouthObject->base); + DeleteEntity(&this->heap->legObjects[0]->base); + DeleteEntity(&this->heap->legObjects[1]->base); + DeleteEntity(&this->heap->legObjects[2]->base); + DeleteEntity(&this->heap->legObjects[3]->base); + super->subAction = 7; + } + if ((gRoomTransition.frameCount & 0xf) == 0) { + SoundReq(SFX_163); + } +} + +void FrozenOctorok_Action1SubAction7(FrozenOctorokEntity* this) { + if ((gRoomControls.scroll_flags & 4) == 0) { + CreateEzloHint(0xb44, 0); + DeleteThisEntity(); + } +} + +void sub_0809CB70(FrozenOctorokEntity* this, s32 angle, s32 radius) { + s32 tmp; + tmp = FixedMul(gSineTable[angle], radius); + tmp = FixedDiv(tmp, 0x100); + super->x.WORD = (super->parent)->x.WORD + ((tmp << 0x10) >> 8); + tmp = FixedMul(gSineTable[angle + 0x40], radius); + tmp = FixedDiv(tmp, 0x100); + super->y.WORD = super->parent->y.WORD - ((tmp << 0x10) >> 8); + super->z.WORD = super->parent->z.WORD; +} + +NONMATCH("asm/non_matching/frozenOctorok/sub_0809CBE4.inc", void sub_0809CBE4(FrozenOctorokEntity* this)) { + this->unk_79 += super->field_0xf; + if ((s8)super->field_0xf < 0) { + if (super->actionDelay < -(this->unk_79 << 0x18 >> 0x18)) { + super->field_0xf = -super->field_0xf; + SoundReq(SFX_19E); + } + } else if ((s8)this->unk_79 > super->actionDelay) { + super->field_0xf = -super->field_0xf; + SoundReq(SFX_19E); + } +} +END_NONMATCH + +void FrozenOctorok_ChangeObjPaletteOfChildren(FrozenOctorokEntity* this, u32 palette) { + u32 index; + + ChangeObjPalette(&this->heap->mouthObject->base, palette); + for (index = 0; index < 4; index++) { + ChangeObjPalette(&this->heap->legObjects[index]->base, palette); + } +} diff --git a/src/object/frozenWaterElement.c b/src/object/frozenWaterElement.c index f4c5964f..c0019201 100644 --- a/src/object/frozenWaterElement.c +++ b/src/object/frozenWaterElement.c @@ -39,7 +39,7 @@ void sub_0809BECC(FrozenWaterElementEntity* this) { if (CheckFlags(0x9b)) { DeleteThisEntity(); } - obj = CreateObject(OBJECT_91, 0, 0); + obj = CreateObject(FROZEN_OCTOROK, 0, 0); super->child = obj; if (obj != NULL) { super->action = 1; diff --git a/src/object/object90.c b/src/object/object90.c new file mode 100644 index 00000000..d975f54c --- /dev/null +++ b/src/object/object90.c @@ -0,0 +1,31 @@ +/** + * @file object90.c + * @ingroup Objects + * + * @brief Object90 object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" + +void Object90_Init(Entity*); +void Object90_Action1(Entity*); + +void Object90(Entity* this) { + static void (*const Object90_Actions[])(Entity*) = { + Object90_Init, + Object90_Action1, + }; + Object90_Actions[this->action](this); +} + +void Object90_Init(Entity* this) { + this->action = 1; + this->frameIndex = 0; + this->spritePriority.b0 = 5; +} + +void Object90_Action1(Entity* this) { +}