From 89c44805b2adbb9c54644affbea8acf03146aa41 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Tue, 11 May 2021 16:13:16 +0200 Subject: [PATCH 01/16] decomp vaati.s --- asm/non_matching/vaati/sub_08066ACC.inc | 86 ++++++ asm/vaati.s | 335 ------------------------ data/const/npc/vaati.s | 9 - include/script.h | 1 + linker.ld | 4 +- src/npc/vaati.c | 130 +++++++++ 6 files changed, 219 insertions(+), 346 deletions(-) create mode 100644 asm/non_matching/vaati/sub_08066ACC.inc delete mode 100644 asm/vaati.s delete mode 100644 data/const/npc/vaati.s create mode 100644 src/npc/vaati.c diff --git a/asm/non_matching/vaati/sub_08066ACC.inc b/asm/non_matching/vaati/sub_08066ACC.inc new file mode 100644 index 00000000..16c661c9 --- /dev/null +++ b/asm/non_matching/vaati/sub_08066ACC.inc @@ -0,0 +1,86 @@ + + .syntax unified + 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 sub_0805DDEC + b _08066B66 +_08066B52: + adds r0, r4, #0 + adds r0, #0x84 + ldr r1, [r0] + str r2, [r1, #4] + adds r0, r4, #0 + bl sub_0805DE18 + 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 + .syntax divided diff --git a/asm/vaati.s b/asm/vaati.s deleted file mode 100644 index a9f5bf86..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 sub_0805DDEC - b _08066B66 -_08066B52: - adds r0, r4, #0 - adds r0, #0x84 - ldr r1, [r0] - str r2, [r1, #4] - adds r0, r4, #0 - bl sub_0805DE18 - 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/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/include/script.h b/include/script.h index cfc2c180..b00a5dbd 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/linker.ld b/linker.ld index fc72936e..a556c55c 100644 --- a/linker.ld +++ b/linker.ld @@ -588,7 +588,7 @@ SECTIONS { asm/kingDaltus.o(.text); asm/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); @@ -1292,7 +1292,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); diff --git a/src/npc/vaati.c b/src/npc/vaati.c new file mode 100644 index 00000000..ee65bbcc --- /dev/null +++ b/src/npc/vaati.c @@ -0,0 +1,130 @@ +#include "global.h" +#include "enemy.h" +#include "entity.h" +#include "script.h" +#include "audio.h" +#include "structures.h" +#include "functions.h" + +extern void sub_08095CB0(Entity*); +extern void sub_0805DDEC(Entity*); +extern void sub_0805DE18(Entity*); +extern void sub_0805DA90(Entity*, u32); + +void sub_08066A94(Entity*); +void sub_08066ACC(Entity*); +void sub_08066B74(Entity*, ScriptExecutionContext*); + +void (*const gUnk_08110734[])(Entity*) = { sub_08066A94, sub_08066ACC }; + +void Vaati(Entity* this) { + gUnk_08110734[this->action](this); + this->palette.b.b0 = this->palette.b.b4 + (this->frameSpriteSettings & 1); +} + +void sub_08066A94(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); + sub_08066ACC(this); +} + +NONMATCH("asm/non_matching/vaati/sub_08066ACC.inc", void sub_08066ACC(Entity* this)) { + 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(0x21c); + break; + case 2: + EnqueueSFX(0x21e); + break; + case 3: + (*(ScriptExecutionContext**)&this->cutsceneBeh)->intVariable = 4; + sub_0805DDEC(this); + break; + case 4: + (*(ScriptExecutionContext**)&this->cutsceneBeh)->intVariable = 4; + sub_0805DE18(this); + EnqueueSFX(0x21d); + break; + } + this->frames.b.f3 = 0; + } +} +END_NONMATCH + +void sub_08066B74(Entity* this, ScriptExecutionContext* context) { + u8 animationState; + u32 currentAction; + short* psVar4; + 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); +} From 0d98d00c01140fe63f6021a553db335f5883c27a Mon Sep 17 00:00:00 2001 From: Henny022p Date: Fri, 28 May 2021 06:20:14 +0200 Subject: [PATCH 02/16] decomp vaati arm --- asm/non_matching/vaati/sub_080432A8.inc | 89 + asm/non_matching/vaati/sub_0804334C.inc | 111 + asm/non_matching/vaati/sub_08043490.inc | 75 + asm/non_matching/vaati/sub_08043770.inc | 58 + asm/non_matching/vaati/sub_0804393C.inc | 109 + asm/non_matching/vaati/sub_08043B08.inc | 67 + asm/non_matching/vaati/sub_08043DB0.inc | 129 + asm/non_matching/vaati/sub_08044000.inc | 59 + asm/vaatiArm.s | 3745 ----------------------- data/const/enemy/vaatiArm.s | 193 -- include/structures.h | 5 +- linker.ld | 4 +- src/enemy/vaatiArm.c | 1460 +++++++++ 13 files changed, 2163 insertions(+), 3941 deletions(-) create mode 100644 asm/non_matching/vaati/sub_080432A8.inc create mode 100644 asm/non_matching/vaati/sub_0804334C.inc create mode 100644 asm/non_matching/vaati/sub_08043490.inc create mode 100644 asm/non_matching/vaati/sub_08043770.inc create mode 100644 asm/non_matching/vaati/sub_0804393C.inc create mode 100644 asm/non_matching/vaati/sub_08043B08.inc create mode 100644 asm/non_matching/vaati/sub_08043DB0.inc create mode 100644 asm/non_matching/vaati/sub_08044000.inc delete mode 100644 asm/vaatiArm.s delete mode 100644 data/const/enemy/vaatiArm.s create mode 100644 src/enemy/vaatiArm.c diff --git a/asm/non_matching/vaati/sub_080432A8.inc b/asm/non_matching/vaati/sub_080432A8.inc new file mode 100644 index 00000000..d075d6a5 --- /dev/null +++ b/asm/non_matching/vaati/sub_080432A8.inc @@ -0,0 +1,89 @@ + + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + movs r3, #3 + movs r2, #0 + ldr r0, [r4, #0x64] + adds r1, r0, #0 + adds r1, #0x48 + ldrb r0, [r1, #0xc] + cmp r0, #2 + bls _080432C2 + subs r0, #1 + strb r0, [r1, #0xc] + movs r2, #1 +_080432C2: + subs r3, #1 + cmp r3, #0 + blt _080432E0 + lsls r0, r3, #4 + adds r0, #0x18 + ldr r1, [r4, #0x64] + adds r1, r1, r0 + ldrb r0, [r1, #0xc] + cmp r0, #2 + bls _080432C2 + subs r0, #1 + strb r0, [r1, #0xc] + adds r2, #1 + cmp r2, #1 + ble _080432C2 +_080432E0: + ldr r0, [r4, #0x64] + adds r1, r0, #0 + adds r1, #0x18 + ldrb r0, [r1, #5] + subs r0, #2 + strb r0, [r1, #5] + movs r3, #0 + movs r6, #0x80 + movs r7, #4 + rsbs r7, r7, #0 + movs r5, #1 +_080432F6: + ldr r0, [r4, #0x64] + lsls r1, r3, #2 + adds r0, r0, r1 + ldr r2, [r0] + movs r1, #0x36 + ldrsh r0, [r2, r1] + cmp r0, #3 + bgt _08043316 + ldrb r0, [r2, #0x10] + orrs r0, r6 + strb r0, [r2, #0x10] + ldrb r1, [r2, #0x18] + adds r0, r7, #0 + ands r0, r1 + orrs r0, r5 + strb r0, [r2, #0x18] +_08043316: + adds r3, #1 + cmp r3, #3 + ble _080432F6 + ldr r1, [r4, #0x64] + ldr r0, [r1] + ldrb r0, [r0, #0x18] + lsls r0, r0, #0x1e + lsrs r2, r0, #0x1e + cmp r2, #1 + bne _08043348 + adds r0, r1, #0 + adds r0, #0x34 + ldrb r0, [r0] + cmp r0, #2 + bhi _08043348 + strb r2, [r4, #0xd] + movs r0, #0x1e + strb r0, [r4, #0xe] + movs r0, #0x80 + lsls r0, r0, #7 + strh r0, [r1, #0x1c] + ldr r0, [r4, #0x64] + ldr r0, [r0, #0x10] + bl sub_0804AA1C +_08043348: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/vaati/sub_0804334C.inc b/asm/non_matching/vaati/sub_0804334C.inc new file mode 100644 index 00000000..91e7120c --- /dev/null +++ b/asm/non_matching/vaati/sub_0804334C.inc @@ -0,0 +1,111 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xe] + cmp r0, #0 + beq _08043388 + subs r0, #1 + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0804341C + movs r5, #0 + movs r7, #0x80 + movs r6, #4 + rsbs r6, r6, #0 + movs r3, #1 +_0804336A: + ldr r0, [r4, #0x64] + lsls r1, r5, #2 + adds r0, r0, r1 + ldr r2, [r0] + ldrb r0, [r2, #0x10] + orrs r0, r7 + strb r0, [r2, #0x10] + ldrb r1, [r2, #0x18] + adds r0, r6, #0 + ands r0, r1 + orrs r0, r3 + strb r0, [r2, #0x18] + adds r5, #1 + cmp r5, #4 + bls _0804336A +_08043388: + ldr r3, [r4, #0x64] + adds r2, r3, #0 + adds r2, #0x18 + ldr r1, _080433AC @ =gUnk_080D131C + ldrb r0, [r4, #0xb] + adds r0, r0, r1 + ldrb r0, [r0] + ldrb r1, [r2, #1] + subs r0, r0, r1 + adds r0, #1 + cmp r0, #2 + bls _080433B0 + ldrh r0, [r2, #8] + ldrh r1, [r3, #0x18] + adds r0, r0, r1 + strh r0, [r3, #0x18] + movs r7, #0 + b _080433B2 + .align 2, 0 +_080433AC: .4byte gUnk_080D131C +_080433B0: + movs r7, #1 +_080433B2: + adds r0, r4, #0 + bl sub_08043B9C + movs r5, #0 + movs r6, #0x18 +_080433BC: + ldr r0, [r4, #0x64] + adds r2, r0, r6 + ldr r0, _080433E4 @ =gUnk_080D1414 + adds r0, r5, r0 + ldrb r1, [r2, #0xc] + ldrb r3, [r0] + cmp r3, r1 + bls _080433E8 + adds r0, r1, #1 + strb r0, [r2, #0xc] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r3, r0 + bne _0804341C + movs r0, #0xaf + lsls r0, r0, #1 + bl SoundReq + b _0804341C + .align 2, 0 +_080433E4: .4byte gUnk_080D1414 +_080433E8: + cmp r7, #0 + beq _08043414 + cmp r5, #4 + bne _08043414 + adds r0, r4, #0 + bl sub_08043BC8 + adds r0, r4, #0 + movs r1, #7 + bl InitAnimationForceUpdate + adds r1, r4, #0 + adds r1, #0x7e + ldrb r0, [r1] + cmp r0, #0 + beq _08043414 + movs r0, #0 + strb r0, [r1] + ldr r0, [r4, #0x64] + ldr r1, [r0, #0x14] + movs r0, #2 + strb r0, [r1, #0xd] +_08043414: + adds r6, #0x10 + adds r5, #1 + cmp r5, #4 + bls _080433BC +_0804341C: + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/vaati/sub_08043490.inc b/asm/non_matching/vaati/sub_08043490.inc new file mode 100644 index 00000000..4b551fbe --- /dev/null +++ b/asm/non_matching/vaati/sub_08043490.inc @@ -0,0 +1,75 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r0, [r4, #0x64] + ldr r0, [r0, #0x10] + mov ip, r0 + ldrh r1, [r0, #0x36] + movs r2, #0x36 + ldrsh r0, [r0, r2] + movs r2, #4 + rsbs r2, r2, #0 + cmp r0, r2 + bge _080434C4 + movs r0, #0xc0 + lsls r0, r0, #9 + mov r3, ip + str r0, [r3, #0x20] + movs r0, #0 + movs r1, #2 + strb r1, [r4, #0xd] + adds r2, r4, #0 + adds r2, #0x7e + strb r0, [r2] + ldr r0, [r4, #0x64] + ldr r0, [r0, #0x14] + strb r1, [r0, #0xd] + b _08043514 +_080434C4: + subs r0, r1, #2 + mov r1, ip + strh r0, [r1, #0x36] + lsls r0, r0, #0x10 + cmp r0, #0 + bge _08043514 + ldrb r0, [r1, #0x10] + movs r3, #0x80 + orrs r0, r3 + strb r0, [r1, #0x10] + ldrb r1, [r1, #0x18] + adds r0, r2, #0 + ands r0, r1 + movs r1, #1 + orrs r0, r1 + mov r2, ip + strb r0, [r2, #0x18] + adds r2, #0x3c + ldrb r1, [r2] + movs r0, #0xef + ands r0, r1 + strb r0, [r2] + mov r1, ip + adds r1, #0x3f + movs r0, #0x3a + strb r0, [r1] + ldr r0, _0804351C @ =gUnk_080FD450 + mov r1, ip + str r0, [r1, #0x48] + ldr r0, [r4, #0x64] + ldr r1, [r0, #8] + ldrb r0, [r1, #0x10] + orrs r3, r0 + strb r3, [r1, #0x10] + ldr r0, [r4, #0x64] + ldr r2, [r0, #0xc] + ldrb r1, [r2, #0x10] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2, #0x10] +_08043514: + adds r0, r4, #0 + bl UpdateAnimationSingleFrame + pop {r4, pc} + .align 2, 0 +_0804351C: .4byte gUnk_080FD450 + .syntax divided diff --git a/asm/non_matching/vaati/sub_08043770.inc b/asm/non_matching/vaati/sub_08043770.inc new file mode 100644 index 00000000..7858154d --- /dev/null +++ b/asm/non_matching/vaati/sub_08043770.inc @@ -0,0 +1,58 @@ + .syntax unified + push {r4, r5, lr} + adds r2, r0, #0 + ldrb r0, [r2, #0xe] + subs r0, #1 + strb r0, [r2, #0xe] + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, #0 + bne _080437D8 + ldr r0, [r2, #0x64] + ldr r3, [r0, #0x14] + ldr r0, _080437AC @ =gScreenTransition + adds r5, r0, #0 + adds r5, #0x39 + ldrb r1, [r5] + movs r0, #0xc + ands r0, r1 + cmp r0, #0 + bne _0804379A + movs r0, #2 + strb r0, [r3, #0xd] +_0804379A: + ldrb r0, [r2, #0xb] + cmp r0, #0 + bne _080437B0 + ldr r0, [r3, #0x64] + str r4, [r0, #0x14] + ldrb r1, [r5] + movs r0, #0xfe + b _080437B8 + .align 2, 0 +_080437AC: .4byte gScreenTransition +_080437B0: + ldr r0, [r3, #0x64] + str r4, [r0, #0x18] + ldrb r1, [r5] + movs r0, #0xfd +_080437B8: + ands r0, r1 + strb r0, [r5] + ldr r0, [r2, #0x64] + ldr r0, [r0, #0x10] + movs r1, #0 + str r1, [r0, #0x64] + ldr r0, [r2, #0x64] + ldr r0, [r0, #0x10] + adds r0, #0x45 + strb r1, [r0] + ldr r1, [r2, #0x68] + ldr r0, [r2, #0x64] + ldr r0, [r0, #0x10] + str r0, [r1, #0x50] + bl DeleteThisEntity +_080437D8: + pop {r4, r5, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/vaati/sub_0804393C.inc b/asm/non_matching/vaati/sub_0804393C.inc new file mode 100644 index 00000000..1cd40fbe --- /dev/null +++ b/asm/non_matching/vaati/sub_0804393C.inc @@ -0,0 +1,109 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r5, r0, #0 + ldr r0, [r5, #0x64] + ldr r1, [r0] + adds r0, r1, #0 + adds r0, #0x7c + ldrb r0, [r0] + lsls r2, r0, #0x18 + cmp r2, #0 + beq _0804397C + adds r0, r1, #0 + adds r0, #0x7d + ldrb r0, [r0] + ldrb r1, [r5, #0xa] + cmp r0, r1 + bhi _0804397C + ldr r4, _08043978 @ =gUnk_080D1362 + ldrb r3, [r5, #0xa] + lsls r1, r3, #4 + lsrs r0, r2, #0x1b + movs r2, #0xf + ands r0, r2 + adds r1, r1, r0 + adds r1, r1, r4 + ldrb r4, [r1] + adds r6, r3, #0 + b _08043980 + .align 2, 0 +_08043978: .4byte gUnk_080D1362 +_0804397C: + movs r4, #0 + ldrb r6, [r5, #0xa] +_08043980: + lsls r0, r6, #4 + adds r0, #0x18 + ldr r2, [r5, #0x64] + mov ip, r2 + adds r2, r2, r0 + ldrb r0, [r2, #0xc] + adds r0, r4, r0 + lsls r4, r0, #8 + ldr r3, _08043A0C @ =gSineTable + ldrb r1, [r2, #5] + adds r0, r1, #0 + adds r0, #0x40 + lsls r0, r0, #1 + adds r0, r0, r3 + movs r7, #0 + ldrsh r0, [r0, r7] + rsbs r0, r0, #0 + adds r7, r0, #0 + muls r7, r4, r7 + mov r8, r7 + movs r0, #0x7f + ands r1, r0 + lsls r1, r1, #1 + adds r1, r1, r3 + movs r7, #0 + ldrsh r0, [r1, r7] + muls r0, r4, r0 + cmp r0, #0 + bge _080439BC + adds r0, #0xff +_080439BC: + asrs r4, r0, #8 + ldrb r1, [r2, #1] + lsls r0, r1, #1 + adds r0, r0, r3 + movs r2, #0 + ldrsh r0, [r0, r2] + adds r2, r0, #0 + muls r2, r4, r2 + adds r1, #0x40 + lsls r1, r1, #1 + adds r1, r1, r3 + movs r3, #0 + ldrsh r0, [r1, r3] + rsbs r0, r0, #0 + adds r3, r0, #0 + muls r3, r4, r3 + adds r0, r6, #1 + lsls r0, r0, #2 + add r0, ip + ldr r0, [r0] + adds r1, r5, #0 + bl PositionRelative + ldr r0, [r5, #0x34] + add r0, r8 + str r0, [r5, #0x34] + ldr r1, [r5, #0x64] + ldrb r0, [r5, #0xa] + adds r0, #1 + lsls r0, r0, #2 + adds r1, r1, r0 + ldr r0, [r1] + adds r0, #0x63 + ldrb r1, [r0] + adds r0, r5, #0 + adds r0, #0x63 + strb r1, [r0] + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08043A0C: .4byte gSineTable + .syntax divided diff --git a/asm/non_matching/vaati/sub_08043B08.inc b/asm/non_matching/vaati/sub_08043B08.inc new file mode 100644 index 00000000..d21677d2 --- /dev/null +++ b/asm/non_matching/vaati/sub_08043B08.inc @@ -0,0 +1,67 @@ + .syntax unified + push {r4, r5, r6, lr} + ldrb r3, [r0, #0xa] + lsls r1, r3, #4 + adds r4, r1, #0 + adds r4, #8 + ldr r2, [r0, #0x64] + adds r6, r2, r4 + adds r1, #0x18 + adds r4, r2, r1 + ldr r0, _08043B40 @ =gUnk_080D13B2 + adds r3, r3, r0 + ldrb r5, [r3] + ldr r0, [r2] + ldrb r0, [r0, #0xb] + cmp r0, #0 + bne _08043B44 + ldrb r1, [r6, #1] + ldrb r0, [r4, #1] + subs r0, r1, r0 + lsls r0, r0, #0x18 + asrs r3, r0, #0x18 + cmp r5, r3 + bhs _08043B5E + cmp r3, #0 + ble _08043B56 + subs r0, r1, r5 + b _08043B5C + .align 2, 0 +_08043B40: .4byte gUnk_080D13B2 +_08043B44: + ldrb r0, [r4, #1] + ldrb r1, [r6, #1] + subs r0, r0, r1 + lsls r0, r0, #0x18 + asrs r3, r0, #0x18 + cmp r5, r3 + bhs _08043B5E + cmp r3, #0 + bge _08043B5A +_08043B56: + strb r1, [r4, #1] + b _08043B5E +_08043B5A: + adds r0, r1, r5 +_08043B5C: + strb r0, [r4, #1] +_08043B5E: + ldrb r2, [r6, #5] + ldrb r0, [r4, #5] + subs r3, r2, r0 + lsls r1, r5, #1 + adds r0, r3, r5 + cmp r1, r0 + bhs _08043B78 + cmp r3, #0 + ble _08043B74 + subs r0, r2, r5 + b _08043B76 +_08043B74: + adds r0, r2, r5 +_08043B76: + strb r0, [r4, #5] +_08043B78: + pop {r4, r5, r6, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/vaati/sub_08043DB0.inc b/asm/non_matching/vaati/sub_08043DB0.inc new file mode 100644 index 00000000..abd69612 --- /dev/null +++ b/asm/non_matching/vaati/sub_08043DB0.inc @@ -0,0 +1,129 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r5, r0, #0 + ldr r0, _08043E48 @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08043EAC + ldr r0, [r5, #0x64] + ldr r2, [r0, #0xc] + movs r1, #0x2e + ldrsh r0, [r2, r1] + ldr r6, _08043E4C @ =gRoomControls + ldrh r1, [r6, #6] + subs r0, r0, r1 + movs r3, #0x32 + ldrsh r1, [r2, r3] + ldrh r2, [r6, #8] + subs r1, r1, r2 + adds r1, #2 + movs r2, #3 + movs r3, #3 + bl CheckPlayerInRegion + cmp r0, #0 + beq _08043EAC + ldr r0, _08043E50 @ =gUnk_080D13EC + bl DoExitTransition + ldr r4, _08043E54 @ =gScreenTransition + adds r0, r4, #0 + adds r0, #0x39 + ldrb r1, [r0] + movs r0, #3 + ands r0, r1 + cmp r0, #3 + beq _08043DFE + movs r0, #1 + strb r0, [r4, #0xd] +_08043DFE: + adds r0, r5, #0 + adds r0, #0x7a + ldrh r0, [r0] + movs r1, #0x3c + bl __divsi3 + movs r1, #0x1e + subs r1, r1, r0 + adds r0, r4, #0 + adds r0, #0x3d + strb r1, [r0] + ldrb r1, [r5, #0xb] + subs r0, #1 + strb r1, [r0] + ldr r0, [r5, #0x64] + ldr r2, [r0, #0x14] + ldrh r1, [r2, #0x2e] + adds r0, r4, #0 + adds r0, #0x40 + strh r1, [r0] + ldrh r0, [r2, #0x32] + adds r1, r4, #0 + adds r1, #0x42 + strh r0, [r1] + ldr r0, [r2, #0x64] + ldr r3, [r0, #0x14] + cmp r3, #0 + beq _08043E58 + ldrh r1, [r3, #0x2e] + adds r0, r4, #0 + adds r0, #0x44 + strh r1, [r0] + ldrh r1, [r3, #0x32] + adds r0, #2 + strh r1, [r0] + b _08043E70 + .align 2, 0 +_08043E48: .4byte gPlayerState +_08043E4C: .4byte gRoomControls +_08043E50: .4byte gUnk_080D13EC +_08043E54: .4byte gScreenTransition +_08043E58: + movs r1, #0x88 + lsls r1, r1, #1 + adds r0, r1, #0 + ldrh r3, [r6, #6] + adds r0, r0, r3 + adds r1, r4, #0 + adds r1, #0x44 + strh r0, [r1] + ldrh r0, [r6, #8] + adds r0, #0x60 + adds r1, #2 + strh r0, [r1] +_08043E70: + ldr r0, [r2, #0x64] + ldr r3, [r0, #0x18] + cmp r3, #0 + beq _08043E90 + ldr r1, _08043E8C @ =gScreenTransition + ldrh r2, [r3, #0x2e] + adds r0, r1, #0 + adds r0, #0x48 + strh r2, [r0] + ldrh r0, [r3, #0x32] + adds r1, #0x4a + strh r0, [r1] + b _08043EAC + .align 2, 0 +_08043E8C: .4byte gScreenTransition +_08043E90: + ldr r2, _08043EB0 @ =gScreenTransition + ldr r3, _08043EB4 @ =gRoomControls + movs r1, #0x88 + lsls r1, r1, #1 + adds r0, r1, #0 + ldrh r1, [r3, #6] + adds r0, r0, r1 + adds r1, r2, #0 + adds r1, #0x48 + strh r0, [r1] + ldrh r0, [r3, #8] + adds r0, #0x60 + adds r2, #0x4a + strh r0, [r2] +_08043EAC: + pop {r4, r5, r6, pc} + .align 2, 0 +_08043EB0: .4byte gScreenTransition +_08043EB4: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/vaati/sub_08044000.inc b/asm/non_matching/vaati/sub_08044000.inc new file mode 100644 index 00000000..eb4a964a --- /dev/null +++ b/asm/non_matching/vaati/sub_08044000.inc @@ -0,0 +1,59 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xb] + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #1 + ldr r0, _08044070 @ =gUnk_080D1400 + movs r3, #0 + ldr r2, _08044074 @ =gUnk_080D1414 + mov ip, r2 + movs r7, #8 + rsbs r7, r7, #0 + adds r5, r1, r0 + movs r6, #0x18 +_0804401C: + ldr r0, [r4, #0x64] + lsls r1, r3, #2 + adds r0, r0, r1 + ldr r2, [r0] + ldrb r1, [r2, #0x10] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2, #0x10] + adds r2, #0x29 + ldrb r1, [r2] + adds r0, r7, #0 + ands r0, r1 + movs r1, #4 + orrs r0, r1 + strb r0, [r2] + ldr r1, [r4, #0x64] + adds r1, r1, r6 + ldrh r0, [r5] + strh r0, [r1] + movs r0, #0x80 + lsls r0, r0, #7 + strh r0, [r1, #4] + mov r2, ip + adds r0, r3, r2 + ldrb r0, [r0] + strb r0, [r1, #0xc] + adds r5, #2 + adds r6, #0x10 + adds r3, #1 + cmp r3, #4 + bls _0804401C + adds r0, r4, #0 + movs r1, #7 + bl InitAnimationForceUpdate + ldr r1, [r4, #0x64] + ldr r0, [r1, #0x14] + ldr r1, [r1, #0x10] + bl CopyPosition + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08044070: .4byte gUnk_080D1400 +_08044074: .4byte gUnk_080D1414 + .syntax divided diff --git a/asm/vaatiArm.s b/asm/vaatiArm.s deleted file mode 100644 index b8d9e69f..00000000 --- a/asm/vaatiArm.s +++ /dev/null @@ -1,3745 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start VaatiArm -VaatiArm: @ 0x08042554 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _0804256C @ =gUnk_080D1230 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - pop {r4, r5, pc} - .align 2, 0 -_0804256C: .4byte gUnk_080D1230 - - thumb_func_start sub_08042570 -sub_08042570: @ 0x08042570 - push {lr} - ldr r2, _08042584 @ =gUnk_080D1248 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08042584: .4byte gUnk_080D1248 - - thumb_func_start sub_08042588 -sub_08042588: @ 0x08042588 - push {lr} - ldr r1, _08042594 @ =gUnk_080D1230 - bl sub_0804AA30 - pop {pc} - .align 2, 0 -_08042594: .4byte gUnk_080D1230 - - thumb_func_start nullsub_170 -nullsub_170: @ 0x08042598 - bx lr - .align 2, 0 - - thumb_func_start sub_0804259C -sub_0804259C: @ 0x0804259C - push {lr} - ldr r2, _080425B0 @ =gUnk_080D125C - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080425B0: .4byte gUnk_080D125C - - thumb_func_start sub_080425B4 -sub_080425B4: @ 0x080425B4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl sub_080437DC - cmp r0, #0 - beq _0804264C - adds r0, r4, #0 - adds r0, #0x7c - movs r1, #0 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - ldr r5, _08042614 @ =gScreenTransition - adds r0, r5, #0 - adds r0, #0x38 - ldrb r0, [r0] - movs r6, #1 - adds r1, r6, #0 - ands r1, r0 - cmp r1, #0 - beq _08042634 - adds r0, r5, #0 - adds r0, #0x3c - ldrb r0, [r0] - ldrb r1, [r4, #0xb] - cmp r0, r1 - bne _08042620 - adds r0, r4, #0 - bl sub_08043EB8 - adds r0, r4, #0 - bl sub_08043ABC - adds r0, r5, #0 - adds r0, #0x39 - ldrb r1, [r0] - ldrb r0, [r4, #0xb] - adds r0, #2 - asrs r1, r0 - ands r1, r6 - cmp r1, #0 - beq _08042618 - movs r0, #7 - strb r0, [r4, #0xc] - movs r0, #4 - strb r0, [r4, #0xd] - b _0804264C - .align 2, 0 -_08042614: .4byte gScreenTransition -_08042618: - movs r0, #8 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - b _0804264C -_08042620: - adds r0, r4, #0 - bl sub_08044000 - adds r0, r4, #0 - bl sub_08043BC8 - adds r0, r4, #0 - bl sub_08043A10 - b _0804264C -_08042634: - strb r6, [r4, #0xc] - strb r1, [r4, #0xd] - ldr r2, [r4, #0x64] - ldr r1, _08042650 @ =gUnk_080D1280 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #0x20] - adds r0, r4, #0 - bl sub_08042654 -_0804264C: - pop {r4, r5, r6, pc} - .align 2, 0 -_08042650: .4byte gUnk_080D1280 - - thumb_func_start sub_08042654 -sub_08042654: @ 0x08042654 - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldrb r0, [r6, #0xb] - lsls r3, r0, #2 - ldr r0, [r6, #0x64] - adds r2, r0, #0 - adds r2, #0x18 - ldrb r0, [r6, #0xd] - cmp r0, #4 - bls _0804266A - b _080427FC -_0804266A: - lsls r0, r0, #2 - ldr r1, _08042674 @ =_08042678 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08042674: .4byte _08042678 -_08042678: @ jump table - .4byte _0804268C @ case 0 - .4byte _080426B0 @ case 1 - .4byte _080426E0 @ case 2 - .4byte _08042710 @ case 3 - .4byte _08042740 @ case 4 -_0804268C: - movs r0, #1 - strb r0, [r6, #0xd] - ldr r1, _080426A8 @ =gUnk_080D1284 - ldrb r0, [r6, #0xb] - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r2, #1] - ldr r1, _080426AC @ =gUnk_080D1286 - ldrb r0, [r6, #0xb] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r6, #0 - b _080427EE - .align 2, 0 -_080426A8: .4byte gUnk_080D1284 -_080426AC: .4byte gUnk_080D1286 -_080426B0: - ldrh r0, [r2, #8] - ldrh r1, [r2] - adds r0, r0, r1 - strh r0, [r2] - ldr r1, [r6, #0x64] - adds r1, #0x34 - ldrb r0, [r1] - adds r0, #2 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xb - bhi _080426CC - b _0804280E -_080426CC: - movs r0, #2 - strb r0, [r6, #0xd] - ldr r1, _080426DC @ =gUnk_080D1286 - adds r0, r3, #1 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r6, #0 - b _080427EE - .align 2, 0 -_080426DC: .4byte gUnk_080D1286 -_080426E0: - ldrh r0, [r2, #8] - ldrh r1, [r2] - adds r0, r0, r1 - strh r0, [r2] - ldr r1, [r6, #0x64] - adds r1, #0x44 - ldrb r0, [r1] - adds r0, #2 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xd - bhi _080426FC - b _0804280E -_080426FC: - movs r0, #3 - strb r0, [r6, #0xd] - ldr r1, _0804270C @ =gUnk_080D1286 - adds r0, r3, #2 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r6, #0 - b _080427EE - .align 2, 0 -_0804270C: .4byte gUnk_080D1286 -_08042710: - ldrh r0, [r2, #8] - ldrh r1, [r2] - adds r0, r0, r1 - strh r0, [r2] - ldr r1, [r6, #0x64] - adds r1, #0x54 - ldrb r0, [r1] - adds r0, #2 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xf - bls _0804280E - movs r0, #4 - strb r0, [r6, #0xd] - ldr r1, _0804273C @ =gUnk_080D1286 - adds r0, r3, #3 - adds r0, r0, r1 - ldrb r1, [r0] - adds r0, r6, #0 - b _080427EE - .align 2, 0 -_0804273C: .4byte gUnk_080D1286 -_08042740: - ldrh r0, [r2, #8] - ldrh r1, [r2] - adds r0, r0, r1 - strh r0, [r2] - ldr r1, [r6, #0x64] - adds r1, #0x64 - ldrb r0, [r1] - adds r0, #2 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x1b - bls _0804280E - movs r0, #5 - strb r0, [r6, #0xd] - movs r0, #0x5a - strb r0, [r6, #0xe] - ldr r0, [r6, #0x64] - ldr r1, [r0] - ldrb r0, [r1, #0x10] - movs r5, #0x80 - orrs r0, r5 - strb r0, [r1, #0x10] - ldr r0, [r6, #0x64] - ldr r1, [r0] - adds r1, #0x29 - ldrb r2, [r1] - movs r3, #8 - rsbs r3, r3, #0 - adds r0, r3, #0 - ands r0, r2 - movs r4, #4 - orrs r0, r4 - strb r0, [r1] - ldr r0, [r6, #0x64] - ldr r1, [r0, #4] - ldrb r0, [r1, #0x10] - orrs r0, r5 - strb r0, [r1, #0x10] - ldr r0, [r6, #0x64] - ldr r1, [r0, #4] - adds r1, #0x29 - ldrb r2, [r1] - adds r0, r3, #0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - ldr r0, [r6, #0x64] - ldr r1, [r0, #8] - ldrb r0, [r1, #0x10] - orrs r0, r5 - strb r0, [r1, #0x10] - ldr r0, [r6, #0x64] - ldr r1, [r0, #8] - adds r1, #0x29 - ldrb r2, [r1] - adds r0, r3, #0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - ldr r0, [r6, #0x64] - ldr r1, [r0, #0xc] - ldrb r0, [r1, #0x10] - orrs r0, r5 - strb r0, [r1, #0x10] - ldr r0, [r6, #0x64] - ldr r1, [r0, #0xc] - adds r1, #0x29 - ldrb r2, [r1] - adds r0, r3, #0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - ldr r0, [r6, #0x64] - ldr r1, [r0, #0x10] - ldrb r0, [r1, #0x10] - orrs r0, r5 - strb r0, [r1, #0x10] - ldr r0, [r6, #0x64] - ldr r0, [r0, #0x10] - adds r0, #0x29 - ldrb r1, [r0] - ands r3, r1 - orrs r3, r4 - strb r3, [r0] - adds r0, r6, #0 - movs r1, #7 -_080427EE: - bl InitAnimationForceUpdate - movs r0, #0xaf - lsls r0, r0, #1 - bl SoundReq - b _0804280E -_080427FC: - ldrb r0, [r6, #0xe] - subs r0, #1 - strb r0, [r6, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0804280E - adds r0, r6, #0 - bl sub_08043BC8 -_0804280E: - adds r0, r6, #0 - bl sub_08043A10 - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08042818 -sub_08042818: @ 0x08042818 - push {r4, lr} - adds r4, r0, #0 - bl sub_08043CD4 - ldr r0, [r4, #0x64] - adds r2, r0, #0 - adds r2, #0x18 - ldrh r1, [r2, #8] - ldrh r3, [r0, #0x18] - adds r1, r1, r3 - strh r1, [r0, #0x18] - ldrb r0, [r2, #0xd] - subs r0, #1 - strb r0, [r2, #0xd] - movs r1, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042848 - movs r0, #0x78 - strb r0, [r2, #0xd] - movs r3, #8 - ldrsh r0, [r2, r3] - rsbs r0, r0, #0 - strh r0, [r2, #8] -_08042848: - ldrh r0, [r2, #0xa] - ldrh r3, [r2, #4] - adds r0, r0, r3 - strh r0, [r2, #4] - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - ands r0, r1 - cmp r0, #0 - bne _08042868 - movs r0, #0x50 - strb r0, [r2, #0xe] - movs r1, #0xa - ldrsh r0, [r2, r1] - rsbs r0, r0, #0 - strh r0, [r2, #0xa] -_08042868: - adds r0, r4, #0 - bl sub_08043A10 - pop {r4, pc} - - thumb_func_start sub_08042870 -sub_08042870: @ 0x08042870 - push {r4, lr} - adds r4, r0, #0 - bl sub_08043CD4 - ldr r1, _08042890 @ =gUnk_080D1290 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_08043A10 - pop {r4, pc} - .align 2, 0 -_08042890: .4byte gUnk_080D1290 - - thumb_func_start sub_08042894 -sub_08042894: @ 0x08042894 - movs r1, #1 - strb r1, [r0, #0xd] - ldr r2, [r0, #0x64] - ldr r1, _080428A8 @ =gUnk_080D12AC - ldrb r0, [r0, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #0x20] - bx lr - .align 2, 0 -_080428A8: .4byte gUnk_080D12AC - - thumb_func_start sub_080428AC -sub_080428AC: @ 0x080428AC - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - adds r3, r0, #0 - adds r3, #0x18 - ldrb r0, [r3, #5] - cmp r0, #0x40 - beq _080428CC - cmp r0, #0x40 - bls _080428C6 - ldrh r0, [r3, #4] - subs r0, #0x80 - b _080428CA -_080428C6: - ldrh r0, [r3, #4] - adds r0, #0x80 -_080428CA: - strh r0, [r3, #4] -_080428CC: - ldrb r1, [r3, #1] - ldr r2, _080428E8 @ =gUnk_080D12B0 - ldrb r0, [r4, #0xb] - adds r0, r0, r2 - ldrb r0, [r0] - subs r1, r1, r0 - adds r1, #1 - cmp r1, #2 - bls _080428EC - ldrh r0, [r3, #8] - ldrh r1, [r3] - adds r0, r0, r1 - strh r0, [r3] - b _080428F4 - .align 2, 0 -_080428E8: .4byte gUnk_080D12B0 -_080428EC: - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x1e - strb r0, [r4, #0xe] -_080428F4: - adds r0, r4, #0 - bl sub_08043BF0 - pop {r4, pc} - - thumb_func_start sub_080428FC -sub_080428FC: @ 0x080428FC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0804293C - movs r0, #3 - strb r0, [r4, #0xd] - ldr r1, [r4, #0x64] - adds r1, #0x18 - movs r0, #8 - ldrsh r2, [r1, r0] - lsls r0, r2, #1 - adds r0, r0, r2 - rsbs r0, r0, #0 - strh r0, [r1, #8] - ldr r0, _08042940 @ =0x00000153 - bl SoundReq - movs r2, #0 - movs r3, #0x3b -_0804292A: - ldr r0, [r4, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x3f - strb r3, [r0] - adds r2, #1 - cmp r2, #4 - bls _0804292A -_0804293C: - pop {r4, pc} - .align 2, 0 -_08042940: .4byte 0x00000153 - - thumb_func_start sub_08042944 -sub_08042944: @ 0x08042944 - push {lr} - adds r3, r0, #0 - ldr r2, [r3, #0x64] - adds r1, r2, #0 - adds r1, #0x18 - ldrb r0, [r1, #1] - subs r0, #0x7c - cmp r0, #8 - bls _08042960 - ldrh r0, [r1, #8] - ldrh r1, [r2, #0x18] - adds r0, r0, r1 - strh r0, [r2, #0x18] - b _08042968 -_08042960: - movs r0, #4 - strb r0, [r3, #0xd] - ldrh r0, [r1, #8] - strh r0, [r3, #0x24] -_08042968: - adds r0, r3, #0 - bl sub_08043BF0 - pop {pc} - - thumb_func_start sub_08042970 -sub_08042970: @ 0x08042970 - push {r4, r5, lr} - adds r3, r0, #0 - ldr r4, [r3, #0x64] - adds r2, r4, #0 - adds r2, #0x18 - ldrb r0, [r2, #1] - ldr r1, _080429A4 @ =gUnk_080D12B2 - ldrb r5, [r3, #0xb] - adds r1, r5, r1 - ldrb r1, [r1] - subs r0, r0, r1 - adds r0, #2 - cmp r0, #4 - bls _080429AC - ldr r0, _080429A8 @ =gUnk_080D12B4 - adds r0, r5, r0 - movs r1, #0 - ldrsb r1, [r0, r1] - ldrh r0, [r2, #8] - adds r1, r1, r0 - strh r1, [r2, #8] - ldrh r0, [r4, #0x18] - adds r0, r0, r1 - strh r0, [r4, #0x18] - b _080429CA - .align 2, 0 -_080429A4: .4byte gUnk_080D12B2 -_080429A8: .4byte gUnk_080D12B4 -_080429AC: - movs r0, #5 - strb r0, [r3, #0xd] - movs r0, #0x3c - strb r0, [r3, #0xe] - movs r2, #0 - movs r4, #0x39 -_080429B8: - ldr r0, [r3, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x3f - strb r4, [r0] - adds r2, #1 - cmp r2, #4 - bls _080429B8 -_080429CA: - adds r0, r3, #0 - bl sub_08043BF0 - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080429D4 -sub_080429D4: @ 0x080429D4 - push {r4, lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080429FA - movs r0, #6 - strb r0, [r1, #0xd] - ldr r4, [r1, #0x64] - adds r4, #0x18 - movs r2, #0x24 - ldrsh r0, [r1, r2] - rsbs r0, r0, #0 - movs r1, #6 - bl __divsi3 - strh r0, [r4, #8] -_080429FA: - pop {r4, pc} - - thumb_func_start sub_080429FC -sub_080429FC: @ 0x080429FC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r3, [r4, #0x64] - adds r5, r3, #0 - adds r5, #0x18 - ldrb r1, [r5, #1] - ldr r2, _08042A28 @ =gUnk_080D12B6 - ldrb r0, [r4, #0xb] - adds r0, r0, r2 - ldrb r0, [r0] - subs r1, r1, r0 - adds r1, #1 - cmp r1, #2 - bls _08042A2C - ldrh r0, [r5, #8] - ldrh r1, [r3, #0x18] - adds r0, r0, r1 - strh r0, [r3, #0x18] - adds r0, r4, #0 - bl sub_08043BF0 - b _08042A3A - .align 2, 0 -_08042A28: .4byte gUnk_080D12B6 -_08042A2C: - adds r0, r4, #0 - bl sub_08043BC8 - adds r0, r4, #0 - movs r1, #7 - bl InitAnimationForceUpdate -_08042A3A: - pop {r4, r5, pc} - - thumb_func_start sub_08042A3C -sub_08042A3C: @ 0x08042A3C - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08042A68 @ =gUnk_080D12B8 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_08043A10 - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x10] - adds r4, #0x78 - ldrh r0, [r1, #0x36] - ldrb r4, [r4] - adds r0, r0, r4 - strh r0, [r1, #0x36] - pop {r4, pc} - .align 2, 0 -_08042A68: .4byte gUnk_080D12B8 - - thumb_func_start sub_08042A6C -sub_08042A6C: @ 0x08042A6C - adds r3, r0, #0 - movs r2, #0 - movs r1, #1 - strb r1, [r3, #0xd] - adds r0, #0x78 - strb r2, [r0] - adds r0, #6 - strb r1, [r0] - ldr r1, [r3, #0x64] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r1, #0x22] - bx lr - .align 2, 0 - - thumb_func_start sub_08042A88 -sub_08042A88: @ 0x08042A88 - push {r4, lr} - adds r4, r0, #0 - ldr r3, [r4, #0x64] - adds r2, r3, #0 - adds r2, #0x18 - ldr r1, _08042AA8 @ =gUnk_080D12C8 - ldrb r0, [r4, #0xb] - adds r0, r0, r1 - ldrb r1, [r0] - ldrb r0, [r2, #1] - cmp r1, r0 - beq _08042ABC - cmp r1, r0 - bhs _08042AB0 - ldr r1, _08042AAC @ =0xFFFFFF00 - b _08042AB4 - .align 2, 0 -_08042AA8: .4byte gUnk_080D12C8 -_08042AAC: .4byte 0xFFFFFF00 -_08042AB0: - movs r1, #0x80 - lsls r1, r1, #1 -_08042AB4: - adds r0, r1, #0 - ldrh r1, [r3, #0x18] - adds r0, r0, r1 - strh r0, [r3, #0x18] -_08042ABC: - movs r1, #0xa - ldrsh r0, [r2, r1] - ldrh r1, [r2, #4] - cmp r0, r1 - bge _08042ACE - ldrh r0, [r2, #0xa] - subs r0, r1, r0 - strh r0, [r2, #4] - b _08042AE6 -_08042ACE: - movs r0, #0 - strh r0, [r2, #4] - ldr r1, _08042AE8 @ =gUnk_080D12CA - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #8] - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x1e - strb r0, [r4, #0xe] -_08042AE6: - pop {r4, pc} - .align 2, 0 -_08042AE8: .4byte gUnk_080D12CA - - thumb_func_start sub_08042AEC -sub_08042AEC: @ 0x08042AEC - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042B1C - movs r0, #3 - strb r0, [r5, #0xd] - movs r0, #4 - strb r0, [r5, #0xe] - adds r0, r5, #0 - adds r0, #0x3f - movs r4, #0x3d - strb r4, [r0] - adds r0, r5, #0 - movs r1, #0xe - bl InitAnimationForceUpdate - ldr r0, [r5, #0x64] - ldr r0, [r0, #4] - adds r0, #0x3f - strb r4, [r0] -_08042B1C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08042B20 -sub_08042B20: @ 0x08042B20 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldr r0, [r5, #0x64] - adds r1, r0, #0 - adds r1, #0x18 - ldrb r0, [r1, #5] - cmp r0, #0x7a - bhi _08042B3E - movs r2, #0xa0 - lsls r2, r2, #3 - adds r0, r2, #0 - ldrh r2, [r1, #4] - adds r0, r0, r2 - strh r0, [r1, #4] - b _08042B42 -_08042B3E: - movs r0, #0x80 - strb r0, [r1, #5] -_08042B42: - ldrb r0, [r1, #5] - cmp r0, #0x30 - bls _08042B50 - ldrh r0, [r1, #8] - ldrh r2, [r1] - adds r0, r0, r2 - strh r0, [r1] -_08042B50: - ldr r0, [r5, #0x64] - ldr r0, [r0, #0xc] - ldrb r0, [r0, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - beq _08042BE0 - adds r0, r5, #0 - bl sub_08043C40 - movs r6, #0 - movs r7, #0xa - rsbs r7, r7, #0 -_08042B68: - ldr r0, [r5, #0x64] - lsls r1, r6, #2 - adds r0, r0, r1 - ldr r4, [r0] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, r7 - blt _08042BD4 - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - cmp r0, #1 - bne _08042BD4 - cmp r6, #0 - bne _08042BBA - movs r0, #0xaf - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08042B9C - ldr r0, [r5, #0x64] - ldr r0, [r0, #0x10] - str r0, [r1, #0x50] -_08042B9C: - ldr r0, [r5, #0x64] - ldr r0, [r0, #0x10] - str r1, [r0, #0x68] - movs r0, #0xaf - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08042BBA - ldr r0, [r5, #0x64] - ldr r0, [r0, #0x10] - bl CopyPosition -_08042BBA: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r0, [r4, #0x18] - movs r2, #4 - rsbs r2, r2, #0 - adds r1, r2, #0 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, _08042BDC @ =0x00000161 - bl SoundReq -_08042BD4: - adds r6, #1 - cmp r6, #3 - bls _08042B68 - b _08042C12 - .align 2, 0 -_08042BDC: .4byte 0x00000161 -_08042BE0: - adds r0, r5, #0 - adds r0, #0x78 - ldrb r1, [r0] - adds r1, #2 - strb r1, [r0] - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _08042C12 - movs r0, #5 - strb r0, [r5, #0xc] - strb r1, [r5, #0xd] - movs r0, #0x1e - strb r0, [r5, #0xe] - adds r0, r5, #0 - adds r0, #0x3f - movs r1, #0x39 - strb r1, [r0] - ldr r0, [r5, #0x64] - ldr r0, [r0, #4] - adds r0, #0x3f - strb r1, [r0] -_08042C12: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08042C14 -sub_08042C14: @ 0x08042C14 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08042C30 @ =gUnk_080D12D0 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_08043A78 - pop {r4, pc} - .align 2, 0 -_08042C30: .4byte gUnk_080D12D0 - - thumb_func_start sub_08042C34 -sub_08042C34: @ 0x08042C34 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - sub sp, #4 - adds r7, r0, #0 - ldrb r0, [r7, #0xe] - subs r0, #1 - strb r0, [r7, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042D0C - movs r0, #0x3c - strb r0, [r7, #0xe] - movs r0, #3 - strb r0, [r7, #0xf] - movs r0, #1 - strb r0, [r7, #0xd] - bl Random - movs r1, #6 - ands r1, r0 - ldr r0, _08042D14 @ =gUnk_080D12F8 - adds r1, r1, r0 - ldr r3, _08042D18 @ =gPlayerEntity - movs r0, #0x2e - ldrsh r2, [r3, r0] - movs r0, #0 - ldrsb r0, [r1, r0] - adds r6, r2, r0 - movs r0, #0x32 - ldrsh r2, [r3, r0] - movs r0, #1 - ldrsb r0, [r1, r0] - adds r5, r2, r0 - ldr r3, _08042D1C @ =gRoomControls - ldrh r2, [r3, #6] - adds r0, r2, #0 - adds r0, #0x20 - cmp r0, r6 - ble _08042C86 - adds r6, r0, #0 -_08042C86: - ldrh r0, [r3, #0x1e] - adds r0, r2, r0 - subs r0, #0x20 - cmp r0, r6 - bge _08042C92 - adds r6, r0, #0 -_08042C92: - ldrh r1, [r3, #8] - adds r0, r1, #0 - adds r0, #0x20 - cmp r0, r5 - ble _08042C9E - adds r5, r0, #0 -_08042C9E: - ldrh r0, [r3, #0x20] - adds r0, r1, r0 - subs r0, #0x40 - cmp r0, r5 - bge _08042CAA - adds r5, r0, #0 -_08042CAA: - subs r0, r6, r2 - subs r0, #0x90 - cmp r0, #0x40 - bhi _08042CC2 - subs r0, r5, r1 - subs r0, #8 - cmp r0, #0x40 - bhi _08042CC2 - adds r6, r2, #0 - adds r6, #0xb0 - adds r5, r1, #0 - adds r5, #0x40 -_08042CC2: - movs r4, #0 - mov r8, r4 - movs r3, #0x18 -_08042CC8: - ldr r0, [r7, #0x64] - lsls r1, r4, #2 - adds r0, r0, r1 - ldr r2, [r0] - strh r6, [r2, #0x2e] - strh r5, [r2, #0x32] - movs r0, #0x32 - strh r0, [r2, #0x36] - adds r1, r2, #0 - adds r1, #0x3f - movs r0, #0x39 - strb r0, [r1] - ldr r1, [r7, #0x64] - adds r1, r1, r3 - movs r0, #0x80 - strh r0, [r1] - mov r0, r8 - strh r0, [r1, #4] - ldr r0, _08042D20 @ =gUnk_080D1419 - adds r0, r4, r0 - ldrb r0, [r0] - strb r0, [r1, #0xc] - cmp r4, #0 - beq _08042D04 - adds r0, r2, #0 - movs r1, #0x12 - str r3, [sp] - bl InitializeAnimation - ldr r3, [sp] -_08042D04: - adds r3, #0x10 - adds r4, #1 - cmp r4, #3 - bls _08042CC8 -_08042D0C: - add sp, #4 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08042D14: .4byte gUnk_080D12F8 -_08042D18: .4byte gPlayerEntity -_08042D1C: .4byte gRoomControls -_08042D20: .4byte gUnk_080D1419 - - thumb_func_start sub_08042D24 -sub_08042D24: @ 0x08042D24 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042D68 - movs r0, #2 - strb r0, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x3f - movs r1, #0x3d - strb r1, [r0] - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - adds r0, #0x3f - strb r1, [r0] - movs r0, #0xaf - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08042D5E - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - str r0, [r1, #0x50] -_08042D5E: - str r1, [r4, #0x68] - adds r0, r4, #0 - movs r1, #0xd - bl InitAnimationForceUpdate -_08042D68: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08042D6C -sub_08042D6C: @ 0x08042D6C - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r6, #0 -_08042D72: - ldr r0, [r5, #0x64] - lsls r1, r6, #2 - adds r0, r0, r1 - ldr r4, [r0] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #3 - bgt _08042DC4 - cmp r6, #2 - beq _08042D8E - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] -_08042D8E: - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - bne _08042DB4 - movs r0, #0xaf - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08042DB4 - adds r0, r4, #0 - bl CopyPosition - movs r0, #0xb3 - lsls r0, r0, #1 - bl SoundReq -_08042DB4: - ldrb r0, [r4, #0x18] - movs r2, #4 - rsbs r2, r2, #0 - adds r1, r2, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] -_08042DC4: - adds r6, #1 - cmp r6, #3 - bls _08042D72 - ldr r0, [r5, #0x64] - ldr r4, [r0, #0xc] - ldrh r2, [r4, #0x36] - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #3 - rsbs r0, r0, #0 - cmp r1, r0 - bgt _08042E28 - ldr r0, _08042E20 @ =0x0000FFFB - strh r0, [r4, #0x36] - ldr r2, [r5, #0x64] - ldr r1, _08042E24 @ =gUnk_080D1300 - ldrb r0, [r5, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #0x20] - ldr r1, [r5, #0x64] - movs r0, #0xc0 - strh r0, [r1, #0x22] - movs r0, #3 - strb r0, [r5, #0xd] - movs r0, #0x1e - strb r0, [r5, #0xe] - adds r0, r5, #0 - adds r0, #0x3f - movs r4, #0x39 - strb r4, [r0] - adds r1, r5, #0 - adds r1, #0x7f - movs r0, #0x2d - strb r0, [r1] - adds r0, r5, #0 - movs r1, #0 - bl InitAnimationForceUpdate - ldr r0, [r5, #0x64] - ldr r0, [r0, #4] - adds r0, #0x3f - strb r4, [r0] - b _08042E2C - .align 2, 0 -_08042E20: .4byte 0x0000FFFB -_08042E24: .4byte gUnk_080D1300 -_08042E28: - subs r0, r2, #2 - strh r0, [r4, #0x36] -_08042E2C: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08042E30 -sub_08042E30: @ 0x08042E30 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - adds r1, r6, #0 - adds r1, #0x7f - ldrb r0, [r1] - cmp r0, #0 - bne _08042E4A - adds r0, r6, #0 - bl sub_08043C98 - cmp r0, #0 - bne _08042EF0 - b _08042E4E -_08042E4A: - subs r0, #1 - strb r0, [r1] -_08042E4E: - ldr r7, [r6, #0x64] - adds r5, r7, #0 - adds r5, #0x18 - ldrb r0, [r6, #0xe] - subs r0, #1 - strb r0, [r6, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042EB2 - movs r0, #4 - strb r0, [r6, #0xd] - bl Random - movs r1, #0x38 - ands r0, r1 - adds r0, #0x28 - strb r0, [r6, #0xe] - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r6, #0x24] - ldrb r0, [r5, #1] - lsrs r0, r0, #3 - strb r0, [r6, #0x15] - movs r1, #0x2e - ldrsh r0, [r6, r1] - movs r2, #0x32 - ldrsh r1, [r6, r2] - ldr r3, _08042ED4 @ =gRoomControls - ldrh r2, [r3, #6] - movs r4, #0x88 - lsls r4, r4, #1 - adds r2, r2, r4 - ldrh r3, [r3, #8] - adds r3, #0x60 - bl sub_080045D4 - adds r4, r0, #0 - bl Random - ldr r2, _08042ED8 @ =gUnk_080D1304 - movs r1, #7 - ands r1, r0 - adds r1, r1, r2 - ldrb r0, [r1] - adds r0, r0, r4 - movs r1, #0x1f - ands r0, r1 - adds r1, r6, #0 - adds r1, #0x79 - strb r0, [r1] -_08042EB2: - ldrh r0, [r5, #8] - ldrh r1, [r7, #0x18] - adds r0, r0, r1 - strh r0, [r7, #0x18] - ldrh r0, [r5, #0xa] - ldrh r2, [r5, #4] - adds r1, r0, r2 - strh r1, [r5, #4] - lsls r0, r0, #0x10 - cmp r0, #0 - ble _08042EDC - ldrb r0, [r5, #5] - cmp r0, #0x18 - bls _08042EEA - movs r4, #0xa - ldrsh r0, [r5, r4] - b _08042EE6 - .align 2, 0 -_08042ED4: .4byte gRoomControls -_08042ED8: .4byte gUnk_080D1304 -_08042EDC: - ldrb r0, [r5, #5] - cmp r0, #3 - bhi _08042EEA - movs r1, #0xa - ldrsh r0, [r5, r1] -_08042EE6: - rsbs r0, r0, #0 - strh r0, [r5, #0xa] -_08042EEA: - adds r0, r6, #0 - bl UpdateAnimationSingleFrame -_08042EF0: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08042EF4 -sub_08042EF4: @ 0x08042EF4 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - bl sub_08043C98 - cmp r0, #0 - bne _08042FCE - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08042F4E - ldr r0, _08042F38 @ =gPlayerEntity - movs r2, #0x2e - ldrsh r1, [r0, r2] - movs r3, #0x32 - ldrsh r2, [r0, r3] - adds r0, r4, #0 - movs r3, #0x50 - bl sub_0806FCB8 - cmp r0, #0 - beq _08042F3C - movs r0, #6 - strb r0, [r4, #0xd] - movs r0, #0x28 - strb r0, [r4, #0xe] - b _08042F4E - .align 2, 0 -_08042F38: .4byte gPlayerEntity -_08042F3C: - movs r0, #5 - strb r0, [r4, #0xd] - adds r0, r4, #0 - movs r1, #0xf - bl InitAnimationForceUpdate - ldr r0, _08042FD4 @ =0x0000019B - bl SoundReq -_08042F4E: - ldr r0, [r4, #0x64] - adds r7, r0, #0 - adds r7, #0x18 - ldrb r0, [r7, #5] - cmp r0, #0x1f - bhi _08042F66 - movs r1, #0x80 - lsls r1, r1, #1 - adds r0, r1, #0 - ldrh r2, [r7, #4] - adds r0, r0, r2 - strh r0, [r7, #4] -_08042F66: - ldr r0, [r4, #0x50] - movs r1, #0x2e - ldrsh r3, [r0, r1] - mov r8, r3 - movs r2, #0x32 - ldrsh r0, [r0, r2] - adds r6, r0, #0 - subs r6, #0x10 - adds r0, r4, #0 - mov r1, r8 - adds r2, r6, #0 - movs r3, #0x30 - bl sub_0806FCB8 - adds r5, r4, #0 - adds r5, #0x79 - cmp r0, #0 - beq _08042FAC - movs r3, #0x2e - ldrsh r0, [r4, r3] - movs r2, #0x32 - ldrsh r1, [r4, r2] - mov r2, r8 - adds r3, r6, #0 - bl sub_080045D4 - adds r1, r0, #0 - ldrb r0, [r5] - subs r0, r0, r1 - adds r0, #4 - cmp r0, #8 - bhi _08042FAC - movs r0, #0x10 - eors r1, r0 - strb r1, [r5] -_08042FAC: - ldrb r0, [r5] - ldrb r3, [r4, #0x15] - cmp r0, r3 - beq _08042FC2 - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 - ldrb r0, [r4, #0x15] - lsls r0, r0, #3 - strb r0, [r7, #1] -_08042FC2: - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - ldrb r1, [r4, #0x15] - strb r1, [r0, #0x15] - bl ProcessMovement -_08042FCE: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08042FD4: .4byte 0x0000019B - - thumb_func_start sub_08042FD8 -sub_08042FD8: @ 0x08042FD8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r5, #0 - bl sub_08043C98 - cmp r0, #0 - bne _08043046 - adds r6, r5, #0 - adds r6, #0x5a - ldrb r1, [r6] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08043018 - movs r0, #0x20 - bl sub_080A7EE0 - adds r4, r0, #0 - cmp r4, #0 - beq _08043046 - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldrh r0, [r4, #0x36] - subs r0, #0x18 - movs r1, #0 - strh r0, [r4, #0x36] - strb r1, [r6] - b _08043046 -_08043018: - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08043046 - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08043036 - movs r0, #8 - strb r0, [r5, #0xd] - movs r0, #0x3c - strb r0, [r5, #0xe] - b _08043046 -_08043036: - movs r0, #3 - strb r0, [r5, #0xd] - movs r0, #0x3c - strb r0, [r5, #0xe] - adds r0, r5, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_08043046: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08043048 -sub_08043048: @ 0x08043048 - push {r4, lr} - adds r4, r0, #0 - bl sub_08043C98 - cmp r0, #0 - bne _080430CC - ldr r2, [r4, #0x64] - adds r1, r2, #0 - adds r1, #0x18 - ldrb r0, [r1, #5] - cmp r0, #0x4f - bhi _08043094 - movs r2, #0x80 - lsls r2, r2, #2 - adds r0, r2, #0 - ldrh r3, [r1, #4] - adds r0, r0, r3 - strh r0, [r1, #4] - ldrb r0, [r1, #5] - cmp r0, #0x4f - bls _080430C6 - movs r2, #0 - movs r3, #0x3b -_08043076: - ldr r0, [r4, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x3f - strb r3, [r0] - adds r2, #1 - cmp r2, #4 - bls _08043076 - ldr r0, _08043090 @ =0x00000153 - bl SoundReq - b _080430C6 - .align 2, 0 -_08043090: .4byte 0x00000153 -_08043094: - movs r3, #8 - ldrsh r0, [r1, r3] - lsls r0, r0, #3 - ldrh r1, [r2, #0x18] - adds r0, r0, r1 - strh r0, [r2, #0x18] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080430C6 - movs r0, #7 - strb r0, [r4, #0xd] - movs r2, #0 - movs r3, #0x39 -_080430B4: - ldr r0, [r4, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x3f - strb r3, [r0] - adds r2, #1 - cmp r2, #4 - bls _080430B4 -_080430C6: - adds r0, r4, #0 - bl sub_08043B9C -_080430CC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080430D0 -sub_080430D0: @ 0x080430D0 - push {r4, lr} - adds r4, r0, #0 - bl sub_08043C98 - cmp r0, #0 - bne _08043128 - ldr r1, [r4, #0x64] - adds r2, r1, #0 - adds r2, #0x18 - ldrh r0, [r2, #8] - ldrh r3, [r1, #0x18] - adds r0, r0, r3 - strh r0, [r1, #0x18] - ldr r1, _08043110 @ =0xFFFFFF00 - adds r0, r1, #0 - ldrh r3, [r2, #4] - adds r0, r0, r3 - strh r0, [r2, #4] - ldrb r0, [r2, #5] - cmp r0, #0x17 - bhi _08043128 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08043114 - movs r0, #8 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - b _08043128 - .align 2, 0 -_08043110: .4byte 0xFFFFFF00 -_08043114: - movs r0, #3 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldr r0, _0804312C @ =0x0000FF40 - strh r0, [r2, #0xa] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_08043128: - pop {r4, pc} - .align 2, 0 -_0804312C: .4byte 0x0000FF40 - - thumb_func_start sub_08043130 -sub_08043130: @ 0x08043130 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - ldr r1, [r6, #0x64] - adds r4, r1, #0 - adds r4, #0x18 - ldrb r0, [r4, #5] - cmp r0, #0 - beq _08043160 - adds r0, r6, #0 - bl sub_08043C98 - cmp r0, #0 - bne _080431E0 - ldrb r0, [r4, #5] - subs r0, #1 - strb r0, [r4, #5] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080431E0 - adds r0, r6, #0 - movs r1, #0xd - bl InitAnimationForceUpdate - b _080431E0 -_08043160: - ldrb r0, [r6, #0xe] - cmp r0, #0 - beq _08043186 - subs r0, #1 - strb r0, [r6, #0xe] - movs r5, #1 - movs r1, #0x28 -_0804316E: - ldr r0, [r6, #0x64] - adds r4, r0, r1 - ldrb r0, [r4, #5] - cmp r0, #0 - beq _0804317C - subs r0, #1 - strb r0, [r4, #5] -_0804317C: - adds r1, #0x10 - adds r5, #1 - cmp r5, #3 - bls _0804316E - b _080431E0 -_08043186: - ldr r1, [r1, #0xc] - ldrh r0, [r1, #0x36] - adds r0, #3 - strh r0, [r1, #0x36] - movs r5, #0 - movs r7, #4 - rsbs r7, r7, #0 -_08043194: - ldr r0, [r6, #0x64] - lsls r1, r5, #2 - adds r0, r0, r1 - ldr r4, [r0] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, r7 - ble _080431C4 - ldrb r0, [r4, #0x10] - movs r1, #0x7f - ands r1, r0 - strb r1, [r4, #0x10] - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - cmp r0, #1 - bne _080431BC - ldr r0, _080431E4 @ =0x00000161 - bl SoundReq -_080431BC: - ldrb r1, [r4, #0x18] - adds r0, r7, #0 - ands r0, r1 - strb r0, [r4, #0x18] -_080431C4: - adds r5, #1 - cmp r5, #3 - bls _08043194 - ldrb r0, [r6, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - bne _080431E0 - movs r0, #9 - strb r0, [r6, #0xd] - movs r0, #0x3c - strb r0, [r6, #0xe] - adds r0, r6, #0 - bl sub_0804AA1C -_080431E0: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080431E4: .4byte 0x00000161 - - thumb_func_start sub_080431E8 -sub_080431E8: @ 0x080431E8 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _0804324E - movs r0, #6 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - movs r5, #0 - ldr r7, _08043250 @ =gUnk_080D130C - movs r6, #0x18 -_08043206: - ldr r1, [r4, #0x64] - adds r1, r1, r6 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r7 - ldrh r0, [r0] - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #8 - strh r0, [r1, #4] - ldr r0, _08043254 @ =gUnk_080D1414 - adds r0, r5, r0 - ldrb r0, [r0] - strb r0, [r1, #0xc] - cmp r5, #3 - bne _08043230 - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - movs r1, #0x11 - bl InitializeAnimation -_08043230: - adds r6, #0x10 - adds r5, #1 - cmp r5, #3 - bls _08043206 - ldr r2, [r4, #0x64] - ldr r1, _08043258 @ =gUnk_080D1310 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r2, #0x20] - adds r0, r4, #0 - movs r1, #0xe - bl InitAnimationForceUpdate -_0804324E: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08043250: .4byte gUnk_080D130C -_08043254: .4byte gUnk_080D1414 -_08043258: .4byte gUnk_080D1310 - - thumb_func_start sub_0804325C -sub_0804325C: @ 0x0804325C - push {r4, lr} - adds r4, r0, #0 - bl sub_08043CD4 - ldr r0, _0804329C @ =gUnk_080D1314 - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_08043A10 - adds r2, r4, #0 - adds r2, #0x78 - ldrb r0, [r2] - adds r1, r0, #0 - cmp r1, #0 - beq _080432A4 - cmp r1, #2 - bls _080432A0 - subs r0, #2 - strb r0, [r2] - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x10] - ldrh r0, [r1, #0x36] - ldrb r2, [r2] - adds r0, r0, r2 - strh r0, [r1, #0x36] - b _080432A4 - .align 2, 0 -_0804329C: .4byte gUnk_080D1314 -_080432A0: - movs r0, #0 - strb r0, [r2] -_080432A4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080432A8 -sub_080432A8: @ 0x080432A8 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - movs r3, #3 - movs r2, #0 - ldr r0, [r4, #0x64] - adds r1, r0, #0 - adds r1, #0x48 - ldrb r0, [r1, #0xc] - cmp r0, #2 - bls _080432C2 - subs r0, #1 - strb r0, [r1, #0xc] - movs r2, #1 -_080432C2: - subs r3, #1 - cmp r3, #0 - blt _080432E0 - lsls r0, r3, #4 - adds r0, #0x18 - ldr r1, [r4, #0x64] - adds r1, r1, r0 - ldrb r0, [r1, #0xc] - cmp r0, #2 - bls _080432C2 - subs r0, #1 - strb r0, [r1, #0xc] - adds r2, #1 - cmp r2, #1 - ble _080432C2 -_080432E0: - ldr r0, [r4, #0x64] - adds r1, r0, #0 - adds r1, #0x18 - ldrb r0, [r1, #5] - subs r0, #2 - strb r0, [r1, #5] - movs r3, #0 - movs r6, #0x80 - movs r7, #4 - rsbs r7, r7, #0 - movs r5, #1 -_080432F6: - ldr r0, [r4, #0x64] - lsls r1, r3, #2 - adds r0, r0, r1 - ldr r2, [r0] - movs r1, #0x36 - ldrsh r0, [r2, r1] - cmp r0, #3 - bgt _08043316 - ldrb r0, [r2, #0x10] - orrs r0, r6 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0x18] - adds r0, r7, #0 - ands r0, r1 - orrs r0, r5 - strb r0, [r2, #0x18] -_08043316: - adds r3, #1 - cmp r3, #3 - ble _080432F6 - ldr r1, [r4, #0x64] - ldr r0, [r1] - ldrb r0, [r0, #0x18] - lsls r0, r0, #0x1e - lsrs r2, r0, #0x1e - cmp r2, #1 - bne _08043348 - adds r0, r1, #0 - adds r0, #0x34 - ldrb r0, [r0] - cmp r0, #2 - bhi _08043348 - strb r2, [r4, #0xd] - movs r0, #0x1e - strb r0, [r4, #0xe] - movs r0, #0x80 - lsls r0, r0, #7 - strh r0, [r1, #0x1c] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x10] - bl sub_0804AA1C -_08043348: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0804334C -sub_0804334C: @ 0x0804334C - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08043388 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0804341C - movs r5, #0 - movs r7, #0x80 - movs r6, #4 - rsbs r6, r6, #0 - movs r3, #1 -_0804336A: - ldr r0, [r4, #0x64] - lsls r1, r5, #2 - adds r0, r0, r1 - ldr r2, [r0] - ldrb r0, [r2, #0x10] - orrs r0, r7 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0x18] - adds r0, r6, #0 - ands r0, r1 - orrs r0, r3 - strb r0, [r2, #0x18] - adds r5, #1 - cmp r5, #4 - bls _0804336A -_08043388: - ldr r3, [r4, #0x64] - adds r2, r3, #0 - adds r2, #0x18 - ldr r1, _080433AC @ =gUnk_080D131C - ldrb r0, [r4, #0xb] - adds r0, r0, r1 - ldrb r0, [r0] - ldrb r1, [r2, #1] - subs r0, r0, r1 - adds r0, #1 - cmp r0, #2 - bls _080433B0 - ldrh r0, [r2, #8] - ldrh r1, [r3, #0x18] - adds r0, r0, r1 - strh r0, [r3, #0x18] - movs r7, #0 - b _080433B2 - .align 2, 0 -_080433AC: .4byte gUnk_080D131C -_080433B0: - movs r7, #1 -_080433B2: - adds r0, r4, #0 - bl sub_08043B9C - movs r5, #0 - movs r6, #0x18 -_080433BC: - ldr r0, [r4, #0x64] - adds r2, r0, r6 - ldr r0, _080433E4 @ =gUnk_080D1414 - adds r0, r5, r0 - ldrb r1, [r2, #0xc] - ldrb r3, [r0] - cmp r3, r1 - bls _080433E8 - adds r0, r1, #1 - strb r0, [r2, #0xc] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r3, r0 - bne _0804341C - movs r0, #0xaf - lsls r0, r0, #1 - bl SoundReq - b _0804341C - .align 2, 0 -_080433E4: .4byte gUnk_080D1414 -_080433E8: - cmp r7, #0 - beq _08043414 - cmp r5, #4 - bne _08043414 - adds r0, r4, #0 - bl sub_08043BC8 - adds r0, r4, #0 - movs r1, #7 - bl InitAnimationForceUpdate - adds r1, r4, #0 - adds r1, #0x7e - ldrb r0, [r1] - cmp r0, #0 - beq _08043414 - movs r0, #0 - strb r0, [r1] - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x14] - movs r0, #2 - strb r0, [r1, #0xd] -_08043414: - adds r6, #0x10 - adds r5, #1 - cmp r5, #4 - bls _080433BC -_0804341C: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08043420 -sub_08043420: @ 0x08043420 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0804343C @ =gUnk_080D1320 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_08043ABC - pop {r4, pc} - .align 2, 0 -_0804343C: .4byte gUnk_080D1320 - - thumb_func_start sub_08043440 -sub_08043440: @ 0x08043440 - push {r4, r5, r6, lr} - adds r3, r0, #0 - movs r2, #0 - movs r5, #0 - movs r6, #0 - movs r4, #0x18 -_0804344C: - ldr r0, [r3, #0x64] - adds r1, r0, r4 - ldrb r0, [r1, #5] - cmp r0, #0x10 - bls _0804345E - subs r0, #0x10 - strb r0, [r1, #5] - adds r5, #1 - b _08043460 -_0804345E: - strh r6, [r1, #4] -_08043460: - adds r4, #0x10 - adds r2, #1 - cmp r2, #4 - bls _0804344C - cmp r5, #0 - bne _0804348C - movs r2, #0 - movs r4, #0x80 - lsls r4, r4, #8 -_08043472: - ldr r0, [r3, #0x64] - lsls r1, r2, #4 - adds r0, r0, r1 - strh r4, [r0, #0x18] - adds r2, #1 - cmp r2, #4 - bls _08043472 - movs r0, #1 - strb r0, [r3, #0xd] - adds r0, r3, #0 - movs r1, #0x10 - bl InitAnimationForceUpdate -_0804348C: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08043490 -sub_08043490: @ 0x08043490 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x10] - mov ip, r0 - ldrh r1, [r0, #0x36] - movs r2, #0x36 - ldrsh r0, [r0, r2] - movs r2, #4 - rsbs r2, r2, #0 - cmp r0, r2 - bge _080434C4 - movs r0, #0xc0 - lsls r0, r0, #9 - mov r3, ip - str r0, [r3, #0x20] - movs r0, #0 - movs r1, #2 - strb r1, [r4, #0xd] - adds r2, r4, #0 - adds r2, #0x7e - strb r0, [r2] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x14] - strb r1, [r0, #0xd] - b _08043514 -_080434C4: - subs r0, r1, #2 - mov r1, ip - strh r0, [r1, #0x36] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _08043514 - ldrb r0, [r1, #0x10] - movs r3, #0x80 - orrs r0, r3 - strb r0, [r1, #0x10] - ldrb r1, [r1, #0x18] - adds r0, r2, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - mov r2, ip - strb r0, [r2, #0x18] - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xef - ands r0, r1 - strb r0, [r2] - mov r1, ip - adds r1, #0x3f - movs r0, #0x3a - strb r0, [r1] - ldr r0, _0804351C @ =gUnk_080FD450 - mov r1, ip - str r0, [r1, #0x48] - ldr r0, [r4, #0x64] - ldr r1, [r0, #8] - ldrb r0, [r1, #0x10] - orrs r3, r0 - strb r3, [r1, #0x10] - ldr r0, [r4, #0x64] - ldr r2, [r0, #0xc] - ldrb r1, [r2, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2, #0x10] -_08043514: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - .align 2, 0 -_0804351C: .4byte gUnk_080FD450 - - thumb_func_start sub_08043520 -sub_08043520: @ 0x08043520 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, [r5, #0x64] - ldr r4, [r0, #0x10] - movs r1, #0xd0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl sub_08003FC4 - ldr r0, [r4, #0x20] - cmp r0, #0 - bge _08043556 - movs r0, #0x36 - ldrsh r1, [r4, r0] - movs r0, #6 - rsbs r0, r0, #0 - cmp r1, r0 - ble _08043556 - ldr r0, _08043558 @ =0x0000FFFA - strh r0, [r4, #0x36] - movs r0, #3 - strb r0, [r5, #0xd] - adds r1, r5, #0 - adds r1, #0x7a - movs r0, #0xe1 - lsls r0, r0, #2 - strh r0, [r1] -_08043556: - pop {r4, r5, pc} - .align 2, 0 -_08043558: .4byte 0x0000FFFA - - thumb_func_start sub_0804355C -sub_0804355C: @ 0x0804355C - push {r4, lr} - adds r4, r0, #0 - bl sub_08043DB0 - adds r1, r4, #0 - adds r1, #0x7a - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08043578 - movs r0, #4 - strb r0, [r4, #0xd] -_08043578: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - - thumb_func_start sub_08043580 -sub_08043580: @ 0x08043580 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x10] - ldrh r0, [r1, #0x36] - adds r0, #3 - strh r0, [r1, #0x36] - movs r2, #0 - movs r5, #4 - rsbs r5, r5, #0 - movs r6, #0x7f -_08043596: - ldr r0, [r4, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r3, [r0] - movs r1, #0x36 - ldrsh r0, [r3, r1] - cmp r0, r5 - ble _080435B6 - ldrb r1, [r3, #0x10] - adds r0, r6, #0 - ands r0, r1 - strb r0, [r3, #0x10] - ldrb r1, [r3, #0x18] - adds r0, r5, #0 - ands r0, r1 - strb r0, [r3, #0x18] -_080435B6: - adds r2, #1 - cmp r2, #4 - bls _08043596 - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - cmp r0, #0 - bne _080435EE - movs r0, #5 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldr r0, [r4, #0x64] - ldr r3, [r0, #0x10] - adds r2, r3, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0x10 - orrs r0, r1 - strb r0, [r2] - adds r1, r3, #0 - adds r1, #0x3f - movs r0, #0x39 - strb r0, [r1] - ldr r0, _080435F0 @ =gUnk_080FD538 - str r0, [r3, #0x48] - adds r0, r4, #0 - bl sub_0804AA1C -_080435EE: - pop {r4, r5, r6, pc} - .align 2, 0 -_080435F0: .4byte gUnk_080FD538 - - thumb_func_start sub_080435F4 -sub_080435F4: @ 0x080435F4 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08043674 - movs r0, #6 - strb r0, [r4, #0xc] - movs r0, #1 - strb r0, [r4, #0xd] - strb r0, [r4, #0xe] - movs r5, #0 - ldr r0, _08043658 @ =gUnk_080D1338 - mov sb, r0 - movs r0, #0 - mov r8, r0 - movs r6, #0x18 - ldr r7, _0804365C @ =gUnk_080D133C -_08043622: - ldr r1, [r4, #0x64] - adds r1, r1, r6 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - add r0, sb - ldrh r0, [r0] - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #7 - strh r0, [r1, #4] - mov r0, r8 - strb r0, [r1, #0xc] - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r7 - ldrh r0, [r0] - strh r0, [r1, #8] - ldr r0, [r4, #0x64] - lsls r1, r5, #2 - adds r0, r0, r1 - ldr r2, [r0] - cmp r5, #0 - bne _08043660 - adds r0, r2, #0 - bl sub_08043B9C - b _0804366C - .align 2, 0 -_08043658: .4byte gUnk_080D1338 -_0804365C: .4byte gUnk_080D133C -_08043660: - ldr r0, _0804367C @ =gUnk_080D1340 - adds r0, r5, r0 - ldrb r1, [r0] - adds r0, r2, #0 - bl InitializeAnimation -_0804366C: - adds r6, #0x10 - adds r5, #1 - cmp r5, #4 - bls _08043622 -_08043674: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0804367C: .4byte gUnk_080D1340 - - thumb_func_start sub_08043680 -sub_08043680: @ 0x08043680 - push {lr} - ldr r2, _08043694 @ =gUnk_080D1348 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08043694: .4byte gUnk_080D1348 - - thumb_func_start sub_08043698 -sub_08043698: @ 0x08043698 - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0x3c - strb r0, [r4, #0xe] - movs r3, #0 - movs r5, #0x7f -_080436A8: - ldr r0, [r4, #0x64] - lsls r1, r3, #2 - adds r0, r0, r1 - ldr r2, [r0] - ldrb r1, [r2, #0x10] - adds r0, r5, #0 - ands r0, r1 - strb r0, [r2, #0x10] - adds r3, #1 - cmp r3, #4 - bls _080436A8 - pop {r4, r5, pc} - - thumb_func_start sub_080436C0 -sub_080436C0: @ 0x080436C0 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _080436FC - movs r0, #0x14 - strb r0, [r4, #0xe] - movs r0, #2 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - movs r1, #0x51 - movs r2, #0 - bl CreateFx - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - str r5, [r0, #0x64] - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl DeleteEntity -_080436FC: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08043700 -sub_08043700: @ 0x08043700 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _08043734 - movs r0, #0x14 - strb r0, [r4, #0xe] - movs r0, #3 - strb r0, [r4, #0xd] - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - movs r1, #0x51 - movs r2, #0 - bl CreateFx - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - str r5, [r0, #0x64] - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl DeleteEntity -_08043734: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08043738 -sub_08043738: @ 0x08043738 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _0804376C - movs r0, #0x14 - strb r0, [r4, #0xe] - movs r0, #4 - strb r0, [r4, #0xd] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - movs r1, #0x51 - movs r2, #0 - bl CreateFx - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - str r5, [r0, #0x64] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - bl DeleteEntity -_0804376C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08043770 -sub_08043770: @ 0x08043770 - push {r4, r5, lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #0 - bne _080437D8 - ldr r0, [r2, #0x64] - ldr r3, [r0, #0x14] - ldr r0, _080437AC @ =gScreenTransition - adds r5, r0, #0 - adds r5, #0x39 - ldrb r1, [r5] - movs r0, #0xc - ands r0, r1 - cmp r0, #0 - bne _0804379A - movs r0, #2 - strb r0, [r3, #0xd] -_0804379A: - ldrb r0, [r2, #0xb] - cmp r0, #0 - bne _080437B0 - ldr r0, [r3, #0x64] - str r4, [r0, #0x14] - ldrb r1, [r5] - movs r0, #0xfe - b _080437B8 - .align 2, 0 -_080437AC: .4byte gScreenTransition -_080437B0: - ldr r0, [r3, #0x64] - str r4, [r0, #0x18] - ldrb r1, [r5] - movs r0, #0xfd -_080437B8: - ands r0, r1 - strb r0, [r5] - ldr r0, [r2, #0x64] - ldr r0, [r0, #0x10] - movs r1, #0 - str r1, [r0, #0x64] - ldr r0, [r2, #0x64] - ldr r0, [r0, #0x10] - adds r0, #0x45 - strb r1, [r0] - ldr r1, [r2, #0x68] - ldr r0, [r2, #0x64] - ldr r0, [r0, #0x10] - str r0, [r1, #0x50] - bl DeleteThisEntity -_080437D8: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080437DC -sub_080437DC: @ 0x080437DC - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - ldr r0, _0804392C @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x43 - bls _080437EE - b _08043934 -_080437EE: - movs r0, #0x68 - bl zMalloc - adds r7, r0, #0 - cmp r7, #0 - bne _080437FC - b _08043934 -_080437FC: - adds r2, r6, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r4, #8 - rsbs r4, r4, #0 - adds r0, r4, #0 - ands r0, r1 - movs r1, #5 - mov r8, r1 - mov r1, r8 - orrs r0, r1 - strb r0, [r2] - adds r1, r6, #0 - adds r1, #0x3c - ldrb r0, [r1] - movs r5, #0x10 - orrs r0, r5 - strb r0, [r1] - str r7, [r6, #0x64] - str r6, [r7] - movs r0, #0x52 - movs r1, #1 - bl CreateEnemy - adds r2, r0, #0 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - adds r0, r4, #0 - ands r0, r1 - mov r1, r8 - orrs r0, r1 - strb r0, [r3] - adds r1, r2, #0 - adds r1, #0x3c - ldrb r0, [r1] - orrs r0, r5 - strb r0, [r1] - str r7, [r2, #0x64] - str r2, [r7, #4] - adds r0, r6, #0 - adds r1, r2, #0 - bl CopyPosition - movs r0, #0x52 - movs r1, #2 - bl CreateEnemy - adds r2, r0, #0 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - adds r0, r4, #0 - ands r0, r1 - mov r1, r8 - orrs r0, r1 - strb r0, [r3] - adds r1, r2, #0 - adds r1, #0x3c - ldrb r0, [r1] - orrs r0, r5 - strb r0, [r1] - str r7, [r2, #0x64] - str r2, [r7, #8] - adds r0, r6, #0 - adds r1, r2, #0 - bl CopyPosition - movs r0, #0x52 - movs r1, #3 - bl CreateEnemy - adds r2, r0, #0 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - adds r0, r4, #0 - ands r0, r1 - mov r1, r8 - orrs r0, r1 - strb r0, [r3] - adds r1, r2, #0 - adds r1, #0x3c - ldrb r0, [r1] - orrs r0, r5 - strb r0, [r1] - str r7, [r2, #0x64] - str r2, [r7, #0xc] - adds r0, r6, #0 - adds r1, r2, #0 - bl CopyPosition - movs r0, #0x52 - movs r1, #4 - bl CreateEnemy - adds r2, r0, #0 - adds r1, r2, #0 - adds r1, #0x29 - ldrb r0, [r1] - ands r4, r0 - mov r0, r8 - orrs r4, r0 - strb r4, [r1] - adds r1, #0x13 - ldrb r0, [r1] - orrs r5, r0 - strb r5, [r1] - str r7, [r2, #0x64] - str r2, [r7, #0x10] - adds r0, r6, #0 - adds r1, r2, #0 - bl CopyPosition - ldr r0, [r6, #0x50] - str r0, [r7, #0x14] - ldr r1, _08043930 @ =gUnk_080D135C - ldrb r0, [r6, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r2, [r0] - movs r3, #0 - strh r2, [r7, #0x18] - movs r1, #0x80 - lsls r1, r1, #7 - strh r1, [r7, #0x1c] - adds r0, r7, #0 - adds r0, #0x24 - strb r3, [r0] - strh r2, [r7, #0x28] - strh r1, [r7, #0x2c] - adds r0, #0x10 - strb r3, [r0] - strh r2, [r7, #0x38] - strh r1, [r7, #0x3c] - adds r0, #0x10 - strb r3, [r0] - adds r0, #4 - strh r2, [r0] - adds r0, #4 - strh r1, [r0] - adds r0, #8 - strb r3, [r0] - adds r0, #4 - strh r2, [r0] - adds r0, #4 - strh r1, [r0] - adds r0, #8 - strb r3, [r0] - movs r0, #1 - b _08043936 - .align 2, 0 -_0804392C: .4byte gEntCount -_08043930: .4byte gUnk_080D135C -_08043934: - movs r0, #0 -_08043936: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0804393C -sub_0804393C: @ 0x0804393C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldr r0, [r5, #0x64] - ldr r1, [r0] - adds r0, r1, #0 - adds r0, #0x7c - ldrb r0, [r0] - lsls r2, r0, #0x18 - cmp r2, #0 - beq _0804397C - adds r0, r1, #0 - adds r0, #0x7d - ldrb r0, [r0] - ldrb r1, [r5, #0xa] - cmp r0, r1 - bhi _0804397C - ldr r4, _08043978 @ =gUnk_080D1362 - ldrb r3, [r5, #0xa] - lsls r1, r3, #4 - lsrs r0, r2, #0x1b - movs r2, #0xf - ands r0, r2 - adds r1, r1, r0 - adds r1, r1, r4 - ldrb r4, [r1] - adds r6, r3, #0 - b _08043980 - .align 2, 0 -_08043978: .4byte gUnk_080D1362 -_0804397C: - movs r4, #0 - ldrb r6, [r5, #0xa] -_08043980: - lsls r0, r6, #4 - adds r0, #0x18 - ldr r2, [r5, #0x64] - mov ip, r2 - adds r2, r2, r0 - ldrb r0, [r2, #0xc] - adds r0, r4, r0 - lsls r4, r0, #8 - ldr r3, _08043A0C @ =gSineTable - ldrb r1, [r2, #5] - adds r0, r1, #0 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r3 - movs r7, #0 - ldrsh r0, [r0, r7] - rsbs r0, r0, #0 - adds r7, r0, #0 - muls r7, r4, r7 - mov r8, r7 - movs r0, #0x7f - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r3 - movs r7, #0 - ldrsh r0, [r1, r7] - muls r0, r4, r0 - cmp r0, #0 - bge _080439BC - adds r0, #0xff -_080439BC: - asrs r4, r0, #8 - ldrb r1, [r2, #1] - lsls r0, r1, #1 - adds r0, r0, r3 - movs r2, #0 - ldrsh r0, [r0, r2] - adds r2, r0, #0 - muls r2, r4, r2 - adds r1, #0x40 - lsls r1, r1, #1 - adds r1, r1, r3 - movs r3, #0 - ldrsh r0, [r1, r3] - rsbs r0, r0, #0 - adds r3, r0, #0 - muls r3, r4, r3 - adds r0, r6, #1 - lsls r0, r0, #2 - add r0, ip - ldr r0, [r0] - adds r1, r5, #0 - bl PositionRelative - ldr r0, [r5, #0x34] - add r0, r8 - str r0, [r5, #0x34] - ldr r1, [r5, #0x64] - ldrb r0, [r5, #0xa] - adds r0, #1 - lsls r0, r0, #2 - adds r1, r1, r0 - ldr r0, [r1] - adds r0, #0x63 - ldrb r1, [r0] - adds r0, r5, #0 - adds r0, #0x63 - strb r1, [r0] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08043A0C: .4byte gSineTable - - thumb_func_start sub_08043A10 -sub_08043A10: @ 0x08043A10 - push {r4, lr} - adds r4, r0, #0 - bl sub_08043B7C - ldr r0, [r4, #0x64] - ldr r0, [r0, #0x10] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x10] - ldrh r0, [r1, #0x32] - subs r0, #8 - strh r0, [r1, #0x32] - ldr r0, [r4, #0x64] - ldr r1, [r0, #0x10] - ldrh r0, [r1, #0x36] - subs r0, #8 - strh r0, [r1, #0x36] - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r1, [r0] - ldrh r0, [r1, #0x32] - adds r0, #1 - strh r0, [r1, #0x32] - ldr r0, [r4, #0x64] - ldr r1, [r0] - adds r1, #0x63 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - adds r4, #0x7c - ldrb r0, [r4] - cmp r0, #0 - beq _08043A76 - subs r0, #1 - strb r0, [r4] -_08043A76: - pop {r4, pc} - - thumb_func_start sub_08043A78 -sub_08043A78: @ 0x08043A78 - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x7c - movs r0, #0 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08043B7C - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r1, [r0] - ldrh r0, [r1, #0x32] - adds r0, #1 - strh r0, [r1, #0x32] - ldr r0, [r4, #0x64] - ldr r1, [r0] - adds r1, #0x63 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08043ABC -sub_08043ABC: @ 0x08043ABC - push {r4, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x7c - movs r0, #0 - strb r0, [r1] - adds r0, r4, #0 - bl sub_08043B7C - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r0, [r0] - bl sub_0804393C - ldr r0, [r4, #0x64] - ldr r1, [r0] - ldrh r0, [r1, #0x32] - adds r0, #1 - strh r0, [r1, #0x32] - ldr r0, [r4, #0x64] - ldr r1, [r0] - adds r1, #0x63 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08043B08 -sub_08043B08: @ 0x08043B08 - push {r4, r5, r6, lr} - ldrb r3, [r0, #0xa] - lsls r1, r3, #4 - adds r4, r1, #0 - adds r4, #8 - ldr r2, [r0, #0x64] - adds r6, r2, r4 - adds r1, #0x18 - adds r4, r2, r1 - ldr r0, _08043B40 @ =gUnk_080D13B2 - adds r3, r3, r0 - ldrb r5, [r3] - ldr r0, [r2] - ldrb r0, [r0, #0xb] - cmp r0, #0 - bne _08043B44 - ldrb r1, [r6, #1] - ldrb r0, [r4, #1] - subs r0, r1, r0 - lsls r0, r0, #0x18 - asrs r3, r0, #0x18 - cmp r5, r3 - bhs _08043B5E - cmp r3, #0 - ble _08043B56 - subs r0, r1, r5 - b _08043B5C - .align 2, 0 -_08043B40: .4byte gUnk_080D13B2 -_08043B44: - ldrb r0, [r4, #1] - ldrb r1, [r6, #1] - subs r0, r0, r1 - lsls r0, r0, #0x18 - asrs r3, r0, #0x18 - cmp r5, r3 - bhs _08043B5E - cmp r3, #0 - bge _08043B5A -_08043B56: - strb r1, [r4, #1] - b _08043B5E -_08043B5A: - adds r0, r1, r5 -_08043B5C: - strb r0, [r4, #1] -_08043B5E: - ldrb r2, [r6, #5] - ldrb r0, [r4, #5] - subs r3, r2, r0 - lsls r1, r5, #1 - adds r0, r3, r5 - cmp r1, r0 - bhs _08043B78 - cmp r3, #0 - ble _08043B74 - subs r0, r2, r5 - b _08043B76 -_08043B74: - adds r0, r2, r5 -_08043B76: - strb r0, [r4, #5] -_08043B78: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08043B7C -sub_08043B7C: @ 0x08043B7C - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x64] - ldr r0, [r0, #4] - bl sub_08043B08 - ldr r0, [r4, #0x64] - ldr r0, [r0, #8] - bl sub_08043B08 - ldr r0, [r4, #0x64] - ldr r0, [r0, #0xc] - bl sub_08043B08 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08043B9C -sub_08043B9C: @ 0x08043B9C - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x64] - ldrb r0, [r0, #0x19] - adds r0, #4 - movs r1, #0xff - ands r0, r1 - asrs r0, r0, #3 - ldr r1, _08043BC4 @ =gUnk_080D13B7 - adds r0, r0, r1 - ldrb r1, [r0] - ldrb r0, [r2, #0x1e] - subs r0, #1 - cmp r1, r0 - beq _08043BC0 - adds r0, r2, #0 - bl InitAnimationForceUpdate -_08043BC0: - pop {pc} - .align 2, 0 -_08043BC4: .4byte gUnk_080D13B7 - - thumb_func_start sub_08043BC8 -sub_08043BC8: @ 0x08043BC8 - movs r1, #2 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0xb] - lsls r2, r2, #2 - ldr r1, _08043BEC @ =gUnk_080D13D8 - adds r2, r2, r1 - ldr r1, [r0, #0x64] - adds r1, #0x18 - ldrh r0, [r2] - strh r0, [r1, #8] - ldrh r0, [r2, #2] - strh r0, [r1, #0xa] - movs r0, #0x5a - strb r0, [r1, #0xd] - movs r0, #0x28 - strb r0, [r1, #0xe] - bx lr - .align 2, 0 -_08043BEC: .4byte gUnk_080D13D8 - - thumb_func_start sub_08043BF0 -sub_08043BF0: @ 0x08043BF0 - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x64] - adds r1, r0, #0 - adds r1, #0x18 - ldrb r0, [r2, #0xb] - cmp r0, #0 - bne _08043C18 - ldrb r0, [r1, #1] - movs r1, #6 - cmp r0, #0x2f - bls _08043C2E - movs r1, #7 - cmp r0, #0x5f - bls _08043C2E - movs r1, #9 - cmp r0, #0x8f - bhi _08043C2E - movs r1, #8 - b _08043C2E -_08043C18: - ldrb r0, [r1, #1] - movs r1, #8 - cmp r0, #0xd0 - bhi _08043C2E - movs r1, #7 - cmp r0, #0xa0 - bhi _08043C2E - movs r1, #5 - cmp r0, #0x70 - bls _08043C2E - movs r1, #6 -_08043C2E: - adds r0, r2, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, r1 - beq _08043C3E - adds r0, r2, #0 - bl InitAnimationForceUpdate -_08043C3E: - pop {pc} - - thumb_func_start sub_08043C40 -sub_08043C40: @ 0x08043C40 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - ldrb r0, [r1, #5] - cmp r0, #0x1f - bhi _08043C54 - ldr r6, _08043C50 @ =gUnk_080D13E0 - b _08043C68 - .align 2, 0 -_08043C50: .4byte gUnk_080D13E0 -_08043C54: - cmp r0, #0x2f - bhi _08043C60 - ldr r6, _08043C5C @ =gUnk_080D13E3 - b _08043C68 - .align 2, 0 -_08043C5C: .4byte gUnk_080D13E3 -_08043C60: - ldr r6, _08043C84 @ =gUnk_080D13E0 - cmp r0, #0x77 - bhi _08043C68 - adds r6, #6 -_08043C68: - movs r4, #0 - movs r5, #0x28 -_08043C6C: - ldr r0, [r7, #0x64] - adds r3, r0, r5 - adds r0, r6, r4 - ldrb r1, [r3, #0xc] - ldrb r2, [r0] - adds r0, r1, #0 - cmp r2, r0 - beq _08043C8C - cmp r2, r0 - bhs _08043C88 - subs r0, r1, #1 - b _08043C8A - .align 2, 0 -_08043C84: .4byte gUnk_080D13E0 -_08043C88: - adds r0, r1, #1 -_08043C8A: - strb r0, [r3, #0xc] -_08043C8C: - adds r5, #0x10 - adds r4, #1 - cmp r4, #2 - bls _08043C6C - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08043C98 -sub_08043C98: @ 0x08043C98 - push {lr} - adds r3, r0, #0 - ldr r0, [r3, #0x64] - ldr r1, [r0, #8] - ldr r2, [r0, #0xc] - adds r1, #0x41 - ldrb r0, [r1] - cmp r0, #0x9d - beq _08043CB4 - adds r0, r2, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x9d - bne _08043CD0 -_08043CB4: - adds r0, r3, #0 - bl sub_08043D08 - ldr r0, _08043CCC @ =gScreenTransition - adds r0, #0x38 - ldrb r2, [r0] - movs r1, #2 - orrs r1, r2 - strb r1, [r0] - movs r0, #1 - b _08043CD2 - .align 2, 0 -_08043CCC: .4byte gScreenTransition -_08043CD0: - movs r0, #0 -_08043CD2: - pop {pc} - - thumb_func_start sub_08043CD4 -sub_08043CD4: @ 0x08043CD4 - push {r4, r5, lr} - adds r3, r0, #0 - movs r2, #0 - adds r4, r3, #0 - adds r4, #0x7c - movs r5, #0x78 - movs r0, #0x7d - adds r0, r0, r3 - mov ip, r0 -_08043CE6: - ldr r0, [r3, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x9d - bne _08043CFE - strb r5, [r4] - mov r0, ip - strb r2, [r0] - b _08043D04 -_08043CFE: - adds r2, #1 - cmp r2, #4 - bls _08043CE6 -_08043D04: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08043D08 -sub_08043D08: @ 0x08043D08 - push {r4, r5, lr} - adds r5, r0, #0 - movs r1, #0 - movs r0, #7 - strb r0, [r5, #0xc] - strb r1, [r5, #0xd] - adds r0, r5, #0 - movs r1, #0xd - bl InitAnimationForceUpdate - ldr r0, [r5, #0x64] - ldr r4, [r0, #0x10] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #0x13 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0804AA1C - adds r0, r4, #0 - movs r1, #0x51 - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _08043D78 - ldr r1, _08043DAC @ =gUnk_080D13E9 - ldrb r0, [r5, #0xb] - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r2, #0x2e] - adds r0, r0, r1 - strh r0, [r2, #0x2e] - ldrh r0, [r2, #0x32] - subs r0, #6 - strh r0, [r2, #0x32] - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2] -_08043D78: - ldr r0, [r5, #0x64] - ldr r0, [r0, #0xc] - adds r1, r4, #0 - bl CopyPosition - ldr r1, [r5, #0x64] - adds r1, #0x54 - ldrh r0, [r4, #0x36] - ldrb r1, [r1] - adds r0, r0, r1 - strh r0, [r4, #0x36] - movs r2, #0 - movs r3, #0x39 -_08043D92: - ldr r0, [r5, #0x64] - lsls r1, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - adds r0, #0x3f - strb r3, [r0] - adds r2, #1 - cmp r2, #4 - bls _08043D92 - movs r0, #0xfe - bl EnqueueSFX - pop {r4, r5, pc} - .align 2, 0 -_08043DAC: .4byte gUnk_080D13E9 - - thumb_func_start sub_08043DB0 -sub_08043DB0: @ 0x08043DB0 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r0, _08043E48 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08043EAC - ldr r0, [r5, #0x64] - ldr r2, [r0, #0xc] - movs r1, #0x2e - ldrsh r0, [r2, r1] - ldr r6, _08043E4C @ =gRoomControls - ldrh r1, [r6, #6] - subs r0, r0, r1 - movs r3, #0x32 - ldrsh r1, [r2, r3] - ldrh r2, [r6, #8] - subs r1, r1, r2 - adds r1, #2 - movs r2, #3 - movs r3, #3 - bl CheckPlayerInRegion - cmp r0, #0 - beq _08043EAC - ldr r0, _08043E50 @ =gUnk_080D13EC - bl DoExitTransition - ldr r4, _08043E54 @ =gScreenTransition - adds r0, r4, #0 - adds r0, #0x39 - ldrb r1, [r0] - movs r0, #3 - ands r0, r1 - cmp r0, #3 - beq _08043DFE - movs r0, #1 - strb r0, [r4, #0xd] -_08043DFE: - adds r0, r5, #0 - adds r0, #0x7a - ldrh r0, [r0] - movs r1, #0x3c - bl __divsi3 - movs r1, #0x1e - subs r1, r1, r0 - adds r0, r4, #0 - adds r0, #0x3d - strb r1, [r0] - ldrb r1, [r5, #0xb] - subs r0, #1 - strb r1, [r0] - ldr r0, [r5, #0x64] - ldr r2, [r0, #0x14] - ldrh r1, [r2, #0x2e] - adds r0, r4, #0 - adds r0, #0x40 - strh r1, [r0] - ldrh r0, [r2, #0x32] - adds r1, r4, #0 - adds r1, #0x42 - strh r0, [r1] - ldr r0, [r2, #0x64] - ldr r3, [r0, #0x14] - cmp r3, #0 - beq _08043E58 - ldrh r1, [r3, #0x2e] - adds r0, r4, #0 - adds r0, #0x44 - strh r1, [r0] - ldrh r1, [r3, #0x32] - adds r0, #2 - strh r1, [r0] - b _08043E70 - .align 2, 0 -_08043E48: .4byte gPlayerState -_08043E4C: .4byte gRoomControls -_08043E50: .4byte gUnk_080D13EC -_08043E54: .4byte gScreenTransition -_08043E58: - movs r1, #0x88 - lsls r1, r1, #1 - adds r0, r1, #0 - ldrh r3, [r6, #6] - adds r0, r0, r3 - adds r1, r4, #0 - adds r1, #0x44 - strh r0, [r1] - ldrh r0, [r6, #8] - adds r0, #0x60 - adds r1, #2 - strh r0, [r1] -_08043E70: - ldr r0, [r2, #0x64] - ldr r3, [r0, #0x18] - cmp r3, #0 - beq _08043E90 - ldr r1, _08043E8C @ =gScreenTransition - ldrh r2, [r3, #0x2e] - adds r0, r1, #0 - adds r0, #0x48 - strh r2, [r0] - ldrh r0, [r3, #0x32] - adds r1, #0x4a - strh r0, [r1] - b _08043EAC - .align 2, 0 -_08043E8C: .4byte gScreenTransition -_08043E90: - ldr r2, _08043EB0 @ =gScreenTransition - ldr r3, _08043EB4 @ =gRoomControls - movs r1, #0x88 - lsls r1, r1, #1 - adds r0, r1, #0 - ldrh r1, [r3, #6] - adds r0, r0, r1 - adds r1, r2, #0 - adds r1, #0x48 - strh r0, [r1] - ldrh r0, [r3, #8] - adds r0, #0x60 - adds r2, #0x4a - strh r0, [r2] -_08043EAC: - pop {r4, r5, r6, pc} - .align 2, 0 -_08043EB0: .4byte gScreenTransition -_08043EB4: .4byte gRoomControls - - thumb_func_start sub_08043EB8 -sub_08043EB8: @ 0x08043EB8 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - ldrb r0, [r7, #0x10] - movs r5, #0x80 - orrs r0, r5 - strb r0, [r7, #0x10] - adds r2, r7, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r4, #8 - rsbs r4, r4, #0 - adds r0, r4, #0 - ands r0, r1 - movs r6, #4 - orrs r0, r6 - strb r0, [r2] - adds r0, r7, #0 - movs r1, #0xd - bl InitAnimationForceUpdate - ldr r0, [r7, #0x64] - ldr r3, [r0, #4] - ldrb r0, [r3, #0x10] - orrs r0, r5 - strb r0, [r3, #0x10] - adds r2, r3, #0 - adds r2, #0x29 - ldrb r1, [r2] - adds r0, r4, #0 - ands r0, r1 - orrs r0, r6 - strb r0, [r2] - ldr r0, [r7, #0x64] - ldr r3, [r0, #8] - ldrb r0, [r3, #0x10] - orrs r0, r5 - strb r0, [r3, #0x10] - adds r2, r3, #0 - adds r2, #0x29 - ldrb r1, [r2] - adds r0, r4, #0 - ands r0, r1 - orrs r0, r6 - strb r0, [r2] - ldr r0, [r7, #0x64] - ldr r3, [r0, #0xc] - ldrb r1, [r3, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r3, #0x10] - ldrb r2, [r3, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - adds r0, r1, #0 - ands r0, r2 - movs r2, #1 - mov r8, r2 - mov r2, r8 - orrs r0, r2 - strb r0, [r3, #0x18] - adds r3, #0x29 - ldrb r2, [r3] - adds r0, r4, #0 - ands r0, r2 - orrs r0, r6 - strb r0, [r3] - ldr r0, [r7, #0x64] - ldr r3, [r0, #0x10] - ldrb r0, [r3, #0x10] - orrs r5, r0 - strb r5, [r3, #0x10] - ldrb r0, [r3, #0x18] - ands r1, r0 - mov r0, r8 - orrs r1, r0 - strb r1, [r3, #0x18] - adds r1, r3, #0 - adds r1, #0x29 - ldrb r0, [r1] - ands r4, r0 - orrs r4, r6 - strb r4, [r1] - ldrb r0, [r7, #0xb] - cmp r0, #0 - bne _08043F74 - ldr r1, _08043F70 @ =gScreenTransition - adds r0, r1, #0 - adds r0, #0x44 - b _08043F7A - .align 2, 0 -_08043F70: .4byte gScreenTransition -_08043F74: - ldr r1, _08043F8C @ =gScreenTransition - adds r0, r1, #0 - adds r0, #0x48 -_08043F7A: - ldrh r0, [r0] - strh r0, [r3, #0x2e] - ldrb r0, [r7, #0xb] - cmp r0, #0 - bne _08043F90 - adds r0, r1, #0 - adds r0, #0x46 - b _08043F94 - .align 2, 0 -_08043F8C: .4byte gScreenTransition -_08043F90: - adds r0, r1, #0 - adds r0, #0x4a -_08043F94: - ldrh r1, [r0] - movs r0, #0 - strh r1, [r3, #0x32] - strh r0, [r3, #0x36] - adds r2, r3, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xef - ands r0, r1 - strb r0, [r2] - adds r1, r3, #0 - adds r1, #0x3f - movs r0, #0x3a - strb r0, [r1] - ldr r0, _08043FF8 @ =gUnk_080FD450 - str r0, [r3, #0x48] - movs r0, #0xaf - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r3, r0, #0 - cmp r3, #0 - beq _08043FCA - ldr r0, [r7, #0x64] - ldr r0, [r0, #0xc] - str r0, [r3, #0x50] -_08043FCA: - ldr r0, [r7, #0x64] - ldr r0, [r0] - str r3, [r0, #0x68] - movs r2, #0 - movs r6, #0 - movs r5, #0x80 - lsls r5, r5, #8 - ldr r4, _08043FFC @ =gUnk_080D1419 - movs r3, #0x18 -_08043FDC: - ldr r0, [r7, #0x64] - adds r0, r0, r3 - strh r5, [r0] - strh r6, [r0, #4] - adds r1, r2, r4 - ldrb r1, [r1] - strb r1, [r0, #0xc] - adds r3, #0x10 - adds r2, #1 - cmp r2, #4 - bls _08043FDC - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08043FF8: .4byte gUnk_080FD450 -_08043FFC: .4byte gUnk_080D1419 - - thumb_func_start sub_08044000 -sub_08044000: @ 0x08044000 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #1 - ldr r0, _08044070 @ =gUnk_080D1400 - movs r3, #0 - ldr r2, _08044074 @ =gUnk_080D1414 - mov ip, r2 - movs r7, #8 - rsbs r7, r7, #0 - adds r5, r1, r0 - movs r6, #0x18 -_0804401C: - ldr r0, [r4, #0x64] - lsls r1, r3, #2 - adds r0, r0, r1 - ldr r2, [r0] - ldrb r1, [r2, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x10] - adds r2, #0x29 - ldrb r1, [r2] - adds r0, r7, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - ldr r1, [r4, #0x64] - adds r1, r1, r6 - ldrh r0, [r5] - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #7 - strh r0, [r1, #4] - mov r2, ip - adds r0, r3, r2 - ldrb r0, [r0] - strb r0, [r1, #0xc] - adds r5, #2 - adds r6, #0x10 - adds r3, #1 - cmp r3, #4 - bls _0804401C - adds r0, r4, #0 - movs r1, #7 - bl InitAnimationForceUpdate - ldr r1, [r4, #0x64] - ldr r0, [r1, #0x14] - ldr r1, [r1, #0x10] - bl CopyPosition - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08044070: .4byte gUnk_080D1400 -_08044074: .4byte gUnk_080D1414 - - thumb_func_start sub_08044078 -sub_08044078: @ 0x08044078 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080440C4 - movs r2, #1 - strb r2, [r4, #0xc] - ldrb r0, [r4, #0xa] - cmp r0, #3 - bne _080440AC - ldr r3, _080440B8 @ =gScreenTransition - adds r0, r3, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - beq _080440BC - ldr r0, [r4, #0x64] - ldr r0, [r0] - adds r1, r3, #0 - adds r1, #0x3c - ldrb r0, [r0, #0xb] - ldrb r1, [r1] - cmp r0, r1 - bne _080440BC -_080440AC: - adds r0, r4, #0 - movs r1, #0x12 - bl InitializeAnimation - b _080440C4 - .align 2, 0 -_080440B8: .4byte gScreenTransition -_080440BC: - adds r0, r4, #0 - movs r1, #0x11 - bl InitializeAnimation -_080440C4: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - - thumb_func_start sub_080440CC -sub_080440CC: @ 0x080440CC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08044110 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r2, _08044104 @ =gScreenTransition - adds r1, r2, #0 - adds r1, #0x38 - ldrb r1, [r1] - ands r0, r1 - cmp r0, #0 - beq _08044108 - ldr r0, [r4, #0x64] - ldr r0, [r0] - adds r1, r2, #0 - adds r1, #0x3c - ldrb r0, [r0, #0xb] - ldrb r1, [r1] - cmp r0, r1 - bne _08044108 - adds r0, r4, #0 - movs r1, #0x13 - bl InitializeAnimation - b _08044110 - .align 2, 0 -_08044104: .4byte gScreenTransition -_08044108: - adds r0, r4, #0 - movs r1, #0x11 - bl InitializeAnimation -_08044110: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} diff --git a/data/const/enemy/vaatiArm.s b/data/const/enemy/vaatiArm.s deleted file mode 100644 index 8d50dea9..00000000 --- a/data/const/enemy/vaatiArm.s +++ /dev/null @@ -1,193 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D1230:: @ 080D1230 - .4byte sub_08042570 - .4byte sub_08042588 - .4byte sub_08001324 - .4byte sub_0804A7D4 - .4byte sub_08001242 - .4byte nullsub_170 - -gUnk_080D1248:: @ 080D1248 - .4byte sub_0804259C - .4byte sub_08044078 - .4byte sub_08044078 - .4byte sub_08044078 - .4byte sub_080440CC - -gUnk_080D125C:: @ 080D125C - .4byte sub_080425B4 - .4byte sub_08042654 - .4byte sub_08042818 - .4byte sub_08042870 - .4byte sub_08042A3C - .4byte sub_08042C14 - .4byte sub_0804325C - .4byte sub_08043420 - .4byte sub_08043680 - -gUnk_080D1280:: @ 080D1280 - .incbin "baserom.gba", 0x0D1280, 0x0000004 - -gUnk_080D1284:: @ 080D1284 - .incbin "baserom.gba", 0x0D1284, 0x0000002 - -gUnk_080D1286:: @ 080D1286 - .incbin "baserom.gba", 0x0D1286, 0x000000A - -gUnk_080D1290:: @ 080D1290 - .4byte sub_08042894 - .4byte sub_080428AC - .4byte sub_080428FC - .4byte sub_08042944 - .4byte sub_08042970 - .4byte sub_080429D4 - .4byte sub_080429FC - -gUnk_080D12AC:: @ 080D12AC - .incbin "baserom.gba", 0x0D12AC, 0x0000004 - -gUnk_080D12B0:: @ 080D12B0 - .incbin "baserom.gba", 0x0D12B0, 0x0000002 - -gUnk_080D12B2:: @ 080D12B2 - .incbin "baserom.gba", 0x0D12B2, 0x0000002 - -gUnk_080D12B4:: @ 080D12B4 - .incbin "baserom.gba", 0x0D12B4, 0x0000002 - -gUnk_080D12B6:: @ 080D12B6 - .incbin "baserom.gba", 0x0D12B6, 0x0000002 - -gUnk_080D12B8:: @ 080D12B8 - .4byte sub_08042A6C - .4byte sub_08042A88 - .4byte sub_08042AEC - .4byte sub_08042B20 - -gUnk_080D12C8:: @ 080D12C8 - .incbin "baserom.gba", 0x0D12C8, 0x0000002 - -gUnk_080D12CA:: @ 080D12CA - .incbin "baserom.gba", 0x0D12CA, 0x0000006 - -gUnk_080D12D0:: @ 080D12D0 - .4byte sub_08042C34 - .4byte sub_08042D24 - .4byte sub_08042D6C - .4byte sub_08042E30 - .4byte sub_08042EF4 - .4byte sub_08042FD8 - .4byte sub_08043048 - .4byte sub_080430D0 - .4byte sub_08043130 - .4byte sub_080431E8 - -gUnk_080D12F8:: @ 080D12F8 - .incbin "baserom.gba", 0x0D12F8, 0x0000006 - -gUnk_080D12FE:: @ 080D12FE - .incbin "baserom.gba", 0x0D12FE, 0x0000002 - -gUnk_080D1300:: @ 080D1300 - .incbin "baserom.gba", 0x0D1300, 0x0000004 - -gUnk_080D1304:: @ 080D1304 - .incbin "baserom.gba", 0x0D1304, 0x0000008 - -gUnk_080D130C:: @ 080D130C - .incbin "baserom.gba", 0x0D130C, 0x0000001 - -gUnk_080D130D:: @ 080D130D - .incbin "baserom.gba", 0x0D130D, 0x0000003 - -gUnk_080D1310:: @ 080D1310 - .incbin "baserom.gba", 0x0D1310, 0x0000004 - -gUnk_080D1314:: @ 080D1314 - .4byte sub_080432A8 - -gUnk_080D1318:: @ 080D1318 - .4byte sub_0804334C - -gUnk_080D131C:: @ 080D131C - .incbin "baserom.gba", 0x0D131C, 0x0000004 - -gUnk_080D1320:: @ 080D1320 - .4byte sub_08043440 - .4byte sub_08043490 - .4byte sub_08043520 - .4byte sub_0804355C - .4byte sub_08043580 - .4byte sub_080435F4 - -gUnk_080D1338:: @ 080D1338 - .incbin "baserom.gba", 0x0D1338, 0x0000004 - -gUnk_080D133C:: @ 080D133C - .incbin "baserom.gba", 0x0D133C, 0x0000004 - -gUnk_080D1340:: @ 080D1340 - .incbin "baserom.gba", 0x0D1340, 0x0000008 - -gUnk_080D1348:: @ 080D1348 - .4byte sub_08043698 - .4byte sub_080436C0 - .4byte sub_08043700 - .4byte sub_08043738 - .4byte sub_08043770 - -gUnk_080D135C:: @ 080D135C - .incbin "baserom.gba", 0x0D135C, 0x0000006 - -gUnk_080D1362:: @ 080D1362 - .incbin "baserom.gba", 0x0D1362, 0x0000050 - -gUnk_080D13B2:: @ 080D13B2 - .incbin "baserom.gba", 0x0D13B2, 0x0000005 - -gUnk_080D13B7:: @ 080D13B7 - .incbin "baserom.gba", 0x0D13B7, 0x0000021 - -gUnk_080D13D8:: @ 080D13D8 - .incbin "baserom.gba", 0x0D13D8, 0x0000008 - -gUnk_080D13E0:: @ 080D13E0 - .incbin "baserom.gba", 0x0D13E0, 0x0000003 - -gUnk_080D13E3:: @ 080D13E3 - .incbin "baserom.gba", 0x0D13E3, 0x0000006 - -gUnk_080D13E9:: @ 080D13E9 - .incbin "baserom.gba", 0x0D13E9, 0x0000003 - -gUnk_080D13EC:: @ 080D13EC - .incbin "baserom.gba", 0x0D13EC, 0x0000014 - -gUnk_080D1400:: @ 080D1400 - .incbin "baserom.gba", 0x0D1400, 0x000000D - -gUnk_080D140D:: @ 080D140D - .incbin "baserom.gba", 0x0D140D, 0x0000005 - -gUnk_080D1412:: @ 080D1412 - .incbin "baserom.gba", 0x0D1412, 0x0000002 - -gUnk_080D1414:: @ 080D1414 - .incbin "baserom.gba", 0x0D1414, 0x0000003 - -gUnk_080D1417:: @ 080D1417 - .incbin "baserom.gba", 0x0D1417, 0x0000001 - -gUnk_080D1418:: @ 080D1418 - .incbin "baserom.gba", 0x0D1418, 0x0000001 - -gUnk_080D1419:: @ 080D1419 - .incbin "baserom.gba", 0x0D1419, 0x0000003 - -gUnk_080D141C:: @ 080D141C - .incbin "baserom.gba", 0x0D141C, 0x0000002 diff --git a/include/structures.h b/include/structures.h index 11d66ac8..e7cd304b 100644 --- a/include/structures.h +++ b/include/structures.h @@ -55,7 +55,10 @@ typedef struct { u8 field_0x39; u16 field_0x3a; u8 field_0x3c; - u8 filler[6]; + u8 field_0x3d; + u16 field_0x3e; + u16 field_0x40; + u16 field_0x42; u16 field_0x44; u16 field_0x46; u16 field_0x48; diff --git a/linker.ld b/linker.ld index a556c55c..6d0e5ff9 100644 --- a/linker.ld +++ b/linker.ld @@ -425,7 +425,7 @@ SECTIONS { asm/vaatiTransfigured.o(.text); asm/enemy50.o(.text); asm/vaatiWrath.o(.text); - asm/vaatiArm.o(.text); + src/enemy/vaatiArm.o(.text); asm/dust.o(.text); src/enemy/vaatiBall.o(.text); src/enemy/slime.o(.text); @@ -1133,7 +1133,7 @@ SECTIONS { data/const/enemy/enemy50.o(.rodata); data/const/enemy/vaatiWrath.o(.rodata); data/animations/enemy/vaatiWrath.o(.rodata); - data/const/enemy/vaatiArm.o(.rodata); + src/enemy/vaatiArm.o(.rodata); data/animations/enemy/vaatiArm.o(.rodata); data/const/enemy/dust.o(.rodata); data/const/enemy/vaatiBall.o(.rodata); diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c new file mode 100644 index 00000000..3b307128 --- /dev/null +++ b/src/enemy/vaatiArm.c @@ -0,0 +1,1460 @@ +#include "global.h" +#include "enemy.h" +#include "entity.h" +#include "audio.h" +#include "object.h" +#include "random.h" +#include "utils.h" +#include "functions.h" + +extern void DoExitTransition(ScreenTransitionData*); + +typedef struct VaatiArm_HeapStruct1 { + union SplitHWord unk00; + u16 unk02; + union SplitHWord unk04; + u16 unk06; + s16 unk08; + s16 unk0a; + u8 unk0c; + u8 unk0d; + u8 unk0e; + u8 unk0f; +} VaatiArm_HeapStruct1; + +typedef struct VaatiArm_HeapStruct { + Entity* entities[5]; + Entity* parent; + VaatiArm_HeapStruct1 s1[5]; +} VaatiArm_HeapStruct; + +u32 sub_080437DC(Entity*); +u32 sub_08043C98(Entity*); +void sub_08042570(Entity*); +void sub_08042588(Entity*); +void sub_080425B4(Entity*); +void sub_08042818(Entity*); +void sub_08042870(Entity*); +void sub_08042A3C(Entity*); +void sub_08042C14(Entity*); +void sub_0804325C(Entity*); +void sub_08043420(Entity*); +void sub_08043680(Entity*); +void nullsub_170(Entity*); +void sub_08042654(Entity*); +void sub_0804259C(Entity*); +void sub_08043A10(Entity*); +void sub_08043ABC(Entity*); +void sub_08043BC8(Entity*); +void sub_08043EB8(Entity*); +void sub_08044000(Entity*); +void sub_08044078(Entity*); +void sub_080440CC(Entity*); +void sub_08043CD4(Entity*); +void sub_08042894(Entity*); +void sub_080428AC(Entity*); +void sub_080428FC(Entity*); +void sub_08042944(Entity*); +void sub_08042970(Entity*); +void sub_080429D4(Entity*); +void sub_080429FC(Entity*); +void sub_08043BF0(Entity*); +void sub_08042A6C(Entity*); +void sub_08042A88(Entity*); +void sub_08042AEC(Entity*); +void sub_08042B20(Entity*); +void sub_08043C40(Entity*, VaatiArm_HeapStruct1*); +void sub_08043A78(Entity*); +void sub_08042C34(Entity*); +void sub_08042D24(Entity*); +void sub_08042D6C(Entity*); +void sub_08042E30(Entity*); +void sub_08042EF4(Entity*); +void sub_08042FD8(Entity*); +void sub_08043048(Entity*); +void sub_080430D0(Entity*); +void sub_08043130(Entity*); +void sub_080431E8(Entity*); +void sub_08043B9C(Entity*); +void sub_0804AA1C(Entity*); +void sub_08043DB0(Entity*); +void sub_08043B7C(Entity*); +void sub_08043D08(Entity*); +void sub_080432A8(Entity*); +void sub_0804334C(Entity*); +void sub_08043440(Entity*); +void sub_08043490(Entity*); +void sub_08043520(Entity*); +void sub_0804355C(Entity*); +void sub_08043580(Entity*); +void sub_080435F4(Entity*); +void sub_08043698(Entity*); +void sub_080436C0(Entity*); +void sub_08043700(Entity*); +void sub_08043738(Entity*); +void sub_08043770(Entity*); + +void (*const gUnk_080D1230[])(Entity*) = { + sub_08042570, sub_08042588, sub_08001324, sub_0804A7D4, sub_08001242, nullsub_170, +}; +void (*const gUnk_080D1248[])(Entity*) = { + sub_0804259C, sub_08044078, sub_08044078, sub_08044078, sub_080440CC, +}; +void (*const gUnk_080D125C[])(Entity*) = { + sub_080425B4, sub_08042654, sub_08042818, sub_08042870, sub_08042A3C, + sub_08042C14, sub_0804325C, sub_08043420, sub_08043680, +}; + +const s16 gUnk_080D1280[] = { 0x140, -0x140 }; +const s8 gUnk_080D1284[] = { 0x40, -0x40 }; +const u8 gUnk_080D1286[] = { 2, 3, 5, 6, 0xc, 0xb, 9, 8, 0, 0 }; + +void (*const gUnk_080D1290[])(Entity*) = { + sub_08042894, sub_080428AC, sub_080428FC, sub_08042944, sub_08042970, sub_080429D4, sub_080429FC, +}; + +const s16 gUnk_080D12AC[] = { -0x200, 0x200 }; +const u8 gUnk_080D12B0[] = { 8, -8 }; +const u8 gUnk_080D12B2[] = { -0x50, 0x50 }; +const s8 gUnk_080D12B4[] = { -0x20, 0x20 }; +const u8 gUnk_080D12B6[] = { 0x70, -0x70 }; + +void (*const gUnk_080D12B8[])(Entity*) = { + sub_08042A6C, + sub_08042A88, + sub_08042AEC, + sub_08042B20, +}; + +const u8 gUnk_080D12C8[] = { 0x60, -0x60 }; +const u16 gUnk_080D12CA[] = { 0x280, -0x280 }; + +void (*const gUnk_080D12D0[])(Entity*) = { + sub_08042C34, sub_08042D24, sub_08042D6C, sub_08042E30, sub_08042EF4, + sub_08042FD8, sub_08043048, sub_080430D0, sub_08043130, sub_080431E8, +}; + +const s8 gUnk_080D12F8[] = { -0x10, 0, 0, -0x10, 0x10, 0, 0, 0x10 }; +const s16 gUnk_080D1300[] = { 0xC0, -0xC0 }; +const u8 gUnk_080D1304[] = { 0, -1, -2, -3, 0, 1, 2, 3 }; +const s16 gUnk_080D130C[] = { 0x5000, -0x5000 }; +const s16 gUnk_080D1310[] = { 0xA0, -0xA0 }; +void (*const gUnk_080D1314[])(Entity*) = { sub_080432A8, sub_0804334C }; +const u8 gUnk_080D131C[] = { 0x70, -0x70 }; +void (*const gUnk_080D1320[])(Entity*) = { + sub_08043440, sub_08043490, sub_08043520, sub_0804355C, sub_08043580, sub_080435F4, +}; +const s16 gUnk_080D1338[] = { 0x4000, -0x4000 }; +const s16 gUnk_080D133C[] = { 0xA0, -0xA0 }; +const u8 gUnk_080D1340[] = { 0, 0x12, 0x12, 0x11, 0x11, 0, 0, 0 }; +void (*const gUnk_080D1348[])(Entity*) = { + sub_08043698, sub_080436C0, sub_08043700, sub_08043738, sub_08043770, +}; +const u16 gUnk_080D135C[] = { 0x4000, -0x4000, 0x8000 }; +const u8 gUnk_080D1362[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, + 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 1, 2, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, +}; +const u8 gUnk_080D13B2[] = { 0, 12, 9, 6, 3 }; +const u8 gUnk_080D13B7[] = { + 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 1, 0, +}; +const Coords gUnk_080D13D8[] = { { .HALF = { -0x60, 0x80 } }, { .HALF = { 0x60, -0x80 } } }; +const u8 gUnk_080D13E0[] = { 0xc, 0xe, 0x10 }; +const u8 gUnk_080D13E3[] = { 8, 9, 10, 4, 4, 5 }; +const s8 gUnk_080D13E9[] = { -8, 8 }; +const ScreenTransitionData gUnk_080D13EC = { 1, { 0, 0, 0, 0 }, 0x98, 0xb8, 0, 0x8a, 0, 1, 0, 0, 0 }; +const u16 gUnk_080D1400[] = { 0x8000, 0x7000, 0x6000, 0x5000, 0x4000, 0x8000, -0x7000 }; +const u16 gUnk_080D140E[] = { -0x6000, -0x5000, -0x4000 }; +const u8 gUnk_080D1414[] = { 0, 0xc, 0xe, 0x10, 0x1c }; +const u8 gUnk_080D1419[] = { 0, 0xa, 0xa, 0xa, 0x1c }; + +extern u8 gEntCount; +extern const Hitbox gUnk_080FD450; +extern const Hitbox gUnk_080FD538; + +void VaatiArm(Entity* this) { + gUnk_080D1230[GetNextFunction(this)](this); +} + +void sub_08042570(Entity* this) { + gUnk_080D1248[this->type](this); +} + +void sub_08042588(Entity* this) { + sub_0804AA30(this, gUnk_080D1230); +} + +void nullsub_170(Entity* this) { +} + +void sub_0804259C(Entity* this) { + gUnk_080D125C[this->action](this); +} + +void sub_080425B4(Entity* this) { + if (sub_080437DC(this)) { + this->field_0x7c.BYTES.byte0 = 0; + this->field_0x7c.BYTES.byte1 = 0; + if ((gScreenTransition.field_0x38 & 1) != 0) { + if (gScreenTransition.field_0x3c == this->type2) { + sub_08043EB8(this); + sub_08043ABC(this); + if ((gScreenTransition.field_0x39 >> (this->type2 + 2) & 1U) != 0) { + this->action = 7; + this->subAction = 4; + } else { + this->action = 8; + this->subAction = 0; + } + } else { + sub_08044000(this); + sub_08043BC8(this); + sub_08043A10(this); + } + } else { + this->action = 1; + this->subAction = gScreenTransition.field_0x38 & 1; + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk08 = gUnk_080D1280[this->type2]; + sub_08042654(this); + } + } +} + +void sub_08042654(Entity* this) { + u32 uVar8; + int index; + VaatiArm_HeapStruct1* ptr; + + index = this->type2 * 4; + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + switch (this->subAction) { + case 0: + this->subAction = 1; + ptr->unk00.HALF.HI = gUnk_080D1284[this->type2]; + uVar8 = gUnk_080D1286[this->type2 * 4]; + InitAnimationForceUpdate(this, uVar8); + SoundReq(SFX_15E); + break; + case 1: + ptr->unk00.HWORD += ptr->unk08; + if ((((VaatiArm_HeapStruct*)this->myHeap)->s1[1].unk0c += 2) < 0xc) + break; + this->subAction = 2; + uVar8 = gUnk_080D1286[index + 1]; + InitAnimationForceUpdate(this, uVar8); + SoundReq(SFX_15E); + break; + case 2: + ptr->unk00.HWORD += ptr->unk08; + if ((((VaatiArm_HeapStruct*)this->myHeap)->s1[2].unk0c += 2) < 0xe) + break; + this->subAction = 3; + uVar8 = gUnk_080D1286[index + 2]; + InitAnimationForceUpdate(this, uVar8); + SoundReq(SFX_15E); + break; + case 3: + ptr->unk00.HWORD += ptr->unk08; + if ((((VaatiArm_HeapStruct*)this->myHeap)->s1[3].unk0c += 2) < 0x10) + break; + this->subAction = 4; + uVar8 = gUnk_080D1286[index + 3]; + InitAnimationForceUpdate(this, uVar8); + SoundReq(SFX_15E); + break; + case 4: + ptr->unk00.HWORD += ptr->unk08; + if ((((VaatiArm_HeapStruct*)this->myHeap)->s1[4].unk0c += 2) < 0x1c) + break; + this->subAction = 5; + this->actionDelay = 0x5a; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->flags |= 0x80; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->spritePriority.b0 = 4; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->flags |= 0x80; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->spritePriority.b0 = 4; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[2]->flags |= 0x80; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[2]->spritePriority.b0 = 4; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]->flags |= 0x80; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]->spritePriority.b0 = 4; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->flags |= 0x80; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->spritePriority.b0 = 4; + InitAnimationForceUpdate(this, 7); + SoundReq(SFX_15E); + break; + default: + if (--this->actionDelay == 0) { + sub_08043BC8(this); + } + break; + } + sub_08043A10(this); +} + +void sub_08042818(Entity* this) { + VaatiArm_HeapStruct1* ptr; + + sub_08043CD4(this); + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + ptr->unk00.HWORD += ptr->unk08; + if (--ptr->unk0d == 0) { + ptr->unk0d = 0x78; + ptr->unk08 *= -1; + } + ptr->unk04.HWORD += ptr->unk0a; + if (--ptr->unk0e == 0) { + ptr->unk0e = 0x50; + ptr->unk0a *= -1; + } + sub_08043A10(this); +} + +void sub_08042870(Entity* this) { + sub_08043CD4(this); + gUnk_080D1290[this->subAction](this); + sub_08043A10(this); +} + +void sub_08042894(Entity* this) { + this->subAction = 1; + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk08 = gUnk_080D12AC[this->type2]; +} + +void sub_080428AC(Entity* this) { + u8 bVar1; + VaatiArm_HeapStruct1* pVVar3; + + pVVar3 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + bVar1 = pVVar3->unk04.HALF.HI; + if (bVar1 != 0x40) { + if (bVar1 >= 0x41) { + pVVar3->unk04.HWORD -= 0x80; + } else { + pVVar3->unk04.HWORD += 0x80; + } + } + if ((u32)(pVVar3->unk00.HALF.HI - gUnk_080D12B0[this->type2] + 1) > 2) { + pVVar3->unk00.HWORD += pVVar3->unk08; + } else { + this->subAction = 2; + this->actionDelay = 0x1e; + } + sub_08043BF0(this); +} + +void sub_080428FC(Entity* this) { + u32 uVar2; + VaatiArm_HeapStruct1* ptr; + + if (--this->actionDelay == 0) { + this->subAction = 3; + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + ptr->unk08 *= -3; + SoundReq(SFX_153); + uVar2 = 0; + do { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[uVar2]->damageType = 0x3b; + uVar2 = uVar2 + 1; + } while (uVar2 < 5); + } +} + +void sub_08042944(Entity* this) { + VaatiArm_HeapStruct1* pVVar1; + + pVVar1 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if ((u32)(pVVar1->unk00.HALF.HI - 0x7c) >= 9) { + pVVar1->unk00.HWORD += pVVar1->unk08; + } else { + this->subAction = 4; + this->speed = pVVar1->unk08; + } + sub_08043BF0(this); +} + +void sub_08042970(Entity* this) { + u32 uVar2; + VaatiArm_HeapStruct1* pVVar3; + + pVVar3 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if ((u32)(pVVar3->unk00.HALF.HI - gUnk_080D12B2[this->type2] + 2) >= 5) { + pVVar3->unk08 += gUnk_080D12B4[this->type2]; + pVVar3->unk00.HWORD += pVVar3->unk08; + } else { + this->subAction = 5; + this->actionDelay = 0x3c; + uVar2 = 0; + do { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[uVar2]->damageType = 0x39; + uVar2 = uVar2 + 1; + } while (uVar2 < 5); + } + sub_08043BF0(this); +} + +void sub_080429D4(Entity* this) { + s16 sVar2; + VaatiArm_HeapStruct1* pVVar3; + + if (--this->actionDelay == 0) { + this->subAction = 6; + pVVar3 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + sVar2 = -this->speed / 6; + pVVar3->unk08 = sVar2; + } +} + +void sub_080429FC(Entity* this) { + VaatiArm_HeapStruct1* pVVar1; + + pVVar1 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if ((u32)(pVVar1->unk00.HALF.HI - gUnk_080D12B6[this->type2]) + 1 >= 3) { + pVVar1->unk00.HWORD += pVVar1->unk08; + sub_08043BF0(this); + } else { + sub_08043BC8(this); + InitAnimationForceUpdate(this, 7); + } +} + +void sub_08042A3C(Entity* this) { + Entity* entity; + + gUnk_080D12B8[this->subAction](this); + sub_08043A10(this); + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + entity->height.HALF.HI += this->field_0x78.HALF.LO; +} + +void sub_08042A6C(Entity* this) { + this->subAction = 1; + this->field_0x78.HALF.LO = 0; + this->field_0x7c.BYTES.byte2 = 1; + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk0a = 0x200; +} + +void sub_08042A88(Entity* this) { + VaatiArm_HeapStruct1* pVVar4; + + pVVar4 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (gUnk_080D12C8[this->type2] != pVVar4->unk00.HALF.HI) { + if (gUnk_080D12C8[this->type2] < pVVar4->unk00.HALF.HI) { + pVVar4->unk00.HWORD -= 0x100; + } else { + pVVar4->unk00.HWORD += 0x100; + } + } + if (pVVar4->unk0a < pVVar4->unk04.HWORD) { + pVVar4->unk04.HWORD -= pVVar4->unk0a; + } else { + pVVar4->unk04.HWORD = 0; + pVVar4->unk08 = gUnk_080D12CA[this->type2]; + this->subAction = 2; + this->actionDelay = 0x1e; + } +} + +void sub_08042AEC(Entity* this) { + if (--this->actionDelay == 0) { + this->subAction = 3; + this->actionDelay = 4; + this->damageType = 0x3d; + InitAnimationForceUpdate(this, 0xe); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->damageType = 0x3d; + } +} + +void sub_08042B20(Entity* this) { + VaatiArm_HeapStruct1* ptr; + Entity* object; + Entity* entity; + u32 i; + + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (ptr->unk04.HALF.HI < 0x7b) { + ptr->unk04.HWORD += 0x500; + } else { + ptr->unk04.HALF.HI = 0x80; + } + if (0x30 < ptr->unk04.HALF.HI) { + ptr->unk00.HWORD += ptr->unk08; + } + if (((VaatiArm_HeapStruct*)this->myHeap)->entities[3]->spriteSettings.b.draw) { + sub_08043C40(this, ptr); + for (i = 0; i < 4; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + if ((-0xa <= entity->height.HALF.HI) && ((entity->spriteSettings.b.draw) == 1)) { + if (i == 0) { + object = CreateObject(OBJECT_AF, 0, 0); + if (object != NULL) { + object->parent = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + } + *(Entity**)&((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->field_0x68 = object; + object = CreateObject(OBJECT_AF, 2, 0); + if (object != NULL) { + CopyPosition(((VaatiArm_HeapStruct*)this->myHeap)->entities[4], object); + } + } + entity->flags &= 0x7f; + entity->spriteSettings.b.draw = 0; + SoundReq(SFX_161); + } + } + } else { + this->field_0x78.HALF.LO += 2; + if (--this->actionDelay == 0) { + this->action = 5; + this->subAction = 0; + this->actionDelay = 0x1e; + this->damageType = 0x39; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->damageType = 0x39; + } + } +} + +void sub_08042C14(Entity* this) { + gUnk_080D12D0[this->subAction](this); + sub_08043A78(this); +} + +void sub_08042C34(Entity* this) { + u32 random; + int y; + u32 i; + Entity* entity; + int x; + const s8* temp; + + VaatiArm_HeapStruct1* ptr; + + if (--this->actionDelay == 0) { + this->actionDelay = 0x3c; + this->field_0xf = 3; + this->subAction = 1; + random = Random() & 6; + temp = &gUnk_080D12F8[random]; + x = gPlayerEntity.x.HALF.HI + *temp; + y = gPlayerEntity.y.HALF.HI + *(temp + 1); + if ((gRoomControls.roomOriginX + 0x20) > x) { + x = gRoomControls.roomOriginX + 0x20; + } + if (gRoomControls.roomOriginX + gRoomControls.width + -0x20 < x) { + x = gRoomControls.roomOriginX + gRoomControls.width + -0x20; + } + if ((gRoomControls.roomOriginY + 0x20) > y) { + y = gRoomControls.roomOriginY + 0x20; + } + if (gRoomControls.roomOriginY + gRoomControls.height + -0x40 < y) { + y = gRoomControls.roomOriginY + gRoomControls.height + -0x40; + } + if (((u32)((x - gRoomControls.roomOriginX) - 0x90) < 0x41) && + ((u32)((y - gRoomControls.roomOriginY) - 8) < 0x41)) { + x = gRoomControls.roomOriginX + 0xb0; + y = gRoomControls.roomOriginY + 0x40; + } + for (i = 0; i < 4; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + entity->x.HALF.HI = x; + entity->y.HALF.HI = y; + entity->height.HALF.HI = 0x32; + entity->damageType = 0x39; + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + ptr->unk00.HWORD = 0x80; + ptr->unk04.HWORD = 0; + ptr->unk0c = gUnk_080D1419[i]; + if (i != 0) { + InitializeAnimation(entity, 0x12); + } + } + } +} + +void sub_08042D24(Entity* this) { + Entity* entity; + + if (--this->actionDelay == 0) { + this->subAction = 2; + this->damageType = 0x3d; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->damageType = 0x3d; + entity = CreateObject(OBJECT_AF, 1, 0); + if (entity != NULL) { + entity->parent = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + } + *(Entity**)&this->field_0x68 = entity; + InitAnimationForceUpdate(this, 0xd); + } +} + +void sub_08042D6C(Entity* this) { + Entity* object; + Entity* entity; + u32 i; + + for (i = 0; i < 4; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + if (entity->height.HALF.HI < 4) { + if (i != 2) { + entity->flags = entity->flags | 0x80; + } + if ((entity->spriteSettings.b.draw == 0u) && (object = CreateObject(OBJECT_AF, 2, 0), object != NULL)) { + CopyPosition(entity, object); + SoundReq(SFX_166); + } + entity->spriteSettings.b.draw = 1; + } + } + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + if (entity->height.HALF.HI <= -3) { + entity->height.HALF.HI = -5; + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk08 = gUnk_080D1300[this->type2]; + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk0a = 0xc0; + this->subAction = 3; + this->actionDelay = 0x1e; + this->damageType = 0x39; + this->field_0x7c.BYTES.byte3 = 0x2d; + InitAnimationForceUpdate(this, 0); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]->damageType = 0x39; + } else { + entity->height.HALF.HI -= 2; + } +} + +void sub_08042E30(Entity* this) { + short sVar3; + u32 uVar6; + VaatiArm_HeapStruct1* pVVar9; + + if (this->field_0x7c.BYTES.byte3 == 0) { + if (sub_08043C98(this) != 0) { + return; + } + } else { + this->field_0x7c.BYTES.byte3--; + } + pVVar9 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (--this->actionDelay == 0) { + this->subAction = 4; + this->actionDelay = (Random() & 0x38) + 0x28; + this->speed = 0x200; + this->direction = pVVar9->unk00.HALF.HI >> 3; + uVar6 = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, gRoomControls.roomOriginX + 0x110, + gRoomControls.roomOriginY + 0x60); + this->field_0x78.HALF.HI = (gUnk_080D1304[Random() & 7] + uVar6) & 0x1f; + } + pVVar9->unk00.HWORD += pVVar9->unk08; + pVVar9->unk04.HWORD += pVVar9->unk0a; + if (pVVar9->unk0a >= 1) { + if (pVVar9->unk04.HALF.HI >= 0x19) { + sVar3 = pVVar9->unk0a; + pVVar9->unk0a = -sVar3; + } + } else { + if (3 >= pVVar9->unk04.HALF.HI) { + sVar3 = pVVar9->unk0a; + pVVar9->unk0a = -sVar3; + } + } + UpdateAnimationSingleFrame(this); +} + +void sub_08042EF4(Entity* this) { + VaatiArm_HeapStruct1* ptr; + Entity* entity; + u32 temp; + u32 x, y; + + UpdateAnimationSingleFrame(this); + if (sub_08043C98(this) == 0) { + if (--this->actionDelay == 0) { + if (sub_0806FCB8(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x50)) { + this->subAction = 6; + this->actionDelay = 0x28; + } else { + this->subAction = 5; + InitAnimationForceUpdate(this, 0xf); + SoundReq(SFX_19B); + } + } + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (ptr->unk04.HALF.HI < 0x20) { + ptr->unk04.HWORD += 0x100; + } + x = this->parent->x.HALF.HI; + y = this->parent->y.HALF.HI - 0x10; + if (sub_0806FCB8(this, x, y, 0x30)) { + temp = sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, x, y); + if ((this->field_0x78.HALF.HI - temp) + 4 < 9) { + this->field_0x78.HALF.HI = temp ^ 0x10; + } + } + if (this->field_0x78.HALF.HI != this->direction) { + sub_08004596(this, this->field_0x78.HALF.HI); + ptr->unk00.HALF.HI = this->direction << 3; + } + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + entity->direction = this->direction; + ProcessMovement(entity); + } +} + +void sub_08042FD8(Entity* this) { + Entity* entity; + + UpdateAnimationSingleFrame(this); + if (!sub_08043C98(this)) { + if ((this->frames.all & 1) != 0) { + entity = sub_080A7EE0(0x20); + if (entity != NULL) { + CopyPosition(this, entity); + entity->height.HALF.HI -= 0x18; + this->frames.all = 0; + } + } else { + if (this->frames.all & 0x80) { + if (--this->field_0xf == 0) { + this->subAction = 8; + this->actionDelay = 0x3c; + } else { + this->subAction = 3; + this->actionDelay = 0x3c; + InitAnimationForceUpdate(this, 0); + } + } + } + } +} + +void sub_08043048(Entity* this) { + VaatiArm_HeapStruct1* ptr; + u32 i; + + if (sub_08043C98(this) == 0) { + ptr = ((VaatiArm_HeapStruct*)this->myHeap)->s1; + if (ptr[0].unk04.HALF.HI < 0x50) { + ptr[0].unk04.HWORD += 0x200; + if (0x4f < ptr[0].unk04.HALF.HI) { + for (i = 0; i < 5; i++) { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]->damageType = 0x3b; + } + SoundReq(SFX_153); + } + } else { + ptr[0].unk00.HWORD += ptr[0].unk08 * 8; + if (--this->actionDelay == 0) { + this->subAction = 7; + for (i = 0; i < 5; i++) { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]->damageType = 0x39; + } + } + } + sub_08043B9C(this); + } +} + +void sub_080430D0(Entity* this) { + VaatiArm_HeapStruct1* ptr; + + if (sub_08043C98(this) == 0) { + ptr = ((VaatiArm_HeapStruct*)this->myHeap)->s1; + ptr[0].unk00.HWORD += ptr[0].unk08; + ptr[0].unk04.HWORD -= 0x100; + if (ptr[0].unk04.HALF.HI < 0x18) { + if (--this->field_0xf == 0) { + this->subAction = 8; + this->actionDelay = 0x3c; + } else { + this->subAction = 3; + this->actionDelay = 0x3c; + ptr[0].unk0a = -0xc0; + InitAnimationForceUpdate(this, 0); + } + } + } +} + +void sub_08043130(Entity* this) { + VaatiArm_HeapStruct1* ptr; + Entity* entity; + u32 i; + + ptr = ((VaatiArm_HeapStruct*)this->myHeap)->s1; + if (ptr[0].unk04.HALF.HI != 0) { + if (sub_08043C98(this) == 0) { + if (--ptr[0].unk04.HALF.HI == 0) { + InitAnimationForceUpdate(this, 0xd); + } + } + } else { + if (this->actionDelay != 0) { + this->actionDelay--; + for (i = 1; i < 4; i++) { + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + if (ptr->unk04.HALF.HI != 0) { + ptr->unk04.HALF.HI -= 1; + } + } + } else { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]->height.HALF.HI += 3; + for (i = 0; i < 4; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + if (entity->height.HALF.HI > -4) { + entity->flags = entity->flags & 0x7f; + if (entity->spriteSettings.b.draw == 1) { + SoundReq(SFX_161); + } + entity->spriteSettings.b.draw = 0; + } + } + if (this->spriteSettings.b.draw == 0) { + this->subAction = 9; + this->actionDelay = 0x3c; + sub_0804AA1C(this); + } + } + } +} + +void sub_080431E8(Entity* this) { + u32 i; + VaatiArm_HeapStruct1* ptr; + + if (--this->actionDelay == 0) { + this->action = 6; + this->subAction = 0; + for (i = 0; i < 4; i++) { + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + ptr->unk00.HWORD = gUnk_080D130C[this->type2]; + ptr->unk04.HWORD = 0x8000; + ptr->unk0c = gUnk_080D1414[i]; + if (i == 3) { + InitializeAnimation(((VaatiArm_HeapStruct*)this->myHeap)->entities[3], 0x11); + } + } + ((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk08 = gUnk_080D1310[this->type2]; + InitAnimationForceUpdate(this, 0xe); + } +} + +void sub_0804325C(Entity* this) { + Entity* entity; + + sub_08043CD4(this); + gUnk_080D1314[this->subAction](this); + sub_08043A10(this); + if (this->field_0x78.HALF.LO != 0) { + if (this->field_0x78.HALF.LO >= 3) { + this->field_0x78.HALF.LO -= 2; + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + entity->height.HALF.HI += this->field_0x78.HALF.LO; + } else { + this->field_0x78.HALF.LO = 0; + } + } +} + +ASM_FUNC("asm/non_matching/vaati/sub_080432A8.inc", void sub_080432A8(Entity* this)) + +NONMATCH("asm/non_matching/vaati/sub_0804334C.inc", void sub_0804334C(Entity* this)) { + int bVar1; + Entity* entity; + VaatiArm_HeapStruct1* s; + u32 i; + u8* ptr; + + if (this->actionDelay != 0) { + if (--this->actionDelay != 0) { + return; + } + for (i = 0; i < 5; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + entity->flags = entity->flags | 0x80; + entity->spriteSettings.b.draw = 1; + } + } + s = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if ((gUnk_080D131C[this->type2] - s->unk00.HALF.HI) + 1 > 2u) { + s->unk00.HWORD += s->unk08; + bVar1 = 0; + } else { + bVar1 = 1; + } + sub_08043B9C(this); + for (i = 0; i < 5; i++) { + ptr = ((u8*)((VaatiArm_HeapStruct*)this->myHeap)->s1) + 0x10 * i; + if (gUnk_080D1414[i] > ptr[0xc]) { + ptr[0xc]++; + if (gUnk_080D1414[i] != ptr[0xc]) { + return; + } + SoundReq(SFX_15E); + return; + } + if ((bVar1) && (i == 4)) { + sub_08043BC8(this); + InitAnimationForceUpdate(this, 7); + if (this->field_0x7c.BYTES.byte2 != 0) { + this->field_0x7c.BYTES.byte2 = 0; + ((VaatiArm_HeapStruct*)this->myHeap)->parent->subAction = 2; + } + } + } +} +END_NONMATCH + +void sub_08043420(Entity* this) { + gUnk_080D1320[this->subAction](this); + sub_08043ABC(this); +} + +void sub_08043440(Entity* this) { + u32 i; + int iVar4; + u8* ptr; + int offset; + int zero; + + i = 0; + iVar4 = 0; + zero = 0; + offset = 0x18; + do { + ptr = ((u8*)this->myHeap) + offset; + if (ptr[5] >= 0x11) { + ptr[5] -= 0x10; + iVar4++; + } else { + ((u16*)ptr)[2] = zero; + } + offset += 0x10; + i++; + } while (i < 5); + if (iVar4 == 0) { + i = 0; + do { + ((VaatiArm_HeapStruct*)this->myHeap)->s1[i].unk00.HWORD = 0x8000; + i++; + } while (i < 5); + this->subAction = 1; + InitAnimationForceUpdate(this, 0x10); + } +} + +NONMATCH("asm/non_matching/vaati/sub_08043490.inc", void sub_08043490(Entity* this)) { + Entity* entity; + + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + if (entity->height.HALF.HI < -4) { + entity->field_0x20 = 0x18000; + this->subAction = 2; + this->field_0x7c.BYTES.byte2 = 0; + ((VaatiArm_HeapStruct*)this->myHeap)->parent->subAction = 2; + } else { + entity->height.HALF.HI -= 2; + if (entity->height.HALF.HI < 0) { + entity->flags = entity->flags | 0x80; + entity->spriteSettings.b.draw = 1; + entity->field_0x3c = entity->field_0x3c & 0xef; + entity->damageType = 0x3a; + entity->hitbox = (Hitbox*)&gUnk_080FD450; + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[2]; + entity->flags = entity->flags | 0x80; + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + entity->flags = entity->flags & 0x7f; + } + } + UpdateAnimationSingleFrame(this); +} +END_NONMATCH + +void sub_08043520(Entity* this) { + Entity* entity; + + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + sub_08003FC4(entity, 0x1a00); + if ((entity->field_0x20 < 0) && (-6 < entity->height.HALF.HI)) { + entity->height.HALF.HI = -6; + this->subAction = 3; + this->field_0x7a.HWORD = 900; + } +} + +void sub_0804355C(Entity* this) { + sub_08043DB0(this); + if (--this->field_0x7a.HWORD == 0) { + this->subAction = 4; + } + UpdateAnimationSingleFrame(this); +} + +void sub_08043580(Entity* this) { + Entity* entity; + u32 i; + + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->height.HALF.HI += 3; + for (i = 0; i < 5; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + if (-4 < entity->height.HALF.HI) { + entity->flags = entity->flags & 0x7f; + entity->spriteSettings.b.draw = 0; + } + } + if ((this->spriteSettings.b.draw & 3) == 0) { + this->subAction = 5; + this->actionDelay = 0x3c; + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + entity->field_0x3c = entity->field_0x3c | 0x10; + entity->damageType = 0x39; + entity->hitbox = (Hitbox*)&gUnk_080FD538; + sub_0804AA1C(this); + } +} + +void sub_080435F4(Entity* this) { + Entity* entity; + u32 i; + VaatiArm_HeapStruct1* ptr; + + if (--this->actionDelay == 0) { + this->action = 6; + this->subAction = 1; + this->actionDelay = 1; + for (i = 0; i < 5; i++) { + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + ptr->unk00.HWORD = gUnk_080D1338[this->type2]; + ptr->unk04.HWORD = 0x4000; + ptr->unk0c = 0; + ptr->unk08 = gUnk_080D133C[this->type2]; + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + if (i == 0) { + sub_08043B9C(entity); + } else { + InitializeAnimation(entity, gUnk_080D1340[i]); + } + } + } +} + +void sub_08043680(Entity* this) { + gUnk_080D1348[this->subAction](this); +} + +void sub_08043698(Entity* this) { + Entity* entity; + u32 i; + + this->subAction = 1; + this->actionDelay = 0x3c; + for (i = 0; i < 5; i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + entity->flags = entity->flags & 0x7f; + } +} + +static inline void deleteThing(Entity* this, const u32 index) { + if (--this->actionDelay == 0) { + this->actionDelay = 0x14; + this->subAction = index + 1; + if (index == 1) { + this->spriteSettings.b.draw = 0; + } + CreateFx(((VaatiArm_HeapStruct*)this->myHeap)->entities[index], 0x51, 0); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[index]->myHeap = NULL; + DeleteEntity(((VaatiArm_HeapStruct*)this->myHeap)->entities[index]); + } +} + +void sub_080436C0(Entity* this) { + deleteThing(this, 1); +} + +void sub_08043700(Entity* this) { + deleteThing(this, 2); +} + +void sub_08043738(Entity* this) { + deleteThing(this, 3); +} + +NONMATCH("asm/non_matching/vaati/sub_08043770.inc", void sub_08043770(Entity* this)) { + Entity* entity; + + if (--this->actionDelay == 0) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->parent; + if ((gScreenTransition.field_0x39 & 0xc) == 0) { + entity->subAction = 2; + } + if (this->type2 == 0) { + ((VaatiArm_HeapStruct*)this->myHeap)->parent = NULL; + gScreenTransition.field_0x39 &= 0xfe; + } else { + *(u32*)((VaatiArm_HeapStruct*)this->myHeap)->s1 = 0; + gScreenTransition.field_0x39 &= 0xfd; + } + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->myHeap = NULL; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->currentHealth = 0; + (*(Entity**)&this->field_0x68)->parent = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + DeleteThisEntity(); + } +} +END_NONMATCH + +u32 sub_080437DC(Entity* this) { + u16 temp; + VaatiArm_HeapStruct* heapStruct; + Entity* entity; + + if (gEntCount >= 0x44) + return 0; + heapStruct = zMalloc(sizeof(VaatiArm_HeapStruct)); + if (heapStruct == NULL) + return 0; + this->spritePriority.b0 = 5; + this->field_0x3c = this->field_0x3c | 0x10; + this->myHeap = (u32*)heapStruct; + heapStruct->entities[0] = this; + entity = CreateEnemy(VAATI_ARM, 1); + entity->spritePriority.b0 = 5; + entity->field_0x3c = entity->field_0x3c | 0x10; + entity->myHeap = (u32*)heapStruct; + heapStruct->entities[1] = entity; + CopyPosition(this, entity); + entity = CreateEnemy(VAATI_ARM, 2); + entity->spritePriority.b0 = 5; + entity->field_0x3c = entity->field_0x3c | 0x10; + entity->myHeap = (u32*)heapStruct; + heapStruct->entities[2] = entity; + CopyPosition(this, entity); + entity = CreateEnemy(VAATI_ARM, 3); + entity->spritePriority.b0 = 5; + entity->field_0x3c = entity->field_0x3c | 0x10; + entity->myHeap = (u32*)heapStruct; + heapStruct->entities[3] = entity; + CopyPosition(this, entity); + entity = CreateEnemy(VAATI_ARM, 4); + entity->spritePriority.b0 = 5; + entity->field_0x3c = entity->field_0x3c | 0x10; + entity->myHeap = (u32*)heapStruct; + heapStruct->entities[4] = entity; + CopyPosition(this, entity); + heapStruct->parent = this->parent; + temp = gUnk_080D135C[this->type2]; + heapStruct->s1[0].unk00.HWORD = temp; + heapStruct->s1[0].unk04.HWORD = 0x4000; + heapStruct->s1[0].unk0c = 0; + heapStruct->s1[1].unk00.HWORD = temp; + heapStruct->s1[1].unk04.HWORD = 0x4000; + heapStruct->s1[1].unk0c = 0; + heapStruct->s1[2].unk00.HWORD = temp; + heapStruct->s1[2].unk04.HWORD = 0x4000; + heapStruct->s1[2].unk0c = 0; + heapStruct->s1[3].unk00.HWORD = temp; + heapStruct->s1[3].unk04.HWORD = 0x4000; + heapStruct->s1[3].unk0c = 0; + heapStruct->s1[4].unk00.HWORD = temp; + heapStruct->s1[4].unk04.HWORD = 0x4000; + heapStruct->s1[4].unk0c = 0; + return 1; +} + +ASM_FUNC("asm/non_matching/vaati/sub_0804393C.inc", void sub_0804393C(Entity* this)) + +void sub_08043A10(Entity* this) { + sub_08043B7C(this); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[4]); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->y.HALF.HI -= 8; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]->height.HALF.HI -= 8; + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[3]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[2]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[1]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[0]); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->y.HALF.HI++; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->spriteOffsetY--; + if (this->field_0x7c.BYTES.byte0 != 0) { + this->field_0x7c.BYTES.byte0--; + } +} + +void sub_08043A78(Entity* this) { + this->field_0x7c.BYTES.byte0 = 0; + sub_08043B7C(this); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[2]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[1]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[0]); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->y.HALF.HI++; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->spriteOffsetY--; +} + +void sub_08043ABC(Entity* this) { + this->field_0x7c.BYTES.byte0 = 0; + sub_08043B7C(this); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[3]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[2]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[1]); + sub_0804393C(((VaatiArm_HeapStruct*)this->myHeap)->entities[0]); + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->y.HALF.HI++; + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->spriteOffsetY--; +} + +ASM_FUNC("asm/non_matching/vaati/sub_08043B08.inc", void sub_08043B08(Entity* this)) + +void sub_08043B7C(Entity* this) { + sub_08043B08(((VaatiArm_HeapStruct*)this->myHeap)->entities[1]); + sub_08043B08(((VaatiArm_HeapStruct*)this->myHeap)->entities[2]); + sub_08043B08(((VaatiArm_HeapStruct*)this->myHeap)->entities[3]); +} + +void sub_08043B9C(Entity* this) { + u32 index = ((((VaatiArm_HeapStruct*)this->myHeap)->s1[0].unk00.HALF.HI + 4) & 0xff) >> 3; + if (gUnk_080D13B7[index] != this->frameIndex - 1) { + InitAnimationForceUpdate(this, gUnk_080D13B7[index]); + } +} + +void sub_08043BC8(Entity* this) { + VaatiArm_HeapStruct1* pVVar2; + const Coords* ptr; + + this->action = 2; + ptr = &gUnk_080D13D8[this->type2]; + pVVar2 = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + pVVar2->unk08 = ptr->HALF.x; + pVVar2->unk0a = ptr->HALF.y; + pVVar2->unk0d = 0x5a; + pVVar2->unk0e = 0x28; +} + +void sub_08043BF0(Entity* this) { + u8 bVar1; + u32 uVar2; + VaatiArm_HeapStruct1* ptr; + + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[0]; + if (this->type2 == 0) { + bVar1 = ptr->unk00.HALF.HI; + uVar2 = 6; + if (((0x2f < bVar1) && (uVar2 = 7, 0x5f < bVar1)) && (uVar2 = 9, bVar1 < 0x90)) { + uVar2 = 8; + } + } else { + bVar1 = ptr->unk00.HALF.HI; + uVar2 = 8; + if (((bVar1 < 0xd1) && (uVar2 = 7, bVar1 < 0xa1)) && (uVar2 = 5, 0x70 < bVar1)) { + uVar2 = 6; + } + } + if (this->animIndex != uVar2) { + InitAnimationForceUpdate(this, uVar2); + } +} + +void sub_08043C40(Entity* this, VaatiArm_HeapStruct1* heapStruct) { + u8* iVar3; + int offset; + const u8* puVar6; + u32 i; + + if (heapStruct->unk04.HALF.HI < 0x20) { + puVar6 = gUnk_080D13E0; + } else { + if (heapStruct->unk04.HALF.HI < 0x30) { + puVar6 = gUnk_080D13E3; + } else { + if (heapStruct->unk04.HALF.HI < 0x78) { + puVar6 = &gUnk_080D13E0[6]; + } else { + puVar6 = gUnk_080D13E0; + } + } + } + for (i = 0, offset = 0x28; i < 3; offset += 0x10, i++) { + iVar3 = (u8*)(int)((VaatiArm_HeapStruct*)this->myHeap) + offset; + if (puVar6[i] != iVar3[0xc]) { + if (puVar6[i] < iVar3[0xc]) { + iVar3[0xc] -= 1; + } else { + iVar3[0xc] += 1; + } + } + } +} + +u32 sub_08043C98(Entity* this) { + Entity* e1 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[2]; + Entity* e2 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + if ((e1->bitfield == 0x9d) || (e2->bitfield == 0x9d)) { + sub_08043D08(this); + gScreenTransition.field_0x38 |= 2; + return 1; + } else { + return 0; + } +} + +void sub_08043CD4(Entity* this) { + u32 i; + for (i = 0; i < 5; i++) { + if (((VaatiArm_HeapStruct*)this->myHeap)->entities[i]->bitfield == 0x9d) { + this->field_0x7c.BYTES.byte0 = 0x78; + this->field_0x7c.BYTES.byte1 = i; + return; + } + } +} + +void sub_08043D08(Entity* this) { + Entity* entity; + Entity* fx; + u32 i; + + this->action = 7; + this->subAction = 0; + InitAnimationForceUpdate(this, 0xd); + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + entity->flags &= 0x7f; + entity->spriteSettings.b.draw = 0; + InitializeAnimation(entity, 0x13); + sub_0804AA1C(entity); + fx = CreateFx(entity, 0x51, 0); + if (fx != NULL) { + fx->x.HALF.HI += gUnk_080D13E9[this->type2]; + fx->y.HALF.HI -= 6; + fx->spritePriority.b0 = 3; + } + CopyPosition(((VaatiArm_HeapStruct*)this->myHeap)->entities[3], entity); + entity->height.HALF.HI += ((VaatiArm_HeapStruct*)this->myHeap)->s1[3].unk0c; + for (i = 0; i < 5; i++) { + ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]->damageType = 0x39; + } + EnqueueSFX(SFX_HIT); +} + +NONMATCH("asm/non_matching/vaati/sub_08043DB0.inc", void sub_08043DB0(Entity* this)) { + s32 cVar1; + u32 uVar2; + Entity* pEVar3; + Entity* pEVar4; + VaatiArm_HeapStruct1* iVar5; + + if (((gPlayerState.flags.all & 0x80) != 0) && + (pEVar3 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3], + uVar2 = CheckPlayerInRegion(pEVar3->x.HALF.HI - gRoomControls.roomOriginX, + pEVar3->y.HALF.HI - gRoomControls.roomOriginY + 2, 3, 3), + uVar2 != 0)) { + DoExitTransition((ScreenTransitionData*)&gUnk_080D13EC); + if ((gScreenTransition.field_0x39 & 3) != 3) { + gScreenTransition.roomID = 1; + } + cVar1 = this->field_0x7a.HWORD / 0x3c; + gScreenTransition.field_0x3d = 0x1e - cVar1; + gScreenTransition.field_0x3c = this->type2; + pEVar3 = ((VaatiArm_HeapStruct*)this->myHeap)->parent; + gScreenTransition.field_0x40 = pEVar3->x.HALF.HI; + gScreenTransition.field_0x42 = pEVar3->y.HALF.HI; + pEVar4 = ((VaatiArm_HeapStruct*)pEVar3->myHeap)->parent; + if (pEVar4 != NULL) { + gScreenTransition.field_0x44 = pEVar4->x.HALF.HI; + gScreenTransition.field_0x46 = pEVar4->y.HALF.HI; + } else { + gScreenTransition.field_0x44 = gRoomControls.roomOriginX + 0x110; + gScreenTransition.field_0x46 = gRoomControls.roomOriginY + 0x60; + } + iVar5 = (VaatiArm_HeapStruct1*)(*(int*)((VaatiArm_HeapStruct*)pEVar3->myHeap)->s1); + if (iVar5 != NULL) { + gScreenTransition.field_0x48 = iVar5[2].unk0e; + gScreenTransition.field_0x4a = iVar5[3].unk02; + } else { + gScreenTransition.field_0x48 = gRoomControls.roomOriginX + 0x110; + gScreenTransition.field_0x4a = gRoomControls.roomOriginY + 0x60; + } + } +} +END_NONMATCH + +void sub_08043EB8(Entity* this) { + u32 i; + Entity* pEVar4; + VaatiArm_HeapStruct1* ptr; + + this->flags = this->flags | 0x80; + this->spritePriority.b0 = 4; + InitAnimationForceUpdate(this, 0xd); + pEVar4 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[1]; + pEVar4->flags = pEVar4->flags | 0x80; + pEVar4->spritePriority.b0 = 4; + pEVar4 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[2]; + pEVar4->flags = pEVar4->flags | 0x80; + pEVar4->spritePriority.b0 = 4; + pEVar4 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + pEVar4->flags = pEVar4->flags & 0x7f; + pEVar4->spriteSettings.b.draw = 1; + pEVar4->spritePriority.b0 = 4; + pEVar4 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]; + pEVar4->flags = pEVar4->flags | 0x80; + pEVar4->spriteSettings.b.draw = 1; + pEVar4->spritePriority.b0 = 4; + pEVar4->x.HALF.HI = (this->type2 == 0) ? gScreenTransition.field_0x44 : gScreenTransition.field_0x48; + pEVar4->y.HALF.HI = (this->type2 == 0) ? gScreenTransition.field_0x46 : gScreenTransition.field_0x4a; + pEVar4->height.HALF.HI = 0; + pEVar4->field_0x3c = pEVar4->field_0x3c & 0xef; + pEVar4->damageType = 0x3a; + pEVar4->hitbox = (Hitbox*)&gUnk_080FD450; + pEVar4 = CreateObject(OBJECT_AF, 0, 0); + if (pEVar4 != NULL) { + pEVar4->parent = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3]; + } + *(Entity**)&((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->field_0x68 = pEVar4; + for (i = 0; i < 5; i++) { + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + ptr->unk00.HWORD = 0x8000; + ptr->unk04.HWORD = 0; + ptr->unk0c = gUnk_080D1419[i]; + } +} +NONMATCH("asm/non_matching/vaati/sub_08044000.inc", void sub_08044000(Entity* this)) { + Entity* entity; + u32 i; + VaatiArm_HeapStruct1* ptr; + const u16* ptr2; + + ptr2 = &gUnk_080D1400[this->type2 * 5]; + for (i = 0; i < 5; ptr2++, i++) { + entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i]; + entity->flags = entity->flags | 0x80; + entity->spritePriority.b0 = 4; + ptr = &((VaatiArm_HeapStruct*)this->myHeap)->s1[i]; + ptr->unk00.HWORD = *ptr2; + ptr->unk04.HWORD = 0x4000; + ptr->unk0c = gUnk_080D1414[i]; + } + InitAnimationForceUpdate(this, 7); + CopyPosition(((VaatiArm_HeapStruct*)this->myHeap)->parent, ((VaatiArm_HeapStruct*)this->myHeap)->entities[4]); +} +END_NONMATCH + +void sub_08044078(Entity* this) { + if (this->action == 0) { + this->action = 1; + if (this->type != 3 || + !(((gScreenTransition.field_0x38 & 1) == 0 || + (((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->type2 != gScreenTransition.field_0x3c)))) { + InitializeAnimation(this, 0x12); + } else { + InitializeAnimation(this, 0x11); + } + } + GetNextFrame(this); +} + +void sub_080440CC(Entity* this) { + if (this->action == 0) { + this->action = 1; + if ((gScreenTransition.field_0x38 & 1) != 0 && + ((VaatiArm_HeapStruct*)this->myHeap)->entities[0]->type2 == gScreenTransition.field_0x3c) { + InitializeAnimation(this, 0x13); + } else { + InitializeAnimation(this, 0x11); + } + } + GetNextFrame(this); +} From dbfb827bd394eaae29f66a941bca089d15411670 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Fri, 28 May 2021 10:25:35 +0200 Subject: [PATCH 03/16] decomp vaati macro eye --- asm/vaatiEyesMacro.s | 631 ------------------------------ data/const/enemy/vaatiEyesMacro.s | 39 -- include/structures.h | 3 +- linker.ld | 7 +- src/enemy/vaatiEyesMacro.c | 302 ++++++++++++++ 5 files changed, 308 insertions(+), 674 deletions(-) delete mode 100644 asm/vaatiEyesMacro.s delete mode 100644 data/const/enemy/vaatiEyesMacro.s create mode 100644 src/enemy/vaatiEyesMacro.c 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/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/include/structures.h b/include/structures.h index e7cd304b..2e336c4a 100644 --- a/include/structures.h +++ b/include/structures.h @@ -53,7 +53,8 @@ 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 field_0x3d; u16 field_0x3e; diff --git a/linker.ld b/linker.ld index 6d0e5ff9..99325092 100644 --- a/linker.ld +++ b/linker.ld @@ -376,7 +376,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); @@ -1056,7 +1056,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); @@ -1115,7 +1115,8 @@ SECTIONS { data/animations/enemy/mazaalBracelet.o(.rodata); data/const/enemy/takkuri.o(.rodata); data/const/enemy/bowMoblin.o(.rodata); - data/animations/enemy/bowMoblin.o(.rodata); src/enemy/lakitu.o(.rodata); + data/animations/enemy/bowMoblin.o(.rodata); + src/enemy/lakitu.o(.rodata); data/animations/enemy/lakitu.o(.rodata); src/enemy/lakituCloud.o(.rodata); data/const/enemy/enemy49.o(.rodata); diff --git a/src/enemy/vaatiEyesMacro.c b/src/enemy/vaatiEyesMacro.c new file mode 100644 index 00000000..55e13521 --- /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 sub_0802EC98(Entity*); +void sub_0802ECC0(Entity*); +void sub_0802ED74(Entity*); +void sub_0802EE20(Entity*); +void sub_0802EEB8(Entity*); +void sub_0802EF1C(Entity*); +void sub_0802ED8C(Entity*); +void sub_0802EE10(Entity*); +void sub_0802EE38(Entity*); +void sub_0802EE8C(Entity*); +void sub_0802EF90(Entity*); +void sub_0802EFB8(Entity*); +void sub_0802EF58(Entity*); +void sub_0802F04C(Entity*); + +void (*const gUnk_080CDE34[])(Entity*) = { + sub_0802EC98, sub_0802ECC0, sub_08001324, sub_0804A7D4, sub_08001242, sub_0802EC98, +}; +void (*const gUnk_080CDE4C[])(Entity*) = { + sub_0802ED74, + sub_0802EE20, + sub_0802EEB8, + sub_0802EF1C, +}; +void (*const gUnk_080CDE5C[])(Entity*) = { + sub_0802ED8C, + sub_0802EE10, +}; +void (*const gUnk_080CDE64[])(Entity*) = { + sub_0802EE38, + sub_0802EE8C, +}; +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) { + gUnk_080CDE34[GetNextFunction(this)](this); + SetChildOffset(this, 0, 1, -0x10); +} + +void sub_0802EC98(Entity* this) { + gUnk_080CDE4C[this->type](this); + if (this->type < 2) { + sub_0802EF90(this); + } +} + +void sub_0802ECC0(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, gUnk_080CDE34); +} + +void sub_0802ED74(Entity* this) { + gUnk_080CDE5C[this->action](this); +} + +void sub_0802ED8C(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 sub_0802EE10(Entity* this) { + sub_0802F04C(this); + GetNextFrame(this); +} + +void sub_0802EE20(Entity* this) { + gUnk_080CDE64[this->action](this); +} + +void sub_0802EE38(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 sub_0802EE8C(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 sub_0802EEB8(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 sub_0802EF1C(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); +} From a0af1ae46d0714277986fb998358b43057dc7fd2 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Fri, 28 May 2021 14:17:45 +0200 Subject: [PATCH 04/16] decomp vaati projectile --- asm/non_matching/vaati/sub_08043DB0.inc | 129 ----- asm/vaatiProjectile.s | 629 ------------------------ data/const/enemy/vaatiProjectile.s | 25 - linker.ld | 4 +- src/enemy/vaatiArm.c | 66 ++- src/enemy/vaatiProjectile.c | 262 ++++++++++ 6 files changed, 296 insertions(+), 819 deletions(-) delete mode 100644 asm/non_matching/vaati/sub_08043DB0.inc delete mode 100644 asm/vaatiProjectile.s delete mode 100644 data/const/enemy/vaatiProjectile.s create mode 100644 src/enemy/vaatiProjectile.c diff --git a/asm/non_matching/vaati/sub_08043DB0.inc b/asm/non_matching/vaati/sub_08043DB0.inc deleted file mode 100644 index abd69612..00000000 --- a/asm/non_matching/vaati/sub_08043DB0.inc +++ /dev/null @@ -1,129 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r0, _08043E48 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08043EAC - ldr r0, [r5, #0x64] - ldr r2, [r0, #0xc] - movs r1, #0x2e - ldrsh r0, [r2, r1] - ldr r6, _08043E4C @ =gRoomControls - ldrh r1, [r6, #6] - subs r0, r0, r1 - movs r3, #0x32 - ldrsh r1, [r2, r3] - ldrh r2, [r6, #8] - subs r1, r1, r2 - adds r1, #2 - movs r2, #3 - movs r3, #3 - bl CheckPlayerInRegion - cmp r0, #0 - beq _08043EAC - ldr r0, _08043E50 @ =gUnk_080D13EC - bl DoExitTransition - ldr r4, _08043E54 @ =gScreenTransition - adds r0, r4, #0 - adds r0, #0x39 - ldrb r1, [r0] - movs r0, #3 - ands r0, r1 - cmp r0, #3 - beq _08043DFE - movs r0, #1 - strb r0, [r4, #0xd] -_08043DFE: - adds r0, r5, #0 - adds r0, #0x7a - ldrh r0, [r0] - movs r1, #0x3c - bl __divsi3 - movs r1, #0x1e - subs r1, r1, r0 - adds r0, r4, #0 - adds r0, #0x3d - strb r1, [r0] - ldrb r1, [r5, #0xb] - subs r0, #1 - strb r1, [r0] - ldr r0, [r5, #0x64] - ldr r2, [r0, #0x14] - ldrh r1, [r2, #0x2e] - adds r0, r4, #0 - adds r0, #0x40 - strh r1, [r0] - ldrh r0, [r2, #0x32] - adds r1, r4, #0 - adds r1, #0x42 - strh r0, [r1] - ldr r0, [r2, #0x64] - ldr r3, [r0, #0x14] - cmp r3, #0 - beq _08043E58 - ldrh r1, [r3, #0x2e] - adds r0, r4, #0 - adds r0, #0x44 - strh r1, [r0] - ldrh r1, [r3, #0x32] - adds r0, #2 - strh r1, [r0] - b _08043E70 - .align 2, 0 -_08043E48: .4byte gPlayerState -_08043E4C: .4byte gRoomControls -_08043E50: .4byte gUnk_080D13EC -_08043E54: .4byte gScreenTransition -_08043E58: - movs r1, #0x88 - lsls r1, r1, #1 - adds r0, r1, #0 - ldrh r3, [r6, #6] - adds r0, r0, r3 - adds r1, r4, #0 - adds r1, #0x44 - strh r0, [r1] - ldrh r0, [r6, #8] - adds r0, #0x60 - adds r1, #2 - strh r0, [r1] -_08043E70: - ldr r0, [r2, #0x64] - ldr r3, [r0, #0x18] - cmp r3, #0 - beq _08043E90 - ldr r1, _08043E8C @ =gScreenTransition - ldrh r2, [r3, #0x2e] - adds r0, r1, #0 - adds r0, #0x48 - strh r2, [r0] - ldrh r0, [r3, #0x32] - adds r1, #0x4a - strh r0, [r1] - b _08043EAC - .align 2, 0 -_08043E8C: .4byte gScreenTransition -_08043E90: - ldr r2, _08043EB0 @ =gScreenTransition - ldr r3, _08043EB4 @ =gRoomControls - movs r1, #0x88 - lsls r1, r1, #1 - adds r0, r1, #0 - ldrh r1, [r3, #6] - adds r0, r0, r1 - adds r1, r2, #0 - adds r1, #0x48 - strh r0, [r1] - ldrh r0, [r3, #8] - adds r0, #0x60 - adds r2, #0x4a - strh r0, [r2] -_08043EAC: - pop {r4, r5, r6, pc} - .align 2, 0 -_08043EB0: .4byte gScreenTransition -_08043EB4: .4byte gRoomControls - .syntax divided diff --git a/asm/vaatiProjectile.s b/asm/vaatiProjectile.s deleted file mode 100644 index 1be37b71..00000000 --- a/asm/vaatiProjectile.s +++ /dev/null @@ -1,629 +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 - 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 - - 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 - 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} - - 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/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/linker.ld b/linker.ld index 99325092..98943203 100644 --- a/linker.ld +++ b/linker.ld @@ -417,7 +417,7 @@ SECTIONS { src/enemy/lakituCloud.o(.text); asm/enemy49.o(.text); asm/vaatiRebornEnemy.o(.text); - asm/vaatiProjectile.o(.text); + src/enemy/vaatiProjectile.o(.text); asm/ballChainSoldier.o(.text); src/enemy/enemy4D.o(.text); asm/enemy4D.o(.text); @@ -1122,7 +1122,7 @@ SECTIONS { data/const/enemy/enemy49.o(.rodata); data/const/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); diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c index 3b307128..f766cd99 100644 --- a/src/enemy/vaatiArm.c +++ b/src/enemy/vaatiArm.c @@ -1329,47 +1329,45 @@ void sub_08043D08(Entity* this) { EnqueueSFX(SFX_HIT); } -NONMATCH("asm/non_matching/vaati/sub_08043DB0.inc", void sub_08043DB0(Entity* this)) { +void sub_08043DB0(Entity* this) { s32 cVar1; - u32 uVar2; + Entity* pEVar2; Entity* pEVar3; Entity* pEVar4; - VaatiArm_HeapStruct1* iVar5; - if (((gPlayerState.flags.all & 0x80) != 0) && - (pEVar3 = ((VaatiArm_HeapStruct*)this->myHeap)->entities[3], - uVar2 = CheckPlayerInRegion(pEVar3->x.HALF.HI - gRoomControls.roomOriginX, - pEVar3->y.HALF.HI - gRoomControls.roomOriginY + 2, 3, 3), - uVar2 != 0)) { - DoExitTransition((ScreenTransitionData*)&gUnk_080D13EC); - if ((gScreenTransition.field_0x39 & 3) != 3) { - gScreenTransition.roomID = 1; - } - cVar1 = this->field_0x7a.HWORD / 0x3c; - gScreenTransition.field_0x3d = 0x1e - cVar1; - gScreenTransition.field_0x3c = this->type2; - pEVar3 = ((VaatiArm_HeapStruct*)this->myHeap)->parent; - gScreenTransition.field_0x40 = pEVar3->x.HALF.HI; - gScreenTransition.field_0x42 = pEVar3->y.HALF.HI; - pEVar4 = ((VaatiArm_HeapStruct*)pEVar3->myHeap)->parent; - if (pEVar4 != NULL) { - gScreenTransition.field_0x44 = pEVar4->x.HALF.HI; - gScreenTransition.field_0x46 = pEVar4->y.HALF.HI; - } else { - gScreenTransition.field_0x44 = gRoomControls.roomOriginX + 0x110; - gScreenTransition.field_0x46 = gRoomControls.roomOriginY + 0x60; - } - iVar5 = (VaatiArm_HeapStruct1*)(*(int*)((VaatiArm_HeapStruct*)pEVar3->myHeap)->s1); - if (iVar5 != NULL) { - gScreenTransition.field_0x48 = iVar5[2].unk0e; - gScreenTransition.field_0x4a = iVar5[3].unk02; - } else { - gScreenTransition.field_0x48 = gRoomControls.roomOriginX + 0x110; - gScreenTransition.field_0x4a = gRoomControls.roomOriginY + 0x60; + 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; + } } } } -END_NONMATCH void sub_08043EB8(Entity* this) { u32 i; diff --git a/src/enemy/vaatiProjectile.c b/src/enemy/vaatiProjectile.c new file mode 100644 index 00000000..03914d2f --- /dev/null +++ b/src/enemy/vaatiProjectile.c @@ -0,0 +1,262 @@ +#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 sub_0803E0C4(Entity*); +void sub_0803E0DC(Entity*); +void sub_08001328(Entity*); +void sub_0803E188(Entity*); +void nullsub_19(Entity*); +void sub_0803E1A8(Entity*); +void sub_0803E258(Entity*); +void sub_0803E2A8(Entity*); +void sub_0803E2D0(Entity*); +void sub_0803E314(Entity*); +void sub_0803E340(Entity*); +void sub_0803E370(Entity*); +void sub_0803E398(Entity*); +void sub_0803E3D4(Entity*); +void sub_0803E3FC(Entity*); +void sub_0803E444(Entity*); +void sub_0803E480(Entity*); +void sub_0803E4D8(Entity*); + +void (*const gUnk_080D0648[])(Entity*) = { + sub_0803E0C4, sub_0803E0DC, sub_08001328, sub_0803E188, sub_08001242, nullsub_19, +}; +void (*const gUnk_080D0660[])(Entity*) = { + sub_0803E1A8, sub_0803E258, sub_0803E2A8, sub_0803E2D0, sub_0803E314, + sub_0803E340, sub_0803E370, sub_0803E398, sub_0803E3D4, sub_0803E3FC, +}; + +void VaatiProjectile(Entity* this) { + if (sub_0803E4A0(this)) { + this->flags &= 0x7f; + this->currentHealth = 0; + this->parent = NULL; + } + gUnk_080D0648[GetNextFunction(this)](this); +} + +void sub_0803E0C4(Entity* this) { + gUnk_080D0660[this->action](this); +} + +void sub_0803E0DC(Entity* this) { + Entity* entity; + + if (this->bitfield == 0x80) { + if (this->currentHealth != 0) { + 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); + 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; + } + } + sub_0804AA30(this, gUnk_080D0648); +} + +void sub_0803E188(Entity* this) { + if (this->parent != NULL) { + this->parent->field_0xf--; + this->parent = NULL; + } + sub_0804A7D4(this); +} + +void nullsub_19(Entity* this) { +} + +void sub_0803E1A8(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 sub_0803E258(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 sub_0803E2A8(Entity* this) { + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + if (++this->height.HALF.HI == 0) { + this->action = 3; + } + } + GetNextFrame(this); +} + +void sub_0803E2D0(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 sub_0803E314(Entity* this) { + if (--this->actionDelay == 0) { + this->action = 1; + this->direction = GetFacingDirection(this, &gPlayerEntity); + } + GetNextFrame(this); +} + +void sub_0803E340(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 sub_0803E370(Entity* this) { + if (--this->actionDelay == 0) { + this->action = 7; + this->direction = 0x10; + this->speed = 0x300; + } + sub_0803E444(this); +} + +void sub_0803E398(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 sub_0803E3D4(Entity* this) { + if (this->parent->next == NULL) { + DeleteThisEntity(); + } + PositionRelative(this->parent, this, 0, -0x10000); + GetNextFrame(this); +} + +void sub_0803E3FC(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); + } + sub_0803E2A8(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) { + bool32 ret; + if (gScreenTransition.field_0x39 != 0) { + if (this->parent == NULL) { + return FALSE; + } + if (this->parent->currentHealth == 0) { + return TRUE; + } else { + ret = FALSE; + if (this->parent->next == NULL) { + ret = TRUE; + } + } + } else { + return TRUE; + } + return ret; +} + +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); + } +} From a1a8e0d1fcfd158d4da6f00db070470594ceb352 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Fri, 28 May 2021 16:26:09 +0200 Subject: [PATCH 05/16] decomp vaati reborn npc --- asm/non_matching/vaati/sub_0806B7BC.inc | 216 ++++++++++++ asm/vaatiReborn.s | 451 ------------------------ data/const/npc/vaatiReborn.s | 12 - include/npc.h | 131 +++++++ linker.ld | 4 +- src/enemy/vaatiProjectile.c | 5 +- src/npc.c | 256 +++++++------- src/npc/vaatiReborn.c | 115 ++++++ 8 files changed, 593 insertions(+), 597 deletions(-) create mode 100644 asm/non_matching/vaati/sub_0806B7BC.inc delete mode 100644 asm/vaatiReborn.s delete mode 100644 data/const/npc/vaatiReborn.s create mode 100644 src/npc/vaatiReborn.c diff --git a/asm/non_matching/vaati/sub_0806B7BC.inc b/asm/non_matching/vaati/sub_0806B7BC.inc new file mode 100644 index 00000000..78f9e721 --- /dev/null +++ b/asm/non_matching/vaati/sub_0806B7BC.inc @@ -0,0 +1,216 @@ + .syntax unified + 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 + .syntax divided 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/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/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/linker.ld b/linker.ld index 98943203..b817528c 100644 --- a/linker.ld +++ b/linker.ld @@ -612,7 +612,7 @@ SECTIONS { src/npc/librari.o(.text); src/npc/percy.o(.text); asm/percy.o(.text); - asm/vaatiReborn.o(.text); + src/npc/vaatiReborn.o(.text); src/npc/moblinLady.o(.text); asm/librarians.o(.text); asm/farmers.o(.text); @@ -1330,7 +1330,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); diff --git a/src/enemy/vaatiProjectile.c b/src/enemy/vaatiProjectile.c index 03914d2f..ff0fe542 100644 --- a/src/enemy/vaatiProjectile.c +++ b/src/enemy/vaatiProjectile.c @@ -241,10 +241,7 @@ bool32 sub_0803E4A0(Entity* this) { if (this->parent->currentHealth == 0) { return TRUE; } else { - ret = FALSE; - if (this->parent->next == NULL) { - ret = TRUE; - } + ret = this->parent->next == NULL; } } else { return TRUE; 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/vaatiReborn.c b/src/npc/vaatiReborn.c new file mode 100644 index 00000000..bf8defee --- /dev/null +++ b/src/npc/vaatiReborn.c @@ -0,0 +1,115 @@ +#include "global.h" +#include "npc.h" +#include "coord.h" +#include "flags.h" +#include "audio.h" +#include "textbox.h" +#include "functions.h" + +void sub_0806B67C(Entity*); +void sub_0806B7BC(Entity*); +void sub_0806B96C(Entity*); +Entity* sub_0806B9BC(Entity*); + +typedef struct xy { + s8 x; + s8 y; +} PACKED xy; + +void (*const gUnk_08112F78[])(Entity*) = { + sub_0806B67C, + sub_0806B7BC, +}; +const xy gUnk_08112F80[] = { { 10, -29 }, { -10, -29 }, { 15, -21 }, { -15, -21 } }; + +void VaatiReborn(Entity* this) { + gUnk_08112F78[this->action](this); +} + +void sub_0806B67C(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; + } +} + +ASM_FUNC("asm/non_matching/vaati/sub_0806B7BC.inc", void sub_0806B7BC(Entity* this)) + +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; +} From fa2779a38385d94e094fe9c882a93d4ea224c3fd Mon Sep 17 00:00:00 2001 From: Henny022p Date: Sat, 19 Jun 2021 13:20:51 +0200 Subject: [PATCH 06/16] first part of vaati reborn enemy --- asm/non_matching/vaati/sub_0806B7BC.inc | 216 ------------ asm/vaatiRebornEnemy.s | 431 ------------------------ data/const/enemy/vaatiRebornEnemy.s | 22 -- linker.ld | 2 + src/npc/vaatiReborn.c | 100 +++++- 5 files changed, 101 insertions(+), 670 deletions(-) delete mode 100644 asm/non_matching/vaati/sub_0806B7BC.inc diff --git a/asm/non_matching/vaati/sub_0806B7BC.inc b/asm/non_matching/vaati/sub_0806B7BC.inc deleted file mode 100644 index 78f9e721..00000000 --- a/asm/non_matching/vaati/sub_0806B7BC.inc +++ /dev/null @@ -1,216 +0,0 @@ - .syntax unified - 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 - .syntax divided diff --git a/asm/vaatiRebornEnemy.s b/asm/vaatiRebornEnemy.s index 51485753..c7df101b 100644 --- a/asm/vaatiRebornEnemy.s +++ b/asm/vaatiRebornEnemy.s @@ -7,437 +7,6 @@ .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} diff --git a/data/const/enemy/vaatiRebornEnemy.s b/data/const/enemy/vaatiRebornEnemy.s index 6192e31f..c1c266fd 100644 --- a/data/const/enemy/vaatiRebornEnemy.s +++ b/data/const/enemy/vaatiRebornEnemy.s @@ -4,28 +4,6 @@ .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 diff --git a/linker.ld b/linker.ld index b817528c..00b46639 100644 --- a/linker.ld +++ b/linker.ld @@ -416,6 +416,7 @@ SECTIONS { src/enemy/lakitu.o(.text); src/enemy/lakituCloud.o(.text); asm/enemy49.o(.text); + src/enemy/vaatiRebornEnemy.o(.text); asm/vaatiRebornEnemy.o(.text); src/enemy/vaatiProjectile.o(.text); asm/ballChainSoldier.o(.text); @@ -1120,6 +1121,7 @@ SECTIONS { data/animations/enemy/lakitu.o(.rodata); src/enemy/lakituCloud.o(.rodata); data/const/enemy/enemy49.o(.rodata); + src/enemy/vaatiRebornEnemy.o(.rodata); data/const/enemy/vaatiRebornEnemy.o(.rodata); data/animations/enemy/vaatiRebornEnemy.o(.rodata); src/enemy/vaatiProjectile.o(.rodata); diff --git a/src/npc/vaatiReborn.c b/src/npc/vaatiReborn.c index bf8defee..826e24fd 100644 --- a/src/npc/vaatiReborn.c +++ b/src/npc/vaatiReborn.c @@ -88,7 +88,105 @@ void sub_0806B67C(Entity* this) { } } -ASM_FUNC("asm/non_matching/vaati/sub_0806B7BC.inc", void sub_0806B7BC(Entity* this)) +void sub_0806B7BC(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; From b0ed5b08efe4b2fac454b23f9424a68bab33f236 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Sat, 19 Jun 2021 13:21:25 +0200 Subject: [PATCH 07/16] first part of vaati reborn enemy --- src/enemy/vaatiRebornEnemy.c | 208 +++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 src/enemy/vaatiRebornEnemy.c diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c new file mode 100644 index 00000000..272fbb00 --- /dev/null +++ b/src/enemy/vaatiRebornEnemy.c @@ -0,0 +1,208 @@ +#include "global.h" +#include "enemy.h" +#include "coord.h" +#include "flags.h" +#include "random.h" +#include "audio.h" +#include "functions.h" + +extern void sub_080AEFB4(Entity*); +extern u8 gEntCount; + +void sub_0803DFBC(Entity*); +void sub_0803DC58(Entity*); +void sub_0803D134(Entity*); +void sub_0803D264(Entity*); +void sub_0803D408(Entity*); +void sub_0803D560(Entity*); +void sub_0803D658(Entity*); +void sub_0803D700(Entity*); +void sub_0803D830(Entity*); +void sub_0803D8FC(Entity*); +void sub_0803D974(Entity*); +void sub_0803D9BC(Entity*); +void sub_0803DAA8(Entity*); +void sub_0803DAE4(Entity*); +void sub_0803DB88(Entity*); +void sub_0803DBB8(Entity*); +void sub_0803DD78(Entity*); +u32 sub_0803DEE0(Entity*); +u32 sub_0803E028(Entity*); + +typedef struct xy { + s8 x; + s8 y; +} PACKED xy; + +void (*const gUnk_080D0470[])(Entity*) = { + sub_0803D134, sub_0803D264, sub_0803D408, sub_0803D560, sub_0803D658, sub_0803D700, sub_0803D830, sub_0803D8FC, +}; +void (*const gUnk_080D0490[])(Entity*) = { + sub_0803D974, + sub_0803D9BC, +}; +void (*const gUnk_080D0498[])(Entity*) = { + sub_0803DAA8, + sub_0803DAE4, +}; +void (*const gUnk_080D04A0[])(Entity*) = { + sub_0803DB88, + sub_0803DBB8, +}; + +extern const xy gUnk_080D04A8[]; +extern const u16 gUnk_080D04AC[]; + +void VaatiRebornEnemy(Entity* this) { + switch (this->type) { + case 0: + sub_0803DFBC(this); + gUnk_080D0470[this->action](this); + break; + case 1: + sub_0803DC58(this); + gUnk_080D0490[this->action](this); + break; + case 2: + gUnk_080D0498[this->action](this); + break; + case 3: + gUnk_080D04A0[this->action](this); + break; + } +} + +void sub_0803D134(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 sub_0803D264(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); +} From 998fabb9b23219fcbb9a205728aef37bac732907 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Sat, 19 Jun 2021 21:46:33 +0200 Subject: [PATCH 08/16] decomp sub_0803D408 --- asm/vaatiRebornEnemy.s | 174 ----------------------------------- src/enemy/vaatiRebornEnemy.c | 59 +++++++++++- 2 files changed, 58 insertions(+), 175 deletions(-) diff --git a/asm/vaatiRebornEnemy.s b/asm/vaatiRebornEnemy.s index c7df101b..d2092068 100644 --- a/asm/vaatiRebornEnemy.s +++ b/asm/vaatiRebornEnemy.s @@ -7,180 +7,6 @@ .text - 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} diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c index 272fbb00..7ab2d240 100644 --- a/src/enemy/vaatiRebornEnemy.c +++ b/src/enemy/vaatiRebornEnemy.c @@ -6,6 +6,7 @@ #include "audio.h" #include "functions.h" +extern u32 __modsi3(u32, u32); extern void sub_080AEFB4(Entity*); extern u8 gEntCount; @@ -51,7 +52,7 @@ void (*const gUnk_080D04A0[])(Entity*) = { }; extern const xy gUnk_080D04A8[]; -extern const u16 gUnk_080D04AC[]; +extern const Coords gUnk_080D04AC[]; void VaatiRebornEnemy(Entity* this) { switch (this->type) { @@ -206,3 +207,59 @@ void sub_0803D264(Entity* this) { } UpdateAnimationSingleFrame(this); } + +void sub_0803D408(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) { + this->field_0x80.HALF.HI += 1 + (Random() & 3); + this->field_0x80.HALF.HI = __modsi3(this->field_0x80.HALF.HI, 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); +} From 30dc95e5125a17c42d337c86015e2fef56f2bd3c Mon Sep 17 00:00:00 2001 From: Henny022p Date: Mon, 16 Aug 2021 18:32:22 +0200 Subject: [PATCH 09/16] decomp vaati reborn --- asm/non_matching/vaati/sub_0803E028.inc | 53 + asm/vaatiRebornEnemy.s | 1494 ----------------------- data/const/enemy/vaatiRebornEnemy.s | 23 - linker.ld | 2 - src/enemy/vaatiRebornEnemy.c | 633 +++++++++- 5 files changed, 682 insertions(+), 1523 deletions(-) create mode 100644 asm/non_matching/vaati/sub_0803E028.inc delete mode 100644 asm/vaatiRebornEnemy.s delete mode 100644 data/const/enemy/vaatiRebornEnemy.s diff --git a/asm/non_matching/vaati/sub_0803E028.inc b/asm/non_matching/vaati/sub_0803E028.inc new file mode 100644 index 00000000..6678e52b --- /dev/null +++ b/asm/non_matching/vaati/sub_0803E028.inc @@ -0,0 +1,53 @@ +.syntax unified + 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 +.syntax divided diff --git a/asm/vaatiRebornEnemy.s b/asm/vaatiRebornEnemy.s deleted file mode 100644 index d2092068..00000000 --- a/asm/vaatiRebornEnemy.s +++ /dev/null @@ -1,1494 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - 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] - 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] -_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/data/const/enemy/vaatiRebornEnemy.s b/data/const/enemy/vaatiRebornEnemy.s deleted file mode 100644 index c1c266fd..00000000 --- a/data/const/enemy/vaatiRebornEnemy.s +++ /dev/null @@ -1,23 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -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 - .incbin "baserom.gba", 0x0D04D0, 0x0000003 - -gUnk_080D04D3:: @ 080D04D3 - .incbin "baserom.gba", 0x0D04D3, 0x0000004 diff --git a/linker.ld b/linker.ld index 00b46639..d0566e3f 100644 --- a/linker.ld +++ b/linker.ld @@ -417,7 +417,6 @@ SECTIONS { src/enemy/lakituCloud.o(.text); asm/enemy49.o(.text); src/enemy/vaatiRebornEnemy.o(.text); - asm/vaatiRebornEnemy.o(.text); src/enemy/vaatiProjectile.o(.text); asm/ballChainSoldier.o(.text); src/enemy/enemy4D.o(.text); @@ -1122,7 +1121,6 @@ SECTIONS { src/enemy/lakituCloud.o(.rodata); data/const/enemy/enemy49.o(.rodata); src/enemy/vaatiRebornEnemy.o(.rodata); - data/const/enemy/vaatiRebornEnemy.o(.rodata); data/animations/enemy/vaatiRebornEnemy.o(.rodata); src/enemy/vaatiProjectile.o(.rodata); data/animations/enemy/vaatiProjectile.o(.rodata); diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c index 7ab2d240..3f3bceef 100644 --- a/src/enemy/vaatiRebornEnemy.c +++ b/src/enemy/vaatiRebornEnemy.c @@ -4,9 +4,9 @@ #include "flags.h" #include "random.h" #include "audio.h" +#include "area.h" #include "functions.h" -extern u32 __modsi3(u32, u32); extern void sub_080AEFB4(Entity*); extern u8 gEntCount; @@ -29,6 +29,7 @@ void sub_0803DBB8(Entity*); void sub_0803DD78(Entity*); u32 sub_0803DEE0(Entity*); u32 sub_0803E028(Entity*); +void sub_0803DC0C(Entity*); typedef struct xy { s8 x; @@ -51,8 +52,16 @@ void (*const gUnk_080D04A0[])(Entity*) = { sub_0803DBB8, }; -extern const xy gUnk_080D04A8[]; -extern const Coords gUnk_080D04AC[]; +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 } }; +const u8 gUnk_080D04D0[] = { -24, -40, -48 }; +const u8 gUnk_080D04D3[] = { 0, 1, 0, -1 }; void VaatiRebornEnemy(Entity* this) { switch (this->type) { @@ -231,8 +240,10 @@ void sub_0803D408(Entity* this) { if (--this->actionDelay == 0) { this->field_0x74.HALF.LO++; if (sub_0803E028(this) == 0) { + s32 tmp; this->field_0x80.HALF.HI += 1 + (Random() & 3); - this->field_0x80.HALF.HI = __modsi3(this->field_0x80.HALF.HI, 5); + 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; @@ -263,3 +274,617 @@ void sub_0803D408(Entity* this) { } UpdateAnimationSingleFrame(this); } + +void sub_0803D560(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 sub_0803D658(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 = sub_0804A98C(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 sub_0803D700(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 sub_0803D830(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 = sub_0804A98C(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 sub_0803D8FC(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; + fx->spritePriority.b0 = 2; + } + } + } + } +} + +void sub_0803D974(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 sub_0803D9BC(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 sub_0803DAA8(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 sub_0803DAE4(Entity* this) { + u8 bVar1; + 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; + } + bVar1 = parent->parent->direction; + if (bVar1 != 0xff) { + if (this->field_0x74.HALF.HI == 0) { + this->field_0x74.HALF.HI = 1; + } + if (bVar1 != this->direction) { + this->direction = bVar1; + InitAnimationForceUpdate(this, bVar1 >> 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 sub_0803DB88(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 sub_0803DBB8(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 sub_0803DC58(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(0x80100000); + 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 sub_0803DFBC(Entity* this) { + u32 bVar1; + int iVar3; + + 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]; + } +} + +NONMATCH("asm/non_matching/vaati/sub_0803E028.inc", u32 sub_0803E028(Entity* this)) { + u32 uVar4; + u32 rx, ry, px; + + uVar4 = 0; + if ((this->field_0x74.HALF.HI != 2) && ((Random() & 1) != 0)) { + return 0; + } + if (this->field_0x76.HALF.HI == 1) { + if (gRoomControls.roomOriginX + 0x58 <= gPlayerEntity.x.HALF.HI) { + if (gRoomControls.roomOriginY + 0x58 <= gPlayerEntity.x.HALF.HI) { + if (gRoomControls.roomOriginY + 0xf8 >= gPlayerEntity.x.HALF.HI) { + this->field_0x80.HALF.HI += 5; + uVar4 = 1; + } + } + } + } + return uVar4; +} +END_NONMATCH From e1759fa99cac28ae50c24a18c89092f0704ad685 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Thu, 7 Oct 2021 15:10:40 +0200 Subject: [PATCH 10/16] decompile VaatiTransfigured --- data/const/enemy/vaatiTransfigured.s | 65 -- linker.ld | 4 +- src/enemy/vaatiTransfigured.c | 1091 ++++++++++++++++++++++++++ 3 files changed, 1093 insertions(+), 67 deletions(-) delete mode 100644 data/const/enemy/vaatiTransfigured.s create mode 100644 src/enemy/vaatiTransfigured.c diff --git a/data/const/enemy/vaatiTransfigured.s b/data/const/enemy/vaatiTransfigured.s deleted file mode 100644 index a5163c24..00000000 --- a/data/const/enemy/vaatiTransfigured.s +++ /dev/null @@ -1,65 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_080D0ABC:: @ 080D0ABC - .incbin "baserom.gba", 0x0D0ABC, 0x0000003 - -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/linker.ld b/linker.ld index d0566e3f..60daec93 100644 --- a/linker.ld +++ b/linker.ld @@ -422,7 +422,7 @@ SECTIONS { 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); src/enemy/vaatiArm.o(.text); @@ -1129,7 +1129,7 @@ SECTIONS { 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); diff --git a/src/enemy/vaatiTransfigured.c b/src/enemy/vaatiTransfigured.c new file mode 100644 index 00000000..38a0d07f --- /dev/null +++ b/src/enemy/vaatiTransfigured.c @@ -0,0 +1,1091 @@ +#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 sub_0803F818(Entity*); +void sub_0803F914(Entity*); +void sub_0803FAC8(Entity*); +void sub_0803FAD0(Entity*); +void sub_0803FD50(Entity*); +void sub_0803FE90(Entity*); +void sub_0803FF7C(Entity*); +void sub_0804006C(Entity*); +void sub_08040130(Entity*); +void sub_0804015C(Entity*); +void sub_080401E0(Entity*); +void sub_08040268(Entity*); +void sub_0804038C(Entity*); +void sub_080403CC(Entity*); +void sub_080403EC(Entity*); +void sub_0804041C(Entity*); +void sub_0804044C(Entity*); +void sub_080404D0(Entity*); +void sub_0804051C(Entity*); +void sub_080405D8(Entity*); + +typedef struct { + s8 x; + s8 y; +} PACKED xy; +extern u8 gEntCount; + +const u8 gUnk_080D0ABC[] = { 0xf0, 0xd0, 0xc0 }; +const u8 gUnk_080D0ABF[] = { 0x3c, 0x3c, 0x1e, 0x14, 0x14, 0x14, 0, 0, 0 }; +void (*const gUnk_080D0AC8[])(Entity*) = { + sub_0803F818, sub_0803F914, sub_0803FAC8, sub_0803FAD0, sub_0803FD50, sub_0803FE90, sub_0803FF7C, sub_0804006C, +}; +void (*const gUnk_080D0AE8[])(Entity*) = { + sub_08040130, + sub_0804015C, +}; +void (*const gUnk_080D0AF0[])(Entity*) = { + sub_080401E0, + sub_08040268, + sub_0804038C, +}; +void (*const gUnk_080D0AFC[])(Entity*) = { + sub_080403CC, + sub_080403EC, +}; +void (*const gUnk_080D0B04[])(Entity*) = { + sub_0804041C, + sub_0804044C, +}; +void (*const gUnk_080D0B0C[])(Entity*) = { + sub_080404D0, + sub_0804051C, + sub_080405D8, +}; + +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); + } + gUnk_080D0AC8[this->action](this); + break; + case 1: + gUnk_080D0AE8[this->action](this); + break; + case 2: + gUnk_080D0AF0[this->action](this); + break; + case 3: + gUnk_080D0AFC[this->action](this); + break; + case 4: + gUnk_080D0B04[this->action](this); + break; + case 5: + gUnk_080D0B0C[this->action](this); + return; + default: + break; + } +} + +void sub_0803F818(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(ENEMY_5A, 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 sub_0803F914(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 sub_0803FAC8(Entity* this) { + UpdateAnimationSingleFrame(this); +} + +void sub_0803FAD0(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 sub_0803FD50(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) { + sub_0804A98C(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 sub_0803FE90(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) { + sub_0804A98C(this, 0x1f, this->field_0xf); + } + if (this->actionDelay < 6) { + this->actionDelay = 0x40; + this->field_0xf = 0; + } + } else { + if ((this->actionDelay & 0xf) == 0) { + entity = sub_0804A98C(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 sub_0803FF7C(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) { + sub_0804A98C(this, 0x1f, this->field_0xf); + } + if (this->actionDelay < 6) { + this->actionDelay = 0x80; + this->field_0xf = 0; + } + } else { + if ((this->actionDelay & 0x1f) == 0) { + pEVar2 = sub_0804A98C(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 sub_0804006C(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 sub_08040130(Entity* this) { + this->action = 1; + this->actionDelay = 0; + this->field_0x80.HALF.LO = 0; + this->spritePriority.b0 = 6; + InitAnimationForceUpdate(this, (u32)this->actionDelay); +} + +void sub_0804015C(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 sub_080401E0(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 sub_08040268(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 sub_0804038C(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 sub_080403CC(Entity* this) { + this->action = 1; + this->spritePriority.b0 = 4; + InitAnimationForceUpdate(this, 0); +} + +void sub_080403EC(Entity* this) { + if (this->parent->currentHealth == 0) { + this->field_0x6c.HALF.HI |= 2; + DeleteThisEntity(); + } + CopyPosition(this->parent, this); + UpdateAnimationSingleFrame(this); +} + +void sub_0804041C(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 sub_0804044C(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 sub_080404D0(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 sub_0804051C(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 sub_080405D8(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; + } +} From 00a57e3b368c98ccf5f2f45f89b1353523445940 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Thu, 21 Oct 2021 10:36:44 +0200 Subject: [PATCH 11/16] decompiled Enemy5A --- asm/enemy5A.s | 652 --------- asm/vaatiTransfigured.s | 2644 ------------------------------------ data/const/enemy/enemy5A.s | 24 - linker.ld | 4 +- src/enemy/enemy5A.c | 327 +++++ 5 files changed, 329 insertions(+), 3322 deletions(-) delete mode 100644 asm/enemy5A.s delete mode 100644 asm/vaatiTransfigured.s delete mode 100644 data/const/enemy/enemy5A.s create mode 100644 src/enemy/enemy5A.c 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/vaatiTransfigured.s b/asm/vaatiTransfigured.s deleted file mode 100644 index 246058b5..00000000 --- a/asm/vaatiTransfigured.s +++ /dev/null @@ -1,2644 +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] - 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] - 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/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/linker.ld b/linker.ld index 60daec93..0709b6d6 100644 --- a/linker.ld +++ b/linker.ld @@ -433,7 +433,7 @@ SECTIONS { src/enemy/miniSlime.o(.text); src/enemy/fireballGuy.o(.text); src/enemy/miniFireballGuy.o(.text); - asm/enemy5A.o(.text); + src/enemy/enemy5A.o(.text); asm/businessScrubPrologue.o(.text); asm/gyorgFemale.o(.text); src/enemy/gyorgMale.o(.text); @@ -1145,7 +1145,7 @@ 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); + src/enemy/enemy5A.o(.rodata); data/animations/enemy/enemy5A.o(.rodata); data/const/enemy/businessScrubPrologue.o(.rodata); data/const/enemy/gyorgFemale.o(.rodata); diff --git a/src/enemy/enemy5A.c b/src/enemy/enemy5A.c new file mode 100644 index 00000000..058f6afb --- /dev/null +++ b/src/enemy/enemy5A.c @@ -0,0 +1,327 @@ +#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 sub_080456E8(Entity*); +void sub_08045700(Entity*); +void nullsub_173(Entity*); +void sub_080457E4(Entity*); +void sub_0804586C(Entity*); +void sub_080458C4(Entity*); +void sub_08045938(Entity*); +void sub_08045984(Entity*); + +void (*const gUnk_080D1888[])(Entity*) = { + sub_080456E8, sub_08045700, sub_080456E8, sub_0804A7D4, sub_08001242, nullsub_173, +}; + +void (*const gUnk_080D18A0[])(Entity*) = { + sub_080457E4, sub_0804586C, sub_080458C4, sub_08045938, sub_08045984, +}; + +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 Enemy5A(Entity* this) { + EnemyFunctionHandler(this, gUnk_080D1888); +} + +void sub_080456E8(Entity* this) { + gUnk_080D18A0[this->action](this); +} + +void sub_08045700(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, gUnk_080D1888); +} + +void nullsub_173(Entity* this) { +} + +void sub_080457E4(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(ENEMY_5A, 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 sub_0804586C(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, (u32)this->type << 3); + } + } else { + if (--this->field_0x82.HALF.LO == 0) { + this->spriteSettings.b.draw = 1; + } + } +} + +void sub_080458C4(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 sub_08045938(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 sub_08045984(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; + } + } +} From edf9a747a3b71809e4d182851c5af5a44d01fa2d Mon Sep 17 00:00:00 2001 From: Henny022p Date: Fri, 22 Oct 2021 14:29:16 +0200 Subject: [PATCH 12/16] decompiled VaatiWrath --- asm/vaatiWrath.s | 2350 --------------------------------- data/const/enemy/vaatiWrath.s | 56 - include/save.h | 4 +- linker.ld | 4 +- src/enemy/vaatiWrath.c | 1070 +++++++++++++++ 5 files changed, 1075 insertions(+), 2409 deletions(-) delete mode 100644 asm/vaatiWrath.s delete mode 100644 data/const/enemy/vaatiWrath.s create mode 100644 src/enemy/vaatiWrath.c diff --git a/asm/vaatiWrath.s b/asm/vaatiWrath.s deleted file mode 100644 index cb1c8367..00000000 --- a/asm/vaatiWrath.s +++ /dev/null @@ -1,2350 +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 - 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 - - 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 - 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 - - 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} - - 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 - - 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/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/include/save.h b/include/save.h index 6bc0819c..81acdd31 100644 --- a/include/save.h +++ b/include/save.h @@ -39,7 +39,9 @@ typedef struct { /*0x0A8*/ Stats stats; /*0x0D0*/ u8 fillerD0[0x3c0]; /*0x490*/ u32 unk490; - /*0x494*/ u8 filler494[0x20]; + /*0x494*/ u8 filler494[4]; + /*0x498*/ u32 filler498; + /*0x49c*/ u8 filler49C[0x18]; } SaveFile; extern SaveFile gSave; diff --git a/linker.ld b/linker.ld index 0709b6d6..d1ad23cd 100644 --- a/linker.ld +++ b/linker.ld @@ -424,7 +424,7 @@ SECTIONS { asm/ghini.o(.text); src/enemy/vaatiTransfigured.o(.text); asm/enemy50.o(.text); - asm/vaatiWrath.o(.text); + src/enemy/vaatiWrath.o(.text); src/enemy/vaatiArm.o(.text); asm/dust.o(.text); src/enemy/vaatiBall.o(.text); @@ -1132,7 +1132,7 @@ SECTIONS { 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); src/enemy/vaatiArm.o(.rodata); data/animations/enemy/vaatiArm.o(.rodata); diff --git a/src/enemy/vaatiWrath.c b/src/enemy/vaatiWrath.c new file mode 100644 index 00000000..c821e82e --- /dev/null +++ b/src/enemy/vaatiWrath.c @@ -0,0 +1,1070 @@ +#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 sub_080423A4(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 sub_080413A0(Entity*); +void sub_08042428(Entity*); +void sub_080424A0(Entity*); +void sub_0804250C(Entity*); +void sub_080413C0(Entity*); +void sub_08041490(Entity*); +void sub_080415E8(Entity*); +void sub_08041618(Entity*); +void sub_080416A4(Entity*); +void sub_080416DC(Entity*); +void sub_080417AC(Entity*); +void sub_08041828(Entity*); +void sub_08041880(Entity*); +void sub_08041904(Entity*); +void sub_0804197C(Entity*); +void sub_08041A00(Entity*); +void sub_08041AF4(Entity*); +void sub_08041BD0(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 gUnk_080D0E1C[])(Entity*) = { + sub_080413A0, + sub_08042428, + sub_080424A0, + sub_0804250C, +}; +void (*const gUnk_080D0E2C[])(Entity*) = { + sub_080413C0, sub_08041490, sub_080415E8, sub_08041618, sub_080416A4, sub_080416DC, sub_080417AC, + sub_08041828, sub_08041880, sub_08041904, sub_0804197C, sub_08041A00, sub_08041AF4, sub_08041BD0, +}; + +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); + } + } + gUnk_080D0E1C[this->type](this); +} + +void sub_080413A0(Entity* this) { + sub_080423A4(this); + gUnk_080D0E2C[this->action](this); +} + +void sub_080413C0(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 sub_08041490(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 sub_080415E8(Entity* this) { + sub_08042004(this); + UpdateAnimationSingleFrame(this); + if (--this->actionDelay == 0) { + this->field_0xf = (Random() & 1) + 1; + sub_08042028(this); + } +} + +void sub_08041618(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 sub_080416A4(Entity* this) { + sub_08042004(this); + UpdateAnimationSingleFrame(this); + if (--this->actionDelay == 0) { + if (--this->field_0xf == 0) { + sub_08042120(this); + } else { + sub_08042028(this); + } + } +} + +void sub_080416DC(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 sub_080417AC(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 sub_08041828(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 sub_08041880(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 sub_08041904(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 sub_0804197C(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 sub_08041A00(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 sub_08041AF4(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 sub_08041BD0(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; + + entity = ((VaatiWrathHeapStruct*)this->myHeap)->object5b; + entity->myHeap = NULL; + DeleteEntity(entity); + ((VaatiWrathHeapStruct*)this->myHeap)->object5b = NULL; + + gRoomControls.cameraTarget = &gPlayerEntity; + + 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(ENEMY_5F, 0); + eye->parent = this; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[0] = eye; + eye = CreateEnemy(ENEMY_5F, 1); + eye->parent = this; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[1] = eye; + eye = CreateEnemy(ENEMY_5F, 2); + eye->parent = this; + ((VaatiWrathHeapStruct*)this->myHeap)->eyes[2] = eye; + eye = CreateEnemy(ENEMY_5F, 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 = sub_080A7EE0(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); +} + +void sub_080423A4(Entity* this) { + int temp; + if ((gScreenTransition.field_0x38 & 2) == 0) { + if (gSave.filler498 != 0) { + gSave.filler498--; + } 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; + } + } + } + } + } + } + } +} + +void sub_08042428(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 sub_080424A0(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 sub_0804250C(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); +} From 10f17e914adcf073ad8de24d1931c085d2510bbd Mon Sep 17 00:00:00 2001 From: Henny022p Date: Fri, 22 Oct 2021 18:39:30 +0200 Subject: [PATCH 13/16] decompiled Enemy5F --- asm/enemy5F.s | 474 ------------------------------------- data/const/enemy/enemy5F.s | 26 -- linker.ld | 4 +- src/enemy/enemy5F.c | 211 +++++++++++++++++ 4 files changed, 213 insertions(+), 502 deletions(-) delete mode 100644 asm/enemy5F.s delete mode 100644 data/const/enemy/enemy5F.s create mode 100644 src/enemy/enemy5F.c 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/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/linker.ld b/linker.ld index d1ad23cd..67e3a23a 100644 --- a/linker.ld +++ b/linker.ld @@ -438,7 +438,7 @@ SECTIONS { asm/gyorgFemale.o(.text); src/enemy/gyorgMale.o(.text); asm/curtain.o(.text); - asm/enemy5F.o(.text); + src/enemy/enemy5F.o(.text); asm/gyorgChild.o(.text); asm/gyorgFemaleEye.o(.text); asm/enemy62.o(.text); @@ -1153,7 +1153,7 @@ SECTIONS { data/animations/enemy/gyorgMale.o(.rodata); data/const/enemy/curtain.o(.rodata); data/animations/enemy/curtain.o(.rodata); - data/const/enemy/enemy5F.o(.rodata); + src/enemy/enemy5F.o(.rodata); data/animations/enemy/enemy5F.o(.rodata); data/const/enemy/gyorgChild.o(.rodata); data/animations/enemy/gyorgChild.o(.rodata); diff --git a/src/enemy/enemy5F.c b/src/enemy/enemy5F.c new file mode 100644 index 00000000..969a91c0 --- /dev/null +++ b/src/enemy/enemy5F.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 sub_080482EC(Entity*); +void sub_08048330(Entity*); +void sub_0804835C(Entity*); +void sub_08048388(Entity*); +void sub_080483F8(Entity*); +void sub_08048438(Entity*); +void sub_08048478(Entity*); +void sub_080484E8(Entity*); +void sub_08048550(Entity*); +void sub_080485A0(Entity*); + +void (*const gUnk_080D1D48[])(Entity*) = { + sub_080482EC, sub_08048330, sub_0804835C, sub_08048388, sub_080483F8, + sub_08048438, sub_08048478, sub_080484E8, sub_08048550, sub_080485A0, +}; + +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 Enemy5F(Entity* this) { + if (this->parent->next == NULL) { + DeleteThisEntity(); + } + gUnk_080D1D48[this->action](this); +} + +void sub_080482EC(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 sub_08048330(Entity* this) { + sub_080485D8(this); + GetNextFrame(this); + if ((this->frames.all & 0x80) != 0) { + this->action = 2; + InitializeAnimation(this, 1); + } +} + +void sub_0804835C(Entity* this) { + sub_080485D8(this); + if ((gScreenTransition.field_0x39 & 3) == 0) { + this->action = 3; + this->flags |= 0x80; + this->speed = 0x80; + } +} + +void sub_08048388(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 sub_080483F8(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 sub_08048438(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 sub_08048478(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 = sub_080A7EE0(0x24); + if (pEVar3 != NULL) { + pEVar3->parent = this; + this->attachedEntity = pEVar3; + PositionRelative(this, pEVar3, 0, 0xc0000); + } + } + } + } +} + +void sub_080484E8(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 sub_08048550(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 sub_080485A0(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)]; +} From 7469f652095cabd801ad950e6cd525f2729c6fab Mon Sep 17 00:00:00 2001 From: Henny022p Date: Fri, 22 Oct 2021 18:45:06 +0200 Subject: [PATCH 14/16] decompiled ObjectB5 --- asm/objectB5.s | 29 ----------------------------- linker.ld | 2 +- src/object/objectB5.c | 12 ++++++++++++ 3 files changed, 13 insertions(+), 30 deletions(-) delete mode 100644 asm/objectB5.s create mode 100644 src/object/objectB5.c diff --git a/asm/objectB5.s b/asm/objectB5.s deleted file mode 100644 index 89ef3f00..00000000 --- a/asm/objectB5.s +++ /dev/null @@ -1,29 +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: - ldr r0, _080A0E48 @ =gRoomControls - str r1, [r0, #0x30] - ldr r0, _080A0E4C @ =gPlayerEntity - ldr r3, _080A0E50 @ =0xFFD80000 - movs r2, #0 - bl PositionRelative - pop {pc} - .align 2, 0 -_080A0E48: .4byte gRoomControls -_080A0E4C: .4byte gPlayerEntity -_080A0E50: .4byte 0xFFD80000 diff --git a/linker.ld b/linker.ld index 67e3a23a..8210a334 100644 --- a/linker.ld +++ b/linker.ld @@ -884,7 +884,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); diff --git a/src/object/objectB5.c b/src/object/objectB5.c new file mode 100644 index 00000000..c149cec5 --- /dev/null +++ b/src/object/objectB5.c @@ -0,0 +1,12 @@ +#include "entity.h" +#include "room.h" +#include "player.h" +#include "coord.h" + +void ObjectB5(Entity* this) { + if (this->action == 0) { + this->action = 1; + } + gRoomControls.cameraTarget = this; + PositionRelative(&gPlayerEntity, this, 0, -0x280000); +} From 195c62d64118bac156d23ab373ac4baa1a3af5ac Mon Sep 17 00:00:00 2001 From: Henny022p Date: Sat, 23 Oct 2021 02:10:42 +0200 Subject: [PATCH 15/16] rename functions and clean some code --- asm/non_matching/vaati/sub_0803E028.inc | 53 ------- asm/non_matching/vaati/sub_08066ACC.inc | 86 ---------- .../{enemy5A.s => vaatiTransfiguredEye.s} | 0 .../enemy/{enemy5F.s => vaatiWrathEye.s} | 0 include/enemy.h | 8 +- linker.ld | 12 +- src/enemy.c | 4 +- src/enemy/vaatiEyesMacro.c | 76 ++++----- src/enemy/vaatiProjectile.c | 77 ++++----- src/enemy/vaatiRebornEnemy.c | 150 +++++++++--------- src/enemy/vaatiTransfigured.c | 134 ++++++++-------- .../{enemy5A.c => vaatiTransfiguredEye.c} | 58 ++++--- src/enemy/vaatiWrath.c | 108 ++++++------- src/enemy/{enemy5F.c => vaatiWrathEye.c} | 50 +++--- src/npc/vaati.c | 30 ++-- src/npc/vaatiReborn.c | 16 +- 16 files changed, 371 insertions(+), 491 deletions(-) delete mode 100644 asm/non_matching/vaati/sub_0803E028.inc delete mode 100644 asm/non_matching/vaati/sub_08066ACC.inc rename data/animations/enemy/{enemy5A.s => vaatiTransfiguredEye.s} (100%) rename data/animations/enemy/{enemy5F.s => vaatiWrathEye.s} (100%) rename src/enemy/{enemy5A.c => vaatiTransfiguredEye.c} (84%) rename src/enemy/{enemy5F.c => vaatiWrathEye.c} (81%) diff --git a/asm/non_matching/vaati/sub_0803E028.inc b/asm/non_matching/vaati/sub_0803E028.inc deleted file mode 100644 index 6678e52b..00000000 --- a/asm/non_matching/vaati/sub_0803E028.inc +++ /dev/null @@ -1,53 +0,0 @@ -.syntax unified - 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 -.syntax divided diff --git a/asm/non_matching/vaati/sub_08066ACC.inc b/asm/non_matching/vaati/sub_08066ACC.inc deleted file mode 100644 index 25046e05..00000000 --- a/asm/non_matching/vaati/sub_08066ACC.inc +++ /dev/null @@ -1,86 +0,0 @@ - - .syntax unified - 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 - .syntax divided 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/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/linker.ld b/linker.ld index 7a952401..6835372f 100644 --- a/linker.ld +++ b/linker.ld @@ -455,12 +455,12 @@ SECTIONS { src/enemy/miniSlime.o(.text); src/enemy/fireballGuy.o(.text); src/enemy/miniFireballGuy.o(.text); - src/enemy/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); - src/enemy/enemy5F.o(.text); + src/enemy/vaatiWrathEye.o(.text); asm/gyorgChild.o(.text); asm/gyorgFemaleEye.o(.text); asm/enemy62.o(.text); @@ -1156,16 +1156,16 @@ SECTIONS { data/const/enemy/fireballGuy.o(.rodata); data/animations/enemy/fireballGuy.o(.rodata); data/const/enemy/miniFireballGuy.o(.rodata); - src/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); - src/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); 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/vaatiEyesMacro.c b/src/enemy/vaatiEyesMacro.c index 55e13521..f2d3041d 100644 --- a/src/enemy/vaatiEyesMacro.c +++ b/src/enemy/vaatiEyesMacro.c @@ -7,37 +7,37 @@ extern u32 sub_080002E0(u32, u32); extern s16 gUnk_080B4488[]; -void sub_0802EC98(Entity*); -void sub_0802ECC0(Entity*); -void sub_0802ED74(Entity*); -void sub_0802EE20(Entity*); -void sub_0802EEB8(Entity*); -void sub_0802EF1C(Entity*); -void sub_0802ED8C(Entity*); -void sub_0802EE10(Entity*); -void sub_0802EE38(Entity*); -void sub_0802EE8C(Entity*); +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 gUnk_080CDE34[])(Entity*) = { - sub_0802EC98, sub_0802ECC0, sub_08001324, sub_0804A7D4, sub_08001242, sub_0802EC98, +void (*const vaatiEyesMacroFunctions[])(Entity*) = { + VaatiEyesMacroFunction0, VaatiEyesMacroFunction1, sub_08001324, sub_0804A7D4, sub_08001242, VaatiEyesMacroFunction0, }; -void (*const gUnk_080CDE4C[])(Entity*) = { - sub_0802ED74, - sub_0802EE20, - sub_0802EEB8, - sub_0802EF1C, +void (*const vaatiEyesMacroFunction0Types[])(Entity*) = { + VaatiEyesMacroFunction0Type0, + VaatiEyesMacroFunction0Type1, + VaatiEyesMacroFunction0Type2, + VaatiEyesMacroFunction0Type3, }; -void (*const gUnk_080CDE5C[])(Entity*) = { - sub_0802ED8C, - sub_0802EE10, +void (*const vaatiEyesMacroFunction0Type0Actions[])(Entity*) = { + VaatiEyesMacroFunction0Type0Action0, + VaatiEyesMacroFunction0Type0Action1, }; -void (*const gUnk_080CDE64[])(Entity*) = { - sub_0802EE38, - sub_0802EE8C, +void (*const vaatiEyesMacroFunction0Type1Actions[])(Entity*) = { + VaatiEyesMacroFunction0Type1Action0, + VaatiEyesMacroFunction0Type1Action1, }; const u8 gUnk_080CDE6C[] = { 0, 8, 0x18, 0 }; const u8 gUnk_080CDE70[] = { @@ -49,18 +49,18 @@ const u16 gUnk_080CDE98[] = { 0xc0, 0x100, 0x140, 0x180 }; extern u8 gEntCount; void VaatiEyesMacro(Entity* this) { - gUnk_080CDE34[GetNextFunction(this)](this); + vaatiEyesMacroFunctions[GetNextFunction(this)](this); SetChildOffset(this, 0, 1, -0x10); } -void sub_0802EC98(Entity* this) { - gUnk_080CDE4C[this->type](this); +void VaatiEyesMacroFunction0(Entity* this) { + vaatiEyesMacroFunction0Types[this->type](this); if (this->type < 2) { sub_0802EF90(this); } } -void sub_0802ECC0(Entity* this) { +void VaatiEyesMacroFunction1(Entity* this) { if (this->type == 0) { if (this->currentHealth == 0) { gScreenTransition.field_0x39 &= ~(1 << (gScreenTransition.field_0x3c + 2)); @@ -88,14 +88,14 @@ void sub_0802ECC0(Entity* this) { if (this->field_0x43 != 0) { sub_0804A9FC(this, 0x1c); } - sub_0804AA30(this, gUnk_080CDE34); + sub_0804AA30(this, vaatiEyesMacroFunctions); } -void sub_0802ED74(Entity* this) { - gUnk_080CDE5C[this->action](this); +void VaatiEyesMacroFunction0Type0(Entity* this) { + vaatiEyesMacroFunction0Type0Actions[this->action](this); } -void sub_0802ED8C(Entity* this) { +void VaatiEyesMacroFunction0Type0Action0(Entity* this) { Manager* manager; Entity* enemy; @@ -119,16 +119,16 @@ void sub_0802ED8C(Entity* this) { } } -void sub_0802EE10(Entity* this) { +void VaatiEyesMacroFunction0Type0Action1(Entity* this) { sub_0802F04C(this); GetNextFrame(this); } -void sub_0802EE20(Entity* this) { - gUnk_080CDE64[this->action](this); +void VaatiEyesMacroFunction0Type1(Entity* this) { + vaatiEyesMacroFunction0Type1Actions[this->action](this); } -void sub_0802EE38(Entity* this) { +void VaatiEyesMacroFunction0Type1Action0(Entity* this) { Entity* entity; u32 rand; @@ -144,7 +144,7 @@ void sub_0802EE38(Entity* this) { } } -void sub_0802EE8C(Entity* this) { +void VaatiEyesMacroFunction0Type1Action1(Entity* this) { if (this->parent->next == NULL) { this->flags &= 0x7f; this->currentHealth = 0; @@ -159,7 +159,7 @@ typedef struct xy { u8 y; } xy; -void sub_0802EEB8(Entity* this) { +void VaatiEyesMacroFunction0Type2(Entity* this) { u32 uVar2; xy* temp; @@ -182,7 +182,7 @@ void sub_0802EEB8(Entity* this) { this->spriteOffsetY -= 1; } -void sub_0802EF1C(Entity* this) { +void VaatiEyesMacroFunction0Type3(Entity* this) { if (this->parent->next == NULL) { DeleteThisEntity(); } diff --git a/src/enemy/vaatiProjectile.c b/src/enemy/vaatiProjectile.c index 0713524e..1d77249e 100644 --- a/src/enemy/vaatiProjectile.c +++ b/src/enemy/vaatiProjectile.c @@ -10,31 +10,34 @@ extern Entity* gUnk_020000B0; extern const ScreenTransitionData gUnk_0813AB94; bool32 sub_0803E4A0(Entity*); -void sub_0803E0C4(Entity*); -void sub_0803E0DC(Entity*); +void VaatiProjectileFunction0(Entity*); +void VaatiProjectileFunction1(Entity*); void sub_08001328(Entity*); -void sub_0803E188(Entity*); -void nullsub_19(Entity*); -void sub_0803E1A8(Entity*); -void sub_0803E258(Entity*); -void sub_0803E2A8(Entity*); -void sub_0803E2D0(Entity*); -void sub_0803E314(Entity*); -void sub_0803E340(Entity*); -void sub_0803E370(Entity*); -void sub_0803E398(Entity*); -void sub_0803E3D4(Entity*); -void sub_0803E3FC(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 gUnk_080D0648[])(Entity*) = { - sub_0803E0C4, sub_0803E0DC, sub_08001328, sub_0803E188, sub_08001242, nullsub_19, +void (*const vaatiProjectileFunctions[])(Entity*) = { + VaatiProjectileFunction0, VaatiProjectileFunction1, sub_08001328, VaatiProjectileFunction3, sub_08001242, + VaatiProjectileNoop, }; -void (*const gUnk_080D0660[])(Entity*) = { - sub_0803E1A8, sub_0803E258, sub_0803E2A8, sub_0803E2D0, sub_0803E314, - sub_0803E340, sub_0803E370, sub_0803E398, sub_0803E3D4, sub_0803E3FC, +void (*const vaatiProjectileFunction0Actions[])(Entity*) = { + VaatiProjectileFunction0Action0, VaatiProjectileFunction0Action1, VaatiProjectileFunction0Action2, + VaatiProjectileFunction0Action3, VaatiProjectileFunction0Action4, VaatiProjectileFunction0Action5, + VaatiProjectileFunction0Action6, VaatiProjectileFunction0Action7, VaatiProjectileFunction0Action8, + VaatiProjectileFunction0Action9, }; void VaatiProjectile(Entity* this) { @@ -43,14 +46,14 @@ void VaatiProjectile(Entity* this) { this->currentHealth = 0; this->parent = NULL; } - gUnk_080D0648[GetNextFunction(this)](this); + vaatiProjectileFunctions[GetNextFunction(this)](this); } -void sub_0803E0C4(Entity* this) { - gUnk_080D0660[this->action](this); +void VaatiProjectileFunction0(Entity* this) { + vaatiProjectileFunction0Actions[this->action](this); } -void sub_0803E0DC(Entity* this) { +void VaatiProjectileFunction1(Entity* this) { Entity* entity; if (this->bitfield == 0x80) { @@ -77,10 +80,10 @@ void sub_0803E0DC(Entity* this) { } #endif } - sub_0804AA30(this, gUnk_080D0648); + sub_0804AA30(this, vaatiProjectileFunctions); } -void sub_0803E188(Entity* this) { +void VaatiProjectileFunction3(Entity* this) { if (this->parent != NULL) { this->parent->field_0xf--; this->parent = NULL; @@ -88,10 +91,10 @@ void sub_0803E188(Entity* this) { sub_0804A7D4(this); } -void nullsub_19(Entity* this) { +void VaatiProjectileNoop(Entity* this) { } -void sub_0803E1A8(Entity* this) { +void VaatiProjectileFunction0Action0(Entity* this) { Entity* entity; if (this->type == 0) { @@ -121,7 +124,7 @@ void sub_0803E1A8(Entity* this) { } } -void sub_0803E258(Entity* this) { +void VaatiProjectileFunction0Action1(Entity* this) { sub_0803E480(this); if (PlayerInRange(this, 0, 8) != 0) { this->action = 2; @@ -136,7 +139,7 @@ void sub_0803E258(Entity* this) { GetNextFrame(this); } -void sub_0803E2A8(Entity* this) { +void VaatiProjectileFunction0Action2(Entity* this) { if (this->actionDelay != 0) { this->actionDelay--; } else { @@ -147,7 +150,7 @@ void sub_0803E2A8(Entity* this) { GetNextFrame(this); } -void sub_0803E2D0(Entity* this) { +void VaatiProjectileFunction0Action3(Entity* this) { if ((this->attachedEntity->frames.b.f3) != 0) { if (--this->height.HALF.HI <= -0x18) { this->action = 4; @@ -158,7 +161,7 @@ void sub_0803E2D0(Entity* this) { } } -void sub_0803E314(Entity* this) { +void VaatiProjectileFunction0Action4(Entity* this) { if (--this->actionDelay == 0) { this->action = 1; this->direction = GetFacingDirection(this, &gPlayerEntity); @@ -166,7 +169,7 @@ void sub_0803E314(Entity* this) { GetNextFrame(this); } -void sub_0803E340(Entity* this) { +void VaatiProjectileFunction0Action5(Entity* this) { sub_0803E444(this); if (this->actionDelay != 0) { this->actionDelay--; @@ -179,7 +182,7 @@ void sub_0803E340(Entity* this) { } } -void sub_0803E370(Entity* this) { +void VaatiProjectileFunction0Action6(Entity* this) { if (--this->actionDelay == 0) { this->action = 7; this->direction = 0x10; @@ -188,7 +191,7 @@ void sub_0803E370(Entity* this) { sub_0803E444(this); } -void sub_0803E398(Entity* this) { +void VaatiProjectileFunction0Action7(Entity* this) { sub_0803E444(this); sub_0806F69C(this); sub_0803E4D8(this); @@ -198,7 +201,7 @@ void sub_0803E398(Entity* this) { } } -void sub_0803E3D4(Entity* this) { +void VaatiProjectileFunction0Action8(Entity* this) { if (this->parent->next == NULL) { DeleteThisEntity(); } @@ -206,7 +209,7 @@ void sub_0803E3D4(Entity* this) { GetNextFrame(this); } -void sub_0803E3FC(Entity* 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) { @@ -214,7 +217,7 @@ void sub_0803E3FC(Entity* this) { this->actionDelay = 0; InitializeAnimation(this->attachedEntity, 2); } - sub_0803E2A8(this); + VaatiProjectileFunction0Action2(this); } else { this->height.HALF.HI += 8; } diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c index 0959a3b6..9df23058 100644 --- a/src/enemy/vaatiRebornEnemy.c +++ b/src/enemy/vaatiRebornEnemy.c @@ -10,22 +10,22 @@ extern void sub_080AEFB4(Entity*); extern u8 gEntCount; -void sub_0803DFBC(Entity*); -void sub_0803DC58(Entity*); -void sub_0803D134(Entity*); -void sub_0803D264(Entity*); -void sub_0803D408(Entity*); -void sub_0803D560(Entity*); -void sub_0803D658(Entity*); -void sub_0803D700(Entity*); -void sub_0803D830(Entity*); -void sub_0803D8FC(Entity*); -void sub_0803D974(Entity*); -void sub_0803D9BC(Entity*); -void sub_0803DAA8(Entity*); -void sub_0803DAE4(Entity*); -void sub_0803DB88(Entity*); -void sub_0803DBB8(Entity*); +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*); @@ -36,20 +36,22 @@ typedef struct xy { s8 y; } PACKED xy; -void (*const gUnk_080D0470[])(Entity*) = { - sub_0803D134, sub_0803D264, sub_0803D408, sub_0803D560, sub_0803D658, sub_0803D700, sub_0803D830, sub_0803D8FC, +void (*const vaatiRebornEnemyType0Actions[])(Entity*) = { + VaatiRebornEnemyType0Action0, VaatiRebornEnemyType0Action1, VaatiRebornEnemyType0Action2, + VaatiRebornEnemyType0Action3, VaatiRebornEnemyType0Action4, VaatiRebornEnemyType0Action5, + VaatiRebornEnemyType0Action6, VaatiRebornEnemyType0Action7, }; -void (*const gUnk_080D0490[])(Entity*) = { - sub_0803D974, - sub_0803D9BC, +void (*const vaatiRebornEnemyType1Actions[])(Entity*) = { + VaatiRebornEnemyType1Action0, + VaatiRebornEnemyType1Action1, }; -void (*const gUnk_080D0498[])(Entity*) = { - sub_0803DAA8, - sub_0803DAE4, +void (*const vaatiRebornEnemyType2Actions[])(Entity*) = { + VaatiRebornEnemyType2Action0, + VaatiRebornEnemyType2Action1, }; -void (*const gUnk_080D04A0[])(Entity*) = { - sub_0803DB88, - sub_0803DBB8, +void (*const vaatiRebornEnemyType3Actions[])(Entity*) = { + VaatiRebornEnemyType3Action0, + VaatiRebornEnemyType3Action1, }; const xy gUnk_080D04A8[] = { { 16, -43 }, { -16, -43 } }; @@ -70,23 +72,23 @@ const u8 gUnk_080D04D3[] = { 0, 1, 0, -1 }; void VaatiRebornEnemy(Entity* this) { switch (this->type) { case 0: - sub_0803DFBC(this); - gUnk_080D0470[this->action](this); + VaatiRebornEnemyType0PreAction(this); + vaatiRebornEnemyType0Actions[this->action](this); break; case 1: - sub_0803DC58(this); - gUnk_080D0490[this->action](this); + VaatiRebornEnemyType1PreAction(this); + vaatiRebornEnemyType1Actions[this->action](this); break; case 2: - gUnk_080D0498[this->action](this); + vaatiRebornEnemyType2Actions[this->action](this); break; case 3: - gUnk_080D04A0[this->action](this); + vaatiRebornEnemyType3Actions[this->action](this); break; } } -void sub_0803D134(Entity* this) { +void VaatiRebornEnemyType0Action0(Entity* this) { s32 i; Entity* entity; const xy* ptr; @@ -138,7 +140,7 @@ void sub_0803D134(Entity* this) { } } -void sub_0803D264(Entity* this) { +void VaatiRebornEnemyType0Action1(Entity* this) { if (this->actionDelay != 0) { if (--this->actionDelay == 0) { if ((this->field_0x74.HALF.LO & 0x70) == 0) { @@ -221,7 +223,7 @@ void sub_0803D264(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803D408(Entity* this) { +void VaatiRebornEnemyType0Action2(Entity* this) { const Coords* ptr; switch (this->field_0x74.HALF.LO) { @@ -279,7 +281,7 @@ void sub_0803D408(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803D560(Entity* this) { +void VaatiRebornEnemyType0Action3(Entity* this) { u8 temp; switch (this->field_0x74.HALF.LO) { @@ -331,7 +333,7 @@ void sub_0803D560(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803D658(Entity* this) { +void VaatiRebornEnemyType0Action4(Entity* this) { u32 index; Entity* entity; @@ -361,7 +363,7 @@ void sub_0803D658(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803D700(Entity* this) { +void VaatiRebornEnemyType0Action5(Entity* this) { u32 uVar3; if (this->field_0x80.HALF.LO == 0) { @@ -417,7 +419,7 @@ void sub_0803D700(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803D830(Entity* this) { +void VaatiRebornEnemyType0Action6(Entity* this) { Entity* target; if (this->field_0x80.HALF.LO == 0) { @@ -466,7 +468,7 @@ void sub_0803D830(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803D8FC(Entity* this) { +void VaatiRebornEnemyType0Action7(Entity* this) { Entity* fx; u32 tmp; @@ -489,7 +491,7 @@ void sub_0803D8FC(Entity* this) { } } -void sub_0803D974(Entity* this) { +void VaatiRebornEnemyType1Action0(Entity* this) { Entity* enemy; this->action = 1; @@ -504,7 +506,7 @@ void sub_0803D974(Entity* this) { InitAnimationForceUpdate(this, this->field_0x74.HALF.LO); } -void sub_0803D9BC(Entity* this) { +void VaatiRebornEnemyType1Action1(Entity* this) { Entity* parent; parent = this->parent; @@ -547,7 +549,7 @@ void sub_0803D9BC(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803DAA8(Entity* this) { +void VaatiRebornEnemyType2Action0(Entity* this) { Entity* source; source = this->parent->parent; @@ -560,8 +562,8 @@ void sub_0803DAA8(Entity* this) { InitAnimationForceUpdate(this, 2); } -void sub_0803DAE4(Entity* this) { - u8 bVar1; +void VaatiRebornEnemyType2Action1(Entity* this) { + u8 parentDirection; Entity* parent; parent = this->parent; @@ -569,14 +571,14 @@ void sub_0803DAE4(Entity* this) { if (this->field_0x74.HALF.LO != 0) { this->field_0x74.HALF.LO = 0; } - bVar1 = parent->parent->direction; - if (bVar1 != 0xff) { + parentDirection = parent->parent->direction; + if (parentDirection != 0xff) { if (this->field_0x74.HALF.HI == 0) { this->field_0x74.HALF.HI = 1; } - if (bVar1 != this->direction) { - this->direction = bVar1; - InitAnimationForceUpdate(this, bVar1 >> 3); + if (parentDirection != this->direction) { + this->direction = parentDirection; + InitAnimationForceUpdate(this, parentDirection >> 3); } } else { if (this->field_0x74.HALF.HI != 0) { @@ -596,7 +598,7 @@ void sub_0803DAE4(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803DB88(Entity* this) { +void VaatiRebornEnemyType3Action0(Entity* this) { this->action = 1; this->field_0x74.HALF.LO = 0; this->direction = 0xff; @@ -605,7 +607,7 @@ void sub_0803DB88(Entity* this) { sub_0803DC0C(this); } -void sub_0803DBB8(Entity* this) { +void VaatiRebornEnemyType3Action1(Entity* this) { Entity* parent = this->parent; if (this->parent->direction != 0xff) { @@ -638,7 +640,7 @@ void sub_0803DC0C(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803DC58(Entity* this) { +void VaatiRebornEnemyType1PreAction(Entity* this) { Entity* parent; if (this->damageType != 0x30) { @@ -656,7 +658,7 @@ void sub_0803DC58(Entity* this) { parent->spriteOffsetX = 0; parent->direction = -1; this->actionDelay = 0; - SoundReq(0x80100000); + SoundReq(SONG_STOP_BGM); gArea.musicIndex = gArea.pMusicIndex; return; } @@ -845,9 +847,8 @@ u32 sub_0803DEE0(Entity* this) { return ret; } -void sub_0803DFBC(Entity* this) { +void VaatiRebornEnemyType0PreAction(Entity* this) { u32 bVar1; - int iVar3; if (this->action != 0) { *(u32*)&this->field_0x78 = this->x.WORD; @@ -873,24 +874,29 @@ void sub_0803DFBC(Entity* this) { } } -NONMATCH("asm/non_matching/vaati/sub_0803E028.inc", u32 sub_0803E028(Entity* this)) { - u32 uVar4; - u32 rx, ry, px; +u32 sub_0803E028(Entity* this) { + u32 ret; + s32 tmp; - uVar4 = 0; + ret = 0; if ((this->field_0x74.HALF.HI != 2) && ((Random() & 1) != 0)) { return 0; } - if (this->field_0x76.HALF.HI == 1) { - if (gRoomControls.roomOriginX + 0x58 <= gPlayerEntity.x.HALF.HI) { - if (gRoomControls.roomOriginY + 0x58 <= gPlayerEntity.x.HALF.HI) { - if (gRoomControls.roomOriginY + 0xf8 >= gPlayerEntity.x.HALF.HI) { - this->field_0x80.HALF.HI += 5; - uVar4 = 1; - } - } - } + if (this->field_0x76.HALF.HI != 1) { + return ret; } - return uVar4; + 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; } -END_NONMATCH diff --git a/src/enemy/vaatiTransfigured.c b/src/enemy/vaatiTransfigured.c index 38d1b435..399f511b 100644 --- a/src/enemy/vaatiTransfigured.c +++ b/src/enemy/vaatiTransfigured.c @@ -16,26 +16,26 @@ void sub_080AF18C(Entity*); u32 sub_08040934(Entity*); void sub_08040648(Entity*, u32, u32); -void sub_0803F818(Entity*); -void sub_0803F914(Entity*); -void sub_0803FAC8(Entity*); -void sub_0803FAD0(Entity*); -void sub_0803FD50(Entity*); -void sub_0803FE90(Entity*); -void sub_0803FF7C(Entity*); -void sub_0804006C(Entity*); -void sub_08040130(Entity*); -void sub_0804015C(Entity*); -void sub_080401E0(Entity*); -void sub_08040268(Entity*); -void sub_0804038C(Entity*); -void sub_080403CC(Entity*); -void sub_080403EC(Entity*); -void sub_0804041C(Entity*); -void sub_0804044C(Entity*); -void sub_080404D0(Entity*); -void sub_0804051C(Entity*); -void sub_080405D8(Entity*); +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; @@ -49,30 +49,32 @@ const u8 gUnk_080D0ABC[] = { 0xf0, 0xd0, 0xb0 }; const u8 gUnk_080D0ABC[] = { 0xf0, 0xd0, 0xc0 }; #endif const u8 gUnk_080D0ABF[] = { 0x3c, 0x3c, 0x1e, 0x14, 0x14, 0x14, 0, 0, 0 }; -void (*const gUnk_080D0AC8[])(Entity*) = { - sub_0803F818, sub_0803F914, sub_0803FAC8, sub_0803FAD0, sub_0803FD50, sub_0803FE90, sub_0803FF7C, sub_0804006C, +void (*const vaatiTransfiguredType0Actions[])(Entity*) = { + VaatiTransfiguredType0Action0, VaatiTransfiguredType0Action1, VaatiTransfiguredType0Action2, + VaatiTransfiguredType0Action3, VaatiTransfiguredType0Action4, VaatiTransfiguredType0Action5, + VaatiTransfiguredType0Action6, VaatiTransfiguredType0Action7, }; -void (*const gUnk_080D0AE8[])(Entity*) = { - sub_08040130, - sub_0804015C, +void (*const vaatiTransfiguredType1Actions[])(Entity*) = { + VaatiTransfiguredType1Action0, + VaatiTransfiguredType1Action1, }; -void (*const gUnk_080D0AF0[])(Entity*) = { - sub_080401E0, - sub_08040268, - sub_0804038C, +void (*const vaatiTransfiguredType2Actions[])(Entity*) = { + VaatiTransfiguredType2Action0, + VaatiTransfiguredType2Action1, + VaatiTransfiguredType2Action2, }; -void (*const gUnk_080D0AFC[])(Entity*) = { - sub_080403CC, - sub_080403EC, +void (*const vaatiTransfiguredType3Actions[])(Entity*) = { + VaatiTransfiguredType3Action0, + VaatiTransfiguredType3Action1, }; -void (*const gUnk_080D0B04[])(Entity*) = { - sub_0804041C, - sub_0804044C, +void (*const vaatiTransfiguredType4Actions[])(Entity*) = { + VaatiTransfiguredType4Action0, + VaatiTransfiguredType4Action1, }; -void (*const gUnk_080D0B0C[])(Entity*) = { - sub_080404D0, - sub_0804051C, - sub_080405D8, +void (*const vaatiTransfiguredType5Actions[])(Entity*) = { + VaatiTransfiguredType5Action0, + VaatiTransfiguredType5Action1, + VaatiTransfiguredType5Action2, }; const xy gUnk_080D0B18[] = { { 0x00, 0xfe }, { 0x01, 0xfe }, { 0x01, 0xfe }, { 0x02, 0xfe }, { 0x02, 0xfe }, @@ -104,29 +106,29 @@ void VaatiTransfigured(Entity* this) { this->field_0x7c.HALF.LO = this->y.HALF.HI; sub_080409B0(this); } - gUnk_080D0AC8[this->action](this); + vaatiTransfiguredType0Actions[this->action](this); break; case 1: - gUnk_080D0AE8[this->action](this); + vaatiTransfiguredType1Actions[this->action](this); break; case 2: - gUnk_080D0AF0[this->action](this); + vaatiTransfiguredType2Actions[this->action](this); break; case 3: - gUnk_080D0AFC[this->action](this); + vaatiTransfiguredType3Actions[this->action](this); break; case 4: - gUnk_080D0B04[this->action](this); + vaatiTransfiguredType4Actions[this->action](this); break; case 5: - gUnk_080D0B0C[this->action](this); + vaatiTransfiguredType5Actions[this->action](this); return; default: break; } } -void sub_0803F818(Entity* this) { +void VaatiTransfiguredType0Action0(Entity* this) { Entity* enemy; u32 i; @@ -157,7 +159,7 @@ void sub_0803F818(Entity* this) { Random(); sub_080408EC(this); for (i = 0; i < 8; ++i) { - enemy = CreateEnemy(ENEMY_5A, 0); + enemy = CreateEnemy(VAATI_TRANSFIGURED_EYE, 0); enemy->parent = this; enemy->type2 = i; if ((this->field_0x74.HALF.HI >> (i)&1) != 0) { @@ -170,7 +172,7 @@ void sub_0803F818(Entity* this) { } } -void sub_0803F914(Entity* this) { +void VaatiTransfiguredType0Action1(Entity* this) { Entity* object; switch (this->field_0x80.HALF.LO) { @@ -250,11 +252,11 @@ void sub_0803F914(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803FAC8(Entity* this) { +void VaatiTransfiguredType0Action2(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803FAD0(Entity* this) { +void VaatiTransfiguredType0Action3(Entity* this) { Entity* pEVar3; u32 uVar4; u32 tmp; @@ -368,7 +370,7 @@ void sub_0803FAD0(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803FD50(Entity* this) { +void VaatiTransfiguredType0Action4(Entity* this) { switch (this->field_0x80.HALF.LO) { case 0: if (--this->actionDelay == 0) { @@ -434,7 +436,7 @@ void sub_0803FD50(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803FE90(Entity* this) { +void VaatiTransfiguredType0Action5(Entity* this) { Entity* entity; switch (this->field_0x80.HALF.LO) { @@ -487,7 +489,7 @@ void sub_0803FE90(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0803FF7C(Entity* this) { +void VaatiTransfiguredType0Action6(Entity* this) { Entity* pEVar2; switch (this->field_0x80.HALF.LO) { @@ -539,7 +541,7 @@ void sub_0803FF7C(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0804006C(Entity* this) { +void VaatiTransfiguredType0Action7(Entity* this) { Entity* pEVar3; u32 uVar4; @@ -579,7 +581,7 @@ void sub_0804006C(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_08040130(Entity* this) { +void VaatiTransfiguredType1Action0(Entity* this) { this->action = 1; this->actionDelay = 0; this->field_0x80.HALF.LO = 0; @@ -587,7 +589,7 @@ void sub_08040130(Entity* this) { InitAnimationForceUpdate(this, (u32)this->actionDelay); } -void sub_0804015C(Entity* this) { +void VaatiTransfiguredType1Action1(Entity* this) { Entity* parent; parent = this->parent; @@ -618,7 +620,7 @@ void sub_0804015C(Entity* this) { } } -void sub_080401E0(Entity* this) { +void VaatiTransfiguredType2Action0(Entity* this) { if (this->type2 != 0) { this->action = 1; this->spritePriority.b0 = this->type2 + 1; @@ -637,7 +639,7 @@ void sub_080401E0(Entity* this) { } } -void sub_08040268(Entity* this) { +void VaatiTransfiguredType2Action1(Entity* this) { u32 uVar3; const xy* t; @@ -694,7 +696,7 @@ void sub_08040268(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0804038C(Entity* this) { +void VaatiTransfiguredType2Action2(Entity* this) { if (this->parent->currentHealth == 0) { this->field_0x6c.HALF.HI |= 2; DeleteThisEntity(); @@ -706,13 +708,13 @@ void sub_0804038C(Entity* this) { } } -void sub_080403CC(Entity* this) { +void VaatiTransfiguredType3Action0(Entity* this) { this->action = 1; this->spritePriority.b0 = 4; InitAnimationForceUpdate(this, 0); } -void sub_080403EC(Entity* this) { +void VaatiTransfiguredType3Action1(Entity* this) { if (this->parent->currentHealth == 0) { this->field_0x6c.HALF.HI |= 2; DeleteThisEntity(); @@ -721,7 +723,7 @@ void sub_080403EC(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_0804041C(Entity* this) { +void VaatiTransfiguredType4Action0(Entity* this) { this->action = 1; this->field_0x80.HALF.LO = 0; this->actionDelay = 10; @@ -730,7 +732,7 @@ void sub_0804041C(Entity* this) { InitializeAnimation(this, 0); } -void sub_0804044C(Entity* this) { +void VaatiTransfiguredType4Action1(Entity* this) { if (this->parent->currentHealth == 0) { this->field_0x6c.HALF.HI |= 2; DeleteThisEntity(); @@ -754,7 +756,7 @@ void sub_0804044C(Entity* this) { GetNextFrame(this); } -void sub_080404D0(Entity* this) { +void VaatiTransfiguredType5Action0(Entity* this) { if (this->type2 != 0) { this->action = 2; this->actionDelay = 10; @@ -767,7 +769,7 @@ void sub_080404D0(Entity* this) { } } -void sub_0804051C(Entity* this) { +void VaatiTransfiguredType5Action1(Entity* this) { if (this->parent->currentHealth == 0) { this->field_0x6c.HALF.HI |= 2; DeleteThisEntity(); @@ -803,7 +805,7 @@ void sub_0804051C(Entity* this) { CopyPosition(this->parent, this); } -void sub_080405D8(Entity* this) { +void VaatiTransfiguredType5Action2(Entity* this) { if (this->parent->currentHealth == 0) { this->field_0x6c.HALF.HI |= 2; DeleteThisEntity(); diff --git a/src/enemy/enemy5A.c b/src/enemy/vaatiTransfiguredEye.c similarity index 84% rename from src/enemy/enemy5A.c rename to src/enemy/vaatiTransfiguredEye.c index 058f6afb..ab0bd34a 100644 --- a/src/enemy/enemy5A.c +++ b/src/enemy/vaatiTransfiguredEye.c @@ -8,21 +8,27 @@ void sub_08045A00(Entity*); void sub_08045A28(Entity*); -void sub_080456E8(Entity*); -void sub_08045700(Entity*); -void nullsub_173(Entity*); -void sub_080457E4(Entity*); -void sub_0804586C(Entity*); -void sub_080458C4(Entity*); -void sub_08045938(Entity*); -void sub_08045984(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 gUnk_080D1888[])(Entity*) = { - sub_080456E8, sub_08045700, sub_080456E8, sub_0804A7D4, sub_08001242, nullsub_173, +void (*const vaatiTransfiguredEyeFunctions[])(Entity*) = { + VaatiTransfiguredEyeFunction0, + VaatiTransfiguredEyeFunction1, + VaatiTransfiguredEyeFunction0, + sub_0804A7D4, + sub_08001242, + VaatiTransfiguredEyeNoop, }; -void (*const gUnk_080D18A0[])(Entity*) = { - sub_080457E4, sub_0804586C, sub_080458C4, sub_08045938, sub_08045984, +void (*const vaatiTransfiguredEyeFunction0Actions[])(Entity*) = { + VaatiTransfiguredEyeFunction0Action0, VaatiTransfiguredEyeFunction0Action1, VaatiTransfiguredEyeFunction0Action2, + VaatiTransfiguredEyeFunction0Action3, VaatiTransfiguredEyeFunction0Action4, }; struct xy { @@ -33,15 +39,15 @@ struct xy { const struct xy gUnk_080D18B4[] = { { 0xe8, 0xf6 }, { 0xf6, 0xe8 }, { 0x0a, 0xe8 }, { 0x18, 0xf6 }, { 0x18, 0x0a }, { 0x0a, 0x18 }, { 0xf6, 0x18 }, { 0xe8, 0x0a } }; -void Enemy5A(Entity* this) { - EnemyFunctionHandler(this, gUnk_080D1888); +void VaatiTransfiguredEye(Entity* this) { + EnemyFunctionHandler(this, vaatiTransfiguredEyeFunctions); } -void sub_080456E8(Entity* this) { - gUnk_080D18A0[this->action](this); +void VaatiTransfiguredEyeFunction0(Entity* this) { + vaatiTransfiguredEyeFunction0Actions[this->action](this); } -void sub_08045700(Entity* this) { +void VaatiTransfiguredEyeFunction1(Entity* this) { u8 bVar1; Entity* pEVar4; @@ -77,13 +83,13 @@ void sub_08045700(Entity* this) { } } } - sub_0804AA30(this, gUnk_080D1888); + sub_0804AA30(this, vaatiTransfiguredEyeFunctions); } -void nullsub_173(Entity* this) { +void VaatiTransfiguredEyeNoop(Entity* this) { } -void sub_080457E4(Entity* this) { +void VaatiTransfiguredEyeFunction0Action0(Entity* this) { Entity* child; u8 bVar2; @@ -99,7 +105,7 @@ void sub_080457E4(Entity* this) { this->field_0x82.HALF.HI = bVar2; if (this->type == 0) { sub_08045A00(this); - child = CreateEnemy(ENEMY_5A, 1); + child = CreateEnemy(VAATI_TRANSFIGURED_EYE, 1); if (child != NULL) { child->parent = this; this->attachedEntity = child; @@ -114,7 +120,7 @@ void sub_080457E4(Entity* this) { } } -void sub_0804586C(Entity* this) { +void VaatiTransfiguredEyeFunction0Action1(Entity* this) { sub_08045A28(this); if (this->field_0x82.HALF.LO == 0) { if ((this->frames.all & 0x80) != 0) { @@ -122,7 +128,7 @@ void sub_0804586C(Entity* this) { this->flags |= 0x80; } this->action = 2; - InitializeAnimation(this, (u32)this->type << 3); + InitializeAnimation(this, this->type << 3); } } else { if (--this->field_0x82.HALF.LO == 0) { @@ -131,7 +137,7 @@ void sub_0804586C(Entity* this) { } } -void sub_080458C4(Entity* this) { +void VaatiTransfiguredEyeFunction0Action2(Entity* this) { Entity* parent; sub_08045A28(this); @@ -155,7 +161,7 @@ void sub_080458C4(Entity* this) { } } -void sub_08045938(Entity* this) { +void VaatiTransfiguredEyeFunction0Action3(Entity* this) { sub_08045A28(this); if ((this->frames.all & 0x80) != 0) { this->action = 2; @@ -170,7 +176,7 @@ void sub_08045938(Entity* this) { } } -void sub_08045984(Entity* this) { +void VaatiTransfiguredEyeFunction0Action4(Entity* this) { Entity* parent; sub_08045A28(this); diff --git a/src/enemy/vaatiWrath.c b/src/enemy/vaatiWrath.c index 762595ec..6a4df2d7 100644 --- a/src/enemy/vaatiWrath.c +++ b/src/enemy/vaatiWrath.c @@ -13,7 +13,7 @@ extern u8 gEntCount; -void sub_080423A4(Entity*); +void VaatiWrathType0PreAction(Entity*); u32 sub_08041FCC(Entity*); void sub_08042004(Entity*); u32 sub_08041ED4(Entity*); @@ -32,24 +32,24 @@ void sub_08042264(Entity*); u32 sub_080422C0(Entity*, u32); void sub_0804228C(Entity*); -void sub_080413A0(Entity*); -void sub_08042428(Entity*); -void sub_080424A0(Entity*); -void sub_0804250C(Entity*); -void sub_080413C0(Entity*); -void sub_08041490(Entity*); -void sub_080415E8(Entity*); -void sub_08041618(Entity*); -void sub_080416A4(Entity*); -void sub_080416DC(Entity*); -void sub_080417AC(Entity*); -void sub_08041828(Entity*); -void sub_08041880(Entity*); -void sub_08041904(Entity*); -void sub_0804197C(Entity*); -void sub_08041A00(Entity*); -void sub_08041AF4(Entity*); -void sub_08041BD0(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*); @@ -67,15 +67,17 @@ typedef struct { Entity* eyes[4]; } VaatiWrathHeapStruct; -void (*const gUnk_080D0E1C[])(Entity*) = { - sub_080413A0, - sub_08042428, - sub_080424A0, - sub_0804250C, +void (*const vaatiWrathTypes[])(Entity*) = { + VaatiWrathType0, + VaatiWrathType1, + VaatiWrathType2, + VaatiWrathType3, }; -void (*const gUnk_080D0E2C[])(Entity*) = { - sub_080413C0, sub_08041490, sub_080415E8, sub_08041618, sub_080416A4, sub_080416DC, sub_080417AC, - sub_08041828, sub_08041880, sub_08041904, sub_0804197C, sub_08041A00, sub_08041AF4, sub_08041BD0, +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 }; @@ -110,17 +112,17 @@ void VaatiWrath(Entity* this) { SoundReq(SFX_BOSS_DIE); } } - gUnk_080D0E1C[this->type](this); + vaatiWrathTypes[this->type](this); } -void sub_080413A0(Entity* this) { +void VaatiWrathType0(Entity* this) { #if !(defined EU || defined JP) - sub_080423A4(this); + VaatiWrathType0PreAction(this); #endif - gUnk_080D0E2C[this->action](this); + vaatiWrathType0Actions[this->action](this); } -void sub_080413C0(Entity* this) { +void VaatiWrathType0Action0(Entity* this) { u32 bVar1; bVar1 = gScreenTransition.field_0x38 & 1; @@ -159,7 +161,7 @@ void sub_080413C0(Entity* this) { InitAnimationForceUpdate(this, 0); } -void sub_08041490(Entity* this) { +void VaatiWrathType0Action1(Entity* this) { UpdateAnimationSingleFrame(this); switch (this->subAction) { case 0: @@ -230,7 +232,7 @@ void sub_08041490(Entity* this) { } } -void sub_080415E8(Entity* this) { +void VaatiWrathType0Action2(Entity* this) { sub_08042004(this); UpdateAnimationSingleFrame(this); if (--this->actionDelay == 0) { @@ -239,7 +241,7 @@ void sub_080415E8(Entity* this) { } } -void sub_08041618(Entity* this) { +void VaatiWrathType0Action3(Entity* this) { s32 bound; s32 thisY; @@ -280,7 +282,7 @@ void sub_08041618(Entity* this) { sub_080421AC(this); } -void sub_080416A4(Entity* this) { +void VaatiWrathType0Action4(Entity* this) { sub_08042004(this); UpdateAnimationSingleFrame(this); if (--this->actionDelay == 0) { @@ -292,7 +294,7 @@ void sub_080416A4(Entity* this) { } } -void sub_080416DC(Entity* this) { +void VaatiWrathType0Action5(Entity* this) { Entity* object; u32 subAction; Entity* arm; @@ -345,7 +347,7 @@ void sub_080416DC(Entity* this) { } } -void sub_080417AC(Entity* this) { +void VaatiWrathType0Action6(Entity* this) { Entity* type1; if (this->actionDelay == 0) { @@ -376,7 +378,7 @@ void sub_080417AC(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_08041828(Entity* this) { +void VaatiWrathType0Action7(Entity* this) { sub_08042214(this); sub_08042004(this); UpdateAnimationSingleFrame(this); @@ -391,7 +393,7 @@ void sub_08041828(Entity* this) { } } -void sub_08041880(Entity* this) { +void VaatiWrathType0Action8(Entity* this) { sub_08042004(this); UpdateAnimationSingleFrame(this); sub_0806F69C(this); @@ -415,7 +417,7 @@ void sub_08041880(Entity* this) { sub_08042214(this); } -void sub_08041904(Entity* this) { +void VaatiWrathType0Action9(Entity* this) { sub_08042004(this); UpdateAnimationSingleFrame(this); if (this->field_0x78.HALF.HI != 0) { @@ -438,7 +440,7 @@ void sub_08041904(Entity* this) { } } -void sub_0804197C(Entity* this) { +void VaatiWrathType0ActionA(Entity* this) { Entity* type1; sub_08042004(this); @@ -466,7 +468,7 @@ void sub_0804197C(Entity* this) { } } -void sub_08041A00(Entity* this) { +void VaatiWrathType0ActionB(Entity* this) { switch (this->subAction) { case 0: sub_0806F69C(this); @@ -507,7 +509,7 @@ void sub_08041A00(Entity* this) { } } -void sub_08041AF4(Entity* this) { +void VaatiWrathType0ActionC(Entity* this) { Entity* entity; UpdateAnimationSingleFrame(this); @@ -554,7 +556,7 @@ void sub_08041AF4(Entity* this) { } } -void sub_08041BD0(Entity* this) { +void VaatiWrathType0ActionD(Entity* this) { gUnk_080D0E68[this->subAction](this); } @@ -748,16 +750,16 @@ u32 sub_08041F1C(Entity* this) { return 0; } - eye = CreateEnemy(ENEMY_5F, 0); + eye = CreateEnemy(VAATI_WRATH_EYE, 0); eye->parent = this; ((VaatiWrathHeapStruct*)this->myHeap)->eyes[0] = eye; - eye = CreateEnemy(ENEMY_5F, 1); + eye = CreateEnemy(VAATI_WRATH_EYE, 1); eye->parent = this; ((VaatiWrathHeapStruct*)this->myHeap)->eyes[1] = eye; - eye = CreateEnemy(ENEMY_5F, 2); + eye = CreateEnemy(VAATI_WRATH_EYE, 2); eye->parent = this; ((VaatiWrathHeapStruct*)this->myHeap)->eyes[2] = eye; - eye = CreateEnemy(ENEMY_5F, 3); + eye = CreateEnemy(VAATI_WRATH_EYE, 3); eye->parent = this; ((VaatiWrathHeapStruct*)this->myHeap)->eyes[3] = eye; return 1; @@ -995,7 +997,7 @@ void sub_0804235C(Entity* this) { } #if defined USA || defined DEMO -void sub_080423A4(Entity* this) { +void VaatiWrathType0PreAction(Entity* this) { int temp; if ((gScreenTransition.field_0x38 & 2) == 0) { if (gSave.unk498 != 0) { @@ -1019,7 +1021,7 @@ void sub_080423A4(Entity* this) { } #endif -void sub_08042428(Entity* this) { +void VaatiWrathType1(Entity* this) { if (((VaatiWrathHeapStruct*)this->myHeap)->type0->next == NULL) { this->myHeap = NULL; DeleteThisEntity(); @@ -1040,7 +1042,7 @@ void sub_08042428(Entity* this) { this->spriteOffsetY--; } -void sub_080424A0(Entity* this) { +void VaatiWrathType2(Entity* this) { u32 uVar1; if (((VaatiWrathHeapStruct*)this->myHeap)->type0->next == NULL) { @@ -1059,7 +1061,7 @@ void sub_080424A0(Entity* this) { } } -void sub_0804250C(Entity* this) { +void VaatiWrathType3(Entity* this) { if (((VaatiWrathHeapStruct*)this->myHeap)->type0->next == NULL) { this->myHeap = NULL; DeleteThisEntity(); diff --git a/src/enemy/enemy5F.c b/src/enemy/vaatiWrathEye.c similarity index 81% rename from src/enemy/enemy5F.c rename to src/enemy/vaatiWrathEye.c index b92ea9a7..53434faa 100644 --- a/src/enemy/enemy5F.c +++ b/src/enemy/vaatiWrathEye.c @@ -5,20 +5,20 @@ void sub_080485D8(Entity*); void sub_080485FC(Entity*); -void sub_080482EC(Entity*); -void sub_08048330(Entity*); -void sub_0804835C(Entity*); -void sub_08048388(Entity*); -void sub_080483F8(Entity*); -void sub_08048438(Entity*); -void sub_08048478(Entity*); -void sub_080484E8(Entity*); -void sub_08048550(Entity*); -void sub_080485A0(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 gUnk_080D1D48[])(Entity*) = { - sub_080482EC, sub_08048330, sub_0804835C, sub_08048388, sub_080483F8, - sub_08048438, sub_08048478, sub_080484E8, sub_08048550, sub_080485A0, +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 }; @@ -29,14 +29,14 @@ const s8 gUnk_080D1D78[] = { 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xfa, 0xfb, 0xfc, 0xf const s8 gUnk_080D1D98[] = { 0xe8, 0x04, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x04 }; -void Enemy5F(Entity* this) { +void VaatiWrathEye(Entity* this) { if (this->parent->next == NULL) { DeleteThisEntity(); } - gUnk_080D1D48[this->action](this); + vaatiWrathEyeActions[this->action](this); } -void sub_080482EC(Entity* this) { +void VaatiWrathEyeAction0(Entity* this) { if ((gScreenTransition.field_0x38 & 1) != 0) { this->action = 2; InitializeAnimation(this, 1); @@ -48,7 +48,7 @@ void sub_080482EC(Entity* this) { sub_080485D8(this); } -void sub_08048330(Entity* this) { +void VaatiWrathEyeAction1(Entity* this) { sub_080485D8(this); GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { @@ -57,7 +57,7 @@ void sub_08048330(Entity* this) { } } -void sub_0804835C(Entity* this) { +void VaatiWrathEyeAction2(Entity* this) { sub_080485D8(this); if ((gScreenTransition.field_0x39 & 3) == 0) { this->action = 3; @@ -66,7 +66,7 @@ void sub_0804835C(Entity* this) { } } -void sub_08048388(Entity* this) { +void VaatiWrathEyeAction3(Entity* this) { u32 direction; Entity* parent; u32 x; @@ -92,7 +92,7 @@ void sub_08048388(Entity* this) { } } -void sub_080483F8(Entity* this) { +void VaatiWrathEyeAction4(Entity* this) { sub_080485FC(this); if (this->actionDelay != 0) { if (--this->actionDelay == 0) { @@ -107,7 +107,7 @@ void sub_080483F8(Entity* this) { } } -void sub_08048438(Entity* this) { +void VaatiWrathEyeAction5(Entity* this) { if (this->actionDelay != 0) { this->action = 6; if (this->parent->currentHealth >= 0x15) { @@ -122,7 +122,7 @@ void sub_08048438(Entity* this) { sub_080485FC(this); } -void sub_08048478(Entity* this) { +void VaatiWrathEyeAction6(Entity* this) { Entity* pEVar3; sub_080485FC(this); @@ -150,7 +150,7 @@ void sub_08048478(Entity* this) { } } -void sub_080484E8(Entity* this) { +void VaatiWrathEyeAction7(Entity* this) { sub_080485FC(this); GetNextFrame(this); if (this->field_0xf != 0) { @@ -170,7 +170,7 @@ void sub_080484E8(Entity* this) { } } -void sub_08048550(Entity* this) { +void VaatiWrathEyeAction8(Entity* this) { if (this->parent->action == 0xb) { this->actionDelay = 0x3c; } else { @@ -185,7 +185,7 @@ void sub_08048550(Entity* this) { } } -void sub_080485A0(Entity* this) { +void VaatiWrathEyeAction9(Entity* this) { sub_080485FC(this); GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { diff --git a/src/npc/vaati.c b/src/npc/vaati.c index 2f447279..4b518aae 100644 --- a/src/npc/vaati.c +++ b/src/npc/vaati.c @@ -1,5 +1,4 @@ #include "global.h" -#include "enemy.h" #include "entity.h" #include "script.h" #include "audio.h" @@ -11,18 +10,18 @@ extern void CreateManager36(Entity*); extern void DeleteManager36(Entity*); extern void sub_0805DA90(Entity*, u32); -void sub_08066A94(Entity*); -void sub_08066ACC(Entity*); +void VaatiAction0(Entity*); +void VaatiAction1(Entity*); void sub_08066B74(Entity*, ScriptExecutionContext*); -void (*const gUnk_08110734[])(Entity*) = { sub_08066A94, sub_08066ACC }; +void (*const vaatiActions[])(Entity*) = { VaatiAction0, VaatiAction1 }; void Vaati(Entity* this) { - gUnk_08110734[this->action](this); + vaatiActions[this->action](this); this->palette.b.b0 = this->palette.b.b4 + (this->frameSpriteSettings & 1); } -void sub_08066A94(Entity* this) { +void VaatiAction0(Entity* this) { this->action = 1; this->subAction = 0; this->spriteSettings.b.draw = 1; @@ -30,10 +29,11 @@ void sub_08066A94(Entity* this) { this->field_0x68.HALF.HI = 0; sub_0805E3A0(this, 2); sub_0807DD64(this); - sub_08066ACC(this); + VaatiAction1(this); } -NONMATCH("asm/non_matching/vaati/sub_08066ACC.inc", void sub_08066ACC(Entity* 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); @@ -42,30 +42,30 @@ NONMATCH("asm/non_matching/vaati/sub_08066ACC.inc", void sub_08066ACC(Entity* th if ((this->frames.all & ~0x80) != 0) { switch (this->frames.all & ~0x80u) { case 1: - EnqueueSFX(0x21c); + EnqueueSFX(SFX_21C); break; case 2: - EnqueueSFX(0x21e); + EnqueueSFX(SFX_21E); break; case 3: - (*(ScriptExecutionContext**)&this->cutsceneBeh)->intVariable = 4; + tmp = (*(ScriptExecutionContext**)&this->cutsceneBeh); + tmp->intVariable = 4; CreateManager36(this); break; case 4: - (*(ScriptExecutionContext**)&this->cutsceneBeh)->intVariable = 4; + tmp = (*(ScriptExecutionContext**)&this->cutsceneBeh); + tmp->intVariable = 4; DeleteManager36(this); - EnqueueSFX(0x21d); + EnqueueSFX(SFX_21D); break; } this->frames.b.f3 = 0; } } -END_NONMATCH void sub_08066B74(Entity* this, ScriptExecutionContext* context) { u8 animationState; u32 currentAction; - short* psVar4; u32 actions; actions = context->postScriptActions & 0xfff00000; diff --git a/src/npc/vaatiReborn.c b/src/npc/vaatiReborn.c index 826e24fd..b3555aeb 100644 --- a/src/npc/vaatiReborn.c +++ b/src/npc/vaatiReborn.c @@ -6,8 +6,8 @@ #include "textbox.h" #include "functions.h" -void sub_0806B67C(Entity*); -void sub_0806B7BC(Entity*); +void VaatiRebornAction0(Entity* this); +void VaatiRebornAction1(Entity* this); void sub_0806B96C(Entity*); Entity* sub_0806B9BC(Entity*); @@ -16,17 +16,17 @@ typedef struct xy { s8 y; } PACKED xy; -void (*const gUnk_08112F78[])(Entity*) = { - sub_0806B67C, - sub_0806B7BC, +void (*const vaatiRebornActions[])(Entity*) = { + VaatiRebornAction0, + VaatiRebornAction1, }; const xy gUnk_08112F80[] = { { 10, -29 }, { -10, -29 }, { 15, -21 }, { -15, -21 } }; void VaatiReborn(Entity* this) { - gUnk_08112F78[this->action](this); + vaatiRebornActions[this->action](this); } -void sub_0806B67C(Entity* this) { +void VaatiRebornAction0(Entity* this) { Entity* entity; u32 i; @@ -88,7 +88,7 @@ void sub_0806B67C(Entity* this) { } } -void sub_0806B7BC(Entity* this) { +void VaatiRebornAction1(Entity* this) { Entity* entity; if (CheckRoomFlag(3) == 0) { From 2e310e51cc4cce3743da88d2cd432d1fc63995a0 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Sat, 23 Oct 2021 02:12:40 +0200 Subject: [PATCH 16/16] fix formatting --- src/npc/vaati.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/npc/vaati.c b/src/npc/vaati.c index 4b518aae..c5b8a757 100644 --- a/src/npc/vaati.c +++ b/src/npc/vaati.c @@ -32,7 +32,7 @@ void VaatiAction0(Entity* this) { VaatiAction1(this); } -void VaatiAction1(Entity* this){ +void VaatiAction1(Entity* this) { ScriptExecutionContext* tmp; sub_0807DD94(this, sub_08066B74); if ((*(s8*)&this->field_0x68.HALF.HI != 0) && ((gScreenTransition.frameCount & 3) == 0)) {