From 89c44805b2adbb9c54644affbea8acf03146aa41 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Tue, 11 May 2021 16:13:16 +0200 Subject: [PATCH 01/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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/64] 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 256bd1a8b9220e26282551acc1aba8a2b1eb285e Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 3 May 2021 00:18:28 +0200 Subject: [PATCH 10/64] Rename main manager functions --- asm/manager10.s | 4 +- asm/manager12.s | 4 +- asm/manager13.s | 4 +- asm/manager14.s | 4 +- asm/manager16.s | 4 +- asm/manager17.s | 4 +- asm/manager18.s | 6 +-- asm/manager19.s | 4 +- asm/manager1B.s | 6 +-- asm/manager1C.s | 4 +- asm/manager1D.s | 4 +- asm/manager1F.s | 4 +- asm/manager21.s | 4 +- asm/manager22.s | 6 +-- asm/manager23.s | 4 +- asm/manager24.s | 4 +- asm/manager25.s | 4 +- asm/manager29.s | 4 +- asm/manager2A.s | 4 +- asm/manager2B.s | 4 +- asm/manager2C.s | 4 +- asm/manager2D.s | 4 +- asm/manager2F.s | 4 +- asm/manager31.s | 4 +- asm/manager32.s | 4 +- asm/manager33.s | 4 +- asm/manager34.s | 4 +- asm/manager35.s | 4 +- asm/manager36.s | 4 +- asm/manager37.s | 4 +- asm/manager38.s | 4 +- asm/managerD.s | 4 +- asm/managerF.s | 6 +-- include/manager.h | 110 ++++++++++++++++++++-------------------- src/manager.c | 18 +++---- src/manager/manager1.c | 2 +- src/manager/manager11.c | 2 +- src/manager/manager15.c | 4 +- src/manager/manager1A.c | 2 +- src/manager/manager1E.c | 2 +- src/manager/manager2.c | 2 +- src/manager/manager20.c | 2 +- src/manager/manager26.c | 2 +- src/manager/manager27.c | 2 +- src/manager/manager28.c | 8 +-- src/manager/manager2E.c | 2 +- src/manager/manager3.c | 2 +- src/manager/manager39.c | 2 +- src/manager/manager4.c | 2 +- src/manager/manager5.c | 2 +- src/manager/manager6.c | 2 +- src/manager/manager8.c | 2 +- src/manager/manager9.c | 2 +- src/manager/managerA.c | 2 +- src/manager/managerB.c | 6 +-- src/manager/managerC.c | 2 +- src/manager/managerE.c | 2 +- src/room.c | 97 ++++++++++++++++++----------------- 58 files changed, 210 insertions(+), 211 deletions(-) diff --git a/asm/manager10.s b/asm/manager10.s index f0d19df0..838b5bc0 100644 --- a/asm/manager10.s +++ b/asm/manager10.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_08059570 -sub_08059570: @ 0x08059570 + thumb_func_start Manager10_Main +Manager10_Main: @ 0x08059570 push {r4, r5, r6, lr} adds r4, r0, #0 ldrb r5, [r4, #0xc] diff --git a/asm/manager12.s b/asm/manager12.s index 5ead9b73..14a9f8da 100644 --- a/asm/manager12.s +++ b/asm/manager12.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_080599EC -sub_080599EC: @ 0x080599EC + thumb_func_start Manager12_Main +Manager12_Main: @ 0x080599EC push {r4, lr} adds r4, r0, #0 ldrb r0, [r4, #0xc] diff --git a/asm/manager13.s b/asm/manager13.s index 4b2d0fd6..32d7472c 100644 --- a/asm/manager13.s +++ b/asm/manager13.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_08059DAC -sub_08059DAC: @ 0x08059DAC + thumb_func_start Manager13_Main +Manager13_Main: @ 0x08059DAC push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} diff --git a/asm/manager14.s b/asm/manager14.s index cae54bf4..cc72ed3c 100644 --- a/asm/manager14.s +++ b/asm/manager14.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_08059E58 -sub_08059E58: @ 0x08059E58 + thumb_func_start Manager14_Main +Manager14_Main: @ 0x08059E58 push {r4, lr} adds r4, r0, #0 ldrh r0, [r4, #0x20] diff --git a/asm/manager16.s b/asm/manager16.s index f1f6c5d9..b5d6e1f4 100644 --- a/asm/manager16.s +++ b/asm/manager16.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805AB4C -sub_0805AB4C: @ 0x0805AB4C + thumb_func_start Manager16_Main +Manager16_Main: @ 0x0805AB4C push {r4, r5, r6, r7, lr} mov r7, sl mov r6, sb diff --git a/asm/manager17.s b/asm/manager17.s index 2117e76b..8db982b7 100644 --- a/asm/manager17.s +++ b/asm/manager17.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805AD48 -sub_0805AD48: @ 0x0805AD48 + thumb_func_start Manager17_Main +Manager17_Main: @ 0x0805AD48 push {lr} ldr r2, _0805AD5C @ =gUnk_08108654 ldrb r1, [r0, #0xc] diff --git a/asm/manager18.s b/asm/manager18.s index 23d1b9b6..65f3737a 100644 --- a/asm/manager18.s +++ b/asm/manager18.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805ADD8 -sub_0805ADD8: @ 0x0805ADD8 + thumb_func_start Manager18_Main +Manager18_Main: @ 0x0805ADD8 push {r4, lr} adds r4, r0, #0 cmp r4, #0 @@ -166,7 +166,7 @@ _0805AF06: cmp r3, #0 beq _0805AF28 adds r0, r3, #0 - bl sub_0805ADD8 + bl Manager18_Main _0805AF28: pop {r4, pc} .align 2, 0 diff --git a/asm/manager19.s b/asm/manager19.s index 62345d53..811210b7 100644 --- a/asm/manager19.s +++ b/asm/manager19.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805AF60 -sub_0805AF60: @ 0x0805AF60 + thumb_func_start Manager19_Main +Manager19_Main: @ 0x0805AF60 push {r4, lr} adds r4, r0, #0 cmp r4, #0 diff --git a/asm/manager1B.s b/asm/manager1B.s index 31e610bc..72c32b93 100644 --- a/asm/manager1B.s +++ b/asm/manager1B.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805B3B4 -sub_0805B3B4: @ 0x0805B3B4 + thumb_func_start Manager1B_Main +Manager1B_Main: @ 0x0805B3B4 push {r4, r5, lr} adds r4, r0, #0 bl EntityHasDuplicateID @@ -147,7 +147,7 @@ sub_0805B4B4: @ 0x0805B4B4 bl sub_0806D0F8 _0805B4C8: adds r0, r4, #0 - bl sub_0805B3B4 + bl Manager1B_Main pop {r4, pc} thumb_func_start sub_0805B4D0 diff --git a/asm/manager1C.s b/asm/manager1C.s index d56e0ad6..3ff9a772 100644 --- a/asm/manager1C.s +++ b/asm/manager1C.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805B53C -sub_0805B53C: @ 0x0805B53C + thumb_func_start Manager1C_Main +Manager1C_Main: @ 0x0805B53C push {lr} ldr r2, _0805B550 @ =gUnk_08108C64 ldrb r1, [r0, #0xc] diff --git a/asm/manager1D.s b/asm/manager1D.s index 3e89b4bb..2314dcc3 100644 --- a/asm/manager1D.s +++ b/asm/manager1D.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805B5C8 -sub_0805B5C8: @ 0x0805B5C8 + thumb_func_start Manager1D_Main +Manager1D_Main: @ 0x0805B5C8 push {lr} ldr r2, _0805B5DC @ =gUnk_08108C80 ldrb r1, [r0, #0xc] diff --git a/asm/manager1F.s b/asm/manager1F.s index 399282ad..6db92054 100644 --- a/asm/manager1F.s +++ b/asm/manager1F.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805B6F4 -sub_0805B6F4: @ 0x0805B6F4 + thumb_func_start Manager1F_Main +Manager1F_Main: @ 0x0805B6F4 push {lr} ldr r2, _0805B708 @ =gUnk_08108C94 ldrb r1, [r0, #0xc] diff --git a/asm/manager21.s b/asm/manager21.s index 8aa896bd..601bea8c 100644 --- a/asm/manager21.s +++ b/asm/manager21.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805B820 -sub_0805B820: @ 0x0805B820 + thumb_func_start Manager21_Main +Manager21_Main: @ 0x0805B820 push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} diff --git a/asm/manager22.s b/asm/manager22.s index aae066dc..38c1281c 100644 --- a/asm/manager22.s +++ b/asm/manager22.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805B8EC -sub_0805B8EC: @ 0x0805B8EC + thumb_func_start Manager22_Main +Manager22_Main: @ 0x0805B8EC push {r4, r5, r6, lr} adds r5, r0, #0 ldr r4, _0805B964 @ =gArea @@ -345,7 +345,7 @@ _0805BB82: bl DeepFindEntityByID cmp r0, #0 beq _0805BBAE - bl sub_0805B8EC + bl Manager22_Main ldr r0, _0805BBB8 @ =gScreen ldrh r1, [r0] movs r3, #0x80 diff --git a/asm/manager23.s b/asm/manager23.s index c5387705..cbe25cae 100644 --- a/asm/manager23.s +++ b/asm/manager23.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805BC74 -sub_0805BC74: @ 0x0805BC74 + thumb_func_start Manager23_Main +Manager23_Main: @ 0x0805BC74 push {lr} ldr r2, _0805BC88 @ =gUnk_08108CCC ldrb r1, [r0, #0xa] diff --git a/asm/manager24.s b/asm/manager24.s index 9d1d530e..6bdad17d 100644 --- a/asm/manager24.s +++ b/asm/manager24.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805BF18 -sub_0805BF18: @ 0x0805BF18 + thumb_func_start Manager24_Main +Manager24_Main: @ 0x0805BF18 push {lr} ldr r2, _0805BF2C @ =gUnk_08108CDC ldrb r1, [r0, #0xc] diff --git a/asm/manager25.s b/asm/manager25.s index 63a96de6..071c5388 100644 --- a/asm/manager25.s +++ b/asm/manager25.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805C61C -sub_0805C61C: @ 0x0805C61C + thumb_func_start Manager25_Main +Manager25_Main: @ 0x0805C61C push {r4, r5, lr} adds r4, r0, #0 ldrb r0, [r4, #0xc] diff --git a/asm/manager29.s b/asm/manager29.s index c87bd2dd..ae60f934 100644 --- a/asm/manager29.s +++ b/asm/manager29.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805CB90 -sub_0805CB90: @ 0x0805CB90 + thumb_func_start Manager29_Main +Manager29_Main: @ 0x0805CB90 push {r4, lr} adds r4, r0, #0 ldrb r0, [r4, #0xc] diff --git a/asm/manager2A.s b/asm/manager2A.s index 840ddffa..0e038210 100644 --- a/asm/manager2A.s +++ b/asm/manager2A.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805CFC0 -sub_0805CFC0: @ 0x0805CFC0 + thumb_func_start Manager2A_Main +Manager2A_Main: @ 0x0805CFC0 push {r4, lr} adds r1, r0, #0 ldrb r0, [r1, #0xc] diff --git a/asm/manager2B.s b/asm/manager2B.s index a3227878..16371d05 100644 --- a/asm/manager2B.s +++ b/asm/manager2B.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805D014 -sub_0805D014: @ 0x0805D014 + thumb_func_start Manager2B_Main +Manager2B_Main: @ 0x0805D014 push {lr} ldr r2, _0805D028 @ =gUnk_08108D30 ldrb r1, [r0, #0xc] diff --git a/asm/manager2C.s b/asm/manager2C.s index 123784c0..c5a0f5d3 100644 --- a/asm/manager2C.s +++ b/asm/manager2C.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805D174 -sub_0805D174: @ 0x0805D174 + thumb_func_start Manager2C_Main +Manager2C_Main: @ 0x0805D174 push {r4, r5, lr} adds r5, r0, #0 ldrb r1, [r5, #0xc] diff --git a/asm/manager2D.s b/asm/manager2D.s index 5fd4ed29..82032334 100644 --- a/asm/manager2D.s +++ b/asm/manager2D.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805D1FC -sub_0805D1FC: @ 0x0805D1FC + thumb_func_start Manager2D_Main +Manager2D_Main: @ 0x0805D1FC push {r4, r5, lr} adds r4, r0, #0 ldr r0, _0805D240 @ =0x00004014 diff --git a/asm/manager2F.s b/asm/manager2F.s index f85e6167..4c4b0c51 100644 --- a/asm/manager2F.s +++ b/asm/manager2F.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805D3C8 -sub_0805D3C8: @ 0x0805D3C8 + thumb_func_start Manager2F_Main +Manager2F_Main: @ 0x0805D3C8 push {r4, lr} adds r4, r0, #0 cmp r4, #0 diff --git a/asm/manager31.s b/asm/manager31.s index 14dfde91..50642d48 100644 --- a/asm/manager31.s +++ b/asm/manager31.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805D630 -sub_0805D630: @ 0x0805D630 + thumb_func_start Manager31_Main +Manager31_Main: @ 0x0805D630 push {r4, r5, r6, r7, lr} mov r7, sb mov r6, r8 diff --git a/asm/manager32.s b/asm/manager32.s index 85883c5a..fa9d71d2 100644 --- a/asm/manager32.s +++ b/asm/manager32.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805D7A4 -sub_0805D7A4: @ 0x0805D7A4 + thumb_func_start Manager32_Main +Manager32_Main: @ 0x0805D7A4 push {r4, lr} adds r4, r0, #0 ldr r1, _0805D7D4 @ =gUnk_08108D7C diff --git a/asm/manager33.s b/asm/manager33.s index e42eafd4..4eb95053 100644 --- a/asm/manager33.s +++ b/asm/manager33.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805DAE8 -sub_0805DAE8: @ 0x0805DAE8 + thumb_func_start Manager33_Main +Manager33_Main: @ 0x0805DAE8 push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} diff --git a/asm/manager34.s b/asm/manager34.s index c7cb0680..30b172e6 100644 --- a/asm/manager34.s +++ b/asm/manager34.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805DB94 -sub_0805DB94: @ 0x0805DB94 + thumb_func_start Manager34_Main +Manager34_Main: @ 0x0805DB94 push {r4, lr} adds r4, r0, #0 ldr r1, _0805DBB0 @ =gUnk_08108D8C diff --git a/asm/manager35.s b/asm/manager35.s index 0cd47948..b1c1ec63 100644 --- a/asm/manager35.s +++ b/asm/manager35.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805DC84 -sub_0805DC84: @ 0x0805DC84 + thumb_func_start Manager35_Main +Manager35_Main: @ 0x0805DC84 push {lr} ldr r2, _0805DC98 @ =gUnk_08108D98 ldrb r1, [r0, #0xc] diff --git a/asm/manager36.s b/asm/manager36.s index e4fae5aa..1856842e 100644 --- a/asm/manager36.s +++ b/asm/manager36.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805DDB4 -sub_0805DDB4: @ 0x0805DDB4 + thumb_func_start Manager36_Main +Manager36_Main: @ 0x0805DDB4 push {lr} adds r2, r0, #0 ldrb r0, [r2, #0xa] diff --git a/asm/manager37.s b/asm/manager37.s index 35b69824..2ec3b180 100644 --- a/asm/manager37.s +++ b/asm/manager37.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805DE38 -sub_0805DE38: @ 0x0805DE38 + thumb_func_start Manager37_Main +Manager37_Main: @ 0x0805DE38 push {lr} ldr r2, _0805DE4C @ =gUnk_08108DBC ldrb r1, [r0, #0xa] diff --git a/asm/manager38.s b/asm/manager38.s index a98b99d8..3d3696ac 100644 --- a/asm/manager38.s +++ b/asm/manager38.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_0805E0A8 -sub_0805E0A8: @ 0x0805E0A8 + thumb_func_start Manager38_Main +Manager38_Main: @ 0x0805E0A8 push {lr} ldr r2, _0805E0BC @ =gUnk_08108DE0 ldrb r1, [r0, #0xc] diff --git a/asm/managerD.s b/asm/managerD.s index 77df8bf6..eb9f36f9 100644 --- a/asm/managerD.s +++ b/asm/managerD.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_08058DD0 -sub_08058DD0: @ 0x08058DD0 + thumb_func_start ManagerD_Main +ManagerD_Main: @ 0x08058DD0 push {lr} ldr r2, _08058DE4 @ =gUnk_08108308 ldrb r1, [r0, #0xc] diff --git a/asm/managerF.s b/asm/managerF.s index e8a21841..3a5d746b 100644 --- a/asm/managerF.s +++ b/asm/managerF.s @@ -6,8 +6,8 @@ .text - thumb_func_start sub_08058ECC -sub_08058ECC: @ 0x08058ECC + thumb_func_start ManagerF_Main +ManagerF_Main: @ 0x08058ECC push {lr} ldr r2, _08058EE0 @ =gUnk_08108314 ldrb r1, [r0, #0xa] @@ -495,7 +495,7 @@ sub_08059278: @ 0x08059278 bl FindEntityByID cmp r0, #0 beq _0805928C - bl sub_08058ECC + bl ManagerF_Main _0805928C: pop {pc} .align 2, 0 diff --git a/include/manager.h b/include/manager.h index a455052d..e3448925 100644 --- a/include/manager.h +++ b/include/manager.h @@ -140,63 +140,63 @@ typedef struct { u16 unk_06; } UnkManager26HelperStruct; -extern void Manager1(); -extern void Manager2(); -extern void sub_080576C0(); -extern void sub_08057854(); -extern void sub_08057AD0(); -extern void sub_08057CB4(); +extern void Manager1_Main(); +extern void Manager2_Main(); +extern void Manager3_Main(); +extern void Manager4_Main(); +extern void Manager5_Main(); +extern void Manager6_Main(); extern void Manager7_Main(); -extern void sub_08057ED0(); -extern void sub_080581D8(); -extern void sub_08058380(); -extern void sub_080585F0(); -extern void sub_0805884C(); -extern void sub_08058DD0(Entity*); -extern void sub_08058E60(); -extern void sub_08058ECC(Entity*); -extern void sub_08059570(Entity*); -extern void sub_080599B8(Manager11*); -extern void sub_080599EC(Entity*); -extern void sub_08059DAC(Entity*); -extern void sub_08059E58(Entity*); -extern void sub_0805A280(); -extern void sub_0805AB4C(Entity*); -extern void sub_0805AD48(Entity*); -extern void sub_0805ADD8(); -extern void sub_0805AF60(Entity*); -extern void sub_0805B030(); -extern void sub_0805B3B4(Entity*); -extern void sub_0805B53C(Entity*); -extern void sub_0805B5C8(Entity*); -extern void Manager1E_Handler(); -extern void sub_0805B6F4(Entity*); -extern void sub_0805B7A0(); -extern void sub_0805B820(Entity*); -extern void sub_0805B8EC(Entity*); -extern void sub_0805BC74(Entity*); -extern void sub_0805BF18(Entity*); -extern void sub_0805C61C(Entity*); -extern void sub_0805C6B8(); -extern void Manager27(); -extern void Manager28_Entry(); -extern void sub_0805CB90(Entity*); -extern void sub_0805CFC0(Entity*); -extern void sub_0805D014(Entity*); -extern void sub_0805D174(Entity*); -extern void sub_0805D1FC(Entity*); -extern void sub_0805D250(); -extern void sub_0805D3C8(); +extern void Manager8_Main(); +extern void Manager9_Main(); +extern void ManagerA_Main(); +extern void ManagerB_Main(); +extern void ManagerC_Main(); +extern void ManagerD_Main(Entity*); +extern void ManagerE_Main(); +extern void ManagerF_Main(Entity*); +extern void Manager10_Main(Entity*); +extern void Manager11_Main(Manager11*); +extern void Manager12_Main(Entity*); +extern void Manager13_Main(Entity*); +extern void Manager14_Main(Entity*); +extern void Manager15_Main(); +extern void Manager16_Main(Entity*); +extern void Manager17_Main(Entity*); +extern void Manager18_Main(); +extern void Manager19_Main(Entity*); +extern void Manager1A_Main(); +extern void Manager1B_Main(Entity*); +extern void Manager1C_Main(Entity*); +extern void Manager1D_Main(Entity*); +extern void Manager1E_Main(); +extern void Manager1F_Main(Entity*); +extern void Manager20_Main(); +extern void Manager21_Main(Entity*); +extern void Manager22_Main(Entity*); +extern void Manager23_Main(Entity*); +extern void Manager24_Main(Entity*); +extern void Manager25_Main(Entity*); +extern void Manager26_Main(); +extern void Manager27_Main(); +extern void Manager28_Main(); +extern void Manager29_Main(Entity*); +extern void Manager2A_Main(Entity*); +extern void Manager2B_Main(Entity*); +extern void Manager2C_Main(Entity*); +extern void Manager2D_Main(Entity*); +extern void Manager2E_Main(); +extern void Manager2F_Main(); extern void Manager30_Main(); -extern void sub_0805D630(Entity*); -extern void sub_0805D7A4(Entity*); -extern void sub_0805DAE8(Entity*); -extern void sub_0805DB94(Entity*); -extern void sub_0805DC84(Entity*); -extern void sub_0805DDB4(Entity*); -extern void sub_0805DE38(Entity*); -extern void sub_0805E0A8(Entity*); -extern void sub_0805E0FC(); +extern void Manager31_Main(Entity*); +extern void Manager32_Main(Entity*); +extern void Manager33_Main(Entity*); +extern void Manager34_Main(Entity*); +extern void Manager35_Main(Entity*); +extern void Manager36_Main(Entity*); +extern void Manager37_Main(Entity*); +extern void Manager38_Main(Entity*); +extern void Manager39_Main(); extern void (*const gManagerFunctions[58])(); diff --git a/src/manager.c b/src/manager.c index 27124146..0b95a43e 100644 --- a/src/manager.c +++ b/src/manager.c @@ -2,13 +2,13 @@ // TODO: change all manager arguments to be Entity* and cast to specific type later. void (*const gManagerFunctions[])() = { - NULL, Manager1, Manager2, sub_080576C0, sub_08057854, sub_08057AD0, sub_08057CB4, - Manager7_Main, sub_08057ED0, sub_080581D8, sub_08058380, sub_080585F0, sub_0805884C, sub_08058DD0, - sub_08058E60, sub_08058ECC, sub_08059570, sub_080599B8, sub_080599EC, sub_08059DAC, sub_08059E58, - sub_0805A280, sub_0805AB4C, sub_0805AD48, sub_0805ADD8, sub_0805AF60, sub_0805B030, sub_0805B3B4, - sub_0805B53C, sub_0805B5C8, Manager1E_Handler, sub_0805B6F4, sub_0805B7A0, sub_0805B820, sub_0805B8EC, - sub_0805BC74, sub_0805BF18, sub_0805C61C, sub_0805C6B8, Manager27, Manager28_Entry, sub_0805CB90, - sub_0805CFC0, sub_0805D014, sub_0805D174, sub_0805D1FC, sub_0805D250, sub_0805D3C8, Manager30_Main, - sub_0805D630, sub_0805D7A4, sub_0805DAE8, sub_0805DB94, sub_0805DC84, sub_0805DDB4, sub_0805DE38, - sub_0805E0A8, sub_0805E0FC + NULL, Manager1_Main, Manager2_Main, Manager3_Main, Manager4_Main, Manager5_Main, Manager6_Main, + Manager7_Main, Manager8_Main, Manager9_Main, ManagerA_Main, ManagerB_Main, ManagerC_Main, ManagerD_Main, + ManagerE_Main, ManagerF_Main, Manager10_Main, Manager11_Main, Manager12_Main, Manager13_Main, Manager14_Main, + Manager15_Main, Manager16_Main, Manager17_Main, Manager18_Main, Manager19_Main, Manager1A_Main, Manager1B_Main, + Manager1C_Main, Manager1D_Main, Manager1E_Main, Manager1F_Main, Manager20_Main, Manager21_Main, Manager22_Main, + Manager23_Main, Manager24_Main, Manager25_Main, Manager26_Main, Manager27_Main, Manager28_Main, Manager29_Main, + Manager2A_Main, Manager2B_Main, Manager2C_Main, Manager2D_Main, Manager2E_Main, Manager2F_Main, Manager30_Main, + Manager31_Main, Manager32_Main, Manager33_Main, Manager34_Main, Manager35_Main, Manager36_Main, Manager37_Main, + Manager38_Main, Manager39_Main }; diff --git a/src/manager/manager1.c b/src/manager/manager1.c index 45e1b000..1b7212d6 100644 --- a/src/manager/manager1.c +++ b/src/manager/manager1.c @@ -12,7 +12,7 @@ extern void (*const gUnk_08107C48[])(Entity*); extern u8 gUnk_08107C40[]; -void Manager1(Entity* this) { +void Manager1_Main(Entity* this) { u8 bVar1; u8* pbVar2; diff --git a/src/manager/manager11.c b/src/manager/manager11.c index 841407fc..4a079333 100644 --- a/src/manager/manager11.c +++ b/src/manager/manager11.c @@ -2,7 +2,7 @@ #include "manager.h" #include "flags.h" -void sub_080599B8(Manager11* this) { +void Manager11_Main(Manager11* this) { if (!this->manager.action) { this->manager.action = 1; if (CheckFlags(this->unk_3c)) { diff --git a/src/manager/manager15.c b/src/manager/manager15.c index 313fa487..b158fdcb 100644 --- a/src/manager/manager15.c +++ b/src/manager/manager15.c @@ -28,7 +28,7 @@ typedef struct { extern void (*const gUnk_081085D8[])(Manager*); -void sub_0805A280(Manager* this) { +void Manager15_Main(Manager* this) { gUnk_081085D8[this->unk_0a](this); } @@ -477,7 +477,7 @@ void sub_0805AA58(Manager15* this) { void sub_0805AAC8(Manager15* this) { sub_0805AAF0(this->unk_23); - sub_0805A280(&this->manager); + Manager15_Main(&this->manager); } extern u16 gUnk_08108648[]; diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c index 80c2975a..2b4027a2 100644 --- a/src/manager/manager1A.c +++ b/src/manager/manager1A.c @@ -27,7 +27,7 @@ extern void (*const gUnk_08108668[])(Manager1A*); extern u8 gGlobalGfxAndPalettes[]; -void sub_0805B030(Manager1A* this) { +void Manager1A_Main(Manager1A* this) { gUnk_08108668[this->manager.action](this); } diff --git a/src/manager/manager1E.c b/src/manager/manager1E.c index fad34ef4..b928f10e 100644 --- a/src/manager/manager1E.c +++ b/src/manager/manager1E.c @@ -21,7 +21,7 @@ void Manager1E_ObserveRegion(Manager1E*); void (*const Manager1E_ActionFuncs[2])(Manager1E*) = { Manager1E_Init, Manager1E_ObserveRegion }; -void Manager1E_Handler(Manager1E* this) { +void Manager1E_Main(Manager1E* this) { Manager1E_ActionFuncs[this->manager.action](this); } diff --git a/src/manager/manager2.c b/src/manager/manager2.c index b6e0eef7..ad1b4bc5 100644 --- a/src/manager/manager2.c +++ b/src/manager/manager2.c @@ -6,7 +6,7 @@ extern void sub_080576A0(); extern void sub_0805754C(Entity*); -void Manager2(Entity* this) { +void Manager2_Main(Entity* this) { if (this->action == 0) { this->action = 1; gScreen.affine.bg3Updated = 0; diff --git a/src/manager/manager20.c b/src/manager/manager20.c index f7ca8a0b..4cf749dc 100644 --- a/src/manager/manager20.c +++ b/src/manager/manager20.c @@ -18,7 +18,7 @@ typedef struct { u16 unk_3e; } Manager20; -void sub_0805B7A0(Manager20* this) { +void Manager20_Main(Manager20* this) { Entity* tmp = CreateObject(this->manager.unk_0e, this->manager.unk_0a, this->manager.unk_0b); if (!tmp) return; diff --git a/src/manager/manager26.c b/src/manager/manager26.c index 89da7a38..6fa80711 100644 --- a/src/manager/manager26.c +++ b/src/manager/manager26.c @@ -22,7 +22,7 @@ void (*const gUnk_08108D04[])(Manager26*) = { sub_0805C6D0, sub_0805C7A0, sub_08 void sub_0805C7CC(Manager26*); -void sub_0805C6B8(Manager26* this) { +void Manager26_Main(Manager26* this) { gUnk_08108D04[this->manager.action](this); } diff --git a/src/manager/manager27.c b/src/manager/manager27.c index 6540c1ad..89964893 100644 --- a/src/manager/manager27.c +++ b/src/manager/manager27.c @@ -15,7 +15,7 @@ void (*const gUnk_08108D10[])(Entity*) = { sub_0805C874, sub_0805C894, sub_0805C const u8 gUnk_08108D20[] = { 0x6F, 0x70, 0x71, 0x72, 0x71, 0x70 }; -void Manager27(Entity* this) { +void Manager27_Main(Entity* this) { gUnk_08108D10[this->action](this); if (CheckLocalFlagByOffset(0x300, this->type + 0x67)) { diff --git a/src/manager/manager28.c b/src/manager/manager28.c index 1e2eb829..b753d038 100644 --- a/src/manager/manager28.c +++ b/src/manager/manager28.c @@ -12,18 +12,18 @@ typedef struct { } Manager28; void Manager28_Init(Manager28*); -void Manager28_Main(Manager28*); +void Manager28_Main2(Manager28*); u32 Manager28_FindMatchingEntities(Manager28*); Entity* Manager28_FindMatchingEntity(EntityData*); void Manager28_RemoveDeletedEntities(Manager28*); -void (*const Manager28_ActionFuncs[])(Manager28*) = { Manager28_Init, Manager28_Main }; +void (*const Manager28_ActionFuncs[])(Manager28*) = { Manager28_Init, Manager28_Main2 }; enum Manager28_Action { Init = 0, Main = 1 }; enum Manager28_InitState { DoInit = 0, DoNotInit = 1 }; -void Manager28_Entry(Manager28* this) { +void Manager28_Main(Manager28* this) { Manager28_ActionFuncs[this->manager.action](this); } @@ -56,7 +56,7 @@ void Manager28_Init(Manager28* this) { } } -void Manager28_Main(Manager28* this) { +void Manager28_Main2(Manager28* this) { s32 n; s32 i; s32 j; diff --git a/src/manager/manager2E.c b/src/manager/manager2E.c index 6dd5ea3e..e6ad1606 100644 --- a/src/manager/manager2E.c +++ b/src/manager/manager2E.c @@ -4,7 +4,7 @@ extern void (*const gUnk_08108D3C[])(Entity*); extern void (*const gUnk_08108D44[])(Entity*); -void sub_0805D250(Entity* this) { +void Manager2E_Main(Entity* this) { gUnk_08108D3C[this->type](this); } diff --git a/src/manager/manager3.c b/src/manager/manager3.c index 24b5be70..5652ad89 100644 --- a/src/manager/manager3.c +++ b/src/manager/manager3.c @@ -30,7 +30,7 @@ extern u32 sub_08057810(void); extern u32 sub_080002C0(u16, u16, u8); extern void sub_080577AC(u32, u32, u32); -void sub_080576C0(Manager3* this) { +void Manager3_Main(Manager3* this) { s8 tmp; if (this->manager.action == 0) { this->manager.action = 1; diff --git a/src/manager/manager39.c b/src/manager/manager39.c index cdac7c61..d6018b42 100644 --- a/src/manager/manager39.c +++ b/src/manager/manager39.c @@ -35,7 +35,7 @@ void sub_0805E18C(Manager39*); // unused? void sub_0805E1D8(Manager39*); void sub_0805E1F8(u32, u32); -void sub_0805E0FC(Manager39* this) { +void Manager39_Main(Manager39* this) { gUnk_08108E28[this->manager.action](this); if ((gRoomControls.roomID != this->unk_20) || (gTextBox.doTextBox & 0x7F)) { sub_0805E1D8(this); diff --git a/src/manager/manager4.c b/src/manager/manager4.c index 2fb5fd49..970c544f 100644 --- a/src/manager/manager4.c +++ b/src/manager/manager4.c @@ -7,7 +7,7 @@ extern void (*gUnk_08107C70[])(Manager*); -void sub_08057854(Manager* this) { +void Manager4_Main(Manager* this) { gUnk_08107C70[this->action](this); } diff --git a/src/manager/manager5.c b/src/manager/manager5.c index fbb4da2e..bc9293b7 100644 --- a/src/manager/manager5.c +++ b/src/manager/manager5.c @@ -29,7 +29,7 @@ const u16 gUnk_08108034[] = { 0, 1, -1, 0, 0, -1, 1, 0 }; void (*const gUnk_08108044[])(Manager5*) = { sub_08057AE8, sub_08057BA4, sub_08057C28 }; -void sub_08057AD0(Manager5* this) { +void Manager5_Main(Manager5* this) { gUnk_08108044[this->manager.action](this); } diff --git a/src/manager/manager6.c b/src/manager/manager6.c index ff32b405..0f5637cb 100644 --- a/src/manager/manager6.c +++ b/src/manager/manager6.c @@ -5,7 +5,7 @@ extern void DoExitTransition(void*); -void sub_08057CB4(Manager6* this) { +void Manager6_Main(Manager6* this) { u32 tmp; Manager6WarpData* i; if (this->manager.action == 0) { diff --git a/src/manager/manager8.c b/src/manager/manager8.c index 582d5640..56acfd9a 100644 --- a/src/manager/manager8.c +++ b/src/manager/manager8.c @@ -19,7 +19,7 @@ void sub_08058084(u16*, u16*); extern u16 gMapDataTopSpecial[]; -void sub_08057ED0(Manager8* this) { +void Manager8_Main(Manager8* this) { sub_08057F20(this); if (!this->manager.action) { this->manager.action = 1; diff --git a/src/manager/manager9.c b/src/manager/manager9.c index 1baa8d98..0cce35fe 100644 --- a/src/manager/manager9.c +++ b/src/manager/manager9.c @@ -20,7 +20,7 @@ extern u32 gUnk_02006F00[]; const u16 gUnk_081081EC[] = { 0x30, 0x30, 0x30, 0x38 }; -void sub_080581D8(Manager9* this) { +void Manager9_Main(Manager9* this) { sub_08058210(this); if (!this->manager.action) { this->manager.action = 1; diff --git a/src/manager/managerA.c b/src/manager/managerA.c index 4b4a2ce4..ec6bfd05 100644 --- a/src/manager/managerA.c +++ b/src/manager/managerA.c @@ -14,7 +14,7 @@ void sub_080585B0(ManagerA*); void (*const gUnk_081081F4[])(ManagerA*) = { sub_08058398, sub_080583EC, sub_08058408, sub_08058514, sub_080585B0 }; -void sub_08058380(ManagerA* this) { +void ManagerA_Main(ManagerA* this) { gUnk_081081F4[this->manager.action](this); } diff --git a/src/manager/managerB.c b/src/manager/managerB.c index 470ef89d..0de51aae 100644 --- a/src/manager/managerB.c +++ b/src/manager/managerB.c @@ -18,7 +18,7 @@ void (*const ManagerB_ActionFuncs[])(Manager*); -void sub_080585F0(Manager* this) { +void ManagerB_Main(Manager* this) { // make a distincion if this is a controller (volumeMasterTarget = 0) or a helper (volumeMasterTarget = 1) ManagerB_ActionFuncs[this->unk_0a](this); } @@ -27,7 +27,7 @@ enum ManagerB_State { Init, WaitForFlag, WaitForDone }; void (*const ManagerB_StateFuncs[])(ManagerB*); -void ManagerB_Main(ManagerB* this) { +void ManagerB_Main2(ManagerB* this) { // make a distinction based on the state of this controller ManagerB_StateFuncs[this->manager.action](this); } @@ -192,6 +192,6 @@ void ReplaceMonitoredEntity(Entity* old, Entity* new) { } } -void (*const ManagerB_ActionFuncs[])(Manager*) = { (void (*)(Manager*))ManagerB_Main, +void (*const ManagerB_ActionFuncs[])(Manager*) = { (void (*)(Manager*))ManagerB_Main2, (void (*)(Manager*))ManagerBHelper_Main }; void (*const ManagerB_StateFuncs[])(ManagerB*) = { ManagerB_Init, ManagerB_WaitForFlag, ManagerB_WaitForDone }; diff --git a/src/manager/managerC.c b/src/manager/managerC.c index fdc1d480..3af59a81 100644 --- a/src/manager/managerC.c +++ b/src/manager/managerC.c @@ -60,7 +60,7 @@ void nullsub_108(ManagerC*); void (*const gUnk_0810821C[])(ManagerC*) = { sub_08058894, sub_080588CC, nullsub_108 }; -void sub_0805884C(ManagerC* this) { +void ManagerC_Main(ManagerC* this) { u32 tmp; gUnk_0810821C[this->manager.action](this); sub_08058BC8(this); diff --git a/src/manager/managerE.c b/src/manager/managerE.c index 200a52d5..261e5c00 100644 --- a/src/manager/managerE.c +++ b/src/manager/managerE.c @@ -6,7 +6,7 @@ #include "audio.h" #include "functions.h" -void sub_08058E60(ManagerE* this) { +void ManagerE_Main(ManagerE* this) { if (!this->manager.action) { this->manager.action = 1; if (CheckFlags(this->unk_3e)) { diff --git a/src/room.c b/src/room.c index 1b9400e0..62c56db8 100644 --- a/src/room.c +++ b/src/room.c @@ -3161,7 +3161,7 @@ extern EntityData gUnk_080E72E4; void sub_0804D384(void) { - sub_0805AF60(0); + Manager19_Main(0); if (CheckGlobalFlag(LV5_CLEAR)) { LoadRoomEntityList(&gUnk_080E7314); } @@ -3184,7 +3184,7 @@ u32 sub_0804D3F8() { } void sub_0804D3FC() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D408() { @@ -3192,7 +3192,7 @@ u32 sub_0804D408() { } void sub_0804D40C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D418() { @@ -3200,7 +3200,7 @@ u32 sub_0804D418() { } void sub_0804D41C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D428() { @@ -3208,7 +3208,7 @@ u32 sub_0804D428() { } void sub_0804D42C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D438() { @@ -3216,7 +3216,7 @@ u32 sub_0804D438() { } void sub_0804D43C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D448() { @@ -3224,7 +3224,7 @@ u32 sub_0804D448() { } void sub_0804D44C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D458() { @@ -3232,7 +3232,7 @@ u32 sub_0804D458() { } void sub_0804D45C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D468() { @@ -3240,7 +3240,7 @@ u32 sub_0804D468() { } void sub_0804D46C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D478() { @@ -3248,7 +3248,7 @@ u32 sub_0804D478() { } void sub_0804D47C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D488() { @@ -3256,7 +3256,7 @@ u32 sub_0804D488() { } void sub_0804D48C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D498() { @@ -3264,7 +3264,7 @@ u32 sub_0804D498() { } void sub_0804D49C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D4A8() { @@ -3272,7 +3272,7 @@ u32 sub_0804D4A8() { } void sub_0804D4AC() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D4B8() { @@ -3280,7 +3280,7 @@ u32 sub_0804D4B8() { } void sub_0804D4BC() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D4C8() { @@ -3288,7 +3288,7 @@ u32 sub_0804D4C8() { } void sub_0804D4CC() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D4D8() { @@ -3296,7 +3296,7 @@ u32 sub_0804D4D8() { } void sub_0804D4DC() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D4E8() { @@ -3304,7 +3304,7 @@ u32 sub_0804D4E8() { } void sub_0804D4EC() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D4F8() { @@ -3312,7 +3312,7 @@ u32 sub_0804D4F8() { } void sub_0804D4FC() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D508() { @@ -3320,7 +3320,7 @@ u32 sub_0804D508() { } void sub_0804D50C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D518() { @@ -3328,7 +3328,7 @@ u32 sub_0804D518() { } void sub_0804D51C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D528() { @@ -3336,7 +3336,7 @@ u32 sub_0804D528() { } void sub_0804D52C() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D538() { @@ -3351,7 +3351,7 @@ u32 sub_0804D540() { } void sub_0804D544() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D550() { @@ -3359,7 +3359,7 @@ u32 sub_0804D550() { } void sub_0804D554() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D560() { @@ -3367,7 +3367,7 @@ u32 sub_0804D560() { } void sub_0804D564() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D570() { @@ -3375,7 +3375,7 @@ u32 sub_0804D570() { } void sub_0804D574() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D580() { @@ -3383,7 +3383,7 @@ u32 sub_0804D580() { } void sub_0804D584() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D590() { @@ -3433,7 +3433,7 @@ u32 sub_0804D5C0() { } void sub_0804D5C4() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D5D0() { @@ -3441,7 +3441,7 @@ u32 sub_0804D5D0() { } void sub_0804D5D4() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D5E0() { @@ -3449,7 +3449,7 @@ u32 sub_0804D5E0() { } void sub_0804D5E4() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D5F0() { @@ -3457,7 +3457,7 @@ u32 sub_0804D5F0() { } void sub_0804D5F4() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D600() { @@ -3507,7 +3507,7 @@ u32 sub_0804D630() { } void sub_0804D634() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D640() { @@ -3517,7 +3517,7 @@ u32 sub_0804D640() { extern EntityData gUnk_080EA09C; void sub_0804D644(void) { - sub_0805AF60(0); + Manager19_Main(0); if (!CheckLocalFlag(0x70)) { LoadRoomEntityList(&gUnk_080EA09C); } @@ -3528,7 +3528,7 @@ u32 sub_0804D664() { } void sub_0804D668() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D674() { @@ -3536,7 +3536,7 @@ u32 sub_0804D674() { } void sub_0804D678() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D684() { @@ -3544,7 +3544,7 @@ u32 sub_0804D684() { } void sub_0804D688() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D694() { @@ -3552,7 +3552,7 @@ u32 sub_0804D694() { } void sub_0804D698() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D6A4() { @@ -3560,7 +3560,7 @@ u32 sub_0804D6A4() { } void sub_0804D6A8() { - sub_0805AF60(0); + Manager19_Main(0); } u32 sub_0804D6B4() { @@ -3591,7 +3591,7 @@ u32 sub_0804D6EC() { } void sub_0804D6F0(void) { - sub_0805D3C8(0); + Manager2F_Main(0); if ((gScreenTransition.field_0x38 & 1) && gScreenTransition.field_0x39) { if (gScreenTransition.field_0x3c == 1) { @@ -5612,7 +5612,7 @@ u32 sub_0804F22C() { } void sub_0804F230() { - sub_0805ADD8(0); + Manager18_Main(0); } u32 sub_0804F23C(void) { @@ -5632,7 +5632,7 @@ extern EntityData gUnk_080F70D8; extern EntityData gUnk_080F7088; void sub_0804F25C(void) { - sub_0805ADD8(0); + Manager18_Main(0); #if defined(JP) || defined(EU) if (!CheckLocalFlag(0x6b)) { #else @@ -5663,7 +5663,7 @@ u32 sub_0804F2E8() { } void sub_0804F2EC() { - sub_0805ADD8(0); + Manager18_Main(0); } u32 sub_0804F2F8() { @@ -5671,7 +5671,7 @@ u32 sub_0804F2F8() { } void sub_0804F2FC() { - sub_0805ADD8(0); + Manager18_Main(0); } extern u32 gUnk_080F7680; @@ -5687,7 +5687,7 @@ extern EntityData gUnk_080F7500; extern EntityData gUnk_080F7550; void sub_0804F330(void) { - sub_0805ADD8(0); + Manager18_Main(0); if (gSave.unk8 > 3) { LoadRoomEntityList(&gUnk_080F7500); } @@ -5712,7 +5712,7 @@ extern EntityData gUnk_080F78A0; void sub_0804F3B0(void) { - sub_0805ADD8(0); + Manager18_Main(0); if (CheckLocalFlagByOffset(0x200, 0x8f)) { if (!CheckGlobalFlag(INLOCK)) { LoadRoomEntityList(&gUnk_080F77C0); @@ -5761,7 +5761,7 @@ u32 Vars_HyruleField_OutsideCastle(void) { } void sub_0804F4E4() { - sub_0805ADD8(0); + Manager18_Main(0); sub_0804F578(); } @@ -5950,7 +5950,7 @@ extern EntityData gUnk_080F806C; void Load_HyruleField_OutsideCastleWest(void) { - sub_0805ADD8(0); + Manager18_Main(0); if ((gSave.unk8 > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) { LoadRoomEntityList(&gUnk_080F806C); } @@ -5963,8 +5963,7 @@ u32 Vars_HyruleField_TrilbyHighlands() { extern EntityData gUnk_080F82E0; void Load_HyruleField_TrilbyHighlands(void) { - - sub_0805ADD8(0); + Manager18_Main(0); #if defined(JP) || defined(EU) if (CheckGlobalFlag(LV2_CLEAR) && GetInventoryValue(0x3) && !CheckLocalFlag(0x9b)) { #else @@ -5982,7 +5981,7 @@ extern EntityData gUnk_080F8430; void sub_0804FA68(void) { - sub_0805ADD8(0); + Manager18_Main(0); if (CheckKinstoneFused(0x21) && !CheckLocalFlagByOffset(0x200, 0x42)) { LoadRoomEntityList(&gUnk_080F8430); } From 5be366626eeaf2fb37c81aa276bad7b2a8033cee Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 3 May 2021 00:32:12 +0200 Subject: [PATCH 11/64] Decompile manager2D --- asm/manager2D.s | 46 ----------------------------------------- src/manager.c | 18 ++++++++-------- src/manager/manager2D.c | 15 ++++++++++++++ 3 files changed, 24 insertions(+), 55 deletions(-) delete mode 100644 asm/manager2D.s create mode 100644 src/manager/manager2D.c diff --git a/asm/manager2D.s b/asm/manager2D.s deleted file mode 100644 index 82032334..00000000 --- a/asm/manager2D.s +++ /dev/null @@ -1,46 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager2D_Main -Manager2D_Main: @ 0x0805D1FC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _0805D240 @ =0x00004014 - ldr r1, _0805D244 @ =0x000005C3 - movs r2, #1 - bl SetTile - ldr r3, _0805D248 @ =gRoomControls - ldrh r0, [r3, #8] - adds r0, #0xc8 - ldr r2, _0805D24C @ =gPlayerEntity - movs r5, #0x32 - ldrsh r1, [r2, r5] - cmp r0, r1 - bge _0805D236 - movs r1, #0x2e - ldrsh r0, [r2, r1] - ldrh r1, [r3, #6] - subs r0, r0, r1 - subs r0, #0x30 - cmp r0, #0x10 - bhi _0805D236 - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #3 - strb r0, [r1] - adds r0, r2, #0 - bl UpdateSpriteForCollisionLayer -_0805D236: - adds r0, r4, #0 - bl DeleteManager - pop {r4, r5, pc} - .align 2, 0 -_0805D240: .4byte 0x00004014 -_0805D244: .4byte 0x000005C3 -_0805D248: .4byte gRoomControls -_0805D24C: .4byte gPlayerEntity diff --git a/src/manager.c b/src/manager.c index 0b95a43e..ae589b39 100644 --- a/src/manager.c +++ b/src/manager.c @@ -2,13 +2,13 @@ // TODO: change all manager arguments to be Entity* and cast to specific type later. void (*const gManagerFunctions[])() = { - NULL, Manager1_Main, Manager2_Main, Manager3_Main, Manager4_Main, Manager5_Main, Manager6_Main, - Manager7_Main, Manager8_Main, Manager9_Main, ManagerA_Main, ManagerB_Main, ManagerC_Main, ManagerD_Main, - ManagerE_Main, ManagerF_Main, Manager10_Main, Manager11_Main, Manager12_Main, Manager13_Main, Manager14_Main, - Manager15_Main, Manager16_Main, Manager17_Main, Manager18_Main, Manager19_Main, Manager1A_Main, Manager1B_Main, - Manager1C_Main, Manager1D_Main, Manager1E_Main, Manager1F_Main, Manager20_Main, Manager21_Main, Manager22_Main, - Manager23_Main, Manager24_Main, Manager25_Main, Manager26_Main, Manager27_Main, Manager28_Main, Manager29_Main, - Manager2A_Main, Manager2B_Main, Manager2C_Main, Manager2D_Main, Manager2E_Main, Manager2F_Main, Manager30_Main, - Manager31_Main, Manager32_Main, Manager33_Main, Manager34_Main, Manager35_Main, Manager36_Main, Manager37_Main, - Manager38_Main, Manager39_Main + NULL, Manager1_Main, Manager2_Main, Manager3_Main, Manager4_Main, Manager5_Main, Manager6_Main, + Manager7_Main, Manager8_Main, Manager9_Main, ManagerA_Main, ManagerB_Main, ManagerC_Main, ManagerD_Main, + ManagerE_Main, ManagerF_Main, Manager10_Main, Manager11_Main, Manager12_Main, Manager13_Main, Manager14_Main, + Manager15_Main, Manager16_Main, Manager17_Main, Manager18_Main, Manager19_Main, Manager1A_Main, Manager1B_Main, + Manager1C_Main, Manager1D_Main, Manager1E_Main, Manager1F_Main, Manager20_Main, Manager21_Main, Manager22_Main, + Manager23_Main, Manager24_Main, Manager25_Main, Manager26_Main, Manager27_Main, Manager28_Main, Manager29_Main, + Manager2A_Main, Manager2B_Main, Manager2C_Main, Manager2D_Main, Manager2E_Main, Manager2F_Main, Manager30_Main, + Manager31_Main, Manager32_Main, Manager33_Main, Manager34_Main, Manager35_Main, Manager36_Main, Manager37_Main, + Manager38_Main, Manager39_Main }; diff --git a/src/manager/manager2D.c b/src/manager/manager2D.c new file mode 100644 index 00000000..92aebb64 --- /dev/null +++ b/src/manager/manager2D.c @@ -0,0 +1,15 @@ +#include "entity.h" +#include "functions.h" + +extern u32 gUnk_03000BF8; +extern u32 gUnk_03000BF6; + +void Manager2D_Main(Entity* this) { + SetTile(0x4014, 0x5c3, 1); + if ((gRoomControls.roomOriginY + 200 < gPlayerEntity.y.HALF.HI) && + ((u32)(gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX) - 0x30 < 0x11)) { + gPlayerEntity.collisionLayer = 3; + UpdateSpriteForCollisionLayer(&gPlayerEntity); + } + DeleteManager((Manager*)this); +} From 1484ab66dcf319ebb8c728ca7cc874ee2441c275 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 3 May 2021 00:51:11 +0200 Subject: [PATCH 12/64] Decompile manager38 --- asm/manager38.s | 55 ----------------------------------------- linker.ld | 4 +-- src/manager/manager38.c | 31 +++++++++++++++++++++++ 3 files changed, 33 insertions(+), 57 deletions(-) delete mode 100644 asm/manager38.s create mode 100644 src/manager/manager38.c diff --git a/asm/manager38.s b/asm/manager38.s deleted file mode 100644 index 3d3696ac..00000000 --- a/asm/manager38.s +++ /dev/null @@ -1,55 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager38_Main -Manager38_Main: @ 0x0805E0A8 - push {lr} - ldr r2, _0805E0BC @ =gUnk_08108DE0 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805E0BC: .4byte gUnk_08108DE0 - - thumb_func_start sub_0805E0C0 -sub_0805E0C0: @ 0x0805E0C0 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0 - movs r1, #1 - strb r1, [r5, #0xc] - strb r0, [r5, #0xe] - ldrb r0, [r5, #0xa] - bl GetCurrentRoomProperty - adds r4, r0, #0 - cmp r4, #0 - bne _0805E0EC - bl DeleteThisEntity - b _0805E0EC -_0805E0DE: - adds r0, r4, #0 - adds r4, #0x10 - bl LoadRoomEntity - str r5, [r0, #0x50] - movs r1, #0xff - strb r1, [r0, #0xe] -_0805E0EC: - ldrb r0, [r4] - cmp r0, #0xff - bne _0805E0DE - pop {r4, r5, pc} - - thumb_func_start sub_0805E0F4 -sub_0805E0F4: @ 0x0805E0F4 - movs r1, #0 - strb r1, [r0, #0xe] - bx lr - .align 2, 0 diff --git a/linker.ld b/linker.ld index ebb0cc59..19f563f8 100644 --- a/linker.ld +++ b/linker.ld @@ -545,7 +545,7 @@ SECTIONS { asm/manager2A.o(.text); asm/manager2B.o(.text); asm/manager2C.o(.text); - asm/manager2D.o(.text); + src/manager/manager2D.o(.text); src/manager/manager2E.o(.text); asm/manager2E.o(.text); asm/manager2F.o(.text); @@ -557,7 +557,7 @@ SECTIONS { asm/manager35.o(.text); asm/manager36.o(.text); asm/manager37.o(.text); - asm/manager38.o(.text); + src/manager/manager38.o(.text); src/manager/manager39.o(.text); asm/sub_0805E248.o(.text); src/sub_0805E374.o(.text); diff --git a/src/manager/manager38.c b/src/manager/manager38.c new file mode 100644 index 00000000..5b081a28 --- /dev/null +++ b/src/manager/manager38.c @@ -0,0 +1,31 @@ +#include "entity.h" +#include "room.h" + +extern void (*const gUnk_08108DE0[])(Entity*); + +extern Entity* LoadRoomEntity(EntityData*); + +void Manager38_Main(Entity* this) { + gUnk_08108DE0[this->action](this); +} + +void sub_0805E0C0(Entity* this) { + EntityData* entityData; + Entity* entity; + + this->action = 1; + this->actionDelay = 0; + entityData = (EntityData*)GetCurrentRoomProperty(this->type); + if (entityData == NULL) { + DeleteThisEntity(); + } + while (*(u8*)entityData != 0xff) { + entity = LoadRoomEntity(entityData++); + entity->parent = this; + entity->actionDelay = 0xff; + } +} + +void sub_0805E0F4(Entity* this) { + this->actionDelay = 0; +} From 568a033f423a2dc734e504315470fc060f64589f Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 12:57:28 +0200 Subject: [PATCH 13/64] Decompile manager2A --- asm/manager2A.s | 56 ----------------------------------------- include/manager.h | 2 +- linker.ld | 2 +- src/manager/manager2A.c | 39 ++++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 58 deletions(-) delete mode 100644 asm/manager2A.s create mode 100644 src/manager/manager2A.c diff --git a/asm/manager2A.s b/asm/manager2A.s deleted file mode 100644 index 0e038210..00000000 --- a/asm/manager2A.s +++ /dev/null @@ -1,56 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager2A_Main -Manager2A_Main: @ 0x0805CFC0 - push {r4, lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xc] - cmp r0, #0 - bne _0805CFCE - adds r0, #1 - strb r0, [r1, #0xc] -_0805CFCE: - movs r0, #3 - bl GetCurrentRoomProperty - adds r4, r0, #0 - cmp r4, #0 - beq _0805CFEE - b _0805CFE8 -_0805CFDC: - cmp r0, #0xa - bne _0805CFE6 - adds r0, r4, #0 - bl sub_0805CFF0 -_0805CFE6: - adds r4, #8 -_0805CFE8: - ldrb r0, [r4] - cmp r0, #0 - bne _0805CFDC -_0805CFEE: - pop {r4, pc} - - thumb_func_start sub_0805CFF0 -sub_0805CFF0: @ 0x0805CFF0 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #2] - bl CheckLocalFlag - cmp r0, #0 - bne _0805D012 - ldrh r0, [r4, #4] - ldrb r1, [r4, #1] - bl GetTileType - ldrh r1, [r4, #6] - cmp r1, r0 - bne _0805D012 - ldrh r0, [r4, #2] - bl SetLocalFlag -_0805D012: - pop {r4, pc} diff --git a/include/manager.h b/include/manager.h index e3448925..3e0f070a 100644 --- a/include/manager.h +++ b/include/manager.h @@ -181,7 +181,7 @@ extern void Manager26_Main(); extern void Manager27_Main(); extern void Manager28_Main(); extern void Manager29_Main(Entity*); -extern void Manager2A_Main(Entity*); +extern void Manager2A_Main(Manager*); extern void Manager2B_Main(Entity*); extern void Manager2C_Main(Entity*); extern void Manager2D_Main(Entity*); diff --git a/linker.ld b/linker.ld index 19f563f8..94503545 100644 --- a/linker.ld +++ b/linker.ld @@ -542,7 +542,7 @@ SECTIONS { src/manager/manager27.o(.text); src/manager/manager28.o(.text); asm/manager29.o(.text); - asm/manager2A.o(.text); + src/manager/manager2A.o(.text); asm/manager2B.o(.text); asm/manager2C.o(.text); src/manager/manager2D.o(.text); diff --git a/src/manager/manager2A.c b/src/manager/manager2A.c new file mode 100644 index 00000000..048df4cb --- /dev/null +++ b/src/manager/manager2A.c @@ -0,0 +1,39 @@ +#include "manager.h" +#include "room.h" +#include "flags.h" +#include "functions.h" + +typedef struct { + u8 field_0x0; + u8 tileLayer; + u16 flag; + u16 tilePos; + u16 tileType; // If the tile type at tilePos, tileLayer is tileType, set the local flag. +} Manager2A_unk; // TODO result of GetCurrentRoomProperty(3)? + +void sub_0805CFF0(Manager2A_unk*); + +void Manager2A_Main(Manager* manager) { + Manager2A_unk* data; + + if (manager->action == 0) { + manager->action += 1; + } + data = (Manager2A_unk*)GetCurrentRoomProperty(3); + if (data != NULL) { + for (; data->field_0x0 != 0; data = data + 1) { + if (data->field_0x0 == 10) { + sub_0805CFF0(data); + } + } + } +} + +void sub_0805CFF0(Manager2A_unk* param_1) { + if (CheckLocalFlag(param_1->flag) == 0) { + u32 tileType = GetTileType(param_1->tilePos, param_1->tileLayer); + if (param_1->tileType == tileType) { + SetLocalFlag(param_1->flag); + } + } +} From 18168cd2a946b3275f48677693e138e3f81a6263 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 13:33:13 +0200 Subject: [PATCH 14/64] Decompile manager2C --- asm/manager2C.s | 76 ----------------------------------------- include/manager.h | 2 +- linker.ld | 2 +- src/manager/manager2C.c | 35 +++++++++++++++++++ 4 files changed, 37 insertions(+), 78 deletions(-) delete mode 100644 asm/manager2C.s create mode 100644 src/manager/manager2C.c diff --git a/asm/manager2C.s b/asm/manager2C.s deleted file mode 100644 index c5a0f5d3..00000000 --- a/asm/manager2C.s +++ /dev/null @@ -1,76 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager2C_Main -Manager2C_Main: @ 0x0805D174 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r1, [r5, #0xc] - cmp r1, #0 - bne _0805D184 - movs r0, #1 - strb r0, [r5, #0xc] - strh r1, [r5, #0x3a] -_0805D184: - movs r1, #0x38 - ldrsh r0, [r5, r1] - movs r2, #0x3a - ldrsh r1, [r5, r2] - movs r2, #0x14 - movs r3, #0x40 - bl CheckPlayerInRegion - cmp r0, #0 - beq _0805D1EE - ldr r0, _0805D1F0 @ =gPlayerEntity - movs r4, #0x32 - ldrsh r1, [r0, r4] - ldr r3, _0805D1F4 @ =gRoomControls - ldrh r2, [r3, #8] - subs r1, r1, r2 - movs r4, #0x36 - ldrsh r0, [r0, r4] - adds r1, r1, r0 - cmp r1, #0 - bge _0805D1EE - movs r1, #0xc - ldrsh r0, [r3, r1] - cmp r0, r2 - bne _0805D1EE - ldr r4, _0805D1F8 @ =gUnk_030010AC - adds r0, r4, #0 - movs r1, #0x20 - bl MemClear - subs r4, #0xc - movs r1, #0 - movs r0, #1 - strb r0, [r4, #8] - strb r1, [r4, #9] - movs r0, #0xb - strb r0, [r4, #0xf] - ldrb r0, [r5, #0xb] - strb r0, [r4, #0xc] - ldrb r0, [r5, #0xe] - strb r0, [r4, #0xd] - adds r0, r5, #0 - adds r0, #0x37 - ldrb r0, [r0] - strb r0, [r4, #0xe] - ldrh r0, [r5, #0x3c] - strh r0, [r4, #0x10] - ldrh r0, [r5, #0x3e] - strh r0, [r4, #0x12] - adds r0, r5, #0 - adds r0, #0x36 - ldrb r0, [r0] - strb r0, [r4, #0x14] -_0805D1EE: - pop {r4, r5, pc} - .align 2, 0 -_0805D1F0: .4byte gPlayerEntity -_0805D1F4: .4byte gRoomControls -_0805D1F8: .4byte gUnk_030010AC diff --git a/include/manager.h b/include/manager.h index 3e0f070a..9273e8e8 100644 --- a/include/manager.h +++ b/include/manager.h @@ -183,7 +183,7 @@ extern void Manager28_Main(); extern void Manager29_Main(Entity*); extern void Manager2A_Main(Manager*); extern void Manager2B_Main(Entity*); -extern void Manager2C_Main(Entity*); +extern void Manager2C_Main(); extern void Manager2D_Main(Entity*); extern void Manager2E_Main(); extern void Manager2F_Main(); diff --git a/linker.ld b/linker.ld index 94503545..b14d320a 100644 --- a/linker.ld +++ b/linker.ld @@ -544,7 +544,7 @@ SECTIONS { asm/manager29.o(.text); src/manager/manager2A.o(.text); asm/manager2B.o(.text); - asm/manager2C.o(.text); + src/manager/manager2C.o(.text); src/manager/manager2D.o(.text); src/manager/manager2E.o(.text); asm/manager2E.o(.text); diff --git a/src/manager/manager2C.c b/src/manager/manager2C.c new file mode 100644 index 00000000..ba66443d --- /dev/null +++ b/src/manager/manager2C.c @@ -0,0 +1,35 @@ +#include "manager.h" +#include "functions.h" +#include "utils.h" + +typedef struct { + struct Manager manager; + u8 field_0x20[0x16]; + u8 field_0x36; + u8 field_0x37; + s16 field_0x38; + s16 field_0x3a; + u16 field_0x3c; + u16 field_0x3e; +} Manager2C; + +void Manager2C_Main(Manager2C* manager) { + if (manager->manager.action == 0) { + manager->manager.action = 1; + manager->field_0x3a = 0; + } + if (((CheckPlayerInRegion(manager->field_0x38, manager->field_0x3a, 0x14, 0x40) != 0) && + (((gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) +gPlayerEntity.height.HALF.HI) < 0)) && + (gRoomControls.roomScrollY == gRoomControls.roomOriginY)) { + MemClear(&gScreenTransition.areaID, 0x20); + gScreenTransition.transitioningOut = 1; + gScreenTransition.transitionType = 0; + gScreenTransition.field_0xf = 0xb; + gScreenTransition.areaID = manager->manager.unk_0b; + gScreenTransition.roomID = manager->manager.unk_0e; + gScreenTransition.playerState = manager->field_0x37; + gScreenTransition.playerStartPos.HALF.x = manager->field_0x3c; + gScreenTransition.playerStartPos.HALF.y = manager->field_0x3e; + gScreenTransition.playerLayer = manager->field_0x36; + } +} From 8418fa7c9c25675d892b8db458e186c16e5362e7 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 13:56:32 +0200 Subject: [PATCH 15/64] Decompile manager1C --- asm/manager1C.s | 78 ----------------------------------------- include/manager.h | 2 +- linker.ld | 2 +- src/manager/manager1C.c | 33 +++++++++++++++++ 4 files changed, 35 insertions(+), 80 deletions(-) delete mode 100644 asm/manager1C.s create mode 100644 src/manager/manager1C.c diff --git a/asm/manager1C.s b/asm/manager1C.s deleted file mode 100644 index 3ff9a772..00000000 --- a/asm/manager1C.s +++ /dev/null @@ -1,78 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager1C_Main -Manager1C_Main: @ 0x0805B53C - push {lr} - ldr r2, _0805B550 @ =gUnk_08108C64 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805B550: .4byte gUnk_08108C64 - - thumb_func_start sub_0805B554 -sub_0805B554: @ 0x0805B554 - movs r1, #1 - strb r1, [r0, #0xc] - strb r1, [r0, #0xe] - bx lr - - thumb_func_start sub_0805B55C -sub_0805B55C: @ 0x0805B55C - push {r4, r5, lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805B5B4 - movs r0, #0xf - strb r0, [r1, #0xe] - movs r0, #0x19 - movs r1, #0 - bl CreateEnemy - adds r5, r0, #0 - cmp r5, #0 - beq _0805B5B4 - bl Random - ldr r4, _0805B5B8 @ =gRoomControls - ldr r2, _0805B5BC @ =gUnk_08108C6C - movs r1, #7 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r0, [r1] - adds r0, #0x78 - ldrh r1, [r4, #0xa] - adds r0, r0, r1 - strh r0, [r5, #0x2e] - bl Random - ldr r2, _0805B5C0 @ =gUnk_08108C7C - movs r1, #3 - ands r1, r0 - adds r1, r1, r2 - movs r0, #0 - ldrsb r0, [r1, r0] - adds r0, #0x50 - ldrh r4, [r4, #0xc] - adds r0, r0, r4 - strh r0, [r5, #0x32] - ldr r0, _0805B5C4 @ =0x0000FF38 - strh r0, [r5, #0x36] -_0805B5B4: - pop {r4, r5, pc} - .align 2, 0 -_0805B5B8: .4byte gRoomControls -_0805B5BC: .4byte gUnk_08108C6C -_0805B5C0: .4byte gUnk_08108C7C -_0805B5C4: .4byte 0x0000FF38 diff --git a/include/manager.h b/include/manager.h index 9273e8e8..5facf6a0 100644 --- a/include/manager.h +++ b/include/manager.h @@ -167,7 +167,7 @@ extern void Manager18_Main(); extern void Manager19_Main(Entity*); extern void Manager1A_Main(); extern void Manager1B_Main(Entity*); -extern void Manager1C_Main(Entity*); +extern void Manager1C_Main(Manager*); extern void Manager1D_Main(Entity*); extern void Manager1E_Main(); extern void Manager1F_Main(Entity*); diff --git a/linker.ld b/linker.ld index b14d320a..29c6a9f6 100644 --- a/linker.ld +++ b/linker.ld @@ -528,7 +528,7 @@ SECTIONS { asm/manager19.o(.text); src/manager/manager1A.o(.text); asm/manager1B.o(.text); - asm/manager1C.o(.text); + src/manager/manager1C.o(.text); asm/manager1D.o(.text); src/manager/manager1E.o(.text); asm/manager1F.o(.text); diff --git a/src/manager/manager1C.c b/src/manager/manager1C.c new file mode 100644 index 00000000..bb151f8f --- /dev/null +++ b/src/manager/manager1C.c @@ -0,0 +1,33 @@ +#include "manager.h" +#include "random.h" +#include "room.h" +#include "enemy.h" + +extern void (*const gUnk_08108C64[])(Manager*); + +extern u16 gUnk_08108C6C[]; +extern s8 gUnk_08108C7C[]; + +void Manager1C_Main(Manager* manager) { + gUnk_08108C64[manager->action](manager); +} + +// Initial setup +void sub_0805B554(Manager* manager) { + manager->action = 1; + manager->unk_0e = 1; +} + +// Spawn water drops every 0xf frames +void sub_0805B55C(Manager* manager) { + if (--manager->unk_0e == 0) { + Entity* waterDrop; + manager->unk_0e = 0xf; + waterDrop = CreateEnemy(WATER_DROP, 0); + if (waterDrop != NULL) { + waterDrop->x.HALF.HI = gRoomControls.roomScrollX + 0x78 + gUnk_08108C6C[Random() & 7]; + waterDrop->y.HALF.HI = gRoomControls.roomScrollY + 0x50 + gUnk_08108C7C[Random() & 3]; + waterDrop->height.HALF.HI = 0xff38; + } + } +} From 87038a31bfab54cc47ee1bc8ffd91a0f29b33a82 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 14:39:45 +0200 Subject: [PATCH 16/64] Decompile manager36 --- asm/manager36.s | 81 -------------------------------- asm/vaati.s | 4 +- data/scripts/script_0800AB08.inc | 2 +- data/scripts/script_0800AB6E.inc | 2 +- data/scripts/script_0800DB78.inc | 2 +- data/scripts/script_0800DC4C.inc | 2 +- data/scripts/script_08010BB4.inc | 2 +- data/scripts/script_08010E5A.inc | 4 +- data/scripts/script_08010F84.inc | 2 +- data/scripts/script_080134DC.inc | 6 +-- data/scripts/script_08013650.inc | 2 +- data/scripts/script_08013720.inc | 4 +- data/scripts/script_080138B4.inc | 6 +-- data/scripts/script_08013AA6.inc | 2 +- data/scripts/script_080153EC.inc | 2 +- data/scripts/script_0801548E.inc | 2 +- data/scripts/script_08015618.inc | 4 +- include/entity.h | 2 + include/manager.h | 2 +- linker.ld | 2 +- src/entity.c | 1 - src/manager/manager36.c | 44 +++++++++++++++++ 22 files changed, 72 insertions(+), 108 deletions(-) delete mode 100644 asm/manager36.s create mode 100644 src/manager/manager36.c diff --git a/asm/manager36.s b/asm/manager36.s deleted file mode 100644 index 1856842e..00000000 --- a/asm/manager36.s +++ /dev/null @@ -1,81 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager36_Main -Manager36_Main: @ 0x0805DDB4 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xa] - lsls r0, r0, #2 - ldr r1, _0805DDE0 @ =gUnk_08108DA8 - adds r3, r0, r1 - ldrb r0, [r2, #0xc] - adds r1, r0, #0 - cmp r1, #0 - bne _0805DDCE - adds r0, #1 - strb r0, [r2, #0xc] - strb r1, [r2, #0xe] -_0805DDCE: - ldrb r0, [r2, #0xe] - cmp r0, #0 - bne _0805DDE4 - ldrh r0, [r3] - strb r0, [r2, #0xe] - ldrh r0, [r3, #2] - bl SoundReq - b _0805DDE8 - .align 2, 0 -_0805DDE0: .4byte gUnk_08108DA8 -_0805DDE4: - subs r0, #1 - strb r0, [r2, #0xe] -_0805DDE8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0805DDEC -sub_0805DDEC: @ 0x0805DDEC - push {r4, r5, lr} - adds r5, r1, #0 - bl GetEmptyManager - adds r4, r0, #0 - cmp r4, #0 - beq _0805DE16 - movs r0, #9 - strb r0, [r4, #8] - movs r0, #0x36 - strb r0, [r4, #9] - ldr r0, [r5, #4] - strb r0, [r4, #0xa] - adds r0, r4, #0 - movs r1, #6 - bl AppendEntityToList - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 -_0805DE16: - pop {r4, r5, pc} - - thumb_func_start sub_0805DE18 -sub_0805DE18: @ 0x0805DE18 - push {lr} - sub sp, #4 - ldr r3, [r1, #4] - movs r0, #0 - str r0, [sp] - movs r0, #9 - movs r1, #0x36 - movs r2, #6 - bl FindEntity - cmp r0, #0 - beq _0805DE34 - bl DeleteEntityAny -_0805DE34: - add sp, #4 - pop {pc} diff --git a/asm/vaati.s b/asm/vaati.s index a9f5bf86..4fc88888 100644 --- a/asm/vaati.s +++ b/asm/vaati.s @@ -130,7 +130,7 @@ _08066B40: movs r0, #4 str r0, [r1, #4] adds r0, r4, #0 - bl sub_0805DDEC + bl CreateManager36 b _08066B66 _08066B52: adds r0, r4, #0 @@ -138,7 +138,7 @@ _08066B52: ldr r1, [r0] str r2, [r1, #4] adds r0, r4, #0 - bl sub_0805DE18 + bl DeleteManager36 ldr r0, _08066B70 @ =0x0000021D bl EnqueueSFX _08066B66: diff --git a/data/scripts/script_0800AB08.inc b/data/scripts/script_0800AB08.inc index d0cea700..3e39cd33 100644 --- a/data/scripts/script_0800AB08.inc +++ b/data/scripts/script_0800AB08.inc @@ -17,5 +17,5 @@ SCRIPT_START script_0800AB08 _0807EA94 TextboxNoOverlapFollowPos 0x165e, 0x000e _0807EA94 - CallWithArg sub_0805DDEC, 0x00000001 + CallWithArg CreateManager36, 0x00000001 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_0800AB6E.inc b/data/scripts/script_0800AB6E.inc index 1f8e3217..93ddef40 100644 --- a/data/scripts/script_0800AB6E.inc +++ b/data/scripts/script_0800AB6E.inc @@ -8,7 +8,7 @@ SCRIPT_START script_0800AB6E SetEntityPosition 0x0000, 0xffe0 Call sub_0807F5C0 Wait 0x003c - CallWithArg sub_0805DE18, 0x00000001 + CallWithArg DeleteManager36, 0x00000001 _0807F0C8 0x0000, 0x0000 Wait 0x003c _0807E5F8 0x00000002 diff --git a/data/scripts/script_0800DB78.inc b/data/scripts/script_0800DB78.inc index 829bc9d0..03052307 100644 --- a/data/scripts/script_0800DB78.inc +++ b/data/scripts/script_0800DB78.inc @@ -42,5 +42,5 @@ script_0800DBCA: _0807E5F8 0x00000001 StopBgm Call sub_08094F98 - CallWithArg sub_0805DDEC, 0x00000001 + CallWithArg CreateManager36, 0x00000001 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_0800DC4C.inc b/data/scripts/script_0800DC4C.inc index 1c84c162..c08bc36d 100644 --- a/data/scripts/script_0800DC4C.inc +++ b/data/scripts/script_0800DC4C.inc @@ -11,7 +11,7 @@ SCRIPT_START script_0800DC4C _0807E778 0x0004 _0807E80C 0x00000000 WaitFor_2 - CallWithArg sub_0805DE18, 0x00000001 + CallWithArg DeleteManager36, 0x00000001 _0807F0C8 0x0000, 0x0000 SetLocalFlag 0x0079 CallWithArg sub_0806DA1C, 0x00000002 diff --git a/data/scripts/script_08010BB4.inc b/data/scripts/script_08010BB4.inc index 9bd7cb7f..6e912cff 100644 --- a/data/scripts/script_08010BB4.inc +++ b/data/scripts/script_08010BB4.inc @@ -135,5 +135,5 @@ SCRIPT_START script_08010BEC _0807E5F8 0x08000000 _0807E5F8 0x00800000 WaitForSomething2 0x01000000 - CallWithArg sub_0805DDEC, 0x00000002 + CallWithArg CreateManager36, 0x00000002 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_08010E5A.inc b/data/scripts/script_08010E5A.inc index 2804a046..2ebf3a9e 100644 --- a/data/scripts/script_08010E5A.inc +++ b/data/scripts/script_08010E5A.inc @@ -24,7 +24,7 @@ SCRIPT_START script_08010E5A _0807E778 0x0002 DoFade6 WaitFor_2 - CallWithArg sub_0805DE18, 0x00000002 + CallWithArg DeleteManager36, 0x00000002 _0807F0C8 0x0000, 0x0000 Call sub_0806DC3C Call sub_080791BC @@ -51,5 +51,5 @@ SCRIPT_START script_08010E5A _0807EA94 TextboxNoOverlapFollowPos 0x1046, 0x0000 _0807EA94 - CallWithArg sub_0805DDEC, 0x00000002 + CallWithArg CreateManager36, 0x00000002 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_08010F84.inc b/data/scripts/script_08010F84.inc index d10ec983..54feb621 100644 --- a/data/scripts/script_08010F84.inc +++ b/data/scripts/script_08010F84.inc @@ -22,7 +22,7 @@ SCRIPT_START script_08010F84 Wait 0x000f PlaySound SFX_125 CallWithArg sub_0807FB28, 0x00000003 - CallWithArg sub_0805DE18, 0x00000002 + CallWithArg DeleteManager36, 0x00000002 _0807F0C8 0x0000, 0x0000 _0807E5F8 0x00000010 WaitForSomething2 0x00000020 diff --git a/data/scripts/script_080134DC.inc b/data/scripts/script_080134DC.inc index 9431e96d..bdf9d90e 100644 --- a/data/scripts/script_080134DC.inc +++ b/data/scripts/script_080134DC.inc @@ -34,7 +34,7 @@ script_080134F8: CallWithArg sub_08095D8C, script_08014118 EndBlock Wait 0x003c - CallWithArg sub_0805DDEC, 0x00000000 + CallWithArg CreateManager36, 0x00000000 _0807E5F8 0x00000200 WaitForSomething2 0x00002000 PlaySound SFX_1D2 @@ -44,7 +44,7 @@ script_080134F8: WaitForSomething2 0x00004000 Wait 0x0078 _0807E5F8 0x00000060 - CallWithArg sub_0805DE18, 0x00000000 + CallWithArg DeleteManager36, 0x00000000 Wait 0x0078 _0807E5F8 0x00000080 WaitForSomething2 0x00000100 @@ -69,5 +69,5 @@ script_080134F8: TextboxNoOverlapFollowPos 0x0503, 0x000c _0807EA94 _0807E5F8 0x00040000 - CallWithArg sub_0805DDEC, 0x00000001 + CallWithArg CreateManager36, 0x00000001 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_08013650.inc b/data/scripts/script_08013650.inc index 0b142523..be9e61d7 100644 --- a/data/scripts/script_08013650.inc +++ b/data/scripts/script_08013650.inc @@ -7,7 +7,7 @@ SCRIPT_START script_08013650 Wait 0x003c _0807E5F8 0x00000004 Wait 0x0078 - CallWithArg sub_0805DE18, 0x00000001 + CallWithArg DeleteManager36, 0x00000001 _0807F0C8 0x0000, 0x0000 StartPlayerScript script_080136B4 WaitForSomething2 0x00000002 diff --git a/data/scripts/script_08013720.inc b/data/scripts/script_08013720.inc index b7718584..d669a6ce 100644 --- a/data/scripts/script_08013720.inc +++ b/data/scripts/script_08013720.inc @@ -35,7 +35,7 @@ script_0801373C: CallWithArg sub_08095D8C, script_08014154 EndBlock Wait 0x003c - CallWithArg sub_0805DDEC, 0x00000000 + CallWithArg CreateManager36, 0x00000000 _0807E5F8 0x00000200 WaitForSomething2 0x00002000 PlaySound SFX_1D2 @@ -47,7 +47,7 @@ script_0801373C: WaitForSomething2 0x00008000 Wait 0x0078 _0807E5F8 0x00000060 - CallWithArg sub_0805DE18, 0x00000000 + CallWithArg DeleteManager36, 0x00000000 Wait 0x0078 _0807E5F8 0x00000080 WaitForSomething2 0x00000100 diff --git a/data/scripts/script_080138B4.inc b/data/scripts/script_080138B4.inc index 206ac542..c2401d1d 100644 --- a/data/scripts/script_080138B4.inc +++ b/data/scripts/script_080138B4.inc @@ -37,7 +37,7 @@ script_080138D0: CallWithArg sub_08095D8C, script_08014198 EndBlock Wait 0x003c - CallWithArg sub_0805DDEC, 0x00000000 + CallWithArg CreateManager36, 0x00000000 _0807E5F8 0x00000200 WaitForSomething2 0x00002000 PlaySound SFX_1D2 @@ -51,7 +51,7 @@ script_080138D0: WaitForSomething2 0x00010000 Wait 0x0078 _0807E5F8 0x00000060 - CallWithArg sub_0805DE18, 0x00000000 + CallWithArg DeleteManager36, 0x00000000 Wait 0x0078 _0807E5F8 0x00000080 WaitForSomething2 0x00000100 @@ -93,5 +93,5 @@ script_08013A8E: CheckRoomFlag 0x0004 JumpIfNot script_08013A8E .endif - CallWithArg sub_0805DDEC, 0x00000001 + CallWithArg CreateManager36, 0x00000001 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_08013AA6.inc b/data/scripts/script_08013AA6.inc index 37961ee2..704a94ee 100644 --- a/data/scripts/script_08013AA6.inc +++ b/data/scripts/script_08013AA6.inc @@ -9,7 +9,7 @@ SCRIPT_START script_08013AA6 .endif _0807E5F8 0x00000008 Wait 0x0078 - CallWithArg sub_0805DE18, 0x00000001 + CallWithArg DeleteManager36, 0x00000001 _0807F0C8 0x0000, 0x0000 Wait 0x003c _0807F0B4 0x0004 diff --git a/data/scripts/script_080153EC.inc b/data/scripts/script_080153EC.inc index 4b6215c6..e44e0e7a 100644 --- a/data/scripts/script_080153EC.inc +++ b/data/scripts/script_080153EC.inc @@ -32,5 +32,5 @@ SCRIPT_START script_080153EC _0807EA94 TextboxNoOverlapFollowPos 0x1310, 0x000c _0807EA94 - CallWithArg sub_0805DDEC, 0x00000001 + CallWithArg CreateManager36, 0x00000001 _0807F0C8 0xffff, 0x0000 diff --git a/data/scripts/script_0801548E.inc b/data/scripts/script_0801548E.inc index 4c3abbd4..28d145b7 100644 --- a/data/scripts/script_0801548E.inc +++ b/data/scripts/script_0801548E.inc @@ -11,7 +11,7 @@ SCRIPT_START script_0801548E WaitForSomething2 0x00010000 _0807E5F8 0x00048000 WaitForSomething2 0x00010000 - CallWithArg sub_0805DE18, 0x00000001 + CallWithArg DeleteManager36, 0x00000001 _0807F0C8 0x0000, 0x0000 TextboxNoOverlapFollowPos 0x1312, 0x000c _0807EA94 diff --git a/data/scripts/script_08015618.inc b/data/scripts/script_08015618.inc index 399b1b33..58bf24d6 100644 --- a/data/scripts/script_08015618.inc +++ b/data/scripts/script_08015618.inc @@ -5,13 +5,13 @@ SCRIPT_START script_08015618 Call sub_08094B80 EndBlock WaitForSomething2 0x00000080 - CallWithArg sub_0805DDEC, 0x00000003 + CallWithArg CreateManager36, 0x00000003 Call sub_08094B0C _0807EDD4 0x0078, 0x0068 _0807E5F8 0x00000100 WaitForSomething2 0x00000080 _0807EF3C 0xff80, 0x0000 - CallWithArg sub_0805DE18, 0x00000003 + CallWithArg DeleteManager36, 0x00000003 Wait 0x003c _0807E5F8 0x00000100 WaitForSomething2 0x00000080 diff --git a/include/entity.h b/include/entity.h index ca4bd10d..2109a212 100644 --- a/include/entity.h +++ b/include/entity.h @@ -265,4 +265,6 @@ Entity* FindNextDuplicateID(Entity* ent, int listIndex); */ Entity* FindEntity(u32 kind, u32 id, u32 listIndex, u32 type, u32 type2); +void DeleteEntityAny(Entity* ent); + #endif diff --git a/include/manager.h b/include/manager.h index 5facf6a0..f3a81b46 100644 --- a/include/manager.h +++ b/include/manager.h @@ -193,7 +193,7 @@ extern void Manager32_Main(Entity*); extern void Manager33_Main(Entity*); extern void Manager34_Main(Entity*); extern void Manager35_Main(Entity*); -extern void Manager36_Main(Entity*); +extern void Manager36_Main(Manager*); extern void Manager37_Main(Entity*); extern void Manager38_Main(Entity*); extern void Manager39_Main(); diff --git a/linker.ld b/linker.ld index 29c6a9f6..7c36ca52 100644 --- a/linker.ld +++ b/linker.ld @@ -555,7 +555,7 @@ SECTIONS { asm/manager33.o(.text); asm/manager34.o(.text); asm/manager35.o(.text); - asm/manager36.o(.text); + src/manager/manager36.o(.text); asm/manager37.o(.text); src/manager/manager38.o(.text); src/manager/manager39.o(.text); diff --git a/src/entity.c b/src/entity.c index f3fd7ca3..02230491 100644 --- a/src/entity.c +++ b/src/entity.c @@ -49,7 +49,6 @@ typedef struct { extern struct_03003DD0 gUnk_03003DD0; extern u32 _call_via_r0(u32*); extern u32 _EntUpdate; -void DeleteEntityAny(Entity*); void DeleteThisEntity(void) { DeleteEntityAny(gUnk_03003DD0.field_0x8); diff --git a/src/manager/manager36.c b/src/manager/manager36.c new file mode 100644 index 00000000..e7251db2 --- /dev/null +++ b/src/manager/manager36.c @@ -0,0 +1,44 @@ +#include "manager.h" +#include "audio.h" +#include "script.h" +#include "functions.h" + +typedef struct { + u16 waitTime; + u16 sound; +} Manager36_unk; + +extern Manager36_unk gUnk_08108DA8[]; + +// Repeatedly plays the same sound with a fixed wait time +void Manager36_Main(Manager* manager) { + Manager36_unk* unk = &gUnk_08108DA8[manager->unk_0a]; + if (manager->action == 0) { + manager->action += 1; + manager->unk_0e = 0; + } + if (manager->unk_0e == 0) { + manager->unk_0e = unk->waitTime; + SoundReq(unk->sound); + } else { + manager->unk_0e -= 1; + } +} + +void CreateManager36(Entity* entity, ScriptExecutionContext* context) { + Manager* manager = GetEmptyManager(); + if (manager != NULL) { + manager->type = 9; + manager->subtype = 0x36; + manager->unk_0a = context->intVariable; + AppendEntityToList((Entity*)manager, 6); + sub_0805E3A0(manager, 6); + } +} + +void DeleteManager36(Entity* entity, ScriptExecutionContext* context) { + Entity* manager = FindEntity(9, 0x36, 6, context->intVariable, 0); + if (manager != NULL) { + DeleteEntityAny(manager); + } +} From bfe4af300bdf2d59f2453558da80a40519a5e478 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 17:00:27 +0200 Subject: [PATCH 17/64] Decompile manager17 --- asm/manager17.s | 82 ----------------------------------------- include/manager.h | 2 +- linker.ld | 2 +- src/manager/manager17.c | 47 +++++++++++++++++++++++ 4 files changed, 49 insertions(+), 84 deletions(-) delete mode 100644 asm/manager17.s create mode 100644 src/manager/manager17.c diff --git a/asm/manager17.s b/asm/manager17.s deleted file mode 100644 index 8db982b7..00000000 --- a/asm/manager17.s +++ /dev/null @@ -1,82 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager17_Main -Manager17_Main: @ 0x0805AD48 - push {lr} - ldr r2, _0805AD5C @ =gUnk_08108654 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805AD5C: .4byte gUnk_08108654 - - thumb_func_start sub_0805AD60 -sub_0805AD60: @ 0x0805AD60 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _0805AD76 - bl DeleteThisEntity -_0805AD76: - adds r0, r4, #0 - bl sub_0805AD80 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805AD80 -sub_0805AD80: @ 0x0805AD80 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805ADD0 - ldrb r1, [r4, #0xa] - ldrb r2, [r4, #0xb] - movs r0, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805ADCC - adds r0, r4, #0 - adds r0, #0x35 - ldrb r0, [r0] - strb r0, [r2, #0xe] - adds r0, r4, #0 - adds r0, #0x36 - ldrb r1, [r0] - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - ldr r1, _0805ADD4 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r1, [r4, #0x3a] - adds r0, r0, r1 - strh r0, [r2, #0x32] - ldrh r1, [r4, #0x3c] - adds r0, r2, #0 - adds r0, #0x86 - strh r1, [r0] -_0805ADCC: - bl DeleteThisEntity -_0805ADD0: - pop {r4, pc} - .align 2, 0 -_0805ADD4: .4byte gRoomControls diff --git a/include/manager.h b/include/manager.h index f3a81b46..f368f9f2 100644 --- a/include/manager.h +++ b/include/manager.h @@ -162,7 +162,7 @@ extern void Manager13_Main(Entity*); extern void Manager14_Main(Entity*); extern void Manager15_Main(); extern void Manager16_Main(Entity*); -extern void Manager17_Main(Entity*); +extern void Manager17_Main(); extern void Manager18_Main(); extern void Manager19_Main(Entity*); extern void Manager1A_Main(); diff --git a/linker.ld b/linker.ld index 7c36ca52..12d4cb54 100644 --- a/linker.ld +++ b/linker.ld @@ -523,7 +523,7 @@ SECTIONS { asm/manager14.o(.text); src/manager/manager15.o(.text); asm/manager16.o(.text); - asm/manager17.o(.text); + src/manager/manager17.o(.text); asm/manager18.o(.text); asm/manager19.o(.text); src/manager/manager1A.o(.text); diff --git a/src/manager/manager17.c b/src/manager/manager17.c new file mode 100644 index 00000000..1722da42 --- /dev/null +++ b/src/manager/manager17.c @@ -0,0 +1,47 @@ +#include "manager.h" +#include "flags.h" +#include "room.h" + +typedef struct { + Manager manager; + u8 field_0x20[0x15]; + u8 field_0x35; + u8 field_0x36; + u8 field_0x37; + s16 field_0x38; + s16 field_0x3a; + u16 field_0x3c; + u16 field_0x3e; +} Manager17; + +extern void (*const gUnk_08108654[])(Manager17*); + + +void sub_0805AD80(Manager17*); + + +void Manager17_Main(Manager17* manager) { + gUnk_08108654[manager->manager.action](manager); +} + +void sub_0805AD60(Manager17* manager) { + manager->manager.action = 1; + if (CheckFlags(manager->field_0x3c) != 0) { + DeleteThisEntity(); + } + sub_0805AD80(manager); +} + +void sub_0805AD80(Manager17* manager) { + if (CheckFlags(manager->field_0x3e) != 0) { + Entity* object = CreateObject(0, manager->manager.unk_0a, manager->manager.unk_0b); + if (object != NULL) { + object->actionDelay = manager->field_0x35; + object->collisionLayer = manager->field_0x36; + object->x.HALF.HI = manager->field_0x38 + gRoomControls.roomOriginX; + object->y.HALF.HI = manager->field_0x3a + gRoomControls.roomOriginY; + object->field_0x86.HWORD = manager->field_0x3c; + } + DeleteThisEntity(); + } +} From 5981c5b71da0dd7af5c67aabecd85787e89cb2df Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 20:55:43 +0200 Subject: [PATCH 18/64] Decompile manager24 --- asm/manager24.s | 876 ---------------------------------------- include/manager.h | 2 +- linker.ld | 2 +- src/manager/manager24.c | 331 +++++++++++++++ 4 files changed, 333 insertions(+), 878 deletions(-) delete mode 100644 asm/manager24.s create mode 100644 src/manager/manager24.c diff --git a/asm/manager24.s b/asm/manager24.s deleted file mode 100644 index 6bdad17d..00000000 --- a/asm/manager24.s +++ /dev/null @@ -1,876 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager24_Main -Manager24_Main: @ 0x0805BF18 - push {lr} - ldr r2, _0805BF2C @ =gUnk_08108CDC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805BF2C: .4byte gUnk_08108CDC - - thumb_func_start sub_0805BF30 -sub_0805BF30: @ 0x0805BF30 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r4, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4, #0x3c] - ldrh r0, [r4, #0x3c] - adds r1, r4, #0 - adds r1, #0x35 - ldrb r1, [r1] - bl sub_0805BFC4 - strb r0, [r4, #0xa] - ldrh r0, [r4, #0x3e] - bl CheckLocalFlag - cmp r0, #0 - beq _0805BF74 - adds r0, r4, #0 - bl sub_0805C02C - adds r0, r4, #0 - bl DeleteManager -_0805BF74: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805BF78 -sub_0805BF78: @ 0x0805BF78 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3c] - adds r1, r4, #0 - adds r1, #0x35 - ldrb r1, [r1] - bl sub_080002C8 - cmp r0, #0x2e - beq _0805BFA0 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x5a - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_0805C02C - ldrh r0, [r4, #0x3e] - bl SetLocalFlag -_0805BFA0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805BFA4 -sub_0805BFA4: @ 0x0805BFA4 - 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 _0805BFC0 - movs r0, #0x72 - bl SoundReq - adds r0, r4, #0 - bl DeleteManager -_0805BFC0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805BFC4 -sub_0805BFC4: @ 0x0805BFC4 - push {lr} - bl GetTileType - adds r1, r0, #0 - cmp r1, #0xec - beq _0805C018 - cmp r1, #0xec - bhi _0805BFEC - cmp r1, #0xbf - beq _0805C024 - cmp r1, #0xbf - bhi _0805BFE2 - cmp r1, #0xaf - beq _0805C014 - b _0805C028 -_0805BFE2: - cmp r1, #0xcc - beq _0805C01C - cmp r1, #0xdf - beq _0805C020 - b _0805C028 -_0805BFEC: - movs r0, #0x84 - lsls r0, r0, #1 - cmp r1, r0 - beq _0805C01C - cmp r1, r0 - bhi _0805C004 - cmp r1, #0xff - beq _0805C014 - subs r0, #3 - cmp r1, r0 - beq _0805C024 - b _0805C028 -_0805C004: - movs r0, #0x88 - lsls r0, r0, #1 - cmp r1, r0 - beq _0805C020 - adds r0, #5 - cmp r1, r0 - beq _0805C018 - b _0805C028 -_0805C014: - movs r0, #0 - b _0805C02A -_0805C018: - movs r0, #1 - b _0805C02A -_0805C01C: - movs r0, #2 - b _0805C02A -_0805C020: - movs r0, #3 - b _0805C02A -_0805C024: - movs r0, #4 - b _0805C02A -_0805C028: - movs r0, #0xff -_0805C02A: - pop {pc} - - thumb_func_start sub_0805C02C -sub_0805C02C: @ 0x0805C02C - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xa] - cmp r0, #0xff - beq _0805C04A - ldr r0, _0805C04C @ =gUnk_08108CE8 - ldrb r2, [r1, #0xa] - lsls r2, r2, #2 - adds r2, r2, r0 - ldrh r0, [r1, #0x3c] - adds r1, #0x35 - ldrb r1, [r1] - ldr r2, [r2] - bl _call_via_r2 -_0805C04A: - pop {pc} - .align 2, 0 -_0805C04C: .4byte gUnk_08108CE8 - - thumb_func_start sub_0805C050 -sub_0805C050: @ 0x0805C050 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - adds r1, r5, #0 - subs r1, #0x41 - movs r0, #0xb1 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - subs r1, #0x40 - movs r0, #0xb2 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - subs r1, #0x3f - movs r0, #0xb3 - adds r2, r4, #0 - bl SetTileType - subs r1, r5, #1 - movs r0, #0xb4 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #1 - movs r0, #0xb7 - adds r2, r4, #0 - bl SetTileType - cmp r4, #1 - bne _0805C11C - bl sub_08052670 - cmp r0, #0 - beq _0805C0D8 - movs r0, #0x4f - movs r1, #0xe - movs r2, #0 - bl CreateObject - adds r3, r0, #0 - cmp r3, #0 - beq _0805C0E0 - movs r1, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - adds r0, #8 - ldr r2, _0805C0D0 @ =gRoomControls - ldrh r1, [r2, #6] - adds r1, r1, r0 - strh r1, [r3, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r5 - lsrs r0, r0, #2 - ldr r1, _0805C0D4 @ =0x0000FFF8 - adds r0, r0, r1 - ldrh r2, [r2, #8] - adds r0, r0, r2 - strh r0, [r3, #0x32] - b _0805C0E0 - .align 2, 0 -_0805C0D0: .4byte gRoomControls -_0805C0D4: .4byte 0x0000FFF8 -_0805C0D8: - bl CheckIsDungeon - cmp r0, #0 - beq _0805C0EC -_0805C0E0: - movs r0, #0xb5 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType - b _0805C0F6 -_0805C0EC: - movs r0, #0xb6 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType -_0805C0F6: - adds r1, r5, #0 - subs r1, #0x41 - movs r0, #0xb8 - movs r2, #2 - bl SetTileType - adds r1, r5, #0 - subs r1, #0x40 - movs r0, #0xb9 - movs r2, #2 - bl SetTileType - adds r1, r5, #0 - subs r1, #0x3f - movs r0, #0xba - movs r2, #2 - bl SetTileType - b _0805C16E -_0805C11C: - movs r0, #0xb5 - adds r1, r5, #0 - movs r2, #2 - bl SetTileType - bl CheckIsDungeon - cmp r0, #0 - beq _0805C16E - bl sub_0805C608 - adds r1, r0, #0 - movs r0, #0x4f - movs r2, #6 - bl CreateObject - adds r3, r0, #0 - cmp r3, #0 - beq _0805C16E - movs r1, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - adds r0, #8 - ldr r2, _0805C170 @ =gRoomControls - ldrh r1, [r2, #6] - adds r1, r1, r0 - strh r1, [r3, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r5 - lsrs r0, r0, #2 - ldr r1, _0805C174 @ =0x0000FFF0 - adds r0, r0, r1 - ldrh r2, [r2, #8] - adds r0, r0, r2 - strh r0, [r3, #0x32] - adds r1, r3, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] -_0805C16E: - pop {r4, r5, pc} - .align 2, 0 -_0805C170: .4byte gRoomControls -_0805C174: .4byte 0x0000FFF0 - - thumb_func_start sub_0805C178 -sub_0805C178: @ 0x0805C178 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - adds r1, r5, #0 - subs r1, #0x40 - movs r0, #0xf1 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - subs r1, #0x3f - movs r0, #0xf5 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #1 - movs r0, #0xf6 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x40 - movs r0, #0xf4 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x41 - movs r0, #0xf7 - adds r2, r4, #0 - bl SetTileType - cmp r4, #1 - bne _0805C23E - bl sub_08052670 - cmp r0, #0 - beq _0805C1FC - movs r0, #0x4f - movs r1, #0xe - movs r2, #1 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805C204 - movs r1, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - ldr r1, _0805C1F8 @ =gRoomControls - adds r0, #0x18 - ldrh r3, [r1, #6] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r5 - lsrs r0, r0, #2 - adds r0, #8 - ldrh r1, [r1, #8] - adds r1, r1, r0 - strh r1, [r2, #0x32] - b _0805C204 - .align 2, 0 -_0805C1F8: .4byte gRoomControls -_0805C1FC: - bl CheckIsDungeon - cmp r0, #0 - beq _0805C210 -_0805C204: - movs r0, #0xf2 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType - b _0805C21A -_0805C210: - movs r0, #0xf3 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType -_0805C21A: - adds r1, r5, #0 - subs r1, #0x3f - movs r0, #0xf8 - movs r2, #2 - bl SetTileType - adds r1, r5, #1 - movs r0, #0xf9 - movs r2, #2 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x41 - movs r0, #0xfa - movs r2, #2 - bl SetTileType - b _0805C28E -_0805C23E: - movs r0, #0xf2 - adds r1, r5, #0 - movs r2, #2 - bl SetTileType - bl CheckIsDungeon - cmp r0, #0 - beq _0805C28E - bl sub_0805C608 - adds r1, r0, #0 - movs r0, #0x4f - movs r2, #7 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805C28E - movs r1, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - ldr r1, _0805C290 @ =gRoomControls - adds r0, #0x20 - ldrh r3, [r1, #6] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r5 - lsrs r0, r0, #2 - adds r0, #8 - ldrh r1, [r1, #8] - adds r1, r1, r0 - strh r1, [r2, #0x32] - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] -_0805C28E: - pop {r4, r5, pc} - .align 2, 0 -_0805C290: .4byte gRoomControls - - thumb_func_start sub_0805C294 -sub_0805C294: @ 0x0805C294 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - subs r1, r5, #1 - movs r0, #0xd1 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #1 - movs r0, #0xd4 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0xd5 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x40 - movs r0, #0xd6 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x41 - movs r0, #0xd7 - adds r2, r4, #0 - bl SetTileType - cmp r4, #1 - bne _0805C35C - bl sub_08052670 - cmp r0, #0 - beq _0805C318 - movs r0, #0x4f - movs r1, #0xe - movs r2, #2 - bl CreateObject - adds r3, r0, #0 - cmp r3, #0 - beq _0805C320 - movs r1, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - adds r0, #8 - ldr r2, _0805C314 @ =gRoomControls - ldrh r1, [r2, #6] - adds r1, r1, r0 - strh r1, [r3, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r5 - lsrs r0, r0, #2 - adds r0, #0x20 - ldrh r2, [r2, #8] - adds r0, r0, r2 - strh r0, [r3, #0x32] - b _0805C320 - .align 2, 0 -_0805C314: .4byte gRoomControls -_0805C318: - bl CheckIsDungeon - cmp r0, #0 - beq _0805C32C -_0805C320: - movs r0, #0xd2 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType - b _0805C336 -_0805C32C: - movs r0, #0xd3 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType -_0805C336: - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0xd8 - movs r2, #2 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x40 - movs r0, #0xd9 - movs r2, #2 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x41 - movs r0, #0xda - movs r2, #2 - bl SetTileType - b _0805C3AC -_0805C35C: - movs r0, #0xd2 - adds r1, r5, #0 - movs r2, #2 - bl SetTileType - bl CheckIsDungeon - cmp r0, #0 - beq _0805C3AC - bl sub_0805C608 - adds r1, r0, #0 - movs r0, #0x4f - movs r2, #8 - bl CreateObject - adds r3, r0, #0 - cmp r3, #0 - beq _0805C3AC - movs r1, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - adds r0, #8 - ldr r2, _0805C3B0 @ =gRoomControls - ldrh r1, [r2, #6] - adds r1, r1, r0 - strh r1, [r3, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r5 - lsrs r0, r0, #2 - adds r0, #0x20 - ldrh r2, [r2, #8] - adds r0, r0, r2 - strh r0, [r3, #0x32] - adds r1, r3, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] -_0805C3AC: - pop {r4, r5, pc} - .align 2, 0 -_0805C3B0: .4byte gRoomControls - - thumb_func_start sub_0805C3B4 -sub_0805C3B4: @ 0x0805C3B4 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - adds r1, r5, #0 - subs r1, #0x41 - movs r0, #0xe1 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - subs r1, #0x40 - movs r0, #0xe4 - adds r2, r4, #0 - bl SetTileType - subs r1, r5, #1 - movs r0, #0xe2 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0xe3 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x40 - movs r0, #0xe7 - adds r2, r4, #0 - bl SetTileType - cmp r4, #1 - bne _0805C482 - bl sub_08052670 - cmp r0, #0 - beq _0805C440 - movs r0, #0x4f - movs r1, #0xe - movs r2, #3 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805C448 - movs r1, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - ldr r1, _0805C438 @ =gRoomControls - ldr r3, _0805C43C @ =0x0000FFF0 - adds r0, r0, r3 - ldrh r3, [r1, #6] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r5 - lsrs r0, r0, #2 - adds r0, #8 - ldrh r1, [r1, #8] - adds r1, r1, r0 - strh r1, [r2, #0x32] - b _0805C448 - .align 2, 0 -_0805C438: .4byte gRoomControls -_0805C43C: .4byte 0x0000FFF0 -_0805C440: - bl CheckIsDungeon - cmp r0, #0 - beq _0805C454 -_0805C448: - movs r0, #0xe5 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType - b _0805C45E -_0805C454: - movs r0, #0xe6 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType -_0805C45E: - adds r1, r5, #0 - subs r1, #0x41 - movs r0, #0xe8 - movs r2, #2 - bl SetTileType - subs r1, r5, #1 - movs r0, #0xe9 - movs r2, #2 - bl SetTileType - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0xea - movs r2, #2 - bl SetTileType - b _0805C4D4 -_0805C482: - movs r0, #0xe5 - adds r1, r5, #0 - movs r2, #2 - bl SetTileType - bl CheckIsDungeon - cmp r0, #0 - beq _0805C4D4 - bl sub_0805C608 - adds r1, r0, #0 - movs r0, #0x4f - movs r2, #9 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805C4D4 - movs r1, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - ldr r1, _0805C4D8 @ =gRoomControls - ldr r3, _0805C4DC @ =0x0000FFF0 - adds r0, r0, r3 - ldrh r3, [r1, #6] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r5 - lsrs r0, r0, #2 - adds r0, #8 - ldrh r1, [r1, #8] - adds r1, r1, r0 - strh r1, [r2, #0x32] - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] -_0805C4D4: - pop {r4, r5, pc} - .align 2, 0 -_0805C4D8: .4byte gRoomControls -_0805C4DC: .4byte 0x0000FFF0 - - thumb_func_start sub_0805C4E0 -sub_0805C4E0: @ 0x0805C4E0 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - adds r1, r5, #0 - subs r1, #0x41 - movs r0, #0xc1 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - subs r1, #0x40 - movs r0, #0xc2 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #0 - subs r1, #0x3f - movs r0, #0xc3 - adds r2, r4, #0 - bl SetTileType - subs r1, r5, #1 - movs r0, #0xc4 - adds r2, r4, #0 - bl SetTileType - adds r1, r5, #1 - movs r0, #0xc7 - adds r2, r4, #0 - bl SetTileType - cmp r4, #1 - bne _0805C5AC - bl sub_08052670 - cmp r0, #0 - beq _0805C568 - movs r0, #0x4f - movs r1, #0xe - movs r2, #0 - bl CreateObject - adds r3, r0, #0 - cmp r3, #0 - beq _0805C570 - movs r1, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - adds r0, #8 - ldr r2, _0805C560 @ =gRoomControls - ldrh r1, [r2, #6] - adds r1, r1, r0 - strh r1, [r3, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r5 - lsrs r0, r0, #2 - ldr r1, _0805C564 @ =0x0000FFF0 - adds r0, r0, r1 - ldrh r2, [r2, #8] - adds r0, r0, r2 - strh r0, [r3, #0x32] - b _0805C570 - .align 2, 0 -_0805C560: .4byte gRoomControls -_0805C564: .4byte 0x0000FFF0 -_0805C568: - bl CheckIsDungeon - cmp r0, #0 - beq _0805C57C -_0805C570: - movs r0, #0xc5 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType - b _0805C586 -_0805C57C: - movs r0, #0xc6 - adds r1, r5, #0 - movs r2, #1 - bl SetTileType -_0805C586: - adds r1, r5, #0 - subs r1, #0x41 - movs r0, #0xc8 - movs r2, #2 - bl SetTileType - adds r1, r5, #0 - subs r1, #0x40 - movs r0, #0xc9 - movs r2, #2 - bl SetTileType - adds r1, r5, #0 - subs r1, #0x3f - movs r0, #0xca - movs r2, #2 - bl SetTileType - b _0805C5FE -_0805C5AC: - movs r0, #0xc5 - adds r1, r5, #0 - movs r2, #2 - bl SetTileType - bl CheckIsDungeon - cmp r0, #0 - beq _0805C5FE - bl sub_0805C608 - adds r1, r0, #0 - movs r0, #0x4f - movs r2, #6 - bl CreateObject - adds r3, r0, #0 - cmp r3, #0 - beq _0805C5FE - movs r1, #0x3f - adds r0, r5, #0 - ands r0, r1 - lsls r0, r0, #4 - adds r0, #8 - ldr r2, _0805C600 @ =gRoomControls - ldrh r1, [r2, #6] - adds r1, r1, r0 - strh r1, [r3, #0x2e] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r5 - lsrs r0, r0, #2 - ldr r1, _0805C604 @ =0x0000FFF0 - adds r0, r0, r1 - ldrh r2, [r2, #8] - adds r0, r0, r2 - strh r0, [r3, #0x32] - adds r1, r3, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] -_0805C5FE: - pop {r4, r5, pc} - .align 2, 0 -_0805C600: .4byte gRoomControls -_0805C604: .4byte 0x0000FFF0 - - thumb_func_start sub_0805C608 -sub_0805C608: @ 0x0805C608 - ldr r1, _0805C614 @ =gUnk_08108CFC - ldr r0, _0805C618 @ =gArea - ldrb r0, [r0, #3] - adds r0, r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_0805C614: .4byte gUnk_08108CFC -_0805C618: .4byte gArea diff --git a/include/manager.h b/include/manager.h index f368f9f2..dda73ad9 100644 --- a/include/manager.h +++ b/include/manager.h @@ -175,7 +175,7 @@ extern void Manager20_Main(); extern void Manager21_Main(Entity*); extern void Manager22_Main(Entity*); extern void Manager23_Main(Entity*); -extern void Manager24_Main(Entity*); +extern void Manager24_Main(); extern void Manager25_Main(Entity*); extern void Manager26_Main(); extern void Manager27_Main(); diff --git a/linker.ld b/linker.ld index 12d4cb54..5ebe8a6b 100644 --- a/linker.ld +++ b/linker.ld @@ -536,7 +536,7 @@ SECTIONS { asm/manager21.o(.text); asm/manager22.o(.text); asm/manager23.o(.text); - asm/manager24.o(.text); + src/manager/manager24.o(.text); asm/manager25.o(.text); src/manager/manager26.o(.text); src/manager/manager27.o(.text); diff --git a/src/manager/manager24.c b/src/manager/manager24.c new file mode 100644 index 00000000..7387f322 --- /dev/null +++ b/src/manager/manager24.c @@ -0,0 +1,331 @@ +#include "entity.h" +#include "functions.h" +#include "flags.h" +#include "audio.h" +#include "game.h" +#include "object.h" +#include "area.h" + +typedef struct { + Manager manager; + u8 field_0x20; + u8 field_0x21; + u8 field_0x22; + u8 field_0x23; + u8 field_0x24; + u8 field_0x25; + u8 field_0x26; + u8 field_0x27; + u8 field_0x28; + u8 field_0x29; + u8 field_0x2a; + u8 field_0x2b; + u8 field_0x2c; + u8 field_0x2d; + u8 field_0x2e; + u8 field_0x2f; + u8 field_0x30; + u8 field_0x31; + u8 field_0x32; + u8 field_0x33; + u8 field_0x34; + u8 field_0x35; + u8 field_0x36; + u8 field_0x37; + s16 x; + u16 y; + u16 tile; + u16 field_0x3e; +} Manager24; + +extern void (*const gUnk_08108CDC[])(Manager24*); + +u32 sub_0805BFC4(u32, u32); +void sub_0805C02C(Manager24*); + +extern u32 sub_080002C8(u16, u8); + +extern void (*const gUnk_08108CE8[])(u32, u32); + +u32 sub_0805C608(void); +extern u32 sub_08052670(void); + +extern u8 gUnk_08108CFC[]; + +void Manager24_Main(Manager24* manager) { + gUnk_08108CDC[manager->manager.action](manager); +} + +void sub_0805BF30(Manager24* manager) { + manager->manager.action = 1; + manager->tile = (manager->x >> 4 & 0x3fU) | (((manager->y << 0x10) >> 0x14 & 0x3fU) << 6); + manager->manager.unk_0a = sub_0805BFC4(manager->tile, manager->field_0x35); + if (CheckLocalFlag(manager->field_0x3e) != 0) { + sub_0805C02C(manager); + DeleteManager((Manager*)manager); + } +} + +void sub_0805BF78(Manager24* this) { + if (sub_080002C8(this->tile, this->field_0x35) != 0x2e) { + this->manager.action = 2; + this->manager.unk_0e = 0x5a; + sub_0805C02C(this); + SetLocalFlag(this->field_0x3e); + } +} + +void sub_0805BFA4(Manager24* this) { + if (--this->manager.unk_0e == 0) { + SoundReq(SFX_SECRET); + DeleteManager((Manager*)this); + } +} + +u32 sub_0805BFC4(u32 pos, u32 layer) { + u32 tileType = GetTileType(pos, layer); + + switch (tileType) { + case 0xec: + return 1; + case 0xbf: + return 4; + case 0xaf: + return 0; + case 0xcc: + return 2; + case 0xdf: + return 3; + case 0xff: + return 0; + case 0x115: + return 1; + case 0x108: + return 2; + case 0x110: + return 3; + case 0x105: + return 4; + } + return 0xff; +} + +void sub_0805C02C(Manager24* this) { + if (this->manager.unk_0a != 0xff) { + gUnk_08108CE8[this->manager.unk_0a](this->tile, this->field_0x35); + } +} + +void sub_0805C050(u32 pos, u32 layer) { + SetTileType(0xb1, pos - 0x41, layer); + SetTileType(0xb2, pos - 0x40, layer); + SetTileType(0xb3, pos - 0x3f, layer); + SetTileType(0xb4, pos - 1, layer); + SetTileType(0xb7, pos + 1, layer); + if (layer == 1) { + if (sub_08052670() != 0) { + Entity* object = CreateObject(ARCHWAY, 0xe, 0); + if (object != NULL) { + object->x.HALF.HI = ((pos & 0x3f) << 4) + 8 + gRoomControls.roomOriginX; + object->y.HALF.HI = ((pos & 0xfc0) >> 2) - 8 + gRoomControls.roomOriginY; + } + SetTileType(0xb5, pos, 1); + } else { + if (CheckIsDungeon() != 0) { + SetTileType(0xb5, pos, 1); + } else { + SetTileType(0xb6, pos, 1); + } + } + + SetTileType(0xb8, pos - 0x41, 2); + SetTileType(0xb9, pos - 0x40, 2); + SetTileType(0xba, pos - 0x3f, 2); + } else { + Entity* object; + SetTileType(0xb5, pos, 2); + if (CheckIsDungeon() == 0) { + return; + } + object = CreateObject(ARCHWAY, sub_0805C608(), 6); + if (object == NULL) { + return; + } + object->x.HALF.HI = ((pos & 0x3f) << 4) + 8 + gRoomControls.roomOriginX; + object->y.HALF.HI = ((pos & 0xfc0) >> 2) - 0x10 + gRoomControls.roomOriginY; + object->collisionLayer = 2; + } +} + +void sub_0805C178(u32 pos, u32 layer) { + Entity* object; + + SetTileType(0xf1, pos - 0x40, layer); + SetTileType(0xf5, pos - 0x3f, layer); + SetTileType(0xf6, pos + 1, layer); + SetTileType(0xf4, pos + 0x40, layer); + SetTileType(0xf7, pos + 0x41, layer); + if (layer == 1) { + + if (sub_08052670() != 0) { + + object = CreateObject(ARCHWAY, 0xe, 1); + if (object != NULL) { + object->x.HALF.HI = ((pos & 0x3f) << 4) + 0x18 + gRoomControls.roomOriginX; + object->y.HALF.HI = ((pos & 0xfc0) >> 2) + 8 + gRoomControls.roomOriginY; + } + SetTileType(0xf2, pos, 1); + } else { + if (CheckIsDungeon() != 0) { + SetTileType(0xf2, pos, 1); + } else { + SetTileType(0xf3, pos, 1); + } + } + SetTileType(0xf8, pos - 0x3f, 2); + SetTileType(0xf9, pos + 1, 2); + SetTileType(0xfa, pos + 0x41, 2); + } else { + SetTileType(0xf2, pos, 2); + if (CheckIsDungeon() == 0) { + return; + } + object = CreateObject(ARCHWAY, sub_0805C608(), 7); + if (object == NULL) { + return; + } + object->x.HALF.HI = ((pos & 0x3f) << 4) + 0x20 + gRoomControls.roomOriginX; + object->y.HALF.HI = ((pos & 0xfc0) >> 2) + 8 + gRoomControls.roomOriginY; + object->collisionLayer = 2; + } +} + +void sub_0805C294(u32 pos, u32 layer) { + Entity* object; + + SetTileType(0xd1, pos - 1, layer); + SetTileType(0xd4, pos + 1, layer); + SetTileType(0xd5, pos + 0x3f, layer); + SetTileType(0xd6, pos + 0x40, layer); + SetTileType(0xd7, pos + 0x41, layer); + if (layer == 1) { + if (sub_08052670() != 0) { + object = CreateObject(0x4f, 0xe, 2); + if (object != NULL) { + object->x.HALF.HI = ((pos & 0x3f) << 4) + 8 + gRoomControls.roomOriginX; + object->y.HALF.HI = ((pos & 0xfc0) >> 2) + 0x20 + gRoomControls.roomOriginY; + } + SetTileType(0xd2, pos, 1); + } else { + if (CheckIsDungeon() != 0) { + SetTileType(0xd2, pos, 1); + } else { + SetTileType(0xd3, pos, 1); + } + } + SetTileType(0xd8, pos + 0x3f, 2); + SetTileType(0xd9, pos + 0x40, 2); + SetTileType(0xda, pos + 0x41, 2); + } else { + SetTileType(0xd2, pos, 2); + if (CheckIsDungeon() == 0) { + return; + } + object = CreateObject(0x4f, sub_0805C608(), 8); + if (object == NULL) { + return; + } + object->x.HALF.HI = ((pos & 0x3f) << 4) + 8 + gRoomControls.roomOriginX; + object->y.HALF.HI = ((pos & 0xfc0) >> 2) + 0x20 + gRoomControls.roomOriginY; + object->collisionLayer = 2; + } +} + +void sub_0805C3B4(u32 pos, u32 layer) { + Entity* object; + + SetTileType(0xe1, pos - 0x41, layer); + SetTileType(0xe4, pos - 0x40, layer); + SetTileType(0xe2, pos - 1, layer); + SetTileType(0xe3, pos + 0x3f, layer); + SetTileType(0xe7, pos + 0x40, layer); + if (layer == 1) { + if (sub_08052670() != 0) { + object = CreateObject(ARCHWAY, 0xe, 3); + if (object != NULL) { + object->x.HALF.HI = ((pos & 0x3f) << 4) + -0x10 + gRoomControls.roomOriginX; + object->y.HALF.HI = ((pos & 0xfc0) >> 2) + 8 + gRoomControls.roomOriginY; + } + SetTileType(0xe5, pos, 1); + } else { + if (CheckIsDungeon() != 0) { + SetTileType(0xe5, pos, 1); + } else { + SetTileType(0xe6, pos, 1); + } + } + SetTileType(0xe8, pos - 0x41, 2); + SetTileType(0xe9, pos - 1, 2); + SetTileType(0xea, pos + 0x3f, 2); + } else { + SetTileType(0xe5, pos, 2); + if (CheckIsDungeon() == 0) { + return; + } + + object = CreateObject(ARCHWAY, sub_0805C608(), 9); + if (object == NULL) { + return; + } + object->x.HALF.HI = ((pos & 0x3f) << 4) + -0x10 + gRoomControls.roomOriginX; + object->y.HALF.HI = ((pos & 0xfc0) >> 2) + 8 + gRoomControls.roomOriginY; + object->collisionLayer = 2; + } +} + +void sub_0805C4E0(u32 pos, u32 layer) { + Entity* object; + + SetTileType(0xc1, pos - 0x41, layer); + SetTileType(0xc2, pos - 0x40, layer); + SetTileType(0xc3, pos - 0x3f, layer); + SetTileType(0xc4, pos - 1, layer); + SetTileType(0xc7, pos + 1, layer); + if (layer == 1) { + if (sub_08052670() != 0) { + object = CreateObject(ARCHWAY, 0xe, 0); + if (object != NULL) { + object->x.HALF.HI = ((pos & 0x3f) << 4) + 8 + gRoomControls.roomOriginX; + object->y.HALF.HI = ((pos & 0xfc0) >> 2) + -0x10 + gRoomControls.roomOriginY; + } + SetTileType(0xc5, pos, 1); + } else { + if (CheckIsDungeon() != 0) { + SetTileType(0xc5, pos, 1); + } else { + SetTileType(0xc6, pos, 1); + } + } + SetTileType(0xc8, pos - 0x41, 2); + SetTileType(0xc9, pos - 0x40, 2); + SetTileType(0xca, pos - 0x3f, 2); + } else { + SetTileType(0xc5, pos, 2); + if (CheckIsDungeon() == 0) { + return; + } + + object = CreateObject(ARCHWAY, sub_0805C608(), 6); + if (object == NULL) { + return; + } + object->x.HALF.HI = ((pos & 0x3f) << 4) + 8 + gRoomControls.roomOriginX; + object->y.HALF.HI = ((pos & 0xfc0) >> 2) + -0x10 + gRoomControls.roomOriginY; + object->collisionLayer = 2; + } +} + +u32 sub_0805C608(void) +{ + return gUnk_08108CFC[gArea.regret]; +} From 0d8b5c786b881b745e5dc211841b3fb878e72746 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 21:14:34 +0200 Subject: [PATCH 19/64] Decompiler manager25 --- asm/manager25.s | 82 ----------------------------------------- include/manager.h | 2 +- linker.ld | 2 +- src/manager/manager24.c | 22 +---------- src/manager/manager25.c | 30 +++++++++++++++ 5 files changed, 33 insertions(+), 105 deletions(-) delete mode 100644 asm/manager25.s create mode 100644 src/manager/manager25.c diff --git a/asm/manager25.s b/asm/manager25.s deleted file mode 100644 index 071c5388..00000000 --- a/asm/manager25.s +++ /dev/null @@ -1,82 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager25_Main -Manager25_Main: @ 0x0805C61C - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805C674 - movs r0, #0x38 - ldrsh r1, [r4, r0] - ldr r2, _0805C668 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r5, #0x3a - ldrsh r0, [r4, r5] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4, #0x38] - movs r1, #0x38 - ldrsh r0, [r4, r1] - movs r1, #2 - bl GetTileType - cmp r0, #0x75 - bne _0805C670 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _0805C66C @ =0x0000406A - movs r2, #0x38 - ldrsh r1, [r4, r2] - movs r2, #1 - bl SetTile - b _0805C674 - .align 2, 0 -_0805C668: .4byte gRoomControls -_0805C66C: .4byte 0x0000406A -_0805C670: - bl DeleteThisEntity -_0805C674: - movs r5, #0x38 - ldrsh r0, [r4, r5] - movs r1, #1 - bl GetTileType - ldr r5, _0805C6B4 @ =0x0000406B - cmp r0, r5 - bne _0805C694 - movs r0, #0x38 - ldrsh r1, [r4, r0] - movs r0, #0x76 - movs r2, #2 - bl sub_0807B7D8 - bl DeleteThisEntity -_0805C694: - movs r1, #0x38 - ldrsh r0, [r4, r1] - movs r1, #2 - bl GetTileType - cmp r0, #0x76 - bne _0805C6B2 - movs r2, #0x38 - ldrsh r1, [r4, r2] - adds r0, r5, #0 - movs r2, #1 - bl SetTile - bl DeleteThisEntity -_0805C6B2: - pop {r4, r5, pc} - .align 2, 0 -_0805C6B4: .4byte 0x0000406B diff --git a/include/manager.h b/include/manager.h index dda73ad9..7c16c074 100644 --- a/include/manager.h +++ b/include/manager.h @@ -176,7 +176,7 @@ extern void Manager21_Main(Entity*); extern void Manager22_Main(Entity*); extern void Manager23_Main(Entity*); extern void Manager24_Main(); -extern void Manager25_Main(Entity*); +extern void Manager25_Main(); extern void Manager26_Main(); extern void Manager27_Main(); extern void Manager28_Main(); diff --git a/linker.ld b/linker.ld index 5ebe8a6b..a3fe3a56 100644 --- a/linker.ld +++ b/linker.ld @@ -537,7 +537,7 @@ SECTIONS { asm/manager22.o(.text); asm/manager23.o(.text); src/manager/manager24.o(.text); - asm/manager25.o(.text); + src/manager/manager25.o(.text); src/manager/manager26.o(.text); src/manager/manager27.o(.text); src/manager/manager28.o(.text); diff --git a/src/manager/manager24.c b/src/manager/manager24.c index 7387f322..b0d78f36 100644 --- a/src/manager/manager24.c +++ b/src/manager/manager24.c @@ -8,27 +8,7 @@ typedef struct { Manager manager; - u8 field_0x20; - u8 field_0x21; - u8 field_0x22; - u8 field_0x23; - u8 field_0x24; - u8 field_0x25; - u8 field_0x26; - u8 field_0x27; - u8 field_0x28; - u8 field_0x29; - u8 field_0x2a; - u8 field_0x2b; - u8 field_0x2c; - u8 field_0x2d; - u8 field_0x2e; - u8 field_0x2f; - u8 field_0x30; - u8 field_0x31; - u8 field_0x32; - u8 field_0x33; - u8 field_0x34; + u8 field_0x20[0x15]; u8 field_0x35; u8 field_0x36; u8 field_0x37; diff --git a/src/manager/manager25.c b/src/manager/manager25.c new file mode 100644 index 00000000..3e0e7c9f --- /dev/null +++ b/src/manager/manager25.c @@ -0,0 +1,30 @@ +#include "manager.h" +#include "room.h" +#include "functions.h" + +typedef struct { + struct Manager manager; + u8 field_0x20[0x18]; + s16 field_0x38; + s16 field_0x3a; +} Manager25; + +void Manager25_Main(Manager25* this) { + if (this->manager.action == 0) { + this->field_0x38 = TILE(this->field_0x38, this->field_0x3a); + if (GetTileType(this->field_0x38, 2) == 0x75) { + this->manager.action = 1; + SetTile(0x406a, this->field_0x38, 1); + } else { + DeleteThisEntity(); + } + } + if (GetTileType(this->field_0x38, 1) == 0x406b) { + sub_0807B7D8(0x76, this->field_0x38, 2); + DeleteThisEntity(); + } + if (GetTileType(this->field_0x38, 2) == 0x76) { + SetTile(0x406b, this->field_0x38, 1); + DeleteThisEntity(); + } +} From 08a5d972ed0bae1cb2fc0394cc7f44a94b452588 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 22:24:10 +0200 Subject: [PATCH 20/64] Decompile managerD --- asm/managerD.s | 87 ------------------------------------------ include/manager.h | 2 +- linker.ld | 2 +- src/manager/managerD.c | 74 +++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 89 deletions(-) delete mode 100644 asm/managerD.s create mode 100644 src/manager/managerD.c diff --git a/asm/managerD.s b/asm/managerD.s deleted file mode 100644 index eb9f36f9..00000000 --- a/asm/managerD.s +++ /dev/null @@ -1,87 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ManagerD_Main -ManagerD_Main: @ 0x08058DD0 - push {lr} - ldr r2, _08058DE4 @ =gUnk_08108308 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08058DE4: .4byte gUnk_08108308 - - thumb_func_start sub_08058DE8 -sub_08058DE8: @ 0x08058DE8 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08058DFC - bl DeleteThisEntity - b _08058E14 -_08058DFC: - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3a] - bl GetLayerByIndex - ldrh r1, [r4, #0x38] - lsls r1, r1, #1 - adds r1, #4 - adds r0, r0, r1 - str r0, [r4, #0x30] - ldrh r0, [r0] - strh r0, [r4, #0x28] -_08058E14: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08058E18 -sub_08058E18: @ 0x08058E18 - push {lr} - adds r2, r0, #0 - ldr r1, [r2, #0x30] - ldrh r0, [r2, #0x28] - ldrh r1, [r1] - cmp r0, r1 - beq _08058E30 - ldrb r0, [r2, #0xc] - adds r0, #1 - strb r0, [r2, #0xc] - movs r0, #0xf - strb r0, [r2, #0xe] -_08058E30: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08058E34 -sub_08058E34: @ 0x08058E34 - 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 _08058E5E - ldrh r0, [r4, #0x3e] - bl SetFlag - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _08058E58 - bl GetCurrentRoomProperty - bl LoadRoomEntityList -_08058E58: - adds r0, r4, #0 - bl DeleteManager -_08058E5E: - pop {r4, pc} diff --git a/include/manager.h b/include/manager.h index 7c16c074..4c60431c 100644 --- a/include/manager.h +++ b/include/manager.h @@ -152,7 +152,7 @@ extern void Manager9_Main(); extern void ManagerA_Main(); extern void ManagerB_Main(); extern void ManagerC_Main(); -extern void ManagerD_Main(Entity*); +extern void ManagerD_Main(); extern void ManagerE_Main(); extern void ManagerF_Main(Entity*); extern void Manager10_Main(Entity*); diff --git a/linker.ld b/linker.ld index a3fe3a56..281032f7 100644 --- a/linker.ld +++ b/linker.ld @@ -513,7 +513,7 @@ SECTIONS { src/manager/managerA.o(.text); src/manager/managerB.o(.text); src/manager/managerC.o(.text); - asm/managerD.o(.text); + src/manager/managerD.o(.text); src/manager/managerE.o(.text); asm/managerF.o(.text); asm/manager10.o(.text); diff --git a/src/manager/managerD.c b/src/manager/managerD.c new file mode 100644 index 00000000..dcd31bb5 --- /dev/null +++ b/src/manager/managerD.c @@ -0,0 +1,74 @@ +#include "manager.h" +#include "flags.h" +#include "room.h" +#include "functions.h" + +typedef struct { + Manager manager; + u8 field_0x20; + u8 field_0x21; + u8 field_0x22; + u8 field_0x23; + u8 field_0x24; + u8 field_0x25; + u8 field_0x26; + u8 field_0x27; + u16 field_0x28; + u8 field_0x2a; + u8 field_0x2b; + u8 field_0x2c; + u8 field_0x2d; + u8 field_0x2e; + u8 field_0x2f; + u16* field_0x30; + u8 field_0x34; + u8 field_0x35; + u8 field_0x36; + u8 field_0x37; + u16 field_0x38; + u16 field_0x3a; + u8 field_0x3c; + u8 field_0x3d; + u16 field_0x3e; +} ManagerD; + + +extern void (*const gUnk_08108308[])(ManagerD*); + +extern u16* GetLayerByIndex(u32); + +void ManagerD_Main(ManagerD* this) { + gUnk_08108308[this->manager.action](this); +} + +void sub_08058DE8(ManagerD* this) { + u16* puVar2; + u16* puVar3; + if (CheckFlags(this->field_0x3e) != 0) { + DeleteThisEntity(); + } else { + this->manager.action = 1; + puVar2 = GetLayerByIndex(this->field_0x3a); + puVar3 = (this->field_0x38 + 2) + puVar2; + this->field_0x30 = puVar3; + this->field_0x28 = *puVar3; + + } +} + +void sub_08058E18(ManagerD* this) { + if (this->field_0x28 != *this->field_0x30) { + this->manager.action += 1; + this->manager.unk_0e = 0xf; + } +} + +void sub_08058E34(ManagerD* this) { + if (--this->manager.unk_0e == 0) { + SetFlag(this->field_0x3e); + if (this->manager.unk_0a != 0) { + LoadRoomEntityList((EntityData*)GetCurrentRoomProperty(this->manager.unk_0a)); + } + DeleteManager((Manager*)this); + } +} From 612011c12b06d8679d4aacb44620963c71b763ba Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 22:46:19 +0200 Subject: [PATCH 21/64] Split manager files --- asm/manager1.s | 485 ---------- asm/manager10.s | 560 ----------- asm/manager12.s | 462 --------- asm/manager14.s | 519 ---------- asm/manager1B.s | 203 ---- asm/manager1D.s | 95 -- asm/manager1F.s | 99 -- asm/manager2.s | 194 ---- asm/manager22.s | 454 --------- asm/manager23.s | 348 ------- asm/manager2B.s | 189 ---- asm/manager2E.s | 183 ---- asm/manager32.s | 449 --------- asm/manager34.s | 143 --- asm/manager35.s | 166 ---- asm/manager37.s | 390 -------- asm/managerF.s | 905 ------------------ asm/non_matching/manager1/nullsub_494.inc | 4 + asm/non_matching/manager1/sub_08057174.inc | 147 +++ asm/non_matching/manager1/sub_0805728C.inc | 38 + asm/non_matching/manager1/sub_080572D4.inc | 45 + asm/non_matching/manager1/sub_0805732C.inc | 58 ++ asm/non_matching/manager1/sub_080573AC.inc | 77 ++ asm/non_matching/manager1/sub_08057450.inc | 102 ++ asm/non_matching/manager10/Manager10_Main.inc | 56 ++ asm/non_matching/manager10/sub_080595E4.inc | 16 + asm/non_matching/manager10/sub_08059608.inc | 65 ++ asm/non_matching/manager10/sub_08059690.inc | 41 + asm/non_matching/manager10/sub_080596E0.inc | 175 ++++ asm/non_matching/manager10/sub_08059844.inc | 21 + asm/non_matching/manager10/sub_0805986C.inc | 21 + asm/non_matching/manager10/sub_08059894.inc | 47 + asm/non_matching/manager10/sub_080598F8.inc | 54 ++ asm/non_matching/manager10/sub_08059960.inc | 28 + asm/non_matching/manager10/sub_08059994.inc | 18 + asm/non_matching/manager12/Manager12_Main.inc | 32 + .../manager12/TryLoadPrologueHyruleTown.inc | 65 ++ asm/non_matching/manager12/sub_08059A2C.inc | 23 + asm/non_matching/manager12/sub_08059A58.inc | 87 ++ asm/non_matching/manager12/sub_08059B18.inc | 172 ++++ asm/non_matching/manager12/sub_08059C8C.inc | 28 + asm/non_matching/manager12/sub_08059CC0.inc | 41 + .../manager13/Manager13_Main.inc} | 10 +- asm/non_matching/manager14/Manager14_Main.inc | 19 + asm/non_matching/manager14/nullsub_495.inc | 4 + asm/non_matching/manager14/sub_08059E80.inc | 55 ++ asm/non_matching/manager14/sub_08059EF8.inc | 81 ++ asm/non_matching/manager14/sub_08059F9C.inc | 61 ++ asm/non_matching/manager14/sub_0805A040.inc | 5 + asm/non_matching/manager14/sub_0805A048.inc | 40 + asm/non_matching/manager14/sub_0805A098.inc | 24 + asm/non_matching/manager14/sub_0805A0C0.inc | 41 + asm/non_matching/manager14/sub_0805A114.inc | 92 ++ asm/non_matching/manager14/sub_0805A1D8.inc | 61 ++ asm/non_matching/manager14/sub_0805A25C.inc | 17 + .../manager16/Manager16_Main.inc} | 83 +- asm/non_matching/manager16/sub_0805ACC0.inc | 72 ++ .../manager18/Manager18_Main.inc} | 77 +- asm/non_matching/manager18/sub_0805AEDC.inc | 47 + asm/non_matching/manager18/sub_0805AF3C.inc | 18 + .../manager19/Manager19_Main.inc} | 36 +- asm/non_matching/manager19/sub_0805AFFC.inc | 25 + asm/non_matching/manager1B/Manager1B_Main.inc | 72 ++ asm/non_matching/manager1B/sub_0805B448.inc | 23 + asm/non_matching/manager1B/sub_0805B474.inc | 31 + asm/non_matching/manager1B/sub_0805B4B4.inc | 14 + asm/non_matching/manager1B/sub_0805B4D0.inc | 51 + asm/non_matching/manager1D/Manager1D_Main.inc | 12 + asm/non_matching/manager1D/sub_0805B5E0.inc | 47 + asm/non_matching/manager1D/sub_0805B638.inc | 26 + asm/non_matching/manager1F/Manager1F_Main.inc | 12 + asm/non_matching/manager1F/sub_0805B70C.inc | 29 + asm/non_matching/manager1F/sub_0805B744.inc | 27 + asm/non_matching/manager1F/sub_0805B778.inc | 20 + asm/non_matching/manager2/sub_0805754C.inc | 66 ++ asm/non_matching/manager2/sub_080575C8.inc | 90 ++ asm/non_matching/manager2/sub_08057688.inc | 12 + asm/non_matching/manager2/sub_080576A0.inc | 15 + .../manager21/Manager21_Main.inc} | 31 +- asm/non_matching/manager21/sub_0805B8CC.inc | 20 + asm/non_matching/manager22/Manager22_Main.inc | 185 ++++ asm/non_matching/manager22/sub_0805BA78.inc | 55 ++ asm/non_matching/manager22/sub_0805BAD4.inc | 23 + asm/non_matching/manager22/sub_0805BB00.inc | 54 ++ asm/non_matching/manager22/sub_0805BB74.inc | 34 + asm/non_matching/manager22/sub_0805BBBC.inc | 34 + asm/non_matching/manager22/sub_0805BC04.inc | 34 + asm/non_matching/manager22/sub_0805BC4C.inc | 20 + asm/non_matching/manager23/Manager23_Main.inc | 12 + asm/non_matching/manager23/sub_0805BC8C.inc | 35 + asm/non_matching/manager23/sub_0805BCD4.inc | 68 ++ asm/non_matching/manager23/sub_0805BD5C.inc | 43 + asm/non_matching/manager23/sub_0805BDB4.inc | 90 ++ asm/non_matching/manager23/sub_0805BE70.inc | 19 + asm/non_matching/manager23/sub_0805BE94.inc | 23 + asm/non_matching/manager23/sub_0805BEC4.inc | 43 + asm/non_matching/manager29/Manager29_Main.inc | 29 + asm/non_matching/manager29/sub_0805CBD0.inc | 54 ++ .../manager29/sub_0805CC3C.inc} | 131 +-- asm/non_matching/manager29/sub_0805CF80.inc | 35 + asm/non_matching/manager2B/Manager2B_Main.inc | 12 + asm/non_matching/manager2B/sub_0805D02C.inc | 74 ++ asm/non_matching/manager2B/sub_0805D0C4.inc | 30 + asm/non_matching/manager2B/sub_0805D0FC.inc | 17 + asm/non_matching/manager2B/sub_0805D11C.inc | 44 + asm/non_matching/manager2E/sub_0805D280.inc | 31 + asm/non_matching/manager2E/sub_0805D2C0.inc | 27 + asm/non_matching/manager2E/sub_0805D2F4.inc | 29 + asm/non_matching/manager2E/sub_0805D32C.inc | 12 + asm/non_matching/manager2E/sub_0805D344.inc | 21 + asm/non_matching/manager2E/sub_0805D36C.inc | 14 + asm/non_matching/manager2E/sub_0805D384.inc | 35 + .../manager2F/Manager2F_Main.inc} | 39 +- asm/non_matching/manager2F/sub_0805D470.inc | 28 + .../manager31/Manager31_Main.inc} | 10 +- asm/non_matching/manager32/Manager32_Main.inc | 25 + asm/non_matching/manager32/sub_0805D7DC.inc | 77 ++ asm/non_matching/manager32/sub_0805D860.inc | 84 ++ asm/non_matching/manager32/sub_0805D900.inc | 75 ++ asm/non_matching/manager32/sub_0805D98C.inc | 43 + asm/non_matching/manager32/sub_0805D9D8.inc | 25 + asm/non_matching/manager32/sub_0805DA08.inc | 65 ++ asm/non_matching/manager32/sub_0805DA90.inc | 40 + .../manager33/Manager33_Main.inc} | 10 +- asm/non_matching/manager34/Manager34_Main.inc | 16 + asm/non_matching/manager34/nullsub_498.inc | 4 + asm/non_matching/manager34/sub_0805DBB4.inc | 14 + asm/non_matching/manager34/sub_0805DBCC.inc | 19 + asm/non_matching/manager34/sub_0805DBF0.inc | 68 ++ asm/non_matching/manager34/sub_0805DC70.inc | 9 + asm/non_matching/manager35/Manager35_Main.inc | 12 + asm/non_matching/manager35/sub_0805DC9C.inc | 21 + asm/non_matching/manager35/sub_0805DCC8.inc | 47 + asm/non_matching/manager35/sub_0805DD24.inc | 34 + asm/non_matching/manager35/sub_0805DD68.inc | 40 + asm/non_matching/manager37/Manager37_Main.inc | 12 + asm/non_matching/manager37/sub_0805DE50.inc | 12 + asm/non_matching/manager37/sub_0805DE68.inc | 100 ++ asm/non_matching/manager37/sub_0805DEB8.inc | 73 ++ asm/non_matching/manager37/sub_0805DF4C.inc | 40 + asm/non_matching/manager37/sub_0805DF98.inc | 28 + asm/non_matching/manager37/sub_0805DFCC.inc | 14 + asm/non_matching/manager37/sub_0805DFE8.inc | 12 + asm/non_matching/manager37/sub_0805E000.inc | 54 ++ asm/non_matching/manager37/sub_0805E078.inc | 16 + asm/non_matching/manager37/sub_0805E094.inc | 10 + asm/non_matching/managerF/ManagerF_Main.inc | 12 + asm/non_matching/managerF/SetDirtTile.inc | 19 + asm/non_matching/managerF/sub_08058EE4.inc | 45 + asm/non_matching/managerF/sub_08058F44.inc | 31 + asm/non_matching/managerF/sub_08058F84.inc | 23 + asm/non_matching/managerF/sub_08058FB0.inc | 91 ++ asm/non_matching/managerF/sub_08059064.inc | 26 + asm/non_matching/managerF/sub_08059094.inc | 37 + asm/non_matching/managerF/sub_080590E0.inc | 34 + asm/non_matching/managerF/sub_08059124.inc | 80 ++ asm/non_matching/managerF/sub_080591CC.inc | 44 + asm/non_matching/managerF/sub_08059220.inc | 46 + asm/non_matching/managerF/sub_08059278.inc | 13 + asm/non_matching/managerF/sub_08059290.inc | 11 + asm/non_matching/managerF/sub_080592A4.inc | 34 + asm/non_matching/managerF/sub_080592EC.inc | 17 + asm/non_matching/managerF/sub_0805930C.inc | 32 + asm/non_matching/managerF/sub_08059368.inc | 18 + asm/non_matching/managerF/sub_0805938C.inc | 33 + asm/non_matching/managerF/sub_080593CC.inc | 45 + asm/non_matching/managerF/sub_08059424.inc | 42 + asm/non_matching/managerF/sub_0805947C.inc | 45 + asm/non_matching/managerF/sub_080594DC.inc | 52 + asm/non_matching/managerF/sub_08059548.inc | 43 + include/manager.h | 42 +- linker.ld | 49 +- src/manager/manager1.c | 14 + src/manager/manager10.c | 23 + src/manager/manager12.c | 15 + src/manager/manager13.c | 3 + src/manager/manager14.c | 25 + src/manager/manager16.c | 6 + src/manager/manager18.c | 7 + src/manager/manager19.c | 5 + src/manager/manager1B.c | 12 + src/manager/manager1D.c | 7 + src/manager/manager1F.c | 9 + src/manager/manager2.c | 8 + src/manager/manager21.c | 6 + src/manager/manager22.c | 18 + src/manager/manager23.c | 18 + src/manager/manager29.c | 10 + src/manager/manager2B.c | 11 + src/manager/manager2E.c | 14 + src/manager/manager2F.c | 6 + src/manager/manager31.c | 4 + src/manager/manager32.c | 17 + src/manager/manager33.c | 3 + src/manager/manager34.c | 13 + src/manager/manager35.c | 11 + src/manager/manager37.c | 23 + src/manager/managerF.c | 49 + 198 files changed, 6306 insertions(+), 6309 deletions(-) delete mode 100644 asm/manager1.s delete mode 100644 asm/manager10.s delete mode 100644 asm/manager12.s delete mode 100644 asm/manager14.s delete mode 100644 asm/manager1B.s delete mode 100644 asm/manager1D.s delete mode 100644 asm/manager1F.s delete mode 100644 asm/manager2.s delete mode 100644 asm/manager22.s delete mode 100644 asm/manager23.s delete mode 100644 asm/manager2B.s delete mode 100644 asm/manager2E.s delete mode 100644 asm/manager32.s delete mode 100644 asm/manager34.s delete mode 100644 asm/manager35.s delete mode 100644 asm/manager37.s delete mode 100644 asm/managerF.s create mode 100644 asm/non_matching/manager1/nullsub_494.inc create mode 100644 asm/non_matching/manager1/sub_08057174.inc create mode 100644 asm/non_matching/manager1/sub_0805728C.inc create mode 100644 asm/non_matching/manager1/sub_080572D4.inc create mode 100644 asm/non_matching/manager1/sub_0805732C.inc create mode 100644 asm/non_matching/manager1/sub_080573AC.inc create mode 100644 asm/non_matching/manager1/sub_08057450.inc create mode 100644 asm/non_matching/manager10/Manager10_Main.inc create mode 100644 asm/non_matching/manager10/sub_080595E4.inc create mode 100644 asm/non_matching/manager10/sub_08059608.inc create mode 100644 asm/non_matching/manager10/sub_08059690.inc create mode 100644 asm/non_matching/manager10/sub_080596E0.inc create mode 100644 asm/non_matching/manager10/sub_08059844.inc create mode 100644 asm/non_matching/manager10/sub_0805986C.inc create mode 100644 asm/non_matching/manager10/sub_08059894.inc create mode 100644 asm/non_matching/manager10/sub_080598F8.inc create mode 100644 asm/non_matching/manager10/sub_08059960.inc create mode 100644 asm/non_matching/manager10/sub_08059994.inc create mode 100644 asm/non_matching/manager12/Manager12_Main.inc create mode 100644 asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc create mode 100644 asm/non_matching/manager12/sub_08059A2C.inc create mode 100644 asm/non_matching/manager12/sub_08059A58.inc create mode 100644 asm/non_matching/manager12/sub_08059B18.inc create mode 100644 asm/non_matching/manager12/sub_08059C8C.inc create mode 100644 asm/non_matching/manager12/sub_08059CC0.inc rename asm/{manager13.s => non_matching/manager13/Manager13_Main.inc} (91%) create mode 100644 asm/non_matching/manager14/Manager14_Main.inc create mode 100644 asm/non_matching/manager14/nullsub_495.inc create mode 100644 asm/non_matching/manager14/sub_08059E80.inc create mode 100644 asm/non_matching/manager14/sub_08059EF8.inc create mode 100644 asm/non_matching/manager14/sub_08059F9C.inc create mode 100644 asm/non_matching/manager14/sub_0805A040.inc create mode 100644 asm/non_matching/manager14/sub_0805A048.inc create mode 100644 asm/non_matching/manager14/sub_0805A098.inc create mode 100644 asm/non_matching/manager14/sub_0805A0C0.inc create mode 100644 asm/non_matching/manager14/sub_0805A114.inc create mode 100644 asm/non_matching/manager14/sub_0805A1D8.inc create mode 100644 asm/non_matching/manager14/sub_0805A25C.inc rename asm/{manager16.s => non_matching/manager16/Manager16_Main.inc} (68%) create mode 100644 asm/non_matching/manager16/sub_0805ACC0.inc rename asm/{manager18.s => non_matching/manager18/Manager18_Main.inc} (62%) create mode 100644 asm/non_matching/manager18/sub_0805AEDC.inc create mode 100644 asm/non_matching/manager18/sub_0805AF3C.inc rename asm/{manager19.s => non_matching/manager19/Manager19_Main.inc} (67%) create mode 100644 asm/non_matching/manager19/sub_0805AFFC.inc create mode 100644 asm/non_matching/manager1B/Manager1B_Main.inc create mode 100644 asm/non_matching/manager1B/sub_0805B448.inc create mode 100644 asm/non_matching/manager1B/sub_0805B474.inc create mode 100644 asm/non_matching/manager1B/sub_0805B4B4.inc create mode 100644 asm/non_matching/manager1B/sub_0805B4D0.inc create mode 100644 asm/non_matching/manager1D/Manager1D_Main.inc create mode 100644 asm/non_matching/manager1D/sub_0805B5E0.inc create mode 100644 asm/non_matching/manager1D/sub_0805B638.inc create mode 100644 asm/non_matching/manager1F/Manager1F_Main.inc create mode 100644 asm/non_matching/manager1F/sub_0805B70C.inc create mode 100644 asm/non_matching/manager1F/sub_0805B744.inc create mode 100644 asm/non_matching/manager1F/sub_0805B778.inc create mode 100644 asm/non_matching/manager2/sub_0805754C.inc create mode 100644 asm/non_matching/manager2/sub_080575C8.inc create mode 100644 asm/non_matching/manager2/sub_08057688.inc create mode 100644 asm/non_matching/manager2/sub_080576A0.inc rename asm/{manager21.s => non_matching/manager21/Manager21_Main.inc} (76%) create mode 100644 asm/non_matching/manager21/sub_0805B8CC.inc create mode 100644 asm/non_matching/manager22/Manager22_Main.inc create mode 100644 asm/non_matching/manager22/sub_0805BA78.inc create mode 100644 asm/non_matching/manager22/sub_0805BAD4.inc create mode 100644 asm/non_matching/manager22/sub_0805BB00.inc create mode 100644 asm/non_matching/manager22/sub_0805BB74.inc create mode 100644 asm/non_matching/manager22/sub_0805BBBC.inc create mode 100644 asm/non_matching/manager22/sub_0805BC04.inc create mode 100644 asm/non_matching/manager22/sub_0805BC4C.inc create mode 100644 asm/non_matching/manager23/Manager23_Main.inc create mode 100644 asm/non_matching/manager23/sub_0805BC8C.inc create mode 100644 asm/non_matching/manager23/sub_0805BCD4.inc create mode 100644 asm/non_matching/manager23/sub_0805BD5C.inc create mode 100644 asm/non_matching/manager23/sub_0805BDB4.inc create mode 100644 asm/non_matching/manager23/sub_0805BE70.inc create mode 100644 asm/non_matching/manager23/sub_0805BE94.inc create mode 100644 asm/non_matching/manager23/sub_0805BEC4.inc create mode 100644 asm/non_matching/manager29/Manager29_Main.inc create mode 100644 asm/non_matching/manager29/sub_0805CBD0.inc rename asm/{manager29.s => non_matching/manager29/sub_0805CC3C.inc} (73%) create mode 100644 asm/non_matching/manager29/sub_0805CF80.inc create mode 100644 asm/non_matching/manager2B/Manager2B_Main.inc create mode 100644 asm/non_matching/manager2B/sub_0805D02C.inc create mode 100644 asm/non_matching/manager2B/sub_0805D0C4.inc create mode 100644 asm/non_matching/manager2B/sub_0805D0FC.inc create mode 100644 asm/non_matching/manager2B/sub_0805D11C.inc create mode 100644 asm/non_matching/manager2E/sub_0805D280.inc create mode 100644 asm/non_matching/manager2E/sub_0805D2C0.inc create mode 100644 asm/non_matching/manager2E/sub_0805D2F4.inc create mode 100644 asm/non_matching/manager2E/sub_0805D32C.inc create mode 100644 asm/non_matching/manager2E/sub_0805D344.inc create mode 100644 asm/non_matching/manager2E/sub_0805D36C.inc create mode 100644 asm/non_matching/manager2E/sub_0805D384.inc rename asm/{manager2F.s => non_matching/manager2F/Manager2F_Main.inc} (67%) create mode 100644 asm/non_matching/manager2F/sub_0805D470.inc rename asm/{manager31.s => non_matching/manager31/Manager31_Main.inc} (95%) create mode 100644 asm/non_matching/manager32/Manager32_Main.inc create mode 100644 asm/non_matching/manager32/sub_0805D7DC.inc create mode 100644 asm/non_matching/manager32/sub_0805D860.inc create mode 100644 asm/non_matching/manager32/sub_0805D900.inc create mode 100644 asm/non_matching/manager32/sub_0805D98C.inc create mode 100644 asm/non_matching/manager32/sub_0805D9D8.inc create mode 100644 asm/non_matching/manager32/sub_0805DA08.inc create mode 100644 asm/non_matching/manager32/sub_0805DA90.inc rename asm/{manager33.s => non_matching/manager33/Manager33_Main.inc} (91%) create mode 100644 asm/non_matching/manager34/Manager34_Main.inc create mode 100644 asm/non_matching/manager34/nullsub_498.inc create mode 100644 asm/non_matching/manager34/sub_0805DBB4.inc create mode 100644 asm/non_matching/manager34/sub_0805DBCC.inc create mode 100644 asm/non_matching/manager34/sub_0805DBF0.inc create mode 100644 asm/non_matching/manager34/sub_0805DC70.inc create mode 100644 asm/non_matching/manager35/Manager35_Main.inc create mode 100644 asm/non_matching/manager35/sub_0805DC9C.inc create mode 100644 asm/non_matching/manager35/sub_0805DCC8.inc create mode 100644 asm/non_matching/manager35/sub_0805DD24.inc create mode 100644 asm/non_matching/manager35/sub_0805DD68.inc create mode 100644 asm/non_matching/manager37/Manager37_Main.inc create mode 100644 asm/non_matching/manager37/sub_0805DE50.inc create mode 100644 asm/non_matching/manager37/sub_0805DE68.inc create mode 100644 asm/non_matching/manager37/sub_0805DEB8.inc create mode 100644 asm/non_matching/manager37/sub_0805DF4C.inc create mode 100644 asm/non_matching/manager37/sub_0805DF98.inc create mode 100644 asm/non_matching/manager37/sub_0805DFCC.inc create mode 100644 asm/non_matching/manager37/sub_0805DFE8.inc create mode 100644 asm/non_matching/manager37/sub_0805E000.inc create mode 100644 asm/non_matching/manager37/sub_0805E078.inc create mode 100644 asm/non_matching/manager37/sub_0805E094.inc create mode 100644 asm/non_matching/managerF/ManagerF_Main.inc create mode 100644 asm/non_matching/managerF/SetDirtTile.inc create mode 100644 asm/non_matching/managerF/sub_08058EE4.inc create mode 100644 asm/non_matching/managerF/sub_08058F44.inc create mode 100644 asm/non_matching/managerF/sub_08058F84.inc create mode 100644 asm/non_matching/managerF/sub_08058FB0.inc create mode 100644 asm/non_matching/managerF/sub_08059064.inc create mode 100644 asm/non_matching/managerF/sub_08059094.inc create mode 100644 asm/non_matching/managerF/sub_080590E0.inc create mode 100644 asm/non_matching/managerF/sub_08059124.inc create mode 100644 asm/non_matching/managerF/sub_080591CC.inc create mode 100644 asm/non_matching/managerF/sub_08059220.inc create mode 100644 asm/non_matching/managerF/sub_08059278.inc create mode 100644 asm/non_matching/managerF/sub_08059290.inc create mode 100644 asm/non_matching/managerF/sub_080592A4.inc create mode 100644 asm/non_matching/managerF/sub_080592EC.inc create mode 100644 asm/non_matching/managerF/sub_0805930C.inc create mode 100644 asm/non_matching/managerF/sub_08059368.inc create mode 100644 asm/non_matching/managerF/sub_0805938C.inc create mode 100644 asm/non_matching/managerF/sub_080593CC.inc create mode 100644 asm/non_matching/managerF/sub_08059424.inc create mode 100644 asm/non_matching/managerF/sub_0805947C.inc create mode 100644 asm/non_matching/managerF/sub_080594DC.inc create mode 100644 asm/non_matching/managerF/sub_08059548.inc create mode 100644 src/manager/manager10.c create mode 100644 src/manager/manager12.c create mode 100644 src/manager/manager13.c create mode 100644 src/manager/manager14.c create mode 100644 src/manager/manager16.c create mode 100644 src/manager/manager18.c create mode 100644 src/manager/manager19.c create mode 100644 src/manager/manager1B.c create mode 100644 src/manager/manager1D.c create mode 100644 src/manager/manager1F.c create mode 100644 src/manager/manager21.c create mode 100644 src/manager/manager22.c create mode 100644 src/manager/manager23.c create mode 100644 src/manager/manager29.c create mode 100644 src/manager/manager2B.c create mode 100644 src/manager/manager2F.c create mode 100644 src/manager/manager31.c create mode 100644 src/manager/manager32.c create mode 100644 src/manager/manager33.c create mode 100644 src/manager/manager34.c create mode 100644 src/manager/manager35.c create mode 100644 src/manager/manager37.c create mode 100644 src/manager/managerF.c diff --git a/asm/manager1.s b/asm/manager1.s deleted file mode 100644 index a6bc4f1f..00000000 --- a/asm/manager1.s +++ /dev/null @@ -1,485 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08057174 -sub_08057174: @ 0x08057174 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - bl GetCurrentRoomProperty - adds r3, r0, #0 - ldrb r0, [r3] - cmp r0, #0xff - bne _08057188 - b _0805728A -_08057188: - ldr r1, _080571E8 @ =gPlayerEntity - movs r2, #0x2e - ldrsh r0, [r1, r2] - cmp r0, #0 - bge _08057194 - adds r0, #0xf -_08057194: - asrs r6, r0, #4 - movs r7, #0x32 - ldrsh r0, [r1, r7] - cmp r0, #0 - bge _080571A0 - adds r0, #0xf -_080571A0: - asrs r5, r0, #4 - movs r0, #0x21 - adds r0, r0, r4 - mov ip, r0 -_080571A8: - ldrb r0, [r3] - mov r1, ip - ldrb r1, [r1] - cmp r0, r1 - beq _08057282 - ldr r1, _080571EC @ =gRoomControls - ldrh r0, [r1, #6] - lsrs r0, r0, #4 - ldrb r7, [r3, #1] - adds r2, r0, r7 - ldrh r0, [r1, #8] - lsrs r0, r0, #4 - ldrb r1, [r3, #2] - adds r0, r0, r1 - subs r0, r5, r0 - ldrb r7, [r3, #4] - cmp r0, r7 - bhs _08057282 - subs r0, r6, r2 - ldrb r1, [r3, #3] - cmp r0, r1 - bhs _08057282 - ldrb r0, [r3] - subs r0, #1 - cmp r0, #5 - bhi _08057268 - lsls r0, r0, #2 - ldr r1, _080571F0 @ =_080571F4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080571E8: .4byte gPlayerEntity -_080571EC: .4byte gRoomControls -_080571F0: .4byte _080571F4 -_080571F4: @ jump table - .4byte _0805720C @ case 0 - .4byte _08057220 @ case 1 - .4byte _08057258 @ case 2 - .4byte _08057246 @ case 3 - .4byte _08057216 @ case 4 - .4byte _08057236 @ case 5 -_0805720C: - mov r2, ip - ldrb r0, [r2] - cmp r0, #2 - bne _08057268 - b _08057260 -_08057216: - mov r7, ip - ldrb r0, [r7] - cmp r0, #6 - bne _08057268 - b _08057260 -_08057220: - mov r0, ip - ldrb r1, [r0] - cmp r1, #0 - bne _08057268 - movs r0, #2 - strb r0, [r4, #0xc] - strb r1, [r4, #0xe] - adds r0, r4, #0 - adds r0, #0x20 - strb r1, [r0] - b _08057268 -_08057236: - mov r2, ip - ldrb r1, [r2] - cmp r1, #0 - bne _08057268 - movs r0, #2 - strb r0, [r4, #0xc] - strb r1, [r4, #0xe] - b _08057268 -_08057246: - mov r7, ip - ldrb r1, [r7] - cmp r1, #0 - bne _08057268 - movs r0, #2 - strb r0, [r4, #0xc] - strb r1, [r4, #0xe] - str r1, [r4, #0x34] - b _08057268 -_08057258: - mov r1, ip - ldrb r0, [r1] - cmp r0, #4 - bne _08057268 -_08057260: - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #9 - strb r0, [r4, #0xe] -_08057268: - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _08057282 - movs r0, #8 - strb r0, [r4, #0xf] - ldrb r0, [r3] - mov r2, ip - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #1 - strb r0, [r1] - b _0805728A -_08057282: - adds r3, #5 - ldrb r0, [r3] - cmp r0, #0xff - bne _080571A8 -_0805728A: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0805728C -sub_0805728C: @ 0x0805728C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080572CA - movs r0, #8 - strb r0, [r4, #0xf] - ldr r2, _080572CC @ =gScreen - ldr r3, _080572D0 @ =gUnk_08107C1C - ldrb r0, [r4, #0xe] - adds r1, r0, #1 - strb r1, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x17 - adds r0, r0, r3 - ldrh r0, [r0] - adds r2, #0x68 - strh r0, [r2] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - cmp r1, #0xa - bne _080572CA - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #0 - strb r0, [r1] -_080572CA: - pop {r4, pc} - .align 2, 0 -_080572CC: .4byte gScreen -_080572D0: .4byte gUnk_08107C1C - - thumb_func_start sub_080572D4 -sub_080572D4: @ 0x080572D4 - push {r4, r5, lr} - adds r3, r0, #0 - ldrb r0, [r3, #0xf] - subs r0, #1 - strb r0, [r3, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08057320 - movs r0, #8 - strb r0, [r3, #0xf] - ldr r5, _08057324 @ =gScreen - ldr r2, _08057328 @ =gUnk_08107C1C - ldrb r0, [r3, #0xe] - adds r1, r0, #0 - adds r1, #0xff - strb r1, [r3, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x17 - adds r0, r0, r2 - ldrh r2, [r0] - adds r0, r5, #0 - adds r0, #0x68 - movs r4, #0 - strh r2, [r0] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - cmp r1, #0xff - bne _08057320 - movs r0, #1 - strb r0, [r3, #0xc] - adds r0, r3, #0 - adds r0, #0x22 - strb r4, [r0] - subs r0, #1 - strb r4, [r0] - adds r0, r5, #0 - adds r0, #0x6c - strb r4, [r0] -_08057320: - pop {r4, r5, pc} - .align 2, 0 -_08057324: .4byte gScreen -_08057328: .4byte gUnk_08107C1C - - thumb_func_start sub_0805732C -sub_0805732C: @ 0x0805732C - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r6, r0, #0 - adds r5, r1, #0 - ldr r2, _08057390 @ =gUnk_03003DE4 - ldrb r1, [r2] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r1, _08057394 @ =gUnk_02017AA0 - adds r4, r0, r1 - movs r3, #0 - mov ip, r2 - mov r8, r1 - ldr r0, _08057398 @ =gSineTable - mov sb, r0 - movs r2, #0xff - ldr r1, _0805739C @ =gScreen -_08057354: - adds r0, r5, r3 - ands r0, r2 - lsls r0, r0, #1 - add r0, sb - movs r7, #0 - ldrsh r0, [r0, r7] - muls r0, r6, r0 - lsrs r0, r0, #8 - ldrh r7, [r1, #0x2e] - adds r0, r0, r7 - strh r0, [r4] - adds r4, #2 - adds r3, #1 - cmp r3, #0x9f - bls _08057354 - mov r0, ip - ldrb r1, [r0] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - add r0, r8 - ldr r1, _080573A0 @ =0x0400001C - ldr r2, _080573A4 @ =0xA2600001 - bl sub_0805622C - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08057390: .4byte gUnk_03003DE4 -_08057394: .4byte gUnk_02017AA0 -_08057398: .4byte gSineTable -_0805739C: .4byte gScreen -_080573A0: .4byte 0x0400001C -_080573A4: .4byte 0xA2600001 - - thumb_func_start nullsub_494 -nullsub_494: @ 0x080573A8 - bx lr - .align 2, 0 - - thumb_func_start sub_080573AC -sub_080573AC: @ 0x080573AC - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r2, _08057434 @ =gRoomControls - ldr r0, [r2, #0x28] - ldr r1, _08057438 @ =0xFFFFE000 - adds r0, r0, r1 - str r0, [r2, #0x28] - ldr r0, [r2, #0x2c] - ldr r1, _0805743C @ =0xFFFFF000 - adds r0, r0, r1 - str r0, [r2, #0x2c] - ldr r5, _08057440 @ =gScreen - movs r1, #0xa - ldrsh r0, [r2, r1] - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #1 - ldrh r1, [r2, #0x2a] - adds r0, r0, r1 - strh r0, [r5, #0x2e] - movs r1, #0xc - ldrsh r0, [r2, r1] - ldrh r1, [r2, #8] - subs r0, r0, r1 - asrs r0, r0, #1 - ldrh r2, [r2, #0x2e] - adds r0, r0, r2 - strh r0, [r5, #0x30] - ldr r2, _08057444 @ =gSineTable - ldr r4, _08057448 @ =gScreenTransition - ldr r1, [r4] - ldrb r0, [r4] - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r2 - movs r2, #0 - ldrsh r0, [r0, r2] - asrs r0, r0, #5 - adds r0, #0x10 - bl sub_0805732C - adds r0, r6, #0 - adds r0, #0x22 - ldrb r0, [r0] - cmp r0, #0 - bne _08057430 - ldr r0, [r4] - movs r1, #0x1f - ands r0, r1 - cmp r0, #0 - bne _08057430 - adds r2, r6, #0 - adds r2, #0x24 - ldrb r0, [r2] - adds r0, #1 - movs r1, #7 - ands r0, r1 - strb r0, [r2] - ldr r1, _0805744C @ =gUnk_08107C30 - ldrb r0, [r2] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] - adds r0, r5, #0 - adds r0, #0x68 - strh r1, [r0] -_08057430: - pop {r4, r5, r6, pc} - .align 2, 0 -_08057434: .4byte gRoomControls -_08057438: .4byte 0xFFFFE000 -_0805743C: .4byte 0xFFFFF000 -_08057440: .4byte gScreen -_08057444: .4byte gSineTable -_08057448: .4byte gScreenTransition -_0805744C: .4byte gUnk_08107C30 - - thumb_func_start sub_08057450 -sub_08057450: @ 0x08057450 - push {r4, r5, r6, lr} - adds r3, r0, #0 - ldr r4, _08057504 @ =gScreen - movs r0, #0x10 - strh r0, [r4, #0x2e] - ldr r0, _08057508 @ =gRoomControls - movs r2, #0xc - ldrsh r1, [r0, r2] - ldrh r0, [r0, #8] - subs r1, r1, r0 - asrs r1, r1, #2 - movs r2, #0x3f - adds r0, r1, #0 - ands r0, r2 - strh r0, [r4, #0x30] - cmp r1, #0 - bge _08057474 - adds r1, #0x3f -_08057474: - asrs r0, r1, #6 - lsls r0, r0, #9 - ldr r1, _0805750C @ =gBG3Buffer - adds r1, r0, r1 - str r1, [r4, #0x34] - ldr r0, [r3, #0x34] - cmp r0, r1 - beq _0805748A - str r1, [r3, #0x34] - movs r0, #1 - strh r0, [r4, #0x32] -_0805748A: - adds r0, r3, #0 - adds r0, #0x22 - ldrb r0, [r0] - ldr r5, _08057510 @ =gScreenTransition - cmp r0, #0 - bne _080574BE - ldr r0, [r5] - movs r1, #0x1f - ands r0, r1 - cmp r0, #0 - bne _080574BE - adds r2, r3, #0 - adds r2, #0x24 - ldrb r0, [r2] - adds r0, #1 - movs r1, #7 - ands r0, r1 - strb r0, [r2] - ldr r1, _08057514 @ =gUnk_08107C30 - ldrb r0, [r2] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] - adds r0, r4, #0 - adds r0, #0x68 - strh r1, [r0] -_080574BE: - ldr r0, [r5] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _08057502 - adds r0, r3, #0 - adds r0, #0x23 - ldrb r1, [r0] - lsls r1, r1, #5 - ldr r2, _08057518 @ =gUnk_085B4180 - adds r1, r1, r2 - movs r5, #0 - adds r6, r0, #0 - adds r4, r1, #0 - adds r4, #0xe -_080574DC: - adds r0, r5, #0 - adds r0, #0x87 - ldrh r1, [r4] - bl sub_0801D79C - adds r0, r5, #0 - adds r0, #0x8c - ldrh r1, [r4, #0xa] - bl sub_0801D79C - adds r4, #2 - adds r5, #1 - cmp r5, #3 - bls _080574DC - ldrb r0, [r6] - adds r0, #1 - movs r1, #3 - ands r0, r1 - strb r0, [r6] -_08057502: - pop {r4, r5, r6, pc} - .align 2, 0 -_08057504: .4byte gScreen -_08057508: .4byte gRoomControls -_0805750C: .4byte gBG3Buffer -_08057510: .4byte gScreenTransition -_08057514: .4byte gUnk_08107C30 -_08057518: .4byte gUnk_085B4180 diff --git a/asm/manager10.s b/asm/manager10.s deleted file mode 100644 index 838b5bc0..00000000 --- a/asm/manager10.s +++ /dev/null @@ -1,560 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager10_Main -Manager10_Main: @ 0x08059570 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r5, [r4, #0xc] - cmp r5, #0 - bne _080595C8 - movs r6, #1 - strb r6, [r4, #0xc] - adds r0, #0x21 - strb r5, [r0] - adds r0, #2 - strb r5, [r0] - bl sub_0805986C - cmp r0, #0 - beq _080595A8 - adds r0, r4, #0 - adds r0, #0x20 - strb r6, [r0] - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #2 - strb r0, [r1] - ldr r0, _080595A4 @ =gUnk_0200B650 - str r5, [r0] - b _080595B8 - .align 2, 0 -_080595A4: .4byte gUnk_0200B650 -_080595A8: - adds r0, r4, #0 - adds r0, #0x20 - movs r1, #0x1f - strb r1, [r0] - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #5 - strb r0, [r1] -_080595B8: - ldr r0, _080595DC @ =gRoomVars - movs r1, #0xff - strb r1, [r0, #0x10] - ldr r1, _080595E0 @ =sub_080595E4 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 -_080595C8: - adds r0, r4, #0 - bl sub_08059608 - adds r0, r4, #0 - bl sub_08059690 - adds r0, r4, #0 - bl sub_080596E0 - pop {r4, r5, r6, pc} - .align 2, 0 -_080595DC: .4byte gRoomVars -_080595E0: .4byte sub_080595E4 - - thumb_func_start sub_080595E4 -sub_080595E4: @ 0x080595E4 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08059604 @ =gRoomVars - movs r0, #0xff - strb r0, [r1, #0x10] - adds r0, r4, #0 - bl sub_08059690 - adds r0, r4, #0 - bl sub_080596E0 - movs r0, #0 - bl sub_0805B4D0 - pop {r4, pc} - .align 2, 0 -_08059604: .4byte gRoomVars - - thumb_func_start sub_08059608 -sub_08059608: @ 0x08059608 - push {r4, lr} - adds r4, r0, #0 - adds r4, #0x23 - ldrb r0, [r4] - cmp r0, #0 - beq _08059638 - subs r0, #1 - strb r0, [r4] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08059682 - ldr r0, _08059634 @ =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] - bl SoundReq - b _08059682 - .align 2, 0 -_08059634: .4byte gArea -_08059638: - bl sub_0805986C - cmp r0, #0 - beq _08059668 - ldr r0, _0805965C @ =gArea - ldr r2, _08059660 @ =0x00000864 - adds r1, r0, r2 - ldr r0, [r1] - cmp r0, #0x1e - beq _08059682 - movs r0, #0x1e - str r0, [r1] - movs r0, #0x78 - strb r0, [r4] - ldr r0, _08059664 @ =0x800D0000 - bl SoundReq - b _08059682 - .align 2, 0 -_0805965C: .4byte gArea -_08059660: .4byte 0x00000864 -_08059664: .4byte 0x800D0000 -_08059668: - ldr r0, _08059684 @ =gArea - ldr r2, _08059688 @ =0x00000864 - adds r1, r0, r2 - ldr r0, [r1] - cmp r0, #0x37 - beq _08059682 - movs r0, #0x37 - str r0, [r1] - movs r0, #0x78 - strb r0, [r4] - ldr r0, _0805968C @ =0x800D0000 - bl SoundReq -_08059682: - pop {r4, pc} - .align 2, 0 -_08059684: .4byte gArea -_08059688: .4byte 0x00000864 -_0805968C: .4byte 0x800D0000 - - thumb_func_start sub_08059690 -sub_08059690: @ 0x08059690 - push {r4, lr} - adds r4, r0, #0 - bl sub_08059844 - cmp r0, #0 - beq _080596BC - adds r4, #0x20 - ldrb r0, [r4] - cmp r0, #0 - beq _080596D8 - ldr r0, _080596B8 @ =gUnk_085A7320 - movs r2, #0xd0 - lsls r2, r2, #1 - adds r1, r0, r2 - ldrb r2, [r4] - bl sub_08059894 - ldrb r0, [r4] - subs r0, #1 - b _080596D6 - .align 2, 0 -_080596B8: .4byte gUnk_085A7320 -_080596BC: - adds r4, #0x20 - ldrb r0, [r4] - cmp r0, #0x1f - bhi _080596D8 - ldr r0, _080596DC @ =gUnk_085A7320 - movs r2, #0xd0 - lsls r2, r2, #1 - adds r1, r0, r2 - ldrb r2, [r4] - bl sub_08059894 - ldrb r0, [r4] - adds r0, #1 -_080596D6: - strb r0, [r4] -_080596D8: - pop {r4, pc} - .align 2, 0 -_080596DC: .4byte gUnk_085A7320 - - thumb_func_start sub_080596E0 -sub_080596E0: @ 0x080596E0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r0, _08059730 @ =gScreenTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _080596FC - ldr r0, _08059734 @ =gScreen - ldrh r1, [r0, #0x16] - adds r1, #8 - movs r2, #0x1f - ands r1, r2 - strh r1, [r0, #0x16] -_080596FC: - bl sub_0805986C - cmp r0, #0 - beq _08059740 - adds r0, r4, #0 - adds r0, #0x21 - ldrb r1, [r0] - adds r5, r0, #0 - adds r2, r4, #0 - adds r2, #0x22 - cmp r1, #0 - bne _08059764 - ldrb r0, [r2] - cmp r0, #2 - beq _08059764 - movs r0, #1 - strb r0, [r5] - movs r0, #3 - strb r0, [r2] - ldr r0, _08059738 @ =gUnk_08108390 - ldrb r0, [r0, #3] - strb r0, [r4, #0xe] - ldr r0, _0805973C @ =gUnk_0200B650 - str r1, [r0] - b _08059764 - .align 2, 0 -_08059730: .4byte gScreenTransition -_08059734: .4byte gScreen -_08059738: .4byte gUnk_08108390 -_0805973C: .4byte gUnk_0200B650 -_08059740: - adds r0, r4, #0 - adds r0, #0x21 - ldrb r1, [r0] - adds r5, r0, #0 - adds r2, r4, #0 - adds r2, #0x22 - cmp r1, #0 - bne _08059764 - ldrb r0, [r2] - cmp r0, #5 - beq _08059764 - movs r0, #2 - strb r0, [r5] - ldr r1, _08059774 @ =gUnk_08108390 - ldrb r0, [r2] - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] -_08059764: - adds r6, r5, #0 - ldrb r0, [r6] - cmp r0, #1 - beq _08059778 - cmp r0, #2 - beq _080597A8 - b _080597D0 - .align 2, 0 -_08059774: .4byte gUnk_08108390 -_08059778: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r3, #0xff - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _080597D0 - ldr r1, _080597A4 @ =gUnk_08108390 - ldrb r0, [r2] - subs r0, #1 - strb r0, [r2] - ands r0, r3 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] - ldrb r0, [r2] - cmp r0, #2 - bne _080597D0 - strb r5, [r6] - b _080597D0 - .align 2, 0 -_080597A4: .4byte gUnk_08108390 -_080597A8: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r3, #0xff - lsls r0, r0, #0x18 - lsrs r6, r0, #0x18 - cmp r6, #0 - bne _080597D0 - ldr r1, _080597EC @ =gUnk_08108390 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - ands r0, r3 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] - ldrb r0, [r2] - cmp r0, #5 - bne _080597D0 - strb r6, [r5] -_080597D0: - ldr r3, _080597F0 @ =gRoomVars - ldrb r1, [r2] - ldrb r0, [r3, #0x10] - cmp r0, r1 - beq _08059838 - strb r1, [r3, #0x10] - ldrb r0, [r2] - cmp r0, #4 - beq _08059800 - cmp r0, #4 - ble _080597F4 - cmp r0, #5 - beq _08059824 - b _08059838 - .align 2, 0 -_080597EC: .4byte gUnk_08108390 -_080597F0: .4byte gRoomVars -_080597F4: - cmp r0, #0 - blt _08059838 - adds r0, #0x2b - bl LoadGfxGroup - b _08059838 -_08059800: - ldr r4, _0805981C @ =gBG3Buffer - movs r5, #0x80 - lsls r5, r5, #4 - adds r0, r4, #0 - adds r1, r5, #0 - bl MemClear - ldr r1, _08059820 @ =0x0600E800 - adds r0, r4, #0 - adds r2, r5, #0 - bl LoadResourceAsync - b _08059838 - .align 2, 0 -_0805981C: .4byte gBG3Buffer -_08059820: .4byte 0x0600E800 -_08059824: - ldr r0, _0805983C @ =gUnk_0200B650 - ldr r1, _08059840 @ =gBG1Settings - str r1, [r0] - subs r1, #0x14 - ldrh r2, [r1] - movs r3, #0x80 - lsls r3, r3, #2 - adds r0, r3, #0 - orrs r0, r2 - strh r0, [r1] -_08059838: - pop {r4, r5, r6, pc} - .align 2, 0 -_0805983C: .4byte gUnk_0200B650 -_08059840: .4byte gBG1Settings - - thumb_func_start sub_08059844 -sub_08059844: @ 0x08059844 - push {lr} - movs r3, #0 - ldr r0, _08059864 @ =gPlayerEntity - movs r2, #0x2e - ldrsh r1, [r0, r2] - ldr r2, _08059868 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - ldrh r0, [r2, #0x1e] - lsrs r0, r0, #1 - cmp r1, r0 - ble _0805985E - movs r3, #1 -_0805985E: - adds r0, r3, #0 - pop {pc} - .align 2, 0 -_08059864: .4byte gPlayerEntity -_08059868: .4byte gRoomControls - - thumb_func_start sub_0805986C -sub_0805986C: @ 0x0805986C - push {lr} - movs r2, #0 - ldr r0, _0805988C @ =gPlayerEntity - movs r3, #0x2e - ldrsh r1, [r0, r3] - ldr r0, _08059890 @ =gRoomControls - ldrh r0, [r0, #6] - subs r1, r1, r0 - movs r0, #0x80 - lsls r0, r0, #2 - cmp r1, r0 - ble _08059886 - movs r2, #1 -_08059886: - adds r0, r2, #0 - pop {pc} - .align 2, 0 -_0805988C: .4byte gPlayerEntity -_08059890: .4byte gRoomControls - - thumb_func_start sub_08059894 -sub_08059894: @ 0x08059894 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r5, r0, #0 - adds r4, r1, #0 - ldr r0, _080598E8 @ =gUnk_020176E0 - mov sb, r0 - movs r6, #0 - lsls r2, r2, #0x18 - mov r8, r2 -_080598AA: - adds r0, r5, #0 - adds r1, r4, #0 - mov r2, sb - mov r7, r8 - lsrs r3, r7, #0x18 - bl sub_08059960 - adds r5, #0x20 - adds r4, #0x20 - movs r0, #0x20 - add sb, r0 - adds r6, #1 - cmp r6, #0xc - bls _080598AA - ldr r0, _080598EC @ =gUnk_02017700 - movs r2, #0x90 - lsls r2, r2, #2 - adds r1, r0, r2 - movs r2, #0x20 - bl MemCopy - ldr r2, _080598F0 @ =gUsedPalettes - ldr r0, [r2] - ldr r1, _080598F4 @ =0x00207FFC - orrs r0, r1 - str r0, [r2] - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080598E8: .4byte gUnk_020176E0 -_080598EC: .4byte gUnk_02017700 -_080598F0: .4byte gUsedPalettes -_080598F4: .4byte 0x00207FFC - - thumb_func_start sub_080598F8 -sub_080598F8: @ 0x080598F8 - push {r4, r5, r6, r7, lr} - movs r4, #0x1f - adds r3, r0, #0 - ands r3, r4 - lsls r6, r3, #8 - adds r3, r6, #0 - muls r3, r2, r3 - lsrs r6, r3, #5 - adds r3, r1, #0 - ands r3, r4 - lsls r3, r3, #8 - movs r4, #0x20 - subs r4, r4, r2 - muls r3, r4, r3 - lsrs r3, r3, #5 - adds r3, r6, r3 - lsrs r6, r3, #8 - movs r5, #0xf8 - lsls r5, r5, #2 - adds r3, r0, #0 - ands r3, r5 - lsls r7, r3, #3 - adds r3, r7, #0 - muls r3, r2, r3 - lsrs r7, r3, #5 - adds r3, r1, #0 - ands r3, r5 - lsls r3, r3, #3 - muls r3, r4, r3 - lsrs r3, r3, #5 - adds r3, r7, r3 - lsrs r7, r3, #8 - movs r3, #0xf8 - lsls r3, r3, #7 - ands r0, r3 - lsrs r5, r0, #2 - adds r0, r5, #0 - muls r0, r2, r0 - lsrs r5, r0, #5 - ands r1, r3 - lsrs r0, r1, #2 - muls r0, r4, r0 - lsrs r0, r0, #5 - adds r0, r5, r0 - lsrs r5, r0, #8 - lsls r0, r7, #5 - orrs r6, r0 - lsls r0, r5, #0xa - orrs r6, r0 - adds r0, r6, #0 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08059960 -sub_08059960: @ 0x08059960 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - adds r5, r1, #0 - adds r4, r2, #0 - lsls r3, r3, #0x18 - lsrs r3, r3, #0x18 - mov r8, r3 - movs r7, #0 -_08059974: - ldrh r0, [r6] - adds r6, #2 - ldrh r1, [r5] - adds r5, #2 - mov r2, r8 - bl sub_080598F8 - strh r0, [r4] - adds r4, #2 - adds r7, #1 - cmp r7, #0xf - bls _08059974 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08059994 -sub_08059994: @ 0x08059994 - push {lr} - bl sub_0805986C - cmp r0, #0 - beq _080599AE - movs r0, #0x5b - bl LoadPaletteGroup - ldr r0, _080599B0 @ =gArea - ldr r1, _080599B4 @ =0x00000864 - adds r0, r0, r1 - movs r1, #0x1e - str r1, [r0] -_080599AE: - pop {pc} - .align 2, 0 -_080599B0: .4byte gArea -_080599B4: .4byte 0x00000864 diff --git a/asm/manager12.s b/asm/manager12.s deleted file mode 100644 index 14a9f8da..00000000 --- a/asm/manager12.s +++ /dev/null @@ -1,462 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager12_Main -Manager12_Main: @ 0x080599EC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08059A20 - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #0xff - strb r0, [r1] - subs r1, #1 - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - ldr r1, _08059A28 @ =sub_08059A2C - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 -_08059A20: - adds r0, r4, #0 - bl sub_08059A58 - pop {r4, pc} - .align 2, 0 -_08059A28: .4byte sub_08059A2C - - thumb_func_start sub_08059A2C -sub_08059A2C: @ 0x08059A2C - push {lr} - adds r2, r0, #0 - ldr r1, _08059A54 @ =gRoomVars - movs r0, #0xff - strb r0, [r1, #0x12] - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r1, #0x11] - strb r0, [r1, #0x10] - adds r1, r2, #0 - adds r1, #0x22 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - adds r0, r2, #0 - bl sub_08059A58 - pop {pc} - .align 2, 0 -_08059A54: .4byte gRoomVars - - thumb_func_start sub_08059A58 -sub_08059A58: @ 0x08059A58 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _08059AC4 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x15 - beq _08059AD4 - adds r4, r5, #0 - adds r4, #0x20 - ldr r3, _08059AC8 @ =gUnk_08108398 - adds r0, r5, #0 - movs r1, #0 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059A80 - ldrb r1, [r4] - movs r0, #0 - bl sub_08059CC0 -_08059A80: - adds r4, r5, #0 - adds r4, #0x21 - ldr r3, _08059ACC @ =gUnk_081083AE - adds r0, r5, #0 - movs r1, #1 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059AA6 - ldrb r1, [r4] - movs r0, #1 - bl sub_08059CC0 - ldrb r0, [r4] - cmp r0, #2 - bne _08059AA6 - bl sub_08059B18 -_08059AA6: - adds r4, r5, #0 - adds r4, #0x22 - ldr r3, _08059AD0 @ =gUnk_081083C4 - adds r0, r5, #0 - movs r1, #2 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059B0C - ldrb r1, [r4] - movs r0, #2 - bl sub_08059CC0 - b _08059B0C - .align 2, 0 -_08059AC4: .4byte gRoomControls -_08059AC8: .4byte gUnk_08108398 -_08059ACC: .4byte gUnk_081083AE -_08059AD0: .4byte gUnk_081083C4 -_08059AD4: - adds r4, r5, #0 - adds r4, #0x20 - ldr r3, _08059B10 @ =gUnk_081083DA - adds r0, r5, #0 - movs r1, #0 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059AF0 - ldrb r1, [r4] - movs r0, #0 - bl sub_08059CC0 -_08059AF0: - adds r4, r5, #0 - adds r4, #0x22 - ldr r3, _08059B14 @ =gUnk_081083F2 - adds r0, r5, #0 - movs r1, #2 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059B0C - ldrb r1, [r4] - movs r0, #2 - bl sub_08059CC0 -_08059B0C: - pop {r4, r5, pc} - .align 2, 0 -_08059B10: .4byte gUnk_081083DA -_08059B14: .4byte gUnk_081083F2 - - thumb_func_start sub_08059B18 -sub_08059B18: @ 0x08059B18 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - sub sp, #4 - movs r0, #0x18 - bl CheckGlobalFlag - cmp r0, #0 - beq _08059BEC - movs r6, #0 - movs r0, #0x3f - mov sb, r0 - movs r2, #0xc4 - lsls r2, r2, #1 - mov r8, r2 -_08059B38: - movs r5, #0 - lsls r1, r6, #4 - mov r2, r8 - lsrs r0, r2, #4 - mov r2, sb - ands r0, r2 - lsls r3, r0, #6 - movs r7, #0x28 - ldr r0, _08059BD8 @ =0x000004AB - adds r4, r1, r0 -_08059B4C: - lsrs r1, r7, #4 - mov r2, sb - ands r1, r2 - orrs r1, r3 - adds r0, r4, #0 - movs r2, #1 - str r3, [sp] - bl sub_0807B9B8 - adds r7, #0x10 - adds r4, #1 - adds r5, #1 - ldr r3, [sp] - cmp r5, #3 - bls _08059B4C - movs r0, #0x10 - add r8, r0 - adds r6, #1 - cmp r6, #3 - bls _08059B38 - movs r6, #0 - movs r3, #0x3f -_08059B78: - movs r5, #0 - lsls r1, r6, #4 - adds r6, #1 - mov r8, r6 - movs r2, #0xc4 - lsls r2, r2, #1 - adds r0, r1, r2 - lsrs r0, r0, #4 - ands r0, r3 - lsls r7, r0, #6 - movs r6, #0x28 - movs r0, #0x88 - lsls r0, r0, #3 - adds r4, r1, r0 -_08059B94: - lsrs r1, r6, #4 - ands r1, r3 - orrs r1, r7 - adds r0, r4, #0 - movs r2, #2 - str r3, [sp] - bl sub_0807B9B8 - adds r6, #0x10 - adds r4, #1 - adds r5, #1 - ldr r3, [sp] - cmp r5, #3 - bls _08059B94 - mov r6, r8 - cmp r6, #2 - bls _08059B78 - ldr r1, _08059BDC @ =0x000005C2 - movs r0, #0xd6 - movs r2, #2 - bl sub_0807B9B8 - ldr r1, _08059BE0 @ =0x000005C3 - movs r0, #0xd7 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059BE4 @ =gUnk_086E8460 - ldr r1, _08059BE8 @ =0x06001800 - movs r2, #0x80 - lsls r2, r2, #4 - bl LoadResourceAsync - b _08059C5E - .align 2, 0 -_08059BD8: .4byte 0x000004AB -_08059BDC: .4byte 0x000005C2 -_08059BE0: .4byte 0x000005C3 -_08059BE4: .4byte gUnk_086E8460 -_08059BE8: .4byte 0x06001800 -_08059BEC: - movs r0, #0x19 - bl CheckGlobalFlag - cmp r0, #0 - beq _08059C5E - movs r6, #0 - movs r3, #0x3f -_08059BFA: - movs r5, #0 - lsls r1, r6, #4 - adds r6, #1 - mov r8, r6 - movs r2, #0xc4 - lsls r2, r2, #1 - adds r0, r1, r2 - lsrs r0, r0, #4 - ands r0, r3 - lsls r7, r0, #6 - movs r6, #0x28 - ldr r0, _08059C68 @ =0x000004A6 - adds r4, r1, r0 -_08059C14: - lsrs r1, r6, #4 - ands r1, r3 - orrs r1, r7 - adds r0, r4, #0 - movs r2, #1 - str r3, [sp] - bl sub_0807B9B8 - adds r6, #0x10 - adds r4, #1 - adds r5, #1 - ldr r3, [sp] - cmp r5, #3 - bls _08059C14 - mov r6, r8 - cmp r6, #4 - bls _08059BFA - ldr r0, _08059C6C @ =0x00000444 - ldr r1, _08059C70 @ =0x00000602 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059C74 @ =0x00000445 - ldr r1, _08059C78 @ =0x00000605 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059C7C @ =0x00000454 - ldr r1, _08059C80 @ =0x00000642 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059C84 @ =0x00000455 - ldr r1, _08059C88 @ =0x00000645 - movs r2, #2 - bl sub_0807B9B8 -_08059C5E: - add sp, #4 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08059C68: .4byte 0x000004A6 -_08059C6C: .4byte 0x00000444 -_08059C70: .4byte 0x00000602 -_08059C74: .4byte 0x00000445 -_08059C78: .4byte 0x00000605 -_08059C7C: .4byte 0x00000454 -_08059C80: .4byte 0x00000642 -_08059C84: .4byte 0x00000455 -_08059C88: .4byte 0x00000645 - - thumb_func_start sub_08059C8C -sub_08059C8C: @ 0x08059C8C - push {r4, r5, lr} - adds r5, r1, #0 - adds r4, r2, #0 - adds r0, r3, #0 - bl sub_08056300 - adds r2, r0, #0 - strb r2, [r4] - lsls r0, r2, #0x18 - lsrs r3, r0, #0x18 - cmp r3, #0xff - beq _08059CBC - ldr r0, _08059CB8 @ =gRoomVars - adds r0, #0x10 - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, r3 - beq _08059CBC - strb r2, [r1] - movs r0, #1 - b _08059CBE - .align 2, 0 -_08059CB8: .4byte gRoomVars -_08059CBC: - movs r0, #0 -_08059CBE: - pop {r4, r5, pc} - - thumb_func_start sub_08059CC0 -sub_08059CC0: @ 0x08059CC0 - push {r4, r5, r6, lr} - adds r2, r1, #0 - ldr r1, _08059CDC @ =gRoomVars - adds r1, #0x10 - adds r0, r0, r1 - strb r2, [r0] - ldr r0, _08059CE0 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x15 - beq _08059CE8 - lsls r1, r2, #4 - ldr r0, _08059CE4 @ =gUnk_08108408 - b _08059CEC - .align 2, 0 -_08059CDC: .4byte gRoomVars -_08059CE0: .4byte gRoomControls -_08059CE4: .4byte gUnk_08108408 -_08059CE8: - lsls r1, r2, #4 - ldr r0, _08059D10 @ =gUnk_08108468 -_08059CEC: - adds r6, r1, r0 - ldr r0, [r6] - ldr r4, _08059D14 @ =gGlobalGfxAndPalettes - adds r0, r0, r4 - ldr r1, [r6, #4] - movs r5, #0x80 - lsls r5, r5, #5 - adds r2, r5, #0 - bl LoadResourceAsync - ldr r0, [r6, #8] - adds r0, r0, r4 - ldr r1, [r6, #0xc] - adds r2, r5, #0 - bl LoadResourceAsync - pop {r4, r5, r6, pc} - .align 2, 0 -_08059D10: .4byte gUnk_08108468 -_08059D14: .4byte gGlobalGfxAndPalettes - - thumb_func_start TryLoadPrologueHyruleTown -TryLoadPrologueHyruleTown: @ 0x08059D18 - push {r4, lr} - ldr r0, _08059D68 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x15 - beq _08059D78 - ldr r0, _08059D6C @ =gUnk_08108398 - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059D36 - movs r0, #0 - adds r1, r4, #0 - bl sub_08059CC0 -_08059D36: - ldr r0, _08059D70 @ =gUnk_081083AE - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059D52 - movs r0, #1 - adds r1, r4, #0 - bl sub_08059CC0 - cmp r4, #2 - bne _08059D52 - bl sub_08059B18 -_08059D52: - ldr r0, _08059D74 @ =gUnk_081083C4 - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059DA0 - movs r0, #2 - adds r1, r4, #0 - bl sub_08059CC0 - b _08059DA0 - .align 2, 0 -_08059D68: .4byte gRoomControls -_08059D6C: .4byte gUnk_08108398 -_08059D70: .4byte gUnk_081083AE -_08059D74: .4byte gUnk_081083C4 -_08059D78: - ldr r0, _08059DA4 @ =gUnk_081083DA - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059D8C - movs r0, #0 - adds r1, r4, #0 - bl sub_08059CC0 -_08059D8C: - ldr r0, _08059DA8 @ =gUnk_081083F2 - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059DA0 - movs r0, #2 - adds r1, r4, #0 - bl sub_08059CC0 -_08059DA0: - pop {r4, pc} - .align 2, 0 -_08059DA4: .4byte gUnk_081083DA -_08059DA8: .4byte gUnk_081083F2 diff --git a/asm/manager14.s b/asm/manager14.s deleted file mode 100644 index cc72ed3c..00000000 --- a/asm/manager14.s +++ /dev/null @@ -1,519 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager14_Main -Manager14_Main: @ 0x08059E58 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x20] - adds r0, #1 - strh r0, [r4, #0x20] - ldr r1, _08059E7C @ =gUnk_081085A4 - ldrb r0, [r4, #0xc] - 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_0805A1D8 - pop {r4, pc} - .align 2, 0 -_08059E7C: .4byte gUnk_081085A4 - - thumb_func_start sub_08059E80 -sub_08059E80: @ 0x08059E80 - push {r4, r5, lr} - adds r4, r0, #0 - bl EntityHasDuplicateID - cmp r0, #0 - beq _08059E90 - bl DeleteThisEntity -_08059E90: - adds r1, r4, #0 - adds r1, #0x22 - movs r2, #0 - movs r0, #1 - strb r0, [r1] - movs r0, #0 - strh r2, [r4, #0x20] - strb r0, [r4, #0xe] - movs r0, #4 - strb r0, [r4, #0xf] - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - ldr r3, _08059EE4 @ =gScreen - ldr r0, _08059EE8 @ =0x00001E04 - strh r0, [r3, #0x2c] - ldrh r0, [r3] - movs r5, #0x80 - lsls r5, r5, #4 - adds r1, r5, #0 - orrs r0, r1 - strh r0, [r3] - adds r1, r3, #0 - adds r1, #0x66 - ldr r0, _08059EEC @ =0x00003E48 - strh r0, [r1] - adds r1, #2 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - movs r0, #0x80 - strh r0, [r3, #0x2e] - strh r2, [r3, #0x30] - ldr r1, _08059EF0 @ =nullsub_495 - ldr r2, _08059EF4 @ =sub_0805A25C - adds r0, r4, #0 - bl sub_08052D74 - pop {r4, r5, pc} - .align 2, 0 -_08059EE4: .4byte gScreen -_08059EE8: .4byte 0x00001E04 -_08059EEC: .4byte 0x00003E48 -_08059EF0: .4byte nullsub_495 -_08059EF4: .4byte sub_0805A25C - - thumb_func_start sub_08059EF8 -sub_08059EF8: @ 0x08059EF8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - movs r6, #0xff - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _08059F90 - movs r0, #4 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_08059F9C - cmp r0, #0 - beq _08059F64 - ldr r2, _08059F50 @ =gUnk_08108588 - ldrb r0, [r4, #0xe] - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r1, [r0] - ldr r0, _08059F54 @ =0x00000808 - cmp r1, r0 - beq _08059F5C - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x24 - strb r5, [r0] - ldr r1, _08059F58 @ =gScreen - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - ands r0, r6 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - adds r1, #0x68 - strh r0, [r1] - b _08059F90 - .align 2, 0 -_08059F50: .4byte gUnk_08108588 -_08059F54: .4byte 0x00000808 -_08059F58: .4byte gScreen -_08059F5C: - adds r0, r4, #0 - adds r0, #0x22 - strb r5, [r0] - b _08059F90 -_08059F64: - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #1 - strb r0, [r1] - ldr r3, _08059F94 @ =gUnk_08108588 - ldrb r2, [r4, #0xe] - lsls r0, r2, #1 - adds r0, r0, r3 - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #5 - cmp r1, r0 - beq _08059F90 - ldr r0, _08059F98 @ =gScreen - subs r1, r2, #1 - strb r1, [r4, #0xe] - ands r1, r6 - lsls r1, r1, #1 - adds r1, r1, r3 - ldrh r1, [r1] - adds r0, #0x68 - strh r1, [r0] -_08059F90: - pop {r4, r5, r6, pc} - .align 2, 0 -_08059F94: .4byte gUnk_08108588 -_08059F98: .4byte gScreen - - thumb_func_start sub_08059F9C -sub_08059F9C: @ 0x08059F9C - push {r4, lr} - adds r4, r0, #0 - ldr r0, _08059FB4 @ =gRoomControls - ldrb r0, [r0, #5] - cmp r0, #0x17 - bhi _0805A03A - lsls r0, r0, #2 - ldr r1, _08059FB8 @ =_08059FBC - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08059FB4: .4byte gRoomControls -_08059FB8: .4byte _08059FBC -_08059FBC: @ jump table - .4byte _0805A036 @ case 0 - .4byte _0805A01C @ case 1 - .4byte _0805A03A @ case 2 - .4byte _0805A03A @ case 3 - .4byte _0805A03A @ case 4 - .4byte _0805A03A @ case 5 - .4byte _0805A03A @ case 6 - .4byte _0805A02A @ case 7 - .4byte _0805A036 @ case 8 - .4byte _0805A036 @ case 9 - .4byte _0805A03A @ case 10 - .4byte _0805A03A @ case 11 - .4byte _0805A03A @ case 12 - .4byte _0805A03A @ case 13 - .4byte _0805A03A @ case 14 - .4byte _0805A03A @ case 15 - .4byte _0805A03A @ case 16 - .4byte _0805A03A @ case 17 - .4byte _0805A03A @ case 18 - .4byte _0805A03A @ case 19 - .4byte _0805A03A @ case 20 - .4byte _0805A03A @ case 21 - .4byte _0805A03A @ case 22 - .4byte _0805A036 @ case 23 -_0805A01C: - movs r0, #0x16 - bl CheckLocalFlag - cmp r0, #0 - beq _0805A02A - movs r0, #0 - b _0805A03C -_0805A02A: - adds r0, r4, #0 - bl sub_0805A25C - bl DeleteThisEntity - b _0805A03C -_0805A036: - movs r0, #1 - b _0805A03C -_0805A03A: - movs r0, #0 -_0805A03C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805A040 -sub_0805A040: @ 0x0805A040 - push {lr} - bl sub_0805A098 - pop {pc} - - thumb_func_start sub_0805A048 -sub_0805A048: @ 0x0805A048 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805A086 - movs r0, #4 - strb r0, [r4, #0xf] - ldr r2, _0805A090 @ =gScreen - ldr r3, _0805A094 @ =gUnk_08108588 - ldrb r0, [r4, #0xe] - adds r1, r0, #1 - strb r1, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x17 - adds r0, r0, r3 - ldrh r0, [r0] - adds r2, #0x68 - strh r0, [r2] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - cmp r1, #9 - bne _0805A086 - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #0 - strb r0, [r1] -_0805A086: - adds r0, r4, #0 - bl sub_0805A098 - pop {r4, pc} - .align 2, 0 -_0805A090: .4byte gScreen -_0805A094: .4byte gUnk_08108588 - - thumb_func_start sub_0805A098 -sub_0805A098: @ 0x0805A098 - push {lr} - adds r1, r0, #0 - ldr r0, _0805A0B0 @ =gRoomControls - ldrb r0, [r0, #5] - cmp r0, #9 - bgt _0805A0B4 - cmp r0, #8 - bge _0805A0BC - cmp r0, #0 - beq _0805A0BC - b _0805A0B8 - .align 2, 0 -_0805A0B0: .4byte gRoomControls -_0805A0B4: - cmp r0, #0x17 - beq _0805A0BC -_0805A0B8: - movs r0, #3 - strb r0, [r1, #0xc] -_0805A0BC: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0805A0C0 -sub_0805A0C0: @ 0x0805A0C0 - push {r4, lr} - adds r3, r0, #0 - ldrb r0, [r3, #0xf] - subs r0, #1 - strb r0, [r3, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805A106 - movs r0, #4 - strb r0, [r3, #0xf] - ldr r4, _0805A108 @ =gScreen - ldr r2, _0805A10C @ =gUnk_08108588 - ldrb r0, [r3, #0xe] - adds r1, r0, #0 - adds r1, #0xff - strb r1, [r3, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x17 - adds r0, r0, r2 - ldrh r2, [r0] - adds r0, r4, #0 - adds r0, #0x68 - strh r2, [r0] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - cmp r1, #0xff - bne _0805A106 - ldrh r1, [r4] - ldr r0, _0805A110 @ =0x0000F7FF - ands r0, r1 - strh r0, [r4] - bl sub_08056250 - bl DeleteThisEntity -_0805A106: - pop {r4, pc} - .align 2, 0 -_0805A108: .4byte gScreen -_0805A10C: .4byte gUnk_08108588 -_0805A110: .4byte 0x0000F7FF - - thumb_func_start sub_0805A114 -sub_0805A114: @ 0x0805A114 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r7, r0, #0 - adds r6, r1, #0 - ldr r2, _0805A154 @ =gUnk_03003DE4 - ldrb r1, [r2] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r1, _0805A158 @ =gUnk_02017AA0 - adds r4, r0, r1 - movs r5, #0 - mov r8, r2 - mov sb, r1 - ldr r2, _0805A15C @ =gScreen - ldr r0, _0805A160 @ =gSineTable - mov ip, r0 -_0805A13A: - movs r1, #0x30 - ldrsh r0, [r2, r1] - adds r3, r5, r0 - asrs r1, r3, #3 - movs r0, #7 - ands r1, r0 - cmp r1, #7 - bhi _0805A190 - lsls r0, r1, #2 - ldr r1, _0805A164 @ =_0805A168 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0805A154: .4byte gUnk_03003DE4 -_0805A158: .4byte gUnk_02017AA0 -_0805A15C: .4byte gScreen -_0805A160: .4byte gSineTable -_0805A164: .4byte _0805A168 -_0805A168: @ jump table - .4byte _0805A190 @ case 0 - .4byte _0805A18C @ case 1 - .4byte _0805A190 @ case 2 - .4byte _0805A190 @ case 3 - .4byte _0805A188 @ case 4 - .4byte _0805A190 @ case 5 - .4byte _0805A190 @ case 6 - .4byte _0805A18C @ case 7 -_0805A188: - subs r3, #8 - b _0805A190 -_0805A18C: - movs r0, #0xf0 - b _0805A192 -_0805A190: - movs r0, #0xf8 -_0805A192: - ands r3, r0 - adds r0, r6, r3 - movs r1, #0xff - ands r0, r1 - lsls r0, r0, #1 - add r0, ip - movs r1, #0 - ldrsh r0, [r0, r1] - muls r0, r7, r0 - lsrs r0, r0, #8 - ldrh r1, [r2, #0x2e] - adds r0, r0, r1 - strh r0, [r4] - adds r4, #2 - adds r5, #1 - cmp r5, #0x9f - ble _0805A13A - mov r0, r8 - ldrb r1, [r0] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - add r0, sb - ldr r1, _0805A1D0 @ =0x0400001C - ldr r2, _0805A1D4 @ =0xA2600001 - bl sub_0805622C - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805A1D0: .4byte 0x0400001C -_0805A1D4: .4byte 0xA2600001 - - thumb_func_start sub_0805A1D8 -sub_0805A1D8: @ 0x0805A1D8 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _0805A244 @ =gRoomControls - ldr r0, [r1, #0x28] - ldr r2, _0805A248 @ =0xFFFFF000 - adds r0, r0, r2 - str r0, [r1, #0x28] - ldr r5, _0805A24C @ =gScreen - ldrh r0, [r1, #0x2a] - strh r0, [r5, #0x2e] - ldr r0, [r1, #0x2c] - adds r0, r0, r2 - str r0, [r1, #0x2c] - ldrh r0, [r1, #0x2e] - strh r0, [r5, #0x30] - ldrh r1, [r5] - movs r0, #0x80 - lsls r0, r0, #4 - ands r0, r1 - cmp r0, #0 - beq _0805A240 - ldrh r1, [r4, #0x20] - lsrs r1, r1, #1 - movs r0, #6 - bl sub_0805A114 - adds r0, r4, #0 - adds r0, #0x22 - ldrb r0, [r0] - cmp r0, #0 - bne _0805A240 - ldr r0, _0805A250 @ =gMain - ldrh r1, [r0, #0xc] - movs r0, #0x1f - ands r0, r1 - cmp r0, #0 - bne _0805A240 - adds r2, r4, #0 - adds r2, #0x24 - ldrb r0, [r2] - adds r0, #1 - movs r1, #3 - ands r0, r1 - strb r0, [r2] - ldr r1, _0805A254 @ =gUnk_0810859A - ldrb r0, [r2] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] - adds r0, r5, #0 - adds r0, #0x68 - strh r1, [r0] -_0805A240: - pop {r4, r5, pc} - .align 2, 0 -_0805A244: .4byte gRoomControls -_0805A248: .4byte 0xFFFFF000 -_0805A24C: .4byte gScreen -_0805A250: .4byte gMain -_0805A254: .4byte gUnk_0810859A - - thumb_func_start nullsub_495 -nullsub_495: @ 0x0805A258 - bx lr - .align 2, 0 - - thumb_func_start sub_0805A25C -sub_0805A25C: @ 0x0805A25C - push {lr} - ldr r1, _0805A278 @ =gScreen - adds r2, r1, #0 - adds r2, #0x66 - movs r0, #0 - strh r0, [r2] - ldrh r2, [r1] - ldr r0, _0805A27C @ =0x0000F7FF - ands r0, r2 - strh r0, [r1] - bl sub_08056250 - pop {pc} - .align 2, 0 -_0805A278: .4byte gScreen -_0805A27C: .4byte 0x0000F7FF diff --git a/asm/manager1B.s b/asm/manager1B.s deleted file mode 100644 index 72c32b93..00000000 --- a/asm/manager1B.s +++ /dev/null @@ -1,203 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager1B_Main -Manager1B_Main: @ 0x0805B3B4 - push {r4, r5, lr} - adds r4, r0, #0 - bl EntityHasDuplicateID - cmp r0, #0 - beq _0805B3C4 - bl DeleteThisEntity -_0805B3C4: - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - ldr r1, _0805B438 @ =gUnk_08108C28 - adds r5, r0, r1 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805B41E - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _0805B3F6 - ldr r1, _0805B43C @ =sub_0805B4B4 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 -_0805B3F6: - ldr r0, _0805B440 @ =gRoomControls - ldrh r1, [r0, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - subs r1, r0, r1 - cmp r1, #0 - bge _0805B406 - movs r1, #0 -_0805B406: - movs r0, #2 - ldrsb r0, [r5, r0] - adds r0, r1, r0 - str r0, [r4, #0x20] - ldr r1, _0805B444 @ =gUnk_08108C54 - ldrb r0, [r5, #1] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 -_0805B41E: - ldr r0, _0805B440 @ =gRoomControls - ldrh r0, [r0] - cmp r0, #0 - bne _0805B436 - ldr r0, _0805B444 @ =gUnk_08108C54 - ldrb r1, [r5, #1] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0805B436: - pop {r4, r5, pc} - .align 2, 0 -_0805B438: .4byte gUnk_08108C28 -_0805B43C: .4byte sub_0805B4B4 -_0805B440: .4byte gRoomControls -_0805B444: .4byte gUnk_08108C54 - - thumb_func_start sub_0805B448 -sub_0805B448: @ 0x0805B448 - push {r4, lr} - ldr r4, _0805B46C @ =gScreen - ldr r3, _0805B470 @ =gRoomControls - movs r2, #0xa - ldrsh r1, [r3, r2] - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #2 - strh r1, [r4, #0x2e] - movs r2, #0xc - ldrsh r1, [r3, r2] - ldrh r2, [r3, #8] - subs r1, r1, r2 - asrs r1, r1, #1 - ldr r0, [r0, #0x20] - adds r0, r0, r1 - strh r0, [r4, #0x30] - pop {r4, pc} - .align 2, 0 -_0805B46C: .4byte gScreen -_0805B470: .4byte gRoomControls - - thumb_func_start sub_0805B474 -sub_0805B474: @ 0x0805B474 - push {r4, r5, lr} - ldr r5, _0805B4A8 @ =gRoomControls - movs r0, #0xc - ldrsh r1, [r5, r0] - ldrh r4, [r5, #8] - subs r1, r1, r4 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #5 - ldrh r1, [r5, #0x20] - subs r1, #0xa0 - bl __divsi3 - ldr r2, _0805B4AC @ =gScreen - adds r4, r4, r0 - strh r4, [r2, #0x30] - ldrh r0, [r5, #0x1e] - ldr r1, _0805B4B0 @ =0xFFFFFF00 - adds r0, r0, r1 - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - ldrh r1, [r5, #0xa] - subs r1, r1, r0 - strh r1, [r2, #0x2e] - pop {r4, r5, pc} - .align 2, 0 -_0805B4A8: .4byte gRoomControls -_0805B4AC: .4byte gScreen -_0805B4B0: .4byte 0xFFFFFF00 - - thumb_func_start sub_0805B4B4 -sub_0805B4B4: @ 0x0805B4B4 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - bl sub_0805B4D0 - ldrb r0, [r4, #0xa] - cmp r0, #2 - bne _0805B4C8 - bl sub_0806D0F8 -_0805B4C8: - adds r0, r4, #0 - bl Manager1B_Main - pop {r4, pc} - - thumb_func_start sub_0805B4D0 -sub_0805B4D0: @ 0x0805B4D0 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _0805B528 @ =gUnk_08108C5C - adds r0, r5, r0 - ldrb r0, [r0] - bl LoadGfxGroup - ldr r4, _0805B52C @ =gScreen - ldr r0, _0805B530 @ =0x00001E07 - strh r0, [r4, #0x2c] - ldrh r1, [r4] - movs r2, #0x80 - lsls r2, r2, #4 - adds r0, r2, #0 - orrs r0, r1 - strh r0, [r4] - ldr r2, _0805B534 @ =gRoomControls - movs r1, #0xa - ldrsh r0, [r2, r1] - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #2 - strh r0, [r4, #0x2e] - movs r1, #0xc - ldrsh r0, [r2, r1] - ldrh r1, [r2, #8] - subs r0, r0, r1 - asrs r3, r0, #1 - ldrh r1, [r2, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - subs r2, r0, r1 - cmp r2, #0 - bge _0805B516 - movs r2, #0 -_0805B516: - ldr r0, _0805B538 @ =gUnk_08108C44 - lsls r1, r5, #1 - adds r1, r1, r0 - adds r0, r3, r2 - ldrh r1, [r1] - adds r0, r0, r1 - strh r0, [r4, #0x30] - pop {r4, r5, pc} - .align 2, 0 -_0805B528: .4byte gUnk_08108C5C -_0805B52C: .4byte gScreen -_0805B530: .4byte 0x00001E07 -_0805B534: .4byte gRoomControls -_0805B538: .4byte gUnk_08108C44 diff --git a/asm/manager1D.s b/asm/manager1D.s deleted file mode 100644 index 2314dcc3..00000000 --- a/asm/manager1D.s +++ /dev/null @@ -1,95 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager1D_Main -Manager1D_Main: @ 0x0805B5C8 - push {lr} - ldr r2, _0805B5DC @ =gUnk_08108C80 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805B5DC: .4byte gUnk_08108C80 - - thumb_func_start sub_0805B5E0 -sub_0805B5E0: @ 0x0805B5E0 - push {r4, r5, lr} - movs r4, #0 - movs r1, #1 - strb r1, [r0, #0xc] - ldr r3, _0805B618 @ =gScreen - ldrh r2, [r3] - movs r5, #0x80 - lsls r5, r5, #4 - adds r1, r5, #0 - orrs r1, r2 - strh r1, [r3] - ldr r2, _0805B61C @ =gUnk_08108C88 - ldrb r1, [r0, #0xa] - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r1, [r1] - strh r1, [r3, #0x2c] - ldr r1, _0805B620 @ =gRoomControls - str r4, [r1, #0x2c] - str r4, [r1, #0x28] - ldrb r0, [r0, #0xa] - cmp r0, #0 - beq _0805B612 - cmp r0, #1 - beq _0805B624 -_0805B612: - strh r4, [r3, #0x30] - strh r4, [r3, #0x2e] - b _0805B634 - .align 2, 0 -_0805B618: .4byte gScreen -_0805B61C: .4byte gUnk_08108C88 -_0805B620: .4byte gRoomControls -_0805B624: - ldrh r0, [r1, #0x2a] - ldrh r2, [r1, #0xa] - adds r0, r0, r2 - strh r0, [r3, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r3, #0x30] -_0805B634: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0805B638 -sub_0805B638: @ 0x0805B638 - push {lr} - ldrb r0, [r0, #0xa] - cmp r0, #1 - bne _0805B65E - ldr r1, _0805B660 @ =gRoomControls - ldr r0, [r1, #0x28] - movs r2, #0x80 - lsls r2, r2, #6 - adds r0, r0, r2 - str r0, [r1, #0x28] - ldr r2, _0805B664 @ =gScreen - ldrh r0, [r1, #0x2a] - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] -_0805B65E: - pop {pc} - .align 2, 0 -_0805B660: .4byte gRoomControls -_0805B664: .4byte gScreen diff --git a/asm/manager1F.s b/asm/manager1F.s deleted file mode 100644 index 6db92054..00000000 --- a/asm/manager1F.s +++ /dev/null @@ -1,99 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager1F_Main -Manager1F_Main: @ 0x0805B6F4 - push {lr} - ldr r2, _0805B708 @ =gUnk_08108C94 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805B708: .4byte gUnk_08108C94 - - thumb_func_start sub_0805B70C -sub_0805B70C: @ 0x0805B70C - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805B71E - movs r0, #1 - strb r0, [r4, #0xb] -_0805B71E: - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r4, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4, #0x38] - adds r0, r4, #0 - bl sub_0805B778 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805B744 -sub_0805B744: @ 0x0805B744 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - adds r1, r0, #0 - cmp r1, #0 - beq _0805B766 - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _0805B774 - movs r0, #1 - strb r0, [r4, #0xb] - adds r0, r4, #0 - bl sub_0805B778 - b _0805B774 -_0805B766: - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0805B774 - strb r1, [r4, #0xb] - adds r0, r4, #0 - bl sub_0805B778 -_0805B774: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805B778 -sub_0805B778: @ 0x0805B778 - push {lr} - ldr r2, _0805B79C @ =gUnk_08108C9C - ldrb r1, [r0, #0xa] - lsls r1, r1, #1 - ldrb r3, [r0, #0xb] - adds r1, r1, r3 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r3, [r1] - movs r2, #0x38 - ldrsh r1, [r0, r2] - adds r0, #0x36 - ldrb r2, [r0] - adds r0, r3, #0 - bl SetTileType - pop {pc} - .align 2, 0 -_0805B79C: .4byte gUnk_08108C9C diff --git a/asm/manager2.s b/asm/manager2.s deleted file mode 100644 index a1ffd36e..00000000 --- a/asm/manager2.s +++ /dev/null @@ -1,194 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0805754C -sub_0805754C: @ 0x0805754C - push {r4, r5, r6, lr} - adds r2, r0, #0 - ldr r3, _080575BC @ =gRoomControls - movs r0, #0xc - ldrsh r1, [r3, r0] - ldrh r0, [r3, #8] - subs r1, r1, r0 - asrs r0, r1, #3 - adds r1, r1, r0 - ldr r4, _080575C0 @ =gScreen - movs r6, #0x3f - adds r0, r1, #0 - ands r0, r6 - strh r0, [r4, #0x30] - adds r0, r1, #0 - cmp r1, #0 - bge _08057570 - adds r0, #0x3f -_08057570: - asrs r0, r0, #6 - lsls r0, r0, #9 - ldr r5, _080575C4 @ =gMapDataTopSpecial - adds r1, r0, r5 - str r1, [r4, #0x34] - ldr r0, [r2, #0x38] - cmp r0, r1 - beq _08057586 - str r1, [r2, #0x38] - movs r0, #1 - strh r0, [r4, #0x32] -_08057586: - movs r0, #0xc - ldrsh r1, [r3, r0] - ldrh r0, [r3, #8] - subs r1, r1, r0 - asrs r0, r1, #2 - adds r1, r1, r0 - adds r0, r1, #0 - ands r0, r6 - strh r0, [r4, #0x18] - adds r0, r1, #0 - cmp r0, #0 - bge _080575A0 - adds r0, #0x3f -_080575A0: - asrs r0, r0, #6 - lsls r0, r0, #9 - movs r3, #0x80 - lsls r3, r3, #6 - adds r1, r5, r3 - adds r1, r0, r1 - str r1, [r4, #0x1c] - ldr r0, [r2, #0x3c] - cmp r0, r1 - beq _080575BA - str r1, [r2, #0x3c] - movs r0, #1 - strh r0, [r4, #0x1a] -_080575BA: - pop {r4, r5, r6, pc} - .align 2, 0 -_080575BC: .4byte gRoomControls -_080575C0: .4byte gScreen -_080575C4: .4byte gMapDataTopSpecial - - thumb_func_start sub_080575C8 -sub_080575C8: @ 0x080575C8 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldr r0, _08057664 @ =gUnk_0200B650 - movs r5, #0 - str r5, [r0] - movs r0, #0x80 - lsls r0, r0, #0x13 - strh r5, [r0] - adds r0, r4, #0 - bl LoadGfxGroup - ldr r0, _08057668 @ =gRoomVars - strb r4, [r0, #0x10] - ldr r3, _0805766C @ =gRoomControls - movs r0, #0xc - ldrsh r1, [r3, r0] - ldrh r0, [r3, #8] - subs r1, r1, r0 - asrs r0, r1, #3 - adds r1, r1, r0 - ldr r2, _08057670 @ =gScreen - movs r7, #0x3f - adds r0, r1, #0 - ands r0, r7 - strh r0, [r2, #0x30] - strh r5, [r2, #0x2e] - adds r0, r1, #0 - cmp r1, #0 - bge _08057604 - adds r0, #0x3f -_08057604: - asrs r0, r0, #6 - lsls r0, r0, #9 - ldr r4, _08057674 @ =gMapDataTopSpecial - adds r0, r0, r4 - str r0, [r2, #0x34] - ldr r0, _08057678 @ =0x00001D49 - strh r0, [r2, #0x2c] - movs r6, #1 - strh r6, [r2, #0x32] - movs r0, #0xc - ldrsh r1, [r3, r0] - ldrh r0, [r3, #8] - subs r1, r1, r0 - asrs r0, r1, #2 - adds r1, r1, r0 - adds r0, r1, #0 - ands r0, r7 - strh r0, [r2, #0x18] - strh r5, [r2, #0x16] - adds r0, r1, #0 - cmp r0, #0 - bge _08057632 - adds r0, #0x3f -_08057632: - asrs r0, r0, #6 - lsls r0, r0, #9 - movs r3, #0x80 - lsls r3, r3, #6 - adds r1, r4, r3 - adds r0, r0, r1 - str r0, [r2, #0x1c] - ldr r0, _0805767C @ =0x00001E49 - strh r0, [r2, #0x14] - strh r6, [r2, #0x1a] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _08057680 @ =0x00003C48 - strh r0, [r1] - adds r1, #2 - ldr r0, _08057684 @ =0x00000609 - strh r0, [r1] - ldrh r0, [r2] - movs r3, #0xa0 - lsls r3, r3, #4 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08057664: .4byte gUnk_0200B650 -_08057668: .4byte gRoomVars -_0805766C: .4byte gRoomControls -_08057670: .4byte gScreen -_08057674: .4byte gMapDataTopSpecial -_08057678: .4byte 0x00001D49 -_0805767C: .4byte 0x00001E49 -_08057680: .4byte 0x00003C48 -_08057684: .4byte 0x00000609 - - thumb_func_start sub_08057688 -sub_08057688: @ 0x08057688 - ldr r0, _08057694 @ =gScreen - ldr r1, _08057698 @ =0x00001D48 - strh r1, [r0, #0x2c] - ldr r1, _0805769C @ =0x00001E48 - strh r1, [r0, #0x14] - bx lr - .align 2, 0 -_08057694: .4byte gScreen -_08057698: .4byte 0x00001D48 -_0805769C: .4byte 0x00001E48 - - thumb_func_start sub_080576A0 -sub_080576A0: @ 0x080576A0 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _080576BC @ =gRoomVars - ldrb r0, [r0, #0x10] - bl LoadGfxGroup - movs r0, #0 - str r0, [r4, #0x38] - str r0, [r4, #0x3c] - adds r0, r4, #0 - bl sub_0805754C - pop {r4, pc} - .align 2, 0 -_080576BC: .4byte gRoomVars diff --git a/asm/manager22.s b/asm/manager22.s deleted file mode 100644 index 38c1281c..00000000 --- a/asm/manager22.s +++ /dev/null @@ -1,454 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager22_Main -Manager22_Main: @ 0x0805B8EC - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r4, _0805B964 @ =gArea - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805B90A - bl sub_0801E104 - ldr r2, _0805B968 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805B96C @ =0x0000D7FF - ands r0, r1 - strh r0, [r2] - bl DeleteThisEntity -_0805B90A: - ldrb r2, [r5, #0xc] - cmp r2, #0 - bne _0805B934 - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r5, #0x10] - movs r0, #0x11 - strb r0, [r5, #0xe] - str r2, [r5, #0x20] - adds r0, r5, #0 - movs r1, #6 - bl sub_0805E3A0 - bl sub_0801E120 - ldrb r0, [r5, #0xe] - bl sub_0801E154 -_0805B934: - ldr r0, _0805B970 @ =gMain - ldrb r0, [r0, #4] - cmp r0, #2 - bne _0805B952 - ldr r2, _0805B968 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - bl sub_0805BA78 - bl sub_0805BAD4 -_0805B952: - ldrb r0, [r4, #0xc] - cmp r0, #2 - bne _0805B978 - ldr r2, _0805B968 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805B974 @ =0x0000DFFF - ands r0, r1 - strh r0, [r2] - b _0805BA6C - .align 2, 0 -_0805B964: .4byte gArea -_0805B968: .4byte gScreen -_0805B96C: .4byte 0x0000D7FF -_0805B970: .4byte gMain -_0805B974: .4byte 0x0000DFFF -_0805B978: - ldr r3, _0805B9A8 @ =gPlayerEntity - movs r4, #0x2e - ldrsh r0, [r3, r4] - ldr r2, _0805B9AC @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - movs r6, #0x32 - ldrsh r1, [r3, r6] - ldrh r2, [r2, #8] - subs r1, r1, r2 - movs r2, #0 - movs r3, #0 - bl CheckRectOnScreen - cmp r0, #0 - beq _0805B9B4 - ldr r2, _0805B9B0 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #6 - adds r0, r3, #0 - orrs r0, r1 - b _0805B9BC - .align 2, 0 -_0805B9A8: .4byte gPlayerEntity -_0805B9AC: .4byte gRoomControls -_0805B9B0: .4byte gScreen -_0805B9B4: - ldr r2, _0805B9E8 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805B9EC @ =0x0000DFFF - ands r0, r1 -_0805B9BC: - strh r0, [r2] - ldrb r4, [r5, #0xe] - ldr r0, _0805B9F0 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0805BA2C - ldr r0, _0805B9F4 @ =gArea - ldrb r0, [r0, #0xc] - cmp r0, #0 - beq _0805BA2C - cmp r4, #0x47 - bhi _0805B9F8 - adds r4, #4 - adds r0, r4, #0 - bl sub_0801E154 - movs r0, #0 - str r0, [r5, #0x20] - b _0805BA42 - .align 2, 0 -_0805B9E8: .4byte gScreen -_0805B9EC: .4byte 0x0000DFFF -_0805B9F0: .4byte gPlayerState -_0805B9F4: .4byte gArea -_0805B9F8: - ldr r0, _0805BA24 @ =gScreenTransition - ldr r0, [r0] - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _0805BA42 - ldrb r0, [r5, #0xf] - adds r0, #0x10 - strb r0, [r5, #0xf] - ldr r1, _0805BA28 @ =gSineTable - ldrb r0, [r5, #0xf] - lsls r0, r0, #1 - adds r0, r0, r1 - movs r6, #0 - ldrsh r0, [r0, r6] - asrs r0, r0, #7 - str r0, [r5, #0x20] - adds r0, r4, r0 - bl sub_0801E154 - b _0805BA42 - .align 2, 0 -_0805BA24: .4byte gScreenTransition -_0805BA28: .4byte gSineTable -_0805BA2C: - movs r0, #0 - str r0, [r5, #0x20] - cmp r4, #0x11 - bls _0805BA42 - subs r4, #4 - cmp r4, #0x10 - bhi _0805BA3C - movs r4, #0x11 -_0805BA3C: - adds r0, r4, #0 - bl sub_0801E154 -_0805BA42: - strb r4, [r5, #0xe] - ldr r3, _0805BA70 @ =gPlayerEntity - movs r1, #0x2e - ldrsh r0, [r3, r1] - ldr r2, _0805BA74 @ =gRoomControls - movs r6, #0xa - ldrsh r1, [r2, r6] - subs r0, r0, r1 - movs r6, #0x32 - ldrsh r1, [r3, r6] - movs r6, #0xc - ldrsh r2, [r2, r6] - subs r1, r1, r2 - movs r6, #0x36 - ldrsh r2, [r3, r6] - subs r2, #9 - adds r1, r1, r2 - ldr r2, [r5, #0x20] - adds r2, r4, r2 - bl sub_0801E160 -_0805BA6C: - pop {r4, r5, r6, pc} - .align 2, 0 -_0805BA70: .4byte gPlayerEntity -_0805BA74: .4byte gRoomControls - - thumb_func_start sub_0805BA78 -sub_0805BA78: @ 0x0805BA78 - push {r4, lr} - ldr r1, _0805BAA8 @ =gArea - movs r0, #0xa - ldrsh r3, [r1, r0] - ldr r0, _0805BAAC @ =gRoomVars - movs r4, #0xc - ldrsh r2, [r0, r4] - cmp r2, #0 - bge _0805BA8C - movs r2, #0 -_0805BA8C: - movs r0, #0x80 - lsls r0, r0, #1 - cmp r2, r0 - ble _0805BA96 - adds r2, r0, #0 -_0805BA96: - cmp r3, r2 - beq _0805BACE - subs r0, r2, r3 - cmp r0, #0 - blt _0805BAB0 - cmp r0, #4 - bls _0805BAB6 - b _0805BABA - .align 2, 0 -_0805BAA8: .4byte gArea -_0805BAAC: .4byte gRoomVars -_0805BAB0: - subs r0, r3, r2 - cmp r0, #4 - bhi _0805BABA -_0805BAB6: - adds r3, r2, #0 - b _0805BAC8 -_0805BABA: - cmp r2, r3 - bge _0805BAC2 - subs r3, #4 - b _0805BAC8 -_0805BAC2: - cmp r2, r3 - ble _0805BAC8 - adds r3, #4 -_0805BAC8: - strh r3, [r1, #0xa] - movs r0, #1 - b _0805BAD0 -_0805BACE: - movs r0, #0 -_0805BAD0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805BAD4 -sub_0805BAD4: @ 0x0805BAD4 - push {lr} - ldr r3, _0805BAF4 @ =gArea - ldrb r0, [r3, #0xc] - cmp r0, #0 - beq _0805BAF2 - ldr r1, _0805BAF8 @ =gScreen - ldr r2, _0805BAFC @ =gUnk_08108CA8 - ldrh r0, [r3, #0xa] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - adds r1, #0x68 - strh r0, [r1] -_0805BAF2: - pop {pc} - .align 2, 0 -_0805BAF4: .4byte gArea -_0805BAF8: .4byte gScreen -_0805BAFC: .4byte gUnk_08108CA8 - - thumb_func_start sub_0805BB00 -sub_0805BB00: @ 0x0805BB00 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - ldr r0, _0805BB50 @ =gArea - ldrb r0, [r0, #0xc] - cmp r0, #0 - bne _0805BB28 - bl GetEmptyManager - adds r1, r0, #0 - cmp r1, #0 - beq _0805BB28 - movs r0, #9 - strb r0, [r1, #8] - movs r0, #0x22 - strb r0, [r1, #9] - adds r0, r1, #0 - movs r1, #0 - bl AppendEntityToList -_0805BB28: - ldr r1, _0805BB54 @ =0x0600F000 - movs r2, #0x80 - lsls r2, r2, #4 - movs r0, #0xf - bl MemFill16 - ldr r0, _0805BB58 @ =gScreen - ldr r1, _0805BB5C @ =0x00001E0C - strh r1, [r0, #0x2c] - adds r0, #0x66 - ldr r1, _0805BB60 @ =0x00003E48 - strh r1, [r0] - ldr r0, _0805BB64 @ =gRoomVars - strh r4, [r0, #0xc] - cmp r5, #0 - beq _0805BB68 - ldr r1, _0805BB50 @ =gArea - movs r0, #1 - b _0805BB6C - .align 2, 0 -_0805BB50: .4byte gArea -_0805BB54: .4byte 0x0600F000 -_0805BB58: .4byte gScreen -_0805BB5C: .4byte 0x00001E0C -_0805BB60: .4byte 0x00003E48 -_0805BB64: .4byte gRoomVars -_0805BB68: - ldr r1, _0805BB70 @ =gArea - movs r0, #2 -_0805BB6C: - strb r0, [r1, #0xc] - pop {r4, r5, pc} - .align 2, 0 -_0805BB70: .4byte gArea - - thumb_func_start sub_0805BB74 -sub_0805BB74: @ 0x0805BB74 - push {lr} - adds r1, r0, #0 - ldr r2, _0805BBB0 @ =gRoomVars - cmp r1, #0 - bge _0805BB82 - movs r0, #0xc - ldrsh r1, [r2, r0] -_0805BB82: - ldr r0, _0805BBB4 @ =gArea - strh r1, [r0, #0xa] - strh r1, [r2, #0xc] - movs r0, #9 - movs r1, #0x22 - bl DeepFindEntityByID - cmp r0, #0 - beq _0805BBAE - bl Manager22_Main - ldr r0, _0805BBB8 @ =gScreen - ldrh r1, [r0] - movs r3, #0x80 - lsls r3, r3, #4 - adds r2, r3, #0 - orrs r1, r2 - strh r1, [r0] - bl sub_0805BA78 - bl sub_0805BAD4 -_0805BBAE: - pop {pc} - .align 2, 0 -_0805BBB0: .4byte gRoomVars -_0805BBB4: .4byte gArea -_0805BBB8: .4byte gScreen - - thumb_func_start sub_0805BBBC -sub_0805BBBC: @ 0x0805BBBC - push {r4, lr} - movs r4, #0 - ldr r2, _0805BBF8 @ =gArea - ldrb r0, [r2, #0xc] - cmp r0, #0 - beq _0805BBF2 - ldr r0, _0805BBFC @ =gRoomVars - movs r3, #0xc - ldrsh r1, [r0, r3] - movs r3, #0xa - ldrsh r0, [r2, r3] - cmp r1, r0 - bge _0805BBF2 - ldr r2, _0805BC00 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - bl sub_0805BA78 - adds r4, r0, #0 - cmp r4, #0 - beq _0805BBF2 - bl sub_0805BAD4 -_0805BBF2: - adds r0, r4, #0 - pop {r4, pc} - .align 2, 0 -_0805BBF8: .4byte gArea -_0805BBFC: .4byte gRoomVars -_0805BC00: .4byte gScreen - - thumb_func_start sub_0805BC04 -sub_0805BC04: @ 0x0805BC04 - push {r4, lr} - movs r4, #0 - ldr r2, _0805BC40 @ =gArea - ldrb r0, [r2, #0xc] - cmp r0, #0 - beq _0805BC3A - ldr r0, _0805BC44 @ =gRoomVars - movs r3, #0xc - ldrsh r1, [r0, r3] - movs r3, #0xa - ldrsh r0, [r2, r3] - cmp r1, r0 - ble _0805BC3A - ldr r2, _0805BC48 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - bl sub_0805BA78 - adds r4, r0, #0 - cmp r4, #0 - beq _0805BC3A - bl sub_0805BAD4 -_0805BC3A: - adds r0, r4, #0 - pop {r4, pc} - .align 2, 0 -_0805BC40: .4byte gArea -_0805BC44: .4byte gRoomVars -_0805BC48: .4byte gScreen - - thumb_func_start sub_0805BC4C -sub_0805BC4C: @ 0x0805BC4C - push {lr} - ldr r1, _0805BC68 @ =gArea - ldrb r0, [r1, #0xc] - cmp r0, #0 - beq _0805BC64 - movs r0, #0 - strb r0, [r1, #0xc] - ldr r2, _0805BC6C @ =gScreen - ldrh r1, [r2] - ldr r0, _0805BC70 @ =0x0000D7FF - ands r0, r1 - strh r0, [r2] -_0805BC64: - pop {pc} - .align 2, 0 -_0805BC68: .4byte gArea -_0805BC6C: .4byte gScreen -_0805BC70: .4byte 0x0000D7FF diff --git a/asm/manager23.s b/asm/manager23.s deleted file mode 100644 index cbe25cae..00000000 --- a/asm/manager23.s +++ /dev/null @@ -1,348 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager23_Main -Manager23_Main: @ 0x0805BC74 - push {lr} - ldr r2, _0805BC88 @ =gUnk_08108CCC - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805BC88: .4byte gUnk_08108CCC - - thumb_func_start sub_0805BC8C -sub_0805BC8C: @ 0x0805BC8C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805BCAE - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xf] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805BCAE - adds r0, r4, #0 - bl sub_0805BE94 -_0805BCAE: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805BCD0 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805BCD0 - adds r0, r4, #0 - bl sub_0805BEC4 - adds r0, r4, #0 - bl sub_0805BE94 -_0805BCD0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805BCD4 -sub_0805BCD4: @ 0x0805BCD4 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _0805BD0E - cmp r0, #1 - bgt _0805BCE8 - cmp r0, #0 - beq _0805BCEE - b _0805BD5A -_0805BCE8: - cmp r0, #2 - beq _0805BD38 - b _0805BD5A -_0805BCEE: - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xf] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805BD5A - adds r0, r4, #0 - movs r1, #0x75 - bl sub_0805BE70 - movs r0, #2 - strb r0, [r4, #0xc] - b _0805BD5A -_0805BD0E: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805BD5A - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805BD5A - movs r0, #0x1e - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_0805BEC4 - adds r0, r4, #0 - movs r1, #0x76 - bl sub_0805BE70 - b _0805BD5A -_0805BD38: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - bne _0805BD5A - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805BD5A - movs r0, #0x1e - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #0x75 - bl sub_0805BE70 -_0805BD5A: - pop {r4, pc} - - thumb_func_start sub_0805BD5C -sub_0805BD5C: @ 0x0805BD5C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805BD94 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805BD76 - adds r0, r4, #0 - bl sub_0805BE94 -_0805BD76: - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r4, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4, #0x20] - movs r0, #1 - strb r0, [r4, #0xc] - b _0805BDB0 -_0805BD94: - ldrh r0, [r4, #0x20] - ldrb r1, [r4, #0xb] - bl GetTileType - cmp r0, #0x76 - bne _0805BDB0 - ldrh r0, [r4, #0x3e] - bl SetFlag - ldrb r0, [r4, #0xe] - bl sub_0805308C - bl DeleteThisEntity -_0805BDB0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805BDB4 -sub_0805BDB4: @ 0x0805BDB4 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _0805BDF4 - cmp r0, #1 - beq _0805BE2C - ldrh r0, [r4, #0x22] - subs r0, #1 - strh r0, [r4, #0x22] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0805BE58 - movs r1, #0x38 - ldrsh r0, [r4, r1] - movs r2, #0x3a - ldrsh r1, [r4, r2] - ldrb r2, [r4, #0xb] - bl CreateDustAt - ldrh r0, [r4, #0x3e] - bl ClearFlag - ldrh r0, [r4, #0x20] - ldrb r1, [r4, #0xb] - bl sub_0807BA8C - ldrb r0, [r4, #0xe] - rsbs r0, r0, #0 - bl sub_0805308C - b _0805BE26 -_0805BDF4: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - bne _0805BE08 - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _0805BE0E -_0805BE08: - adds r0, r4, #0 - bl sub_0805BE94 -_0805BE0E: - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r4, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4, #0x20] -_0805BE26: - movs r0, #1 - strb r0, [r4, #0xc] - b _0805BE6C -_0805BE2C: - ldrh r0, [r4, #0x20] - ldrb r1, [r4, #0xb] - bl GetTileType - cmp r0, #0x76 - bne _0805BE6C - ldrh r0, [r4, #0x3e] - bl SetFlag - ldrb r0, [r4, #0xe] - bl sub_0805308C - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x36 - ldrb r1, [r0] - lsls r0, r1, #4 - subs r0, r0, r1 - lsls r0, r0, #2 - strh r0, [r4, #0x22] - b _0805BE6C -_0805BE58: - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _0805BE6C - adds r0, r4, #0 - bl sub_0805BEC4 - bl DeleteThisEntity -_0805BE6C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805BE70 -sub_0805BE70: @ 0x0805BE70 - push {r4, lr} - adds r4, r1, #0 - ldrh r1, [r0, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r3, #0x3f - ands r1, r3 - ldrh r2, [r0, #0x3a] - lsls r2, r2, #0x10 - asrs r2, r2, #0x14 - ands r2, r3 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r0, #0xb] - adds r0, r4, #0 - bl SetTileType - pop {r4, pc} - - thumb_func_start sub_0805BE94 -sub_0805BE94: @ 0x0805BE94 - push {r4, lr} - adds r4, r0, #0 - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r4, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - ldrb r2, [r4, #0xb] - movs r0, #0x76 - bl SetTileType - ldrb r0, [r4, #0xe] - bl sub_0805308C - bl DeleteThisEntity - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805BEC4 -sub_0805BEC4: @ 0x0805BEC4 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x2a - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805BF10 - ldrb r1, [r2, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2, #0x11] - ldr r1, _0805BF14 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r1, [r4, #0x3a] - adds r0, r0, r1 - strh r0, [r2, #0x32] - ldrb r1, [r4, #0xb] - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - 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] -_0805BF10: - pop {r4, pc} - .align 2, 0 -_0805BF14: .4byte gRoomControls diff --git a/asm/manager2B.s b/asm/manager2B.s deleted file mode 100644 index 16371d05..00000000 --- a/asm/manager2B.s +++ /dev/null @@ -1,189 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager2B_Main -Manager2B_Main: @ 0x0805D014 - push {lr} - ldr r2, _0805D028 @ =gUnk_08108D30 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805D028: .4byte gUnk_08108D30 - - thumb_func_start sub_0805D02C -sub_0805D02C: @ 0x0805D02C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r6, r0, #0 - ldrh r0, [r6, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805D046 - bl DeleteThisEntity -_0805D046: - ldr r0, _0805D0BC @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x43 - bhi _0805D0B0 - ldrb r0, [r6, #0xa] - bl GetCurrentRoomProperty - adds r5, r0, #0 - movs r7, #0 - movs r0, #0x36 - adds r0, r0, r6 - mov sl, r0 - ldr r1, _0805D0C0 @ =gRoomControls - mov r8, r1 - movs r0, #0x20 - adds r0, r0, r6 - mov sb, r0 -_0805D068: - ldrh r1, [r5, #4] - movs r0, #0xa0 - adds r2, r7, #0 - bl CreateObject - adds r4, r0, #0 - mov r1, r8 - ldrh r0, [r1, #6] - ldrh r1, [r5] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - mov r1, r8 - ldrh r0, [r1, #8] - ldrh r1, [r5, #2] - adds r0, r0, r1 - strh r0, [r4, #0x32] - str r6, [r4, #0x50] - adds r0, r4, #0 - bl sub_08016A30 - mov r0, sb - adds r0, #4 - mov sb, r0 - subs r0, #4 - stm r0!, {r4} - adds r7, #1 - adds r5, #6 - cmp r7, #3 - bls _0805D068 - movs r0, #0 - movs r1, #1 - strb r1, [r6, #0xc] - movs r1, #0x3c - strb r1, [r6, #0xf] - mov r1, sl - strb r0, [r1] -_0805D0B0: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805D0BC: .4byte gEntCount -_0805D0C0: .4byte gRoomControls - - thumb_func_start sub_0805D0C4 -sub_0805D0C4: @ 0x0805D0C4 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D0D8 - movs r0, #0xb4 - strb r0, [r4, #0xf] -_0805D0D8: - adds r5, r4, #0 - adds r5, #0x36 - ldrb r0, [r5] - cmp r0, #0xf - bne _0805D0F6 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #8 - strb r0, [r4, #0xe] - movs r0, #0x72 - bl SoundReq - adds r0, r4, #0 - bl sub_0805D11C -_0805D0F6: - movs r0, #0 - strb r0, [r5] - pop {r4, r5, pc} - - thumb_func_start sub_0805D0FC -sub_0805D0FC: @ 0x0805D0FC - 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 _0805D118 - ldrh r0, [r4, #0x3e] - bl SetFlag - adds r0, r4, #0 - bl DeleteManager -_0805D118: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805D11C -sub_0805D11C: @ 0x0805D11C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - movs r6, #0 - ldr r1, _0805D170 @ =gRoomControls - mov r8, r1 - movs r7, #0x3f - adds r5, r0, #0 - adds r5, #0x20 -_0805D12E: - ldr r4, [r5] - movs r0, #0 - stm r5!, {r0} - movs r2, #0x2e - ldrsh r0, [r4, r2] - mov r3, r8 - ldrh r1, [r3, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r7 - movs r2, #0x32 - ldrsh r1, [r4, r2] - ldrh r2, [r3, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r7 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_0807BA8C - adds r0, r4, #0 - bl DeleteEntity - adds r6, #1 - cmp r6, #3 - bls _0805D12E - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805D170: .4byte gRoomControls diff --git a/asm/manager2E.s b/asm/manager2E.s deleted file mode 100644 index c5b8388b..00000000 --- a/asm/manager2E.s +++ /dev/null @@ -1,183 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0805D280 -sub_0805D280: @ 0x0805D280 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _0805D292 - bl DeleteThisEntity -_0805D292: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805D2A6 - ldrh r0, [r4, #0x3c] - bl SetFlag - bl DeleteThisEntity -_0805D2A6: - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _0805D2B4 - movs r0, #0x1e - strb r0, [r4, #0xe] -_0805D2B4: - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805D2C0 -sub_0805D2C0: @ 0x0805D2C0 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805D2EE - ldr r0, _0805D2F0 @ =gUnk_03003DC0 - ldrh r0, [r0, #8] - cmp r0, #1 - bhi _0805D2EE - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xe] - cmp r0, #1 - bne _0805D2E6 - adds r0, r4, #0 - bl sub_0805D2F4 -_0805D2E6: - ldrb r1, [r4, #0xe] - adds r0, r4, #0 - bl sub_0805E4E0 -_0805D2EE: - pop {r4, pc} - .align 2, 0 -_0805D2F0: .4byte gUnk_03003DC0 - - thumb_func_start sub_0805D2F4 -sub_0805D2F4: @ 0x0805D2F4 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _0805D310 @ =gUnk_03003DC0 - ldrh r0, [r0, #8] - cmp r0, #0 - bne _0805D328 - movs r1, #0x38 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _0805D314 - bl SoundReq - b _0805D31A - .align 2, 0 -_0805D310: .4byte gUnk_03003DC0 -_0805D314: - movs r0, #0x72 - bl SoundReq -_0805D31A: - ldrh r0, [r4, #0x3c] - cmp r0, #0 - beq _0805D324 - bl SetFlag -_0805D324: - bl DeleteThisEntity -_0805D328: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805D32C -sub_0805D32C: @ 0x0805D32C - push {lr} - ldr r2, _0805D340 @ =gUnk_08108D50 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805D340: .4byte gUnk_08108D50 - - thumb_func_start sub_0805D344 -sub_0805D344: @ 0x0805D344 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _0805D35C - movs r0, #0x1e - strb r0, [r4, #0xe] -_0805D35C: - ldrb r0, [r4, #0xe] - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805D36C -sub_0805D36C: @ 0x0805D36C - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805D382 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xf] - strb r0, [r4, #0xe] -_0805D382: - pop {r4, pc} - - thumb_func_start sub_0805D384 -sub_0805D384: @ 0x0805D384 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0805D3B2 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D3C6 - movs r1, #0x38 - ldrsh r0, [r4, r1] - movs r1, #0x72 - cmp r0, #0 - beq _0805D3A4 - adds r1, r0, #0 -_0805D3A4: - adds r0, r1, #0 - bl SoundReq - ldrh r0, [r4, #0x3c] - bl SetFlag - b _0805D3C6 -_0805D3B2: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - bne _0805D3C6 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3c] - bl ClearFlag -_0805D3C6: - pop {r4, pc} diff --git a/asm/manager32.s b/asm/manager32.s deleted file mode 100644 index fa9d71d2..00000000 --- a/asm/manager32.s +++ /dev/null @@ -1,449 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager32_Main -Manager32_Main: @ 0x0805D7A4 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0805D7D4 @ =gUnk_08108D7C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldr r0, _0805D7D8 @ =gScreenTransition - ldr r0, [r0] - lsls r0, r0, #4 - str r0, [r4, #0x24] - adds r0, r4, #0 - bl sub_0805D9D8 - ldr r0, [r4, #0x20] - ldr r1, [r4, #0x28] - ldr r2, [r4, #0x24] - bl sub_0805DA08 - pop {r4, pc} - .align 2, 0 -_0805D7D4: .4byte gUnk_08108D7C -_0805D7D8: .4byte gScreenTransition - - thumb_func_start sub_0805D7DC -sub_0805D7DC: @ 0x0805D7DC - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xa] - movs r2, #2 - cmp r0, #0 - bne _0805D7EA - movs r2, #1 -_0805D7EA: - movs r0, #0 - strb r2, [r1, #0xc] - str r0, [r1, #0x20] - str r0, [r1, #0x24] - ldr r0, _0805D80C @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x78 - beq _0805D83C - cmp r0, #0x78 - bgt _0805D816 - cmp r0, #7 - beq _0805D828 - cmp r0, #7 - bgt _0805D810 - cmp r0, #3 - beq _0805D82C - b _0805D828 - .align 2, 0 -_0805D80C: .4byte gRoomControls -_0805D810: - cmp r0, #0x38 - beq _0805D840 - b _0805D828 -_0805D816: - cmp r0, #0x81 - beq _0805D830 - cmp r0, #0x81 - bgt _0805D824 - cmp r0, #0x80 - beq _0805D834 - b _0805D828 -_0805D824: - cmp r0, #0x88 - beq _0805D838 -_0805D828: - movs r1, #0 - b _0805D842 -_0805D82C: - movs r1, #1 - b _0805D842 -_0805D830: - movs r1, #2 - b _0805D842 -_0805D834: - movs r1, #3 - b _0805D842 -_0805D838: - movs r1, #4 - b _0805D842 -_0805D83C: - movs r1, #5 - b _0805D842 -_0805D840: - movs r1, #6 -_0805D842: - ldr r0, _0805D854 @ =gUnk_08108D74 - adds r0, r1, r0 - ldrb r0, [r0] - bl LoadGfxGroup - ldr r1, _0805D858 @ =gScreen - ldr r0, _0805D85C @ =0x00001E04 - strh r0, [r1, #0x2c] - pop {pc} - .align 2, 0 -_0805D854: .4byte gUnk_08108D74 -_0805D858: .4byte gScreen -_0805D85C: .4byte 0x00001E04 - - thumb_func_start sub_0805D860 -sub_0805D860: @ 0x0805D860 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xd] - cmp r0, #1 - beq _0805D89C - cmp r0, #1 - bgt _0805D874 - cmp r0, #0 - beq _0805D87E - b _0805D8D6 -_0805D874: - cmp r0, #2 - beq _0805D8B0 - cmp r0, #3 - beq _0805D8C2 - b _0805D8D6 -_0805D87E: - movs r0, #1 - strb r0, [r1, #0xd] - movs r0, #0x80 - str r0, [r1, #0x20] - ldr r2, _0805D898 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - b _0805D8F4 - .align 2, 0 -_0805D898: .4byte gScreen -_0805D89C: - ldr r0, [r1, #0x20] - subs r0, #1 - str r0, [r1, #0x20] - cmp r0, #0x10 - bne _0805D8F4 - movs r0, #2 - strb r0, [r1, #0xd] - movs r0, #0x2d - strb r0, [r1, #0xe] - b _0805D8F4 -_0805D8B0: - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D8F4 - movs r0, #3 - strb r0, [r1, #0xd] - b _0805D8F4 -_0805D8C2: - ldr r0, [r1, #0x20] - subs r0, #1 - str r0, [r1, #0x20] - cmp r0, #0 - bne _0805D8F4 - movs r0, #4 - strb r0, [r1, #0xd] - movs r0, #0x3c - strb r0, [r1, #0xe] - b _0805D8F4 -_0805D8D6: - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D8F4 - bl sub_0801E104 - ldr r2, _0805D8F8 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805D8FC @ =0x0000F7FF - ands r0, r1 - strh r0, [r2] - bl DeleteThisEntity -_0805D8F4: - pop {pc} - .align 2, 0 -_0805D8F8: .4byte gScreen -_0805D8FC: .4byte 0x0000F7FF - - thumb_func_start sub_0805D900 -sub_0805D900: @ 0x0805D900 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xd] - cmp r0, #1 - beq _0805D938 - cmp r0, #1 - bgt _0805D914 - cmp r0, #0 - beq _0805D91A - b _0805D966 -_0805D914: - cmp r0, #2 - beq _0805D94E - b _0805D966 -_0805D91A: - movs r1, #1 - strb r1, [r2, #0xd] - movs r0, #0x2d - strb r0, [r2, #0xe] - str r1, [r2, #0x20] - ldr r2, _0805D934 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - b _0805D982 - .align 2, 0 -_0805D934: .4byte gScreen -_0805D938: - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D982 - movs r0, #2 - strb r0, [r2, #0xd] - movs r0, #0x14 - strb r0, [r2, #0xe] - b _0805D982 -_0805D94E: - ldr r0, [r2, #0x20] - adds r0, #1 - str r0, [r2, #0x20] - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D982 - movs r0, #3 - strb r0, [r2, #0xd] - b _0805D982 -_0805D966: - ldr r0, [r2, #0x20] - adds r0, #4 - str r0, [r2, #0x20] - cmp r0, #0x80 - bls _0805D982 - bl sub_0801E104 - ldr r2, _0805D984 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805D988 @ =0x0000F7FF - ands r0, r1 - strh r0, [r2] - bl DeleteThisEntity -_0805D982: - pop {pc} - .align 2, 0 -_0805D984: .4byte gScreen -_0805D988: .4byte 0x0000F7FF - - thumb_func_start sub_0805D98C -sub_0805D98C: @ 0x0805D98C - push {lr} - adds r2, r0, #0 - ldr r3, _0805D9D4 @ =gInput - ldrh r1, [r3] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _0805D9A2 - ldr r0, [r2, #0x20] - subs r0, #1 - str r0, [r2, #0x20] -_0805D9A2: - ldrh r1, [r3] - movs r0, #0x80 - ands r0, r1 - adds r3, r1, #0 - cmp r0, #0 - beq _0805D9B4 - ldr r0, [r2, #0x20] - adds r0, #1 - str r0, [r2, #0x20] -_0805D9B4: - movs r0, #0x20 - ands r0, r3 - cmp r0, #0 - beq _0805D9C2 - ldr r0, [r2, #0x28] - subs r0, #1 - str r0, [r2, #0x28] -_0805D9C2: - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0805D9D0 - ldr r0, [r2, #0x28] - adds r0, #1 - str r0, [r2, #0x28] -_0805D9D0: - pop {pc} - .align 2, 0 -_0805D9D4: .4byte gInput - - thumb_func_start sub_0805D9D8 -sub_0805D9D8: @ 0x0805D9D8 - push {r4, lr} - ldr r4, [r0, #0x14] - cmp r4, #0 - beq _0805D9FC - ldr r3, _0805DA00 @ =gScreen - ldr r2, _0805DA04 @ =gRoomControls - ldrh r1, [r4, #0x2e] - ldrh r0, [r2, #0xa] - subs r1, r1, r0 - movs r0, #0x80 - subs r0, r0, r1 - strh r0, [r3, #0x2e] - ldrh r1, [r4, #0x32] - ldrh r0, [r2, #0xc] - subs r1, r1, r0 - movs r0, #0x8c - subs r0, r0, r1 - strh r0, [r3, #0x30] -_0805D9FC: - pop {r4, pc} - .align 2, 0 -_0805DA00: .4byte gScreen -_0805DA04: .4byte gRoomControls - - thumb_func_start sub_0805DA08 -sub_0805DA08: @ 0x0805DA08 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - mov sl, r0 - adds r5, r1, #0 - adds r6, r2, #0 - ldr r2, _0805DA78 @ =gUnk_03003DE4 - ldrb r1, [r2] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r1, _0805DA7C @ =gUnk_02017AA0 - adds r4, r0, r1 - movs r3, #0 - mov r8, r2 - mov sb, r1 - ldr r0, _0805DA80 @ =gSineTable - mov ip, r0 - movs r2, #0xff - ldr r1, _0805DA84 @ =gScreen -_0805DA34: - adds r0, r6, r3 - adds r0, r0, r5 - ands r0, r2 - lsls r0, r0, #1 - add r0, ip - movs r7, #0 - ldrsh r0, [r0, r7] - mov r7, sl - muls r7, r0, r7 - adds r0, r7, #0 - lsrs r0, r0, #8 - ldrh r7, [r1, #0x2e] - adds r0, r0, r7 - strh r0, [r4] - adds r4, #2 - adds r3, #1 - adds r5, #0x17 - cmp r3, #0x9f - bls _0805DA34 - mov r0, r8 - ldrb r1, [r0] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - add r0, sb - ldr r1, _0805DA88 @ =0x0400001C - ldr r2, _0805DA8C @ =0xA2600001 - bl sub_0805622C - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805DA78: .4byte gUnk_03003DE4 -_0805DA7C: .4byte gUnk_02017AA0 -_0805DA80: .4byte gSineTable -_0805DA84: .4byte gScreen -_0805DA88: .4byte 0x0400001C -_0805DA8C: .4byte 0xA2600001 - - thumb_func_start sub_0805DA90 -sub_0805DA90: @ 0x0805DA90 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - bl GetEmptyManager - adds r1, r0, #0 - cmp r1, #0 - beq _0805DAB4 - movs r0, #9 - strb r0, [r1, #8] - movs r0, #0x32 - strb r0, [r1, #9] - strb r4, [r1, #0xa] - str r5, [r1, #0x14] - adds r0, r1, #0 - movs r1, #8 - bl AppendEntityToList -_0805DAB4: - ldr r0, _0805DAD8 @ =gArea - ldr r1, _0805DADC @ =0x0000088C - adds r4, r0, r1 - ldr r0, [r4] - cmp r0, #0 - beq _0805DAD4 - ldr r2, _0805DAE0 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805DAE4 @ =0x0000F7FF - ands r0, r1 - strh r0, [r2] - bl sub_080528F0 - ldr r0, [r4] - bl DeleteManager -_0805DAD4: - pop {r4, r5, pc} - .align 2, 0 -_0805DAD8: .4byte gArea -_0805DADC: .4byte 0x0000088C -_0805DAE0: .4byte gScreen -_0805DAE4: .4byte 0x0000F7FF diff --git a/asm/manager34.s b/asm/manager34.s deleted file mode 100644 index 30b172e6..00000000 --- a/asm/manager34.s +++ /dev/null @@ -1,143 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager34_Main -Manager34_Main: @ 0x0805DB94 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0805DBB0 @ =gUnk_08108D8C - ldrb r0, [r4, #0xc] - 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_0805DBF0 - pop {r4, pc} - .align 2, 0 -_0805DBB0: .4byte gUnk_08108D8C - - thumb_func_start sub_0805DBB4 -sub_0805DBB4: @ 0x0805DBB4 - movs r1, #1 - strb r1, [r0, #0xc] - ldr r1, _0805DBC8 @ =gScreenTransition - adds r1, #0x3d - ldrb r2, [r1] - lsls r1, r2, #4 - subs r1, r1, r2 - lsls r1, r1, #2 - strh r1, [r0, #0x20] - bx lr - .align 2, 0 -_0805DBC8: .4byte gScreenTransition - - thumb_func_start sub_0805DBCC -sub_0805DBCC: @ 0x0805DBCC - push {lr} - adds r1, r0, #0 - ldr r0, [r1, #0x14] - ldr r0, [r0, #4] - cmp r0, #0 - bne _0805DBE6 - movs r0, #2 - strb r0, [r1, #0xc] - ldrh r0, [r1, #0x20] - ldr r2, _0805DBE8 @ =0x0000012D - cmp r0, r2 - bls _0805DBE6 - strh r2, [r1, #0x20] -_0805DBE6: - pop {pc} - .align 2, 0 -_0805DBE8: .4byte 0x0000012D - - thumb_func_start nullsub_498 -nullsub_498: @ 0x0805DBEC - bx lr - .align 2, 0 - - thumb_func_start sub_0805DBF0 -sub_0805DBF0: @ 0x0805DBF0 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x20] - subs r1, r0, #1 - strh r1, [r4, #0x20] - lsls r0, r1, #0x10 - cmp r0, #0 - bne _0805DC06 - bl sub_0805DC70 - b _0805DC6C -_0805DC06: - lsls r0, r1, #0x10 - lsrs r1, r0, #0x10 - cmp r1, #0x78 - bne _0805DC18 - movs r0, #0x78 - movs r1, #2 - bl sub_08080964 - b _0805DC36 -_0805DC18: - cmp r1, #0xd2 - bne _0805DC26 - movs r0, #0x5a - movs r1, #1 - bl sub_08080964 - b _0805DC36 -_0805DC26: - movs r0, #0x96 - lsls r0, r0, #1 - cmp r1, r0 - bne _0805DC36 - movs r0, #0x5a - movs r1, #0 - bl sub_08080964 -_0805DC36: - ldrh r1, [r4, #0x20] - adds r0, r1, #0 - cmp r0, #0x77 - bhi _0805DC42 - movs r0, #0xf - b _0805DC48 -_0805DC42: - cmp r0, #0xd1 - bhi _0805DC58 - movs r0, #0x1f -_0805DC48: - ands r0, r1 - cmp r0, #0 - bne _0805DC6C - movs r0, #0x93 - lsls r0, r0, #1 - bl SoundReq - b _0805DC6C -_0805DC58: - cmp r0, #0xc7 - bhi _0805DC6C - movs r0, #0x3f - ands r0, r1 - cmp r0, #0 - bne _0805DC6C - movs r0, #0x93 - lsls r0, r0, #1 - bl SoundReq -_0805DC6C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0805DC70 -sub_0805DC70: @ 0x0805DC70 - push {lr} - bl sub_0805E5A8 - ldr r0, _0805DC80 @ =gUnk_0813AC48 - bl DoExitTransition - pop {pc} - .align 2, 0 -_0805DC80: .4byte gUnk_0813AC48 diff --git a/asm/manager35.s b/asm/manager35.s deleted file mode 100644 index b1c1ec63..00000000 --- a/asm/manager35.s +++ /dev/null @@ -1,166 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager35_Main -Manager35_Main: @ 0x0805DC84 - push {lr} - ldr r2, _0805DC98 @ =gUnk_08108D98 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805DC98: .4byte gUnk_08108D98 - - thumb_func_start sub_0805DC9C -sub_0805DC9C: @ 0x0805DC9C - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _0805DCAE - bl DeleteThisEntity -_0805DCAE: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805DCC2 - ldrh r0, [r4, #0x3c] - bl SetFlag - bl DeleteThisEntity -_0805DCC2: - movs r0, #1 - strb r0, [r4, #0xc] - pop {r4, pc} - - thumb_func_start sub_0805DCC8 -sub_0805DCC8: @ 0x0805DCC8 - push {r4, r5, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805DD1E - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x35 - ldrb r0, [r0] - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805DCEC - movs r0, #0x1e - strb r0, [r4, #0xe] -_0805DCEC: - ldr r5, _0805DD20 @ =gRoomControls - ldr r0, [r5, #0x30] - str r0, [r4, #0x14] - movs r0, #0x69 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _0805DD1E - ldrh r0, [r5, #6] - ldrh r2, [r4, #0x38] - adds r0, r0, r2 - strh r0, [r1, #0x2e] - ldrh r0, [r5, #8] - ldrh r2, [r4, #0x3a] - adds r0, r0, r2 - strh r0, [r1, #0x32] - str r1, [r4, #0x18] - str r1, [r5, #0x30] - adds r0, r1, #0 - movs r1, #0x1e - bl sub_0805E4E0 -_0805DD1E: - pop {r4, r5, pc} - .align 2, 0 -_0805DD20: .4byte gRoomControls - - thumb_func_start sub_0805DD24 -sub_0805DD24: @ 0x0805DD24 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0 - movs r1, #8 - bl sub_0805E4E0 - ldr r0, _0805DD64 @ =gRoomControls - ldrb r1, [r0, #0xf] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _0805DD60 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805DD60 - movs r0, #3 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3c] - bl SetFlag - adds r1, r4, #0 - adds r1, #0x36 - ldrb r0, [r1] - cmp r0, #0 - bne _0805DD60 - movs r0, #1 - strb r0, [r1] -_0805DD60: - pop {r4, pc} - .align 2, 0 -_0805DD64: .4byte gRoomControls - - thumb_func_start sub_0805DD68 -sub_0805DD68: @ 0x0805DD68 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0 - movs r1, #8 - bl sub_0805E4E0 - adds r1, r4, #0 - adds r1, #0x36 - ldrb r0, [r1] - cmp r0, #0 - beq _0805DD94 - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805DDAE - ldr r1, _0805DD90 @ =gRoomControls - ldr r0, [r4, #0x14] - str r0, [r1, #0x30] - b _0805DDAE - .align 2, 0 -_0805DD90: .4byte gRoomControls -_0805DD94: - ldr r0, _0805DDB0 @ =gRoomControls - ldrb r1, [r0, #0xf] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _0805DDAE - ldr r0, [r4, #0x18] - cmp r0, #0 - beq _0805DDAA - bl DeleteEntity -_0805DDAA: - bl DeleteThisEntity -_0805DDAE: - pop {r4, pc} - .align 2, 0 -_0805DDB0: .4byte gRoomControls diff --git a/asm/manager37.s b/asm/manager37.s deleted file mode 100644 index 2ec3b180..00000000 --- a/asm/manager37.s +++ /dev/null @@ -1,390 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start Manager37_Main -Manager37_Main: @ 0x0805DE38 - push {lr} - ldr r2, _0805DE4C @ =gUnk_08108DBC - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805DE4C: .4byte gUnk_08108DBC - - thumb_func_start sub_0805DE50 -sub_0805DE50: @ 0x0805DE50 - push {lr} - ldr r2, _0805DE64 @ =gUnk_08108DC4 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805DE64: .4byte gUnk_08108DC4 - - thumb_func_start sub_0805DE68 -sub_0805DE68: @ 0x0805DE68 -.ifdef JP - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x7b - bl CheckLocalFlag - cmp r0, #0 - bne _0805DCCE - bl DeleteThisEntity -_0805DCCE: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r2, _0805DCF4 @ =0x030010A0 - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - adds r1, r2, #0 - adds r1, #0x39 - movs r0, #0xf - strb r0, [r1] - adds r0, r2, #0 - adds r0, #0x3a - movs r1, #0x20 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - pop {r4, pc} - .align 2, 0 -_0805DCF4: .4byte gScreenTransition -.else -.ifdef EU - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x7b - bl CheckLocalFlag - cmp r0, #0 - bne _0805D916 - bl DeleteThisEntity -_0805D916: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r2, _0805D93C @ =gScreenTransition - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - adds r1, r2, #0 - adds r1, #0x39 - movs r0, #0xf - strb r0, [r1] - adds r0, r2, #0 - adds r0, #0x3a - movs r1, #0x20 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - pop {r4, pc} - .align 2, 0 -_0805D93C: .4byte gScreenTransition - -.else - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x7b - bl CheckLocalFlag - cmp r0, #0 - bne _0805DE7A - bl DeleteThisEntity -_0805DE7A: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r2, _0805DEAC @ =gScreenTransition - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - adds r1, r2, #0 - adds r1, #0x39 - movs r0, #0xf - strb r0, [r1] - adds r0, r2, #0 - adds r0, #0x3a - movs r1, #0x20 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - ldr r0, _0805DEB0 @ =gSave - movs r1, #0x93 - lsls r1, r1, #3 - adds r0, r0, r1 - ldr r1, _0805DEB4 @ =0x00001194 - str r1, [r0] - pop {r4, pc} - .align 2, 0 -_0805DEAC: .4byte gScreenTransition -_0805DEB0: .4byte gSave -_0805DEB4: .4byte 0x00001194 -.endif -.endif - - thumb_func_start sub_0805DEB8 -sub_0805DEB8: @ 0x0805DEB8 - push {r4, r5, lr} - adds r3, r0, #0 - ldr r5, _0805DF44 @ =gPlayerEntity - movs r0, #0x2e - ldrsh r2, [r5, r0] - subs r2, #0x88 - ldr r4, _0805DF48 @ =gRoomControls - ldrh r0, [r4, #6] - subs r2, r2, r0 - movs r1, #0x32 - ldrsh r0, [r5, r1] - subs r0, #0x40 - ldrh r1, [r4, #8] - subs r0, r0, r1 - adds r1, r2, #0 - muls r1, r2, r1 - adds r2, r0, #0 - muls r2, r0, r2 - adds r0, r2, #0 - adds r1, r1, r0 - movs r0, #0x90 - lsls r0, r0, #4 - cmp r1, r0 - bgt _0805DF42 - movs r0, #0 - movs r1, #2 - strb r1, [r3, #0xc] - strb r0, [r3, #0xd] - movs r0, #0x78 - strb r0, [r3, #0xe] - movs r0, #2 - bl sub_08078A90 - bl sub_08078B48 - movs r0, #0x64 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805DF1A - ldrh r0, [r4, #6] - adds r0, #0x88 - strh r0, [r2, #0x2e] - ldrh r0, [r4, #8] - adds r0, #0x48 - strh r0, [r2, #0x32] -_0805DF1A: - movs r2, #0x10 - rsbs r2, r2, #0 - adds r0, r5, #0 - movs r1, #8 - bl CreateSpeechBubbleExclamationMark - adds r2, r0, #0 - cmp r2, #0 - beq _0805DF3C - 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] -_0805DF3C: - movs r0, #0x32 - bl SoundReq -_0805DF42: - pop {r4, r5, pc} - .align 2, 0 -_0805DF44: .4byte gPlayerEntity -_0805DF48: .4byte gRoomControls - - thumb_func_start sub_0805DF4C -sub_0805DF4C: @ 0x0805DF4C - push {lr} - adds r1, r0, #0 - ldr r2, _0805DF70 @ =gPlayerEntity - movs r0, #0 - strb r0, [r2, #0x14] - movs r3, #0x36 - ldrsh r0, [r2, r3] - cmp r0, #0 - beq _0805DF78 - movs r1, #0x32 - ldrsh r0, [r2, r1] - ldr r1, _0805DF74 @ =gRoomControls - ldrh r1, [r1, #8] - adds r1, #0x48 - cmp r0, r1 - bge _0805DF92 - strh r1, [r2, #0x32] - b _0805DF92 - .align 2, 0 -_0805DF70: .4byte gPlayerEntity -_0805DF74: .4byte gRoomControls -_0805DF78: - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805DF92 - movs r0, #3 - strb r0, [r1, #0xc] - movs r0, #0x1e - strb r0, [r1, #0xe] - ldr r0, _0805DF94 @ =0x0000164F - bl TextboxNoOverlapFollow -_0805DF92: - pop {pc} - .align 2, 0 -_0805DF94: .4byte 0x0000164F - - thumb_func_start sub_0805DF98 -sub_0805DF98: @ 0x0805DF98 - push {lr} - adds r2, r0, #0 - ldr r0, _0805DFB4 @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _0805DFCA - ldrb r0, [r2, #0xe] - cmp r0, #0 - beq _0805DFB8 - subs r0, #1 - strb r0, [r2, #0xe] - b _0805DFCA - .align 2, 0 -_0805DFB4: .4byte gTextBox -_0805DFB8: - movs r0, #4 - strb r0, [r2, #0xc] - movs r0, #7 - movs r1, #4 - bl DoFade - movs r0, #0xf6 - bl SoundReq -_0805DFCA: - pop {pc} - - thumb_func_start sub_0805DFCC -sub_0805DFCC: @ 0x0805DFCC - push {lr} - ldr r0, _0805DFE4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _0805DFE0 - movs r0, #0x1c - bl ClearGlobalFlag - bl sub_0805E094 -_0805DFE0: - pop {pc} - .align 2, 0 -_0805DFE4: .4byte gFadeControl - - thumb_func_start sub_0805DFE8 -sub_0805DFE8: @ 0x0805DFE8 - push {lr} - ldr r2, _0805DFFC @ =gUnk_08108DD8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805DFFC: .4byte gUnk_08108DD8 - - thumb_func_start sub_0805E000 -sub_0805E000: @ 0x0805E000 - push {r4, r5, r6, lr} - adds r6, r0, #0 - movs r0, #0x51 - movs r1, #0 - bl CreateEnemy - adds r4, r0, #0 - cmp r4, #0 - beq _0805E062 - ldr r1, _0805E064 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, #0xb0 - strh r0, [r4, #0x2e] - ldrh r0, [r1, #8] - adds r0, #0x48 - strh r0, [r4, #0x32] - adds r0, r4, #0 - adds r0, #0x38 - movs r5, #1 - strb r5, [r0] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldr r0, _0805E068 @ =gScreenTransition - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r5, #0 - ands r0, r1 - cmp r0, #0 - beq _0805E040 - bl DeleteThisEntity -_0805E040: - str r4, [r6, #0x18] - strb r5, [r6, #0xc] - movs r0, #3 - bl sub_08078A90 - ldr r0, _0805E06C @ =gArea - ldr r1, _0805E070 @ =0x00000864 - adds r0, r0, r1 - ldr r1, _0805E074 @ =0x80010000 - str r1, [r0] - movs r0, #6 - movs r1, #4 - bl DoFade - movs r0, #0xf7 - bl SoundReq -_0805E062: - pop {r4, r5, r6, pc} - .align 2, 0 -_0805E064: .4byte gRoomControls -_0805E068: .4byte gScreenTransition -_0805E06C: .4byte gArea -_0805E070: .4byte 0x00000864 -_0805E074: .4byte 0x80010000 - - thumb_func_start sub_0805E078 -sub_0805E078: @ 0x0805E078 - push {lr} - adds r1, r0, #0 - ldr r0, _0805E090 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _0805E08E - ldr r1, [r1, #0x18] - movs r0, #1 - strb r0, [r1, #0xd] - bl DeleteThisEntity -_0805E08E: - pop {pc} - .align 2, 0 -_0805E090: .4byte gFadeControl - - thumb_func_start sub_0805E094 -sub_0805E094: @ 0x0805E094 - push {lr} - bl sub_0805E5A8 - ldr r0, _0805E0A4 @ =gUnk_0813AC34 - movs r1, #7 - bl sub_0808091C - pop {pc} - .align 2, 0 -_0805E0A4: .4byte gUnk_0813AC34 diff --git a/asm/managerF.s b/asm/managerF.s deleted file mode 100644 index 3a5d746b..00000000 --- a/asm/managerF.s +++ /dev/null @@ -1,905 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ManagerF_Main -ManagerF_Main: @ 0x08058ECC - push {lr} - ldr r2, _08058EE0 @ =gUnk_08108314 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08058EE0: .4byte gUnk_08108314 - - thumb_func_start sub_08058EE4 -sub_08058EE4: @ 0x08058EE4 - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldrb r0, [r6, #0xc] - cmp r0, #0 - bne _08058EF2 - movs r0, #1 - strb r0, [r6, #0xc] -_08058EF2: - ldrb r0, [r6, #0xb] - bl CheckRoomFlag - cmp r0, #0 - beq _08058F40 - movs r5, #0x94 - lsls r5, r5, #1 - ldrb r2, [r6, #0xb] - adds r2, #1 - adds r0, r5, #0 - movs r1, #0x68 - bl sub_08058F44 - movs r4, #0xac - lsls r4, r4, #1 - ldrb r2, [r6, #0xb] - adds r2, #2 - adds r0, r4, #0 - movs r1, #0x68 - bl sub_08058F44 - ldrb r2, [r6, #0xb] - adds r2, #3 - adds r0, r5, #0 - movs r1, #0x98 - bl sub_08058F44 - ldrb r2, [r6, #0xb] - adds r2, #4 - adds r0, r4, #0 - movs r1, #0x98 - bl sub_08058F44 - movs r0, #0x92 - lsls r0, r0, #1 - bl SoundReq - bl DeleteThisEntity -_08058F40: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08058F44 -sub_08058F44: @ 0x08058F44 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - adds r0, r2, #0 - bl CheckRoomFlag - cmp r0, #0 - bne _08058F80 - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #1 - bl sub_080002A8 - cmp r0, #0x61 - bne _08058F80 - lsrs r1, r4, #4 - movs r2, #0x3f - ands r1, r2 - lsrs r0, r5, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - movs r0, #0x26 - movs r2, #1 - bl SetTileType - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_08058F84 -_08058F80: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08058F84 -sub_08058F84: @ 0x08058F84 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r0, #0x21 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08058FA8 - ldr r0, _08058FAC @ =gRoomControls - ldrh r1, [r0, #6] - adds r1, r1, r4 - strh r1, [r2, #0x2e] - ldrh r0, [r0, #8] - adds r0, r0, r5 - strh r0, [r2, #0x32] -_08058FA8: - pop {r4, r5, pc} - .align 2, 0 -_08058FAC: .4byte gRoomControls - - thumb_func_start sub_08058FB0 -sub_08058FB0: @ 0x08058FB0 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _08058FF6 - cmp r0, #1 - bgt _08058FC4 - cmp r0, #0 - beq _08058FCA - b _08059050 -_08058FC4: - cmp r0, #2 - beq _08059018 - b _08059050 -_08058FCA: - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - cmp r0, #1 - bne _08058FDC - movs r0, #7 - strb r0, [r4, #0xd] - movs r0, #6 - b _08058FE2 -_08058FDC: - movs r0, #8 - strb r0, [r4, #0xd] - movs r0, #2 -_08058FE2: - strb r0, [r4, #0xf] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059060 - adds r0, r4, #0 - bl DeleteManager - b _08059060 -_08058FF6: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059060 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0xf0 - bl sub_0805E4E0 - adds r0, r4, #0 - bl sub_08059064 - b _08059060 -_08059018: - ldrb r0, [r4, #0xe] - cmp r0, #0x5a - bne _08059028 - movs r0, #2 - bl sub_08078A90 - bl sub_08077B20 -_08059028: - ldrb r2, [r4, #0xe] - cmp r2, #0x3c - bne _08059034 - ldr r1, _0805904C @ =gPlayerEntity - ldrb r0, [r4, #0xf] - strb r0, [r1, #0x14] -_08059034: - subs r0, r2, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08059060 - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0xd] - movs r0, #5 - bl MenuFadeIn - b _08059060 - .align 2, 0 -_0805904C: .4byte gPlayerEntity -_08059050: - ldrh r0, [r4, #0x3e] - bl SetFlag - movs r0, #1 - bl sub_08078A90 - bl DeleteThisEntity -_08059060: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08059064 -sub_08059064: @ 0x08059064 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0 - movs r1, #0x53 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805908E - movs r0, #2 - strb r0, [r2, #0xe] - ldr r1, _08059090 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r4, [r4, #0x3a] - adds r0, r0, r4 - strh r0, [r2, #0x32] -_0805908E: - pop {r4, pc} - .align 2, 0 -_08059090: .4byte gRoomControls - - thumb_func_start sub_08059094 -sub_08059094: @ 0x08059094 - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080590B6 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x60 - bl CheckLocalFlag - cmp r0, #0 - bne _080590CC - movs r0, #0x5f - bl SetLocalFlag - b _080590C8 -_080590B6: - movs r0, #0x60 - bl CheckLocalFlag - cmp r0, #0 - beq _080590C8 - movs r0, #0x5f - bl ClearLocalFlag - movs r5, #1 -_080590C8: - cmp r5, #0 - beq _080590D8 -_080590CC: - ldr r0, _080590DC @ =gUnk_080F4B88 - bl LoadRoomEntityList - adds r0, r4, #0 - bl DeleteManager -_080590D8: - pop {r4, r5, pc} - .align 2, 0 -_080590DC: .4byte gUnk_080F4B88 - - thumb_func_start sub_080590E0 -sub_080590E0: @ 0x080590E0 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xc] - cmp r0, #0 - bne _080590F6 - movs r0, #1 - strb r0, [r1, #0xc] - adds r0, r1, #0 - movs r1, #6 - bl sub_0805E3A0 -_080590F6: - movs r0, #0x6c - bl CheckLocalFlag - cmp r0, #0 - beq _0805911A - movs r0, #0x4b - bl CheckLocalFlag - cmp r0, #0 - beq _08059112 - movs r0, #0x4a - bl SetLocalFlag - b _08059120 -_08059112: - movs r0, #0x4a - bl ClearLocalFlag - b _08059120 -_0805911A: - movs r0, #0x4a - bl ClearLocalFlag -_08059120: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08059124 -sub_08059124: @ 0x08059124 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _08059174 - cmp r0, #1 - beq _080591AC - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080591C8 - movs r1, #0x38 - ldrsh r0, [r4, r1] - movs r2, #0x3a - ldrsh r1, [r4, r2] - ldrb r2, [r4, #0xb] - bl CreateDustAt - ldrh r0, [r4, #0x38] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - movs r2, #0x3f - ands r0, r2 - ldrh r1, [r4, #0x3a] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - ldrb r1, [r4, #0xb] - bl sub_0807BA8C - movs r0, #0xcd - bl SoundReq - bl DeleteThisEntity - b _080591C8 -_08059174: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059182 - bl DeleteThisEntity -_08059182: - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _080591A8 @ =0x00000365 - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r3, #0x3f - ands r1, r3 - ldrh r2, [r4, #0x3a] - lsls r2, r2, #0x10 - asrs r2, r2, #0x14 - ands r2, r3 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r4, #0xb] - bl SetTileType - b _080591C8 - .align 2, 0 -_080591A8: .4byte 0x00000365 -_080591AC: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _080591C8 - adds r0, r4, #0 - movs r1, #0x4b - bl sub_0805E4E0 - movs r0, #0x2d - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] -_080591C8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080591CC -sub_080591CC: @ 0x080591CC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080591F4 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3e] - bl CheckFlags - strb r0, [r4, #0xb] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _08059214 - ldr r1, _080591F0 @ =gRoomVars - ldrh r0, [r4, #0x3a] - b _08059218 - .align 2, 0 -_080591F0: .4byte gRoomVars -_080591F4: - ldrh r0, [r4, #0x3e] - bl CheckFlags - adds r1, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, r1 - beq _0805921A - strb r1, [r4, #0xb] - cmp r1, #0 - beq _08059214 - ldr r1, _08059210 @ =gRoomVars - ldrh r0, [r4, #0x3a] - b _08059218 - .align 2, 0 -_08059210: .4byte gRoomVars -_08059214: - ldr r1, _0805921C @ =gRoomVars - ldrh r0, [r4, #0x38] -_08059218: - strh r0, [r1, #0xc] -_0805921A: - pop {r4, pc} - .align 2, 0 -_0805921C: .4byte gRoomVars - - thumb_func_start sub_08059220 -sub_08059220: @ 0x08059220 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldr r2, _08059268 @ =gRoomVars - movs r0, #0 - strh r0, [r2, #0xc] - ldr r4, _0805926C @ =gUnk_08108354 - ldrh r0, [r4] - ldr r1, _08059270 @ =0x0000FFFF - cmp r0, r1 - beq _08059254 - adds r7, r2, #0 - adds r6, r1, #0 -_08059238: - ldrh r0, [r4] - ldrh r1, [r4, #2] - ldrh r2, [r4, #4] - ldrh r3, [r4, #6] - bl CheckPlayerInRegion - cmp r0, #0 - beq _0805924C - ldrh r0, [r4, #8] - strh r0, [r7, #0xc] -_0805924C: - adds r4, #0xa - ldrh r0, [r4] - cmp r0, r6 - bne _08059238 -_08059254: - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _08059266 - movs r0, #1 - strb r0, [r5, #0xc] - ldr r1, _08059274 @ =gArea - ldr r0, _08059268 @ =gRoomVars - ldrh r0, [r0, #0xc] - strh r0, [r1, #0xa] -_08059266: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08059268: .4byte gRoomVars -_0805926C: .4byte gUnk_08108354 -_08059270: .4byte 0x0000FFFF -_08059274: .4byte gArea - - thumb_func_start sub_08059278 -sub_08059278: @ 0x08059278 - push {lr} - movs r0, #9 - movs r1, #0xf - movs r2, #6 - bl FindEntityByID - cmp r0, #0 - beq _0805928C - bl ManagerF_Main -_0805928C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08059290 -sub_08059290: @ 0x08059290 - movs r1, #1 - strb r1, [r0, #0xc] - ldr r1, _0805929C @ =gRoomControls - ldr r0, _080592A0 @ =gPlayerEntity - str r0, [r1, #0x30] - bx lr - .align 2, 0 -_0805929C: .4byte gRoomControls -_080592A0: .4byte gPlayerEntity - - thumb_func_start sub_080592A4 -sub_080592A4: @ 0x080592A4 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080592C8 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _080592EA - adds r0, r4, #0 - bl sub_080592EC - bl DeleteThisEntity - b _080592EA -_080592C8: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _080592EA - adds r0, r4, #0 - bl sub_080592EC - adds r0, r4, #0 - bl sub_0805930C -.ifndef EU - movs r0, #0xb7 - lsls r0, r0, #1 - bl SoundReq -.endif - bl DeleteThisEntity -_080592EA: - pop {r4, pc} - - thumb_func_start sub_080592EC -sub_080592EC: @ 0x080592EC - push {lr} - adds r1, r0, #0 - ldrh r0, [r1, #0x38] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - movs r2, #0x3f - ands r0, r2 - ldrh r1, [r1, #0x3a] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - bl SetDirtTile - pop {pc} - - thumb_func_start sub_0805930C -sub_0805930C: @ 0x0805930C - push {r4, lr} - adds r4, r0, #0 - movs r0, #0xf - movs r1, #0x43 -.ifdef EU - movs r2, #0x0 -.else - movs r2, #0x40 -.endif - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805933A - ldr r1, _0805933C @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r4, [r4, #0x3a] - adds r0, r0, r4 - strh r0, [r2, #0x32] - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] -_0805933A: - pop {r4, pc} - .align 2, 0 -_0805933C: .4byte gRoomControls - - thumb_func_start SetDirtTile -SetDirtTile: @ 0x08059340 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x1d - adds r1, r4, #0 - movs r2, #1 - bl SetTileType - movs r0, #0 - adds r1, r4, #0 - movs r2, #2 - bl SetTileType - subs r4, #0x40 - movs r0, #0 - adds r1, r4, #0 - movs r2, #2 - bl SetTileType - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08059368 -sub_08059368: @ 0x08059368 - push {lr} - adds r2, r0, #0 - movs r0, #1 - strb r0, [r2, #0xc] - ldr r1, _08059388 @ =gCurrentTextBox - ldrh r0, [r2, #0x3c] - ldrh r1, [r1, #0x28] - cmp r0, r1 - bne _08059384 - ldrh r0, [r2, #0x3e] - bl SetFlag - bl DeleteThisEntity -_08059384: - pop {pc} - .align 2, 0 -_08059388: .4byte gCurrentTextBox - - thumb_func_start sub_0805938C -sub_0805938C: @ 0x0805938C - push {r4, lr} - adds r4, r0, #0 - bl sub_080593CC - cmp r0, #0 - beq _080593C8 - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #7 - bls _080593CA - movs r1, #0x38 - ldrsh r0, [r4, r1] - ldr r2, _080593C4 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - movs r3, #0x3a - ldrsh r1, [r4, r3] - ldrh r2, [r2, #8] - subs r1, r1, r2 - movs r2, #0xff - movs r3, #0xa - bl sub_080806BC - b _080593CA - .align 2, 0 -_080593C4: .4byte gRoomControls -_080593C8: - strb r0, [r4, #0xe] -_080593CA: - pop {r4, pc} - - thumb_func_start sub_080593CC -sub_080593CC: @ 0x080593CC - push {r4, lr} - adds r3, r0, #0 - ldr r2, _08059418 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08059420 - adds r0, r2, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08059420 - ldr r4, _0805941C @ =gPlayerEntity - ldrb r0, [r4, #0x14] - cmp r0, #0 - bne _08059420 - adds r0, r2, #0 - adds r0, #0x90 - ldrh r1, [r0] - movs r0, #0xf0 - lsls r0, r0, #4 - ands r0, r1 - movs r1, #0x80 - lsls r1, r1, #3 - cmp r0, r1 - bne _08059420 - movs r0, #0x38 - ldrsh r1, [r3, r0] - movs r0, #0x3a - ldrsh r2, [r3, r0] - adds r2, #0xc - adds r0, r4, #0 - movs r3, #6 - bl sub_0806FCB8 - b _08059422 - .align 2, 0 -_08059418: .4byte gPlayerState -_0805941C: .4byte gPlayerEntity -_08059420: - movs r0, #0 -_08059422: - pop {r4, pc} - - thumb_func_start sub_08059424 -sub_08059424: @ 0x08059424 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059436 - bl DeleteThisEntity -_08059436: - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _08059476 - movs r0, #0xf - movs r1, #0x35 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08059476 - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - ldr r1, _08059478 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r4, [r4, #0x3a] - adds r0, r0, r4 - strh r0, [r2, #0x32] - movs r0, #0xd8 - lsls r0, r0, #1 - bl EnqueueSFX - bl DeleteThisEntity -_08059476: - pop {r4, pc} - .align 2, 0 -_08059478: .4byte gRoomControls - - thumb_func_start sub_0805947C -sub_0805947C: @ 0x0805947C - push {lr} - ldrh r0, [r0, #0x3e] - bl CheckFlags - cmp r0, #0 - bne _080594CE - movs r0, #3 - bl sub_08078A90 - ldr r1, _080594B0 @ =gRoomControls - ldrh r0, [r1] - cmp r0, #0 - bne _080594D2 - ldr r0, _080594B4 @ =gRoomVars - ldrb r0, [r0] - cmp r0, #0 - beq _080594BC - ldr r0, _080594B8 @ =gUnk_08108380 - ldrb r1, [r1, #0x10] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r0, [r1] - bl StartPlayerScript - b _080594CE - .align 2, 0 -_080594B0: .4byte gRoomControls -_080594B4: .4byte gRoomVars -_080594B8: .4byte gUnk_08108380 -_080594BC: - ldr r1, _080594D4 @ =gUnk_08108380 - ldr r0, _080594D8 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl StartPlayerScript -_080594CE: - bl DeleteThisEntity -_080594D2: - pop {pc} - .align 2, 0 -_080594D4: .4byte gUnk_08108380 -_080594D8: .4byte gPlayerEntity - -.ifndef EU - thumb_func_start sub_080594DC -sub_080594DC: @ 0x080594DC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _080594F2 - cmp r0, #1 - bgt _0805951C - cmp r0, #0 - bne _0805951C - movs r0, #1 - strb r0, [r4, #0xc] -_080594F2: - movs r0, #6 - bl GetInventoryValue - cmp r0, #0 - beq _08059540 - movs r0, #0x8c - lsls r0, r0, #4 - movs r1, #0x85 - bl CheckLocalFlagByOffset - cmp r0, #0 - bne _08059540 - movs r0, #2 - strb r0, [r4, #0xc] - ldr r0, _08059518 @ =0x00000B0F - bl sub_080186C0 - b _08059540 - .align 2, 0 -_08059518: .4byte 0x00000B0F -_0805951C: - ldr r0, _08059544 @ =gArea - adds r0, #0x28 - ldrb r0, [r0] - cmp r0, #0xff - beq _0805952A - bl DeleteThisEntity -_0805952A: - movs r0, #0x8c - lsls r0, r0, #4 - movs r1, #0x85 - bl CheckLocalFlagByOffset - cmp r0, #0 - beq _08059540 - bl sub_0801855C - bl DeleteThisEntity -_08059540: - pop {r4, pc} - .align 2, 0 -_08059544: .4byte gArea -.endif - - - thumb_func_start sub_08059548 -sub_08059548: @ 0x08059548 -.ifdef USA - push {lr} - movs r1, #6 - bl sub_0805E3A0 - ldr r0, _08059568 @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #0x16 - bne _0805955C - bl DeleteThisEntity -_0805955C: - ldr r2, _0805956C @ =gInput - ldrh r1, [r2] - movs r0, #4 - orrs r0, r1 - strh r0, [r2] - pop {pc} - .align 2, 0 -_08059568: .4byte gPlayerEntity -_0805956C: .4byte gInput -.else -.ifdef DEMO @ TODO deduplicate - push {lr} - movs r1, #6 - bl sub_0805E3A0 - ldr r0, _08059568 @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #0x16 - bne _0805955C - bl DeleteThisEntity -_0805955C: - ldr r2, _0805956C @ =gInput - ldrh r1, [r2] - movs r0, #4 - orrs r0, r1 - strh r0, [r2] - pop {pc} - .align 2, 0 -_08059568: .4byte gPlayerEntity -_0805956C: .4byte gInput -.endif -.endif diff --git a/asm/non_matching/manager1/nullsub_494.inc b/asm/non_matching/manager1/nullsub_494.inc new file mode 100644 index 00000000..807ea5e0 --- /dev/null +++ b/asm/non_matching/manager1/nullsub_494.inc @@ -0,0 +1,4 @@ + .syntax unified + bx lr + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager1/sub_08057174.inc b/asm/non_matching/manager1/sub_08057174.inc new file mode 100644 index 00000000..b718dfab --- /dev/null +++ b/asm/non_matching/manager1/sub_08057174.inc @@ -0,0 +1,147 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xa] + bl GetCurrentRoomProperty + adds r3, r0, #0 + ldrb r0, [r3] + cmp r0, #0xff + bne _08057188 + b _0805728A +_08057188: + ldr r1, _080571E8 @ =gPlayerEntity + movs r2, #0x2e + ldrsh r0, [r1, r2] + cmp r0, #0 + bge _08057194 + adds r0, #0xf +_08057194: + asrs r6, r0, #4 + movs r7, #0x32 + ldrsh r0, [r1, r7] + cmp r0, #0 + bge _080571A0 + adds r0, #0xf +_080571A0: + asrs r5, r0, #4 + movs r0, #0x21 + adds r0, r0, r4 + mov ip, r0 +_080571A8: + ldrb r0, [r3] + mov r1, ip + ldrb r1, [r1] + cmp r0, r1 + beq _08057282 + ldr r1, _080571EC @ =gRoomControls + ldrh r0, [r1, #6] + lsrs r0, r0, #4 + ldrb r7, [r3, #1] + adds r2, r0, r7 + ldrh r0, [r1, #8] + lsrs r0, r0, #4 + ldrb r1, [r3, #2] + adds r0, r0, r1 + subs r0, r5, r0 + ldrb r7, [r3, #4] + cmp r0, r7 + bhs _08057282 + subs r0, r6, r2 + ldrb r1, [r3, #3] + cmp r0, r1 + bhs _08057282 + ldrb r0, [r3] + subs r0, #1 + cmp r0, #5 + bhi _08057268 + lsls r0, r0, #2 + ldr r1, _080571F0 @ =_080571F4 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080571E8: .4byte gPlayerEntity +_080571EC: .4byte gRoomControls +_080571F0: .4byte _080571F4 +_080571F4: @ jump table + .4byte _0805720C @ case 0 + .4byte _08057220 @ case 1 + .4byte _08057258 @ case 2 + .4byte _08057246 @ case 3 + .4byte _08057216 @ case 4 + .4byte _08057236 @ case 5 +_0805720C: + mov r2, ip + ldrb r0, [r2] + cmp r0, #2 + bne _08057268 + b _08057260 +_08057216: + mov r7, ip + ldrb r0, [r7] + cmp r0, #6 + bne _08057268 + b _08057260 +_08057220: + mov r0, ip + ldrb r1, [r0] + cmp r1, #0 + bne _08057268 + movs r0, #2 + strb r0, [r4, #0xc] + strb r1, [r4, #0xe] + adds r0, r4, #0 + adds r0, #0x20 + strb r1, [r0] + b _08057268 +_08057236: + mov r2, ip + ldrb r1, [r2] + cmp r1, #0 + bne _08057268 + movs r0, #2 + strb r0, [r4, #0xc] + strb r1, [r4, #0xe] + b _08057268 +_08057246: + mov r7, ip + ldrb r1, [r7] + cmp r1, #0 + bne _08057268 + movs r0, #2 + strb r0, [r4, #0xc] + strb r1, [r4, #0xe] + str r1, [r4, #0x34] + b _08057268 +_08057258: + mov r1, ip + ldrb r0, [r1] + cmp r0, #4 + bne _08057268 +_08057260: + movs r0, #3 + strb r0, [r4, #0xc] + movs r0, #9 + strb r0, [r4, #0xe] +_08057268: + ldrb r0, [r4, #0xc] + cmp r0, #1 + beq _08057282 + movs r0, #8 + strb r0, [r4, #0xf] + ldrb r0, [r3] + mov r2, ip + strb r0, [r2] + adds r1, r4, #0 + adds r1, #0x22 + movs r0, #1 + strb r0, [r1] + b _0805728A +_08057282: + adds r3, #5 + ldrb r0, [r3] + cmp r0, #0xff + bne _080571A8 +_0805728A: + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/manager1/sub_0805728C.inc b/asm/non_matching/manager1/sub_0805728C.inc new file mode 100644 index 00000000..1a5ee0e7 --- /dev/null +++ b/asm/non_matching/manager1/sub_0805728C.inc @@ -0,0 +1,38 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xf] + subs r0, #1 + strb r0, [r4, #0xf] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _080572CA + movs r0, #8 + strb r0, [r4, #0xf] + ldr r2, _080572CC @ =gScreen + ldr r3, _080572D0 @ =gUnk_08107C1C + ldrb r0, [r4, #0xe] + adds r1, r0, #1 + strb r1, [r4, #0xe] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x17 + adds r0, r0, r3 + ldrh r0, [r0] + adds r2, #0x68 + strh r0, [r2] + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + cmp r1, #0xa + bne _080572CA + movs r0, #1 + strb r0, [r4, #0xc] + adds r1, r4, #0 + adds r1, #0x22 + movs r0, #0 + strb r0, [r1] +_080572CA: + pop {r4, pc} + .align 2, 0 +_080572CC: .4byte gScreen +_080572D0: .4byte gUnk_08107C1C + .syntax divided diff --git a/asm/non_matching/manager1/sub_080572D4.inc b/asm/non_matching/manager1/sub_080572D4.inc new file mode 100644 index 00000000..e752ae35 --- /dev/null +++ b/asm/non_matching/manager1/sub_080572D4.inc @@ -0,0 +1,45 @@ + .syntax unified + push {r4, r5, lr} + adds r3, r0, #0 + ldrb r0, [r3, #0xf] + subs r0, #1 + strb r0, [r3, #0xf] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _08057320 + movs r0, #8 + strb r0, [r3, #0xf] + ldr r5, _08057324 @ =gScreen + ldr r2, _08057328 @ =gUnk_08107C1C + ldrb r0, [r3, #0xe] + adds r1, r0, #0 + adds r1, #0xff + strb r1, [r3, #0xe] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x17 + adds r0, r0, r2 + ldrh r2, [r0] + adds r0, r5, #0 + adds r0, #0x68 + movs r4, #0 + strh r2, [r0] + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + cmp r1, #0xff + bne _08057320 + movs r0, #1 + strb r0, [r3, #0xc] + adds r0, r3, #0 + adds r0, #0x22 + strb r4, [r0] + subs r0, #1 + strb r4, [r0] + adds r0, r5, #0 + adds r0, #0x6c + strb r4, [r0] +_08057320: + pop {r4, r5, pc} + .align 2, 0 +_08057324: .4byte gScreen +_08057328: .4byte gUnk_08107C1C + .syntax divided diff --git a/asm/non_matching/manager1/sub_0805732C.inc b/asm/non_matching/manager1/sub_0805732C.inc new file mode 100644 index 00000000..c7b02ff7 --- /dev/null +++ b/asm/non_matching/manager1/sub_0805732C.inc @@ -0,0 +1,58 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + adds r6, r0, #0 + adds r5, r1, #0 + ldr r2, _08057390 @ =gUnk_03003DE4 + ldrb r1, [r2] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + ldr r1, _08057394 @ =gUnk_02017AA0 + adds r4, r0, r1 + movs r3, #0 + mov ip, r2 + mov r8, r1 + ldr r0, _08057398 @ =gSineTable + mov sb, r0 + movs r2, #0xff + ldr r1, _0805739C @ =gScreen +_08057354: + adds r0, r5, r3 + ands r0, r2 + lsls r0, r0, #1 + add r0, sb + movs r7, #0 + ldrsh r0, [r0, r7] + muls r0, r6, r0 + lsrs r0, r0, #8 + ldrh r7, [r1, #0x2e] + adds r0, r0, r7 + strh r0, [r4] + adds r4, #2 + adds r3, #1 + cmp r3, #0x9f + bls _08057354 + mov r0, ip + ldrb r1, [r0] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + add r0, r8 + ldr r1, _080573A0 @ =0x0400001C + ldr r2, _080573A4 @ =0xA2600001 + bl sub_0805622C + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08057390: .4byte gUnk_03003DE4 +_08057394: .4byte gUnk_02017AA0 +_08057398: .4byte gSineTable +_0805739C: .4byte gScreen +_080573A0: .4byte 0x0400001C +_080573A4: .4byte 0xA2600001 + .syntax divided diff --git a/asm/non_matching/manager1/sub_080573AC.inc b/asm/non_matching/manager1/sub_080573AC.inc new file mode 100644 index 00000000..e38472fe --- /dev/null +++ b/asm/non_matching/manager1/sub_080573AC.inc @@ -0,0 +1,77 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r6, r0, #0 + ldr r2, _08057434 @ =gRoomControls + ldr r0, [r2, #0x28] + ldr r1, _08057438 @ =0xFFFFE000 + adds r0, r0, r1 + str r0, [r2, #0x28] + ldr r0, [r2, #0x2c] + ldr r1, _0805743C @ =0xFFFFF000 + adds r0, r0, r1 + str r0, [r2, #0x2c] + ldr r5, _08057440 @ =gScreen + movs r1, #0xa + ldrsh r0, [r2, r1] + ldrh r1, [r2, #6] + subs r0, r0, r1 + asrs r0, r0, #1 + ldrh r1, [r2, #0x2a] + adds r0, r0, r1 + strh r0, [r5, #0x2e] + movs r1, #0xc + ldrsh r0, [r2, r1] + ldrh r1, [r2, #8] + subs r0, r0, r1 + asrs r0, r0, #1 + ldrh r2, [r2, #0x2e] + adds r0, r0, r2 + strh r0, [r5, #0x30] + ldr r2, _08057444 @ =gSineTable + ldr r4, _08057448 @ =gScreenTransition + ldr r1, [r4] + ldrb r0, [r4] + adds r0, #0x40 + lsls r0, r0, #1 + adds r0, r0, r2 + movs r2, #0 + ldrsh r0, [r0, r2] + asrs r0, r0, #5 + adds r0, #0x10 + bl sub_0805732C + adds r0, r6, #0 + adds r0, #0x22 + ldrb r0, [r0] + cmp r0, #0 + bne _08057430 + ldr r0, [r4] + movs r1, #0x1f + ands r0, r1 + cmp r0, #0 + bne _08057430 + adds r2, r6, #0 + adds r2, #0x24 + ldrb r0, [r2] + adds r0, #1 + movs r1, #7 + ands r0, r1 + strb r0, [r2] + ldr r1, _0805744C @ =gUnk_08107C30 + ldrb r0, [r2] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r1, [r0] + adds r0, r5, #0 + adds r0, #0x68 + strh r1, [r0] +_08057430: + pop {r4, r5, r6, pc} + .align 2, 0 +_08057434: .4byte gRoomControls +_08057438: .4byte 0xFFFFE000 +_0805743C: .4byte 0xFFFFF000 +_08057440: .4byte gScreen +_08057444: .4byte gSineTable +_08057448: .4byte gScreenTransition +_0805744C: .4byte gUnk_08107C30 + .syntax divided diff --git a/asm/non_matching/manager1/sub_08057450.inc b/asm/non_matching/manager1/sub_08057450.inc new file mode 100644 index 00000000..c1608a37 --- /dev/null +++ b/asm/non_matching/manager1/sub_08057450.inc @@ -0,0 +1,102 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r3, r0, #0 + ldr r4, _08057504 @ =gScreen + movs r0, #0x10 + strh r0, [r4, #0x2e] + ldr r0, _08057508 @ =gRoomControls + movs r2, #0xc + ldrsh r1, [r0, r2] + ldrh r0, [r0, #8] + subs r1, r1, r0 + asrs r1, r1, #2 + movs r2, #0x3f + adds r0, r1, #0 + ands r0, r2 + strh r0, [r4, #0x30] + cmp r1, #0 + bge _08057474 + adds r1, #0x3f +_08057474: + asrs r0, r1, #6 + lsls r0, r0, #9 + ldr r1, _0805750C @ =gBG3Buffer + adds r1, r0, r1 + str r1, [r4, #0x34] + ldr r0, [r3, #0x34] + cmp r0, r1 + beq _0805748A + str r1, [r3, #0x34] + movs r0, #1 + strh r0, [r4, #0x32] +_0805748A: + adds r0, r3, #0 + adds r0, #0x22 + ldrb r0, [r0] + ldr r5, _08057510 @ =gScreenTransition + cmp r0, #0 + bne _080574BE + ldr r0, [r5] + movs r1, #0x1f + ands r0, r1 + cmp r0, #0 + bne _080574BE + adds r2, r3, #0 + adds r2, #0x24 + ldrb r0, [r2] + adds r0, #1 + movs r1, #7 + ands r0, r1 + strb r0, [r2] + ldr r1, _08057514 @ =gUnk_08107C30 + ldrb r0, [r2] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r1, [r0] + adds r0, r4, #0 + adds r0, #0x68 + strh r1, [r0] +_080574BE: + ldr r0, [r5] + movs r1, #7 + ands r0, r1 + cmp r0, #0 + bne _08057502 + adds r0, r3, #0 + adds r0, #0x23 + ldrb r1, [r0] + lsls r1, r1, #5 + ldr r2, _08057518 @ =gUnk_085B4180 + adds r1, r1, r2 + movs r5, #0 + adds r6, r0, #0 + adds r4, r1, #0 + adds r4, #0xe +_080574DC: + adds r0, r5, #0 + adds r0, #0x87 + ldrh r1, [r4] + bl sub_0801D79C + adds r0, r5, #0 + adds r0, #0x8c + ldrh r1, [r4, #0xa] + bl sub_0801D79C + adds r4, #2 + adds r5, #1 + cmp r5, #3 + bls _080574DC + ldrb r0, [r6] + adds r0, #1 + movs r1, #3 + ands r0, r1 + strb r0, [r6] +_08057502: + pop {r4, r5, r6, pc} + .align 2, 0 +_08057504: .4byte gScreen +_08057508: .4byte gRoomControls +_0805750C: .4byte gBG3Buffer +_08057510: .4byte gScreenTransition +_08057514: .4byte gUnk_08107C30 +_08057518: .4byte gUnk_085B4180 + .syntax divided diff --git a/asm/non_matching/manager10/Manager10_Main.inc b/asm/non_matching/manager10/Manager10_Main.inc new file mode 100644 index 00000000..b352c800 --- /dev/null +++ b/asm/non_matching/manager10/Manager10_Main.inc @@ -0,0 +1,56 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldrb r5, [r4, #0xc] + cmp r5, #0 + bne _080595C8 + movs r6, #1 + strb r6, [r4, #0xc] + adds r0, #0x21 + strb r5, [r0] + adds r0, #2 + strb r5, [r0] + bl sub_0805986C + cmp r0, #0 + beq _080595A8 + adds r0, r4, #0 + adds r0, #0x20 + strb r6, [r0] + adds r1, r4, #0 + adds r1, #0x22 + movs r0, #2 + strb r0, [r1] + ldr r0, _080595A4 @ =gUnk_0200B650 + str r5, [r0] + b _080595B8 + .align 2, 0 +_080595A4: .4byte gUnk_0200B650 +_080595A8: + adds r0, r4, #0 + adds r0, #0x20 + movs r1, #0x1f + strb r1, [r0] + adds r1, r4, #0 + adds r1, #0x22 + movs r0, #5 + strb r0, [r1] +_080595B8: + ldr r0, _080595DC @ =gRoomVars + movs r1, #0xff + strb r1, [r0, #0x10] + ldr r1, _080595E0 @ =sub_080595E4 + adds r0, r4, #0 + movs r2, #0 + bl sub_08052D74 +_080595C8: + adds r0, r4, #0 + bl sub_08059608 + adds r0, r4, #0 + bl sub_08059690 + adds r0, r4, #0 + bl sub_080596E0 + pop {r4, r5, r6, pc} + .align 2, 0 +_080595DC: .4byte gRoomVars +_080595E0: .4byte sub_080595E4 + .syntax divided diff --git a/asm/non_matching/manager10/sub_080595E4.inc b/asm/non_matching/manager10/sub_080595E4.inc new file mode 100644 index 00000000..21842a1e --- /dev/null +++ b/asm/non_matching/manager10/sub_080595E4.inc @@ -0,0 +1,16 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r1, _08059604 @ =gRoomVars + movs r0, #0xff + strb r0, [r1, #0x10] + adds r0, r4, #0 + bl sub_08059690 + adds r0, r4, #0 + bl sub_080596E0 + movs r0, #0 + bl sub_0805B4D0 + pop {r4, pc} + .align 2, 0 +_08059604: .4byte gRoomVars + .syntax divided diff --git a/asm/non_matching/manager10/sub_08059608.inc b/asm/non_matching/manager10/sub_08059608.inc new file mode 100644 index 00000000..93a1156a --- /dev/null +++ b/asm/non_matching/manager10/sub_08059608.inc @@ -0,0 +1,65 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + adds r4, #0x23 + ldrb r0, [r4] + cmp r0, #0 + beq _08059638 + subs r0, #1 + strb r0, [r4] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _08059682 + ldr r0, _08059634 @ =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] + bl SoundReq + b _08059682 + .align 2, 0 +_08059634: .4byte gArea +_08059638: + bl sub_0805986C + cmp r0, #0 + beq _08059668 + ldr r0, _0805965C @ =gArea + ldr r2, _08059660 @ =0x00000864 + adds r1, r0, r2 + ldr r0, [r1] + cmp r0, #0x1e + beq _08059682 + movs r0, #0x1e + str r0, [r1] + movs r0, #0x78 + strb r0, [r4] + ldr r0, _08059664 @ =0x800D0000 + bl SoundReq + b _08059682 + .align 2, 0 +_0805965C: .4byte gArea +_08059660: .4byte 0x00000864 +_08059664: .4byte 0x800D0000 +_08059668: + ldr r0, _08059684 @ =gArea + ldr r2, _08059688 @ =0x00000864 + adds r1, r0, r2 + ldr r0, [r1] + cmp r0, #0x37 + beq _08059682 + movs r0, #0x37 + str r0, [r1] + movs r0, #0x78 + strb r0, [r4] + ldr r0, _0805968C @ =0x800D0000 + bl SoundReq +_08059682: + pop {r4, pc} + .align 2, 0 +_08059684: .4byte gArea +_08059688: .4byte 0x00000864 +_0805968C: .4byte 0x800D0000 + .syntax divided diff --git a/asm/non_matching/manager10/sub_08059690.inc b/asm/non_matching/manager10/sub_08059690.inc new file mode 100644 index 00000000..b2d66b45 --- /dev/null +++ b/asm/non_matching/manager10/sub_08059690.inc @@ -0,0 +1,41 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + bl sub_08059844 + cmp r0, #0 + beq _080596BC + adds r4, #0x20 + ldrb r0, [r4] + cmp r0, #0 + beq _080596D8 + ldr r0, _080596B8 @ =gUnk_085A7320 + movs r2, #0xd0 + lsls r2, r2, #1 + adds r1, r0, r2 + ldrb r2, [r4] + bl sub_08059894 + ldrb r0, [r4] + subs r0, #1 + b _080596D6 + .align 2, 0 +_080596B8: .4byte gUnk_085A7320 +_080596BC: + adds r4, #0x20 + ldrb r0, [r4] + cmp r0, #0x1f + bhi _080596D8 + ldr r0, _080596DC @ =gUnk_085A7320 + movs r2, #0xd0 + lsls r2, r2, #1 + adds r1, r0, r2 + ldrb r2, [r4] + bl sub_08059894 + ldrb r0, [r4] + adds r0, #1 +_080596D6: + strb r0, [r4] +_080596D8: + pop {r4, pc} + .align 2, 0 +_080596DC: .4byte gUnk_085A7320 + .syntax divided diff --git a/asm/non_matching/manager10/sub_080596E0.inc b/asm/non_matching/manager10/sub_080596E0.inc new file mode 100644 index 00000000..8198dbe6 --- /dev/null +++ b/asm/non_matching/manager10/sub_080596E0.inc @@ -0,0 +1,175 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldr r0, _08059730 @ =gScreenTransition + ldr r0, [r0] + movs r1, #7 + ands r0, r1 + cmp r0, #0 + bne _080596FC + ldr r0, _08059734 @ =gScreen + ldrh r1, [r0, #0x16] + adds r1, #8 + movs r2, #0x1f + ands r1, r2 + strh r1, [r0, #0x16] +_080596FC: + bl sub_0805986C + cmp r0, #0 + beq _08059740 + adds r0, r4, #0 + adds r0, #0x21 + ldrb r1, [r0] + adds r5, r0, #0 + adds r2, r4, #0 + adds r2, #0x22 + cmp r1, #0 + bne _08059764 + ldrb r0, [r2] + cmp r0, #2 + beq _08059764 + movs r0, #1 + strb r0, [r5] + movs r0, #3 + strb r0, [r2] + ldr r0, _08059738 @ =gUnk_08108390 + ldrb r0, [r0, #3] + strb r0, [r4, #0xe] + ldr r0, _0805973C @ =gUnk_0200B650 + str r1, [r0] + b _08059764 + .align 2, 0 +_08059730: .4byte gScreenTransition +_08059734: .4byte gScreen +_08059738: .4byte gUnk_08108390 +_0805973C: .4byte gUnk_0200B650 +_08059740: + adds r0, r4, #0 + adds r0, #0x21 + ldrb r1, [r0] + adds r5, r0, #0 + adds r2, r4, #0 + adds r2, #0x22 + cmp r1, #0 + bne _08059764 + ldrb r0, [r2] + cmp r0, #5 + beq _08059764 + movs r0, #2 + strb r0, [r5] + ldr r1, _08059774 @ =gUnk_08108390 + ldrb r0, [r2] + adds r0, r0, r1 + ldrb r0, [r0] + strb r0, [r4, #0xe] +_08059764: + adds r6, r5, #0 + ldrb r0, [r6] + cmp r0, #1 + beq _08059778 + cmp r0, #2 + beq _080597A8 + b _080597D0 + .align 2, 0 +_08059774: .4byte gUnk_08108390 +_08059778: + ldrb r0, [r4, #0xe] + subs r0, #1 + strb r0, [r4, #0xe] + movs r3, #0xff + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #0 + bne _080597D0 + ldr r1, _080597A4 @ =gUnk_08108390 + ldrb r0, [r2] + subs r0, #1 + strb r0, [r2] + ands r0, r3 + adds r0, r0, r1 + ldrb r0, [r0] + strb r0, [r4, #0xe] + ldrb r0, [r2] + cmp r0, #2 + bne _080597D0 + strb r5, [r6] + b _080597D0 + .align 2, 0 +_080597A4: .4byte gUnk_08108390 +_080597A8: + ldrb r0, [r4, #0xe] + subs r0, #1 + strb r0, [r4, #0xe] + movs r3, #0xff + lsls r0, r0, #0x18 + lsrs r6, r0, #0x18 + cmp r6, #0 + bne _080597D0 + ldr r1, _080597EC @ =gUnk_08108390 + ldrb r0, [r2] + adds r0, #1 + strb r0, [r2] + ands r0, r3 + adds r0, r0, r1 + ldrb r0, [r0] + strb r0, [r4, #0xe] + ldrb r0, [r2] + cmp r0, #5 + bne _080597D0 + strb r6, [r5] +_080597D0: + ldr r3, _080597F0 @ =gRoomVars + ldrb r1, [r2] + ldrb r0, [r3, #0x10] + cmp r0, r1 + beq _08059838 + strb r1, [r3, #0x10] + ldrb r0, [r2] + cmp r0, #4 + beq _08059800 + cmp r0, #4 + ble _080597F4 + cmp r0, #5 + beq _08059824 + b _08059838 + .align 2, 0 +_080597EC: .4byte gUnk_08108390 +_080597F0: .4byte gRoomVars +_080597F4: + cmp r0, #0 + blt _08059838 + adds r0, #0x2b + bl LoadGfxGroup + b _08059838 +_08059800: + ldr r4, _0805981C @ =gBG3Buffer + movs r5, #0x80 + lsls r5, r5, #4 + adds r0, r4, #0 + adds r1, r5, #0 + bl MemClear + ldr r1, _08059820 @ =0x0600E800 + adds r0, r4, #0 + adds r2, r5, #0 + bl LoadResourceAsync + b _08059838 + .align 2, 0 +_0805981C: .4byte gBG3Buffer +_08059820: .4byte 0x0600E800 +_08059824: + ldr r0, _0805983C @ =gUnk_0200B650 + ldr r1, _08059840 @ =gBG1Settings + str r1, [r0] + subs r1, #0x14 + ldrh r2, [r1] + movs r3, #0x80 + lsls r3, r3, #2 + adds r0, r3, #0 + orrs r0, r2 + strh r0, [r1] +_08059838: + pop {r4, r5, r6, pc} + .align 2, 0 +_0805983C: .4byte gUnk_0200B650 +_08059840: .4byte gBG1Settings + .syntax divided diff --git a/asm/non_matching/manager10/sub_08059844.inc b/asm/non_matching/manager10/sub_08059844.inc new file mode 100644 index 00000000..f898b690 --- /dev/null +++ b/asm/non_matching/manager10/sub_08059844.inc @@ -0,0 +1,21 @@ + .syntax unified + push {lr} + movs r3, #0 + ldr r0, _08059864 @ =gPlayerEntity + movs r2, #0x2e + ldrsh r1, [r0, r2] + ldr r2, _08059868 @ =gRoomControls + ldrh r0, [r2, #6] + subs r1, r1, r0 + ldrh r0, [r2, #0x1e] + lsrs r0, r0, #1 + cmp r1, r0 + ble _0805985E + movs r3, #1 +_0805985E: + adds r0, r3, #0 + pop {pc} + .align 2, 0 +_08059864: .4byte gPlayerEntity +_08059868: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager10/sub_0805986C.inc b/asm/non_matching/manager10/sub_0805986C.inc new file mode 100644 index 00000000..74fc9540 --- /dev/null +++ b/asm/non_matching/manager10/sub_0805986C.inc @@ -0,0 +1,21 @@ + .syntax unified + push {lr} + movs r2, #0 + ldr r0, _0805988C @ =gPlayerEntity + movs r3, #0x2e + ldrsh r1, [r0, r3] + ldr r0, _08059890 @ =gRoomControls + ldrh r0, [r0, #6] + subs r1, r1, r0 + movs r0, #0x80 + lsls r0, r0, #2 + cmp r1, r0 + ble _08059886 + movs r2, #1 +_08059886: + adds r0, r2, #0 + pop {pc} + .align 2, 0 +_0805988C: .4byte gPlayerEntity +_08059890: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager10/sub_08059894.inc b/asm/non_matching/manager10/sub_08059894.inc new file mode 100644 index 00000000..c41861f1 --- /dev/null +++ b/asm/non_matching/manager10/sub_08059894.inc @@ -0,0 +1,47 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + adds r5, r0, #0 + adds r4, r1, #0 + ldr r0, _080598E8 @ =gUnk_020176E0 + mov sb, r0 + movs r6, #0 + lsls r2, r2, #0x18 + mov r8, r2 +_080598AA: + adds r0, r5, #0 + adds r1, r4, #0 + mov r2, sb + mov r7, r8 + lsrs r3, r7, #0x18 + bl sub_08059960 + adds r5, #0x20 + adds r4, #0x20 + movs r0, #0x20 + add sb, r0 + adds r6, #1 + cmp r6, #0xc + bls _080598AA + ldr r0, _080598EC @ =gUnk_02017700 + movs r2, #0x90 + lsls r2, r2, #2 + adds r1, r0, r2 + movs r2, #0x20 + bl MemCopy + ldr r2, _080598F0 @ =gUsedPalettes + ldr r0, [r2] + ldr r1, _080598F4 @ =0x00207FFC + orrs r0, r1 + str r0, [r2] + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080598E8: .4byte gUnk_020176E0 +_080598EC: .4byte gUnk_02017700 +_080598F0: .4byte gUsedPalettes +_080598F4: .4byte 0x00207FFC + .syntax divided diff --git a/asm/non_matching/manager10/sub_080598F8.inc b/asm/non_matching/manager10/sub_080598F8.inc new file mode 100644 index 00000000..ae4525ff --- /dev/null +++ b/asm/non_matching/manager10/sub_080598F8.inc @@ -0,0 +1,54 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + movs r4, #0x1f + adds r3, r0, #0 + ands r3, r4 + lsls r6, r3, #8 + adds r3, r6, #0 + muls r3, r2, r3 + lsrs r6, r3, #5 + adds r3, r1, #0 + ands r3, r4 + lsls r3, r3, #8 + movs r4, #0x20 + subs r4, r4, r2 + muls r3, r4, r3 + lsrs r3, r3, #5 + adds r3, r6, r3 + lsrs r6, r3, #8 + movs r5, #0xf8 + lsls r5, r5, #2 + adds r3, r0, #0 + ands r3, r5 + lsls r7, r3, #3 + adds r3, r7, #0 + muls r3, r2, r3 + lsrs r7, r3, #5 + adds r3, r1, #0 + ands r3, r5 + lsls r3, r3, #3 + muls r3, r4, r3 + lsrs r3, r3, #5 + adds r3, r7, r3 + lsrs r7, r3, #8 + movs r3, #0xf8 + lsls r3, r3, #7 + ands r0, r3 + lsrs r5, r0, #2 + adds r0, r5, #0 + muls r0, r2, r0 + lsrs r5, r0, #5 + ands r1, r3 + lsrs r0, r1, #2 + muls r0, r4, r0 + lsrs r0, r0, #5 + adds r0, r5, r0 + lsrs r5, r0, #8 + lsls r0, r7, #5 + orrs r6, r0 + lsls r0, r5, #0xa + orrs r6, r0 + adds r0, r6, #0 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager10/sub_08059960.inc b/asm/non_matching/manager10/sub_08059960.inc new file mode 100644 index 00000000..49568522 --- /dev/null +++ b/asm/non_matching/manager10/sub_08059960.inc @@ -0,0 +1,28 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r6, r0, #0 + adds r5, r1, #0 + adds r4, r2, #0 + lsls r3, r3, #0x18 + lsrs r3, r3, #0x18 + mov r8, r3 + movs r7, #0 +_08059974: + ldrh r0, [r6] + adds r6, #2 + ldrh r1, [r5] + adds r5, #2 + mov r2, r8 + bl sub_080598F8 + strh r0, [r4] + adds r4, #2 + adds r7, #1 + cmp r7, #0xf + bls _08059974 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager10/sub_08059994.inc b/asm/non_matching/manager10/sub_08059994.inc new file mode 100644 index 00000000..6021e9fe --- /dev/null +++ b/asm/non_matching/manager10/sub_08059994.inc @@ -0,0 +1,18 @@ + .syntax unified + push {lr} + bl sub_0805986C + cmp r0, #0 + beq _080599AE + movs r0, #0x5b + bl LoadPaletteGroup + ldr r0, _080599B0 @ =gArea + ldr r1, _080599B4 @ =0x00000864 + adds r0, r0, r1 + movs r1, #0x1e + str r1, [r0] +_080599AE: + pop {pc} + .align 2, 0 +_080599B0: .4byte gArea +_080599B4: .4byte 0x00000864 + .syntax divided diff --git a/asm/non_matching/manager12/Manager12_Main.inc b/asm/non_matching/manager12/Manager12_Main.inc new file mode 100644 index 00000000..27e66c32 --- /dev/null +++ b/asm/non_matching/manager12/Manager12_Main.inc @@ -0,0 +1,32 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #0 + bne _08059A20 + movs r0, #1 + strb r0, [r4, #0xc] + adds r1, r4, #0 + adds r1, #0x22 + movs r0, #0xff + strb r0, [r1] + subs r1, #1 + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r1] + subs r1, #1 + strb r0, [r1] + ldr r1, _08059A28 @ =sub_08059A2C + adds r0, r4, #0 + movs r2, #0 + bl sub_08052D74 + adds r0, r4, #0 + movs r1, #6 + bl sub_0805E3A0 +_08059A20: + adds r0, r4, #0 + bl sub_08059A58 + pop {r4, pc} + .align 2, 0 +_08059A28: .4byte sub_08059A2C + .syntax divided diff --git a/asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc b/asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc new file mode 100644 index 00000000..366a47e2 --- /dev/null +++ b/asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc @@ -0,0 +1,65 @@ + .syntax unified + push {r4, lr} + ldr r0, _08059D68 @ =gRoomControls + ldrb r0, [r0, #4] + cmp r0, #0x15 + beq _08059D78 + ldr r0, _08059D6C @ =gUnk_08108398 + bl sub_08056300 + adds r4, r0, #0 + cmp r4, #0xff + beq _08059D36 + movs r0, #0 + adds r1, r4, #0 + bl sub_08059CC0 +_08059D36: + ldr r0, _08059D70 @ =gUnk_081083AE + bl sub_08056300 + adds r4, r0, #0 + cmp r4, #0xff + beq _08059D52 + movs r0, #1 + adds r1, r4, #0 + bl sub_08059CC0 + cmp r4, #2 + bne _08059D52 + bl sub_08059B18 +_08059D52: + ldr r0, _08059D74 @ =gUnk_081083C4 + bl sub_08056300 + adds r4, r0, #0 + cmp r4, #0xff + beq _08059DA0 + movs r0, #2 + adds r1, r4, #0 + bl sub_08059CC0 + b _08059DA0 + .align 2, 0 +_08059D68: .4byte gRoomControls +_08059D6C: .4byte gUnk_08108398 +_08059D70: .4byte gUnk_081083AE +_08059D74: .4byte gUnk_081083C4 +_08059D78: + ldr r0, _08059DA4 @ =gUnk_081083DA + bl sub_08056300 + adds r4, r0, #0 + cmp r4, #0xff + beq _08059D8C + movs r0, #0 + adds r1, r4, #0 + bl sub_08059CC0 +_08059D8C: + ldr r0, _08059DA8 @ =gUnk_081083F2 + bl sub_08056300 + adds r4, r0, #0 + cmp r4, #0xff + beq _08059DA0 + movs r0, #2 + adds r1, r4, #0 + bl sub_08059CC0 +_08059DA0: + pop {r4, pc} + .align 2, 0 +_08059DA4: .4byte gUnk_081083DA +_08059DA8: .4byte gUnk_081083F2 + .syntax divided diff --git a/asm/non_matching/manager12/sub_08059A2C.inc b/asm/non_matching/manager12/sub_08059A2C.inc new file mode 100644 index 00000000..3288c841 --- /dev/null +++ b/asm/non_matching/manager12/sub_08059A2C.inc @@ -0,0 +1,23 @@ + .syntax unified + push {lr} + adds r2, r0, #0 + ldr r1, _08059A54 @ =gRoomVars + movs r0, #0xff + strb r0, [r1, #0x12] + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r1, #0x11] + strb r0, [r1, #0x10] + adds r1, r2, #0 + adds r1, #0x22 + strb r0, [r1] + subs r1, #1 + strb r0, [r1] + subs r1, #1 + strb r0, [r1] + adds r0, r2, #0 + bl sub_08059A58 + pop {pc} + .align 2, 0 +_08059A54: .4byte gRoomVars + .syntax divided diff --git a/asm/non_matching/manager12/sub_08059A58.inc b/asm/non_matching/manager12/sub_08059A58.inc new file mode 100644 index 00000000..52e7b5e5 --- /dev/null +++ b/asm/non_matching/manager12/sub_08059A58.inc @@ -0,0 +1,87 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r0, #0 + ldr r0, _08059AC4 @ =gRoomControls + ldrb r0, [r0, #4] + cmp r0, #0x15 + beq _08059AD4 + adds r4, r5, #0 + adds r4, #0x20 + ldr r3, _08059AC8 @ =gUnk_08108398 + adds r0, r5, #0 + movs r1, #0 + adds r2, r4, #0 + bl sub_08059C8C + cmp r0, #0 + beq _08059A80 + ldrb r1, [r4] + movs r0, #0 + bl sub_08059CC0 +_08059A80: + adds r4, r5, #0 + adds r4, #0x21 + ldr r3, _08059ACC @ =gUnk_081083AE + adds r0, r5, #0 + movs r1, #1 + adds r2, r4, #0 + bl sub_08059C8C + cmp r0, #0 + beq _08059AA6 + ldrb r1, [r4] + movs r0, #1 + bl sub_08059CC0 + ldrb r0, [r4] + cmp r0, #2 + bne _08059AA6 + bl sub_08059B18 +_08059AA6: + adds r4, r5, #0 + adds r4, #0x22 + ldr r3, _08059AD0 @ =gUnk_081083C4 + adds r0, r5, #0 + movs r1, #2 + adds r2, r4, #0 + bl sub_08059C8C + cmp r0, #0 + beq _08059B0C + ldrb r1, [r4] + movs r0, #2 + bl sub_08059CC0 + b _08059B0C + .align 2, 0 +_08059AC4: .4byte gRoomControls +_08059AC8: .4byte gUnk_08108398 +_08059ACC: .4byte gUnk_081083AE +_08059AD0: .4byte gUnk_081083C4 +_08059AD4: + adds r4, r5, #0 + adds r4, #0x20 + ldr r3, _08059B10 @ =gUnk_081083DA + adds r0, r5, #0 + movs r1, #0 + adds r2, r4, #0 + bl sub_08059C8C + cmp r0, #0 + beq _08059AF0 + ldrb r1, [r4] + movs r0, #0 + bl sub_08059CC0 +_08059AF0: + adds r4, r5, #0 + adds r4, #0x22 + ldr r3, _08059B14 @ =gUnk_081083F2 + adds r0, r5, #0 + movs r1, #2 + adds r2, r4, #0 + bl sub_08059C8C + cmp r0, #0 + beq _08059B0C + ldrb r1, [r4] + movs r0, #2 + bl sub_08059CC0 +_08059B0C: + pop {r4, r5, pc} + .align 2, 0 +_08059B10: .4byte gUnk_081083DA +_08059B14: .4byte gUnk_081083F2 + .syntax divided diff --git a/asm/non_matching/manager12/sub_08059B18.inc b/asm/non_matching/manager12/sub_08059B18.inc new file mode 100644 index 00000000..ba1c74d4 --- /dev/null +++ b/asm/non_matching/manager12/sub_08059B18.inc @@ -0,0 +1,172 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + sub sp, #4 + movs r0, #0x18 + bl CheckGlobalFlag + cmp r0, #0 + beq _08059BEC + movs r6, #0 + movs r0, #0x3f + mov sb, r0 + movs r2, #0xc4 + lsls r2, r2, #1 + mov r8, r2 +_08059B38: + movs r5, #0 + lsls r1, r6, #4 + mov r2, r8 + lsrs r0, r2, #4 + mov r2, sb + ands r0, r2 + lsls r3, r0, #6 + movs r7, #0x28 + ldr r0, _08059BD8 @ =0x000004AB + adds r4, r1, r0 +_08059B4C: + lsrs r1, r7, #4 + mov r2, sb + ands r1, r2 + orrs r1, r3 + adds r0, r4, #0 + movs r2, #1 + str r3, [sp] + bl sub_0807B9B8 + adds r7, #0x10 + adds r4, #1 + adds r5, #1 + ldr r3, [sp] + cmp r5, #3 + bls _08059B4C + movs r0, #0x10 + add r8, r0 + adds r6, #1 + cmp r6, #3 + bls _08059B38 + movs r6, #0 + movs r3, #0x3f +_08059B78: + movs r5, #0 + lsls r1, r6, #4 + adds r6, #1 + mov r8, r6 + movs r2, #0xc4 + lsls r2, r2, #1 + adds r0, r1, r2 + lsrs r0, r0, #4 + ands r0, r3 + lsls r7, r0, #6 + movs r6, #0x28 + movs r0, #0x88 + lsls r0, r0, #3 + adds r4, r1, r0 +_08059B94: + lsrs r1, r6, #4 + ands r1, r3 + orrs r1, r7 + adds r0, r4, #0 + movs r2, #2 + str r3, [sp] + bl sub_0807B9B8 + adds r6, #0x10 + adds r4, #1 + adds r5, #1 + ldr r3, [sp] + cmp r5, #3 + bls _08059B94 + mov r6, r8 + cmp r6, #2 + bls _08059B78 + ldr r1, _08059BDC @ =0x000005C2 + movs r0, #0xd6 + movs r2, #2 + bl sub_0807B9B8 + ldr r1, _08059BE0 @ =0x000005C3 + movs r0, #0xd7 + movs r2, #2 + bl sub_0807B9B8 + ldr r0, _08059BE4 @ =gUnk_086E8460 + ldr r1, _08059BE8 @ =0x06001800 + movs r2, #0x80 + lsls r2, r2, #4 + bl LoadResourceAsync + b _08059C5E + .align 2, 0 +_08059BD8: .4byte 0x000004AB +_08059BDC: .4byte 0x000005C2 +_08059BE0: .4byte 0x000005C3 +_08059BE4: .4byte gUnk_086E8460 +_08059BE8: .4byte 0x06001800 +_08059BEC: + movs r0, #0x19 + bl CheckGlobalFlag + cmp r0, #0 + beq _08059C5E + movs r6, #0 + movs r3, #0x3f +_08059BFA: + movs r5, #0 + lsls r1, r6, #4 + adds r6, #1 + mov r8, r6 + movs r2, #0xc4 + lsls r2, r2, #1 + adds r0, r1, r2 + lsrs r0, r0, #4 + ands r0, r3 + lsls r7, r0, #6 + movs r6, #0x28 + ldr r0, _08059C68 @ =0x000004A6 + adds r4, r1, r0 +_08059C14: + lsrs r1, r6, #4 + ands r1, r3 + orrs r1, r7 + adds r0, r4, #0 + movs r2, #1 + str r3, [sp] + bl sub_0807B9B8 + adds r6, #0x10 + adds r4, #1 + adds r5, #1 + ldr r3, [sp] + cmp r5, #3 + bls _08059C14 + mov r6, r8 + cmp r6, #4 + bls _08059BFA + ldr r0, _08059C6C @ =0x00000444 + ldr r1, _08059C70 @ =0x00000602 + movs r2, #2 + bl sub_0807B9B8 + ldr r0, _08059C74 @ =0x00000445 + ldr r1, _08059C78 @ =0x00000605 + movs r2, #2 + bl sub_0807B9B8 + ldr r0, _08059C7C @ =0x00000454 + ldr r1, _08059C80 @ =0x00000642 + movs r2, #2 + bl sub_0807B9B8 + ldr r0, _08059C84 @ =0x00000455 + ldr r1, _08059C88 @ =0x00000645 + movs r2, #2 + bl sub_0807B9B8 +_08059C5E: + add sp, #4 + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08059C68: .4byte 0x000004A6 +_08059C6C: .4byte 0x00000444 +_08059C70: .4byte 0x00000602 +_08059C74: .4byte 0x00000445 +_08059C78: .4byte 0x00000605 +_08059C7C: .4byte 0x00000454 +_08059C80: .4byte 0x00000642 +_08059C84: .4byte 0x00000455 +_08059C88: .4byte 0x00000645 + .syntax divided diff --git a/asm/non_matching/manager12/sub_08059C8C.inc b/asm/non_matching/manager12/sub_08059C8C.inc new file mode 100644 index 00000000..3ac8da37 --- /dev/null +++ b/asm/non_matching/manager12/sub_08059C8C.inc @@ -0,0 +1,28 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r1, #0 + adds r4, r2, #0 + adds r0, r3, #0 + bl sub_08056300 + adds r2, r0, #0 + strb r2, [r4] + lsls r0, r2, #0x18 + lsrs r3, r0, #0x18 + cmp r3, #0xff + beq _08059CBC + ldr r0, _08059CB8 @ =gRoomVars + adds r0, #0x10 + adds r1, r5, r0 + ldrb r0, [r1] + cmp r0, r3 + beq _08059CBC + strb r2, [r1] + movs r0, #1 + b _08059CBE + .align 2, 0 +_08059CB8: .4byte gRoomVars +_08059CBC: + movs r0, #0 +_08059CBE: + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/manager12/sub_08059CC0.inc b/asm/non_matching/manager12/sub_08059CC0.inc new file mode 100644 index 00000000..e0d66ece --- /dev/null +++ b/asm/non_matching/manager12/sub_08059CC0.inc @@ -0,0 +1,41 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r2, r1, #0 + ldr r1, _08059CDC @ =gRoomVars + adds r1, #0x10 + adds r0, r0, r1 + strb r2, [r0] + ldr r0, _08059CE0 @ =gRoomControls + ldrb r0, [r0, #4] + cmp r0, #0x15 + beq _08059CE8 + lsls r1, r2, #4 + ldr r0, _08059CE4 @ =gUnk_08108408 + b _08059CEC + .align 2, 0 +_08059CDC: .4byte gRoomVars +_08059CE0: .4byte gRoomControls +_08059CE4: .4byte gUnk_08108408 +_08059CE8: + lsls r1, r2, #4 + ldr r0, _08059D10 @ =gUnk_08108468 +_08059CEC: + adds r6, r1, r0 + ldr r0, [r6] + ldr r4, _08059D14 @ =gGlobalGfxAndPalettes + adds r0, r0, r4 + ldr r1, [r6, #4] + movs r5, #0x80 + lsls r5, r5, #5 + adds r2, r5, #0 + bl LoadResourceAsync + ldr r0, [r6, #8] + adds r0, r0, r4 + ldr r1, [r6, #0xc] + adds r2, r5, #0 + bl LoadResourceAsync + pop {r4, r5, r6, pc} + .align 2, 0 +_08059D10: .4byte gUnk_08108468 +_08059D14: .4byte gGlobalGfxAndPalettes + .syntax divided diff --git a/asm/manager13.s b/asm/non_matching/manager13/Manager13_Main.inc similarity index 91% rename from asm/manager13.s rename to asm/non_matching/manager13/Manager13_Main.inc index 32d7472c..40c9274e 100644 --- a/asm/manager13.s +++ b/asm/non_matching/manager13/Manager13_Main.inc @@ -1,13 +1,4 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - .syntax unified - - .text - - thumb_func_start Manager13_Main -Manager13_Main: @ 0x08059DAC push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} @@ -95,3 +86,4 @@ _08059E46: _08059E4C: .4byte gRoomControls _08059E50: .4byte gUnk_081084C8 _08059E54: .4byte gUnk_08108530 + .syntax divided diff --git a/asm/non_matching/manager14/Manager14_Main.inc b/asm/non_matching/manager14/Manager14_Main.inc new file mode 100644 index 00000000..da20afe1 --- /dev/null +++ b/asm/non_matching/manager14/Manager14_Main.inc @@ -0,0 +1,19 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x20] + adds r0, #1 + strh r0, [r4, #0x20] + ldr r1, _08059E7C @ =gUnk_081085A4 + ldrb r0, [r4, #0xc] + 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_0805A1D8 + pop {r4, pc} + .align 2, 0 +_08059E7C: .4byte gUnk_081085A4 + .syntax divided diff --git a/asm/non_matching/manager14/nullsub_495.inc b/asm/non_matching/manager14/nullsub_495.inc new file mode 100644 index 00000000..807ea5e0 --- /dev/null +++ b/asm/non_matching/manager14/nullsub_495.inc @@ -0,0 +1,4 @@ + .syntax unified + bx lr + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager14/sub_08059E80.inc b/asm/non_matching/manager14/sub_08059E80.inc new file mode 100644 index 00000000..1b598506 --- /dev/null +++ b/asm/non_matching/manager14/sub_08059E80.inc @@ -0,0 +1,55 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + bl EntityHasDuplicateID + cmp r0, #0 + beq _08059E90 + bl DeleteThisEntity +_08059E90: + adds r1, r4, #0 + adds r1, #0x22 + movs r2, #0 + movs r0, #1 + strb r0, [r1] + movs r0, #0 + strh r2, [r4, #0x20] + strb r0, [r4, #0xe] + movs r0, #4 + strb r0, [r4, #0xf] + strb r0, [r4, #0xc] + ldrb r1, [r4, #0x10] + movs r0, #0x20 + orrs r0, r1 + strb r0, [r4, #0x10] + ldr r3, _08059EE4 @ =gScreen + ldr r0, _08059EE8 @ =0x00001E04 + strh r0, [r3, #0x2c] + ldrh r0, [r3] + movs r5, #0x80 + lsls r5, r5, #4 + adds r1, r5, #0 + orrs r0, r1 + strh r0, [r3] + adds r1, r3, #0 + adds r1, #0x66 + ldr r0, _08059EEC @ =0x00003E48 + strh r0, [r1] + adds r1, #2 + movs r0, #0x80 + lsls r0, r0, #5 + strh r0, [r1] + movs r0, #0x80 + strh r0, [r3, #0x2e] + strh r2, [r3, #0x30] + ldr r1, _08059EF0 @ =nullsub_495 + ldr r2, _08059EF4 @ =sub_0805A25C + adds r0, r4, #0 + bl sub_08052D74 + pop {r4, r5, pc} + .align 2, 0 +_08059EE4: .4byte gScreen +_08059EE8: .4byte 0x00001E04 +_08059EEC: .4byte 0x00003E48 +_08059EF0: .4byte nullsub_495 +_08059EF4: .4byte sub_0805A25C + .syntax divided diff --git a/asm/non_matching/manager14/sub_08059EF8.inc b/asm/non_matching/manager14/sub_08059EF8.inc new file mode 100644 index 00000000..08bcb5db --- /dev/null +++ b/asm/non_matching/manager14/sub_08059EF8.inc @@ -0,0 +1,81 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xf] + subs r0, #1 + strb r0, [r4, #0xf] + movs r6, #0xff + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #0 + bne _08059F90 + movs r0, #4 + strb r0, [r4, #0xf] + adds r0, r4, #0 + bl sub_08059F9C + cmp r0, #0 + beq _08059F64 + ldr r2, _08059F50 @ =gUnk_08108588 + ldrb r0, [r4, #0xe] + lsls r0, r0, #1 + adds r0, r0, r2 + ldrh r1, [r0] + ldr r0, _08059F54 @ =0x00000808 + cmp r1, r0 + beq _08059F5C + adds r1, r4, #0 + adds r1, #0x22 + movs r0, #1 + strb r0, [r1] + adds r0, r4, #0 + adds r0, #0x24 + strb r5, [r0] + ldr r1, _08059F58 @ =gScreen + ldrb r0, [r4, #0xe] + adds r0, #1 + strb r0, [r4, #0xe] + ands r0, r6 + lsls r0, r0, #1 + adds r0, r0, r2 + ldrh r0, [r0] + adds r1, #0x68 + strh r0, [r1] + b _08059F90 + .align 2, 0 +_08059F50: .4byte gUnk_08108588 +_08059F54: .4byte 0x00000808 +_08059F58: .4byte gScreen +_08059F5C: + adds r0, r4, #0 + adds r0, #0x22 + strb r5, [r0] + b _08059F90 +_08059F64: + adds r1, r4, #0 + adds r1, #0x22 + movs r0, #1 + strb r0, [r1] + ldr r3, _08059F94 @ =gUnk_08108588 + ldrb r2, [r4, #0xe] + lsls r0, r2, #1 + adds r0, r0, r3 + ldrh r1, [r0] + movs r0, #0x80 + lsls r0, r0, #5 + cmp r1, r0 + beq _08059F90 + ldr r0, _08059F98 @ =gScreen + subs r1, r2, #1 + strb r1, [r4, #0xe] + ands r1, r6 + lsls r1, r1, #1 + adds r1, r1, r3 + ldrh r1, [r1] + adds r0, #0x68 + strh r1, [r0] +_08059F90: + pop {r4, r5, r6, pc} + .align 2, 0 +_08059F94: .4byte gUnk_08108588 +_08059F98: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/manager14/sub_08059F9C.inc b/asm/non_matching/manager14/sub_08059F9C.inc new file mode 100644 index 00000000..55a7686f --- /dev/null +++ b/asm/non_matching/manager14/sub_08059F9C.inc @@ -0,0 +1,61 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r0, _08059FB4 @ =gRoomControls + ldrb r0, [r0, #5] + cmp r0, #0x17 + bhi _0805A03A + lsls r0, r0, #2 + ldr r1, _08059FB8 @ =_08059FBC + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08059FB4: .4byte gRoomControls +_08059FB8: .4byte _08059FBC +_08059FBC: @ jump table + .4byte _0805A036 @ case 0 + .4byte _0805A01C @ case 1 + .4byte _0805A03A @ case 2 + .4byte _0805A03A @ case 3 + .4byte _0805A03A @ case 4 + .4byte _0805A03A @ case 5 + .4byte _0805A03A @ case 6 + .4byte _0805A02A @ case 7 + .4byte _0805A036 @ case 8 + .4byte _0805A036 @ case 9 + .4byte _0805A03A @ case 10 + .4byte _0805A03A @ case 11 + .4byte _0805A03A @ case 12 + .4byte _0805A03A @ case 13 + .4byte _0805A03A @ case 14 + .4byte _0805A03A @ case 15 + .4byte _0805A03A @ case 16 + .4byte _0805A03A @ case 17 + .4byte _0805A03A @ case 18 + .4byte _0805A03A @ case 19 + .4byte _0805A03A @ case 20 + .4byte _0805A03A @ case 21 + .4byte _0805A03A @ case 22 + .4byte _0805A036 @ case 23 +_0805A01C: + movs r0, #0x16 + bl CheckLocalFlag + cmp r0, #0 + beq _0805A02A + movs r0, #0 + b _0805A03C +_0805A02A: + adds r0, r4, #0 + bl sub_0805A25C + bl DeleteThisEntity + b _0805A03C +_0805A036: + movs r0, #1 + b _0805A03C +_0805A03A: + movs r0, #0 +_0805A03C: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager14/sub_0805A040.inc b/asm/non_matching/manager14/sub_0805A040.inc new file mode 100644 index 00000000..b326f001 --- /dev/null +++ b/asm/non_matching/manager14/sub_0805A040.inc @@ -0,0 +1,5 @@ + .syntax unified + push {lr} + bl sub_0805A098 + pop {pc} + .syntax divided diff --git a/asm/non_matching/manager14/sub_0805A048.inc b/asm/non_matching/manager14/sub_0805A048.inc new file mode 100644 index 00000000..1e744aea --- /dev/null +++ b/asm/non_matching/manager14/sub_0805A048.inc @@ -0,0 +1,40 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xf] + subs r0, #1 + strb r0, [r4, #0xf] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805A086 + movs r0, #4 + strb r0, [r4, #0xf] + ldr r2, _0805A090 @ =gScreen + ldr r3, _0805A094 @ =gUnk_08108588 + ldrb r0, [r4, #0xe] + adds r1, r0, #1 + strb r1, [r4, #0xe] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x17 + adds r0, r0, r3 + ldrh r0, [r0] + adds r2, #0x68 + strh r0, [r2] + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + cmp r1, #9 + bne _0805A086 + movs r0, #1 + strb r0, [r4, #0xc] + adds r1, r4, #0 + adds r1, #0x22 + movs r0, #0 + strb r0, [r1] +_0805A086: + adds r0, r4, #0 + bl sub_0805A098 + pop {r4, pc} + .align 2, 0 +_0805A090: .4byte gScreen +_0805A094: .4byte gUnk_08108588 + .syntax divided diff --git a/asm/non_matching/manager14/sub_0805A098.inc b/asm/non_matching/manager14/sub_0805A098.inc new file mode 100644 index 00000000..76e0471d --- /dev/null +++ b/asm/non_matching/manager14/sub_0805A098.inc @@ -0,0 +1,24 @@ + .syntax unified + push {lr} + adds r1, r0, #0 + ldr r0, _0805A0B0 @ =gRoomControls + ldrb r0, [r0, #5] + cmp r0, #9 + bgt _0805A0B4 + cmp r0, #8 + bge _0805A0BC + cmp r0, #0 + beq _0805A0BC + b _0805A0B8 + .align 2, 0 +_0805A0B0: .4byte gRoomControls +_0805A0B4: + cmp r0, #0x17 + beq _0805A0BC +_0805A0B8: + movs r0, #3 + strb r0, [r1, #0xc] +_0805A0BC: + pop {pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager14/sub_0805A0C0.inc b/asm/non_matching/manager14/sub_0805A0C0.inc new file mode 100644 index 00000000..0e67a842 --- /dev/null +++ b/asm/non_matching/manager14/sub_0805A0C0.inc @@ -0,0 +1,41 @@ + .syntax unified + push {r4, lr} + adds r3, r0, #0 + ldrb r0, [r3, #0xf] + subs r0, #1 + strb r0, [r3, #0xf] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805A106 + movs r0, #4 + strb r0, [r3, #0xf] + ldr r4, _0805A108 @ =gScreen + ldr r2, _0805A10C @ =gUnk_08108588 + ldrb r0, [r3, #0xe] + adds r1, r0, #0 + adds r1, #0xff + strb r1, [r3, #0xe] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x17 + adds r0, r0, r2 + ldrh r2, [r0] + adds r0, r4, #0 + adds r0, #0x68 + strh r2, [r0] + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + cmp r1, #0xff + bne _0805A106 + ldrh r1, [r4] + ldr r0, _0805A110 @ =0x0000F7FF + ands r0, r1 + strh r0, [r4] + bl sub_08056250 + bl DeleteThisEntity +_0805A106: + pop {r4, pc} + .align 2, 0 +_0805A108: .4byte gScreen +_0805A10C: .4byte gUnk_08108588 +_0805A110: .4byte 0x0000F7FF + .syntax divided diff --git a/asm/non_matching/manager14/sub_0805A114.inc b/asm/non_matching/manager14/sub_0805A114.inc new file mode 100644 index 00000000..553675ce --- /dev/null +++ b/asm/non_matching/manager14/sub_0805A114.inc @@ -0,0 +1,92 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + adds r7, r0, #0 + adds r6, r1, #0 + ldr r2, _0805A154 @ =gUnk_03003DE4 + ldrb r1, [r2] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + ldr r1, _0805A158 @ =gUnk_02017AA0 + adds r4, r0, r1 + movs r5, #0 + mov r8, r2 + mov sb, r1 + ldr r2, _0805A15C @ =gScreen + ldr r0, _0805A160 @ =gSineTable + mov ip, r0 +_0805A13A: + movs r1, #0x30 + ldrsh r0, [r2, r1] + adds r3, r5, r0 + asrs r1, r3, #3 + movs r0, #7 + ands r1, r0 + cmp r1, #7 + bhi _0805A190 + lsls r0, r1, #2 + ldr r1, _0805A164 @ =_0805A168 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0805A154: .4byte gUnk_03003DE4 +_0805A158: .4byte gUnk_02017AA0 +_0805A15C: .4byte gScreen +_0805A160: .4byte gSineTable +_0805A164: .4byte _0805A168 +_0805A168: @ jump table + .4byte _0805A190 @ case 0 + .4byte _0805A18C @ case 1 + .4byte _0805A190 @ case 2 + .4byte _0805A190 @ case 3 + .4byte _0805A188 @ case 4 + .4byte _0805A190 @ case 5 + .4byte _0805A190 @ case 6 + .4byte _0805A18C @ case 7 +_0805A188: + subs r3, #8 + b _0805A190 +_0805A18C: + movs r0, #0xf0 + b _0805A192 +_0805A190: + movs r0, #0xf8 +_0805A192: + ands r3, r0 + adds r0, r6, r3 + movs r1, #0xff + ands r0, r1 + lsls r0, r0, #1 + add r0, ip + movs r1, #0 + ldrsh r0, [r0, r1] + muls r0, r7, r0 + lsrs r0, r0, #8 + ldrh r1, [r2, #0x2e] + adds r0, r0, r1 + strh r0, [r4] + adds r4, #2 + adds r5, #1 + cmp r5, #0x9f + ble _0805A13A + mov r0, r8 + ldrb r1, [r0] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + add r0, sb + ldr r1, _0805A1D0 @ =0x0400001C + ldr r2, _0805A1D4 @ =0xA2600001 + bl sub_0805622C + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0805A1D0: .4byte 0x0400001C +_0805A1D4: .4byte 0xA2600001 + .syntax divided diff --git a/asm/non_matching/manager14/sub_0805A1D8.inc b/asm/non_matching/manager14/sub_0805A1D8.inc new file mode 100644 index 00000000..a91affc4 --- /dev/null +++ b/asm/non_matching/manager14/sub_0805A1D8.inc @@ -0,0 +1,61 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + ldr r1, _0805A244 @ =gRoomControls + ldr r0, [r1, #0x28] + ldr r2, _0805A248 @ =0xFFFFF000 + adds r0, r0, r2 + str r0, [r1, #0x28] + ldr r5, _0805A24C @ =gScreen + ldrh r0, [r1, #0x2a] + strh r0, [r5, #0x2e] + ldr r0, [r1, #0x2c] + adds r0, r0, r2 + str r0, [r1, #0x2c] + ldrh r0, [r1, #0x2e] + strh r0, [r5, #0x30] + ldrh r1, [r5] + movs r0, #0x80 + lsls r0, r0, #4 + ands r0, r1 + cmp r0, #0 + beq _0805A240 + ldrh r1, [r4, #0x20] + lsrs r1, r1, #1 + movs r0, #6 + bl sub_0805A114 + adds r0, r4, #0 + adds r0, #0x22 + ldrb r0, [r0] + cmp r0, #0 + bne _0805A240 + ldr r0, _0805A250 @ =gMain + ldrh r1, [r0, #0xc] + movs r0, #0x1f + ands r0, r1 + cmp r0, #0 + bne _0805A240 + adds r2, r4, #0 + adds r2, #0x24 + ldrb r0, [r2] + adds r0, #1 + movs r1, #3 + ands r0, r1 + strb r0, [r2] + ldr r1, _0805A254 @ =gUnk_0810859A + ldrb r0, [r2] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r1, [r0] + adds r0, r5, #0 + adds r0, #0x68 + strh r1, [r0] +_0805A240: + pop {r4, r5, pc} + .align 2, 0 +_0805A244: .4byte gRoomControls +_0805A248: .4byte 0xFFFFF000 +_0805A24C: .4byte gScreen +_0805A250: .4byte gMain +_0805A254: .4byte gUnk_0810859A + .syntax divided diff --git a/asm/non_matching/manager14/sub_0805A25C.inc b/asm/non_matching/manager14/sub_0805A25C.inc new file mode 100644 index 00000000..6a989185 --- /dev/null +++ b/asm/non_matching/manager14/sub_0805A25C.inc @@ -0,0 +1,17 @@ + .syntax unified + push {lr} + ldr r1, _0805A278 @ =gScreen + adds r2, r1, #0 + adds r2, #0x66 + movs r0, #0 + strh r0, [r2] + ldrh r2, [r1] + ldr r0, _0805A27C @ =0x0000F7FF + ands r0, r2 + strh r0, [r1] + bl sub_08056250 + pop {pc} + .align 2, 0 +_0805A278: .4byte gScreen +_0805A27C: .4byte 0x0000F7FF + .syntax divided diff --git a/asm/manager16.s b/asm/non_matching/manager16/Manager16_Main.inc similarity index 68% rename from asm/manager16.s rename to asm/non_matching/manager16/Manager16_Main.inc index b5d6e1f4..8c424e8d 100644 --- a/asm/manager16.s +++ b/asm/non_matching/manager16/Manager16_Main.inc @@ -1,13 +1,4 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - .syntax unified - - .text - - thumb_func_start Manager16_Main -Manager16_Main: @ 0x0805AB4C push {r4, r5, r6, r7, lr} mov r7, sl mov r6, sb @@ -190,76 +181,4 @@ _0805ACAA: pop {r4, r5, r6, r7, pc} .align 2, 0 _0805ACBC: .4byte gRoomControls - - thumb_func_start sub_0805ACC0 -sub_0805ACC0: @ 0x0805ACC0 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r0, #0x45 - ldrb r1, [r0] - cmp r1, #0 - bne _0805ACF0 - b _0805AD32 -_0805ACD0: - ldrb r0, [r4, #0xb] - subs r0, r5, r0 - lsls r0, r0, #4 - adds r3, r3, r0 - ldrh r0, [r3, #4] - ldr r2, _0805ACEC @ =gRoomControls - ldrh r1, [r2, #6] - adds r0, r0, r1 - lsls r0, r0, #0x10 - ldrh r1, [r3, #6] - orrs r0, r1 - ldrh r2, [r2, #8] - adds r0, r0, r2 - b _0805AD34 - .align 2, 0 -_0805ACEC: .4byte gRoomControls -_0805ACF0: - movs r0, #0x7f - ands r0, r1 - subs r5, r0, #1 - ldr r6, _0805AD3C @ =gUnk_03003DA0 - ldr r4, [r6, #4] - cmp r4, r6 - beq _0805AD32 - ldr r0, _0805AD40 @ =0x00001609 - mov r8, r0 - ldr r0, _0805AD44 @ =0x0000FFFF - adds r7, r0, #0 -_0805AD06: - ldrh r0, [r4, #8] - ands r0, r7 - cmp r0, r8 - bne _0805AD2C - ldrb r1, [r4, #0xb] - cmp r1, r5 - bgt _0805AD2C - adds r0, r4, #0 - adds r0, #0x21 - ldrb r0, [r0] - adds r0, r1, r0 - cmp r0, r5 - ble _0805AD2C - ldrb r0, [r4, #0xa] - bl GetCurrentRoomProperty - adds r3, r0, #0 - cmp r3, #0 - bne _0805ACD0 -_0805AD2C: - ldr r4, [r4, #4] - cmp r4, r6 - bne _0805AD06 -_0805AD32: - movs r0, #0 -_0805AD34: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805AD3C: .4byte gUnk_03003DA0 -_0805AD40: .4byte 0x00001609 -_0805AD44: .4byte 0x0000FFFF + .syntax divided diff --git a/asm/non_matching/manager16/sub_0805ACC0.inc b/asm/non_matching/manager16/sub_0805ACC0.inc new file mode 100644 index 00000000..df4f3ff6 --- /dev/null +++ b/asm/non_matching/manager16/sub_0805ACC0.inc @@ -0,0 +1,72 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r0, #0x45 + ldrb r1, [r0] + cmp r1, #0 + bne _0805ACF0 + b _0805AD32 +_0805ACD0: + ldrb r0, [r4, #0xb] + subs r0, r5, r0 + lsls r0, r0, #4 + adds r3, r3, r0 + ldrh r0, [r3, #4] + ldr r2, _0805ACEC @ =gRoomControls + ldrh r1, [r2, #6] + adds r0, r0, r1 + lsls r0, r0, #0x10 + ldrh r1, [r3, #6] + orrs r0, r1 + ldrh r2, [r2, #8] + adds r0, r0, r2 + b _0805AD34 + .align 2, 0 +_0805ACEC: .4byte gRoomControls +_0805ACF0: + movs r0, #0x7f + ands r0, r1 + subs r5, r0, #1 + ldr r6, _0805AD3C @ =gUnk_03003DA0 + ldr r4, [r6, #4] + cmp r4, r6 + beq _0805AD32 + ldr r0, _0805AD40 @ =0x00001609 + mov r8, r0 + ldr r0, _0805AD44 @ =0x0000FFFF + adds r7, r0, #0 +_0805AD06: + ldrh r0, [r4, #8] + ands r0, r7 + cmp r0, r8 + bne _0805AD2C + ldrb r1, [r4, #0xb] + cmp r1, r5 + bgt _0805AD2C + adds r0, r4, #0 + adds r0, #0x21 + ldrb r0, [r0] + adds r0, r1, r0 + cmp r0, r5 + ble _0805AD2C + ldrb r0, [r4, #0xa] + bl GetCurrentRoomProperty + adds r3, r0, #0 + cmp r3, #0 + bne _0805ACD0 +_0805AD2C: + ldr r4, [r4, #4] + cmp r4, r6 + bne _0805AD06 +_0805AD32: + movs r0, #0 +_0805AD34: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0805AD3C: .4byte gUnk_03003DA0 +_0805AD40: .4byte 0x00001609 +_0805AD44: .4byte 0x0000FFFF + .syntax divided diff --git a/asm/manager18.s b/asm/non_matching/manager18/Manager18_Main.inc similarity index 62% rename from asm/manager18.s rename to asm/non_matching/manager18/Manager18_Main.inc index 65f3737a..1b319fd3 100644 --- a/asm/manager18.s +++ b/asm/non_matching/manager18/Manager18_Main.inc @@ -1,13 +1,4 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - .syntax unified - - .text - - thumb_func_start Manager18_Main -Manager18_Main: @ 0x0805ADD8 push {r4, lr} adds r4, r0, #0 cmp r4, #0 @@ -126,70 +117,4 @@ _0805AECC: .4byte gScreen _0805AED0: .4byte gRoomControls _0805AED4: .4byte 0xFFFFE000 _0805AED8: .4byte 0xFFFFF000 - - thumb_func_start sub_0805AEDC -sub_0805AEDC: @ 0x0805AEDC - push {r4, lr} - adds r3, r0, #0 - ldr r2, _0805AF2C @ =gScreen - ldr r0, _0805AF30 @ =0x00001E05 - strh r0, [r2, #0x2c] - ldrh r0, [r2] - movs r4, #0x80 - lsls r4, r4, #4 - adds r1, r4, #0 - orrs r0, r1 - strh r0, [r2] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _0805AF34 @ =0x00003648 - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #5 - adds r1, r0, #0 - cmp r3, #0 - beq _0805AF06 - ldrh r1, [r3, #0x20] -_0805AF06: - adds r0, r2, #0 - adds r0, #0x68 - strh r1, [r0] - ldr r1, _0805AF38 @ =gRoomControls - ldrh r0, [r1, #0x2a] - ldrh r4, [r1, #0xa] - adds r0, r0, r4 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] - cmp r3, #0 - beq _0805AF28 - adds r0, r3, #0 - bl Manager18_Main -_0805AF28: - pop {r4, pc} - .align 2, 0 -_0805AF2C: .4byte gScreen -_0805AF30: .4byte 0x00001E05 -_0805AF34: .4byte 0x00003648 -_0805AF38: .4byte gRoomControls - - thumb_func_start sub_0805AF3C -sub_0805AF3C: @ 0x0805AF3C - ldrb r2, [r0, #0x10] - movs r1, #0xdf - ands r1, r2 - movs r3, #0 - strb r1, [r0, #0x10] - ldr r1, _0805AF58 @ =gScreen - ldrh r2, [r1] - ldr r0, _0805AF5C @ =0x0000F7FF - ands r0, r2 - strh r0, [r1] - adds r1, #0x66 - strh r3, [r1] - bx lr - .align 2, 0 -_0805AF58: .4byte gScreen -_0805AF5C: .4byte 0x0000F7FF + .syntax divided diff --git a/asm/non_matching/manager18/sub_0805AEDC.inc b/asm/non_matching/manager18/sub_0805AEDC.inc new file mode 100644 index 00000000..361962e5 --- /dev/null +++ b/asm/non_matching/manager18/sub_0805AEDC.inc @@ -0,0 +1,47 @@ + .syntax unified + push {r4, lr} + adds r3, r0, #0 + ldr r2, _0805AF2C @ =gScreen + ldr r0, _0805AF30 @ =0x00001E05 + strh r0, [r2, #0x2c] + ldrh r0, [r2] + movs r4, #0x80 + lsls r4, r4, #4 + adds r1, r4, #0 + orrs r0, r1 + strh r0, [r2] + adds r1, r2, #0 + adds r1, #0x66 + ldr r0, _0805AF34 @ =0x00003648 + strh r0, [r1] + movs r0, #0x80 + lsls r0, r0, #5 + adds r1, r0, #0 + cmp r3, #0 + beq _0805AF06 + ldrh r1, [r3, #0x20] +_0805AF06: + adds r0, r2, #0 + adds r0, #0x68 + strh r1, [r0] + ldr r1, _0805AF38 @ =gRoomControls + ldrh r0, [r1, #0x2a] + ldrh r4, [r1, #0xa] + adds r0, r0, r4 + strh r0, [r2, #0x2e] + ldrh r0, [r1, #0x2e] + ldrh r1, [r1, #0xc] + adds r0, r0, r1 + strh r0, [r2, #0x30] + cmp r3, #0 + beq _0805AF28 + adds r0, r3, #0 + bl Manager18_Main +_0805AF28: + pop {r4, pc} + .align 2, 0 +_0805AF2C: .4byte gScreen +_0805AF30: .4byte 0x00001E05 +_0805AF34: .4byte 0x00003648 +_0805AF38: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager18/sub_0805AF3C.inc b/asm/non_matching/manager18/sub_0805AF3C.inc new file mode 100644 index 00000000..ab6b3af6 --- /dev/null +++ b/asm/non_matching/manager18/sub_0805AF3C.inc @@ -0,0 +1,18 @@ + .syntax unified + ldrb r2, [r0, #0x10] + movs r1, #0xdf + ands r1, r2 + movs r3, #0 + strb r1, [r0, #0x10] + ldr r1, _0805AF58 @ =gScreen + ldrh r2, [r1] + ldr r0, _0805AF5C @ =0x0000F7FF + ands r0, r2 + strh r0, [r1] + adds r1, #0x66 + strh r3, [r1] + bx lr + .align 2, 0 +_0805AF58: .4byte gScreen +_0805AF5C: .4byte 0x0000F7FF + .syntax divided diff --git a/asm/manager19.s b/asm/non_matching/manager19/Manager19_Main.inc similarity index 67% rename from asm/manager19.s rename to asm/non_matching/manager19/Manager19_Main.inc index 811210b7..5eb635c5 100644 --- a/asm/manager19.s +++ b/asm/non_matching/manager19/Manager19_Main.inc @@ -1,13 +1,4 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - .syntax unified - - .text - - thumb_func_start Manager19_Main -Manager19_Main: @ 0x0805AF60 push {r4, lr} adds r4, r0, #0 cmp r4, #0 @@ -78,29 +69,4 @@ _0805AFEE: _0805AFF0: .4byte gRoomControls _0805AFF4: .4byte 0xFFFFE000 _0805AFF8: .4byte gScreen - - thumb_func_start sub_0805AFFC -sub_0805AFFC: @ 0x0805AFFC - ldr r2, _0805B024 @ =gScreen - ldr r0, _0805B028 @ =0x00001E03 - strh r0, [r2, #0x2c] - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _0805B02C @ =gRoomControls - ldrh r0, [r1, #0x2a] - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] - bx lr - .align 2, 0 -_0805B024: .4byte gScreen -_0805B028: .4byte 0x00001E03 -_0805B02C: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager19/sub_0805AFFC.inc b/asm/non_matching/manager19/sub_0805AFFC.inc new file mode 100644 index 00000000..e9ee5a41 --- /dev/null +++ b/asm/non_matching/manager19/sub_0805AFFC.inc @@ -0,0 +1,25 @@ + .syntax unified + ldr r2, _0805B024 @ =gScreen + ldr r0, _0805B028 @ =0x00001E03 + strh r0, [r2, #0x2c] + ldrh r1, [r2] + movs r3, #0x80 + lsls r3, r3, #4 + adds r0, r3, #0 + orrs r0, r1 + strh r0, [r2] + ldr r1, _0805B02C @ =gRoomControls + ldrh r0, [r1, #0x2a] + ldrh r3, [r1, #0xa] + adds r0, r0, r3 + strh r0, [r2, #0x2e] + ldrh r0, [r1, #0x2e] + ldrh r1, [r1, #0xc] + adds r0, r0, r1 + strh r0, [r2, #0x30] + bx lr + .align 2, 0 +_0805B024: .4byte gScreen +_0805B028: .4byte 0x00001E03 +_0805B02C: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager1B/Manager1B_Main.inc b/asm/non_matching/manager1B/Manager1B_Main.inc new file mode 100644 index 00000000..6a4b50b7 --- /dev/null +++ b/asm/non_matching/manager1B/Manager1B_Main.inc @@ -0,0 +1,72 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + bl EntityHasDuplicateID + cmp r0, #0 + beq _0805B3C4 + bl DeleteThisEntity +_0805B3C4: + ldrb r0, [r4, #0xa] + lsls r0, r0, #2 + ldr r1, _0805B438 @ =gUnk_08108C28 + adds r5, r0, r1 + ldrb r0, [r4, #0xc] + cmp r0, #0 + bne _0805B41E + movs r0, #1 + strb r0, [r4, #0xc] + ldrb r1, [r4, #0x10] + movs r0, #0x20 + orrs r0, r1 + strb r0, [r4, #0x10] + adds r0, r4, #0 + movs r1, #6 + bl sub_0805E3A0 + ldrb r0, [r4, #0xa] + cmp r0, #0 + beq _0805B3F6 + ldr r1, _0805B43C @ =sub_0805B4B4 + adds r0, r4, #0 + movs r2, #0 + bl sub_08052D74 +_0805B3F6: + ldr r0, _0805B440 @ =gRoomControls + ldrh r1, [r0, #0x20] + movs r0, #0x80 + lsls r0, r0, #1 + subs r1, r0, r1 + cmp r1, #0 + bge _0805B406 + movs r1, #0 +_0805B406: + movs r0, #2 + ldrsb r0, [r5, r0] + adds r0, r1, r0 + str r0, [r4, #0x20] + ldr r1, _0805B444 @ =gUnk_08108C54 + ldrb r0, [r5, #1] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + adds r0, r4, #0 + bl _call_via_r1 +_0805B41E: + ldr r0, _0805B440 @ =gRoomControls + ldrh r0, [r0] + cmp r0, #0 + bne _0805B436 + ldr r0, _0805B444 @ =gUnk_08108C54 + ldrb r1, [r5, #1] + lsls r1, r1, #2 + adds r1, r1, r0 + ldr r1, [r1] + adds r0, r4, #0 + bl _call_via_r1 +_0805B436: + pop {r4, r5, pc} + .align 2, 0 +_0805B438: .4byte gUnk_08108C28 +_0805B43C: .4byte sub_0805B4B4 +_0805B440: .4byte gRoomControls +_0805B444: .4byte gUnk_08108C54 + .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B448.inc b/asm/non_matching/manager1B/sub_0805B448.inc new file mode 100644 index 00000000..167281fe --- /dev/null +++ b/asm/non_matching/manager1B/sub_0805B448.inc @@ -0,0 +1,23 @@ + .syntax unified + push {r4, lr} + ldr r4, _0805B46C @ =gScreen + ldr r3, _0805B470 @ =gRoomControls + movs r2, #0xa + ldrsh r1, [r3, r2] + ldrh r2, [r3, #6] + subs r1, r1, r2 + asrs r1, r1, #2 + strh r1, [r4, #0x2e] + movs r2, #0xc + ldrsh r1, [r3, r2] + ldrh r2, [r3, #8] + subs r1, r1, r2 + asrs r1, r1, #1 + ldr r0, [r0, #0x20] + adds r0, r0, r1 + strh r0, [r4, #0x30] + pop {r4, pc} + .align 2, 0 +_0805B46C: .4byte gScreen +_0805B470: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B474.inc b/asm/non_matching/manager1B/sub_0805B474.inc new file mode 100644 index 00000000..59158767 --- /dev/null +++ b/asm/non_matching/manager1B/sub_0805B474.inc @@ -0,0 +1,31 @@ + .syntax unified + push {r4, r5, lr} + ldr r5, _0805B4A8 @ =gRoomControls + movs r0, #0xc + ldrsh r1, [r5, r0] + ldrh r4, [r5, #8] + subs r1, r1, r4 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #5 + ldrh r1, [r5, #0x20] + subs r1, #0xa0 + bl __divsi3 + ldr r2, _0805B4AC @ =gScreen + adds r4, r4, r0 + strh r4, [r2, #0x30] + ldrh r0, [r5, #0x1e] + ldr r1, _0805B4B0 @ =0xFFFFFF00 + adds r0, r0, r1 + lsrs r1, r0, #0x1f + adds r0, r0, r1 + asrs r0, r0, #1 + ldrh r1, [r5, #0xa] + subs r1, r1, r0 + strh r1, [r2, #0x2e] + pop {r4, r5, pc} + .align 2, 0 +_0805B4A8: .4byte gRoomControls +_0805B4AC: .4byte gScreen +_0805B4B0: .4byte 0xFFFFFF00 + .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B4B4.inc b/asm/non_matching/manager1B/sub_0805B4B4.inc new file mode 100644 index 00000000..b0e254c9 --- /dev/null +++ b/asm/non_matching/manager1B/sub_0805B4B4.inc @@ -0,0 +1,14 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xa] + bl sub_0805B4D0 + ldrb r0, [r4, #0xa] + cmp r0, #2 + bne _0805B4C8 + bl sub_0806D0F8 +_0805B4C8: + adds r0, r4, #0 + bl Manager1B_Main + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B4D0.inc b/asm/non_matching/manager1B/sub_0805B4D0.inc new file mode 100644 index 00000000..8be13a26 --- /dev/null +++ b/asm/non_matching/manager1B/sub_0805B4D0.inc @@ -0,0 +1,51 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r0, #0 + ldr r0, _0805B528 @ =gUnk_08108C5C + adds r0, r5, r0 + ldrb r0, [r0] + bl LoadGfxGroup + ldr r4, _0805B52C @ =gScreen + ldr r0, _0805B530 @ =0x00001E07 + strh r0, [r4, #0x2c] + ldrh r1, [r4] + movs r2, #0x80 + lsls r2, r2, #4 + adds r0, r2, #0 + orrs r0, r1 + strh r0, [r4] + ldr r2, _0805B534 @ =gRoomControls + movs r1, #0xa + ldrsh r0, [r2, r1] + ldrh r1, [r2, #6] + subs r0, r0, r1 + asrs r0, r0, #2 + strh r0, [r4, #0x2e] + movs r1, #0xc + ldrsh r0, [r2, r1] + ldrh r1, [r2, #8] + subs r0, r0, r1 + asrs r3, r0, #1 + ldrh r1, [r2, #0x20] + movs r0, #0x80 + lsls r0, r0, #1 + subs r2, r0, r1 + cmp r2, #0 + bge _0805B516 + movs r2, #0 +_0805B516: + ldr r0, _0805B538 @ =gUnk_08108C44 + lsls r1, r5, #1 + adds r1, r1, r0 + adds r0, r3, r2 + ldrh r1, [r1] + adds r0, r0, r1 + strh r0, [r4, #0x30] + pop {r4, r5, pc} + .align 2, 0 +_0805B528: .4byte gUnk_08108C5C +_0805B52C: .4byte gScreen +_0805B530: .4byte 0x00001E07 +_0805B534: .4byte gRoomControls +_0805B538: .4byte gUnk_08108C44 + .syntax divided diff --git a/asm/non_matching/manager1D/Manager1D_Main.inc b/asm/non_matching/manager1D/Manager1D_Main.inc new file mode 100644 index 00000000..fab27c34 --- /dev/null +++ b/asm/non_matching/manager1D/Manager1D_Main.inc @@ -0,0 +1,12 @@ + .syntax unified + push {lr} + ldr r2, _0805B5DC @ =gUnk_08108C80 + ldrb r1, [r0, #0xc] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_0805B5DC: .4byte gUnk_08108C80 + .syntax divided diff --git a/asm/non_matching/manager1D/sub_0805B5E0.inc b/asm/non_matching/manager1D/sub_0805B5E0.inc new file mode 100644 index 00000000..7cfa013f --- /dev/null +++ b/asm/non_matching/manager1D/sub_0805B5E0.inc @@ -0,0 +1,47 @@ + .syntax unified + push {r4, r5, lr} + movs r4, #0 + movs r1, #1 + strb r1, [r0, #0xc] + ldr r3, _0805B618 @ =gScreen + ldrh r2, [r3] + movs r5, #0x80 + lsls r5, r5, #4 + adds r1, r5, #0 + orrs r1, r2 + strh r1, [r3] + ldr r2, _0805B61C @ =gUnk_08108C88 + ldrb r1, [r0, #0xa] + lsls r1, r1, #1 + adds r1, r1, r2 + ldrh r1, [r1] + strh r1, [r3, #0x2c] + ldr r1, _0805B620 @ =gRoomControls + str r4, [r1, #0x2c] + str r4, [r1, #0x28] + ldrb r0, [r0, #0xa] + cmp r0, #0 + beq _0805B612 + cmp r0, #1 + beq _0805B624 +_0805B612: + strh r4, [r3, #0x30] + strh r4, [r3, #0x2e] + b _0805B634 + .align 2, 0 +_0805B618: .4byte gScreen +_0805B61C: .4byte gUnk_08108C88 +_0805B620: .4byte gRoomControls +_0805B624: + ldrh r0, [r1, #0x2a] + ldrh r2, [r1, #0xa] + adds r0, r0, r2 + strh r0, [r3, #0x2e] + ldrh r0, [r1, #0x2e] + ldrh r1, [r1, #0xc] + adds r0, r0, r1 + strh r0, [r3, #0x30] +_0805B634: + pop {r4, r5, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager1D/sub_0805B638.inc b/asm/non_matching/manager1D/sub_0805B638.inc new file mode 100644 index 00000000..fb210c75 --- /dev/null +++ b/asm/non_matching/manager1D/sub_0805B638.inc @@ -0,0 +1,26 @@ + .syntax unified + push {lr} + ldrb r0, [r0, #0xa] + cmp r0, #1 + bne _0805B65E + ldr r1, _0805B660 @ =gRoomControls + ldr r0, [r1, #0x28] + movs r2, #0x80 + lsls r2, r2, #6 + adds r0, r0, r2 + str r0, [r1, #0x28] + ldr r2, _0805B664 @ =gScreen + ldrh r0, [r1, #0x2a] + ldrh r3, [r1, #0xa] + adds r0, r0, r3 + strh r0, [r2, #0x2e] + ldrh r0, [r1, #0x2e] + ldrh r1, [r1, #0xc] + adds r0, r0, r1 + strh r0, [r2, #0x30] +_0805B65E: + pop {pc} + .align 2, 0 +_0805B660: .4byte gRoomControls +_0805B664: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/manager1F/Manager1F_Main.inc b/asm/non_matching/manager1F/Manager1F_Main.inc new file mode 100644 index 00000000..e09ecfca --- /dev/null +++ b/asm/non_matching/manager1F/Manager1F_Main.inc @@ -0,0 +1,12 @@ + .syntax unified + push {lr} + ldr r2, _0805B708 @ =gUnk_08108C94 + ldrb r1, [r0, #0xc] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_0805B708: .4byte gUnk_08108C94 + .syntax divided diff --git a/asm/non_matching/manager1F/sub_0805B70C.inc b/asm/non_matching/manager1F/sub_0805B70C.inc new file mode 100644 index 00000000..bf21f206 --- /dev/null +++ b/asm/non_matching/manager1F/sub_0805B70C.inc @@ -0,0 +1,29 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805B71E + movs r0, #1 + strb r0, [r4, #0xb] +_0805B71E: + movs r0, #1 + strb r0, [r4, #0xc] + ldrh r1, [r4, #0x38] + lsls r1, r1, #0x10 + asrs r1, r1, #0x14 + movs r2, #0x3f + ands r1, r2 + ldrh r0, [r4, #0x3a] + lsls r0, r0, #0x10 + asrs r0, r0, #0x14 + ands r0, r2 + lsls r0, r0, #6 + orrs r1, r0 + strh r1, [r4, #0x38] + adds r0, r4, #0 + bl sub_0805B778 + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager1F/sub_0805B744.inc b/asm/non_matching/manager1F/sub_0805B744.inc new file mode 100644 index 00000000..a43b8175 --- /dev/null +++ b/asm/non_matching/manager1F/sub_0805B744.inc @@ -0,0 +1,27 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x3e] + bl CheckFlags + adds r1, r0, #0 + cmp r1, #0 + beq _0805B766 + ldrb r0, [r4, #0xb] + cmp r0, #0 + bne _0805B774 + movs r0, #1 + strb r0, [r4, #0xb] + adds r0, r4, #0 + bl sub_0805B778 + b _0805B774 +_0805B766: + ldrb r0, [r4, #0xb] + cmp r0, #1 + bne _0805B774 + strb r1, [r4, #0xb] + adds r0, r4, #0 + bl sub_0805B778 +_0805B774: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager1F/sub_0805B778.inc b/asm/non_matching/manager1F/sub_0805B778.inc new file mode 100644 index 00000000..9d5ac27f --- /dev/null +++ b/asm/non_matching/manager1F/sub_0805B778.inc @@ -0,0 +1,20 @@ + .syntax unified + push {lr} + ldr r2, _0805B79C @ =gUnk_08108C9C + ldrb r1, [r0, #0xa] + lsls r1, r1, #1 + ldrb r3, [r0, #0xb] + adds r1, r1, r3 + lsls r1, r1, #1 + adds r1, r1, r2 + ldrh r3, [r1] + movs r2, #0x38 + ldrsh r1, [r0, r2] + adds r0, #0x36 + ldrb r2, [r0] + adds r0, r3, #0 + bl SetTileType + pop {pc} + .align 2, 0 +_0805B79C: .4byte gUnk_08108C9C + .syntax divided diff --git a/asm/non_matching/manager2/sub_0805754C.inc b/asm/non_matching/manager2/sub_0805754C.inc new file mode 100644 index 00000000..ad1109b3 --- /dev/null +++ b/asm/non_matching/manager2/sub_0805754C.inc @@ -0,0 +1,66 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r2, r0, #0 + ldr r3, _080575BC @ =gRoomControls + movs r0, #0xc + ldrsh r1, [r3, r0] + ldrh r0, [r3, #8] + subs r1, r1, r0 + asrs r0, r1, #3 + adds r1, r1, r0 + ldr r4, _080575C0 @ =gScreen + movs r6, #0x3f + adds r0, r1, #0 + ands r0, r6 + strh r0, [r4, #0x30] + adds r0, r1, #0 + cmp r1, #0 + bge _08057570 + adds r0, #0x3f +_08057570: + asrs r0, r0, #6 + lsls r0, r0, #9 + ldr r5, _080575C4 @ =gMapDataTopSpecial + adds r1, r0, r5 + str r1, [r4, #0x34] + ldr r0, [r2, #0x38] + cmp r0, r1 + beq _08057586 + str r1, [r2, #0x38] + movs r0, #1 + strh r0, [r4, #0x32] +_08057586: + movs r0, #0xc + ldrsh r1, [r3, r0] + ldrh r0, [r3, #8] + subs r1, r1, r0 + asrs r0, r1, #2 + adds r1, r1, r0 + adds r0, r1, #0 + ands r0, r6 + strh r0, [r4, #0x18] + adds r0, r1, #0 + cmp r0, #0 + bge _080575A0 + adds r0, #0x3f +_080575A0: + asrs r0, r0, #6 + lsls r0, r0, #9 + movs r3, #0x80 + lsls r3, r3, #6 + adds r1, r5, r3 + adds r1, r0, r1 + str r1, [r4, #0x1c] + ldr r0, [r2, #0x3c] + cmp r0, r1 + beq _080575BA + str r1, [r2, #0x3c] + movs r0, #1 + strh r0, [r4, #0x1a] +_080575BA: + pop {r4, r5, r6, pc} + .align 2, 0 +_080575BC: .4byte gRoomControls +_080575C0: .4byte gScreen +_080575C4: .4byte gMapDataTopSpecial + .syntax divided diff --git a/asm/non_matching/manager2/sub_080575C8.inc b/asm/non_matching/manager2/sub_080575C8.inc new file mode 100644 index 00000000..ed601e15 --- /dev/null +++ b/asm/non_matching/manager2/sub_080575C8.inc @@ -0,0 +1,90 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldr r0, _08057664 @ =gUnk_0200B650 + movs r5, #0 + str r5, [r0] + movs r0, #0x80 + lsls r0, r0, #0x13 + strh r5, [r0] + adds r0, r4, #0 + bl LoadGfxGroup + ldr r0, _08057668 @ =gRoomVars + strb r4, [r0, #0x10] + ldr r3, _0805766C @ =gRoomControls + movs r0, #0xc + ldrsh r1, [r3, r0] + ldrh r0, [r3, #8] + subs r1, r1, r0 + asrs r0, r1, #3 + adds r1, r1, r0 + ldr r2, _08057670 @ =gScreen + movs r7, #0x3f + adds r0, r1, #0 + ands r0, r7 + strh r0, [r2, #0x30] + strh r5, [r2, #0x2e] + adds r0, r1, #0 + cmp r1, #0 + bge _08057604 + adds r0, #0x3f +_08057604: + asrs r0, r0, #6 + lsls r0, r0, #9 + ldr r4, _08057674 @ =gMapDataTopSpecial + adds r0, r0, r4 + str r0, [r2, #0x34] + ldr r0, _08057678 @ =0x00001D49 + strh r0, [r2, #0x2c] + movs r6, #1 + strh r6, [r2, #0x32] + movs r0, #0xc + ldrsh r1, [r3, r0] + ldrh r0, [r3, #8] + subs r1, r1, r0 + asrs r0, r1, #2 + adds r1, r1, r0 + adds r0, r1, #0 + ands r0, r7 + strh r0, [r2, #0x18] + strh r5, [r2, #0x16] + adds r0, r1, #0 + cmp r0, #0 + bge _08057632 + adds r0, #0x3f +_08057632: + asrs r0, r0, #6 + lsls r0, r0, #9 + movs r3, #0x80 + lsls r3, r3, #6 + adds r1, r4, r3 + adds r0, r0, r1 + str r0, [r2, #0x1c] + ldr r0, _0805767C @ =0x00001E49 + strh r0, [r2, #0x14] + strh r6, [r2, #0x1a] + adds r1, r2, #0 + adds r1, #0x66 + ldr r0, _08057680 @ =0x00003C48 + strh r0, [r1] + adds r1, #2 + ldr r0, _08057684 @ =0x00000609 + strh r0, [r1] + ldrh r0, [r2] + movs r3, #0xa0 + lsls r3, r3, #4 + adds r1, r3, #0 + orrs r0, r1 + strh r0, [r2] + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08057664: .4byte gUnk_0200B650 +_08057668: .4byte gRoomVars +_0805766C: .4byte gRoomControls +_08057670: .4byte gScreen +_08057674: .4byte gMapDataTopSpecial +_08057678: .4byte 0x00001D49 +_0805767C: .4byte 0x00001E49 +_08057680: .4byte 0x00003C48 +_08057684: .4byte 0x00000609 + .syntax divided diff --git a/asm/non_matching/manager2/sub_08057688.inc b/asm/non_matching/manager2/sub_08057688.inc new file mode 100644 index 00000000..fae0c509 --- /dev/null +++ b/asm/non_matching/manager2/sub_08057688.inc @@ -0,0 +1,12 @@ + .syntax unified + ldr r0, _08057694 @ =gScreen + ldr r1, _08057698 @ =0x00001D48 + strh r1, [r0, #0x2c] + ldr r1, _0805769C @ =0x00001E48 + strh r1, [r0, #0x14] + bx lr + .align 2, 0 +_08057694: .4byte gScreen +_08057698: .4byte 0x00001D48 +_0805769C: .4byte 0x00001E48 + .syntax divided diff --git a/asm/non_matching/manager2/sub_080576A0.inc b/asm/non_matching/manager2/sub_080576A0.inc new file mode 100644 index 00000000..22d3cfc8 --- /dev/null +++ b/asm/non_matching/manager2/sub_080576A0.inc @@ -0,0 +1,15 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r0, _080576BC @ =gRoomVars + ldrb r0, [r0, #0x10] + bl LoadGfxGroup + movs r0, #0 + str r0, [r4, #0x38] + str r0, [r4, #0x3c] + adds r0, r4, #0 + bl sub_0805754C + pop {r4, pc} + .align 2, 0 +_080576BC: .4byte gRoomVars + .syntax divided diff --git a/asm/manager21.s b/asm/non_matching/manager21/Manager21_Main.inc similarity index 76% rename from asm/manager21.s rename to asm/non_matching/manager21/Manager21_Main.inc index 601bea8c..87823c86 100644 --- a/asm/manager21.s +++ b/asm/non_matching/manager21/Manager21_Main.inc @@ -1,13 +1,4 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - .syntax unified - - .text - - thumb_func_start Manager21_Main -Manager21_Main: @ 0x0805B820 push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} @@ -94,24 +85,4 @@ _0805B8C4: mov r8, r3 pop {r4, r5, r6, r7, pc} .align 2, 0 - - thumb_func_start sub_0805B8CC -sub_0805B8CC: @ 0x0805B8CC - push {lr} - cmp r0, #4 - bne _0805B8DA - movs r0, #0x18 - bl CheckGlobalFlag - b _0805B8E8 -_0805B8DA: - cmp r0, #4 - bls _0805B8E6 - cmp r0, #6 - bhi _0805B8E6 - movs r0, #0 - b _0805B8E8 -_0805B8E6: - movs r0, #1 -_0805B8E8: - pop {pc} - .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager21/sub_0805B8CC.inc b/asm/non_matching/manager21/sub_0805B8CC.inc new file mode 100644 index 00000000..d06a5b37 --- /dev/null +++ b/asm/non_matching/manager21/sub_0805B8CC.inc @@ -0,0 +1,20 @@ + .syntax unified + push {lr} + cmp r0, #4 + bne _0805B8DA + movs r0, #0x18 + bl CheckGlobalFlag + b _0805B8E8 +_0805B8DA: + cmp r0, #4 + bls _0805B8E6 + cmp r0, #6 + bhi _0805B8E6 + movs r0, #0 + b _0805B8E8 +_0805B8E6: + movs r0, #1 +_0805B8E8: + pop {pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager22/Manager22_Main.inc b/asm/non_matching/manager22/Manager22_Main.inc new file mode 100644 index 00000000..42e1a86e --- /dev/null +++ b/asm/non_matching/manager22/Manager22_Main.inc @@ -0,0 +1,185 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r5, r0, #0 + ldr r4, _0805B964 @ =gArea + ldrb r0, [r4, #0xc] + cmp r0, #0 + bne _0805B90A + bl sub_0801E104 + ldr r2, _0805B968 @ =gScreen + ldrh r1, [r2] + ldr r0, _0805B96C @ =0x0000D7FF + ands r0, r1 + strh r0, [r2] + bl DeleteThisEntity +_0805B90A: + ldrb r2, [r5, #0xc] + cmp r2, #0 + bne _0805B934 + movs r0, #1 + strb r0, [r5, #0xc] + ldrb r1, [r5, #0x10] + movs r0, #0x20 + orrs r0, r1 + strb r0, [r5, #0x10] + movs r0, #0x11 + strb r0, [r5, #0xe] + str r2, [r5, #0x20] + adds r0, r5, #0 + movs r1, #6 + bl sub_0805E3A0 + bl sub_0801E120 + ldrb r0, [r5, #0xe] + bl sub_0801E154 +_0805B934: + ldr r0, _0805B970 @ =gMain + ldrb r0, [r0, #4] + cmp r0, #2 + bne _0805B952 + ldr r2, _0805B968 @ =gScreen + ldrh r1, [r2] + movs r3, #0x80 + lsls r3, r3, #4 + adds r0, r3, #0 + orrs r0, r1 + strh r0, [r2] + bl sub_0805BA78 + bl sub_0805BAD4 +_0805B952: + ldrb r0, [r4, #0xc] + cmp r0, #2 + bne _0805B978 + ldr r2, _0805B968 @ =gScreen + ldrh r1, [r2] + ldr r0, _0805B974 @ =0x0000DFFF + ands r0, r1 + strh r0, [r2] + b _0805BA6C + .align 2, 0 +_0805B964: .4byte gArea +_0805B968: .4byte gScreen +_0805B96C: .4byte 0x0000D7FF +_0805B970: .4byte gMain +_0805B974: .4byte 0x0000DFFF +_0805B978: + ldr r3, _0805B9A8 @ =gPlayerEntity + movs r4, #0x2e + ldrsh r0, [r3, r4] + ldr r2, _0805B9AC @ =gRoomControls + ldrh r1, [r2, #6] + subs r0, r0, r1 + movs r6, #0x32 + ldrsh r1, [r3, r6] + ldrh r2, [r2, #8] + subs r1, r1, r2 + movs r2, #0 + movs r3, #0 + bl CheckRectOnScreen + cmp r0, #0 + beq _0805B9B4 + ldr r2, _0805B9B0 @ =gScreen + ldrh r1, [r2] + movs r3, #0x80 + lsls r3, r3, #6 + adds r0, r3, #0 + orrs r0, r1 + b _0805B9BC + .align 2, 0 +_0805B9A8: .4byte gPlayerEntity +_0805B9AC: .4byte gRoomControls +_0805B9B0: .4byte gScreen +_0805B9B4: + ldr r2, _0805B9E8 @ =gScreen + ldrh r1, [r2] + ldr r0, _0805B9EC @ =0x0000DFFF + ands r0, r1 +_0805B9BC: + strh r0, [r2] + ldrb r4, [r5, #0xe] + ldr r0, _0805B9F0 @ =gPlayerState + ldr r0, [r0, #0x30] + movs r1, #0x80 + lsls r1, r1, #0x10 + ands r0, r1 + cmp r0, #0 + beq _0805BA2C + ldr r0, _0805B9F4 @ =gArea + ldrb r0, [r0, #0xc] + cmp r0, #0 + beq _0805BA2C + cmp r4, #0x47 + bhi _0805B9F8 + adds r4, #4 + adds r0, r4, #0 + bl sub_0801E154 + movs r0, #0 + str r0, [r5, #0x20] + b _0805BA42 + .align 2, 0 +_0805B9E8: .4byte gScreen +_0805B9EC: .4byte 0x0000DFFF +_0805B9F0: .4byte gPlayerState +_0805B9F4: .4byte gArea +_0805B9F8: + ldr r0, _0805BA24 @ =gScreenTransition + ldr r0, [r0] + movs r1, #3 + ands r0, r1 + cmp r0, #0 + bne _0805BA42 + ldrb r0, [r5, #0xf] + adds r0, #0x10 + strb r0, [r5, #0xf] + ldr r1, _0805BA28 @ =gSineTable + ldrb r0, [r5, #0xf] + lsls r0, r0, #1 + adds r0, r0, r1 + movs r6, #0 + ldrsh r0, [r0, r6] + asrs r0, r0, #7 + str r0, [r5, #0x20] + adds r0, r4, r0 + bl sub_0801E154 + b _0805BA42 + .align 2, 0 +_0805BA24: .4byte gScreenTransition +_0805BA28: .4byte gSineTable +_0805BA2C: + movs r0, #0 + str r0, [r5, #0x20] + cmp r4, #0x11 + bls _0805BA42 + subs r4, #4 + cmp r4, #0x10 + bhi _0805BA3C + movs r4, #0x11 +_0805BA3C: + adds r0, r4, #0 + bl sub_0801E154 +_0805BA42: + strb r4, [r5, #0xe] + ldr r3, _0805BA70 @ =gPlayerEntity + movs r1, #0x2e + ldrsh r0, [r3, r1] + ldr r2, _0805BA74 @ =gRoomControls + movs r6, #0xa + ldrsh r1, [r2, r6] + subs r0, r0, r1 + movs r6, #0x32 + ldrsh r1, [r3, r6] + movs r6, #0xc + ldrsh r2, [r2, r6] + subs r1, r1, r2 + movs r6, #0x36 + ldrsh r2, [r3, r6] + subs r2, #9 + adds r1, r1, r2 + ldr r2, [r5, #0x20] + adds r2, r4, r2 + bl sub_0801E160 +_0805BA6C: + pop {r4, r5, r6, pc} + .align 2, 0 +_0805BA70: .4byte gPlayerEntity +_0805BA74: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BA78.inc b/asm/non_matching/manager22/sub_0805BA78.inc new file mode 100644 index 00000000..394c19ef --- /dev/null +++ b/asm/non_matching/manager22/sub_0805BA78.inc @@ -0,0 +1,55 @@ + .syntax unified + push {r4, lr} + ldr r1, _0805BAA8 @ =gArea + movs r0, #0xa + ldrsh r3, [r1, r0] + ldr r0, _0805BAAC @ =gRoomVars + movs r4, #0xc + ldrsh r2, [r0, r4] + cmp r2, #0 + bge _0805BA8C + movs r2, #0 +_0805BA8C: + movs r0, #0x80 + lsls r0, r0, #1 + cmp r2, r0 + ble _0805BA96 + adds r2, r0, #0 +_0805BA96: + cmp r3, r2 + beq _0805BACE + subs r0, r2, r3 + cmp r0, #0 + blt _0805BAB0 + cmp r0, #4 + bls _0805BAB6 + b _0805BABA + .align 2, 0 +_0805BAA8: .4byte gArea +_0805BAAC: .4byte gRoomVars +_0805BAB0: + subs r0, r3, r2 + cmp r0, #4 + bhi _0805BABA +_0805BAB6: + adds r3, r2, #0 + b _0805BAC8 +_0805BABA: + cmp r2, r3 + bge _0805BAC2 + subs r3, #4 + b _0805BAC8 +_0805BAC2: + cmp r2, r3 + ble _0805BAC8 + adds r3, #4 +_0805BAC8: + strh r3, [r1, #0xa] + movs r0, #1 + b _0805BAD0 +_0805BACE: + movs r0, #0 +_0805BAD0: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BAD4.inc b/asm/non_matching/manager22/sub_0805BAD4.inc new file mode 100644 index 00000000..516edb52 --- /dev/null +++ b/asm/non_matching/manager22/sub_0805BAD4.inc @@ -0,0 +1,23 @@ + .syntax unified + push {lr} + ldr r3, _0805BAF4 @ =gArea + ldrb r0, [r3, #0xc] + cmp r0, #0 + beq _0805BAF2 + ldr r1, _0805BAF8 @ =gScreen + ldr r2, _0805BAFC @ =gUnk_08108CA8 + ldrh r0, [r3, #0xa] + lsls r0, r0, #0x10 + asrs r0, r0, #0x14 + lsls r0, r0, #1 + adds r0, r0, r2 + ldrh r0, [r0] + adds r1, #0x68 + strh r0, [r1] +_0805BAF2: + pop {pc} + .align 2, 0 +_0805BAF4: .4byte gArea +_0805BAF8: .4byte gScreen +_0805BAFC: .4byte gUnk_08108CA8 + .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BB00.inc b/asm/non_matching/manager22/sub_0805BB00.inc new file mode 100644 index 00000000..52849cd7 --- /dev/null +++ b/asm/non_matching/manager22/sub_0805BB00.inc @@ -0,0 +1,54 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + adds r5, r1, #0 + ldr r0, _0805BB50 @ =gArea + ldrb r0, [r0, #0xc] + cmp r0, #0 + bne _0805BB28 + bl GetEmptyManager + adds r1, r0, #0 + cmp r1, #0 + beq _0805BB28 + movs r0, #9 + strb r0, [r1, #8] + movs r0, #0x22 + strb r0, [r1, #9] + adds r0, r1, #0 + movs r1, #0 + bl AppendEntityToList +_0805BB28: + ldr r1, _0805BB54 @ =0x0600F000 + movs r2, #0x80 + lsls r2, r2, #4 + movs r0, #0xf + bl MemFill16 + ldr r0, _0805BB58 @ =gScreen + ldr r1, _0805BB5C @ =0x00001E0C + strh r1, [r0, #0x2c] + adds r0, #0x66 + ldr r1, _0805BB60 @ =0x00003E48 + strh r1, [r0] + ldr r0, _0805BB64 @ =gRoomVars + strh r4, [r0, #0xc] + cmp r5, #0 + beq _0805BB68 + ldr r1, _0805BB50 @ =gArea + movs r0, #1 + b _0805BB6C + .align 2, 0 +_0805BB50: .4byte gArea +_0805BB54: .4byte 0x0600F000 +_0805BB58: .4byte gScreen +_0805BB5C: .4byte 0x00001E0C +_0805BB60: .4byte 0x00003E48 +_0805BB64: .4byte gRoomVars +_0805BB68: + ldr r1, _0805BB70 @ =gArea + movs r0, #2 +_0805BB6C: + strb r0, [r1, #0xc] + pop {r4, r5, pc} + .align 2, 0 +_0805BB70: .4byte gArea + .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BB74.inc b/asm/non_matching/manager22/sub_0805BB74.inc new file mode 100644 index 00000000..cd3b7362 --- /dev/null +++ b/asm/non_matching/manager22/sub_0805BB74.inc @@ -0,0 +1,34 @@ + .syntax unified + push {lr} + adds r1, r0, #0 + ldr r2, _0805BBB0 @ =gRoomVars + cmp r1, #0 + bge _0805BB82 + movs r0, #0xc + ldrsh r1, [r2, r0] +_0805BB82: + ldr r0, _0805BBB4 @ =gArea + strh r1, [r0, #0xa] + strh r1, [r2, #0xc] + movs r0, #9 + movs r1, #0x22 + bl DeepFindEntityByID + cmp r0, #0 + beq _0805BBAE + bl Manager22_Main + ldr r0, _0805BBB8 @ =gScreen + ldrh r1, [r0] + movs r3, #0x80 + lsls r3, r3, #4 + adds r2, r3, #0 + orrs r1, r2 + strh r1, [r0] + bl sub_0805BA78 + bl sub_0805BAD4 +_0805BBAE: + pop {pc} + .align 2, 0 +_0805BBB0: .4byte gRoomVars +_0805BBB4: .4byte gArea +_0805BBB8: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BBBC.inc b/asm/non_matching/manager22/sub_0805BBBC.inc new file mode 100644 index 00000000..643afc33 --- /dev/null +++ b/asm/non_matching/manager22/sub_0805BBBC.inc @@ -0,0 +1,34 @@ + .syntax unified + push {r4, lr} + movs r4, #0 + ldr r2, _0805BBF8 @ =gArea + ldrb r0, [r2, #0xc] + cmp r0, #0 + beq _0805BBF2 + ldr r0, _0805BBFC @ =gRoomVars + movs r3, #0xc + ldrsh r1, [r0, r3] + movs r3, #0xa + ldrsh r0, [r2, r3] + cmp r1, r0 + bge _0805BBF2 + ldr r2, _0805BC00 @ =gScreen + ldrh r1, [r2] + movs r3, #0x80 + lsls r3, r3, #4 + adds r0, r3, #0 + orrs r0, r1 + strh r0, [r2] + bl sub_0805BA78 + adds r4, r0, #0 + cmp r4, #0 + beq _0805BBF2 + bl sub_0805BAD4 +_0805BBF2: + adds r0, r4, #0 + pop {r4, pc} + .align 2, 0 +_0805BBF8: .4byte gArea +_0805BBFC: .4byte gRoomVars +_0805BC00: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BC04.inc b/asm/non_matching/manager22/sub_0805BC04.inc new file mode 100644 index 00000000..f74987d1 --- /dev/null +++ b/asm/non_matching/manager22/sub_0805BC04.inc @@ -0,0 +1,34 @@ + .syntax unified + push {r4, lr} + movs r4, #0 + ldr r2, _0805BC40 @ =gArea + ldrb r0, [r2, #0xc] + cmp r0, #0 + beq _0805BC3A + ldr r0, _0805BC44 @ =gRoomVars + movs r3, #0xc + ldrsh r1, [r0, r3] + movs r3, #0xa + ldrsh r0, [r2, r3] + cmp r1, r0 + ble _0805BC3A + ldr r2, _0805BC48 @ =gScreen + ldrh r1, [r2] + movs r3, #0x80 + lsls r3, r3, #4 + adds r0, r3, #0 + orrs r0, r1 + strh r0, [r2] + bl sub_0805BA78 + adds r4, r0, #0 + cmp r4, #0 + beq _0805BC3A + bl sub_0805BAD4 +_0805BC3A: + adds r0, r4, #0 + pop {r4, pc} + .align 2, 0 +_0805BC40: .4byte gArea +_0805BC44: .4byte gRoomVars +_0805BC48: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/manager22/sub_0805BC4C.inc b/asm/non_matching/manager22/sub_0805BC4C.inc new file mode 100644 index 00000000..8ff50b9c --- /dev/null +++ b/asm/non_matching/manager22/sub_0805BC4C.inc @@ -0,0 +1,20 @@ + .syntax unified + push {lr} + ldr r1, _0805BC68 @ =gArea + ldrb r0, [r1, #0xc] + cmp r0, #0 + beq _0805BC64 + movs r0, #0 + strb r0, [r1, #0xc] + ldr r2, _0805BC6C @ =gScreen + ldrh r1, [r2] + ldr r0, _0805BC70 @ =0x0000D7FF + ands r0, r1 + strh r0, [r2] +_0805BC64: + pop {pc} + .align 2, 0 +_0805BC68: .4byte gArea +_0805BC6C: .4byte gScreen +_0805BC70: .4byte 0x0000D7FF + .syntax divided diff --git a/asm/non_matching/manager23/Manager23_Main.inc b/asm/non_matching/manager23/Manager23_Main.inc new file mode 100644 index 00000000..7bd09747 --- /dev/null +++ b/asm/non_matching/manager23/Manager23_Main.inc @@ -0,0 +1,12 @@ + .syntax unified + push {lr} + ldr r2, _0805BC88 @ =gUnk_08108CCC + ldrb r1, [r0, #0xa] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_0805BC88: .4byte gUnk_08108CCC + .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BC8C.inc b/asm/non_matching/manager23/sub_0805BC8C.inc new file mode 100644 index 00000000..84fa7a8e --- /dev/null +++ b/asm/non_matching/manager23/sub_0805BC8C.inc @@ -0,0 +1,35 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #0 + bne _0805BCAE + movs r0, #1 + strb r0, [r4, #0xc] + movs r0, #0x1e + strb r0, [r4, #0xf] + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805BCAE + adds r0, r4, #0 + bl sub_0805BE94 +_0805BCAE: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805BCD0 + ldrb r0, [r4, #0xf] + subs r0, #1 + strb r0, [r4, #0xf] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805BCD0 + adds r0, r4, #0 + bl sub_0805BEC4 + adds r0, r4, #0 + bl sub_0805BE94 +_0805BCD0: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BCD4.inc b/asm/non_matching/manager23/sub_0805BCD4.inc new file mode 100644 index 00000000..7a11186d --- /dev/null +++ b/asm/non_matching/manager23/sub_0805BCD4.inc @@ -0,0 +1,68 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #1 + beq _0805BD0E + cmp r0, #1 + bgt _0805BCE8 + cmp r0, #0 + beq _0805BCEE + b _0805BD5A +_0805BCE8: + cmp r0, #2 + beq _0805BD38 + b _0805BD5A +_0805BCEE: + movs r0, #1 + strb r0, [r4, #0xc] + movs r0, #0x1e + strb r0, [r4, #0xf] + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805BD5A + adds r0, r4, #0 + movs r1, #0x75 + bl sub_0805BE70 + movs r0, #2 + strb r0, [r4, #0xc] + b _0805BD5A +_0805BD0E: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805BD5A + ldrb r0, [r4, #0xf] + subs r0, #1 + strb r0, [r4, #0xf] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805BD5A + movs r0, #0x1e + strb r0, [r4, #0xf] + adds r0, r4, #0 + bl sub_0805BEC4 + adds r0, r4, #0 + movs r1, #0x76 + bl sub_0805BE70 + b _0805BD5A +_0805BD38: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + bne _0805BD5A + ldrb r0, [r4, #0xf] + subs r0, #1 + strb r0, [r4, #0xf] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805BD5A + movs r0, #0x1e + strb r0, [r4, #0xf] + adds r0, r4, #0 + movs r1, #0x75 + bl sub_0805BE70 +_0805BD5A: + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BD5C.inc b/asm/non_matching/manager23/sub_0805BD5C.inc new file mode 100644 index 00000000..404857fd --- /dev/null +++ b/asm/non_matching/manager23/sub_0805BD5C.inc @@ -0,0 +1,43 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #0 + bne _0805BD94 + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805BD76 + adds r0, r4, #0 + bl sub_0805BE94 +_0805BD76: + ldrh r1, [r4, #0x38] + lsls r1, r1, #0x10 + asrs r1, r1, #0x14 + movs r2, #0x3f + ands r1, r2 + ldrh r0, [r4, #0x3a] + lsls r0, r0, #0x10 + asrs r0, r0, #0x14 + ands r0, r2 + lsls r0, r0, #6 + orrs r1, r0 + strh r1, [r4, #0x20] + movs r0, #1 + strb r0, [r4, #0xc] + b _0805BDB0 +_0805BD94: + ldrh r0, [r4, #0x20] + ldrb r1, [r4, #0xb] + bl GetTileType + cmp r0, #0x76 + bne _0805BDB0 + ldrh r0, [r4, #0x3e] + bl SetFlag + ldrb r0, [r4, #0xe] + bl sub_0805308C + bl DeleteThisEntity +_0805BDB0: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BDB4.inc b/asm/non_matching/manager23/sub_0805BDB4.inc new file mode 100644 index 00000000..9e1ee204 --- /dev/null +++ b/asm/non_matching/manager23/sub_0805BDB4.inc @@ -0,0 +1,90 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #0 + beq _0805BDF4 + cmp r0, #1 + beq _0805BE2C + ldrh r0, [r4, #0x22] + subs r0, #1 + strh r0, [r4, #0x22] + lsls r0, r0, #0x10 + cmp r0, #0 + bne _0805BE58 + movs r1, #0x38 + ldrsh r0, [r4, r1] + movs r2, #0x3a + ldrsh r1, [r4, r2] + ldrb r2, [r4, #0xb] + bl CreateDustAt + ldrh r0, [r4, #0x3e] + bl ClearFlag + ldrh r0, [r4, #0x20] + ldrb r1, [r4, #0xb] + bl sub_0807BA8C + ldrb r0, [r4, #0xe] + rsbs r0, r0, #0 + bl sub_0805308C + b _0805BE26 +_0805BDF4: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + bne _0805BE08 + ldrh r0, [r4, #0x3c] + bl CheckFlags + cmp r0, #0 + beq _0805BE0E +_0805BE08: + adds r0, r4, #0 + bl sub_0805BE94 +_0805BE0E: + ldrh r1, [r4, #0x38] + lsls r1, r1, #0x10 + asrs r1, r1, #0x14 + movs r2, #0x3f + ands r1, r2 + ldrh r0, [r4, #0x3a] + lsls r0, r0, #0x10 + asrs r0, r0, #0x14 + ands r0, r2 + lsls r0, r0, #6 + orrs r1, r0 + strh r1, [r4, #0x20] +_0805BE26: + movs r0, #1 + strb r0, [r4, #0xc] + b _0805BE6C +_0805BE2C: + ldrh r0, [r4, #0x20] + ldrb r1, [r4, #0xb] + bl GetTileType + cmp r0, #0x76 + bne _0805BE6C + ldrh r0, [r4, #0x3e] + bl SetFlag + ldrb r0, [r4, #0xe] + bl sub_0805308C + movs r0, #2 + strb r0, [r4, #0xc] + adds r0, r4, #0 + adds r0, #0x36 + ldrb r1, [r0] + lsls r0, r1, #4 + subs r0, r0, r1 + lsls r0, r0, #2 + strh r0, [r4, #0x22] + b _0805BE6C +_0805BE58: + ldrh r0, [r4, #0x3c] + bl CheckFlags + cmp r0, #0 + beq _0805BE6C + adds r0, r4, #0 + bl sub_0805BEC4 + bl DeleteThisEntity +_0805BE6C: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BE70.inc b/asm/non_matching/manager23/sub_0805BE70.inc new file mode 100644 index 00000000..18b92284 --- /dev/null +++ b/asm/non_matching/manager23/sub_0805BE70.inc @@ -0,0 +1,19 @@ + .syntax unified + push {r4, lr} + adds r4, r1, #0 + ldrh r1, [r0, #0x38] + lsls r1, r1, #0x10 + asrs r1, r1, #0x14 + movs r3, #0x3f + ands r1, r3 + ldrh r2, [r0, #0x3a] + lsls r2, r2, #0x10 + asrs r2, r2, #0x14 + ands r2, r3 + lsls r2, r2, #6 + orrs r1, r2 + ldrb r2, [r0, #0xb] + adds r0, r4, #0 + bl SetTileType + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BE94.inc b/asm/non_matching/manager23/sub_0805BE94.inc new file mode 100644 index 00000000..a4e34a14 --- /dev/null +++ b/asm/non_matching/manager23/sub_0805BE94.inc @@ -0,0 +1,23 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r1, [r4, #0x38] + lsls r1, r1, #0x10 + asrs r1, r1, #0x14 + movs r2, #0x3f + ands r1, r2 + ldrh r0, [r4, #0x3a] + lsls r0, r0, #0x10 + asrs r0, r0, #0x14 + ands r0, r2 + lsls r0, r0, #6 + orrs r1, r0 + ldrb r2, [r4, #0xb] + movs r0, #0x76 + bl SetTileType + ldrb r0, [r4, #0xe] + bl sub_0805308C + bl DeleteThisEntity + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BEC4.inc b/asm/non_matching/manager23/sub_0805BEC4.inc new file mode 100644 index 00000000..daf91631 --- /dev/null +++ b/asm/non_matching/manager23/sub_0805BEC4.inc @@ -0,0 +1,43 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + movs r0, #0x2a + movs r1, #1 + movs r2, #0 + bl CreateObject + adds r2, r0, #0 + cmp r2, #0 + beq _0805BF10 + ldrb r1, [r2, #0x11] + movs r0, #0x10 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #3 + orrs r0, r1 + strb r0, [r2, #0x11] + ldr r1, _0805BF14 @ =gRoomControls + ldrh r0, [r1, #6] + ldrh r3, [r4, #0x38] + adds r0, r0, r3 + strh r0, [r2, #0x2e] + ldrh r0, [r1, #8] + ldrh r1, [r4, #0x3a] + adds r0, r0, r1 + strh r0, [r2, #0x32] + ldrb r1, [r4, #0xb] + adds r0, r2, #0 + adds r0, #0x38 + strb r1, [r0] + 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] +_0805BF10: + pop {r4, pc} + .align 2, 0 +_0805BF14: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager29/Manager29_Main.inc b/asm/non_matching/manager29/Manager29_Main.inc new file mode 100644 index 00000000..a95f1469 --- /dev/null +++ b/asm/non_matching/manager29/Manager29_Main.inc @@ -0,0 +1,29 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #0 + bne _0805CBB8 + adds r0, r4, #0 + bl sub_0805CBD0 + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805CBCE + adds r0, r4, #0 + bl sub_0805CC3C + adds r0, r4, #0 + bl DeleteManager + b _0805CBCE +_0805CBB8: + adds r0, r4, #0 + bl sub_0805CF80 + cmp r0, #0 + beq _0805CBCE + ldrh r0, [r4, #0x3e] + bl SetFlag + adds r0, r4, #0 + bl DeleteManager +_0805CBCE: + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/manager29/sub_0805CBD0.inc b/asm/non_matching/manager29/sub_0805CBD0.inc new file mode 100644 index 00000000..ac48b7a1 --- /dev/null +++ b/asm/non_matching/manager29/sub_0805CBD0.inc @@ -0,0 +1,54 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r0, #0 + movs r0, #1 + strb r0, [r5, #0xc] + ldrh r1, [r5, #0x38] + lsls r1, r1, #0x10 + asrs r1, r1, #0x14 + movs r3, #0x3f + ands r1, r3 + ldrh r0, [r5, #0x3a] + lsls r0, r0, #0x10 + asrs r0, r0, #0x14 + ands r0, r3 + lsls r0, r0, #6 + orrs r1, r0 + strh r1, [r5, #0x38] + ldrh r2, [r5, #0x3c] + lsrs r2, r2, #4 + ands r2, r3 + adds r0, r5, #0 + adds r0, #0x36 + ldrb r1, [r0] + adds r0, #1 + ldrb r0, [r0] + lsls r0, r0, #8 + adds r1, r1, r0 + asrs r1, r1, #4 + ands r1, r3 + lsls r1, r1, #6 + orrs r2, r1 + strh r2, [r5, #0x3a] + movs r1, #0x38 + ldrsh r0, [r5, r1] + adds r4, r5, #0 + adds r4, #0x34 + ldrb r1, [r4] + bl GetTileType + strh r0, [r5, #0x3c] + ldrb r0, [r4] + bl GetLayerByIndex + ldr r2, _0805CC38 @ =0x00005004 + adds r1, r0, r2 + str r1, [r5, #0x28] + movs r2, #0x3a + ldrsh r1, [r5, r2] + lsls r1, r1, #1 + adds r1, #4 + adds r0, r0, r1 + str r0, [r5, #0x2c] + pop {r4, r5, pc} + .align 2, 0 +_0805CC38: .4byte 0x00005004 + .syntax divided diff --git a/asm/manager29.s b/asm/non_matching/manager29/sub_0805CC3C.inc similarity index 73% rename from asm/manager29.s rename to asm/non_matching/manager29/sub_0805CC3C.inc index ae60f934..402b9d89 100644 --- a/asm/manager29.s +++ b/asm/non_matching/manager29/sub_0805CC3C.inc @@ -1,98 +1,4 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - .syntax unified - - .text - - thumb_func_start Manager29_Main -Manager29_Main: @ 0x0805CB90 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805CBB8 - adds r0, r4, #0 - bl sub_0805CBD0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805CBCE - adds r0, r4, #0 - bl sub_0805CC3C - adds r0, r4, #0 - bl DeleteManager - b _0805CBCE -_0805CBB8: - adds r0, r4, #0 - bl sub_0805CF80 - cmp r0, #0 - beq _0805CBCE - ldrh r0, [r4, #0x3e] - bl SetFlag - adds r0, r4, #0 - bl DeleteManager -_0805CBCE: - pop {r4, pc} - - thumb_func_start sub_0805CBD0 -sub_0805CBD0: @ 0x0805CBD0 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #1 - strb r0, [r5, #0xc] - ldrh r1, [r5, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r3, #0x3f - ands r1, r3 - ldrh r0, [r5, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r5, #0x38] - ldrh r2, [r5, #0x3c] - lsrs r2, r2, #4 - ands r2, r3 - adds r0, r5, #0 - adds r0, #0x36 - ldrb r1, [r0] - adds r0, #1 - ldrb r0, [r0] - lsls r0, r0, #8 - adds r1, r1, r0 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r2, r1 - strh r2, [r5, #0x3a] - movs r1, #0x38 - ldrsh r0, [r5, r1] - adds r4, r5, #0 - adds r4, #0x34 - ldrb r1, [r4] - bl GetTileType - strh r0, [r5, #0x3c] - ldrb r0, [r4] - bl GetLayerByIndex - ldr r2, _0805CC38 @ =0x00005004 - adds r1, r0, r2 - str r1, [r5, #0x28] - movs r2, #0x3a - ldrsh r1, [r5, r2] - lsls r1, r1, #1 - adds r1, #4 - adds r0, r0, r1 - str r0, [r5, #0x2c] - pop {r4, r5, pc} - .align 2, 0 -_0805CC38: .4byte 0x00005004 - - thumb_func_start sub_0805CC3C -sub_0805CC3C: @ 0x0805CC3C push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} @@ -448,39 +354,4 @@ _0805CF70: .4byte 0x00000372 _0805CF74: .4byte 0x0000036F _0805CF78: .4byte 0x00000375 _0805CF7C: .4byte 0x00000371 - - thumb_func_start sub_0805CF80 -sub_0805CF80: @ 0x0805CF80 - push {lr} - ldr r1, [r0, #0x2c] - ldrh r1, [r1] - ldr r0, [r0, #0x28] - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r1, [r1] - movs r2, #0 - ldr r0, _0805CFBC @ =0x00000365 - cmp r1, r0 - beq _0805CFB4 - adds r0, #4 - cmp r1, r0 - beq _0805CFB4 - adds r0, #1 - cmp r1, r0 - beq _0805CFB4 - adds r0, #1 - cmp r1, r0 - beq _0805CFB4 - adds r0, #2 - cmp r1, r0 - beq _0805CFB4 - subs r0, #1 - cmp r1, r0 - bne _0805CFB6 -_0805CFB4: - movs r2, #1 -_0805CFB6: - adds r0, r2, #0 - pop {pc} - .align 2, 0 -_0805CFBC: .4byte 0x00000365 + .syntax divided diff --git a/asm/non_matching/manager29/sub_0805CF80.inc b/asm/non_matching/manager29/sub_0805CF80.inc new file mode 100644 index 00000000..6e7c0007 --- /dev/null +++ b/asm/non_matching/manager29/sub_0805CF80.inc @@ -0,0 +1,35 @@ + .syntax unified + push {lr} + ldr r1, [r0, #0x2c] + ldrh r1, [r1] + ldr r0, [r0, #0x28] + lsls r1, r1, #1 + adds r1, r1, r0 + ldrh r1, [r1] + movs r2, #0 + ldr r0, _0805CFBC @ =0x00000365 + cmp r1, r0 + beq _0805CFB4 + adds r0, #4 + cmp r1, r0 + beq _0805CFB4 + adds r0, #1 + cmp r1, r0 + beq _0805CFB4 + adds r0, #1 + cmp r1, r0 + beq _0805CFB4 + adds r0, #2 + cmp r1, r0 + beq _0805CFB4 + subs r0, #1 + cmp r1, r0 + bne _0805CFB6 +_0805CFB4: + movs r2, #1 +_0805CFB6: + adds r0, r2, #0 + pop {pc} + .align 2, 0 +_0805CFBC: .4byte 0x00000365 + .syntax divided diff --git a/asm/non_matching/manager2B/Manager2B_Main.inc b/asm/non_matching/manager2B/Manager2B_Main.inc new file mode 100644 index 00000000..5e0a806b --- /dev/null +++ b/asm/non_matching/manager2B/Manager2B_Main.inc @@ -0,0 +1,12 @@ + .syntax unified + push {lr} + ldr r2, _0805D028 @ =gUnk_08108D30 + ldrb r1, [r0, #0xc] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_0805D028: .4byte gUnk_08108D30 + .syntax divided diff --git a/asm/non_matching/manager2B/sub_0805D02C.inc b/asm/non_matching/manager2B/sub_0805D02C.inc new file mode 100644 index 00000000..fc30b11f --- /dev/null +++ b/asm/non_matching/manager2B/sub_0805D02C.inc @@ -0,0 +1,74 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + adds r6, r0, #0 + ldrh r0, [r6, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805D046 + bl DeleteThisEntity +_0805D046: + ldr r0, _0805D0BC @ =gEntCount + ldrb r0, [r0] + cmp r0, #0x43 + bhi _0805D0B0 + ldrb r0, [r6, #0xa] + bl GetCurrentRoomProperty + adds r5, r0, #0 + movs r7, #0 + movs r0, #0x36 + adds r0, r0, r6 + mov sl, r0 + ldr r1, _0805D0C0 @ =gRoomControls + mov r8, r1 + movs r0, #0x20 + adds r0, r0, r6 + mov sb, r0 +_0805D068: + ldrh r1, [r5, #4] + movs r0, #0xa0 + adds r2, r7, #0 + bl CreateObject + adds r4, r0, #0 + mov r1, r8 + ldrh r0, [r1, #6] + ldrh r1, [r5] + adds r0, r0, r1 + strh r0, [r4, #0x2e] + mov r1, r8 + ldrh r0, [r1, #8] + ldrh r1, [r5, #2] + adds r0, r0, r1 + strh r0, [r4, #0x32] + str r6, [r4, #0x50] + adds r0, r4, #0 + bl sub_08016A30 + mov r0, sb + adds r0, #4 + mov sb, r0 + subs r0, #4 + stm r0!, {r4} + adds r7, #1 + adds r5, #6 + cmp r7, #3 + bls _0805D068 + movs r0, #0 + movs r1, #1 + strb r1, [r6, #0xc] + movs r1, #0x3c + strb r1, [r6, #0xf] + mov r1, sl + strb r0, [r1] +_0805D0B0: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0805D0BC: .4byte gEntCount +_0805D0C0: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager2B/sub_0805D0C4.inc b/asm/non_matching/manager2B/sub_0805D0C4.inc new file mode 100644 index 00000000..5472b6d4 --- /dev/null +++ b/asm/non_matching/manager2B/sub_0805D0C4.inc @@ -0,0 +1,30 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xf] + subs r0, #1 + strb r0, [r4, #0xf] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805D0D8 + movs r0, #0xb4 + strb r0, [r4, #0xf] +_0805D0D8: + adds r5, r4, #0 + adds r5, #0x36 + ldrb r0, [r5] + cmp r0, #0xf + bne _0805D0F6 + movs r0, #2 + strb r0, [r4, #0xc] + movs r0, #8 + strb r0, [r4, #0xe] + movs r0, #0x72 + bl SoundReq + adds r0, r4, #0 + bl sub_0805D11C +_0805D0F6: + movs r0, #0 + strb r0, [r5] + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/manager2B/sub_0805D0FC.inc b/asm/non_matching/manager2B/sub_0805D0FC.inc new file mode 100644 index 00000000..c0e0bd1d --- /dev/null +++ b/asm/non_matching/manager2B/sub_0805D0FC.inc @@ -0,0 +1,17 @@ + .syntax unified + 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 _0805D118 + ldrh r0, [r4, #0x3e] + bl SetFlag + adds r0, r4, #0 + bl DeleteManager +_0805D118: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager2B/sub_0805D11C.inc b/asm/non_matching/manager2B/sub_0805D11C.inc new file mode 100644 index 00000000..6f1e4f0e --- /dev/null +++ b/asm/non_matching/manager2B/sub_0805D11C.inc @@ -0,0 +1,44 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + movs r6, #0 + ldr r1, _0805D170 @ =gRoomControls + mov r8, r1 + movs r7, #0x3f + adds r5, r0, #0 + adds r5, #0x20 +_0805D12E: + ldr r4, [r5] + movs r0, #0 + stm r5!, {r0} + movs r2, #0x2e + ldrsh r0, [r4, r2] + mov r3, r8 + ldrh r1, [r3, #6] + subs r0, r0, r1 + asrs r0, r0, #4 + ands r0, r7 + movs r2, #0x32 + ldrsh r1, [r4, r2] + ldrh r2, [r3, #8] + subs r1, r1, r2 + asrs r1, r1, #4 + ands r1, r7 + lsls r1, r1, #6 + orrs r0, r1 + adds r1, r4, #0 + adds r1, #0x38 + ldrb r1, [r1] + bl sub_0807BA8C + adds r0, r4, #0 + bl DeleteEntity + adds r6, #1 + cmp r6, #3 + bls _0805D12E + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0805D170: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D280.inc b/asm/non_matching/manager2E/sub_0805D280.inc new file mode 100644 index 00000000..3b24e036 --- /dev/null +++ b/asm/non_matching/manager2E/sub_0805D280.inc @@ -0,0 +1,31 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x3c] + bl CheckFlags + cmp r0, #0 + beq _0805D292 + bl DeleteThisEntity +_0805D292: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805D2A6 + ldrh r0, [r4, #0x3c] + bl SetFlag + bl DeleteThisEntity +_0805D2A6: + movs r0, #1 + strb r0, [r4, #0xc] + ldrb r0, [r4, #0xe] + cmp r0, #0 + bne _0805D2B4 + movs r0, #0x1e + strb r0, [r4, #0xe] +_0805D2B4: + adds r0, r4, #0 + movs r1, #6 + bl sub_0805E3A0 + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D2C0.inc b/asm/non_matching/manager2E/sub_0805D2C0.inc new file mode 100644 index 00000000..f90414ea --- /dev/null +++ b/asm/non_matching/manager2E/sub_0805D2C0.inc @@ -0,0 +1,27 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805D2EE + ldr r0, _0805D2F0 @ =gUnk_03003DC0 + ldrh r0, [r0, #8] + cmp r0, #1 + bhi _0805D2EE + movs r0, #2 + strb r0, [r4, #0xc] + ldrb r0, [r4, #0xe] + cmp r0, #1 + bne _0805D2E6 + adds r0, r4, #0 + bl sub_0805D2F4 +_0805D2E6: + ldrb r1, [r4, #0xe] + adds r0, r4, #0 + bl sub_0805E4E0 +_0805D2EE: + pop {r4, pc} + .align 2, 0 +_0805D2F0: .4byte gUnk_03003DC0 + .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D2F4.inc b/asm/non_matching/manager2E/sub_0805D2F4.inc new file mode 100644 index 00000000..f9780632 --- /dev/null +++ b/asm/non_matching/manager2E/sub_0805D2F4.inc @@ -0,0 +1,29 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r0, _0805D310 @ =gUnk_03003DC0 + ldrh r0, [r0, #8] + cmp r0, #0 + bne _0805D328 + movs r1, #0x38 + ldrsh r0, [r4, r1] + cmp r0, #0 + beq _0805D314 + bl SoundReq + b _0805D31A + .align 2, 0 +_0805D310: .4byte gUnk_03003DC0 +_0805D314: + movs r0, #0x72 + bl SoundReq +_0805D31A: + ldrh r0, [r4, #0x3c] + cmp r0, #0 + beq _0805D324 + bl SetFlag +_0805D324: + bl DeleteThisEntity +_0805D328: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D32C.inc b/asm/non_matching/manager2E/sub_0805D32C.inc new file mode 100644 index 00000000..bfbb75de --- /dev/null +++ b/asm/non_matching/manager2E/sub_0805D32C.inc @@ -0,0 +1,12 @@ + .syntax unified + push {lr} + ldr r2, _0805D340 @ =gUnk_08108D50 + ldrb r1, [r0, #0xc] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_0805D340: .4byte gUnk_08108D50 + .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D344.inc b/asm/non_matching/manager2E/sub_0805D344.inc new file mode 100644 index 00000000..8a333ead --- /dev/null +++ b/asm/non_matching/manager2E/sub_0805D344.inc @@ -0,0 +1,21 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x3e] + bl CheckFlags + movs r0, #1 + strb r0, [r4, #0xc] + ldrb r0, [r4, #0xe] + cmp r0, #0 + bne _0805D35C + movs r0, #0x1e + strb r0, [r4, #0xe] +_0805D35C: + ldrb r0, [r4, #0xe] + strb r0, [r4, #0xf] + adds r0, r4, #0 + movs r1, #6 + bl sub_0805E3A0 + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D36C.inc b/asm/non_matching/manager2E/sub_0805D36C.inc new file mode 100644 index 00000000..6398179b --- /dev/null +++ b/asm/non_matching/manager2E/sub_0805D36C.inc @@ -0,0 +1,14 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805D382 + movs r0, #2 + strb r0, [r4, #0xc] + ldrb r0, [r4, #0xf] + strb r0, [r4, #0xe] +_0805D382: + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D384.inc b/asm/non_matching/manager2E/sub_0805D384.inc new file mode 100644 index 00000000..ee124568 --- /dev/null +++ b/asm/non_matching/manager2E/sub_0805D384.inc @@ -0,0 +1,35 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xe] + cmp r0, #0 + beq _0805D3B2 + subs r0, #1 + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805D3C6 + movs r1, #0x38 + ldrsh r0, [r4, r1] + movs r1, #0x72 + cmp r0, #0 + beq _0805D3A4 + adds r1, r0, #0 +_0805D3A4: + adds r0, r1, #0 + bl SoundReq + ldrh r0, [r4, #0x3c] + bl SetFlag + b _0805D3C6 +_0805D3B2: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + bne _0805D3C6 + movs r0, #1 + strb r0, [r4, #0xc] + ldrh r0, [r4, #0x3c] + bl ClearFlag +_0805D3C6: + pop {r4, pc} + .syntax divided diff --git a/asm/manager2F.s b/asm/non_matching/manager2F/Manager2F_Main.inc similarity index 67% rename from asm/manager2F.s rename to asm/non_matching/manager2F/Manager2F_Main.inc index 4c4b0c51..01d9f8d9 100644 --- a/asm/manager2F.s +++ b/asm/non_matching/manager2F/Manager2F_Main.inc @@ -1,13 +1,4 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - .syntax unified - - .text - - thumb_func_start Manager2F_Main -Manager2F_Main: @ 0x0805D3C8 push {r4, lr} adds r4, r0, #0 cmp r4, #0 @@ -83,32 +74,4 @@ _0805D460: .4byte gRoomControls _0805D464: .4byte 0xFFFFC000 _0805D468: .4byte 0xFFFFE000 _0805D46C: .4byte gScreen - - thumb_func_start sub_0805D470 -sub_0805D470: @ 0x0805D470 - push {lr} - movs r0, #0x4c - bl LoadGfxGroup - ldr r2, _0805D4A0 @ =gScreen - ldr r0, _0805D4A4 @ =0x00001E07 - strh r0, [r2, #0x2c] - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _0805D4A8 @ =gRoomControls - ldrh r0, [r1, #0x2a] - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] - pop {pc} - .align 2, 0 -_0805D4A0: .4byte gScreen -_0805D4A4: .4byte 0x00001E07 -_0805D4A8: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager2F/sub_0805D470.inc b/asm/non_matching/manager2F/sub_0805D470.inc new file mode 100644 index 00000000..9417a56e --- /dev/null +++ b/asm/non_matching/manager2F/sub_0805D470.inc @@ -0,0 +1,28 @@ + .syntax unified + push {lr} + movs r0, #0x4c + bl LoadGfxGroup + ldr r2, _0805D4A0 @ =gScreen + ldr r0, _0805D4A4 @ =0x00001E07 + strh r0, [r2, #0x2c] + ldrh r1, [r2] + movs r3, #0x80 + lsls r3, r3, #4 + adds r0, r3, #0 + orrs r0, r1 + strh r0, [r2] + ldr r1, _0805D4A8 @ =gRoomControls + ldrh r0, [r1, #0x2a] + ldrh r3, [r1, #0xa] + adds r0, r0, r3 + strh r0, [r2, #0x2e] + ldrh r0, [r1, #0x2e] + ldrh r1, [r1, #0xc] + adds r0, r0, r1 + strh r0, [r2, #0x30] + pop {pc} + .align 2, 0 +_0805D4A0: .4byte gScreen +_0805D4A4: .4byte 0x00001E07 +_0805D4A8: .4byte gRoomControls + .syntax divided diff --git a/asm/manager31.s b/asm/non_matching/manager31/Manager31_Main.inc similarity index 95% rename from asm/manager31.s rename to asm/non_matching/manager31/Manager31_Main.inc index 50642d48..07a9d156 100644 --- a/asm/manager31.s +++ b/asm/non_matching/manager31/Manager31_Main.inc @@ -1,13 +1,4 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - .syntax unified - - .text - - thumb_func_start Manager31_Main -Manager31_Main: @ 0x0805D630 push {r4, r5, r6, r7, lr} mov r7, sb mov r6, r8 @@ -180,3 +171,4 @@ _0805D78E: .align 2, 0 _0805D79C: .4byte gUnk_08108D5C _0805D7A0: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager32/Manager32_Main.inc b/asm/non_matching/manager32/Manager32_Main.inc new file mode 100644 index 00000000..7b7b447b --- /dev/null +++ b/asm/non_matching/manager32/Manager32_Main.inc @@ -0,0 +1,25 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r1, _0805D7D4 @ =gUnk_08108D7C + ldrb r0, [r4, #0xc] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + adds r0, r4, #0 + bl _call_via_r1 + ldr r0, _0805D7D8 @ =gScreenTransition + ldr r0, [r0] + lsls r0, r0, #4 + str r0, [r4, #0x24] + adds r0, r4, #0 + bl sub_0805D9D8 + ldr r0, [r4, #0x20] + ldr r1, [r4, #0x28] + ldr r2, [r4, #0x24] + bl sub_0805DA08 + pop {r4, pc} + .align 2, 0 +_0805D7D4: .4byte gUnk_08108D7C +_0805D7D8: .4byte gScreenTransition + .syntax divided diff --git a/asm/non_matching/manager32/sub_0805D7DC.inc b/asm/non_matching/manager32/sub_0805D7DC.inc new file mode 100644 index 00000000..51d63c09 --- /dev/null +++ b/asm/non_matching/manager32/sub_0805D7DC.inc @@ -0,0 +1,77 @@ + .syntax unified + push {lr} + adds r1, r0, #0 + ldrb r0, [r1, #0xa] + movs r2, #2 + cmp r0, #0 + bne _0805D7EA + movs r2, #1 +_0805D7EA: + movs r0, #0 + strb r2, [r1, #0xc] + str r0, [r1, #0x20] + str r0, [r1, #0x24] + ldr r0, _0805D80C @ =gRoomControls + ldrb r0, [r0, #4] + cmp r0, #0x78 + beq _0805D83C + cmp r0, #0x78 + bgt _0805D816 + cmp r0, #7 + beq _0805D828 + cmp r0, #7 + bgt _0805D810 + cmp r0, #3 + beq _0805D82C + b _0805D828 + .align 2, 0 +_0805D80C: .4byte gRoomControls +_0805D810: + cmp r0, #0x38 + beq _0805D840 + b _0805D828 +_0805D816: + cmp r0, #0x81 + beq _0805D830 + cmp r0, #0x81 + bgt _0805D824 + cmp r0, #0x80 + beq _0805D834 + b _0805D828 +_0805D824: + cmp r0, #0x88 + beq _0805D838 +_0805D828: + movs r1, #0 + b _0805D842 +_0805D82C: + movs r1, #1 + b _0805D842 +_0805D830: + movs r1, #2 + b _0805D842 +_0805D834: + movs r1, #3 + b _0805D842 +_0805D838: + movs r1, #4 + b _0805D842 +_0805D83C: + movs r1, #5 + b _0805D842 +_0805D840: + movs r1, #6 +_0805D842: + ldr r0, _0805D854 @ =gUnk_08108D74 + adds r0, r1, r0 + ldrb r0, [r0] + bl LoadGfxGroup + ldr r1, _0805D858 @ =gScreen + ldr r0, _0805D85C @ =0x00001E04 + strh r0, [r1, #0x2c] + pop {pc} + .align 2, 0 +_0805D854: .4byte gUnk_08108D74 +_0805D858: .4byte gScreen +_0805D85C: .4byte 0x00001E04 + .syntax divided diff --git a/asm/non_matching/manager32/sub_0805D860.inc b/asm/non_matching/manager32/sub_0805D860.inc new file mode 100644 index 00000000..7e46065a --- /dev/null +++ b/asm/non_matching/manager32/sub_0805D860.inc @@ -0,0 +1,84 @@ + .syntax unified + push {lr} + adds r1, r0, #0 + ldrb r0, [r1, #0xd] + cmp r0, #1 + beq _0805D89C + cmp r0, #1 + bgt _0805D874 + cmp r0, #0 + beq _0805D87E + b _0805D8D6 +_0805D874: + cmp r0, #2 + beq _0805D8B0 + cmp r0, #3 + beq _0805D8C2 + b _0805D8D6 +_0805D87E: + movs r0, #1 + strb r0, [r1, #0xd] + movs r0, #0x80 + str r0, [r1, #0x20] + ldr r2, _0805D898 @ =gScreen + ldrh r1, [r2] + movs r3, #0x80 + lsls r3, r3, #4 + adds r0, r3, #0 + orrs r0, r1 + strh r0, [r2] + b _0805D8F4 + .align 2, 0 +_0805D898: .4byte gScreen +_0805D89C: + ldr r0, [r1, #0x20] + subs r0, #1 + str r0, [r1, #0x20] + cmp r0, #0x10 + bne _0805D8F4 + movs r0, #2 + strb r0, [r1, #0xd] + movs r0, #0x2d + strb r0, [r1, #0xe] + b _0805D8F4 +_0805D8B0: + ldrb r0, [r1, #0xe] + subs r0, #1 + strb r0, [r1, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805D8F4 + movs r0, #3 + strb r0, [r1, #0xd] + b _0805D8F4 +_0805D8C2: + ldr r0, [r1, #0x20] + subs r0, #1 + str r0, [r1, #0x20] + cmp r0, #0 + bne _0805D8F4 + movs r0, #4 + strb r0, [r1, #0xd] + movs r0, #0x3c + strb r0, [r1, #0xe] + b _0805D8F4 +_0805D8D6: + ldrb r0, [r1, #0xe] + subs r0, #1 + strb r0, [r1, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805D8F4 + bl sub_0801E104 + ldr r2, _0805D8F8 @ =gScreen + ldrh r1, [r2] + ldr r0, _0805D8FC @ =0x0000F7FF + ands r0, r1 + strh r0, [r2] + bl DeleteThisEntity +_0805D8F4: + pop {pc} + .align 2, 0 +_0805D8F8: .4byte gScreen +_0805D8FC: .4byte 0x0000F7FF + .syntax divided diff --git a/asm/non_matching/manager32/sub_0805D900.inc b/asm/non_matching/manager32/sub_0805D900.inc new file mode 100644 index 00000000..957bfdfe --- /dev/null +++ b/asm/non_matching/manager32/sub_0805D900.inc @@ -0,0 +1,75 @@ + .syntax unified + push {lr} + adds r2, r0, #0 + ldrb r0, [r2, #0xd] + cmp r0, #1 + beq _0805D938 + cmp r0, #1 + bgt _0805D914 + cmp r0, #0 + beq _0805D91A + b _0805D966 +_0805D914: + cmp r0, #2 + beq _0805D94E + b _0805D966 +_0805D91A: + movs r1, #1 + strb r1, [r2, #0xd] + movs r0, #0x2d + strb r0, [r2, #0xe] + str r1, [r2, #0x20] + ldr r2, _0805D934 @ =gScreen + ldrh r1, [r2] + movs r3, #0x80 + lsls r3, r3, #4 + adds r0, r3, #0 + orrs r0, r1 + strh r0, [r2] + b _0805D982 + .align 2, 0 +_0805D934: .4byte gScreen +_0805D938: + ldrb r0, [r2, #0xe] + subs r0, #1 + strb r0, [r2, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805D982 + movs r0, #2 + strb r0, [r2, #0xd] + movs r0, #0x14 + strb r0, [r2, #0xe] + b _0805D982 +_0805D94E: + ldr r0, [r2, #0x20] + adds r0, #1 + str r0, [r2, #0x20] + ldrb r0, [r2, #0xe] + subs r0, #1 + strb r0, [r2, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805D982 + movs r0, #3 + strb r0, [r2, #0xd] + b _0805D982 +_0805D966: + ldr r0, [r2, #0x20] + adds r0, #4 + str r0, [r2, #0x20] + cmp r0, #0x80 + bls _0805D982 + bl sub_0801E104 + ldr r2, _0805D984 @ =gScreen + ldrh r1, [r2] + ldr r0, _0805D988 @ =0x0000F7FF + ands r0, r1 + strh r0, [r2] + bl DeleteThisEntity +_0805D982: + pop {pc} + .align 2, 0 +_0805D984: .4byte gScreen +_0805D988: .4byte 0x0000F7FF + .syntax divided diff --git a/asm/non_matching/manager32/sub_0805D98C.inc b/asm/non_matching/manager32/sub_0805D98C.inc new file mode 100644 index 00000000..85c4b0b3 --- /dev/null +++ b/asm/non_matching/manager32/sub_0805D98C.inc @@ -0,0 +1,43 @@ + .syntax unified + push {lr} + adds r2, r0, #0 + ldr r3, _0805D9D4 @ =gInput + ldrh r1, [r3] + movs r0, #0x40 + ands r0, r1 + cmp r0, #0 + beq _0805D9A2 + ldr r0, [r2, #0x20] + subs r0, #1 + str r0, [r2, #0x20] +_0805D9A2: + ldrh r1, [r3] + movs r0, #0x80 + ands r0, r1 + adds r3, r1, #0 + cmp r0, #0 + beq _0805D9B4 + ldr r0, [r2, #0x20] + adds r0, #1 + str r0, [r2, #0x20] +_0805D9B4: + movs r0, #0x20 + ands r0, r3 + cmp r0, #0 + beq _0805D9C2 + ldr r0, [r2, #0x28] + subs r0, #1 + str r0, [r2, #0x28] +_0805D9C2: + movs r0, #0x10 + ands r0, r1 + cmp r0, #0 + beq _0805D9D0 + ldr r0, [r2, #0x28] + adds r0, #1 + str r0, [r2, #0x28] +_0805D9D0: + pop {pc} + .align 2, 0 +_0805D9D4: .4byte gInput + .syntax divided diff --git a/asm/non_matching/manager32/sub_0805D9D8.inc b/asm/non_matching/manager32/sub_0805D9D8.inc new file mode 100644 index 00000000..5ca9e63a --- /dev/null +++ b/asm/non_matching/manager32/sub_0805D9D8.inc @@ -0,0 +1,25 @@ + .syntax unified + push {r4, lr} + ldr r4, [r0, #0x14] + cmp r4, #0 + beq _0805D9FC + ldr r3, _0805DA00 @ =gScreen + ldr r2, _0805DA04 @ =gRoomControls + ldrh r1, [r4, #0x2e] + ldrh r0, [r2, #0xa] + subs r1, r1, r0 + movs r0, #0x80 + subs r0, r0, r1 + strh r0, [r3, #0x2e] + ldrh r1, [r4, #0x32] + ldrh r0, [r2, #0xc] + subs r1, r1, r0 + movs r0, #0x8c + subs r0, r0, r1 + strh r0, [r3, #0x30] +_0805D9FC: + pop {r4, pc} + .align 2, 0 +_0805DA00: .4byte gScreen +_0805DA04: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager32/sub_0805DA08.inc b/asm/non_matching/manager32/sub_0805DA08.inc new file mode 100644 index 00000000..dda42029 --- /dev/null +++ b/asm/non_matching/manager32/sub_0805DA08.inc @@ -0,0 +1,65 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + mov sl, r0 + adds r5, r1, #0 + adds r6, r2, #0 + ldr r2, _0805DA78 @ =gUnk_03003DE4 + ldrb r1, [r2] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + ldr r1, _0805DA7C @ =gUnk_02017AA0 + adds r4, r0, r1 + movs r3, #0 + mov r8, r2 + mov sb, r1 + ldr r0, _0805DA80 @ =gSineTable + mov ip, r0 + movs r2, #0xff + ldr r1, _0805DA84 @ =gScreen +_0805DA34: + adds r0, r6, r3 + adds r0, r0, r5 + ands r0, r2 + lsls r0, r0, #1 + add r0, ip + movs r7, #0 + ldrsh r0, [r0, r7] + mov r7, sl + muls r7, r0, r7 + adds r0, r7, #0 + lsrs r0, r0, #8 + ldrh r7, [r1, #0x2e] + adds r0, r0, r7 + strh r0, [r4] + adds r4, #2 + adds r3, #1 + adds r5, #0x17 + cmp r3, #0x9f + bls _0805DA34 + mov r0, r8 + ldrb r1, [r0] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + add r0, sb + ldr r1, _0805DA88 @ =0x0400001C + ldr r2, _0805DA8C @ =0xA2600001 + bl sub_0805622C + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0805DA78: .4byte gUnk_03003DE4 +_0805DA7C: .4byte gUnk_02017AA0 +_0805DA80: .4byte gSineTable +_0805DA84: .4byte gScreen +_0805DA88: .4byte 0x0400001C +_0805DA8C: .4byte 0xA2600001 + .syntax divided diff --git a/asm/non_matching/manager32/sub_0805DA90.inc b/asm/non_matching/manager32/sub_0805DA90.inc new file mode 100644 index 00000000..2bb58d66 --- /dev/null +++ b/asm/non_matching/manager32/sub_0805DA90.inc @@ -0,0 +1,40 @@ + .syntax unified + push {r4, r5, lr} + adds r5, r0, #0 + adds r4, r1, #0 + bl GetEmptyManager + adds r1, r0, #0 + cmp r1, #0 + beq _0805DAB4 + movs r0, #9 + strb r0, [r1, #8] + movs r0, #0x32 + strb r0, [r1, #9] + strb r4, [r1, #0xa] + str r5, [r1, #0x14] + adds r0, r1, #0 + movs r1, #8 + bl AppendEntityToList +_0805DAB4: + ldr r0, _0805DAD8 @ =gArea + ldr r1, _0805DADC @ =0x0000088C + adds r4, r0, r1 + ldr r0, [r4] + cmp r0, #0 + beq _0805DAD4 + ldr r2, _0805DAE0 @ =gScreen + ldrh r1, [r2] + ldr r0, _0805DAE4 @ =0x0000F7FF + ands r0, r1 + strh r0, [r2] + bl sub_080528F0 + ldr r0, [r4] + bl DeleteManager +_0805DAD4: + pop {r4, r5, pc} + .align 2, 0 +_0805DAD8: .4byte gArea +_0805DADC: .4byte 0x0000088C +_0805DAE0: .4byte gScreen +_0805DAE4: .4byte 0x0000F7FF + .syntax divided diff --git a/asm/manager33.s b/asm/non_matching/manager33/Manager33_Main.inc similarity index 91% rename from asm/manager33.s rename to asm/non_matching/manager33/Manager33_Main.inc index 4eb95053..21b47bcd 100644 --- a/asm/manager33.s +++ b/asm/non_matching/manager33/Manager33_Main.inc @@ -1,13 +1,4 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - .syntax unified - - .text - - thumb_func_start Manager33_Main -Manager33_Main: @ 0x0805DAE8 push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} @@ -91,3 +82,4 @@ _0805DB88: pop {r4, r5, r6, r7, pc} .align 2, 0 _0805DB90: .4byte 0x0000FFE8 + .syntax divided diff --git a/asm/non_matching/manager34/Manager34_Main.inc b/asm/non_matching/manager34/Manager34_Main.inc new file mode 100644 index 00000000..c5a64403 --- /dev/null +++ b/asm/non_matching/manager34/Manager34_Main.inc @@ -0,0 +1,16 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldr r1, _0805DBB0 @ =gUnk_08108D8C + ldrb r0, [r4, #0xc] + 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_0805DBF0 + pop {r4, pc} + .align 2, 0 +_0805DBB0: .4byte gUnk_08108D8C + .syntax divided diff --git a/asm/non_matching/manager34/nullsub_498.inc b/asm/non_matching/manager34/nullsub_498.inc new file mode 100644 index 00000000..807ea5e0 --- /dev/null +++ b/asm/non_matching/manager34/nullsub_498.inc @@ -0,0 +1,4 @@ + .syntax unified + bx lr + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager34/sub_0805DBB4.inc b/asm/non_matching/manager34/sub_0805DBB4.inc new file mode 100644 index 00000000..65c91e5c --- /dev/null +++ b/asm/non_matching/manager34/sub_0805DBB4.inc @@ -0,0 +1,14 @@ + .syntax unified + movs r1, #1 + strb r1, [r0, #0xc] + ldr r1, _0805DBC8 @ =gScreenTransition + adds r1, #0x3d + ldrb r2, [r1] + lsls r1, r2, #4 + subs r1, r1, r2 + lsls r1, r1, #2 + strh r1, [r0, #0x20] + bx lr + .align 2, 0 +_0805DBC8: .4byte gScreenTransition + .syntax divided diff --git a/asm/non_matching/manager34/sub_0805DBCC.inc b/asm/non_matching/manager34/sub_0805DBCC.inc new file mode 100644 index 00000000..b9fdf79f --- /dev/null +++ b/asm/non_matching/manager34/sub_0805DBCC.inc @@ -0,0 +1,19 @@ + .syntax unified + push {lr} + adds r1, r0, #0 + ldr r0, [r1, #0x14] + ldr r0, [r0, #4] + cmp r0, #0 + bne _0805DBE6 + movs r0, #2 + strb r0, [r1, #0xc] + ldrh r0, [r1, #0x20] + ldr r2, _0805DBE8 @ =0x0000012D + cmp r0, r2 + bls _0805DBE6 + strh r2, [r1, #0x20] +_0805DBE6: + pop {pc} + .align 2, 0 +_0805DBE8: .4byte 0x0000012D + .syntax divided diff --git a/asm/non_matching/manager34/sub_0805DBF0.inc b/asm/non_matching/manager34/sub_0805DBF0.inc new file mode 100644 index 00000000..81092f35 --- /dev/null +++ b/asm/non_matching/manager34/sub_0805DBF0.inc @@ -0,0 +1,68 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x20] + subs r1, r0, #1 + strh r1, [r4, #0x20] + lsls r0, r1, #0x10 + cmp r0, #0 + bne _0805DC06 + bl sub_0805DC70 + b _0805DC6C +_0805DC06: + lsls r0, r1, #0x10 + lsrs r1, r0, #0x10 + cmp r1, #0x78 + bne _0805DC18 + movs r0, #0x78 + movs r1, #2 + bl sub_08080964 + b _0805DC36 +_0805DC18: + cmp r1, #0xd2 + bne _0805DC26 + movs r0, #0x5a + movs r1, #1 + bl sub_08080964 + b _0805DC36 +_0805DC26: + movs r0, #0x96 + lsls r0, r0, #1 + cmp r1, r0 + bne _0805DC36 + movs r0, #0x5a + movs r1, #0 + bl sub_08080964 +_0805DC36: + ldrh r1, [r4, #0x20] + adds r0, r1, #0 + cmp r0, #0x77 + bhi _0805DC42 + movs r0, #0xf + b _0805DC48 +_0805DC42: + cmp r0, #0xd1 + bhi _0805DC58 + movs r0, #0x1f +_0805DC48: + ands r0, r1 + cmp r0, #0 + bne _0805DC6C + movs r0, #0x93 + lsls r0, r0, #1 + bl SoundReq + b _0805DC6C +_0805DC58: + cmp r0, #0xc7 + bhi _0805DC6C + movs r0, #0x3f + ands r0, r1 + cmp r0, #0 + bne _0805DC6C + movs r0, #0x93 + lsls r0, r0, #1 + bl SoundReq +_0805DC6C: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/manager34/sub_0805DC70.inc b/asm/non_matching/manager34/sub_0805DC70.inc new file mode 100644 index 00000000..062503cd --- /dev/null +++ b/asm/non_matching/manager34/sub_0805DC70.inc @@ -0,0 +1,9 @@ + .syntax unified + push {lr} + bl sub_0805E5A8 + ldr r0, _0805DC80 @ =gUnk_0813AC48 + bl DoExitTransition + pop {pc} + .align 2, 0 +_0805DC80: .4byte gUnk_0813AC48 + .syntax divided diff --git a/asm/non_matching/manager35/Manager35_Main.inc b/asm/non_matching/manager35/Manager35_Main.inc new file mode 100644 index 00000000..5e14ae76 --- /dev/null +++ b/asm/non_matching/manager35/Manager35_Main.inc @@ -0,0 +1,12 @@ + .syntax unified + push {lr} + ldr r2, _0805DC98 @ =gUnk_08108D98 + ldrb r1, [r0, #0xc] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_0805DC98: .4byte gUnk_08108D98 + .syntax divided diff --git a/asm/non_matching/manager35/sub_0805DC9C.inc b/asm/non_matching/manager35/sub_0805DC9C.inc new file mode 100644 index 00000000..9b0f22ac --- /dev/null +++ b/asm/non_matching/manager35/sub_0805DC9C.inc @@ -0,0 +1,21 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x3c] + bl CheckFlags + cmp r0, #0 + beq _0805DCAE + bl DeleteThisEntity +_0805DCAE: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805DCC2 + ldrh r0, [r4, #0x3c] + bl SetFlag + bl DeleteThisEntity +_0805DCC2: + movs r0, #1 + strb r0, [r4, #0xc] + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/manager35/sub_0805DCC8.inc b/asm/non_matching/manager35/sub_0805DCC8.inc new file mode 100644 index 00000000..a6463901 --- /dev/null +++ b/asm/non_matching/manager35/sub_0805DCC8.inc @@ -0,0 +1,47 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _0805DD1E + movs r0, #2 + strb r0, [r4, #0xc] + adds r0, r4, #0 + adds r0, #0x35 + ldrb r0, [r0] + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805DCEC + movs r0, #0x1e + strb r0, [r4, #0xe] +_0805DCEC: + ldr r5, _0805DD20 @ =gRoomControls + ldr r0, [r5, #0x30] + str r0, [r4, #0x14] + movs r0, #0x69 + movs r1, #0 + movs r2, #0 + bl CreateObject + adds r1, r0, #0 + cmp r1, #0 + beq _0805DD1E + ldrh r0, [r5, #6] + ldrh r2, [r4, #0x38] + adds r0, r0, r2 + strh r0, [r1, #0x2e] + ldrh r0, [r5, #8] + ldrh r2, [r4, #0x3a] + adds r0, r0, r2 + strh r0, [r1, #0x32] + str r1, [r4, #0x18] + str r1, [r5, #0x30] + adds r0, r1, #0 + movs r1, #0x1e + bl sub_0805E4E0 +_0805DD1E: + pop {r4, r5, pc} + .align 2, 0 +_0805DD20: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager35/sub_0805DD24.inc b/asm/non_matching/manager35/sub_0805DD24.inc new file mode 100644 index 00000000..ddac4697 --- /dev/null +++ b/asm/non_matching/manager35/sub_0805DD24.inc @@ -0,0 +1,34 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + movs r0, #0 + movs r1, #8 + bl sub_0805E4E0 + ldr r0, _0805DD64 @ =gRoomControls + ldrb r1, [r0, #0xf] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + bne _0805DD60 + ldrb r0, [r4, #0xe] + subs r0, #1 + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805DD60 + movs r0, #3 + strb r0, [r4, #0xc] + ldrh r0, [r4, #0x3c] + bl SetFlag + adds r1, r4, #0 + adds r1, #0x36 + ldrb r0, [r1] + cmp r0, #0 + bne _0805DD60 + movs r0, #1 + strb r0, [r1] +_0805DD60: + pop {r4, pc} + .align 2, 0 +_0805DD64: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager35/sub_0805DD68.inc b/asm/non_matching/manager35/sub_0805DD68.inc new file mode 100644 index 00000000..c9e2894d --- /dev/null +++ b/asm/non_matching/manager35/sub_0805DD68.inc @@ -0,0 +1,40 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + movs r0, #0 + movs r1, #8 + bl sub_0805E4E0 + adds r1, r4, #0 + adds r1, #0x36 + ldrb r0, [r1] + cmp r0, #0 + beq _0805DD94 + subs r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805DDAE + ldr r1, _0805DD90 @ =gRoomControls + ldr r0, [r4, #0x14] + str r0, [r1, #0x30] + b _0805DDAE + .align 2, 0 +_0805DD90: .4byte gRoomControls +_0805DD94: + ldr r0, _0805DDB0 @ =gRoomControls + ldrb r1, [r0, #0xf] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + bne _0805DDAE + ldr r0, [r4, #0x18] + cmp r0, #0 + beq _0805DDAA + bl DeleteEntity +_0805DDAA: + bl DeleteThisEntity +_0805DDAE: + pop {r4, pc} + .align 2, 0 +_0805DDB0: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager37/Manager37_Main.inc b/asm/non_matching/manager37/Manager37_Main.inc new file mode 100644 index 00000000..6624db37 --- /dev/null +++ b/asm/non_matching/manager37/Manager37_Main.inc @@ -0,0 +1,12 @@ + .syntax unified + push {lr} + ldr r2, _0805DE4C @ =gUnk_08108DBC + ldrb r1, [r0, #0xa] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_0805DE4C: .4byte gUnk_08108DBC + .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DE50.inc b/asm/non_matching/manager37/sub_0805DE50.inc new file mode 100644 index 00000000..662f5977 --- /dev/null +++ b/asm/non_matching/manager37/sub_0805DE50.inc @@ -0,0 +1,12 @@ + .syntax unified + push {lr} + ldr r2, _0805DE64 @ =gUnk_08108DC4 + ldrb r1, [r0, #0xc] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_0805DE64: .4byte gUnk_08108DC4 + .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DE68.inc b/asm/non_matching/manager37/sub_0805DE68.inc new file mode 100644 index 00000000..027c6cb4 --- /dev/null +++ b/asm/non_matching/manager37/sub_0805DE68.inc @@ -0,0 +1,100 @@ + .syntax unified +.ifdef JP + push {r4, lr} + adds r4, r0, #0 + movs r0, #0x7b + bl CheckLocalFlag + cmp r0, #0 + bne _0805DCCE + bl DeleteThisEntity +_0805DCCE: + movs r1, #0 + movs r0, #1 + strb r0, [r4, #0xc] + ldr r2, _0805DCF4 @ =0x030010A0 + adds r0, r2, #0 + adds r0, #0x38 + strb r1, [r0] + adds r1, r2, #0 + adds r1, #0x39 + movs r0, #0xf + strb r0, [r1] + adds r0, r2, #0 + adds r0, #0x3a + movs r1, #0x20 + strb r1, [r0] + adds r0, #1 + strb r1, [r0] + pop {r4, pc} + .align 2, 0 +_0805DCF4: .4byte gScreenTransition +.else +.ifdef EU + push {r4, lr} + adds r4, r0, #0 + movs r0, #0x7b + bl CheckLocalFlag + cmp r0, #0 + bne _0805D916 + bl DeleteThisEntity +_0805D916: + movs r1, #0 + movs r0, #1 + strb r0, [r4, #0xc] + ldr r2, _0805D93C @ =gScreenTransition + adds r0, r2, #0 + adds r0, #0x38 + strb r1, [r0] + adds r1, r2, #0 + adds r1, #0x39 + movs r0, #0xf + strb r0, [r1] + adds r0, r2, #0 + adds r0, #0x3a + movs r1, #0x20 + strb r1, [r0] + adds r0, #1 + strb r1, [r0] + pop {r4, pc} + .align 2, 0 +_0805D93C: .4byte gScreenTransition +.else + push {r4, lr} + adds r4, r0, #0 + movs r0, #0x7b + bl CheckLocalFlag + cmp r0, #0 + bne _0805DE7A + bl DeleteThisEntity +_0805DE7A: + movs r1, #0 + movs r0, #1 + strb r0, [r4, #0xc] + ldr r2, _0805DEAC @ =gScreenTransition + adds r0, r2, #0 + adds r0, #0x38 + strb r1, [r0] + adds r1, r2, #0 + adds r1, #0x39 + movs r0, #0xf + strb r0, [r1] + adds r0, r2, #0 + adds r0, #0x3a + movs r1, #0x20 + strb r1, [r0] + adds r0, #1 + strb r1, [r0] + ldr r0, _0805DEB0 @ =gSave + movs r1, #0x93 + lsls r1, r1, #3 + adds r0, r0, r1 + ldr r1, _0805DEB4 @ =0x00001194 + str r1, [r0] + pop {r4, pc} + .align 2, 0 +_0805DEAC: .4byte gScreenTransition +_0805DEB0: .4byte gSave +_0805DEB4: .4byte 0x00001194 +.endif +.endif + .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DEB8.inc b/asm/non_matching/manager37/sub_0805DEB8.inc new file mode 100644 index 00000000..fdc72555 --- /dev/null +++ b/asm/non_matching/manager37/sub_0805DEB8.inc @@ -0,0 +1,73 @@ + .syntax unified + push {r4, r5, lr} + adds r3, r0, #0 + ldr r5, _0805DF44 @ =gPlayerEntity + movs r0, #0x2e + ldrsh r2, [r5, r0] + subs r2, #0x88 + ldr r4, _0805DF48 @ =gRoomControls + ldrh r0, [r4, #6] + subs r2, r2, r0 + movs r1, #0x32 + ldrsh r0, [r5, r1] + subs r0, #0x40 + ldrh r1, [r4, #8] + subs r0, r0, r1 + adds r1, r2, #0 + muls r1, r2, r1 + adds r2, r0, #0 + muls r2, r0, r2 + adds r0, r2, #0 + adds r1, r1, r0 + movs r0, #0x90 + lsls r0, r0, #4 + cmp r1, r0 + bgt _0805DF42 + movs r0, #0 + movs r1, #2 + strb r1, [r3, #0xc] + strb r0, [r3, #0xd] + movs r0, #0x78 + strb r0, [r3, #0xe] + movs r0, #2 + bl sub_08078A90 + bl sub_08078B48 + movs r0, #0x64 + movs r1, #0 + movs r2, #0 + bl CreateObject + adds r2, r0, #0 + cmp r2, #0 + beq _0805DF1A + ldrh r0, [r4, #6] + adds r0, #0x88 + strh r0, [r2, #0x2e] + ldrh r0, [r4, #8] + adds r0, #0x48 + strh r0, [r2, #0x32] +_0805DF1A: + movs r2, #0x10 + rsbs r2, r2, #0 + adds r0, r5, #0 + movs r1, #8 + bl CreateSpeechBubbleExclamationMark + adds r2, r0, #0 + cmp r2, #0 + beq _0805DF3C + 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] +_0805DF3C: + movs r0, #0x32 + bl SoundReq +_0805DF42: + pop {r4, r5, pc} + .align 2, 0 +_0805DF44: .4byte gPlayerEntity +_0805DF48: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DF4C.inc b/asm/non_matching/manager37/sub_0805DF4C.inc new file mode 100644 index 00000000..12c63c6c --- /dev/null +++ b/asm/non_matching/manager37/sub_0805DF4C.inc @@ -0,0 +1,40 @@ + .syntax unified + push {lr} + adds r1, r0, #0 + ldr r2, _0805DF70 @ =gPlayerEntity + movs r0, #0 + strb r0, [r2, #0x14] + movs r3, #0x36 + ldrsh r0, [r2, r3] + cmp r0, #0 + beq _0805DF78 + movs r1, #0x32 + ldrsh r0, [r2, r1] + ldr r1, _0805DF74 @ =gRoomControls + ldrh r1, [r1, #8] + adds r1, #0x48 + cmp r0, r1 + bge _0805DF92 + strh r1, [r2, #0x32] + b _0805DF92 + .align 2, 0 +_0805DF70: .4byte gPlayerEntity +_0805DF74: .4byte gRoomControls +_0805DF78: + ldrb r0, [r1, #0xe] + subs r0, #1 + strb r0, [r1, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805DF92 + movs r0, #3 + strb r0, [r1, #0xc] + movs r0, #0x1e + strb r0, [r1, #0xe] + ldr r0, _0805DF94 @ =0x0000164F + bl TextboxNoOverlapFollow +_0805DF92: + pop {pc} + .align 2, 0 +_0805DF94: .4byte 0x0000164F + .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DF98.inc b/asm/non_matching/manager37/sub_0805DF98.inc new file mode 100644 index 00000000..ca1d09b7 --- /dev/null +++ b/asm/non_matching/manager37/sub_0805DF98.inc @@ -0,0 +1,28 @@ + .syntax unified + push {lr} + adds r2, r0, #0 + ldr r0, _0805DFB4 @ =gTextBox + ldrb r1, [r0] + movs r0, #0x7f + ands r0, r1 + cmp r0, #0 + bne _0805DFCA + ldrb r0, [r2, #0xe] + cmp r0, #0 + beq _0805DFB8 + subs r0, #1 + strb r0, [r2, #0xe] + b _0805DFCA + .align 2, 0 +_0805DFB4: .4byte gTextBox +_0805DFB8: + movs r0, #4 + strb r0, [r2, #0xc] + movs r0, #7 + movs r1, #4 + bl DoFade + movs r0, #0xf6 + bl SoundReq +_0805DFCA: + pop {pc} + .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DFCC.inc b/asm/non_matching/manager37/sub_0805DFCC.inc new file mode 100644 index 00000000..15c615ad --- /dev/null +++ b/asm/non_matching/manager37/sub_0805DFCC.inc @@ -0,0 +1,14 @@ + .syntax unified + push {lr} + ldr r0, _0805DFE4 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _0805DFE0 + movs r0, #0x1c + bl ClearGlobalFlag + bl sub_0805E094 +_0805DFE0: + pop {pc} + .align 2, 0 +_0805DFE4: .4byte gFadeControl + .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DFE8.inc b/asm/non_matching/manager37/sub_0805DFE8.inc new file mode 100644 index 00000000..4742d51b --- /dev/null +++ b/asm/non_matching/manager37/sub_0805DFE8.inc @@ -0,0 +1,12 @@ + .syntax unified + push {lr} + ldr r2, _0805DFFC @ =gUnk_08108DD8 + ldrb r1, [r0, #0xc] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_0805DFFC: .4byte gUnk_08108DD8 + .syntax divided diff --git a/asm/non_matching/manager37/sub_0805E000.inc b/asm/non_matching/manager37/sub_0805E000.inc new file mode 100644 index 00000000..4f44fe8c --- /dev/null +++ b/asm/non_matching/manager37/sub_0805E000.inc @@ -0,0 +1,54 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r6, r0, #0 + movs r0, #0x51 + movs r1, #0 + bl CreateEnemy + adds r4, r0, #0 + cmp r4, #0 + beq _0805E062 + ldr r1, _0805E064 @ =gRoomControls + ldrh r0, [r1, #6] + adds r0, #0xb0 + strh r0, [r4, #0x2e] + ldrh r0, [r1, #8] + adds r0, #0x48 + strh r0, [r4, #0x32] + adds r0, r4, #0 + adds r0, #0x38 + movs r5, #1 + strb r5, [r0] + adds r0, r4, #0 + bl UpdateSpriteForCollisionLayer + ldr r0, _0805E068 @ =gScreenTransition + adds r0, #0x38 + ldrb r1, [r0] + adds r0, r5, #0 + ands r0, r1 + cmp r0, #0 + beq _0805E040 + bl DeleteThisEntity +_0805E040: + str r4, [r6, #0x18] + strb r5, [r6, #0xc] + movs r0, #3 + bl sub_08078A90 + ldr r0, _0805E06C @ =gArea + ldr r1, _0805E070 @ =0x00000864 + adds r0, r0, r1 + ldr r1, _0805E074 @ =0x80010000 + str r1, [r0] + movs r0, #6 + movs r1, #4 + bl DoFade + movs r0, #0xf7 + bl SoundReq +_0805E062: + pop {r4, r5, r6, pc} + .align 2, 0 +_0805E064: .4byte gRoomControls +_0805E068: .4byte gScreenTransition +_0805E06C: .4byte gArea +_0805E070: .4byte 0x00000864 +_0805E074: .4byte 0x80010000 + .syntax divided diff --git a/asm/non_matching/manager37/sub_0805E078.inc b/asm/non_matching/manager37/sub_0805E078.inc new file mode 100644 index 00000000..a41aa954 --- /dev/null +++ b/asm/non_matching/manager37/sub_0805E078.inc @@ -0,0 +1,16 @@ + .syntax unified + push {lr} + adds r1, r0, #0 + ldr r0, _0805E090 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _0805E08E + ldr r1, [r1, #0x18] + movs r0, #1 + strb r0, [r1, #0xd] + bl DeleteThisEntity +_0805E08E: + pop {pc} + .align 2, 0 +_0805E090: .4byte gFadeControl + .syntax divided diff --git a/asm/non_matching/manager37/sub_0805E094.inc b/asm/non_matching/manager37/sub_0805E094.inc new file mode 100644 index 00000000..bacb0723 --- /dev/null +++ b/asm/non_matching/manager37/sub_0805E094.inc @@ -0,0 +1,10 @@ + .syntax unified + push {lr} + bl sub_0805E5A8 + ldr r0, _0805E0A4 @ =gUnk_0813AC34 + movs r1, #7 + bl sub_0808091C + pop {pc} + .align 2, 0 +_0805E0A4: .4byte gUnk_0813AC34 + .syntax divided diff --git a/asm/non_matching/managerF/ManagerF_Main.inc b/asm/non_matching/managerF/ManagerF_Main.inc new file mode 100644 index 00000000..6cb92606 --- /dev/null +++ b/asm/non_matching/managerF/ManagerF_Main.inc @@ -0,0 +1,12 @@ + .syntax unified + push {lr} + ldr r2, _08058EE0 @ =gUnk_08108314 + ldrb r1, [r0, #0xa] + lsls r1, r1, #2 + adds r1, r1, r2 + ldr r1, [r1] + bl _call_via_r1 + pop {pc} + .align 2, 0 +_08058EE0: .4byte gUnk_08108314 + .syntax divided diff --git a/asm/non_matching/managerF/SetDirtTile.inc b/asm/non_matching/managerF/SetDirtTile.inc new file mode 100644 index 00000000..c60b7e19 --- /dev/null +++ b/asm/non_matching/managerF/SetDirtTile.inc @@ -0,0 +1,19 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + movs r0, #0x1d + adds r1, r4, #0 + movs r2, #1 + bl SetTileType + movs r0, #0 + adds r1, r4, #0 + movs r2, #2 + bl SetTileType + subs r4, #0x40 + movs r0, #0 + adds r1, r4, #0 + movs r2, #2 + bl SetTileType + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/managerF/sub_08058EE4.inc b/asm/non_matching/managerF/sub_08058EE4.inc new file mode 100644 index 00000000..0cea43d5 --- /dev/null +++ b/asm/non_matching/managerF/sub_08058EE4.inc @@ -0,0 +1,45 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r6, r0, #0 + ldrb r0, [r6, #0xc] + cmp r0, #0 + bne _08058EF2 + movs r0, #1 + strb r0, [r6, #0xc] +_08058EF2: + ldrb r0, [r6, #0xb] + bl CheckRoomFlag + cmp r0, #0 + beq _08058F40 + movs r5, #0x94 + lsls r5, r5, #1 + ldrb r2, [r6, #0xb] + adds r2, #1 + adds r0, r5, #0 + movs r1, #0x68 + bl sub_08058F44 + movs r4, #0xac + lsls r4, r4, #1 + ldrb r2, [r6, #0xb] + adds r2, #2 + adds r0, r4, #0 + movs r1, #0x68 + bl sub_08058F44 + ldrb r2, [r6, #0xb] + adds r2, #3 + adds r0, r5, #0 + movs r1, #0x98 + bl sub_08058F44 + ldrb r2, [r6, #0xb] + adds r2, #4 + adds r0, r4, #0 + movs r1, #0x98 + bl sub_08058F44 + movs r0, #0x92 + lsls r0, r0, #1 + bl SoundReq + bl DeleteThisEntity +_08058F40: + pop {r4, r5, r6, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/managerF/sub_08058F44.inc b/asm/non_matching/managerF/sub_08058F44.inc new file mode 100644 index 00000000..c6c1b113 --- /dev/null +++ b/asm/non_matching/managerF/sub_08058F44.inc @@ -0,0 +1,31 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + adds r5, r1, #0 + adds r0, r2, #0 + bl CheckRoomFlag + cmp r0, #0 + bne _08058F80 + adds r0, r4, #0 + adds r1, r5, #0 + movs r2, #1 + bl sub_080002A8 + cmp r0, #0x61 + bne _08058F80 + lsrs r1, r4, #4 + movs r2, #0x3f + ands r1, r2 + lsrs r0, r5, #4 + ands r0, r2 + lsls r0, r0, #6 + orrs r1, r0 + movs r0, #0x26 + movs r2, #1 + bl SetTileType + adds r0, r4, #0 + adds r1, r5, #0 + bl sub_08058F84 +_08058F80: + pop {r4, r5, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/managerF/sub_08058F84.inc b/asm/non_matching/managerF/sub_08058F84.inc new file mode 100644 index 00000000..9be2adab --- /dev/null +++ b/asm/non_matching/managerF/sub_08058F84.inc @@ -0,0 +1,23 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + adds r5, r1, #0 + movs r0, #0x21 + movs r1, #0 + movs r2, #0 + bl CreateObject + adds r2, r0, #0 + cmp r2, #0 + beq _08058FA8 + ldr r0, _08058FAC @ =gRoomControls + ldrh r1, [r0, #6] + adds r1, r1, r4 + strh r1, [r2, #0x2e] + ldrh r0, [r0, #8] + adds r0, r0, r5 + strh r0, [r2, #0x32] +_08058FA8: + pop {r4, r5, pc} + .align 2, 0 +_08058FAC: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/managerF/sub_08058FB0.inc b/asm/non_matching/managerF/sub_08058FB0.inc new file mode 100644 index 00000000..5e748b8b --- /dev/null +++ b/asm/non_matching/managerF/sub_08058FB0.inc @@ -0,0 +1,91 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #1 + beq _08058FF6 + cmp r0, #1 + bgt _08058FC4 + cmp r0, #0 + beq _08058FCA + b _08059050 +_08058FC4: + cmp r0, #2 + beq _08059018 + b _08059050 +_08058FCA: + movs r0, #1 + strb r0, [r4, #0xc] + ldrb r0, [r4, #0xa] + cmp r0, #1 + bne _08058FDC + movs r0, #7 + strb r0, [r4, #0xd] + movs r0, #6 + b _08058FE2 +_08058FDC: + movs r0, #8 + strb r0, [r4, #0xd] + movs r0, #2 +_08058FE2: + strb r0, [r4, #0xf] + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _08059060 + adds r0, r4, #0 + bl DeleteManager + b _08059060 +_08058FF6: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _08059060 + movs r0, #2 + strb r0, [r4, #0xc] + movs r0, #0x78 + strb r0, [r4, #0xe] + adds r0, r4, #0 + movs r1, #0xf0 + bl sub_0805E4E0 + adds r0, r4, #0 + bl sub_08059064 + b _08059060 +_08059018: + ldrb r0, [r4, #0xe] + cmp r0, #0x5a + bne _08059028 + movs r0, #2 + bl sub_08078A90 + bl sub_08077B20 +_08059028: + ldrb r2, [r4, #0xe] + cmp r2, #0x3c + bne _08059034 + ldr r1, _0805904C @ =gPlayerEntity + ldrb r0, [r4, #0xf] + strb r0, [r1, #0x14] +_08059034: + subs r0, r2, #1 + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _08059060 + movs r0, #3 + strb r0, [r4, #0xc] + ldrb r1, [r4, #0xd] + movs r0, #5 + bl MenuFadeIn + b _08059060 + .align 2, 0 +_0805904C: .4byte gPlayerEntity +_08059050: + ldrh r0, [r4, #0x3e] + bl SetFlag + movs r0, #1 + bl sub_08078A90 + bl DeleteThisEntity +_08059060: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/managerF/sub_08059064.inc b/asm/non_matching/managerF/sub_08059064.inc new file mode 100644 index 00000000..e0b4e12d --- /dev/null +++ b/asm/non_matching/managerF/sub_08059064.inc @@ -0,0 +1,26 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + movs r0, #0 + movs r1, #0x53 + movs r2, #0 + bl CreateObject + adds r2, r0, #0 + cmp r2, #0 + beq _0805908E + movs r0, #2 + strb r0, [r2, #0xe] + ldr r1, _08059090 @ =gRoomControls + ldrh r0, [r1, #6] + ldrh r3, [r4, #0x38] + adds r0, r0, r3 + strh r0, [r2, #0x2e] + ldrh r0, [r1, #8] + ldrh r4, [r4, #0x3a] + adds r0, r0, r4 + strh r0, [r2, #0x32] +_0805908E: + pop {r4, pc} + .align 2, 0 +_08059090: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/managerF/sub_08059094.inc b/asm/non_matching/managerF/sub_08059094.inc new file mode 100644 index 00000000..b4956529 --- /dev/null +++ b/asm/non_matching/managerF/sub_08059094.inc @@ -0,0 +1,37 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + movs r5, #0 + ldrb r0, [r4, #0xc] + cmp r0, #0 + bne _080590B6 + movs r0, #1 + strb r0, [r4, #0xc] + movs r0, #0x60 + bl CheckLocalFlag + cmp r0, #0 + bne _080590CC + movs r0, #0x5f + bl SetLocalFlag + b _080590C8 +_080590B6: + movs r0, #0x60 + bl CheckLocalFlag + cmp r0, #0 + beq _080590C8 + movs r0, #0x5f + bl ClearLocalFlag + movs r5, #1 +_080590C8: + cmp r5, #0 + beq _080590D8 +_080590CC: + ldr r0, _080590DC @ =gUnk_080F4B88 + bl LoadRoomEntityList + adds r0, r4, #0 + bl DeleteManager +_080590D8: + pop {r4, r5, pc} + .align 2, 0 +_080590DC: .4byte gUnk_080F4B88 + .syntax divided diff --git a/asm/non_matching/managerF/sub_080590E0.inc b/asm/non_matching/managerF/sub_080590E0.inc new file mode 100644 index 00000000..f48e5002 --- /dev/null +++ b/asm/non_matching/managerF/sub_080590E0.inc @@ -0,0 +1,34 @@ + .syntax unified + push {lr} + adds r1, r0, #0 + ldrb r0, [r1, #0xc] + cmp r0, #0 + bne _080590F6 + movs r0, #1 + strb r0, [r1, #0xc] + adds r0, r1, #0 + movs r1, #6 + bl sub_0805E3A0 +_080590F6: + movs r0, #0x6c + bl CheckLocalFlag + cmp r0, #0 + beq _0805911A + movs r0, #0x4b + bl CheckLocalFlag + cmp r0, #0 + beq _08059112 + movs r0, #0x4a + bl SetLocalFlag + b _08059120 +_08059112: + movs r0, #0x4a + bl ClearLocalFlag + b _08059120 +_0805911A: + movs r0, #0x4a + bl ClearLocalFlag +_08059120: + pop {pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/managerF/sub_08059124.inc b/asm/non_matching/managerF/sub_08059124.inc new file mode 100644 index 00000000..afd30258 --- /dev/null +++ b/asm/non_matching/managerF/sub_08059124.inc @@ -0,0 +1,80 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #0 + beq _08059174 + cmp r0, #1 + beq _080591AC + ldrb r0, [r4, #0xe] + subs r0, #1 + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _080591C8 + movs r1, #0x38 + ldrsh r0, [r4, r1] + movs r2, #0x3a + ldrsh r1, [r4, r2] + ldrb r2, [r4, #0xb] + bl CreateDustAt + ldrh r0, [r4, #0x38] + lsls r0, r0, #0x10 + asrs r0, r0, #0x14 + movs r2, #0x3f + ands r0, r2 + ldrh r1, [r4, #0x3a] + lsls r1, r1, #0x10 + asrs r1, r1, #0x14 + ands r1, r2 + lsls r1, r1, #6 + orrs r0, r1 + ldrb r1, [r4, #0xb] + bl sub_0807BA8C + movs r0, #0xcd + bl SoundReq + bl DeleteThisEntity + b _080591C8 +_08059174: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _08059182 + bl DeleteThisEntity +_08059182: + movs r0, #1 + strb r0, [r4, #0xc] + ldr r0, _080591A8 @ =0x00000365 + ldrh r1, [r4, #0x38] + lsls r1, r1, #0x10 + asrs r1, r1, #0x14 + movs r3, #0x3f + ands r1, r3 + ldrh r2, [r4, #0x3a] + lsls r2, r2, #0x10 + asrs r2, r2, #0x14 + ands r2, r3 + lsls r2, r2, #6 + orrs r1, r2 + ldrb r2, [r4, #0xb] + bl SetTileType + b _080591C8 + .align 2, 0 +_080591A8: .4byte 0x00000365 +_080591AC: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _080591C8 + adds r0, r4, #0 + movs r1, #0x4b + bl sub_0805E4E0 + movs r0, #0x2d + strb r0, [r4, #0xe] + ldrb r0, [r4, #0xc] + adds r0, #1 + strb r0, [r4, #0xc] +_080591C8: + pop {r4, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/managerF/sub_080591CC.inc b/asm/non_matching/managerF/sub_080591CC.inc new file mode 100644 index 00000000..37753968 --- /dev/null +++ b/asm/non_matching/managerF/sub_080591CC.inc @@ -0,0 +1,44 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #0 + bne _080591F4 + movs r0, #1 + strb r0, [r4, #0xc] + ldrh r0, [r4, #0x3e] + bl CheckFlags + strb r0, [r4, #0xb] + lsls r0, r0, #0x18 + cmp r0, #0 + beq _08059214 + ldr r1, _080591F0 @ =gRoomVars + ldrh r0, [r4, #0x3a] + b _08059218 + .align 2, 0 +_080591F0: .4byte gRoomVars +_080591F4: + ldrh r0, [r4, #0x3e] + bl CheckFlags + adds r1, r0, #0 + ldrb r0, [r4, #0xb] + cmp r0, r1 + beq _0805921A + strb r1, [r4, #0xb] + cmp r1, #0 + beq _08059214 + ldr r1, _08059210 @ =gRoomVars + ldrh r0, [r4, #0x3a] + b _08059218 + .align 2, 0 +_08059210: .4byte gRoomVars +_08059214: + ldr r1, _0805921C @ =gRoomVars + ldrh r0, [r4, #0x38] +_08059218: + strh r0, [r1, #0xc] +_0805921A: + pop {r4, pc} + .align 2, 0 +_0805921C: .4byte gRoomVars + .syntax divided diff --git a/asm/non_matching/managerF/sub_08059220.inc b/asm/non_matching/managerF/sub_08059220.inc new file mode 100644 index 00000000..2538d3a3 --- /dev/null +++ b/asm/non_matching/managerF/sub_08059220.inc @@ -0,0 +1,46 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + ldr r2, _08059268 @ =gRoomVars + movs r0, #0 + strh r0, [r2, #0xc] + ldr r4, _0805926C @ =gUnk_08108354 + ldrh r0, [r4] + ldr r1, _08059270 @ =0x0000FFFF + cmp r0, r1 + beq _08059254 + adds r7, r2, #0 + adds r6, r1, #0 +_08059238: + ldrh r0, [r4] + ldrh r1, [r4, #2] + ldrh r2, [r4, #4] + ldrh r3, [r4, #6] + bl CheckPlayerInRegion + cmp r0, #0 + beq _0805924C + ldrh r0, [r4, #8] + strh r0, [r7, #0xc] +_0805924C: + adds r4, #0xa + ldrh r0, [r4] + cmp r0, r6 + bne _08059238 +_08059254: + ldrb r0, [r5, #0xc] + cmp r0, #0 + bne _08059266 + movs r0, #1 + strb r0, [r5, #0xc] + ldr r1, _08059274 @ =gArea + ldr r0, _08059268 @ =gRoomVars + ldrh r0, [r0, #0xc] + strh r0, [r1, #0xa] +_08059266: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08059268: .4byte gRoomVars +_0805926C: .4byte gUnk_08108354 +_08059270: .4byte 0x0000FFFF +_08059274: .4byte gArea + .syntax divided diff --git a/asm/non_matching/managerF/sub_08059278.inc b/asm/non_matching/managerF/sub_08059278.inc new file mode 100644 index 00000000..25ce854e --- /dev/null +++ b/asm/non_matching/managerF/sub_08059278.inc @@ -0,0 +1,13 @@ + .syntax unified + push {lr} + movs r0, #9 + movs r1, #0xf + movs r2, #6 + bl FindEntityByID + cmp r0, #0 + beq _0805928C + bl ManagerF_Main +_0805928C: + pop {pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/managerF/sub_08059290.inc b/asm/non_matching/managerF/sub_08059290.inc new file mode 100644 index 00000000..22500012 --- /dev/null +++ b/asm/non_matching/managerF/sub_08059290.inc @@ -0,0 +1,11 @@ + .syntax unified + movs r1, #1 + strb r1, [r0, #0xc] + ldr r1, _0805929C @ =gRoomControls + ldr r0, _080592A0 @ =gPlayerEntity + str r0, [r1, #0x30] + bx lr + .align 2, 0 +_0805929C: .4byte gRoomControls +_080592A0: .4byte gPlayerEntity + .syntax divided diff --git a/asm/non_matching/managerF/sub_080592A4.inc b/asm/non_matching/managerF/sub_080592A4.inc new file mode 100644 index 00000000..aecf7389 --- /dev/null +++ b/asm/non_matching/managerF/sub_080592A4.inc @@ -0,0 +1,34 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #0 + bne _080592C8 + movs r0, #1 + strb r0, [r4, #0xc] + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _080592EA + adds r0, r4, #0 + bl sub_080592EC + bl DeleteThisEntity + b _080592EA +_080592C8: + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _080592EA + adds r0, r4, #0 + bl sub_080592EC + adds r0, r4, #0 + bl sub_0805930C +.ifndef EU + movs r0, #0xb7 + lsls r0, r0, #1 + bl SoundReq +.endif + bl DeleteThisEntity +_080592EA: + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/managerF/sub_080592EC.inc b/asm/non_matching/managerF/sub_080592EC.inc new file mode 100644 index 00000000..dcec9327 --- /dev/null +++ b/asm/non_matching/managerF/sub_080592EC.inc @@ -0,0 +1,17 @@ + .syntax unified + push {lr} + adds r1, r0, #0 + ldrh r0, [r1, #0x38] + lsls r0, r0, #0x10 + asrs r0, r0, #0x14 + movs r2, #0x3f + ands r0, r2 + ldrh r1, [r1, #0x3a] + lsls r1, r1, #0x10 + asrs r1, r1, #0x14 + ands r1, r2 + lsls r1, r1, #6 + orrs r0, r1 + bl SetDirtTile + pop {pc} + .syntax divided diff --git a/asm/non_matching/managerF/sub_0805930C.inc b/asm/non_matching/managerF/sub_0805930C.inc new file mode 100644 index 00000000..dc5ec24c --- /dev/null +++ b/asm/non_matching/managerF/sub_0805930C.inc @@ -0,0 +1,32 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + movs r0, #0xf + movs r1, #0x43 +.ifdef EU + movs r2, #0x0 +.else + movs r2, #0x40 +.endif + bl CreateObject + adds r2, r0, #0 + cmp r2, #0 + beq _0805933A + ldr r1, _0805933C @ =gRoomControls + ldrh r0, [r1, #6] + ldrh r3, [r4, #0x38] + adds r0, r0, r3 + strh r0, [r2, #0x2e] + ldrh r0, [r1, #8] + ldrh r4, [r4, #0x3a] + adds r0, r0, r4 + strh r0, [r2, #0x32] + adds r1, r2, #0 + adds r1, #0x38 + movs r0, #1 + strb r0, [r1] +_0805933A: + pop {r4, pc} + .align 2, 0 +_0805933C: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/managerF/sub_08059368.inc b/asm/non_matching/managerF/sub_08059368.inc new file mode 100644 index 00000000..4c48609e --- /dev/null +++ b/asm/non_matching/managerF/sub_08059368.inc @@ -0,0 +1,18 @@ + .syntax unified + push {lr} + adds r2, r0, #0 + movs r0, #1 + strb r0, [r2, #0xc] + ldr r1, _08059388 @ =gCurrentTextBox + ldrh r0, [r2, #0x3c] + ldrh r1, [r1, #0x28] + cmp r0, r1 + bne _08059384 + ldrh r0, [r2, #0x3e] + bl SetFlag + bl DeleteThisEntity +_08059384: + pop {pc} + .align 2, 0 +_08059388: .4byte gCurrentTextBox + .syntax divided diff --git a/asm/non_matching/managerF/sub_0805938C.inc b/asm/non_matching/managerF/sub_0805938C.inc new file mode 100644 index 00000000..628a8773 --- /dev/null +++ b/asm/non_matching/managerF/sub_0805938C.inc @@ -0,0 +1,33 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + bl sub_080593CC + cmp r0, #0 + beq _080593C8 + ldrb r0, [r4, #0xe] + adds r0, #1 + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #7 + bls _080593CA + movs r1, #0x38 + ldrsh r0, [r4, r1] + ldr r2, _080593C4 @ =gRoomControls + ldrh r1, [r2, #6] + subs r0, r0, r1 + movs r3, #0x3a + ldrsh r1, [r4, r3] + ldrh r2, [r2, #8] + subs r1, r1, r2 + movs r2, #0xff + movs r3, #0xa + bl sub_080806BC + b _080593CA + .align 2, 0 +_080593C4: .4byte gRoomControls +_080593C8: + strb r0, [r4, #0xe] +_080593CA: + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/managerF/sub_080593CC.inc b/asm/non_matching/managerF/sub_080593CC.inc new file mode 100644 index 00000000..f8da8864 --- /dev/null +++ b/asm/non_matching/managerF/sub_080593CC.inc @@ -0,0 +1,45 @@ + .syntax unified + push {r4, lr} + adds r3, r0, #0 + ldr r2, _08059418 @ =gPlayerState + ldr r0, [r2, #0x30] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08059420 + adds r0, r2, #0 + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + beq _08059420 + ldr r4, _0805941C @ =gPlayerEntity + ldrb r0, [r4, #0x14] + cmp r0, #0 + bne _08059420 + adds r0, r2, #0 + adds r0, #0x90 + ldrh r1, [r0] + movs r0, #0xf0 + lsls r0, r0, #4 + ands r0, r1 + movs r1, #0x80 + lsls r1, r1, #3 + cmp r0, r1 + bne _08059420 + movs r0, #0x38 + ldrsh r1, [r3, r0] + movs r0, #0x3a + ldrsh r2, [r3, r0] + adds r2, #0xc + adds r0, r4, #0 + movs r3, #6 + bl sub_0806FCB8 + b _08059422 + .align 2, 0 +_08059418: .4byte gPlayerState +_0805941C: .4byte gPlayerEntity +_08059420: + movs r0, #0 +_08059422: + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/managerF/sub_08059424.inc b/asm/non_matching/managerF/sub_08059424.inc new file mode 100644 index 00000000..265f6ecb --- /dev/null +++ b/asm/non_matching/managerF/sub_08059424.inc @@ -0,0 +1,42 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrh r0, [r4, #0x3e] + bl CheckFlags + cmp r0, #0 + beq _08059436 + bl DeleteThisEntity +_08059436: + ldrh r0, [r4, #0x3c] + bl CheckFlags + cmp r0, #0 + beq _08059476 + movs r0, #0xf + movs r1, #0x35 + movs r2, #0 + bl CreateObject + adds r2, r0, #0 + cmp r2, #0 + beq _08059476 + adds r1, r2, #0 + adds r1, #0x38 + movs r0, #2 + strb r0, [r1] + ldr r1, _08059478 @ =gRoomControls + ldrh r0, [r1, #6] + ldrh r3, [r4, #0x38] + adds r0, r0, r3 + strh r0, [r2, #0x2e] + ldrh r0, [r1, #8] + ldrh r4, [r4, #0x3a] + adds r0, r0, r4 + strh r0, [r2, #0x32] + movs r0, #0xd8 + lsls r0, r0, #1 + bl EnqueueSFX + bl DeleteThisEntity +_08059476: + pop {r4, pc} + .align 2, 0 +_08059478: .4byte gRoomControls + .syntax divided diff --git a/asm/non_matching/managerF/sub_0805947C.inc b/asm/non_matching/managerF/sub_0805947C.inc new file mode 100644 index 00000000..9c858c5d --- /dev/null +++ b/asm/non_matching/managerF/sub_0805947C.inc @@ -0,0 +1,45 @@ + .syntax unified + push {lr} + ldrh r0, [r0, #0x3e] + bl CheckFlags + cmp r0, #0 + bne _080594CE + movs r0, #3 + bl sub_08078A90 + ldr r1, _080594B0 @ =gRoomControls + ldrh r0, [r1] + cmp r0, #0 + bne _080594D2 + ldr r0, _080594B4 @ =gRoomVars + ldrb r0, [r0] + cmp r0, #0 + beq _080594BC + ldr r0, _080594B8 @ =gUnk_08108380 + ldrb r1, [r1, #0x10] + lsls r1, r1, #2 + adds r1, r1, r0 + ldr r0, [r1] + bl StartPlayerScript + b _080594CE + .align 2, 0 +_080594B0: .4byte gRoomControls +_080594B4: .4byte gRoomVars +_080594B8: .4byte gUnk_08108380 +_080594BC: + ldr r1, _080594D4 @ =gUnk_08108380 + ldr r0, _080594D8 @ =gPlayerEntity + ldrb r0, [r0, #0x14] + lsrs r0, r0, #1 + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + bl StartPlayerScript +_080594CE: + bl DeleteThisEntity +_080594D2: + pop {pc} + .align 2, 0 +_080594D4: .4byte gUnk_08108380 +_080594D8: .4byte gPlayerEntity +.ifndef EU + .syntax divided diff --git a/asm/non_matching/managerF/sub_080594DC.inc b/asm/non_matching/managerF/sub_080594DC.inc new file mode 100644 index 00000000..da9cffeb --- /dev/null +++ b/asm/non_matching/managerF/sub_080594DC.inc @@ -0,0 +1,52 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xc] + cmp r0, #1 + beq _080594F2 + cmp r0, #1 + bgt _0805951C + cmp r0, #0 + bne _0805951C + movs r0, #1 + strb r0, [r4, #0xc] +_080594F2: + movs r0, #6 + bl GetInventoryValue + cmp r0, #0 + beq _08059540 + movs r0, #0x8c + lsls r0, r0, #4 + movs r1, #0x85 + bl CheckLocalFlagByOffset + cmp r0, #0 + bne _08059540 + movs r0, #2 + strb r0, [r4, #0xc] + ldr r0, _08059518 @ =0x00000B0F + bl sub_080186C0 + b _08059540 + .align 2, 0 +_08059518: .4byte 0x00000B0F +_0805951C: + ldr r0, _08059544 @ =gArea + adds r0, #0x28 + ldrb r0, [r0] + cmp r0, #0xff + beq _0805952A + bl DeleteThisEntity +_0805952A: + movs r0, #0x8c + lsls r0, r0, #4 + movs r1, #0x85 + bl CheckLocalFlagByOffset + cmp r0, #0 + beq _08059540 + bl sub_0801855C + bl DeleteThisEntity +_08059540: + pop {r4, pc} + .align 2, 0 +_08059544: .4byte gArea +.endif + .syntax divided diff --git a/asm/non_matching/managerF/sub_08059548.inc b/asm/non_matching/managerF/sub_08059548.inc new file mode 100644 index 00000000..a324756b --- /dev/null +++ b/asm/non_matching/managerF/sub_08059548.inc @@ -0,0 +1,43 @@ + .syntax unified +.ifdef USA + push {lr} + movs r1, #6 + bl sub_0805E3A0 + ldr r0, _08059568 @ =gPlayerEntity + ldrb r0, [r0, #0xc] + cmp r0, #0x16 + bne _0805955C + bl DeleteThisEntity +_0805955C: + ldr r2, _0805956C @ =gInput + ldrh r1, [r2] + movs r0, #4 + orrs r0, r1 + strh r0, [r2] + pop {pc} + .align 2, 0 +_08059568: .4byte gPlayerEntity +_0805956C: .4byte gInput +.else +.ifdef DEMO @ TODO deduplicate + push {lr} + movs r1, #6 + bl sub_0805E3A0 + ldr r0, _08059568 @ =gPlayerEntity + ldrb r0, [r0, #0xc] + cmp r0, #0x16 + bne _0805955C + bl DeleteThisEntity +_0805955C: + ldr r2, _0805956C @ =gInput + ldrh r1, [r2] + movs r0, #4 + orrs r0, r1 + strh r0, [r2] + pop {pc} + .align 2, 0 +_08059568: .4byte gPlayerEntity +_0805956C: .4byte gInput +.endif +.endif + .syntax divided diff --git a/include/manager.h b/include/manager.h index 4c60431c..ecb6bcb4 100644 --- a/include/manager.h +++ b/include/manager.h @@ -154,47 +154,47 @@ extern void ManagerB_Main(); extern void ManagerC_Main(); extern void ManagerD_Main(); extern void ManagerE_Main(); -extern void ManagerF_Main(Entity*); -extern void Manager10_Main(Entity*); +extern void ManagerF_Main(); +extern void Manager10_Main(); extern void Manager11_Main(Manager11*); -extern void Manager12_Main(Entity*); -extern void Manager13_Main(Entity*); -extern void Manager14_Main(Entity*); +extern void Manager12_Main(); +extern void Manager13_Main(); +extern void Manager14_Main(); extern void Manager15_Main(); -extern void Manager16_Main(Entity*); +extern void Manager16_Main(); extern void Manager17_Main(); extern void Manager18_Main(); -extern void Manager19_Main(Entity*); +extern void Manager19_Main(); extern void Manager1A_Main(); -extern void Manager1B_Main(Entity*); +extern void Manager1B_Main(); extern void Manager1C_Main(Manager*); -extern void Manager1D_Main(Entity*); +extern void Manager1D_Main(); extern void Manager1E_Main(); -extern void Manager1F_Main(Entity*); +extern void Manager1F_Main(); extern void Manager20_Main(); -extern void Manager21_Main(Entity*); -extern void Manager22_Main(Entity*); -extern void Manager23_Main(Entity*); +extern void Manager21_Main(); +extern void Manager22_Main(); +extern void Manager23_Main(); extern void Manager24_Main(); extern void Manager25_Main(); extern void Manager26_Main(); extern void Manager27_Main(); extern void Manager28_Main(); -extern void Manager29_Main(Entity*); +extern void Manager29_Main(); extern void Manager2A_Main(Manager*); -extern void Manager2B_Main(Entity*); +extern void Manager2B_Main(); extern void Manager2C_Main(); extern void Manager2D_Main(Entity*); extern void Manager2E_Main(); extern void Manager2F_Main(); extern void Manager30_Main(); -extern void Manager31_Main(Entity*); -extern void Manager32_Main(Entity*); -extern void Manager33_Main(Entity*); -extern void Manager34_Main(Entity*); -extern void Manager35_Main(Entity*); +extern void Manager31_Main(); +extern void Manager32_Main(); +extern void Manager33_Main(); +extern void Manager34_Main(); +extern void Manager35_Main(); extern void Manager36_Main(Manager*); -extern void Manager37_Main(Entity*); +extern void Manager37_Main(); extern void Manager38_Main(Entity*); extern void Manager39_Main(); diff --git a/linker.ld b/linker.ld index 281032f7..13d8713f 100644 --- a/linker.ld +++ b/linker.ld @@ -500,9 +500,7 @@ SECTIONS { src/textbox.o(.text); asm/code_08056418.o(.text); src/manager/manager1.o(.text); - asm/manager1.o(.text); src/manager/manager2.o(.text); - asm/manager2.o(.text); src/manager/manager3.o(.text); src/manager/manager4.o(.text); src/manager/manager5.o(.text); @@ -515,48 +513,47 @@ SECTIONS { src/manager/managerC.o(.text); src/manager/managerD.o(.text); src/manager/managerE.o(.text); - asm/managerF.o(.text); - asm/manager10.o(.text); + src/manager/managerF.o(.text); + src/manager/manager10.o(.text); src/manager/manager11.o(.text); - asm/manager12.o(.text); - asm/manager13.o(.text); - asm/manager14.o(.text); + src/manager/manager12.o(.text); + src/manager/manager13.o(.text); + src/manager/manager14.o(.text); src/manager/manager15.o(.text); - asm/manager16.o(.text); + src/manager/manager16.o(.text); src/manager/manager17.o(.text); - asm/manager18.o(.text); - asm/manager19.o(.text); + src/manager/manager18.o(.text); + src/manager/manager19.o(.text); src/manager/manager1A.o(.text); - asm/manager1B.o(.text); + src/manager/manager1B.o(.text); src/manager/manager1C.o(.text); - asm/manager1D.o(.text); + src/manager/manager1D.o(.text); src/manager/manager1E.o(.text); - asm/manager1F.o(.text); + src/manager/manager1F.o(.text); src/manager/manager20.o(.text); - asm/manager21.o(.text); - asm/manager22.o(.text); - asm/manager23.o(.text); + src/manager/manager21.o(.text); + src/manager/manager22.o(.text); + src/manager/manager23.o(.text); src/manager/manager24.o(.text); src/manager/manager25.o(.text); src/manager/manager26.o(.text); src/manager/manager27.o(.text); src/manager/manager28.o(.text); - asm/manager29.o(.text); + src/manager/manager29.o(.text); src/manager/manager2A.o(.text); - asm/manager2B.o(.text); + src/manager/manager2B.o(.text); src/manager/manager2C.o(.text); src/manager/manager2D.o(.text); src/manager/manager2E.o(.text); - asm/manager2E.o(.text); - asm/manager2F.o(.text); + src/manager/manager2F.o(.text); src/manager/manager30.o(.text); - asm/manager31.o(.text); - asm/manager32.o(.text); - asm/manager33.o(.text); - asm/manager34.o(.text); - asm/manager35.o(.text); + src/manager/manager31.o(.text); + src/manager/manager32.o(.text); + src/manager/manager33.o(.text); + src/manager/manager34.o(.text); + src/manager/manager35.o(.text); src/manager/manager36.o(.text); - asm/manager37.o(.text); + src/manager/manager37.o(.text); src/manager/manager38.o(.text); src/manager/manager39.o(.text); asm/sub_0805E248.o(.text); diff --git a/src/manager/manager1.c b/src/manager/manager1.c index 1b7212d6..c0390149 100644 --- a/src/manager/manager1.c +++ b/src/manager/manager1.c @@ -56,3 +56,17 @@ void sub_08057118(Entity* this) { gScreen.controls.alphaBlend = 0x1000; sub_08052D74(this, sub_080570B8, sub_080570F8); } + +ASM_FUNC("asm/non_matching/manager1/sub_08057174.inc", void sub_08057174()) + +ASM_FUNC("asm/non_matching/manager1/sub_0805728C.inc", void sub_0805728C()) + +ASM_FUNC("asm/non_matching/manager1/sub_080572D4.inc", void sub_080572D4()) + +ASM_FUNC("asm/non_matching/manager1/sub_0805732C.inc", void sub_0805732C()) + +ASM_FUNC("asm/non_matching/manager1/nullsub_494.inc", void nullsub_494()) + +ASM_FUNC("asm/non_matching/manager1/sub_080573AC.inc", void sub_080573AC()) + +ASM_FUNC("asm/non_matching/manager1/sub_08057450.inc", void sub_08057450()) \ No newline at end of file diff --git a/src/manager/manager10.c b/src/manager/manager10.c new file mode 100644 index 00000000..e7c0b944 --- /dev/null +++ b/src/manager/manager10.c @@ -0,0 +1,23 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager10/Manager10_Main.inc", void Manager10_Main()) + +ASM_FUNC("asm/non_matching/manager10/sub_080595E4.inc", void sub_080595E4()) + +ASM_FUNC("asm/non_matching/manager10/sub_08059608.inc", void sub_08059608()) + +ASM_FUNC("asm/non_matching/manager10/sub_08059690.inc", void sub_08059690()) + +ASM_FUNC("asm/non_matching/manager10/sub_080596E0.inc", void sub_080596E0()) + +ASM_FUNC("asm/non_matching/manager10/sub_08059844.inc", void sub_08059844()) + +ASM_FUNC("asm/non_matching/manager10/sub_0805986C.inc", void sub_0805986C()) + +ASM_FUNC("asm/non_matching/manager10/sub_08059894.inc", void sub_08059894()) + +ASM_FUNC("asm/non_matching/manager10/sub_080598F8.inc", void sub_080598F8()) + +ASM_FUNC("asm/non_matching/manager10/sub_08059960.inc", void sub_08059960()) + +ASM_FUNC("asm/non_matching/manager10/sub_08059994.inc", void sub_08059994()) \ No newline at end of file diff --git a/src/manager/manager12.c b/src/manager/manager12.c new file mode 100644 index 00000000..d69c5d19 --- /dev/null +++ b/src/manager/manager12.c @@ -0,0 +1,15 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager12/Manager12_Main.inc", void Manager12_Main()) + +ASM_FUNC("asm/non_matching/manager12/sub_08059A2C.inc", void sub_08059A2C()) + +ASM_FUNC("asm/non_matching/manager12/sub_08059A58.inc", void sub_08059A58()) + +ASM_FUNC("asm/non_matching/manager12/sub_08059B18.inc", void sub_08059B18()) + +ASM_FUNC("asm/non_matching/manager12/sub_08059C8C.inc", void sub_08059C8C()) + +ASM_FUNC("asm/non_matching/manager12/sub_08059CC0.inc", void sub_08059CC0()) + +ASM_FUNC("asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc", void TryLoadPrologueHyruleTown()) \ No newline at end of file diff --git a/src/manager/manager13.c b/src/manager/manager13.c new file mode 100644 index 00000000..cd151e5a --- /dev/null +++ b/src/manager/manager13.c @@ -0,0 +1,3 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager13/Manager13_Main.inc", void Manager13_Main()) \ No newline at end of file diff --git a/src/manager/manager14.c b/src/manager/manager14.c new file mode 100644 index 00000000..eb3d820c --- /dev/null +++ b/src/manager/manager14.c @@ -0,0 +1,25 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager14/Manager14_Main.inc", void Manager14_Main()) + +ASM_FUNC("asm/non_matching/manager14/sub_08059E80.inc", void sub_08059E80()) + +ASM_FUNC("asm/non_matching/manager14/sub_08059EF8.inc", void sub_08059EF8()) + +ASM_FUNC("asm/non_matching/manager14/sub_08059F9C.inc", void sub_08059F9C()) + +ASM_FUNC("asm/non_matching/manager14/sub_0805A040.inc", void sub_0805A040()) + +ASM_FUNC("asm/non_matching/manager14/sub_0805A048.inc", void sub_0805A048()) + +ASM_FUNC("asm/non_matching/manager14/sub_0805A098.inc", void sub_0805A098()) + +ASM_FUNC("asm/non_matching/manager14/sub_0805A0C0.inc", void sub_0805A0C0()) + +ASM_FUNC("asm/non_matching/manager14/sub_0805A114.inc", void sub_0805A114()) + +ASM_FUNC("asm/non_matching/manager14/sub_0805A1D8.inc", void sub_0805A1D8()) + +ASM_FUNC("asm/non_matching/manager14/nullsub_495.inc", void nullsub_495()) + +ASM_FUNC("asm/non_matching/manager14/sub_0805A25C.inc", void sub_0805A25C()) \ No newline at end of file diff --git a/src/manager/manager16.c b/src/manager/manager16.c new file mode 100644 index 00000000..1436b67b --- /dev/null +++ b/src/manager/manager16.c @@ -0,0 +1,6 @@ + +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager16/Manager16_Main.inc", void Manager16_Main()) + +ASM_FUNC("asm/non_matching/manager16/sub_0805ACC0.inc", void sub_0805ACC0()) \ No newline at end of file diff --git a/src/manager/manager18.c b/src/manager/manager18.c new file mode 100644 index 00000000..4dd08c6d --- /dev/null +++ b/src/manager/manager18.c @@ -0,0 +1,7 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager18/Manager18_Main.inc", void Manager18_Main()) + +ASM_FUNC("asm/non_matching/manager18/sub_0805AEDC.inc", void sub_0805AEDC()) + +ASM_FUNC("asm/non_matching/manager18/sub_0805AF3C.inc", void sub_0805AF3C()) \ No newline at end of file diff --git a/src/manager/manager19.c b/src/manager/manager19.c new file mode 100644 index 00000000..900f8c02 --- /dev/null +++ b/src/manager/manager19.c @@ -0,0 +1,5 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager19/Manager19_Main.inc", void Manager19_Main()) + +ASM_FUNC("asm/non_matching/manager19/sub_0805AFFC.inc", void sub_0805AFFC()) \ No newline at end of file diff --git a/src/manager/manager1B.c b/src/manager/manager1B.c new file mode 100644 index 00000000..79cb5f45 --- /dev/null +++ b/src/manager/manager1B.c @@ -0,0 +1,12 @@ + +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager1B/Manager1B_Main.inc", void Manager1B_Main()) + +ASM_FUNC("asm/non_matching/manager1B/sub_0805B448.inc", void sub_0805B448()) + +ASM_FUNC("asm/non_matching/manager1B/sub_0805B474.inc", void sub_0805B474()) + +ASM_FUNC("asm/non_matching/manager1B/sub_0805B4B4.inc", void sub_0805B4B4()) + +ASM_FUNC("asm/non_matching/manager1B/sub_0805B4D0.inc", void sub_0805B4D0()) \ No newline at end of file diff --git a/src/manager/manager1D.c b/src/manager/manager1D.c new file mode 100644 index 00000000..4c192909 --- /dev/null +++ b/src/manager/manager1D.c @@ -0,0 +1,7 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager1D/Manager1D_Main.inc", void Manager1D_Main()) + +ASM_FUNC("asm/non_matching/manager1D/sub_0805B5E0.inc", void sub_0805B5E0()) + +ASM_FUNC("asm/non_matching/manager1D/sub_0805B638.inc", void sub_0805B638()) \ No newline at end of file diff --git a/src/manager/manager1F.c b/src/manager/manager1F.c new file mode 100644 index 00000000..0d993055 --- /dev/null +++ b/src/manager/manager1F.c @@ -0,0 +1,9 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager1F/Manager1F_Main.inc", void Manager1F_Main()) + +ASM_FUNC("asm/non_matching/manager1F/sub_0805B70C.inc", void sub_0805B70C()) + +ASM_FUNC("asm/non_matching/manager1F/sub_0805B744.inc", void sub_0805B744()) + +ASM_FUNC("asm/non_matching/manager1F/sub_0805B778.inc", void sub_0805B778()) \ No newline at end of file diff --git a/src/manager/manager2.c b/src/manager/manager2.c index ad1b4bc5..f634c42d 100644 --- a/src/manager/manager2.c +++ b/src/manager/manager2.c @@ -15,3 +15,11 @@ void Manager2_Main(Entity* this) { } sub_0805754C(this); } + +ASM_FUNC("asm/non_matching/manager2/sub_0805754C.inc", void sub_0805754C(Entity* this)) + +ASM_FUNC("asm/non_matching/manager2/sub_080575C8.inc", void sub_080575C8(u32 param)) + +ASM_FUNC("asm/non_matching/manager2/sub_08057688.inc", void sub_08057688()) + +ASM_FUNC("asm/non_matching/manager2/sub_080576A0.inc", void sub_080576A0()) \ No newline at end of file diff --git a/src/manager/manager21.c b/src/manager/manager21.c new file mode 100644 index 00000000..32c217d4 --- /dev/null +++ b/src/manager/manager21.c @@ -0,0 +1,6 @@ + +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager21/Manager21_Main.inc", void Manager21_Main()) + +ASM_FUNC("asm/non_matching/manager21/sub_0805B8CC.inc", void sub_0805B8CC()) diff --git a/src/manager/manager22.c b/src/manager/manager22.c new file mode 100644 index 00000000..b5524f42 --- /dev/null +++ b/src/manager/manager22.c @@ -0,0 +1,18 @@ + +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager22/Manager22_Main.inc", void Manager22_Main()) + +ASM_FUNC("asm/non_matching/manager22/sub_0805BA78.inc", void sub_0805BA78()) + +ASM_FUNC("asm/non_matching/manager22/sub_0805BAD4.inc", void sub_0805BAD4()) + +ASM_FUNC("asm/non_matching/manager22/sub_0805BB00.inc", void sub_0805BB00()) + +ASM_FUNC("asm/non_matching/manager22/sub_0805BB74.inc", void sub_0805BB74()) + +ASM_FUNC("asm/non_matching/manager22/sub_0805BBBC.inc", void sub_0805BBBC()) + +ASM_FUNC("asm/non_matching/manager22/sub_0805BC04.inc", void sub_0805BC04()) + +ASM_FUNC("asm/non_matching/manager22/sub_0805BC4C.inc", void sub_0805BC4C()) \ No newline at end of file diff --git a/src/manager/manager23.c b/src/manager/manager23.c new file mode 100644 index 00000000..8fcba071 --- /dev/null +++ b/src/manager/manager23.c @@ -0,0 +1,18 @@ + +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager23/Manager23_Main.inc", void Manager23_Main()) + +ASM_FUNC("asm/non_matching/manager23/sub_0805BC8C.inc", void sub_0805BC8C()) + +ASM_FUNC("asm/non_matching/manager23/sub_0805BCD4.inc", void sub_0805BCD4()) + +ASM_FUNC("asm/non_matching/manager23/sub_0805BD5C.inc", void sub_0805BD5C()) + +ASM_FUNC("asm/non_matching/manager23/sub_0805BDB4.inc", void sub_0805BDB4()) + +ASM_FUNC("asm/non_matching/manager23/sub_0805BE70.inc", void sub_0805BE70()) + +ASM_FUNC("asm/non_matching/manager23/sub_0805BE94.inc", void sub_0805BE94()) + +ASM_FUNC("asm/non_matching/manager23/sub_0805BEC4.inc", void sub_0805BEC4()) diff --git a/src/manager/manager29.c b/src/manager/manager29.c new file mode 100644 index 00000000..148619e0 --- /dev/null +++ b/src/manager/manager29.c @@ -0,0 +1,10 @@ + +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager29/Manager29_Main.inc", void Manager29_Main()) + +ASM_FUNC("asm/non_matching/manager29/sub_0805CBD0.inc", void sub_0805CBD0()) + +ASM_FUNC("asm/non_matching/manager29/sub_0805CC3C.inc", void sub_0805CC3C()) + +ASM_FUNC("asm/non_matching/manager29/sub_0805CF80.inc", void sub_0805CF80()) diff --git a/src/manager/manager2B.c b/src/manager/manager2B.c new file mode 100644 index 00000000..c0b849cc --- /dev/null +++ b/src/manager/manager2B.c @@ -0,0 +1,11 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager2B/Manager2B_Main.inc", void Manager2B_Main()) + +ASM_FUNC("asm/non_matching/manager2B/sub_0805D02C.inc", void sub_0805D02C()) + +ASM_FUNC("asm/non_matching/manager2B/sub_0805D0C4.inc", void sub_0805D0C4()) + +ASM_FUNC("asm/non_matching/manager2B/sub_0805D0FC.inc", void sub_0805D0FC()) + +ASM_FUNC("asm/non_matching/manager2B/sub_0805D11C.inc", void sub_0805D11C()) diff --git a/src/manager/manager2E.c b/src/manager/manager2E.c index e6ad1606..52311a04 100644 --- a/src/manager/manager2E.c +++ b/src/manager/manager2E.c @@ -11,3 +11,17 @@ void Manager2E_Main(Entity* this) { void sub_0805D268(Entity* this) { gUnk_08108D44[this->action](this); } + +ASM_FUNC("asm/non_matching/manager2E/sub_0805D280.inc", void sub_0805D280()) + +ASM_FUNC("asm/non_matching/manager2E/sub_0805D2C0.inc", void sub_0805D2C0()) + +ASM_FUNC("asm/non_matching/manager2E/sub_0805D2F4.inc", void sub_0805D2F4()) + +ASM_FUNC("asm/non_matching/manager2E/sub_0805D32C.inc", void sub_0805D32C()) + +ASM_FUNC("asm/non_matching/manager2E/sub_0805D344.inc", void sub_0805D344()) + +ASM_FUNC("asm/non_matching/manager2E/sub_0805D36C.inc", void sub_0805D36C()) + +ASM_FUNC("asm/non_matching/manager2E/sub_0805D384.inc", void sub_0805D384()) \ No newline at end of file diff --git a/src/manager/manager2F.c b/src/manager/manager2F.c new file mode 100644 index 00000000..4d61dc37 --- /dev/null +++ b/src/manager/manager2F.c @@ -0,0 +1,6 @@ + +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager2F/Manager2F_Main.inc", void Manager2F_Main()) + +ASM_FUNC("asm/non_matching/manager2F/sub_0805D470.inc", void sub_0805D470()) \ No newline at end of file diff --git a/src/manager/manager31.c b/src/manager/manager31.c new file mode 100644 index 00000000..2186974b --- /dev/null +++ b/src/manager/manager31.c @@ -0,0 +1,4 @@ + +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager31/Manager31_Main.inc", void Manager31_Main()) \ No newline at end of file diff --git a/src/manager/manager32.c b/src/manager/manager32.c new file mode 100644 index 00000000..ef35a608 --- /dev/null +++ b/src/manager/manager32.c @@ -0,0 +1,17 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager32/Manager32_Main.inc", void Manager32_Main()) + +ASM_FUNC("asm/non_matching/manager32/sub_0805D7DC.inc", void sub_0805D7DC()) + +ASM_FUNC("asm/non_matching/manager32/sub_0805D860.inc", void sub_0805D860()) + +ASM_FUNC("asm/non_matching/manager32/sub_0805D900.inc", void sub_0805D900()) + +ASM_FUNC("asm/non_matching/manager32/sub_0805D98C.inc", void sub_0805D98C()) + +ASM_FUNC("asm/non_matching/manager32/sub_0805D9D8.inc", void sub_0805D9D8()) + +ASM_FUNC("asm/non_matching/manager32/sub_0805DA08.inc", void sub_0805DA08()) + +ASM_FUNC("asm/non_matching/manager32/sub_0805DA90.inc", void sub_0805DA90()) \ No newline at end of file diff --git a/src/manager/manager33.c b/src/manager/manager33.c new file mode 100644 index 00000000..eb88a953 --- /dev/null +++ b/src/manager/manager33.c @@ -0,0 +1,3 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager33/Manager33_Main.inc", void Manager33_Main()) \ No newline at end of file diff --git a/src/manager/manager34.c b/src/manager/manager34.c new file mode 100644 index 00000000..d3b4c51c --- /dev/null +++ b/src/manager/manager34.c @@ -0,0 +1,13 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager34/Manager34_Main.inc", void Manager34_Main()) + +ASM_FUNC("asm/non_matching/manager34/sub_0805DBB4.inc", void sub_0805DBB4()) + +ASM_FUNC("asm/non_matching/manager34/sub_0805DBCC.inc", void sub_0805DBCC()) + +ASM_FUNC("asm/non_matching/manager34/nullsub_498.inc", void nullsub_498()) + +ASM_FUNC("asm/non_matching/manager34/sub_0805DBF0.inc", void sub_0805DBF0()) + +ASM_FUNC("asm/non_matching/manager34/sub_0805DC70.inc", void sub_0805DC70()) \ No newline at end of file diff --git a/src/manager/manager35.c b/src/manager/manager35.c new file mode 100644 index 00000000..498af777 --- /dev/null +++ b/src/manager/manager35.c @@ -0,0 +1,11 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager35/Manager35_Main.inc", void Manager35_Main()) + +ASM_FUNC("asm/non_matching/manager35/sub_0805DC9C.inc", void sub_0805DC9C()) + +ASM_FUNC("asm/non_matching/manager35/sub_0805DCC8.inc", void sub_0805DCC8()) + +ASM_FUNC("asm/non_matching/manager35/sub_0805DD24.inc", void sub_0805DD24()) + +ASM_FUNC("asm/non_matching/manager35/sub_0805DD68.inc", void sub_0805DD68()) \ No newline at end of file diff --git a/src/manager/manager37.c b/src/manager/manager37.c new file mode 100644 index 00000000..635bd5a5 --- /dev/null +++ b/src/manager/manager37.c @@ -0,0 +1,23 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/manager37/Manager37_Main.inc", void Manager37_Main()) + +ASM_FUNC("asm/non_matching/manager37/sub_0805DE50.inc", void sub_0805DE50()) + +ASM_FUNC("asm/non_matching/manager37/sub_0805DE68.inc", void sub_0805DE68()) + +ASM_FUNC("asm/non_matching/manager37/sub_0805DEB8.inc", void sub_0805DEB8()) + +ASM_FUNC("asm/non_matching/manager37/sub_0805DF4C.inc", void sub_0805DF4C()) + +ASM_FUNC("asm/non_matching/manager37/sub_0805DF98.inc", void sub_0805DF98()) + +ASM_FUNC("asm/non_matching/manager37/sub_0805DFCC.inc", void sub_0805DFCC()) + +ASM_FUNC("asm/non_matching/manager37/sub_0805DFE8.inc", void sub_0805DFE8()) + +ASM_FUNC("asm/non_matching/manager37/sub_0805E000.inc", void sub_0805E000()) + +ASM_FUNC("asm/non_matching/manager37/sub_0805E078.inc", void sub_0805E078()) + +ASM_FUNC("asm/non_matching/manager37/sub_0805E094.inc", void sub_0805E094()) \ No newline at end of file diff --git a/src/manager/managerF.c b/src/manager/managerF.c new file mode 100644 index 00000000..65fa7757 --- /dev/null +++ b/src/manager/managerF.c @@ -0,0 +1,49 @@ +#include "manager.h" + +ASM_FUNC("asm/non_matching/managerF/ManagerF_Main.inc", void ManagerF_Main()) + +ASM_FUNC("asm/non_matching/managerF/sub_08058EE4.inc", void sub_08058EE4()) + +ASM_FUNC("asm/non_matching/managerF/sub_08058F44.inc", void sub_08058F44()) + +ASM_FUNC("asm/non_matching/managerF/sub_08058F84.inc", void sub_08058F84()) + +ASM_FUNC("asm/non_matching/managerF/sub_08058FB0.inc", void sub_08058FB0()) + +ASM_FUNC("asm/non_matching/managerF/sub_08059064.inc", void sub_08059064()) + +ASM_FUNC("asm/non_matching/managerF/sub_08059094.inc", void sub_08059094()) + +ASM_FUNC("asm/non_matching/managerF/sub_080590E0.inc", void sub_080590E0()) + +ASM_FUNC("asm/non_matching/managerF/sub_08059124.inc", void sub_08059124()) + +ASM_FUNC("asm/non_matching/managerF/sub_080591CC.inc", void sub_080591CC()) + +ASM_FUNC("asm/non_matching/managerF/sub_08059220.inc", void sub_08059220()) + +ASM_FUNC("asm/non_matching/managerF/sub_08059278.inc", void sub_08059278()) + +ASM_FUNC("asm/non_matching/managerF/sub_08059290.inc", void sub_08059290()) + +ASM_FUNC("asm/non_matching/managerF/sub_080592A4.inc", void sub_080592A4()) + +ASM_FUNC("asm/non_matching/managerF/sub_080592EC.inc", void sub_080592EC()) + +ASM_FUNC("asm/non_matching/managerF/sub_0805930C.inc", void sub_0805930C()) + +ASM_FUNC("asm/non_matching/managerF/SetDirtTile.inc", void SetDirtTile()) + +ASM_FUNC("asm/non_matching/managerF/sub_08059368.inc", void sub_08059368()) + +ASM_FUNC("asm/non_matching/managerF/sub_0805938C.inc", void sub_0805938C()) + +ASM_FUNC("asm/non_matching/managerF/sub_080593CC.inc", void sub_080593CC()) + +ASM_FUNC("asm/non_matching/managerF/sub_08059424.inc", void sub_08059424()) + +ASM_FUNC("asm/non_matching/managerF/sub_0805947C.inc", void sub_0805947C()) + +ASM_FUNC("asm/non_matching/managerF/sub_080594DC.inc", void sub_080594DC()) + +ASM_FUNC("asm/non_matching/managerF/sub_08059548.inc", void sub_08059548()) \ No newline at end of file From d0d4c3323e780110c8e3fe44c8a85126446e1b1a Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 28 Aug 2021 23:25:40 +0200 Subject: [PATCH 22/64] Decompile manager1D --- asm/non_matching/manager1D/Manager1D_Main.inc | 12 ----- asm/non_matching/manager1D/sub_0805B5E0.inc | 47 ------------------- asm/non_matching/manager1D/sub_0805B638.inc | 26 ---------- src/manager/manager1D.c | 39 +++++++++++++-- src/manager/manager33.c | 2 +- 5 files changed, 37 insertions(+), 89 deletions(-) delete mode 100644 asm/non_matching/manager1D/Manager1D_Main.inc delete mode 100644 asm/non_matching/manager1D/sub_0805B5E0.inc delete mode 100644 asm/non_matching/manager1D/sub_0805B638.inc diff --git a/asm/non_matching/manager1D/Manager1D_Main.inc b/asm/non_matching/manager1D/Manager1D_Main.inc deleted file mode 100644 index fab27c34..00000000 --- a/asm/non_matching/manager1D/Manager1D_Main.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805B5DC @ =gUnk_08108C80 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805B5DC: .4byte gUnk_08108C80 - .syntax divided diff --git a/asm/non_matching/manager1D/sub_0805B5E0.inc b/asm/non_matching/manager1D/sub_0805B5E0.inc deleted file mode 100644 index 7cfa013f..00000000 --- a/asm/non_matching/manager1D/sub_0805B5E0.inc +++ /dev/null @@ -1,47 +0,0 @@ - .syntax unified - push {r4, r5, lr} - movs r4, #0 - movs r1, #1 - strb r1, [r0, #0xc] - ldr r3, _0805B618 @ =gScreen - ldrh r2, [r3] - movs r5, #0x80 - lsls r5, r5, #4 - adds r1, r5, #0 - orrs r1, r2 - strh r1, [r3] - ldr r2, _0805B61C @ =gUnk_08108C88 - ldrb r1, [r0, #0xa] - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r1, [r1] - strh r1, [r3, #0x2c] - ldr r1, _0805B620 @ =gRoomControls - str r4, [r1, #0x2c] - str r4, [r1, #0x28] - ldrb r0, [r0, #0xa] - cmp r0, #0 - beq _0805B612 - cmp r0, #1 - beq _0805B624 -_0805B612: - strh r4, [r3, #0x30] - strh r4, [r3, #0x2e] - b _0805B634 - .align 2, 0 -_0805B618: .4byte gScreen -_0805B61C: .4byte gUnk_08108C88 -_0805B620: .4byte gRoomControls -_0805B624: - ldrh r0, [r1, #0x2a] - ldrh r2, [r1, #0xa] - adds r0, r0, r2 - strh r0, [r3, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r3, #0x30] -_0805B634: - pop {r4, r5, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager1D/sub_0805B638.inc b/asm/non_matching/manager1D/sub_0805B638.inc deleted file mode 100644 index fb210c75..00000000 --- a/asm/non_matching/manager1D/sub_0805B638.inc +++ /dev/null @@ -1,26 +0,0 @@ - .syntax unified - push {lr} - ldrb r0, [r0, #0xa] - cmp r0, #1 - bne _0805B65E - ldr r1, _0805B660 @ =gRoomControls - ldr r0, [r1, #0x28] - movs r2, #0x80 - lsls r2, r2, #6 - adds r0, r0, r2 - str r0, [r1, #0x28] - ldr r2, _0805B664 @ =gScreen - ldrh r0, [r1, #0x2a] - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] -_0805B65E: - pop {pc} - .align 2, 0 -_0805B660: .4byte gRoomControls -_0805B664: .4byte gScreen - .syntax divided diff --git a/src/manager/manager1D.c b/src/manager/manager1D.c index 4c192909..2e52aaf6 100644 --- a/src/manager/manager1D.c +++ b/src/manager/manager1D.c @@ -1,7 +1,40 @@ #include "manager.h" +#include "room.h" +#include "screen.h" -ASM_FUNC("asm/non_matching/manager1D/Manager1D_Main.inc", void Manager1D_Main()) +extern void (*const gUnk_08108C80[])(Manager*); -ASM_FUNC("asm/non_matching/manager1D/sub_0805B5E0.inc", void sub_0805B5E0()) +extern u16 gUnk_08108C88[]; -ASM_FUNC("asm/non_matching/manager1D/sub_0805B638.inc", void sub_0805B638()) \ No newline at end of file +void Manager1D_Main(Manager* this) { + gUnk_08108C80[this->action](this); +} + +void sub_0805B5E0(Manager* this) { + this->action = 1; + + gScreen.lcd.displayControl |= 0x800; + gScreen.affine.bg3Control = gUnk_08108C88[this->unk_0a]; + gRoomControls.bg3OffsetY.WORD = 0; + gRoomControls.bg3OffsetX.WORD = 0; + + switch (this->unk_0a) { + case 0: + default: + gScreen.affine.bg3yOffset = 0; + gScreen.affine.bg3xOffset = 0; + break; + case 1: + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; + break; + } +} + +void sub_0805B638(Manager* this) { + if (this->unk_0a == 1) { + gRoomControls.bg3OffsetX.WORD = gRoomControls.bg3OffsetX.WORD + 0x2000; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI ; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; + } +} \ No newline at end of file diff --git a/src/manager/manager33.c b/src/manager/manager33.c index eb88a953..25d630d6 100644 --- a/src/manager/manager33.c +++ b/src/manager/manager33.c @@ -1,3 +1,3 @@ #include "manager.h" -ASM_FUNC("asm/non_matching/manager33/Manager33_Main.inc", void Manager33_Main()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager33/Manager33_Main.inc", void Manager33_Main(Manager* this)) \ No newline at end of file From f4447dabc39aaaf4b14ed6fc7bc66a6146e24d02 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 29 Aug 2021 12:13:40 +0200 Subject: [PATCH 23/64] Decompile manager1F --- asm/non_matching/manager1F/Manager1F_Main.inc | 12 ----- asm/non_matching/manager1F/sub_0805B70C.inc | 29 ----------- asm/non_matching/manager1F/sub_0805B744.inc | 27 ---------- asm/non_matching/manager1F/sub_0805B778.inc | 20 ------- src/manager/manager1F.c | 52 +++++++++++++++++-- 5 files changed, 48 insertions(+), 92 deletions(-) delete mode 100644 asm/non_matching/manager1F/Manager1F_Main.inc delete mode 100644 asm/non_matching/manager1F/sub_0805B70C.inc delete mode 100644 asm/non_matching/manager1F/sub_0805B744.inc delete mode 100644 asm/non_matching/manager1F/sub_0805B778.inc diff --git a/asm/non_matching/manager1F/Manager1F_Main.inc b/asm/non_matching/manager1F/Manager1F_Main.inc deleted file mode 100644 index e09ecfca..00000000 --- a/asm/non_matching/manager1F/Manager1F_Main.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805B708 @ =gUnk_08108C94 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805B708: .4byte gUnk_08108C94 - .syntax divided diff --git a/asm/non_matching/manager1F/sub_0805B70C.inc b/asm/non_matching/manager1F/sub_0805B70C.inc deleted file mode 100644 index bf21f206..00000000 --- a/asm/non_matching/manager1F/sub_0805B70C.inc +++ /dev/null @@ -1,29 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805B71E - movs r0, #1 - strb r0, [r4, #0xb] -_0805B71E: - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r4, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4, #0x38] - adds r0, r4, #0 - bl sub_0805B778 - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager1F/sub_0805B744.inc b/asm/non_matching/manager1F/sub_0805B744.inc deleted file mode 100644 index a43b8175..00000000 --- a/asm/non_matching/manager1F/sub_0805B744.inc +++ /dev/null @@ -1,27 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - adds r1, r0, #0 - cmp r1, #0 - beq _0805B766 - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _0805B774 - movs r0, #1 - strb r0, [r4, #0xb] - adds r0, r4, #0 - bl sub_0805B778 - b _0805B774 -_0805B766: - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0805B774 - strb r1, [r4, #0xb] - adds r0, r4, #0 - bl sub_0805B778 -_0805B774: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager1F/sub_0805B778.inc b/asm/non_matching/manager1F/sub_0805B778.inc deleted file mode 100644 index 9d5ac27f..00000000 --- a/asm/non_matching/manager1F/sub_0805B778.inc +++ /dev/null @@ -1,20 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805B79C @ =gUnk_08108C9C - ldrb r1, [r0, #0xa] - lsls r1, r1, #1 - ldrb r3, [r0, #0xb] - adds r1, r1, r3 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r3, [r1] - movs r2, #0x38 - ldrsh r1, [r0, r2] - adds r0, #0x36 - ldrb r2, [r0] - adds r0, r3, #0 - bl SetTileType - pop {pc} - .align 2, 0 -_0805B79C: .4byte gUnk_08108C9C - .syntax divided diff --git a/src/manager/manager1F.c b/src/manager/manager1F.c index 0d993055..08fd71e8 100644 --- a/src/manager/manager1F.c +++ b/src/manager/manager1F.c @@ -1,9 +1,53 @@ #include "manager.h" +#include "flags.h" +#include "room.h" -ASM_FUNC("asm/non_matching/manager1F/Manager1F_Main.inc", void Manager1F_Main()) +typedef struct { + Manager manager; + u8 field_0x20[0x16]; + u8 field_0x36; + u8 field_0x37; + s16 field_0x38; + u16 field_0x3a; + u8 field_0x3c; + u8 field_0x3d; + u16 field_0x3e; +} Manager1F; +extern void (*const gUnk_08108C94[])(Manager1F*); -ASM_FUNC("asm/non_matching/manager1F/sub_0805B70C.inc", void sub_0805B70C()) +void sub_0805B778(Manager1F*); -ASM_FUNC("asm/non_matching/manager1F/sub_0805B744.inc", void sub_0805B744()) +extern u16 gUnk_08108C9C[]; -ASM_FUNC("asm/non_matching/manager1F/sub_0805B778.inc", void sub_0805B778()) \ No newline at end of file +void Manager1F_Main(Manager1F* this) { + gUnk_08108C94[this->manager.action](this); +} + +void sub_0805B70C(Manager1F* this) { + if (CheckFlags(this->field_0x3e) != 0) { + this->manager.unk_0b = 1; + } + this->manager.action = 1; + this->field_0x38 = + (this->field_0x38 >> 4 & 0x3fU) | (((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6); + sub_0805B778(this); +} + +void sub_0805B744(Manager1F* this) { + if (CheckFlags(this->field_0x3e) != 0) { + if (this->manager.unk_0b == 0) { + this->manager.unk_0b = 1; + sub_0805B778(this); + } + } else { + if (this->manager.unk_0b == 1) { + this->manager.unk_0b = 0; + sub_0805B778(this); + } + } +} + +void sub_0805B778(Manager1F* this) { + SetTileType(gUnk_08108C9C[this->manager.unk_0a * 2 + this->manager.unk_0b], + this->field_0x38, this->field_0x36); +} \ No newline at end of file From 3f247035d082137bedf87ef386db299cfe2150c1 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 29 Aug 2021 12:32:44 +0200 Subject: [PATCH 24/64] Decompile manager19 --- asm/non_matching/manager19/Manager19_Main.inc | 72 ------------------- asm/non_matching/manager19/sub_0805AFFC.inc | 25 ------- src/manager/manager19.c | 36 +++++++++- 3 files changed, 34 insertions(+), 99 deletions(-) delete mode 100644 asm/non_matching/manager19/Manager19_Main.inc delete mode 100644 asm/non_matching/manager19/sub_0805AFFC.inc diff --git a/asm/non_matching/manager19/Manager19_Main.inc b/asm/non_matching/manager19/Manager19_Main.inc deleted file mode 100644 index 5eb635c5..00000000 --- a/asm/non_matching/manager19/Manager19_Main.inc +++ /dev/null @@ -1,72 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - cmp r4, #0 - bne _0805AF8C - ldr r0, _0805AF80 @ =gArea - ldr r1, _0805AF84 @ =0x0000088C - adds r0, r0, r1 - ldr r0, [r0] - ldr r1, _0805AF88 @ =sub_0805AFFC - cmp r0, r1 - beq _0805AFEE - movs r0, #0 - bl _call_via_r1 - b _0805AFEE - .align 2, 0 -_0805AF80: .4byte gArea -_0805AF84: .4byte 0x0000088C -_0805AF88: .4byte sub_0805AFFC -_0805AF8C: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805AFD2 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - ldr r0, _0805AFC0 @ =gArea - ldr r2, _0805AFC4 @ =0x0000088C - adds r0, r0, r2 - ldr r0, [r0] - cmp r0, #0 - bne _0805AFCC - ldr r1, _0805AFC8 @ =sub_0805AFFC - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 - b _0805AFEE - .align 2, 0 -_0805AFC0: .4byte gArea -_0805AFC4: .4byte 0x0000088C -_0805AFC8: .4byte sub_0805AFFC -_0805AFCC: - bl DeleteThisEntity - b _0805AFEE -_0805AFD2: - ldr r1, _0805AFF0 @ =gRoomControls - ldr r0, [r1, #0x28] - ldr r3, _0805AFF4 @ =0xFFFFE000 - adds r0, r0, r3 - str r0, [r1, #0x28] - ldr r2, _0805AFF8 @ =gScreen - ldrh r0, [r1, #0x2a] - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] -_0805AFEE: - pop {r4, pc} - .align 2, 0 -_0805AFF0: .4byte gRoomControls -_0805AFF4: .4byte 0xFFFFE000 -_0805AFF8: .4byte gScreen - .syntax divided diff --git a/asm/non_matching/manager19/sub_0805AFFC.inc b/asm/non_matching/manager19/sub_0805AFFC.inc deleted file mode 100644 index e9ee5a41..00000000 --- a/asm/non_matching/manager19/sub_0805AFFC.inc +++ /dev/null @@ -1,25 +0,0 @@ - .syntax unified - ldr r2, _0805B024 @ =gScreen - ldr r0, _0805B028 @ =0x00001E03 - strh r0, [r2, #0x2c] - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _0805B02C @ =gRoomControls - ldrh r0, [r1, #0x2a] - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] - bx lr - .align 2, 0 -_0805B024: .4byte gScreen -_0805B028: .4byte 0x00001E03 -_0805B02C: .4byte gRoomControls - .syntax divided diff --git a/src/manager/manager19.c b/src/manager/manager19.c index 900f8c02..b5586cf8 100644 --- a/src/manager/manager19.c +++ b/src/manager/manager19.c @@ -1,5 +1,37 @@ #include "manager.h" +#include "area.h" +#include "room.h" +#include "functions.h" +#include "screen.h" -ASM_FUNC("asm/non_matching/manager19/Manager19_Main.inc", void Manager19_Main()) +void sub_0805AFFC(Manager*); -ASM_FUNC("asm/non_matching/manager19/sub_0805AFFC.inc", void sub_0805AFFC()) \ No newline at end of file +void Manager19_Main(Manager* this) { + if (this == NULL) { + if ((void*)gArea.unk3 != sub_0805AFFC) { + sub_0805AFFC(this); + } + } else { + if (this->action == 0) { + this->action = 1; + this->unk_10 |= 0x20; + sub_0805E3A0(this, 6); + if (gArea.unk3 == 0) { + sub_08052D74(this, sub_0805AFFC, NULL); + } else { + DeleteThisEntity(); + } + } else { + gRoomControls.bg3OffsetX.WORD = gRoomControls.bg3OffsetX.WORD - 0x2000; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI ; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; + } + } +} + +void sub_0805AFFC(Manager* this) { + gScreen.affine.bg3Control = 0x1e03; + gScreen.lcd.displayControl |= 0x800; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; +} \ No newline at end of file From 14323b92becbd6a3e24c09785c7085e4a2c4b31b Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 30 Aug 2021 17:55:34 +0200 Subject: [PATCH 25/64] Decompile manager2E --- asm/non_matching/manager2B/Manager2B_Main.inc | 12 -- asm/non_matching/manager2B/sub_0805D0C4.inc | 30 ----- asm/non_matching/manager2B/sub_0805D0FC.inc | 17 --- asm/non_matching/manager2E/sub_0805D280.inc | 31 ----- asm/non_matching/manager2E/sub_0805D2C0.inc | 27 ---- asm/non_matching/manager2E/sub_0805D2F4.inc | 29 ----- asm/non_matching/manager2E/sub_0805D32C.inc | 12 -- asm/non_matching/manager2E/sub_0805D344.inc | 21 ---- asm/non_matching/manager2E/sub_0805D36C.inc | 14 --- asm/non_matching/manager2E/sub_0805D384.inc | 35 ------ src/manager/manager2B.c | 118 +++++++++++++++++- src/manager/manager2E.c | 111 ++++++++++++++-- 12 files changed, 211 insertions(+), 246 deletions(-) delete mode 100644 asm/non_matching/manager2B/Manager2B_Main.inc delete mode 100644 asm/non_matching/manager2B/sub_0805D0C4.inc delete mode 100644 asm/non_matching/manager2B/sub_0805D0FC.inc delete mode 100644 asm/non_matching/manager2E/sub_0805D280.inc delete mode 100644 asm/non_matching/manager2E/sub_0805D2C0.inc delete mode 100644 asm/non_matching/manager2E/sub_0805D2F4.inc delete mode 100644 asm/non_matching/manager2E/sub_0805D32C.inc delete mode 100644 asm/non_matching/manager2E/sub_0805D344.inc delete mode 100644 asm/non_matching/manager2E/sub_0805D36C.inc delete mode 100644 asm/non_matching/manager2E/sub_0805D384.inc diff --git a/asm/non_matching/manager2B/Manager2B_Main.inc b/asm/non_matching/manager2B/Manager2B_Main.inc deleted file mode 100644 index 5e0a806b..00000000 --- a/asm/non_matching/manager2B/Manager2B_Main.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805D028 @ =gUnk_08108D30 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805D028: .4byte gUnk_08108D30 - .syntax divided diff --git a/asm/non_matching/manager2B/sub_0805D0C4.inc b/asm/non_matching/manager2B/sub_0805D0C4.inc deleted file mode 100644 index 5472b6d4..00000000 --- a/asm/non_matching/manager2B/sub_0805D0C4.inc +++ /dev/null @@ -1,30 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D0D8 - movs r0, #0xb4 - strb r0, [r4, #0xf] -_0805D0D8: - adds r5, r4, #0 - adds r5, #0x36 - ldrb r0, [r5] - cmp r0, #0xf - bne _0805D0F6 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #8 - strb r0, [r4, #0xe] - movs r0, #0x72 - bl SoundReq - adds r0, r4, #0 - bl sub_0805D11C -_0805D0F6: - movs r0, #0 - strb r0, [r5] - pop {r4, r5, pc} - .syntax divided diff --git a/asm/non_matching/manager2B/sub_0805D0FC.inc b/asm/non_matching/manager2B/sub_0805D0FC.inc deleted file mode 100644 index c0e0bd1d..00000000 --- a/asm/non_matching/manager2B/sub_0805D0FC.inc +++ /dev/null @@ -1,17 +0,0 @@ - .syntax unified - 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 _0805D118 - ldrh r0, [r4, #0x3e] - bl SetFlag - adds r0, r4, #0 - bl DeleteManager -_0805D118: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D280.inc b/asm/non_matching/manager2E/sub_0805D280.inc deleted file mode 100644 index 3b24e036..00000000 --- a/asm/non_matching/manager2E/sub_0805D280.inc +++ /dev/null @@ -1,31 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _0805D292 - bl DeleteThisEntity -_0805D292: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805D2A6 - ldrh r0, [r4, #0x3c] - bl SetFlag - bl DeleteThisEntity -_0805D2A6: - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _0805D2B4 - movs r0, #0x1e - strb r0, [r4, #0xe] -_0805D2B4: - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D2C0.inc b/asm/non_matching/manager2E/sub_0805D2C0.inc deleted file mode 100644 index f90414ea..00000000 --- a/asm/non_matching/manager2E/sub_0805D2C0.inc +++ /dev/null @@ -1,27 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805D2EE - ldr r0, _0805D2F0 @ =gUnk_03003DC0 - ldrh r0, [r0, #8] - cmp r0, #1 - bhi _0805D2EE - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xe] - cmp r0, #1 - bne _0805D2E6 - adds r0, r4, #0 - bl sub_0805D2F4 -_0805D2E6: - ldrb r1, [r4, #0xe] - adds r0, r4, #0 - bl sub_0805E4E0 -_0805D2EE: - pop {r4, pc} - .align 2, 0 -_0805D2F0: .4byte gUnk_03003DC0 - .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D2F4.inc b/asm/non_matching/manager2E/sub_0805D2F4.inc deleted file mode 100644 index f9780632..00000000 --- a/asm/non_matching/manager2E/sub_0805D2F4.inc +++ /dev/null @@ -1,29 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldr r0, _0805D310 @ =gUnk_03003DC0 - ldrh r0, [r0, #8] - cmp r0, #0 - bne _0805D328 - movs r1, #0x38 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _0805D314 - bl SoundReq - b _0805D31A - .align 2, 0 -_0805D310: .4byte gUnk_03003DC0 -_0805D314: - movs r0, #0x72 - bl SoundReq -_0805D31A: - ldrh r0, [r4, #0x3c] - cmp r0, #0 - beq _0805D324 - bl SetFlag -_0805D324: - bl DeleteThisEntity -_0805D328: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D32C.inc b/asm/non_matching/manager2E/sub_0805D32C.inc deleted file mode 100644 index bfbb75de..00000000 --- a/asm/non_matching/manager2E/sub_0805D32C.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805D340 @ =gUnk_08108D50 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805D340: .4byte gUnk_08108D50 - .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D344.inc b/asm/non_matching/manager2E/sub_0805D344.inc deleted file mode 100644 index 8a333ead..00000000 --- a/asm/non_matching/manager2E/sub_0805D344.inc +++ /dev/null @@ -1,21 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _0805D35C - movs r0, #0x1e - strb r0, [r4, #0xe] -_0805D35C: - ldrb r0, [r4, #0xe] - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D36C.inc b/asm/non_matching/manager2E/sub_0805D36C.inc deleted file mode 100644 index 6398179b..00000000 --- a/asm/non_matching/manager2E/sub_0805D36C.inc +++ /dev/null @@ -1,14 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805D382 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xf] - strb r0, [r4, #0xe] -_0805D382: - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/manager2E/sub_0805D384.inc b/asm/non_matching/manager2E/sub_0805D384.inc deleted file mode 100644 index ee124568..00000000 --- a/asm/non_matching/manager2E/sub_0805D384.inc +++ /dev/null @@ -1,35 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0805D3B2 - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D3C6 - movs r1, #0x38 - ldrsh r0, [r4, r1] - movs r1, #0x72 - cmp r0, #0 - beq _0805D3A4 - adds r1, r0, #0 -_0805D3A4: - adds r0, r1, #0 - bl SoundReq - ldrh r0, [r4, #0x3c] - bl SetFlag - b _0805D3C6 -_0805D3B2: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - bne _0805D3C6 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3c] - bl ClearFlag -_0805D3C6: - pop {r4, pc} - .syntax divided diff --git a/src/manager/manager2B.c b/src/manager/manager2B.c index c0b849cc..3471a5bc 100644 --- a/src/manager/manager2B.c +++ b/src/manager/manager2B.c @@ -1,11 +1,119 @@ #include "manager.h" +#include "flags.h" +#include "room.h" +#include "functions.h" +#include "object.h" +#include "audio.h" -ASM_FUNC("asm/non_matching/manager2B/Manager2B_Main.inc", void Manager2B_Main()) +typedef struct { + Manager manager; + Entity * field_0x20; + u8 field_0x24; + u8 field_0x25; + u8 field_0x26; + u8 field_0x27; + u8 field_0x28; + u8 field_0x29; + u8 field_0x2a; + u8 field_0x2b; + u8 field_0x2c; + u8 field_0x2d; + u8 field_0x2e; + u8 field_0x2f; + u8 field_0x30; + u8 field_0x31; + u8 field_0x32; + u8 field_0x33; + u8 field_0x34; + u8 field_0x35; + u8 field_0x36; + u8 field_0x37; + u8 field_0x38; + u8 field_0x39; + u8 field_0x3a; + u8 field_0x3b; + u8 field_0x3c; + u8 field_0x3d; + u16 field_0x3e; +} Manager2B; -ASM_FUNC("asm/non_matching/manager2B/sub_0805D02C.inc", void sub_0805D02C()) -ASM_FUNC("asm/non_matching/manager2B/sub_0805D0C4.inc", void sub_0805D0C4()) -ASM_FUNC("asm/non_matching/manager2B/sub_0805D0FC.inc", void sub_0805D0FC()) +extern void (*const gUnk_08108D30[])(Entity*); -ASM_FUNC("asm/non_matching/manager2B/sub_0805D11C.inc", void sub_0805D11C()) +extern u8 gEntCount; + +void sub_0805D11C(Manager2B*); + +void Manager2B_Main(Manager2B* this) { + gUnk_08108D30[this->manager.action](this); +} + +NONMATCH("asm/non_matching/manager2B/sub_0805D02C.inc", void sub_0805D02C(Manager2B* this)) { + u32 counter; + u16* objectData; + Entity* object; + Entity** createdObjects; + + if (CheckFlags((u32)this->field_0x3e) != 0) { + DeleteThisEntity(); + } + if (gEntCount < 0x44) { + objectData = GetCurrentRoomProperty(this->manager.unk_0a); + counter = 0; + createdObjects = &this->field_0x20; + while(counter < 4) { + object = CreateObject(OBJECT_A0, objectData[2], counter); + object->x.HALF.HI = objectData[0] + gRoomControls.roomOriginX; + object->y.HALF.HI = objectData[1] + gRoomControls.roomOriginY; + object->parent = (Entity*)this; + sub_08016A30(object); + *createdObjects = object; + counter += 1; + objectData += 3; + createdObjects += 1; + } + this->manager.action = 1; + this->manager.unk_0f = 0x3c; + this->field_0x36 = 0; + } +} +END_NONMATCH + +void sub_0805D0C4(Manager2B* this) { + if (--this->manager.unk_0f == 0) { + this->manager.unk_0f = 0xb4; + } + if (this->field_0x36 == 0xf) { + this->manager.action = 2; + this->manager.unk_0e = 8; + SoundReq(SFX_SECRET); + sub_0805D11C(this); + } + this->field_0x36 = 0; +} + +void sub_0805D0FC(Manager2B* this) { + if (--this->manager.unk_0e == 0) { + SetFlag(this->field_0x3e); + DeleteManager(&this->manager); + } +} + +NONMATCH("asm/non_matching/manager2B/sub_0805D11C.inc", void sub_0805D11C(Manager2B* this)) { + Entity* entity; + Entity** createdObjects; + u32 counter; + + counter = 0; + createdObjects = &this->field_0x20; + while (counter < 4) { + entity = *createdObjects; + *createdObjects = NULL; + sub_0807BA8C(TILE(entity->x.HALF.HI, entity->y.HALF.HI), entity->collisionLayer); + DeleteEntity(entity); + createdObjects += 1; + counter += 1; + } +} +END_NONMATCH diff --git a/src/manager/manager2E.c b/src/manager/manager2E.c index 52311a04..5d114b6f 100644 --- a/src/manager/manager2E.c +++ b/src/manager/manager2E.c @@ -1,27 +1,112 @@ #include "global.h" #include "entity.h" +#include "manager.h" +#include "flags.h" +#include "functions.h" +#include "audio.h" -extern void (*const gUnk_08108D3C[])(Entity*); -extern void (*const gUnk_08108D44[])(Entity*); +typedef struct { + Manager manager; + u8 field_0x20[0x18]; + s16 field_0x38; + u8 field_0x3a; + u8 field_0x3b; + u16 field_0x3c; + u16 field_0x3e; +} Manager2E; -void Manager2E_Main(Entity* this) { - gUnk_08108D3C[this->type](this); +extern void (*const gUnk_08108D3C[])(Manager2E*); +extern void (*const gUnk_08108D44[])(Manager2E*); + +void sub_0805D2F4(Manager2E*); +extern void sub_0805E4E0(void*, u32); + +extern void (*const gUnk_08108D50[])(Manager2E*); + +void Manager2E_Main(Manager2E* this) { + gUnk_08108D3C[this->manager.unk_0a](this); } -void sub_0805D268(Entity* this) { - gUnk_08108D44[this->action](this); +void sub_0805D268(Manager2E* this) { + gUnk_08108D44[this->manager.action](this); } -ASM_FUNC("asm/non_matching/manager2E/sub_0805D280.inc", void sub_0805D280()) +void sub_0805D280(Manager2E* this) { + if (CheckFlags(this->field_0x3c) != 0) { + DeleteThisEntity(); + } + if (CheckFlags(this->field_0x3e) != 0) { + SetFlag(this->field_0x3c); + DeleteThisEntity(); + } + this->manager.action = 1; + if (this->manager.unk_0e == 0) { + this->manager.unk_0e = 0x1e; + } + sub_0805E3A0(this, 6); +} -ASM_FUNC("asm/non_matching/manager2E/sub_0805D2C0.inc", void sub_0805D2C0()) +void sub_0805D2C0(Manager2E* this) { + if ((CheckFlags(this->field_0x3e) != 0) && (gUnk_03003DC0.unk_0xc < 2)) { + this->manager.action = 2; + if (this->manager.unk_0e == 1) { + sub_0805D2F4(this); + } + sub_0805E4E0(this, this->manager.unk_0e); + } +} -ASM_FUNC("asm/non_matching/manager2E/sub_0805D2F4.inc", void sub_0805D2F4()) +void sub_0805D2F4(Manager2E* this) { + if (gUnk_03003DC0.unk_0xc == 0) { + if (this->field_0x38 != SFX_NONE) { + SoundReq(this->field_0x38); + } else { + SoundReq(SFX_SECRET); + } + if (this->field_0x3c != 0) { + SetFlag(this->field_0x3c); + } + DeleteThisEntity(); + } +} -ASM_FUNC("asm/non_matching/manager2E/sub_0805D32C.inc", void sub_0805D32C()) +void sub_0805D32C(Manager2E* this) { + gUnk_08108D50[this->manager.action](this); +} -ASM_FUNC("asm/non_matching/manager2E/sub_0805D344.inc", void sub_0805D344()) +void sub_0805D344(Manager2E* this) { + CheckFlags(this->field_0x3e); + this->manager.action = 1; + if (this->manager.unk_0e == 0) { + this->manager.unk_0e = 0x1e; + } + this->manager.unk_0f = this->manager.unk_0e; + sub_0805E3A0(this, 6); +} -ASM_FUNC("asm/non_matching/manager2E/sub_0805D36C.inc", void sub_0805D36C()) +void sub_0805D36C(Manager2E* this) { + if (CheckFlags(this->field_0x3e) != 0) { + this->manager.action = 2; + this->manager.unk_0e = this->manager.unk_0f; + } +} -ASM_FUNC("asm/non_matching/manager2E/sub_0805D384.inc", void sub_0805D384()) \ No newline at end of file +void sub_0805D384(Manager2E* this) { + if (this->manager.unk_0e != 0) { + if (--this->manager.unk_0e == 0) { + Sound sound; + if (this->field_0x38 != SFX_NONE) { + sound = this->field_0x38; + } else { + sound = SFX_SECRET; + } + SoundReq(sound); + SetFlag(this->field_0x3c); + } + } else { + if (CheckFlags(this->field_0x3e) == 0) { + this->manager.action = 1; + ClearFlag(this->field_0x3c); + } + } +} From 29d7c7bd6bce5fbe25c92dad6f27f545eeb12bec Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 30 Aug 2021 17:56:05 +0200 Subject: [PATCH 26/64] Decompiler manager34 --- asm/non_matching/manager34/Manager34_Main.inc | 16 -------- asm/non_matching/manager34/nullsub_498.inc | 4 -- asm/non_matching/manager34/sub_0805DBB4.inc | 14 ------- asm/non_matching/manager34/sub_0805DBCC.inc | 19 ---------- asm/non_matching/manager34/sub_0805DC70.inc | 9 ----- src/manager/manager34.c | 38 ++++++++++++++++--- 6 files changed, 32 insertions(+), 68 deletions(-) delete mode 100644 asm/non_matching/manager34/Manager34_Main.inc delete mode 100644 asm/non_matching/manager34/nullsub_498.inc delete mode 100644 asm/non_matching/manager34/sub_0805DBB4.inc delete mode 100644 asm/non_matching/manager34/sub_0805DBCC.inc delete mode 100644 asm/non_matching/manager34/sub_0805DC70.inc diff --git a/asm/non_matching/manager34/Manager34_Main.inc b/asm/non_matching/manager34/Manager34_Main.inc deleted file mode 100644 index c5a64403..00000000 --- a/asm/non_matching/manager34/Manager34_Main.inc +++ /dev/null @@ -1,16 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0805DBB0 @ =gUnk_08108D8C - ldrb r0, [r4, #0xc] - 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_0805DBF0 - pop {r4, pc} - .align 2, 0 -_0805DBB0: .4byte gUnk_08108D8C - .syntax divided diff --git a/asm/non_matching/manager34/nullsub_498.inc b/asm/non_matching/manager34/nullsub_498.inc deleted file mode 100644 index 807ea5e0..00000000 --- a/asm/non_matching/manager34/nullsub_498.inc +++ /dev/null @@ -1,4 +0,0 @@ - .syntax unified - bx lr - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager34/sub_0805DBB4.inc b/asm/non_matching/manager34/sub_0805DBB4.inc deleted file mode 100644 index 65c91e5c..00000000 --- a/asm/non_matching/manager34/sub_0805DBB4.inc +++ /dev/null @@ -1,14 +0,0 @@ - .syntax unified - movs r1, #1 - strb r1, [r0, #0xc] - ldr r1, _0805DBC8 @ =gScreenTransition - adds r1, #0x3d - ldrb r2, [r1] - lsls r1, r2, #4 - subs r1, r1, r2 - lsls r1, r1, #2 - strh r1, [r0, #0x20] - bx lr - .align 2, 0 -_0805DBC8: .4byte gScreenTransition - .syntax divided diff --git a/asm/non_matching/manager34/sub_0805DBCC.inc b/asm/non_matching/manager34/sub_0805DBCC.inc deleted file mode 100644 index b9fdf79f..00000000 --- a/asm/non_matching/manager34/sub_0805DBCC.inc +++ /dev/null @@ -1,19 +0,0 @@ - .syntax unified - push {lr} - adds r1, r0, #0 - ldr r0, [r1, #0x14] - ldr r0, [r0, #4] - cmp r0, #0 - bne _0805DBE6 - movs r0, #2 - strb r0, [r1, #0xc] - ldrh r0, [r1, #0x20] - ldr r2, _0805DBE8 @ =0x0000012D - cmp r0, r2 - bls _0805DBE6 - strh r2, [r1, #0x20] -_0805DBE6: - pop {pc} - .align 2, 0 -_0805DBE8: .4byte 0x0000012D - .syntax divided diff --git a/asm/non_matching/manager34/sub_0805DC70.inc b/asm/non_matching/manager34/sub_0805DC70.inc deleted file mode 100644 index 062503cd..00000000 --- a/asm/non_matching/manager34/sub_0805DC70.inc +++ /dev/null @@ -1,9 +0,0 @@ - .syntax unified - push {lr} - bl sub_0805E5A8 - ldr r0, _0805DC80 @ =gUnk_0813AC48 - bl DoExitTransition - pop {pc} - .align 2, 0 -_0805DC80: .4byte gUnk_0813AC48 - .syntax divided diff --git a/src/manager/manager34.c b/src/manager/manager34.c index d3b4c51c..df4ce8e6 100644 --- a/src/manager/manager34.c +++ b/src/manager/manager34.c @@ -1,13 +1,39 @@ #include "manager.h" +#include "structures.h" +#include "functions.h" -ASM_FUNC("asm/non_matching/manager34/Manager34_Main.inc", void Manager34_Main()) +typedef struct { + Manager manager; + u16 field_0x20; +} Manager34; -ASM_FUNC("asm/non_matching/manager34/sub_0805DBB4.inc", void sub_0805DBB4()) +extern void (*const gUnk_08108D8C[])(Manager34*); +void sub_0805DBF0(Manager34*); -ASM_FUNC("asm/non_matching/manager34/sub_0805DBCC.inc", void sub_0805DBCC()) +extern ScreenTransitionData gUnk_0813AC48; -ASM_FUNC("asm/non_matching/manager34/nullsub_498.inc", void nullsub_498()) +void Manager34_Main(Manager34* this) { + gUnk_08108D8C[this->manager.action](this); + sub_0805DBF0(this); +} -ASM_FUNC("asm/non_matching/manager34/sub_0805DBF0.inc", void sub_0805DBF0()) +void sub_0805DBB4(Manager34* this) { + this->manager.action = 1; + this->field_0x20 = gScreenTransition.filler[0] * 0x3c; +} -ASM_FUNC("asm/non_matching/manager34/sub_0805DC70.inc", void sub_0805DC70()) \ No newline at end of file +void sub_0805DBCC(Manager34* this) { + if (((this->manager.parent)->next == NULL) && (this->manager.action = 2, 0x12d < this->field_0x20)) { + this->field_0x20 = 0x12d; + } +} + +void nullsub_498(Manager34* this) { +} + +ASM_FUNC("asm/non_matching/manager34/sub_0805DBF0.inc", void sub_0805DBF0(Manager34* this)) + +void sub_0805DC70(Manager34* this) { + sub_0805E5A8(); + DoExitTransition(&gUnk_0813AC48); +} From d6329131229e280762a5cf0b32311cd191a2364a Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 30 Aug 2021 17:56:22 +0200 Subject: [PATCH 27/64] Decompile manager35 --- asm/non_matching/manager2F/Manager2F_Main.inc | 77 ----------------- asm/non_matching/manager2F/sub_0805D470.inc | 28 ------- asm/non_matching/manager35/Manager35_Main.inc | 12 --- asm/non_matching/manager35/sub_0805DC9C.inc | 21 ----- asm/non_matching/manager35/sub_0805DCC8.inc | 47 ----------- asm/non_matching/manager35/sub_0805DD24.inc | 34 -------- asm/non_matching/manager35/sub_0805DD68.inc | 40 --------- include/functions.h | 2 +- include/structures.h | 3 + src/code_0808091C.c | 2 - src/enemy/mazaalHead.c | 1 - src/enemy/mazaalMacro.c | 1 - src/enemy/wallMaster.c | 4 +- src/enemy/wallMaster2.c | 3 +- src/manager/manager1.c | 2 +- src/manager/manager10.c | 2 +- src/manager/manager12.c | 2 +- src/manager/manager13.c | 2 +- src/manager/manager14.c | 2 +- src/manager/manager16.c | 2 +- src/manager/manager17.c | 2 - src/manager/manager18.c | 2 +- src/manager/manager19.c | 6 +- src/manager/manager1B.c | 2 +- src/manager/manager1D.c | 8 +- src/manager/manager1F.c | 8 +- src/manager/manager2.c | 2 +- src/manager/manager22.c | 2 +- src/manager/manager24.c | 5 +- src/manager/manager2A.c | 2 +- src/manager/manager2B.c | 12 ++- src/manager/manager2C.c | 6 +- src/manager/manager2F.c | 38 ++++++++- src/manager/manager31.c | 2 +- src/manager/manager32.c | 2 +- src/manager/manager33.c | 2 +- src/manager/manager35.c | 83 +++++++++++++++++-- src/manager/manager37.c | 2 +- src/manager/manager6.c | 2 - src/manager/managerD.c | 2 - src/manager/managerF.c | 2 +- src/npc/emma.c | 8 +- src/npc/picolyteBottle.c | 1 - src/npc/simon.c | 6 +- src/object/book.c | 2 +- src/object/minishSizedEntrance.c | 4 +- src/player.c | 1 - 47 files changed, 163 insertions(+), 338 deletions(-) delete mode 100644 asm/non_matching/manager2F/Manager2F_Main.inc delete mode 100644 asm/non_matching/manager2F/sub_0805D470.inc delete mode 100644 asm/non_matching/manager35/Manager35_Main.inc delete mode 100644 asm/non_matching/manager35/sub_0805DC9C.inc delete mode 100644 asm/non_matching/manager35/sub_0805DCC8.inc delete mode 100644 asm/non_matching/manager35/sub_0805DD24.inc delete mode 100644 asm/non_matching/manager35/sub_0805DD68.inc diff --git a/asm/non_matching/manager2F/Manager2F_Main.inc b/asm/non_matching/manager2F/Manager2F_Main.inc deleted file mode 100644 index 01d9f8d9..00000000 --- a/asm/non_matching/manager2F/Manager2F_Main.inc +++ /dev/null @@ -1,77 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - cmp r4, #0 - bne _0805D3F4 - ldr r0, _0805D3E8 @ =gArea - ldr r1, _0805D3EC @ =0x0000088C - adds r0, r0, r1 - ldr r0, [r0] - ldr r1, _0805D3F0 @ =sub_0805D470 - cmp r0, r1 - beq _0805D45E - movs r0, #0 - bl _call_via_r1 - b _0805D45E - .align 2, 0 -_0805D3E8: .4byte gArea -_0805D3EC: .4byte 0x0000088C -_0805D3F0: .4byte sub_0805D470 -_0805D3F4: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805D43A - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - ldr r0, _0805D428 @ =gArea - ldr r2, _0805D42C @ =0x0000088C - adds r0, r0, r2 - ldr r0, [r0] - cmp r0, #0 - bne _0805D434 - ldr r1, _0805D430 @ =sub_0805D470 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 - b _0805D45E - .align 2, 0 -_0805D428: .4byte gArea -_0805D42C: .4byte 0x0000088C -_0805D430: .4byte sub_0805D470 -_0805D434: - bl DeleteThisEntity - b _0805D45E -_0805D43A: - ldr r1, _0805D460 @ =gRoomControls - ldr r0, [r1, #0x28] - ldr r3, _0805D464 @ =0xFFFFC000 - adds r0, r0, r3 - str r0, [r1, #0x28] - ldr r0, [r1, #0x2c] - ldr r2, _0805D468 @ =0xFFFFE000 - adds r0, r0, r2 - str r0, [r1, #0x2c] - ldr r2, _0805D46C @ =gScreen - ldrh r0, [r1, #0x2a] - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] -_0805D45E: - pop {r4, pc} - .align 2, 0 -_0805D460: .4byte gRoomControls -_0805D464: .4byte 0xFFFFC000 -_0805D468: .4byte 0xFFFFE000 -_0805D46C: .4byte gScreen - .syntax divided diff --git a/asm/non_matching/manager2F/sub_0805D470.inc b/asm/non_matching/manager2F/sub_0805D470.inc deleted file mode 100644 index 9417a56e..00000000 --- a/asm/non_matching/manager2F/sub_0805D470.inc +++ /dev/null @@ -1,28 +0,0 @@ - .syntax unified - push {lr} - movs r0, #0x4c - bl LoadGfxGroup - ldr r2, _0805D4A0 @ =gScreen - ldr r0, _0805D4A4 @ =0x00001E07 - strh r0, [r2, #0x2c] - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _0805D4A8 @ =gRoomControls - ldrh r0, [r1, #0x2a] - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] - pop {pc} - .align 2, 0 -_0805D4A0: .4byte gScreen -_0805D4A4: .4byte 0x00001E07 -_0805D4A8: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager35/Manager35_Main.inc b/asm/non_matching/manager35/Manager35_Main.inc deleted file mode 100644 index 5e14ae76..00000000 --- a/asm/non_matching/manager35/Manager35_Main.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805DC98 @ =gUnk_08108D98 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805DC98: .4byte gUnk_08108D98 - .syntax divided diff --git a/asm/non_matching/manager35/sub_0805DC9C.inc b/asm/non_matching/manager35/sub_0805DC9C.inc deleted file mode 100644 index 9b0f22ac..00000000 --- a/asm/non_matching/manager35/sub_0805DC9C.inc +++ /dev/null @@ -1,21 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _0805DCAE - bl DeleteThisEntity -_0805DCAE: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805DCC2 - ldrh r0, [r4, #0x3c] - bl SetFlag - bl DeleteThisEntity -_0805DCC2: - movs r0, #1 - strb r0, [r4, #0xc] - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/manager35/sub_0805DCC8.inc b/asm/non_matching/manager35/sub_0805DCC8.inc deleted file mode 100644 index a6463901..00000000 --- a/asm/non_matching/manager35/sub_0805DCC8.inc +++ /dev/null @@ -1,47 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805DD1E - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x35 - ldrb r0, [r0] - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805DCEC - movs r0, #0x1e - strb r0, [r4, #0xe] -_0805DCEC: - ldr r5, _0805DD20 @ =gRoomControls - ldr r0, [r5, #0x30] - str r0, [r4, #0x14] - movs r0, #0x69 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _0805DD1E - ldrh r0, [r5, #6] - ldrh r2, [r4, #0x38] - adds r0, r0, r2 - strh r0, [r1, #0x2e] - ldrh r0, [r5, #8] - ldrh r2, [r4, #0x3a] - adds r0, r0, r2 - strh r0, [r1, #0x32] - str r1, [r4, #0x18] - str r1, [r5, #0x30] - adds r0, r1, #0 - movs r1, #0x1e - bl sub_0805E4E0 -_0805DD1E: - pop {r4, r5, pc} - .align 2, 0 -_0805DD20: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager35/sub_0805DD24.inc b/asm/non_matching/manager35/sub_0805DD24.inc deleted file mode 100644 index ddac4697..00000000 --- a/asm/non_matching/manager35/sub_0805DD24.inc +++ /dev/null @@ -1,34 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - movs r0, #0 - movs r1, #8 - bl sub_0805E4E0 - ldr r0, _0805DD64 @ =gRoomControls - ldrb r1, [r0, #0xf] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _0805DD60 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805DD60 - movs r0, #3 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3c] - bl SetFlag - adds r1, r4, #0 - adds r1, #0x36 - ldrb r0, [r1] - cmp r0, #0 - bne _0805DD60 - movs r0, #1 - strb r0, [r1] -_0805DD60: - pop {r4, pc} - .align 2, 0 -_0805DD64: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager35/sub_0805DD68.inc b/asm/non_matching/manager35/sub_0805DD68.inc deleted file mode 100644 index c9e2894d..00000000 --- a/asm/non_matching/manager35/sub_0805DD68.inc +++ /dev/null @@ -1,40 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - movs r0, #0 - movs r1, #8 - bl sub_0805E4E0 - adds r1, r4, #0 - adds r1, #0x36 - ldrb r0, [r1] - cmp r0, #0 - beq _0805DD94 - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805DDAE - ldr r1, _0805DD90 @ =gRoomControls - ldr r0, [r4, #0x14] - str r0, [r1, #0x30] - b _0805DDAE - .align 2, 0 -_0805DD90: .4byte gRoomControls -_0805DD94: - ldr r0, _0805DDB0 @ =gRoomControls - ldrb r1, [r0, #0xf] - movs r0, #4 - ands r0, r1 - cmp r0, #0 - bne _0805DDAE - ldr r0, [r4, #0x18] - cmp r0, #0 - beq _0805DDAA - bl DeleteEntity -_0805DDAA: - bl DeleteThisEntity -_0805DDAE: - pop {r4, pc} - .align 2, 0 -_0805DDB0: .4byte gRoomControls - .syntax divided diff --git a/include/functions.h b/include/functions.h index 15e0d175..0f8645d6 100644 --- a/include/functions.h +++ b/include/functions.h @@ -267,6 +267,7 @@ extern void sub_0805EEB4(u8*, u32); extern void sub_08056BDC(u32); extern void sub_08056F88(u32, u32); extern void sub_0805F8E4(u32 r0, WStruct* r1); +extern void DoExitTransition(ScreenTransitionData*); extern Entity* sub_08077C94(ItemBehavior*, u32); extern Entity* sub_08077C0C(ItemBehavior*, u32); @@ -280,5 +281,4 @@ extern bool32 sub_08077EFC(ItemBehavior*); extern void sub_08078E84(Entity*, Entity*); extern void sub_080042D0(Entity*, u32, u16); - #endif diff --git a/include/structures.h b/include/structures.h index 43455a79..20f83c3b 100644 --- a/include/structures.h +++ b/include/structures.h @@ -169,6 +169,9 @@ typedef struct { u8 unk3; u8 freezeTime; u8 unk9; + u8 unk_0xa; + u8 unk_0xb; + u16 unk_0xc; } EntityHandler; extern EntityHandler gUnk_03003DC0; diff --git a/src/code_0808091C.c b/src/code_0808091C.c index 0ea3dbcf..7d11a428 100644 --- a/src/code_0808091C.c +++ b/src/code_0808091C.c @@ -10,8 +10,6 @@ extern u32 gUnk_0200B650; extern u32 gUnk_02025EB0; extern u8 gUnk_02000070; -extern void DoExitTransition(ScreenTransitionData*); - void sub_080808D8(void) { gScreenTransition.transitionType = 0; } diff --git a/src/enemy/mazaalHead.c b/src/enemy/mazaalHead.c index 1139af36..1672b5c4 100644 --- a/src/enemy/mazaalHead.c +++ b/src/enemy/mazaalHead.c @@ -8,7 +8,6 @@ #include "functions.h" extern void UnloadOBJPalette(Entity*); -extern void DoExitTransition(ScreenTransitionData*); extern u8 gEntCount; diff --git a/src/enemy/mazaalMacro.c b/src/enemy/mazaalMacro.c index d3dbee34..0e32a810 100644 --- a/src/enemy/mazaalMacro.c +++ b/src/enemy/mazaalMacro.c @@ -6,7 +6,6 @@ #include "structures.h" #include "functions.h" -extern void DoExitTransition(ScreenTransitionData*); extern void sub_0807B600(u32); extern const u16 script_08012E20[]; diff --git a/src/enemy/wallMaster.c b/src/enemy/wallMaster.c index 394e8620..663c3612 100644 --- a/src/enemy/wallMaster.c +++ b/src/enemy/wallMaster.c @@ -6,9 +6,7 @@ extern void sub_08001328(Entity*); extern Entity* sub_08049DF4(u32); -extern void DoExitTransition(u32*); - -extern u32* gUnk_0813AB1C[]; +extern ScreenTransitionData* gUnk_0813AB1C[]; void sub_0802A78C(Entity*); void sub_0802A7D0(Entity*); diff --git a/src/enemy/wallMaster2.c b/src/enemy/wallMaster2.c index 7c488c30..a0c79d74 100644 --- a/src/enemy/wallMaster2.c +++ b/src/enemy/wallMaster2.c @@ -4,10 +4,9 @@ #include "functions.h" extern void sub_08001328(Entity*); -extern void DoExitTransition(u32*); extern Entity* gUnk_020000B0; -extern u32* gUnk_0813AB1C[]; +extern ScreenTransitionData* gUnk_0813AB1C[]; void sub_0802CF64(Entity*); void sub_0802CF8C(Entity*); diff --git a/src/manager/manager1.c b/src/manager/manager1.c index c0390149..200fc720 100644 --- a/src/manager/manager1.c +++ b/src/manager/manager1.c @@ -69,4 +69,4 @@ ASM_FUNC("asm/non_matching/manager1/nullsub_494.inc", void nullsub_494()) ASM_FUNC("asm/non_matching/manager1/sub_080573AC.inc", void sub_080573AC()) -ASM_FUNC("asm/non_matching/manager1/sub_08057450.inc", void sub_08057450()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager1/sub_08057450.inc", void sub_08057450()) diff --git a/src/manager/manager10.c b/src/manager/manager10.c index e7c0b944..e1b1b2a8 100644 --- a/src/manager/manager10.c +++ b/src/manager/manager10.c @@ -20,4 +20,4 @@ ASM_FUNC("asm/non_matching/manager10/sub_080598F8.inc", void sub_080598F8()) ASM_FUNC("asm/non_matching/manager10/sub_08059960.inc", void sub_08059960()) -ASM_FUNC("asm/non_matching/manager10/sub_08059994.inc", void sub_08059994()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager10/sub_08059994.inc", void sub_08059994()) diff --git a/src/manager/manager12.c b/src/manager/manager12.c index d69c5d19..15759fdd 100644 --- a/src/manager/manager12.c +++ b/src/manager/manager12.c @@ -12,4 +12,4 @@ ASM_FUNC("asm/non_matching/manager12/sub_08059C8C.inc", void sub_08059C8C()) ASM_FUNC("asm/non_matching/manager12/sub_08059CC0.inc", void sub_08059CC0()) -ASM_FUNC("asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc", void TryLoadPrologueHyruleTown()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc", void TryLoadPrologueHyruleTown()) diff --git a/src/manager/manager13.c b/src/manager/manager13.c index cd151e5a..acfe8b48 100644 --- a/src/manager/manager13.c +++ b/src/manager/manager13.c @@ -1,3 +1,3 @@ #include "manager.h" -ASM_FUNC("asm/non_matching/manager13/Manager13_Main.inc", void Manager13_Main()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager13/Manager13_Main.inc", void Manager13_Main()) diff --git a/src/manager/manager14.c b/src/manager/manager14.c index eb3d820c..bb7388ef 100644 --- a/src/manager/manager14.c +++ b/src/manager/manager14.c @@ -22,4 +22,4 @@ ASM_FUNC("asm/non_matching/manager14/sub_0805A1D8.inc", void sub_0805A1D8()) ASM_FUNC("asm/non_matching/manager14/nullsub_495.inc", void nullsub_495()) -ASM_FUNC("asm/non_matching/manager14/sub_0805A25C.inc", void sub_0805A25C()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager14/sub_0805A25C.inc", void sub_0805A25C()) diff --git a/src/manager/manager16.c b/src/manager/manager16.c index 1436b67b..23292b39 100644 --- a/src/manager/manager16.c +++ b/src/manager/manager16.c @@ -3,4 +3,4 @@ ASM_FUNC("asm/non_matching/manager16/Manager16_Main.inc", void Manager16_Main()) -ASM_FUNC("asm/non_matching/manager16/sub_0805ACC0.inc", void sub_0805ACC0()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager16/sub_0805ACC0.inc", void sub_0805ACC0()) diff --git a/src/manager/manager17.c b/src/manager/manager17.c index 1722da42..d19440b0 100644 --- a/src/manager/manager17.c +++ b/src/manager/manager17.c @@ -16,10 +16,8 @@ typedef struct { extern void (*const gUnk_08108654[])(Manager17*); - void sub_0805AD80(Manager17*); - void Manager17_Main(Manager17* manager) { gUnk_08108654[manager->manager.action](manager); } diff --git a/src/manager/manager18.c b/src/manager/manager18.c index 4dd08c6d..98e3cf57 100644 --- a/src/manager/manager18.c +++ b/src/manager/manager18.c @@ -4,4 +4,4 @@ ASM_FUNC("asm/non_matching/manager18/Manager18_Main.inc", void Manager18_Main()) ASM_FUNC("asm/non_matching/manager18/sub_0805AEDC.inc", void sub_0805AEDC()) -ASM_FUNC("asm/non_matching/manager18/sub_0805AF3C.inc", void sub_0805AF3C()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager18/sub_0805AF3C.inc", void sub_0805AF3C()) diff --git a/src/manager/manager19.c b/src/manager/manager19.c index b5586cf8..fa0f1912 100644 --- a/src/manager/manager19.c +++ b/src/manager/manager19.c @@ -9,7 +9,7 @@ void sub_0805AFFC(Manager*); void Manager19_Main(Manager* this) { if (this == NULL) { if ((void*)gArea.unk3 != sub_0805AFFC) { - sub_0805AFFC(this); + sub_0805AFFC(this); } } else { if (this->action == 0) { @@ -23,7 +23,7 @@ void Manager19_Main(Manager* this) { } } else { gRoomControls.bg3OffsetX.WORD = gRoomControls.bg3OffsetX.WORD - 0x2000; - gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI ; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; } } @@ -34,4 +34,4 @@ void sub_0805AFFC(Manager* this) { gScreen.lcd.displayControl |= 0x800; gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; -} \ No newline at end of file +} diff --git a/src/manager/manager1B.c b/src/manager/manager1B.c index 79cb5f45..e04dca81 100644 --- a/src/manager/manager1B.c +++ b/src/manager/manager1B.c @@ -9,4 +9,4 @@ ASM_FUNC("asm/non_matching/manager1B/sub_0805B474.inc", void sub_0805B474()) ASM_FUNC("asm/non_matching/manager1B/sub_0805B4B4.inc", void sub_0805B4B4()) -ASM_FUNC("asm/non_matching/manager1B/sub_0805B4D0.inc", void sub_0805B4D0()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager1B/sub_0805B4D0.inc", void sub_0805B4D0()) diff --git a/src/manager/manager1D.c b/src/manager/manager1D.c index 2e52aaf6..6d1a850b 100644 --- a/src/manager/manager1D.c +++ b/src/manager/manager1D.c @@ -23,18 +23,18 @@ void sub_0805B5E0(Manager* this) { default: gScreen.affine.bg3yOffset = 0; gScreen.affine.bg3xOffset = 0; - break; + break; case 1: gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; - break; + break; } } void sub_0805B638(Manager* this) { if (this->unk_0a == 1) { gRoomControls.bg3OffsetX.WORD = gRoomControls.bg3OffsetX.WORD + 0x2000; - gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI ; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; } -} \ No newline at end of file +} diff --git a/src/manager/manager1F.c b/src/manager/manager1F.c index 08fd71e8..1ad3135e 100644 --- a/src/manager/manager1F.c +++ b/src/manager/manager1F.c @@ -28,8 +28,7 @@ void sub_0805B70C(Manager1F* this) { this->manager.unk_0b = 1; } this->manager.action = 1; - this->field_0x38 = - (this->field_0x38 >> 4 & 0x3fU) | (((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6); + this->field_0x38 = (this->field_0x38 >> 4 & 0x3fU) | (((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6); sub_0805B778(this); } @@ -48,6 +47,5 @@ void sub_0805B744(Manager1F* this) { } void sub_0805B778(Manager1F* this) { - SetTileType(gUnk_08108C9C[this->manager.unk_0a * 2 + this->manager.unk_0b], - this->field_0x38, this->field_0x36); -} \ No newline at end of file + SetTileType(gUnk_08108C9C[this->manager.unk_0a * 2 + this->manager.unk_0b], this->field_0x38, this->field_0x36); +} diff --git a/src/manager/manager2.c b/src/manager/manager2.c index f634c42d..1198575c 100644 --- a/src/manager/manager2.c +++ b/src/manager/manager2.c @@ -22,4 +22,4 @@ ASM_FUNC("asm/non_matching/manager2/sub_080575C8.inc", void sub_080575C8(u32 par ASM_FUNC("asm/non_matching/manager2/sub_08057688.inc", void sub_08057688()) -ASM_FUNC("asm/non_matching/manager2/sub_080576A0.inc", void sub_080576A0()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager2/sub_080576A0.inc", void sub_080576A0()) diff --git a/src/manager/manager22.c b/src/manager/manager22.c index b5524f42..ba174d0a 100644 --- a/src/manager/manager22.c +++ b/src/manager/manager22.c @@ -15,4 +15,4 @@ ASM_FUNC("asm/non_matching/manager22/sub_0805BBBC.inc", void sub_0805BBBC()) ASM_FUNC("asm/non_matching/manager22/sub_0805BC04.inc", void sub_0805BC04()) -ASM_FUNC("asm/non_matching/manager22/sub_0805BC4C.inc", void sub_0805BC4C()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager22/sub_0805BC4C.inc", void sub_0805BC4C()) diff --git a/src/manager/manager24.c b/src/manager/manager24.c index b0d78f36..88a5a8e9 100644 --- a/src/manager/manager24.c +++ b/src/manager/manager24.c @@ -305,7 +305,6 @@ void sub_0805C4E0(u32 pos, u32 layer) { } } -u32 sub_0805C608(void) -{ - return gUnk_08108CFC[gArea.regret]; +u32 sub_0805C608(void) { + return gUnk_08108CFC[gArea.regret]; } diff --git a/src/manager/manager2A.c b/src/manager/manager2A.c index 048df4cb..f82aabd7 100644 --- a/src/manager/manager2A.c +++ b/src/manager/manager2A.c @@ -9,7 +9,7 @@ typedef struct { u16 flag; u16 tilePos; u16 tileType; // If the tile type at tilePos, tileLayer is tileType, set the local flag. -} Manager2A_unk; // TODO result of GetCurrentRoomProperty(3)? +} Manager2A_unk; // TODO result of GetCurrentRoomProperty(3)? void sub_0805CFF0(Manager2A_unk*); diff --git a/src/manager/manager2B.c b/src/manager/manager2B.c index 3471a5bc..b3601007 100644 --- a/src/manager/manager2B.c +++ b/src/manager/manager2B.c @@ -1,13 +1,13 @@ #include "manager.h" #include "flags.h" -#include "room.h" +#include "room.h" #include "functions.h" #include "object.h" #include "audio.h" typedef struct { Manager manager; - Entity * field_0x20; + Entity* field_0x20; u8 field_0x24; u8 field_0x25; u8 field_0x26; @@ -37,8 +37,6 @@ typedef struct { u16 field_0x3e; } Manager2B; - - extern void (*const gUnk_08108D30[])(Entity*); extern u8 gEntCount; @@ -62,7 +60,7 @@ NONMATCH("asm/non_matching/manager2B/sub_0805D02C.inc", void sub_0805D02C(Manage objectData = GetCurrentRoomProperty(this->manager.unk_0a); counter = 0; createdObjects = &this->field_0x20; - while(counter < 4) { + while (counter < 4) { object = CreateObject(OBJECT_A0, objectData[2], counter); object->x.HALF.HI = objectData[0] + gRoomControls.roomOriginX; object->y.HALF.HI = objectData[1] + gRoomControls.roomOriginY; @@ -72,7 +70,7 @@ NONMATCH("asm/non_matching/manager2B/sub_0805D02C.inc", void sub_0805D02C(Manage counter += 1; objectData += 3; createdObjects += 1; - } + } this->manager.action = 1; this->manager.unk_0f = 0x3c; this->field_0x36 = 0; @@ -106,7 +104,7 @@ NONMATCH("asm/non_matching/manager2B/sub_0805D11C.inc", void sub_0805D11C(Manage u32 counter; counter = 0; - createdObjects = &this->field_0x20; + createdObjects = &this->field_0x20; while (counter < 4) { entity = *createdObjects; *createdObjects = NULL; diff --git a/src/manager/manager2C.c b/src/manager/manager2C.c index ba66443d..3c578661 100644 --- a/src/manager/manager2C.c +++ b/src/manager/manager2C.c @@ -18,12 +18,12 @@ void Manager2C_Main(Manager2C* manager) { manager->manager.action = 1; manager->field_0x3a = 0; } - if (((CheckPlayerInRegion(manager->field_0x38, manager->field_0x3a, 0x14, 0x40) != 0) && - (((gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) +gPlayerEntity.height.HALF.HI) < 0)) && + if (((CheckPlayerInRegion(manager->field_0x38, manager->field_0x3a, 0x14, 0x40) != 0) && + (((gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) + gPlayerEntity.height.HALF.HI) < 0)) && (gRoomControls.roomScrollY == gRoomControls.roomOriginY)) { MemClear(&gScreenTransition.areaID, 0x20); gScreenTransition.transitioningOut = 1; - gScreenTransition.transitionType = 0; + gScreenTransition.transitionType = 0; gScreenTransition.field_0xf = 0xb; gScreenTransition.areaID = manager->manager.unk_0b; gScreenTransition.roomID = manager->manager.unk_0e; diff --git a/src/manager/manager2F.c b/src/manager/manager2F.c index 4d61dc37..68e41338 100644 --- a/src/manager/manager2F.c +++ b/src/manager/manager2F.c @@ -1,6 +1,40 @@ #include "manager.h" +#include "area.h" +#include "room.h" +#include "screen.h" +#include "functions.h" -ASM_FUNC("asm/non_matching/manager2F/Manager2F_Main.inc", void Manager2F_Main()) +void sub_0805D470(Manager*); -ASM_FUNC("asm/non_matching/manager2F/sub_0805D470.inc", void sub_0805D470()) \ No newline at end of file +void Manager2F_Main(Manager* this) { + if (this == NULL) { + if ((void*)gArea.unk3 != sub_0805D470) { + sub_0805D470(NULL); + } + } else { + if (this->action == 0) { + this->action = 1; + this->unk_10 |= 0x20; + sub_0805E3A0(this, 6); + if (gArea.unk3 == 0) { + sub_08052D74(this, sub_0805D470, NULL); + } else { + DeleteThisEntity(); + } + } else { + gRoomControls.bg3OffsetX.WORD -= 0x4000; + gRoomControls.bg3OffsetY.WORD -= 0x2000; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; + } + } +} + +void sub_0805D470(Manager* this) { + LoadGfxGroup(0x4c); + gScreen.affine.bg3Control = 0x1e07; + gScreen.lcd.displayControl |= 0x800; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; +} diff --git a/src/manager/manager31.c b/src/manager/manager31.c index 2186974b..1dfa0b75 100644 --- a/src/manager/manager31.c +++ b/src/manager/manager31.c @@ -1,4 +1,4 @@ #include "manager.h" -ASM_FUNC("asm/non_matching/manager31/Manager31_Main.inc", void Manager31_Main()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager31/Manager31_Main.inc", void Manager31_Main()) diff --git a/src/manager/manager32.c b/src/manager/manager32.c index ef35a608..4461617e 100644 --- a/src/manager/manager32.c +++ b/src/manager/manager32.c @@ -14,4 +14,4 @@ ASM_FUNC("asm/non_matching/manager32/sub_0805D9D8.inc", void sub_0805D9D8()) ASM_FUNC("asm/non_matching/manager32/sub_0805DA08.inc", void sub_0805DA08()) -ASM_FUNC("asm/non_matching/manager32/sub_0805DA90.inc", void sub_0805DA90()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager32/sub_0805DA90.inc", void sub_0805DA90()) diff --git a/src/manager/manager33.c b/src/manager/manager33.c index 25d630d6..df2feeb7 100644 --- a/src/manager/manager33.c +++ b/src/manager/manager33.c @@ -1,3 +1,3 @@ #include "manager.h" -ASM_FUNC("asm/non_matching/manager33/Manager33_Main.inc", void Manager33_Main(Manager* this)) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager33/Manager33_Main.inc", void Manager33_Main(Manager* this)) diff --git a/src/manager/manager35.c b/src/manager/manager35.c index 498af777..0afd3b02 100644 --- a/src/manager/manager35.c +++ b/src/manager/manager35.c @@ -1,11 +1,84 @@ #include "manager.h" +#include "flags.h" +#include "room.h" +#include "object.h" -ASM_FUNC("asm/non_matching/manager35/Manager35_Main.inc", void Manager35_Main()) +typedef struct { + Manager manager; + u8 field_0x20[0x15]; + u8 field_0x35; + u8 field_0x36; + u8 field_0x37; + s16 field_0x38; + s16 field_0x3a; + u16 field_0x3c; + u16 field_0x3e; +} Manager35; -ASM_FUNC("asm/non_matching/manager35/sub_0805DC9C.inc", void sub_0805DC9C()) +extern void (*const gUnk_08108D98[])(Manager35*); -ASM_FUNC("asm/non_matching/manager35/sub_0805DCC8.inc", void sub_0805DCC8()) +extern void sub_0805E4E0(Entity*, u32); -ASM_FUNC("asm/non_matching/manager35/sub_0805DD24.inc", void sub_0805DD24()) +void Manager35_Main(Manager35* this) { + gUnk_08108D98[this->manager.action](this); +} -ASM_FUNC("asm/non_matching/manager35/sub_0805DD68.inc", void sub_0805DD68()) \ No newline at end of file +void sub_0805DC9C(Manager35* this) { + if (CheckFlags(this->field_0x3c) != 0) { + DeleteThisEntity(); + } + if (CheckFlags(this->field_0x3e) != 0) { + SetFlag(this->field_0x3c); + DeleteThisEntity(); + } + this->manager.action = 1; +} + +void sub_0805DCC8(Manager35* this) { + Entity* object; + + if (CheckFlags(this->field_0x3e) != 0) { + this->manager.action = 2; + this->manager.unk_0e = this->field_0x35; + if (this->manager.unk_0e == 0) { + this->manager.unk_0e = 0x1e; + } + this->manager.parent = (Manager*)gRoomControls.cameraTarget; + object = CreateObject(OBJECT_69, 0, 0); + if (object != NULL) { + object->x.HALF.HI = this->field_0x38 + gRoomControls.roomOriginX; + object->y.HALF.HI = this->field_0x3a + gRoomControls.roomOriginY; + *(Entity**)this->manager.unk_18 = object; + gRoomControls.cameraTarget = object; + sub_0805E4E0(object, 0x1e); + } + } +} + +void sub_0805DD24(Manager35* this) { + sub_0805E4E0(0, 8); + if ((gRoomControls.unk6 & 4) == 0 && --this->manager.unk_0e == 0) { + this->manager.action = 3; + SetFlag(this->field_0x3c); + if (this->field_0x36 == 0) { + this->field_0x36 = 1; + } + } +} + +void sub_0805DD68(Manager35* this) { + sub_0805E4E0(0, 8); + if (this->field_0x36 != 0) { + if (--this->field_0x36 == 0) { + gRoomControls.cameraTarget = (Entity*)this->manager.parent; + } + } else { + if ((gRoomControls.unk6 & 4) == 0) { + Entity* entity = *(Entity**)this->manager.unk_18; + if (entity != NULL) { + DeleteEntity(entity); + } + DeleteThisEntity(); + } + } +} diff --git a/src/manager/manager37.c b/src/manager/manager37.c index 635bd5a5..b9b8cdcc 100644 --- a/src/manager/manager37.c +++ b/src/manager/manager37.c @@ -20,4 +20,4 @@ ASM_FUNC("asm/non_matching/manager37/sub_0805E000.inc", void sub_0805E000()) ASM_FUNC("asm/non_matching/manager37/sub_0805E078.inc", void sub_0805E078()) -ASM_FUNC("asm/non_matching/manager37/sub_0805E094.inc", void sub_0805E094()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager37/sub_0805E094.inc", void sub_0805E094()) diff --git a/src/manager/manager6.c b/src/manager/manager6.c index 0f5637cb..7c7f3cfb 100644 --- a/src/manager/manager6.c +++ b/src/manager/manager6.c @@ -3,8 +3,6 @@ #include "manager.h" #include "functions.h" -extern void DoExitTransition(void*); - void Manager6_Main(Manager6* this) { u32 tmp; Manager6WarpData* i; diff --git a/src/manager/managerD.c b/src/manager/managerD.c index dcd31bb5..376fa94f 100644 --- a/src/manager/managerD.c +++ b/src/manager/managerD.c @@ -32,7 +32,6 @@ typedef struct { u16 field_0x3e; } ManagerD; - extern void (*const gUnk_08108308[])(ManagerD*); extern u16* GetLayerByIndex(u32); @@ -52,7 +51,6 @@ void sub_08058DE8(ManagerD* this) { puVar3 = (this->field_0x38 + 2) + puVar2; this->field_0x30 = puVar3; this->field_0x28 = *puVar3; - } } diff --git a/src/manager/managerF.c b/src/manager/managerF.c index 65fa7757..3f99ad78 100644 --- a/src/manager/managerF.c +++ b/src/manager/managerF.c @@ -46,4 +46,4 @@ ASM_FUNC("asm/non_matching/managerF/sub_0805947C.inc", void sub_0805947C()) ASM_FUNC("asm/non_matching/managerF/sub_080594DC.inc", void sub_080594DC()) -ASM_FUNC("asm/non_matching/managerF/sub_08059548.inc", void sub_08059548()) \ No newline at end of file +ASM_FUNC("asm/non_matching/managerF/sub_08059548.inc", void sub_08059548()) diff --git a/src/npc/emma.c b/src/npc/emma.c index f7a8577a..cdbfe8e3 100644 --- a/src/npc/emma.c +++ b/src/npc/emma.c @@ -3,11 +3,9 @@ #include "script.h" #include "functions.h" -extern u32 gUnk_0813AD10; -extern u32 gUnk_0813AD24; -extern u32 gUnk_0813AD38; - -extern void DoExitTransition(u32*); +extern ScreenTransitionData gUnk_0813AD10; +extern ScreenTransitionData gUnk_0813AD24; +extern ScreenTransitionData gUnk_0813AD38; void Emma(Entity* this) { if (this->action == 0) { diff --git a/src/npc/picolyteBottle.c b/src/npc/picolyteBottle.c index 720cdf61..4dd3dcaf 100644 --- a/src/npc/picolyteBottle.c +++ b/src/npc/picolyteBottle.c @@ -4,7 +4,6 @@ #include "functions.h" #include "textbox.h" -extern void DoExitTransition(ScreenTransitionData*); extern ScreenTransitionData gUnk_0813AD4C; void sub_0806E014(Entity* this); diff --git a/src/npc/simon.c b/src/npc/simon.c index f5f1aad7..740ffa7e 100644 --- a/src/npc/simon.c +++ b/src/npc/simon.c @@ -12,10 +12,8 @@ typedef struct { u32 unk; } struct_0806C2A0; -extern void DoExitTransition(void*); - -extern void gUnk_0813AD60; -extern void gUnk_0813AD74; +extern ScreenTransitionData gUnk_0813AD60; +extern ScreenTransitionData gUnk_0813AD74; void Simon(Entity* this) { if (this->action == 0) { diff --git a/src/object/book.c b/src/object/book.c index ee53ef99..b51c4716 100644 --- a/src/object/book.c +++ b/src/object/book.c @@ -232,4 +232,4 @@ void (*const BookActionFuncs[])(Entity*) = { sub_0809B3C4, sub_0809B4A8, sub_0809B524, sub_0809B56C, sub_0809B5B4, sub_0809B5EC, }; -const s8 gUnk_08123D94[] = { -22, -20, -20, -20 }; \ No newline at end of file +const s8 gUnk_08123D94[] = { -22, -20, -20, -20 }; diff --git a/src/object/minishSizedEntrance.c b/src/object/minishSizedEntrance.c index 03467f41..ce5ab316 100644 --- a/src/object/minishSizedEntrance.c +++ b/src/object/minishSizedEntrance.c @@ -4,8 +4,6 @@ #include "player.h" #include "functions.h" -extern void DoExitTransition(void*); - extern void (*const gUnk_08122254[])(Entity*); extern u16 gUnk_0812225C[]; @@ -35,6 +33,6 @@ void sub_08090F00(Entity* this) { } if ((gPlayerState.flags.all & 0x80) && sub_080041A0(this, &gPlayerEntity, 4, 4) && (gPlayerEntity.height.HALF.HI == 0) && (((u16)gPlayerState.field_0x90.HALF.LO) & gUnk_0812225C[this->type2])) { - DoExitTransition((Entity*)GetCurrentRoomProperty(this->actionDelay)); + DoExitTransition(GetCurrentRoomProperty(this->actionDelay)); } } diff --git a/src/player.c b/src/player.c index 21b3c234..8c3612f1 100644 --- a/src/player.c +++ b/src/player.c @@ -31,7 +31,6 @@ extern void sub_0806F948(); extern void sub_08077698(); extern void sub_0805E544(); extern void sub_080717F8(); -extern void DoExitTransition(); extern void UnfreezeTime(); extern void sub_08071A6C(); extern void sub_08052BB8(); From fe1e97f8ef20b4a4be883c14caade2831d381f1a Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 18 Sep 2021 10:35:50 +0200 Subject: [PATCH 28/64] Decompile manager1B --- asm/non_matching/manager1B/Manager1B_Main.inc | 72 ----------------- asm/non_matching/manager1B/sub_0805B448.inc | 23 ------ asm/non_matching/manager1B/sub_0805B474.inc | 31 ------- asm/non_matching/manager1B/sub_0805B4B4.inc | 14 ---- asm/non_matching/manager1B/sub_0805B4D0.inc | 51 ------------ src/manager/manager1B.c | 81 +++++++++++++++++-- src/manager/manager2B.c | 2 +- 7 files changed, 77 insertions(+), 197 deletions(-) delete mode 100644 asm/non_matching/manager1B/Manager1B_Main.inc delete mode 100644 asm/non_matching/manager1B/sub_0805B448.inc delete mode 100644 asm/non_matching/manager1B/sub_0805B474.inc delete mode 100644 asm/non_matching/manager1B/sub_0805B4B4.inc delete mode 100644 asm/non_matching/manager1B/sub_0805B4D0.inc diff --git a/asm/non_matching/manager1B/Manager1B_Main.inc b/asm/non_matching/manager1B/Manager1B_Main.inc deleted file mode 100644 index 6a4b50b7..00000000 --- a/asm/non_matching/manager1B/Manager1B_Main.inc +++ /dev/null @@ -1,72 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - bl EntityHasDuplicateID - cmp r0, #0 - beq _0805B3C4 - bl DeleteThisEntity -_0805B3C4: - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - ldr r1, _0805B438 @ =gUnk_08108C28 - adds r5, r0, r1 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805B41E - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _0805B3F6 - ldr r1, _0805B43C @ =sub_0805B4B4 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 -_0805B3F6: - ldr r0, _0805B440 @ =gRoomControls - ldrh r1, [r0, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - subs r1, r0, r1 - cmp r1, #0 - bge _0805B406 - movs r1, #0 -_0805B406: - movs r0, #2 - ldrsb r0, [r5, r0] - adds r0, r1, r0 - str r0, [r4, #0x20] - ldr r1, _0805B444 @ =gUnk_08108C54 - ldrb r0, [r5, #1] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 -_0805B41E: - ldr r0, _0805B440 @ =gRoomControls - ldrh r0, [r0] - cmp r0, #0 - bne _0805B436 - ldr r0, _0805B444 @ =gUnk_08108C54 - ldrb r1, [r5, #1] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0805B436: - pop {r4, r5, pc} - .align 2, 0 -_0805B438: .4byte gUnk_08108C28 -_0805B43C: .4byte sub_0805B4B4 -_0805B440: .4byte gRoomControls -_0805B444: .4byte gUnk_08108C54 - .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B448.inc b/asm/non_matching/manager1B/sub_0805B448.inc deleted file mode 100644 index 167281fe..00000000 --- a/asm/non_matching/manager1B/sub_0805B448.inc +++ /dev/null @@ -1,23 +0,0 @@ - .syntax unified - push {r4, lr} - ldr r4, _0805B46C @ =gScreen - ldr r3, _0805B470 @ =gRoomControls - movs r2, #0xa - ldrsh r1, [r3, r2] - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #2 - strh r1, [r4, #0x2e] - movs r2, #0xc - ldrsh r1, [r3, r2] - ldrh r2, [r3, #8] - subs r1, r1, r2 - asrs r1, r1, #1 - ldr r0, [r0, #0x20] - adds r0, r0, r1 - strh r0, [r4, #0x30] - pop {r4, pc} - .align 2, 0 -_0805B46C: .4byte gScreen -_0805B470: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B474.inc b/asm/non_matching/manager1B/sub_0805B474.inc deleted file mode 100644 index 59158767..00000000 --- a/asm/non_matching/manager1B/sub_0805B474.inc +++ /dev/null @@ -1,31 +0,0 @@ - .syntax unified - push {r4, r5, lr} - ldr r5, _0805B4A8 @ =gRoomControls - movs r0, #0xc - ldrsh r1, [r5, r0] - ldrh r4, [r5, #8] - subs r1, r1, r4 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #5 - ldrh r1, [r5, #0x20] - subs r1, #0xa0 - bl __divsi3 - ldr r2, _0805B4AC @ =gScreen - adds r4, r4, r0 - strh r4, [r2, #0x30] - ldrh r0, [r5, #0x1e] - ldr r1, _0805B4B0 @ =0xFFFFFF00 - adds r0, r0, r1 - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - ldrh r1, [r5, #0xa] - subs r1, r1, r0 - strh r1, [r2, #0x2e] - pop {r4, r5, pc} - .align 2, 0 -_0805B4A8: .4byte gRoomControls -_0805B4AC: .4byte gScreen -_0805B4B0: .4byte 0xFFFFFF00 - .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B4B4.inc b/asm/non_matching/manager1B/sub_0805B4B4.inc deleted file mode 100644 index b0e254c9..00000000 --- a/asm/non_matching/manager1B/sub_0805B4B4.inc +++ /dev/null @@ -1,14 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - bl sub_0805B4D0 - ldrb r0, [r4, #0xa] - cmp r0, #2 - bne _0805B4C8 - bl sub_0806D0F8 -_0805B4C8: - adds r0, r4, #0 - bl Manager1B_Main - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/manager1B/sub_0805B4D0.inc b/asm/non_matching/manager1B/sub_0805B4D0.inc deleted file mode 100644 index 8be13a26..00000000 --- a/asm/non_matching/manager1B/sub_0805B4D0.inc +++ /dev/null @@ -1,51 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _0805B528 @ =gUnk_08108C5C - adds r0, r5, r0 - ldrb r0, [r0] - bl LoadGfxGroup - ldr r4, _0805B52C @ =gScreen - ldr r0, _0805B530 @ =0x00001E07 - strh r0, [r4, #0x2c] - ldrh r1, [r4] - movs r2, #0x80 - lsls r2, r2, #4 - adds r0, r2, #0 - orrs r0, r1 - strh r0, [r4] - ldr r2, _0805B534 @ =gRoomControls - movs r1, #0xa - ldrsh r0, [r2, r1] - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #2 - strh r0, [r4, #0x2e] - movs r1, #0xc - ldrsh r0, [r2, r1] - ldrh r1, [r2, #8] - subs r0, r0, r1 - asrs r3, r0, #1 - ldrh r1, [r2, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - subs r2, r0, r1 - cmp r2, #0 - bge _0805B516 - movs r2, #0 -_0805B516: - ldr r0, _0805B538 @ =gUnk_08108C44 - lsls r1, r5, #1 - adds r1, r1, r0 - adds r0, r3, r2 - ldrh r1, [r1] - adds r0, r0, r1 - strh r0, [r4, #0x30] - pop {r4, r5, pc} - .align 2, 0 -_0805B528: .4byte gUnk_08108C5C -_0805B52C: .4byte gScreen -_0805B530: .4byte 0x00001E07 -_0805B534: .4byte gRoomControls -_0805B538: .4byte gUnk_08108C44 - .syntax divided diff --git a/src/manager/manager1B.c b/src/manager/manager1B.c index e04dca81..37cb856e 100644 --- a/src/manager/manager1B.c +++ b/src/manager/manager1B.c @@ -1,12 +1,83 @@ #include "manager.h" +#include "functions.h" +#include "screen.h" -ASM_FUNC("asm/non_matching/manager1B/Manager1B_Main.inc", void Manager1B_Main()) +typedef struct { + Manager manager; + u32 field_0x20; +} Manager1B; -ASM_FUNC("asm/non_matching/manager1B/sub_0805B448.inc", void sub_0805B448()) +extern u8 gUnk_08108C28[]; +extern void (*const gUnk_08108C54[])(Manager1B*); -ASM_FUNC("asm/non_matching/manager1B/sub_0805B474.inc", void sub_0805B474()) +void sub_0805B4B4(Manager1B*); -ASM_FUNC("asm/non_matching/manager1B/sub_0805B4B4.inc", void sub_0805B4B4()) +void sub_0806D0F8(void); // in bigGoron? -ASM_FUNC("asm/non_matching/manager1B/sub_0805B4D0.inc", void sub_0805B4D0()) +extern u8 gUnk_08108C5C[]; +extern u16 gUnk_08108C44[]; + +void Manager1B_Main(Manager1B* this) { + s32 iVar3; + u8* tmp; + + if (EntityHasDuplicateID((Entity*)this) != 0) { + DeleteThisEntity(); + } + tmp = gUnk_08108C28 + this->manager.unk_0a * 4; + if (this->manager.action == 0) { + this->manager.action = 1; + this->manager.unk_10 |= 0x20; + sub_0805E3A0(this, 6); + if (this->manager.unk_0a != 0) { + sub_08052D74(this, sub_0805B4B4, NULL); + } + iVar3 = 0x100 - (u32)gRoomControls.height; + if (iVar3 < 0) { + iVar3 = 0; + } + this->field_0x20 = iVar3 + (s8)tmp[2]; + gUnk_08108C54[tmp[1]](this); + } + if (gRoomControls.unk2 == 0) { + gUnk_08108C54[tmp[1]](this); + } +} + +void sub_0805B448(Manager1B* this) { + gScreen.affine.bg3xOffset = (gRoomControls.roomScrollX - gRoomControls.roomOriginX) >> 2; + gScreen.affine.bg3yOffset = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) >> 1) + this->field_0x20; +} + +void sub_0805B474(Manager1B* this) { + s32 tmp = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) * 0x60) / + (gRoomControls.height - 0xa0); + gScreen.affine.bg3yOffset = gRoomControls.roomOriginY + tmp; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX - ((gRoomControls.width - 0x100) / 2); +} + +void sub_0805B4B4(Manager1B* this) { + sub_0805B4D0(this->manager.unk_0a); + if (this->manager.unk_0a == 2) { + sub_0806D0F8(); + } + Manager1B_Main(this); +} + +void sub_0805B4D0(u32 param_1) { + s32 iVar1; + u32 uVar2; + + LoadGfxGroup(gUnk_08108C5C[param_1]); + gScreen.affine.bg3Control = 0x1e07; + gScreen.lcd.displayControl |= 0x800; + gScreen.affine.bg3xOffset = (gRoomControls.roomScrollX - gRoomControls.roomOriginX) >> 2; + + uVar2 = (gRoomControls.roomScrollY - gRoomControls.roomOriginY) >> 1; + iVar1 = 0x100 - gRoomControls.height; + if (iVar1 < 0) { + iVar1 = 0; + } + gScreen.affine.bg3yOffset = uVar2 + iVar1+gUnk_08108C44[param_1]; +} diff --git a/src/manager/manager2B.c b/src/manager/manager2B.c index b3601007..29cc7462 100644 --- a/src/manager/manager2B.c +++ b/src/manager/manager2B.c @@ -37,7 +37,7 @@ typedef struct { u16 field_0x3e; } Manager2B; -extern void (*const gUnk_08108D30[])(Entity*); +extern void (*const gUnk_08108D30[])(Manager2B*); extern u8 gEntCount; From 7a70c6568082e86b80ac1744b6410d90e08b341d Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 18 Sep 2021 11:30:41 +0200 Subject: [PATCH 29/64] Decompile manager33 --- asm/non_matching/manager33/Manager33_Main.inc | 85 ------------------- src/manager/manager33.c | 32 ++++++- 2 files changed, 31 insertions(+), 86 deletions(-) delete mode 100644 asm/non_matching/manager33/Manager33_Main.inc diff --git a/asm/non_matching/manager33/Manager33_Main.inc b/asm/non_matching/manager33/Manager33_Main.inc deleted file mode 100644 index 21b47bcd..00000000 --- a/asm/non_matching/manager33/Manager33_Main.inc +++ /dev/null @@ -1,85 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r2, r0, #0 - ldr r5, _0805DB4C @ =gRoomControls - ldrh r0, [r5, #6] - movs r1, #0xfc - lsls r1, r1, #1 - mov r8, r1 - add r0, r8 - ldr r3, _0805DB50 @ =gPlayerEntity - movs r4, #0x2e - ldrsh r1, [r3, r4] - subs r0, r0, r1 - adds r4, r0, #0 - adds r4, #0x10 - ldrh r0, [r5, #8] - movs r7, #0xa0 - lsls r7, r7, #1 - adds r0, r0, r7 - movs r6, #0x32 - ldrsh r1, [r3, r6] - subs r0, r0, r1 - adds r0, #0x10 - ldrb r6, [r2, #0xc] - cmp r6, #0 - bne _0805DB58 - cmp r4, #0x1f - bhi _0805DB88 - cmp r0, #0x1f - bhi _0805DB88 - movs r0, #0x36 - ldrsh r1, [r3, r0] - movs r0, #0x18 - rsbs r0, r0, #0 - cmp r1, r0 - bge _0805DB88 - ldr r0, _0805DB54 @ =gPlayerState - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #0x14 - bne _0805DB88 - adds r0, r6, #1 - strb r0, [r2, #0xc] - movs r0, #0x5a - strb r0, [r2, #0xe] - adds r0, #0xb0 - bl SoundReq - b _0805DB88 - .align 2, 0 -_0805DB4C: .4byte gRoomControls -_0805DB50: .4byte gPlayerEntity -_0805DB54: .4byte gPlayerState -_0805DB58: - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805DB88 - movs r0, #0x96 - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _0805DB84 - ldrh r0, [r5, #6] - add r0, r8 - strh r0, [r1, #0x2e] - ldrh r0, [r5, #8] - adds r0, r0, r7 - strh r0, [r1, #0x32] - ldr r0, _0805DB90 @ =0x0000FFE8 - strh r0, [r1, #0x36] -_0805DB84: - bl DeleteThisEntity -_0805DB88: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805DB90: .4byte 0x0000FFE8 - .syntax divided diff --git a/src/manager/manager33.c b/src/manager/manager33.c index df2feeb7..b284a1b5 100644 --- a/src/manager/manager33.c +++ b/src/manager/manager33.c @@ -1,3 +1,33 @@ #include "manager.h" +#include "room.h" +#include "player.h" +#include "audio.h" +#include "object.h" -ASM_FUNC("asm/non_matching/manager33/Manager33_Main.inc", void Manager33_Main(Manager* this)) +void Manager33_Main(Manager* this) { + RoomControls* roomControls = &gRoomControls; + u32 a = roomControls->roomOriginX + 0x1f8; + u32 x = (a - gPlayerEntity.x.HALF.HI) + 0x10; + u32 b = roomControls->roomOriginY + 0x140; + u32 y = (b - gPlayerEntity.y.HALF.HI) + 0x10; + if (this->action == 0) { + if (x < 0x20 && + y < 0x20 && + gPlayerEntity.height.HALF.HI < -0x18 && + gPlayerState.field_0xa8 == 0x14) { + this->action += 1; + this->unk_0e = 0x5a; + SoundReq(SFX_10A); + } + } else { + if (--this->unk_0e == 0) { + Entity* object = CreateObject(OBJECT_96, 1, 0); + if (object != NULL) { + object->x.HALF.HI = roomControls->roomOriginX + 0x1f8; + object->y.HALF.HI = roomControls->roomOriginY + 0x140; + object->height.HALF.HI = 0xffe8; + } + DeleteThisEntity(); + } + } +} From 1b122a05b6561a63d0942f39e9bcc8f6df5fbb2b Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 18 Sep 2021 12:26:19 +0200 Subject: [PATCH 30/64] Decompile manager13 --- asm/non_matching/manager13/Manager13_Main.inc | 89 ------------------- asm/non_matching/manager34/sub_0805DBF0.inc | 68 -------------- src/manager/manager13.c | 59 +++++++++++- src/manager/manager34.c | 33 ++++++- src/object/object1C.c | 10 ++- 5 files changed, 95 insertions(+), 164 deletions(-) delete mode 100644 asm/non_matching/manager13/Manager13_Main.inc delete mode 100644 asm/non_matching/manager34/sub_0805DBF0.inc diff --git a/asm/non_matching/manager13/Manager13_Main.inc b/asm/non_matching/manager13/Manager13_Main.inc deleted file mode 100644 index 40c9274e..00000000 --- a/asm/non_matching/manager13/Manager13_Main.inc +++ /dev/null @@ -1,89 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _08059DBE - movs r0, #1 - strb r0, [r5, #0xc] -_08059DBE: - ldr r1, _08059E4C @ =gRoomControls - ldrb r0, [r1, #4] - ldr r4, _08059E50 @ =gUnk_081084C8 - cmp r0, #0x15 - bne _08059DCA - ldr r4, _08059E54 @ =gUnk_08108530 -_08059DCA: - movs r7, #0 - ldrh r0, [r4] - cmp r0, #0 - beq _08059E46 - mov r8, r1 -_08059DD4: - movs r6, #1 - lsls r6, r7 - ldr r0, [r5, #0x20] - ands r0, r6 - cmp r0, #0 - bne _08059E38 - ldrh r0, [r4] - ldrh r1, [r4, #2] - movs r2, #0x10 - movs r3, #0x10 - bl CheckRectOnScreen - cmp r0, #0 - beq _08059E38 - ldrb r1, [r4, #4] - movs r0, #0x1c - adds r2, r7, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08059E38 - ldrb r0, [r4, #5] - strb r0, [r2, #0x1e] - ldrh r0, [r4] - mov r1, r8 - ldrh r1, [r1, #6] - adds r0, r0, r1 - strh r0, [r2, #0x2e] - ldrh r0, [r4, #2] - mov r3, r8 - ldrh r3, [r3, #8] - adds r0, r0, r3 - strh r0, [r2, #0x32] - str r5, [r2, #0x50] - ldrh r1, [r4] - adds r0, r2, #0 - adds r0, #0x80 - strh r1, [r0] - ldrh r0, [r4, #2] - adds r1, r2, #0 - adds r1, #0x82 - strh r0, [r1] - ldrb r1, [r4, #6] - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - ldr r0, [r5, #0x20] - orrs r0, r6 - str r0, [r5, #0x20] -_08059E38: - adds r4, #8 - adds r7, #1 - ldrh r0, [r4] - cmp r0, #0 - beq _08059E46 - cmp r7, #0x1f - bls _08059DD4 -_08059E46: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08059E4C: .4byte gRoomControls -_08059E50: .4byte gUnk_081084C8 -_08059E54: .4byte gUnk_08108530 - .syntax divided diff --git a/asm/non_matching/manager34/sub_0805DBF0.inc b/asm/non_matching/manager34/sub_0805DBF0.inc deleted file mode 100644 index 81092f35..00000000 --- a/asm/non_matching/manager34/sub_0805DBF0.inc +++ /dev/null @@ -1,68 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x20] - subs r1, r0, #1 - strh r1, [r4, #0x20] - lsls r0, r1, #0x10 - cmp r0, #0 - bne _0805DC06 - bl sub_0805DC70 - b _0805DC6C -_0805DC06: - lsls r0, r1, #0x10 - lsrs r1, r0, #0x10 - cmp r1, #0x78 - bne _0805DC18 - movs r0, #0x78 - movs r1, #2 - bl sub_08080964 - b _0805DC36 -_0805DC18: - cmp r1, #0xd2 - bne _0805DC26 - movs r0, #0x5a - movs r1, #1 - bl sub_08080964 - b _0805DC36 -_0805DC26: - movs r0, #0x96 - lsls r0, r0, #1 - cmp r1, r0 - bne _0805DC36 - movs r0, #0x5a - movs r1, #0 - bl sub_08080964 -_0805DC36: - ldrh r1, [r4, #0x20] - adds r0, r1, #0 - cmp r0, #0x77 - bhi _0805DC42 - movs r0, #0xf - b _0805DC48 -_0805DC42: - cmp r0, #0xd1 - bhi _0805DC58 - movs r0, #0x1f -_0805DC48: - ands r0, r1 - cmp r0, #0 - bne _0805DC6C - movs r0, #0x93 - lsls r0, r0, #1 - bl SoundReq - b _0805DC6C -_0805DC58: - cmp r0, #0xc7 - bhi _0805DC6C - movs r0, #0x3f - ands r0, r1 - cmp r0, #0 - bne _0805DC6C - movs r0, #0x93 - lsls r0, r0, #1 - bl SoundReq -_0805DC6C: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/src/manager/manager13.c b/src/manager/manager13.c index acfe8b48..5c733063 100644 --- a/src/manager/manager13.c +++ b/src/manager/manager13.c @@ -1,3 +1,60 @@ #include "manager.h" +#include "room.h" +#include "object.h" -ASM_FUNC("asm/non_matching/manager13/Manager13_Main.inc", void Manager13_Main()) +typedef struct{ + Manager manager; + u32 bitfield; +} Manager13; + +typedef struct { + u16 x; + u16 y; + u8 type; + u8 frameIndex; + u8 collisionLayer; + u8 _padding; +} SpawnData; + +extern SpawnData gUnk_081084C8[]; +extern SpawnData gUnk_08108530[]; + +extern u32 CheckRectOnScreen(u16, u16, u32, u32); + +/* +Keeps track in its bitfield of whether 0x10 x 0x10 rects at certain positions are on the screen. +Spawns OBJECT_1C objects that check this and unsets the value in the bitfield. +*/ +void Manager13_Main(Manager13* this) { + SpawnData* spawnData; + u32 type2; + + if (this->manager.action == 0) { + this->manager.action = 1; + } + if (gRoomControls.areaID == 0x15) { + spawnData = gUnk_08108530; + } else { + spawnData = gUnk_081084C8; + } + type2 = 0; + while ((spawnData->x != 0) && (type2 < 0x20)) { + u32 bitfieldFlag = 1 << type2; + if ((((this->bitfield & bitfieldFlag) == 0) && + (CheckRectOnScreen(spawnData->x, spawnData->y, 0x10, 0x10) != 0))) { + Entity* object = CreateObject(OBJECT_1C, spawnData->type, type2); + if (object != NULL) { + object->frameIndex = spawnData->frameIndex; + object->x.HALF.HI = gRoomControls.roomOriginX + spawnData->x; + object->y.HALF.HI = gRoomControls.roomOriginY + spawnData->y; + object->parent = (Entity*)this; + object->field_0x80.HWORD = spawnData->x; + object->field_0x82.HWORD = spawnData->y; + object->collisionLayer = spawnData->collisionLayer; + this->bitfield |= bitfieldFlag; + } + } + spawnData += 1; + type2 += 1; + } +} diff --git a/src/manager/manager34.c b/src/manager/manager34.c index df4ce8e6..be0c7921 100644 --- a/src/manager/manager34.c +++ b/src/manager/manager34.c @@ -1,6 +1,7 @@ #include "manager.h" #include "structures.h" #include "functions.h" +#include "audio.h" typedef struct { Manager manager; @@ -12,6 +13,8 @@ void sub_0805DBF0(Manager34*); extern ScreenTransitionData gUnk_0813AC48; +void sub_0805DC70(void); + void Manager34_Main(Manager34* this) { gUnk_08108D8C[this->manager.action](this); sub_0805DBF0(this); @@ -31,9 +34,35 @@ void sub_0805DBCC(Manager34* this) { void nullsub_498(Manager34* this) { } -ASM_FUNC("asm/non_matching/manager34/sub_0805DBF0.inc", void sub_0805DBF0(Manager34* this)) +void sub_0805DBF0(Manager34* this) { + if (--this->field_0x20 == 0) { + sub_0805DC70(); + } else { + if (this->field_0x20 == 0x78) { + sub_08080964(0x78, 2); + } else if (this->field_0x20 == 0xd2) { + sub_08080964(0x5a, 1); + } else if (this->field_0x20 == 0x12c) { + sub_08080964(0x5a, 0); + } -void sub_0805DC70(Manager34* this) { + if (this->field_0x20 < 0x78) { + if ((this->field_0x20 & 0xf) == 0) { + SoundReq(SFX_126); + } + } else if (0xd1 >= this->field_0x20) { + if ((this->field_0x20 & 0x1f) == 0) { + SoundReq(SFX_126); + } + } else if (this->field_0x20 <= 199) { + if ((this->field_0x20 & 0x3f) == 0) { + SoundReq(SFX_126); + } + } + } +} + +void sub_0805DC70(void) { sub_0805E5A8(); DoExitTransition(&gUnk_0813AC48); } diff --git a/src/object/object1C.c b/src/object/object1C.c index 0c80735a..3ca965c6 100644 --- a/src/object/object1C.c +++ b/src/object/object1C.c @@ -3,14 +3,16 @@ extern u32 CheckRectOnScreen(s16, s16, u32, u32); +/* +This object is created by Manager13. +It checks whether the 0x10 x 0x10 rect at field_0x80, field_0x82 is still on the screen. +If not, then it deletes itselfs and unsets the this->type2 bit in the managers field_0x20 bitfield. +*/ void Object1C(Entity* this) { - s32 iVar1; - if (this->action == 0) { this->action = 1; } - iVar1 = CheckRectOnScreen(this->field_0x80.HWORD, this->field_0x82.HWORD, 0x10, 0x10); - if (iVar1 == 0) { + if (CheckRectOnScreen(this->field_0x80.HWORD, this->field_0x82.HWORD, 0x10, 0x10) == 0) { this->parent->field_0x20 &= ~(1 << this->type2); DeleteThisEntity(); } From 9147fa82726f2330457ea0aee8742a3c513dadda Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 18 Sep 2021 12:57:32 +0200 Subject: [PATCH 31/64] Decompile manager21 --- asm/non_matching/manager21/Manager21_Main.inc | 88 ------------------- asm/non_matching/manager21/sub_0805B8CC.inc | 20 ----- include/flags.h | 4 +- src/manager/manager21.c | 66 +++++++++++++- 4 files changed, 66 insertions(+), 112 deletions(-) delete mode 100644 asm/non_matching/manager21/Manager21_Main.inc delete mode 100644 asm/non_matching/manager21/sub_0805B8CC.inc diff --git a/asm/non_matching/manager21/Manager21_Main.inc b/asm/non_matching/manager21/Manager21_Main.inc deleted file mode 100644 index 87823c86..00000000 --- a/asm/non_matching/manager21/Manager21_Main.inc +++ /dev/null @@ -1,88 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldrb r1, [r5, #0xc] - cmp r1, #0 - bne _0805B834 - movs r0, #1 - strb r0, [r5, #0xc] - str r1, [r5, #0x20] -_0805B834: - ldrb r0, [r5, #0xa] - bl GetCurrentRoomProperty - adds r4, r0, #0 - movs r7, #0 - ldrh r0, [r4] - cmp r0, #0 - beq _0805B8C4 - ldr r0, _0805B8A8 @ =gRoomControls - mov r8, r0 -_0805B848: - ldrh r0, [r4] - ldrh r1, [r4, #2] - movs r2, #4 - movs r3, #4 - bl CheckRectOnScreen - cmp r0, #0 - beq _0805B8AC - movs r6, #1 - lsls r6, r7 - ldr r0, [r5, #0x20] - ands r0, r6 - cmp r0, #0 - bne _0805B8B6 - ldrh r0, [r4, #4] - bl sub_0805B8CC - cmp r0, #0 - beq _0805B8B6 - movs r0, #0x4e - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _0805B8B6 - ldrh r0, [r4, #6] - strb r0, [r1, #0xe] - strb r7, [r1, #0xf] - ldrh r0, [r4] - mov r2, r8 - ldrh r2, [r2, #6] - adds r0, r0, r2 - strh r0, [r1, #0x2e] - ldrh r0, [r4, #2] - mov r3, r8 - ldrh r3, [r3, #8] - adds r0, r0, r3 - strh r0, [r1, #0x32] - str r5, [r1, #0x50] - adds r0, r1, #0 - bl sub_08016A30 - ldr r0, [r5, #0x20] - orrs r0, r6 - b _0805B8B4 - .align 2, 0 -_0805B8A8: .4byte gRoomControls -_0805B8AC: - movs r1, #1 - lsls r1, r7 - ldr r0, [r5, #0x20] - bics r0, r1 -_0805B8B4: - str r0, [r5, #0x20] -_0805B8B6: - adds r4, #8 - adds r7, #1 - ldrh r0, [r4] - cmp r0, #0 - beq _0805B8C4 - cmp r7, #0x1f - bls _0805B848 -_0805B8C4: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager21/sub_0805B8CC.inc b/asm/non_matching/manager21/sub_0805B8CC.inc deleted file mode 100644 index d06a5b37..00000000 --- a/asm/non_matching/manager21/sub_0805B8CC.inc +++ /dev/null @@ -1,20 +0,0 @@ - .syntax unified - push {lr} - cmp r0, #4 - bne _0805B8DA - movs r0, #0x18 - bl CheckGlobalFlag - b _0805B8E8 -_0805B8DA: - cmp r0, #4 - bls _0805B8E6 - cmp r0, #6 - bhi _0805B8E6 - movs r0, #0 - b _0805B8E8 -_0805B8E6: - movs r0, #1 -_0805B8E8: - pop {pc} - .align 2, 0 - .syntax divided diff --git a/include/flags.h b/include/flags.h index c68be93e..e6261771 100644 --- a/include/flags.h +++ b/include/flags.h @@ -28,7 +28,7 @@ void SetRoomFlag(u32); extern u32 gGlobalFlags; extern u32 gRoomFlags; -enum { +typedef enum { FLAG_NONE, /*0x01*/ LV0_CLEAR, /* */ /*0x02*/ LV1_CLEAR, /* */ @@ -130,6 +130,6 @@ enum { /*0x62*/ MAZE_CLEAR, /* Cleared Castle maze */ /*0x63*/ TINY_ENTRANCE, /* Ezlo described entrances */ /*0x64*/ CASTLE_BGM, /* Castle intro BGM */ -}; +} Flags; #endif diff --git a/src/manager/manager21.c b/src/manager/manager21.c index 32c217d4..586fedd6 100644 --- a/src/manager/manager21.c +++ b/src/manager/manager21.c @@ -1,6 +1,68 @@ #include "manager.h" +#include "room.h" +#include "object.h" +#include "functions.h" +#include "flags.h" -ASM_FUNC("asm/non_matching/manager21/Manager21_Main.inc", void Manager21_Main()) +extern bool32 CheckRectOnScreen(u16, u16, u32, u32); -ASM_FUNC("asm/non_matching/manager21/sub_0805B8CC.inc", void sub_0805B8CC()) +typedef struct { + Manager manager; + u32 field_0x20; +} Manager21; + +typedef struct { + u16 x; + u16 y; + u16 field_0x4; + u16 actionDelay; +} MinishEntranceSpawnData; + +bool32 sub_0805B8CC(u32); + +/* +Spawns MINISH_SIZED_ENTRANCE at the locations in the room property this->manager.unk_0a when they are visible on the screen. +*/ +void Manager21_Main(Manager21* this) { + MinishEntranceSpawnData* spawnData; + u32 count; + if (this->manager.action == 0) { + this->manager.action = 1; + this->field_0x20 = 0; + } + spawnData = (MinishEntranceSpawnData*)GetCurrentRoomProperty(this->manager.unk_0a); + + for (count = 0; (spawnData->x != 0) && (count < 0x20); ++count) { + if (CheckRectOnScreen(spawnData->x, spawnData->y, 4, 4) != 0) { + if (((this->field_0x20 & (1 << count)) == 0) && (sub_0805B8CC(spawnData->field_0x4) != 0)) { + Entity* object = CreateObject(MINISH_SIZED_ENTRANCE, 1, 0); + if (object != NULL) { + object->actionDelay = spawnData->actionDelay; + object->field_0xf = count; + object->x.HALF.HI = gRoomControls.roomOriginX + spawnData->x; + object->y.HALF.HI = gRoomControls.roomOriginY + spawnData->y; + object->parent = (Entity*)this; + sub_08016A30(object); + this->field_0x20 |= 1 << count; + } + } + } else { + this->field_0x20 &= ~(1 << count); + } + spawnData += 1; + } +} + +bool32 sub_0805B8CC(u32 param_1) { + if (param_1 == 4) { + return CheckGlobalFlag(TATEKAKE_HOUSE); + } + if (param_1 < 5) { + return TRUE; + } + if (param_1 > 6) { + return TRUE; + } + return FALSE; +} From aa6cafcb982a0d77b0982fe94667ba902deee849 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 18 Sep 2021 13:28:17 +0200 Subject: [PATCH 32/64] Decompile manager31 --- asm/non_matching/manager31/Manager31_Main.inc | 174 ------------------ include/flags.h | 2 +- src/manager/manager31.c | 96 +++++++++- 3 files changed, 96 insertions(+), 176 deletions(-) delete mode 100644 asm/non_matching/manager31/Manager31_Main.inc diff --git a/asm/non_matching/manager31/Manager31_Main.inc b/asm/non_matching/manager31/Manager31_Main.inc deleted file mode 100644 index 07a9d156..00000000 --- a/asm/non_matching/manager31/Manager31_Main.inc +++ /dev/null @@ -1,174 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r6, r0, #0 - ldrb r0, [r6, #0xc] - cmp r0, #0 - beq _0805D642 - b _0805D768 -_0805D642: - adds r0, #1 - strb r0, [r6, #0xc] - movs r0, #0x42 - bl CheckGlobalFlag - cmp r0, #0 - beq _0805D6E4 - movs r0, #0x43 - bl CheckGlobalFlag - cmp r0, #0 - beq _0805D6E4 - movs r0, #0x44 - bl CheckGlobalFlag - cmp r0, #0 - beq _0805D6E4 - movs r0, #0x3e - bl CheckGlobalFlag - cmp r0, #0 - bne _0805D680 - movs r0, #2 - bl CheckGlobalFlag - cmp r0, #0 - beq _0805D6E4 - movs r0, #0x3e - bl SetGlobalFlag - b _0805D6D2 -_0805D680: - movs r0, #0x3f - bl CheckGlobalFlag - cmp r0, #0 - bne _0805D69C - movs r0, #3 - bl CheckGlobalFlag - cmp r0, #0 - beq _0805D6E4 - movs r0, #0x3f - bl SetGlobalFlag - b _0805D6D2 -_0805D69C: - movs r0, #0x40 - bl CheckGlobalFlag - cmp r0, #0 - bne _0805D6B8 - movs r0, #4 - bl CheckGlobalFlag - cmp r0, #0 - beq _0805D6E4 - movs r0, #0x40 - bl SetGlobalFlag - b _0805D6D2 -_0805D6B8: - movs r0, #0x41 - bl CheckGlobalFlag - cmp r0, #0 - bne _0805D6E4 - movs r0, #5 - bl CheckGlobalFlag - cmp r0, #0 - beq _0805D6E4 - movs r0, #0x41 - bl SetGlobalFlag -_0805D6D2: - movs r0, #0x42 - bl ClearGlobalFlag - movs r0, #0x43 - bl ClearGlobalFlag - movs r0, #0x44 - bl ClearGlobalFlag -_0805D6E4: - adds r1, r6, #0 - adds r1, #0x22 - movs r0, #0 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - ldr r4, _0805D79C @ =gUnk_08108D5C - movs r5, #0 - mov sb, r1 - movs r7, #1 - ldr r0, _0805D7A0 @ =gRoomControls - mov r8, r0 -_0805D700: - adds r0, r5, #0 - adds r0, #0x42 - bl CheckGlobalFlag - cmp r0, #0 - bne _0805D760 - bl Random - ldrh r1, [r4, #2] - bl __modsi3 - adds r2, r0, #0 - ldrh r0, [r4] - adds r2, r2, r0 - movs r0, #2 - movs r1, #0x5c - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805D760 - strb r7, [r2, #0xe] - strb r5, [r2, #0xf] - mov r1, r8 - ldrh r0, [r1, #6] - ldrh r1, [r4, #4] - adds r0, r0, r1 - strh r0, [r2, #0x2e] - mov r1, r8 - ldrh r0, [r1, #8] - ldrh r1, [r4, #6] - adds r0, r0, r1 - strh r0, [r2, #0x32] - ldrh r1, [r4, #4] - adds r0, r2, #0 - adds r0, #0x80 - strh r1, [r0] - ldrh r0, [r4, #6] - adds r1, r2, #0 - adds r1, #0x82 - strh r0, [r1] - adds r0, r2, #0 - adds r0, #0x38 - strb r7, [r0] - str r6, [r2, #0x50] - mov r1, sb - adds r0, r1, r5 - strb r7, [r0] -_0805D760: - adds r5, #1 - adds r4, #8 - cmp r5, #2 - ble _0805D700 -_0805D768: - movs r5, #0 -_0805D76A: - adds r4, r5, #0 - adds r4, #0x42 - adds r0, r4, #0 - bl CheckGlobalFlag - cmp r0, #0 - bne _0805D78E - adds r0, r6, #0 - adds r0, #0x20 - adds r0, r0, r5 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bge _0805D78E - adds r0, r4, #0 - bl SetGlobalFlag -_0805D78E: - adds r5, #1 - cmp r5, #2 - ble _0805D76A - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805D79C: .4byte gUnk_08108D5C -_0805D7A0: .4byte gRoomControls - .syntax divided diff --git a/include/flags.h b/include/flags.h index e6261771..81dbf5f2 100644 --- a/include/flags.h +++ b/include/flags.h @@ -130,6 +130,6 @@ typedef enum { /*0x62*/ MAZE_CLEAR, /* Cleared Castle maze */ /*0x63*/ TINY_ENTRANCE, /* Ezlo described entrances */ /*0x64*/ CASTLE_BGM, /* Castle intro BGM */ -} Flags; +} Flag; #endif diff --git a/src/manager/manager31.c b/src/manager/manager31.c index 1dfa0b75..e1017242 100644 --- a/src/manager/manager31.c +++ b/src/manager/manager31.c @@ -1,4 +1,98 @@ #include "manager.h" +#include "flags.h" +#include "random.h" +#include "object.h" +#include "room.h" -ASM_FUNC("asm/non_matching/manager31/Manager31_Main.inc", void Manager31_Main()) +typedef struct { + Manager manager; + u8 itemActive[3]; +} Manager31; + +typedef struct { + u16 minType; + u16 maxType; + u16 x; + u16 y; +} GoronShopSpawnData; + +extern GoronShopSpawnData gUnk_08108D5C[3]; + +/* +Spawns the shop items for the kinstones for the goron merchant. +*/ +void Manager31_Main(Manager31* this) { + s32 uVar2; + GoronShopSpawnData* spawnData; + s32 count; + + if (this->manager.action == 0) { + this->manager.action += 1; + if (CheckGlobalFlag(GORON_KAKERA_L) != 0 + && CheckGlobalFlag(GORON_KAKERA_M) != 0 + && CheckGlobalFlag(GORON_KAKERA_R) != 0) { + if (CheckGlobalFlag(GORON_KAKERA_LV2) == 0) { + if (CheckGlobalFlag(LV1_CLEAR) != 0) { + SetGlobalFlag(GORON_KAKERA_LV2); + goto clearGlobalFlags; + } + } else { + if (CheckGlobalFlag(GORON_KAKERA_LV3) == 0) { + if (CheckGlobalFlag(LV2_CLEAR) != 0) { + SetGlobalFlag(GORON_KAKERA_LV3); + goto clearGlobalFlags; + } + } else { + if (CheckGlobalFlag(GORON_KAKERA_LV4) == 0) { + if (CheckGlobalFlag(LV3_CLEAR) != 0) { + SetGlobalFlag(GORON_KAKERA_LV4); + goto clearGlobalFlags; + + } + } else { + if (CheckGlobalFlag(GORON_KAKERA_LV5) == 0 + && CheckGlobalFlag(LV4_CLEAR) != 0) { + SetGlobalFlag(GORON_KAKERA_LV5); +clearGlobalFlags: + ClearGlobalFlag(GORON_KAKERA_L); + ClearGlobalFlag(GORON_KAKERA_M); + ClearGlobalFlag(GORON_KAKERA_R); + } + } + } + } + } + this->itemActive[2] = 0; + this->itemActive[1] = 0; + this->itemActive[0] = 0; + spawnData = gUnk_08108D5C; + count = 0; + for (count = 0; count < 3;) { + if (CheckGlobalFlag(GORON_KAKERA_L + count) == 0) { + Entity* object = CreateObject(SHOP_ITEM, 0x5c, ((s32)Random() % spawnData->maxType) + spawnData->minType); + if (object != NULL) { + object->actionDelay = 1; + object->field_0xf = count; + object->x.HALF.HI = spawnData->x + gRoomControls.roomOriginX; + object->y.HALF.HI = spawnData->y + gRoomControls.roomOriginY; + object->field_0x80.HWORD = spawnData->x; + object->field_0x82.HWORD = spawnData->y; + object->collisionLayer = 1; + object->parent = (Entity*)this; + this->itemActive[count] = 1; + } + } + count += 1; + spawnData += 1; + } + } + for (count = 0; count < 3; ++count) { + if (CheckGlobalFlag(GORON_KAKERA_L + count) == 0) { + if ((s8)this->itemActive[count] >= FALSE) { + } else { + SetGlobalFlag(GORON_KAKERA_L + count); + } + } + } +} From ebe6d231bca5c37227ebb7e0675779d0127c4f58 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 18 Sep 2021 20:36:51 +0200 Subject: [PATCH 33/64] Decompile manager23 --- asm/non_matching/manager23/Manager23_Main.inc | 12 -- asm/non_matching/manager23/sub_0805BC8C.inc | 35 ---- asm/non_matching/manager23/sub_0805BCD4.inc | 68 -------- asm/non_matching/manager23/sub_0805BD5C.inc | 43 ----- asm/non_matching/manager23/sub_0805BDB4.inc | 90 ---------- asm/non_matching/manager23/sub_0805BE70.inc | 19 --- asm/non_matching/manager23/sub_0805BE94.inc | 23 --- asm/non_matching/manager23/sub_0805BEC4.inc | 43 ----- include/textbox.h | 3 +- src/manager/manager23.c | 159 +++++++++++++++++- 10 files changed, 153 insertions(+), 342 deletions(-) delete mode 100644 asm/non_matching/manager23/Manager23_Main.inc delete mode 100644 asm/non_matching/manager23/sub_0805BC8C.inc delete mode 100644 asm/non_matching/manager23/sub_0805BCD4.inc delete mode 100644 asm/non_matching/manager23/sub_0805BD5C.inc delete mode 100644 asm/non_matching/manager23/sub_0805BDB4.inc delete mode 100644 asm/non_matching/manager23/sub_0805BE70.inc delete mode 100644 asm/non_matching/manager23/sub_0805BE94.inc delete mode 100644 asm/non_matching/manager23/sub_0805BEC4.inc diff --git a/asm/non_matching/manager23/Manager23_Main.inc b/asm/non_matching/manager23/Manager23_Main.inc deleted file mode 100644 index 7bd09747..00000000 --- a/asm/non_matching/manager23/Manager23_Main.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805BC88 @ =gUnk_08108CCC - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805BC88: .4byte gUnk_08108CCC - .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BC8C.inc b/asm/non_matching/manager23/sub_0805BC8C.inc deleted file mode 100644 index 84fa7a8e..00000000 --- a/asm/non_matching/manager23/sub_0805BC8C.inc +++ /dev/null @@ -1,35 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805BCAE - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xf] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805BCAE - adds r0, r4, #0 - bl sub_0805BE94 -_0805BCAE: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805BCD0 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805BCD0 - adds r0, r4, #0 - bl sub_0805BEC4 - adds r0, r4, #0 - bl sub_0805BE94 -_0805BCD0: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BCD4.inc b/asm/non_matching/manager23/sub_0805BCD4.inc deleted file mode 100644 index 7a11186d..00000000 --- a/asm/non_matching/manager23/sub_0805BCD4.inc +++ /dev/null @@ -1,68 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _0805BD0E - cmp r0, #1 - bgt _0805BCE8 - cmp r0, #0 - beq _0805BCEE - b _0805BD5A -_0805BCE8: - cmp r0, #2 - beq _0805BD38 - b _0805BD5A -_0805BCEE: - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xf] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805BD5A - adds r0, r4, #0 - movs r1, #0x75 - bl sub_0805BE70 - movs r0, #2 - strb r0, [r4, #0xc] - b _0805BD5A -_0805BD0E: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805BD5A - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805BD5A - movs r0, #0x1e - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_0805BEC4 - adds r0, r4, #0 - movs r1, #0x76 - bl sub_0805BE70 - b _0805BD5A -_0805BD38: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - bne _0805BD5A - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805BD5A - movs r0, #0x1e - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #0x75 - bl sub_0805BE70 -_0805BD5A: - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BD5C.inc b/asm/non_matching/manager23/sub_0805BD5C.inc deleted file mode 100644 index 404857fd..00000000 --- a/asm/non_matching/manager23/sub_0805BD5C.inc +++ /dev/null @@ -1,43 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805BD94 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805BD76 - adds r0, r4, #0 - bl sub_0805BE94 -_0805BD76: - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r4, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4, #0x20] - movs r0, #1 - strb r0, [r4, #0xc] - b _0805BDB0 -_0805BD94: - ldrh r0, [r4, #0x20] - ldrb r1, [r4, #0xb] - bl GetTileType - cmp r0, #0x76 - bne _0805BDB0 - ldrh r0, [r4, #0x3e] - bl SetFlag - ldrb r0, [r4, #0xe] - bl sub_0805308C - bl DeleteThisEntity -_0805BDB0: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BDB4.inc b/asm/non_matching/manager23/sub_0805BDB4.inc deleted file mode 100644 index 9e1ee204..00000000 --- a/asm/non_matching/manager23/sub_0805BDB4.inc +++ /dev/null @@ -1,90 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _0805BDF4 - cmp r0, #1 - beq _0805BE2C - ldrh r0, [r4, #0x22] - subs r0, #1 - strh r0, [r4, #0x22] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0805BE58 - movs r1, #0x38 - ldrsh r0, [r4, r1] - movs r2, #0x3a - ldrsh r1, [r4, r2] - ldrb r2, [r4, #0xb] - bl CreateDustAt - ldrh r0, [r4, #0x3e] - bl ClearFlag - ldrh r0, [r4, #0x20] - ldrb r1, [r4, #0xb] - bl sub_0807BA8C - ldrb r0, [r4, #0xe] - rsbs r0, r0, #0 - bl sub_0805308C - b _0805BE26 -_0805BDF4: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - bne _0805BE08 - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _0805BE0E -_0805BE08: - adds r0, r4, #0 - bl sub_0805BE94 -_0805BE0E: - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r4, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4, #0x20] -_0805BE26: - movs r0, #1 - strb r0, [r4, #0xc] - b _0805BE6C -_0805BE2C: - ldrh r0, [r4, #0x20] - ldrb r1, [r4, #0xb] - bl GetTileType - cmp r0, #0x76 - bne _0805BE6C - ldrh r0, [r4, #0x3e] - bl SetFlag - ldrb r0, [r4, #0xe] - bl sub_0805308C - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x36 - ldrb r1, [r0] - lsls r0, r1, #4 - subs r0, r0, r1 - lsls r0, r0, #2 - strh r0, [r4, #0x22] - b _0805BE6C -_0805BE58: - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _0805BE6C - adds r0, r4, #0 - bl sub_0805BEC4 - bl DeleteThisEntity -_0805BE6C: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BE70.inc b/asm/non_matching/manager23/sub_0805BE70.inc deleted file mode 100644 index 18b92284..00000000 --- a/asm/non_matching/manager23/sub_0805BE70.inc +++ /dev/null @@ -1,19 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r1, #0 - ldrh r1, [r0, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r3, #0x3f - ands r1, r3 - ldrh r2, [r0, #0x3a] - lsls r2, r2, #0x10 - asrs r2, r2, #0x14 - ands r2, r3 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r0, #0xb] - adds r0, r4, #0 - bl SetTileType - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BE94.inc b/asm/non_matching/manager23/sub_0805BE94.inc deleted file mode 100644 index a4e34a14..00000000 --- a/asm/non_matching/manager23/sub_0805BE94.inc +++ /dev/null @@ -1,23 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r4, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - ldrb r2, [r4, #0xb] - movs r0, #0x76 - bl SetTileType - ldrb r0, [r4, #0xe] - bl sub_0805308C - bl DeleteThisEntity - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager23/sub_0805BEC4.inc b/asm/non_matching/manager23/sub_0805BEC4.inc deleted file mode 100644 index daf91631..00000000 --- a/asm/non_matching/manager23/sub_0805BEC4.inc +++ /dev/null @@ -1,43 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x2a - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805BF10 - ldrb r1, [r2, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2, #0x11] - ldr r1, _0805BF14 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r1, [r4, #0x3a] - adds r0, r0, r1 - strh r0, [r2, #0x32] - ldrb r1, [r4, #0xb] - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - 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] -_0805BF10: - pop {r4, pc} - .align 2, 0 -_0805BF14: .4byte gRoomControls - .syntax divided diff --git a/include/textbox.h b/include/textbox.h index 3eca4242..e85590b9 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -32,7 +32,8 @@ typedef struct { u16 _22; u16 _24; u16 _26; - u8 _28[0x4]; + u16 _28; + u8 _2a[0x2]; void* _2c; u8 _30[0x20]; WStruct _50; diff --git a/src/manager/manager23.c b/src/manager/manager23.c index 8fcba071..f38c3831 100644 --- a/src/manager/manager23.c +++ b/src/manager/manager23.c @@ -1,18 +1,161 @@ #include "manager.h" +#include "room.h" +#include "functions.h" +#include "flags.h" +#include "object.h" -ASM_FUNC("asm/non_matching/manager23/Manager23_Main.inc", void Manager23_Main()) +extern void (*const gUnk_08108CCC[])(Manager*); -ASM_FUNC("asm/non_matching/manager23/sub_0805BC8C.inc", void sub_0805BC8C()) +typedef struct { + Manager manager; + u16 field_0x20; + u16 field_0x22; + u8 field_0x24[0x12]; + u8 field_0x36; + u8 field_0x37; + u16 field_0x38; + u16 field_0x3a; + u16 field_0x3c; + u16 field_0x3e; +} Manager23; -ASM_FUNC("asm/non_matching/manager23/sub_0805BCD4.inc", void sub_0805BCD4()) +void sub_0805BE94(Manager23*); +void sub_0805BEC4(Manager23*); -ASM_FUNC("asm/non_matching/manager23/sub_0805BD5C.inc", void sub_0805BD5C()) +void sub_0805BE70(Manager23*, u32); -ASM_FUNC("asm/non_matching/manager23/sub_0805BDB4.inc", void sub_0805BDB4()) +extern void CreateDustAt(s32, s32, u32); -ASM_FUNC("asm/non_matching/manager23/sub_0805BE70.inc", void sub_0805BE70()) +void Manager23_Main(Manager* this) { + gUnk_08108CCC[this->unk_0a](this); +} -ASM_FUNC("asm/non_matching/manager23/sub_0805BE94.inc", void sub_0805BE94()) +void sub_0805BC8C(Manager23* this) { + if (this->manager.action == 0) { + this->manager.action = 1; + this->manager.unk_0f = 0x1e; + if (CheckFlags(this->field_0x3e) != 0) { + sub_0805BE94(this); + } + } + if ((CheckFlags(this->field_0x3e) != 0) && (--this->manager.unk_0f == 0)) { + sub_0805BEC4(this); + sub_0805BE94(this); + } +} -ASM_FUNC("asm/non_matching/manager23/sub_0805BEC4.inc", void sub_0805BEC4()) +void sub_0805BCD4(Manager23* this) { + switch(this->manager.action) { + case 0: + this->manager.action = 1; + this->manager.unk_0f = 0x1e; + if (CheckFlags(this->field_0x3e) != 0) { + sub_0805BE70(this, 0x75); + this->manager.action = 2; + } + break; + case 1: + if (CheckFlags(this->field_0x3e) != 0 && --this->manager.unk_0f == 0) { + this->manager.unk_0f = 0x1e; + sub_0805BEC4(this); + sub_0805BE70(this, 0x76); + } + break; + case 2: + if (CheckFlags(this->field_0x3e) == 0 && --this->manager.unk_0f == 0) { + this->manager.unk_0f = 0x1e; + sub_0805BE70(this, 0x75); + } + break; + } +} + +void sub_0805BD5C(Manager23* this) { + if (this->manager.action == 0) { + if (CheckFlags(this->field_0x3e) != 0) { + sub_0805BE94(this); + } + this->field_0x20 = ((s16)this->field_0x38 >> 4 & 0x3fU) | + ((s32)((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6); + this->manager.action = 1; + } else { + if (GetTileType(this->field_0x20, this->manager.unk_0b) == 0x76) { + SetFlag(this->field_0x3e); + sub_0805308C(this->manager.unk_0e); + DeleteThisEntity(); + } + } +} + + +void sub_0805BDB4(Manager23* this) { + u8 bVar1; + u16 uVar2; + u32 uVar3; + + switch (this->manager.action) { + case 0: + if (CheckFlags(this->field_0x3e) != 0 || CheckFlags(this->field_0x3c) != 0) { + sub_0805BE94(this); + } + this->field_0x20 = ((s16)this->field_0x38 >> 4 & 0x3fU) | + (((s32)(this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6); + this->manager.action = 1; + break; + + case 1: + if (GetTileType(this->field_0x20, this->manager.unk_0b) != 0x76) { + return; + } + SetFlag(this->field_0x3e); + sub_0805308C(this->manager.unk_0e); + this->manager.action = 2; + this->field_0x22 = this->field_0x36 * 0x3c; + return; + break; + + default: + if (--this->field_0x22 == 0) { + CreateDustAt(*(s16*)&this->field_0x38, *(s16*)&this->field_0x3a, this->manager.unk_0b); + ClearFlag(this->field_0x3e); + sub_0807BA8C(this->field_0x20, this->manager.unk_0b); + sub_0805308C(-this->manager.unk_0e); + this->manager.action = 1; + } else { + if (CheckFlags(this->field_0x3c) == 0) { + return; + } + sub_0805BEC4(this); + DeleteThisEntity(); + } + break; + } +} + +void sub_0805BE70(Manager23* this, u32 param_2) { + SetTileType(param_2, + ((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | + ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6, + this->manager.unk_0b); +} + +void sub_0805BE94(Manager23* this) { + SetTileType(0x76, + ((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | + ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6, + this->manager.unk_0b); + sub_0805308C(this->manager.unk_0e); + DeleteThisEntity(); +} + +void sub_0805BEC4(Manager23* this) { + Entity* object = CreateObject(OBJECT_2A, 1, 0); + if (object != NULL) { + *(s8*)(&object->flags+1) = ((*(s8*)(&object->flags+1)) & (-0x10)) | 3; + object->x.HALF.HI = this->field_0x38 + gRoomControls.roomOriginX; + object->y.HALF.HI = this->field_0x3a + gRoomControls.roomOriginY; + object->collisionLayer = this->manager.unk_0b; + object->spritePriority.b0 = 2; + } +} From 6d08b91b15f5a5cbfb0f44bd338b30a0ab1a97a8 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 19 Sep 2021 09:50:12 +0200 Subject: [PATCH 34/64] Decompile manager2 --- asm/non_matching/manager2/sub_0805754C.inc | 66 ------------------ asm/non_matching/manager2/sub_08057688.inc | 12 ---- asm/non_matching/manager2/sub_080576A0.inc | 15 ---- src/manager/manager2.c | 81 +++++++++++++++++++--- 4 files changed, 73 insertions(+), 101 deletions(-) delete mode 100644 asm/non_matching/manager2/sub_0805754C.inc delete mode 100644 asm/non_matching/manager2/sub_08057688.inc delete mode 100644 asm/non_matching/manager2/sub_080576A0.inc diff --git a/asm/non_matching/manager2/sub_0805754C.inc b/asm/non_matching/manager2/sub_0805754C.inc deleted file mode 100644 index ad1109b3..00000000 --- a/asm/non_matching/manager2/sub_0805754C.inc +++ /dev/null @@ -1,66 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r2, r0, #0 - ldr r3, _080575BC @ =gRoomControls - movs r0, #0xc - ldrsh r1, [r3, r0] - ldrh r0, [r3, #8] - subs r1, r1, r0 - asrs r0, r1, #3 - adds r1, r1, r0 - ldr r4, _080575C0 @ =gScreen - movs r6, #0x3f - adds r0, r1, #0 - ands r0, r6 - strh r0, [r4, #0x30] - adds r0, r1, #0 - cmp r1, #0 - bge _08057570 - adds r0, #0x3f -_08057570: - asrs r0, r0, #6 - lsls r0, r0, #9 - ldr r5, _080575C4 @ =gMapDataTopSpecial - adds r1, r0, r5 - str r1, [r4, #0x34] - ldr r0, [r2, #0x38] - cmp r0, r1 - beq _08057586 - str r1, [r2, #0x38] - movs r0, #1 - strh r0, [r4, #0x32] -_08057586: - movs r0, #0xc - ldrsh r1, [r3, r0] - ldrh r0, [r3, #8] - subs r1, r1, r0 - asrs r0, r1, #2 - adds r1, r1, r0 - adds r0, r1, #0 - ands r0, r6 - strh r0, [r4, #0x18] - adds r0, r1, #0 - cmp r0, #0 - bge _080575A0 - adds r0, #0x3f -_080575A0: - asrs r0, r0, #6 - lsls r0, r0, #9 - movs r3, #0x80 - lsls r3, r3, #6 - adds r1, r5, r3 - adds r1, r0, r1 - str r1, [r4, #0x1c] - ldr r0, [r2, #0x3c] - cmp r0, r1 - beq _080575BA - str r1, [r2, #0x3c] - movs r0, #1 - strh r0, [r4, #0x1a] -_080575BA: - pop {r4, r5, r6, pc} - .align 2, 0 -_080575BC: .4byte gRoomControls -_080575C0: .4byte gScreen -_080575C4: .4byte gMapDataTopSpecial - .syntax divided diff --git a/asm/non_matching/manager2/sub_08057688.inc b/asm/non_matching/manager2/sub_08057688.inc deleted file mode 100644 index fae0c509..00000000 --- a/asm/non_matching/manager2/sub_08057688.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - ldr r0, _08057694 @ =gScreen - ldr r1, _08057698 @ =0x00001D48 - strh r1, [r0, #0x2c] - ldr r1, _0805769C @ =0x00001E48 - strh r1, [r0, #0x14] - bx lr - .align 2, 0 -_08057694: .4byte gScreen -_08057698: .4byte 0x00001D48 -_0805769C: .4byte 0x00001E48 - .syntax divided diff --git a/asm/non_matching/manager2/sub_080576A0.inc b/asm/non_matching/manager2/sub_080576A0.inc deleted file mode 100644 index 22d3cfc8..00000000 --- a/asm/non_matching/manager2/sub_080576A0.inc +++ /dev/null @@ -1,15 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldr r0, _080576BC @ =gRoomVars - ldrb r0, [r0, #0x10] - bl LoadGfxGroup - movs r0, #0 - str r0, [r4, #0x38] - str r0, [r4, #0x3c] - adds r0, r4, #0 - bl sub_0805754C - pop {r4, pc} - .align 2, 0 -_080576BC: .4byte gRoomVars - .syntax divided diff --git a/src/manager/manager2.c b/src/manager/manager2.c index 1198575c..ca71f503 100644 --- a/src/manager/manager2.c +++ b/src/manager/manager2.c @@ -2,13 +2,25 @@ #include "entity.h" #include "screen.h" #include "functions.h" +#include "room.h" + +typedef struct { + Manager manager; + u32 field_0x20[0x6]; + void* field_0x38; + void* field_0x3c; +} Manager2; extern void sub_080576A0(); -extern void sub_0805754C(Entity*); +extern void sub_0805754C(Manager2*); -void Manager2_Main(Entity* this) { - if (this->action == 0) { - this->action = 1; +extern u8 gMapDataTopSpecial[]; + +extern u32 gUnk_0200B650; + +void Manager2_Main(Manager2* this) { + if (this->manager.action == 0) { + this->manager.action = 1; gScreen.affine.bg3Updated = 0; gScreen.bg.bg1Updated = 0; sub_08052D74(this, sub_080576A0, 0); @@ -16,10 +28,63 @@ void Manager2_Main(Entity* this) { sub_0805754C(this); } -ASM_FUNC("asm/non_matching/manager2/sub_0805754C.inc", void sub_0805754C(Entity* this)) +void sub_0805754C(Manager2* this) { + s32 bgOffset; -ASM_FUNC("asm/non_matching/manager2/sub_080575C8.inc", void sub_080575C8(u32 param)) + bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY); + bgOffset += bgOffset >> 3; + gScreen.affine.bg3yOffset = bgOffset & 0x3f; + gScreen.affine.bg3Tilemap = gMapDataTopSpecial + (bgOffset/0x40) * 0x200; + if (this->field_0x38 != gScreen.affine.bg3Tilemap) { + this->field_0x38 = gScreen.affine.bg3Tilemap; + gScreen.affine.bg3Updated = 1; + } + bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY); + bgOffset += bgOffset >> 2; + gScreen.bg.bg1yOffset = bgOffset & 0x3f; + gScreen.bg.bg1Tilemap = gMapDataTopSpecial + 0x2000+ (bgOffset/0x40) * 0x200; + if (this->field_0x3c != gScreen.bg.bg1Tilemap) { + this->field_0x3c = gScreen.bg.bg1Tilemap; + gScreen.bg.bg1Updated = 1; + } +} -ASM_FUNC("asm/non_matching/manager2/sub_08057688.inc", void sub_08057688()) +void sub_080575C8(u32 param) { + s32 bgOffset; -ASM_FUNC("asm/non_matching/manager2/sub_080576A0.inc", void sub_080576A0()) + gUnk_0200B650 = 0; + *(u16*)0x4000000 = 0; + LoadGfxGroup(param); + gRoomVars.unk_10 = param; + + bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY); + bgOffset += bgOffset >> 3; + gScreen.affine.bg3yOffset = bgOffset & 0x3f; + gScreen.affine.bg3xOffset = 0; + gScreen.affine.bg3Tilemap = &gMapDataTopSpecial[(bgOffset / 0x40) * 0x200]; + gScreen.affine.bg3Control = 0x1d49; + gScreen.affine.bg3Updated = 1; + + bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY); + bgOffset += bgOffset >> 2; + gScreen.bg.bg1yOffset = bgOffset & 0x3f; + gScreen.bg.bg1xOffset = 0; + gScreen.bg.bg1Tilemap = &gMapDataTopSpecial[0x2000 + (bgOffset / 0x40) * 0x200]; + gScreen.bg.bg1Control = 0x1e49; + gScreen.bg.bg1Updated = 1; + gScreen.controls.layerFXControl = 0x3c48; + gScreen.controls.alphaBlend = 0x609; + gScreen.lcd.displayControl |= 0xa00; +} + +void sub_08057688(void) { + gScreen.affine.bg3Control = 0x1d48; + gScreen.bg.bg1Control = 0x1e48; +} + +void sub_080576A0(Manager2* this) { + LoadGfxGroup(gRoomVars.unk_10); + this->field_0x38 = NULL; + this->field_0x3c = NULL; + sub_0805754C(this); +} From 578806e30ab6552de000ffe1a0bdb48bafb37743 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 19 Sep 2021 10:22:46 +0200 Subject: [PATCH 35/64] Decompile manager18 --- asm/non_matching/manager18/Manager18_Main.inc | 120 ------------------ asm/non_matching/manager18/sub_0805AEDC.inc | 47 ------- asm/non_matching/manager18/sub_0805AF3C.inc | 18 --- src/manager/manager18.c | 65 +++++++++- 4 files changed, 62 insertions(+), 188 deletions(-) delete mode 100644 asm/non_matching/manager18/Manager18_Main.inc delete mode 100644 asm/non_matching/manager18/sub_0805AEDC.inc delete mode 100644 asm/non_matching/manager18/sub_0805AF3C.inc diff --git a/asm/non_matching/manager18/Manager18_Main.inc b/asm/non_matching/manager18/Manager18_Main.inc deleted file mode 100644 index 1b319fd3..00000000 --- a/asm/non_matching/manager18/Manager18_Main.inc +++ /dev/null @@ -1,120 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - cmp r4, #0 - bne _0805AE04 - ldr r0, _0805ADF8 @ =gArea - ldr r1, _0805ADFC @ =0x0000088C - adds r0, r0, r1 - ldr r0, [r0] - ldr r1, _0805AE00 @ =sub_0805AEDC - cmp r0, r1 - beq _0805AEC4 - movs r0, #0 - bl _call_via_r1 - b _0805AEC4 - .align 2, 0 -_0805ADF8: .4byte gArea -_0805ADFC: .4byte 0x0000088C -_0805AE00: .4byte sub_0805AEDC -_0805AE04: - ldrb r2, [r4, #0xc] - cmp r2, #0 - bne _0805AE5E - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - strb r2, [r4, #0xe] - movs r0, #8 - strb r0, [r4, #0xf] - ldr r0, _0805AE44 @ =gUnk_0810865C - ldrh r0, [r0] - strh r0, [r4, #0x20] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - ldr r0, _0805AE48 @ =gArea - ldr r2, _0805AE4C @ =0x0000088C - adds r0, r0, r2 - ldr r0, [r0] - cmp r0, #0 - bne _0805AE58 - ldr r1, _0805AE50 @ =sub_0805AEDC - ldr r2, _0805AE54 @ =sub_0805AF3C - adds r0, r4, #0 - bl sub_08052D74 - b _0805AEC4 - .align 2, 0 -_0805AE44: .4byte gUnk_0810865C -_0805AE48: .4byte gArea -_0805AE4C: .4byte 0x0000088C -_0805AE50: .4byte sub_0805AEDC -_0805AE54: .4byte sub_0805AF3C -_0805AE58: - bl DeleteThisEntity - b _0805AEC4 -_0805AE5E: - ldr r2, _0805AEC8 @ =gUnk_0810865C - ldrb r0, [r4, #0xe] - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - ldr r3, _0805AECC @ =gScreen - cmp r0, #0 - beq _0805AEA2 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - movs r1, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805AEA2 - movs r0, #4 - strb r0, [r4, #0xf] - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - ands r0, r1 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - cmp r0, #0 - beq _0805AEA2 - ldrb r0, [r4, #0xe] - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r1, [r0] - strh r1, [r4, #0x20] - adds r0, r3, #0 - adds r0, #0x68 - strh r1, [r0] -_0805AEA2: - ldr r1, _0805AED0 @ =gRoomControls - ldr r0, [r1, #0x28] - ldr r2, _0805AED4 @ =0xFFFFE000 - adds r0, r0, r2 - str r0, [r1, #0x28] - ldr r0, [r1, #0x2c] - ldr r2, _0805AED8 @ =0xFFFFF000 - adds r0, r0, r2 - str r0, [r1, #0x2c] - ldrh r0, [r1, #0x2a] - ldrh r2, [r1, #0xa] - adds r0, r0, r2 - strh r0, [r3, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r3, #0x30] -_0805AEC4: - pop {r4, pc} - .align 2, 0 -_0805AEC8: .4byte gUnk_0810865C -_0805AECC: .4byte gScreen -_0805AED0: .4byte gRoomControls -_0805AED4: .4byte 0xFFFFE000 -_0805AED8: .4byte 0xFFFFF000 - .syntax divided diff --git a/asm/non_matching/manager18/sub_0805AEDC.inc b/asm/non_matching/manager18/sub_0805AEDC.inc deleted file mode 100644 index 361962e5..00000000 --- a/asm/non_matching/manager18/sub_0805AEDC.inc +++ /dev/null @@ -1,47 +0,0 @@ - .syntax unified - push {r4, lr} - adds r3, r0, #0 - ldr r2, _0805AF2C @ =gScreen - ldr r0, _0805AF30 @ =0x00001E05 - strh r0, [r2, #0x2c] - ldrh r0, [r2] - movs r4, #0x80 - lsls r4, r4, #4 - adds r1, r4, #0 - orrs r0, r1 - strh r0, [r2] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _0805AF34 @ =0x00003648 - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #5 - adds r1, r0, #0 - cmp r3, #0 - beq _0805AF06 - ldrh r1, [r3, #0x20] -_0805AF06: - adds r0, r2, #0 - adds r0, #0x68 - strh r1, [r0] - ldr r1, _0805AF38 @ =gRoomControls - ldrh r0, [r1, #0x2a] - ldrh r4, [r1, #0xa] - adds r0, r0, r4 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] - cmp r3, #0 - beq _0805AF28 - adds r0, r3, #0 - bl Manager18_Main -_0805AF28: - pop {r4, pc} - .align 2, 0 -_0805AF2C: .4byte gScreen -_0805AF30: .4byte 0x00001E05 -_0805AF34: .4byte 0x00003648 -_0805AF38: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager18/sub_0805AF3C.inc b/asm/non_matching/manager18/sub_0805AF3C.inc deleted file mode 100644 index ab6b3af6..00000000 --- a/asm/non_matching/manager18/sub_0805AF3C.inc +++ /dev/null @@ -1,18 +0,0 @@ - .syntax unified - ldrb r2, [r0, #0x10] - movs r1, #0xdf - ands r1, r2 - movs r3, #0 - strb r1, [r0, #0x10] - ldr r1, _0805AF58 @ =gScreen - ldrh r2, [r1] - ldr r0, _0805AF5C @ =0x0000F7FF - ands r0, r2 - strh r0, [r1] - adds r1, #0x66 - strh r3, [r1] - bx lr - .align 2, 0 -_0805AF58: .4byte gScreen -_0805AF5C: .4byte 0x0000F7FF - .syntax divided diff --git a/src/manager/manager18.c b/src/manager/manager18.c index 98e3cf57..335f2fed 100644 --- a/src/manager/manager18.c +++ b/src/manager/manager18.c @@ -1,7 +1,66 @@ #include "manager.h" +#include "screen.h" +#include "area.h" +#include "functions.h" -ASM_FUNC("asm/non_matching/manager18/Manager18_Main.inc", void Manager18_Main()) +typedef struct { + Manager manager; + u16 field_0x20; +} Manager18; -ASM_FUNC("asm/non_matching/manager18/sub_0805AEDC.inc", void sub_0805AEDC()) +void sub_0805AEDC(Manager18*); +void sub_0805AF3C(Manager18*); +extern u16 gUnk_0810865C[]; -ASM_FUNC("asm/non_matching/manager18/sub_0805AF3C.inc", void sub_0805AF3C()) +void Manager18_Main(Manager18* this) { + if (this == NULL) { + if (gArea.unk3 != (u32)sub_0805AEDC) { + sub_0805AEDC(NULL); + } + } else { + if (this->manager.action == 0) { + this->manager.action = 1; + this->manager.unk_10 |= 0x20; + this->manager.unk_0e = 0; + this->manager.unk_0f = 8; + this->field_0x20 = gUnk_0810865C[0]; + sub_0805E3A0(this, 6); + if (gArea.unk3 == 0) { + sub_08052D74(this, sub_0805AEDC, sub_0805AF3C); + } else { + DeleteThisEntity(); + } + } else { + if ((gUnk_0810865C[this->manager.unk_0e] != 0) && + (--this->manager.unk_0f == 0)) { + this->manager.unk_0f = 4; + if (gUnk_0810865C[++this->manager.unk_0e] != 0) { + this->field_0x20 = gUnk_0810865C[this->manager.unk_0e]; + gScreen.controls.alphaBlend = this->field_0x20; + } + } + gRoomControls.bg3OffsetX.WORD -= 0x2000; + gRoomControls.bg3OffsetY.WORD -= 0x1000; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; + } + } +} + +void sub_0805AEDC(Manager18* this) { + gScreen.affine.bg3Control = 0x1e05; + gScreen.lcd.displayControl |= 0x800; + gScreen.controls.layerFXControl = 0x3648; + gScreen.controls.alphaBlend = (this != NULL) ? this->field_0x20 : 0x1000; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; + if (this != NULL) { + Manager18_Main(this); + } +} + +void sub_0805AF3C(Manager18* this) { + this->manager.unk_10 &= 0xdf; + gScreen.lcd.displayControl &= 0xf7ff; + gScreen.controls.layerFXControl = 0; +} From ff21673dfb2665c4df6437e32d1bc408b8b25502 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 19 Sep 2021 11:15:51 +0200 Subject: [PATCH 36/64] Decompile manager37 --- asm/non_matching/manager37/Manager37_Main.inc | 12 -- asm/non_matching/manager37/sub_0805DE50.inc | 12 -- asm/non_matching/manager37/sub_0805DE68.inc | 100 ------------- asm/non_matching/manager37/sub_0805DEB8.inc | 73 --------- asm/non_matching/manager37/sub_0805DF4C.inc | 40 ----- asm/non_matching/manager37/sub_0805DF98.inc | 28 ---- asm/non_matching/manager37/sub_0805DFCC.inc | 14 -- asm/non_matching/manager37/sub_0805DFE8.inc | 12 -- asm/non_matching/manager37/sub_0805E000.inc | 54 ------- asm/non_matching/manager37/sub_0805E078.inc | 16 -- asm/non_matching/manager37/sub_0805E094.inc | 10 -- src/manager/manager37.c | 138 ++++++++++++++++-- 12 files changed, 127 insertions(+), 382 deletions(-) delete mode 100644 asm/non_matching/manager37/Manager37_Main.inc delete mode 100644 asm/non_matching/manager37/sub_0805DE50.inc delete mode 100644 asm/non_matching/manager37/sub_0805DE68.inc delete mode 100644 asm/non_matching/manager37/sub_0805DEB8.inc delete mode 100644 asm/non_matching/manager37/sub_0805DF4C.inc delete mode 100644 asm/non_matching/manager37/sub_0805DF98.inc delete mode 100644 asm/non_matching/manager37/sub_0805DFCC.inc delete mode 100644 asm/non_matching/manager37/sub_0805DFE8.inc delete mode 100644 asm/non_matching/manager37/sub_0805E000.inc delete mode 100644 asm/non_matching/manager37/sub_0805E078.inc delete mode 100644 asm/non_matching/manager37/sub_0805E094.inc diff --git a/asm/non_matching/manager37/Manager37_Main.inc b/asm/non_matching/manager37/Manager37_Main.inc deleted file mode 100644 index 6624db37..00000000 --- a/asm/non_matching/manager37/Manager37_Main.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805DE4C @ =gUnk_08108DBC - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805DE4C: .4byte gUnk_08108DBC - .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DE50.inc b/asm/non_matching/manager37/sub_0805DE50.inc deleted file mode 100644 index 662f5977..00000000 --- a/asm/non_matching/manager37/sub_0805DE50.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805DE64 @ =gUnk_08108DC4 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805DE64: .4byte gUnk_08108DC4 - .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DE68.inc b/asm/non_matching/manager37/sub_0805DE68.inc deleted file mode 100644 index 027c6cb4..00000000 --- a/asm/non_matching/manager37/sub_0805DE68.inc +++ /dev/null @@ -1,100 +0,0 @@ - .syntax unified -.ifdef JP - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x7b - bl CheckLocalFlag - cmp r0, #0 - bne _0805DCCE - bl DeleteThisEntity -_0805DCCE: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r2, _0805DCF4 @ =0x030010A0 - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - adds r1, r2, #0 - adds r1, #0x39 - movs r0, #0xf - strb r0, [r1] - adds r0, r2, #0 - adds r0, #0x3a - movs r1, #0x20 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - pop {r4, pc} - .align 2, 0 -_0805DCF4: .4byte gScreenTransition -.else -.ifdef EU - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x7b - bl CheckLocalFlag - cmp r0, #0 - bne _0805D916 - bl DeleteThisEntity -_0805D916: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r2, _0805D93C @ =gScreenTransition - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - adds r1, r2, #0 - adds r1, #0x39 - movs r0, #0xf - strb r0, [r1] - adds r0, r2, #0 - adds r0, #0x3a - movs r1, #0x20 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - pop {r4, pc} - .align 2, 0 -_0805D93C: .4byte gScreenTransition -.else - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x7b - bl CheckLocalFlag - cmp r0, #0 - bne _0805DE7A - bl DeleteThisEntity -_0805DE7A: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r2, _0805DEAC @ =gScreenTransition - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - adds r1, r2, #0 - adds r1, #0x39 - movs r0, #0xf - strb r0, [r1] - adds r0, r2, #0 - adds r0, #0x3a - movs r1, #0x20 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] - ldr r0, _0805DEB0 @ =gSave - movs r1, #0x93 - lsls r1, r1, #3 - adds r0, r0, r1 - ldr r1, _0805DEB4 @ =0x00001194 - str r1, [r0] - pop {r4, pc} - .align 2, 0 -_0805DEAC: .4byte gScreenTransition -_0805DEB0: .4byte gSave -_0805DEB4: .4byte 0x00001194 -.endif -.endif - .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DEB8.inc b/asm/non_matching/manager37/sub_0805DEB8.inc deleted file mode 100644 index fdc72555..00000000 --- a/asm/non_matching/manager37/sub_0805DEB8.inc +++ /dev/null @@ -1,73 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r3, r0, #0 - ldr r5, _0805DF44 @ =gPlayerEntity - movs r0, #0x2e - ldrsh r2, [r5, r0] - subs r2, #0x88 - ldr r4, _0805DF48 @ =gRoomControls - ldrh r0, [r4, #6] - subs r2, r2, r0 - movs r1, #0x32 - ldrsh r0, [r5, r1] - subs r0, #0x40 - ldrh r1, [r4, #8] - subs r0, r0, r1 - adds r1, r2, #0 - muls r1, r2, r1 - adds r2, r0, #0 - muls r2, r0, r2 - adds r0, r2, #0 - adds r1, r1, r0 - movs r0, #0x90 - lsls r0, r0, #4 - cmp r1, r0 - bgt _0805DF42 - movs r0, #0 - movs r1, #2 - strb r1, [r3, #0xc] - strb r0, [r3, #0xd] - movs r0, #0x78 - strb r0, [r3, #0xe] - movs r0, #2 - bl sub_08078A90 - bl sub_08078B48 - movs r0, #0x64 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805DF1A - ldrh r0, [r4, #6] - adds r0, #0x88 - strh r0, [r2, #0x2e] - ldrh r0, [r4, #8] - adds r0, #0x48 - strh r0, [r2, #0x32] -_0805DF1A: - movs r2, #0x10 - rsbs r2, r2, #0 - adds r0, r5, #0 - movs r1, #8 - bl CreateSpeechBubbleExclamationMark - adds r2, r0, #0 - cmp r2, #0 - beq _0805DF3C - 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] -_0805DF3C: - movs r0, #0x32 - bl SoundReq -_0805DF42: - pop {r4, r5, pc} - .align 2, 0 -_0805DF44: .4byte gPlayerEntity -_0805DF48: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DF4C.inc b/asm/non_matching/manager37/sub_0805DF4C.inc deleted file mode 100644 index 12c63c6c..00000000 --- a/asm/non_matching/manager37/sub_0805DF4C.inc +++ /dev/null @@ -1,40 +0,0 @@ - .syntax unified - push {lr} - adds r1, r0, #0 - ldr r2, _0805DF70 @ =gPlayerEntity - movs r0, #0 - strb r0, [r2, #0x14] - movs r3, #0x36 - ldrsh r0, [r2, r3] - cmp r0, #0 - beq _0805DF78 - movs r1, #0x32 - ldrsh r0, [r2, r1] - ldr r1, _0805DF74 @ =gRoomControls - ldrh r1, [r1, #8] - adds r1, #0x48 - cmp r0, r1 - bge _0805DF92 - strh r1, [r2, #0x32] - b _0805DF92 - .align 2, 0 -_0805DF70: .4byte gPlayerEntity -_0805DF74: .4byte gRoomControls -_0805DF78: - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805DF92 - movs r0, #3 - strb r0, [r1, #0xc] - movs r0, #0x1e - strb r0, [r1, #0xe] - ldr r0, _0805DF94 @ =0x0000164F - bl TextboxNoOverlapFollow -_0805DF92: - pop {pc} - .align 2, 0 -_0805DF94: .4byte 0x0000164F - .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DF98.inc b/asm/non_matching/manager37/sub_0805DF98.inc deleted file mode 100644 index ca1d09b7..00000000 --- a/asm/non_matching/manager37/sub_0805DF98.inc +++ /dev/null @@ -1,28 +0,0 @@ - .syntax unified - push {lr} - adds r2, r0, #0 - ldr r0, _0805DFB4 @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _0805DFCA - ldrb r0, [r2, #0xe] - cmp r0, #0 - beq _0805DFB8 - subs r0, #1 - strb r0, [r2, #0xe] - b _0805DFCA - .align 2, 0 -_0805DFB4: .4byte gTextBox -_0805DFB8: - movs r0, #4 - strb r0, [r2, #0xc] - movs r0, #7 - movs r1, #4 - bl DoFade - movs r0, #0xf6 - bl SoundReq -_0805DFCA: - pop {pc} - .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DFCC.inc b/asm/non_matching/manager37/sub_0805DFCC.inc deleted file mode 100644 index 15c615ad..00000000 --- a/asm/non_matching/manager37/sub_0805DFCC.inc +++ /dev/null @@ -1,14 +0,0 @@ - .syntax unified - push {lr} - ldr r0, _0805DFE4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _0805DFE0 - movs r0, #0x1c - bl ClearGlobalFlag - bl sub_0805E094 -_0805DFE0: - pop {pc} - .align 2, 0 -_0805DFE4: .4byte gFadeControl - .syntax divided diff --git a/asm/non_matching/manager37/sub_0805DFE8.inc b/asm/non_matching/manager37/sub_0805DFE8.inc deleted file mode 100644 index 4742d51b..00000000 --- a/asm/non_matching/manager37/sub_0805DFE8.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805DFFC @ =gUnk_08108DD8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805DFFC: .4byte gUnk_08108DD8 - .syntax divided diff --git a/asm/non_matching/manager37/sub_0805E000.inc b/asm/non_matching/manager37/sub_0805E000.inc deleted file mode 100644 index 4f44fe8c..00000000 --- a/asm/non_matching/manager37/sub_0805E000.inc +++ /dev/null @@ -1,54 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r6, r0, #0 - movs r0, #0x51 - movs r1, #0 - bl CreateEnemy - adds r4, r0, #0 - cmp r4, #0 - beq _0805E062 - ldr r1, _0805E064 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, #0xb0 - strh r0, [r4, #0x2e] - ldrh r0, [r1, #8] - adds r0, #0x48 - strh r0, [r4, #0x32] - adds r0, r4, #0 - adds r0, #0x38 - movs r5, #1 - strb r5, [r0] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldr r0, _0805E068 @ =gScreenTransition - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r5, #0 - ands r0, r1 - cmp r0, #0 - beq _0805E040 - bl DeleteThisEntity -_0805E040: - str r4, [r6, #0x18] - strb r5, [r6, #0xc] - movs r0, #3 - bl sub_08078A90 - ldr r0, _0805E06C @ =gArea - ldr r1, _0805E070 @ =0x00000864 - adds r0, r0, r1 - ldr r1, _0805E074 @ =0x80010000 - str r1, [r0] - movs r0, #6 - movs r1, #4 - bl DoFade - movs r0, #0xf7 - bl SoundReq -_0805E062: - pop {r4, r5, r6, pc} - .align 2, 0 -_0805E064: .4byte gRoomControls -_0805E068: .4byte gScreenTransition -_0805E06C: .4byte gArea -_0805E070: .4byte 0x00000864 -_0805E074: .4byte 0x80010000 - .syntax divided diff --git a/asm/non_matching/manager37/sub_0805E078.inc b/asm/non_matching/manager37/sub_0805E078.inc deleted file mode 100644 index a41aa954..00000000 --- a/asm/non_matching/manager37/sub_0805E078.inc +++ /dev/null @@ -1,16 +0,0 @@ - .syntax unified - push {lr} - adds r1, r0, #0 - ldr r0, _0805E090 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _0805E08E - ldr r1, [r1, #0x18] - movs r0, #1 - strb r0, [r1, #0xd] - bl DeleteThisEntity -_0805E08E: - pop {pc} - .align 2, 0 -_0805E090: .4byte gFadeControl - .syntax divided diff --git a/asm/non_matching/manager37/sub_0805E094.inc b/asm/non_matching/manager37/sub_0805E094.inc deleted file mode 100644 index bacb0723..00000000 --- a/asm/non_matching/manager37/sub_0805E094.inc +++ /dev/null @@ -1,10 +0,0 @@ - .syntax unified - push {lr} - bl sub_0805E5A8 - ldr r0, _0805E0A4 @ =gUnk_0813AC34 - movs r1, #7 - bl sub_0808091C - pop {pc} - .align 2, 0 -_0805E0A4: .4byte gUnk_0813AC34 - .syntax divided diff --git a/src/manager/manager37.c b/src/manager/manager37.c index b9b8cdcc..de139253 100644 --- a/src/manager/manager37.c +++ b/src/manager/manager37.c @@ -1,23 +1,139 @@ #include "manager.h" +#include "structures.h" +#include "functions.h" +#include "flags.h" +#include "textbox.h" +#include "audio.h" +#include "save.h" +#include "object.h" +#include "area.h" +#include "enemy.h" -ASM_FUNC("asm/non_matching/manager37/Manager37_Main.inc", void Manager37_Main()) +extern ScreenTransitionData gUnk_0813AC34; -ASM_FUNC("asm/non_matching/manager37/sub_0805DE50.inc", void sub_0805DE50()) +extern void (*const gUnk_08108DBC[])(Manager*); -ASM_FUNC("asm/non_matching/manager37/sub_0805DE68.inc", void sub_0805DE68()) +extern void (*const gUnk_08108DC4[])(Manager*); -ASM_FUNC("asm/non_matching/manager37/sub_0805DEB8.inc", void sub_0805DEB8()) +extern void (*const gUnk_08108DD8[])(Manager*); -ASM_FUNC("asm/non_matching/manager37/sub_0805DF4C.inc", void sub_0805DF4C()) +void sub_0805E094(void); -ASM_FUNC("asm/non_matching/manager37/sub_0805DF98.inc", void sub_0805DF98()) +extern Entity* CreateSpeechBubbleExclamationMark(Entity*, u32, u32); -ASM_FUNC("asm/non_matching/manager37/sub_0805DFCC.inc", void sub_0805DFCC()) +void Manager37_Main(Manager* this) { + gUnk_08108DBC[this->unk_0a](this); +} -ASM_FUNC("asm/non_matching/manager37/sub_0805DFE8.inc", void sub_0805DFE8()) +void sub_0805DE50(Manager* this) { + gUnk_08108DC4[this->action](this); +} -ASM_FUNC("asm/non_matching/manager37/sub_0805E000.inc", void sub_0805E000()) +void sub_0805DE68(Manager* this) { + if (CheckLocalFlag(0x7b) == 0) { + DeleteThisEntity(); + } + this->action = 1; + gScreenTransition.field_0x38 = 0; + gScreenTransition.field_0x39 = 0x0f; + *(u8*)&gScreenTransition.field_0x3a = 0x20; + *((u8*)&gScreenTransition.field_0x3a+1) = 0x20; +#if !defined(EU) && !defined(JP) && !defined(DEMO_JP) + gSave.unk498 = 0x1194; +#endif +} -ASM_FUNC("asm/non_matching/manager37/sub_0805E078.inc", void sub_0805E078()) +void sub_0805DEB8(Manager* this) { + s32 distX; + s32 distY; + Entity* object; -ASM_FUNC("asm/non_matching/manager37/sub_0805E094.inc", void sub_0805E094()) + distX = gPlayerEntity.x.HALF.HI - (gRoomControls.roomOriginX+0x88); + distY = gPlayerEntity.y.HALF.HI - (gRoomControls.roomOriginY+0x40); + if (distX * distX + distY * distY < 0x901) { + this->action = 2; + this->unk_0d = 0; + this->unk_0e = 0x78; + sub_08078A90(2); + sub_08078B48(); + object = CreateObject(OBJECT_64, 0, 0); + if (object != NULL) { + object->x.HALF.HI = gRoomControls.roomOriginX + 0x88; + object->y.HALF.HI = gRoomControls.roomOriginY + 0x48; + } + object = CreateSpeechBubbleExclamationMark(&gPlayerEntity, 8, 0xfffffff0); + if (object != NULL) { + object->spritePriority.b0 = 3; + } + SoundReq(BGM_VAATI_WRATH); + } +} + +void sub_0805DF4C(Manager* this) { + gPlayerEntity.animationState = 0; + if (gPlayerEntity.height.HALF.HI != 0) { + if (gPlayerEntity.y.HALF.HI < (gRoomControls.roomOriginY + 0x48)) { + gPlayerEntity.y.HALF.HI = gRoomControls.roomOriginY + 0x48; + } + } else { + if (--this->unk_0e == 0) { + this->action = 3; + this->unk_0e = 0x1e; + TextboxNoOverlapFollow(0x164f); + } + } +} + +void sub_0805DF98(Manager* this) { + if ((gTextBox.doTextBox & 0x7f) == 0) { + if (this->unk_0e != 0) { + this->unk_0e -= 1; + } else { + this->action = 4; + DoFade(7, 4); + SoundReq(SFX_EVAPORATE); + } + } +} + +void sub_0805DFCC(void) { + if (gFadeControl.active == 0) { + ClearGlobalFlag(ZELDA_CHASE); + sub_0805E094(); + } +} + +void sub_0805DFE8(Manager* this) { + gUnk_08108DD8[this->action](this); +} + +void sub_0805E000(Manager* this) { + Entity* enemy = CreateEnemy(VAATI_WRATH, 0); + if (enemy != NULL) { + enemy->x.HALF.HI = gRoomControls.roomOriginX + 0xb0; + enemy->y.HALF.HI = gRoomControls.roomOriginY + 0x48; + enemy->collisionLayer = 1; + UpdateSpriteForCollisionLayer(enemy); + if ((gScreenTransition.field_0x38 & 1) != 0) { + DeleteThisEntity(); + } + *(Entity**)this->unk_18 = enemy; + this->action = 1; + sub_08078A90(3); + gArea.pMusicIndex = 0x80010000; + DoFade(6, 4); + SoundReq(SFX_APPARATE); + } +} + +void sub_0805E078(Manager* this) { + if (gFadeControl.active == 0) { + *(u8*)(((int*)this->unk_18)[0] + 0xd) = 1; + DeleteThisEntity(); + } +} + +void sub_0805E094(void) { + sub_0805E5A8(); + sub_0808091C((ScreenTransitionData*)&gUnk_0813AC34, 7); +} From 08659c40018df88aa4988043be80b4f68669cb5f Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 26 Sep 2021 00:42:20 +0200 Subject: [PATCH 37/64] Decompile manager12 --- asm/non_matching/manager12/Manager12_Main.inc | 32 ---- .../manager12/TryLoadPrologueHyruleTown.inc | 65 ------- asm/non_matching/manager12/sub_08059A2C.inc | 23 --- asm/non_matching/manager12/sub_08059A58.inc | 87 --------- asm/non_matching/manager12/sub_08059B18.inc | 172 ----------------- asm/non_matching/manager12/sub_08059CC0.inc | 41 ---- include/room.h | 3 +- include/save.h | 3 +- src/manager/manager12.c | 177 +++++++++++++++++- 9 files changed, 173 insertions(+), 430 deletions(-) delete mode 100644 asm/non_matching/manager12/Manager12_Main.inc delete mode 100644 asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc delete mode 100644 asm/non_matching/manager12/sub_08059A2C.inc delete mode 100644 asm/non_matching/manager12/sub_08059A58.inc delete mode 100644 asm/non_matching/manager12/sub_08059B18.inc delete mode 100644 asm/non_matching/manager12/sub_08059CC0.inc diff --git a/asm/non_matching/manager12/Manager12_Main.inc b/asm/non_matching/manager12/Manager12_Main.inc deleted file mode 100644 index 27e66c32..00000000 --- a/asm/non_matching/manager12/Manager12_Main.inc +++ /dev/null @@ -1,32 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08059A20 - movs r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #0xff - strb r0, [r1] - subs r1, #1 - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - ldr r1, _08059A28 @ =sub_08059A2C - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 -_08059A20: - adds r0, r4, #0 - bl sub_08059A58 - pop {r4, pc} - .align 2, 0 -_08059A28: .4byte sub_08059A2C - .syntax divided diff --git a/asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc b/asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc deleted file mode 100644 index 366a47e2..00000000 --- a/asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc +++ /dev/null @@ -1,65 +0,0 @@ - .syntax unified - push {r4, lr} - ldr r0, _08059D68 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x15 - beq _08059D78 - ldr r0, _08059D6C @ =gUnk_08108398 - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059D36 - movs r0, #0 - adds r1, r4, #0 - bl sub_08059CC0 -_08059D36: - ldr r0, _08059D70 @ =gUnk_081083AE - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059D52 - movs r0, #1 - adds r1, r4, #0 - bl sub_08059CC0 - cmp r4, #2 - bne _08059D52 - bl sub_08059B18 -_08059D52: - ldr r0, _08059D74 @ =gUnk_081083C4 - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059DA0 - movs r0, #2 - adds r1, r4, #0 - bl sub_08059CC0 - b _08059DA0 - .align 2, 0 -_08059D68: .4byte gRoomControls -_08059D6C: .4byte gUnk_08108398 -_08059D70: .4byte gUnk_081083AE -_08059D74: .4byte gUnk_081083C4 -_08059D78: - ldr r0, _08059DA4 @ =gUnk_081083DA - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059D8C - movs r0, #0 - adds r1, r4, #0 - bl sub_08059CC0 -_08059D8C: - ldr r0, _08059DA8 @ =gUnk_081083F2 - bl sub_08056300 - adds r4, r0, #0 - cmp r4, #0xff - beq _08059DA0 - movs r0, #2 - adds r1, r4, #0 - bl sub_08059CC0 -_08059DA0: - pop {r4, pc} - .align 2, 0 -_08059DA4: .4byte gUnk_081083DA -_08059DA8: .4byte gUnk_081083F2 - .syntax divided diff --git a/asm/non_matching/manager12/sub_08059A2C.inc b/asm/non_matching/manager12/sub_08059A2C.inc deleted file mode 100644 index 3288c841..00000000 --- a/asm/non_matching/manager12/sub_08059A2C.inc +++ /dev/null @@ -1,23 +0,0 @@ - .syntax unified - push {lr} - adds r2, r0, #0 - ldr r1, _08059A54 @ =gRoomVars - movs r0, #0xff - strb r0, [r1, #0x12] - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r1, #0x11] - strb r0, [r1, #0x10] - adds r1, r2, #0 - adds r1, #0x22 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - subs r1, #1 - strb r0, [r1] - adds r0, r2, #0 - bl sub_08059A58 - pop {pc} - .align 2, 0 -_08059A54: .4byte gRoomVars - .syntax divided diff --git a/asm/non_matching/manager12/sub_08059A58.inc b/asm/non_matching/manager12/sub_08059A58.inc deleted file mode 100644 index 52e7b5e5..00000000 --- a/asm/non_matching/manager12/sub_08059A58.inc +++ /dev/null @@ -1,87 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _08059AC4 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x15 - beq _08059AD4 - adds r4, r5, #0 - adds r4, #0x20 - ldr r3, _08059AC8 @ =gUnk_08108398 - adds r0, r5, #0 - movs r1, #0 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059A80 - ldrb r1, [r4] - movs r0, #0 - bl sub_08059CC0 -_08059A80: - adds r4, r5, #0 - adds r4, #0x21 - ldr r3, _08059ACC @ =gUnk_081083AE - adds r0, r5, #0 - movs r1, #1 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059AA6 - ldrb r1, [r4] - movs r0, #1 - bl sub_08059CC0 - ldrb r0, [r4] - cmp r0, #2 - bne _08059AA6 - bl sub_08059B18 -_08059AA6: - adds r4, r5, #0 - adds r4, #0x22 - ldr r3, _08059AD0 @ =gUnk_081083C4 - adds r0, r5, #0 - movs r1, #2 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059B0C - ldrb r1, [r4] - movs r0, #2 - bl sub_08059CC0 - b _08059B0C - .align 2, 0 -_08059AC4: .4byte gRoomControls -_08059AC8: .4byte gUnk_08108398 -_08059ACC: .4byte gUnk_081083AE -_08059AD0: .4byte gUnk_081083C4 -_08059AD4: - adds r4, r5, #0 - adds r4, #0x20 - ldr r3, _08059B10 @ =gUnk_081083DA - adds r0, r5, #0 - movs r1, #0 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059AF0 - ldrb r1, [r4] - movs r0, #0 - bl sub_08059CC0 -_08059AF0: - adds r4, r5, #0 - adds r4, #0x22 - ldr r3, _08059B14 @ =gUnk_081083F2 - adds r0, r5, #0 - movs r1, #2 - adds r2, r4, #0 - bl sub_08059C8C - cmp r0, #0 - beq _08059B0C - ldrb r1, [r4] - movs r0, #2 - bl sub_08059CC0 -_08059B0C: - pop {r4, r5, pc} - .align 2, 0 -_08059B10: .4byte gUnk_081083DA -_08059B14: .4byte gUnk_081083F2 - .syntax divided diff --git a/asm/non_matching/manager12/sub_08059B18.inc b/asm/non_matching/manager12/sub_08059B18.inc deleted file mode 100644 index ba1c74d4..00000000 --- a/asm/non_matching/manager12/sub_08059B18.inc +++ /dev/null @@ -1,172 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - sub sp, #4 - movs r0, #0x18 - bl CheckGlobalFlag - cmp r0, #0 - beq _08059BEC - movs r6, #0 - movs r0, #0x3f - mov sb, r0 - movs r2, #0xc4 - lsls r2, r2, #1 - mov r8, r2 -_08059B38: - movs r5, #0 - lsls r1, r6, #4 - mov r2, r8 - lsrs r0, r2, #4 - mov r2, sb - ands r0, r2 - lsls r3, r0, #6 - movs r7, #0x28 - ldr r0, _08059BD8 @ =0x000004AB - adds r4, r1, r0 -_08059B4C: - lsrs r1, r7, #4 - mov r2, sb - ands r1, r2 - orrs r1, r3 - adds r0, r4, #0 - movs r2, #1 - str r3, [sp] - bl sub_0807B9B8 - adds r7, #0x10 - adds r4, #1 - adds r5, #1 - ldr r3, [sp] - cmp r5, #3 - bls _08059B4C - movs r0, #0x10 - add r8, r0 - adds r6, #1 - cmp r6, #3 - bls _08059B38 - movs r6, #0 - movs r3, #0x3f -_08059B78: - movs r5, #0 - lsls r1, r6, #4 - adds r6, #1 - mov r8, r6 - movs r2, #0xc4 - lsls r2, r2, #1 - adds r0, r1, r2 - lsrs r0, r0, #4 - ands r0, r3 - lsls r7, r0, #6 - movs r6, #0x28 - movs r0, #0x88 - lsls r0, r0, #3 - adds r4, r1, r0 -_08059B94: - lsrs r1, r6, #4 - ands r1, r3 - orrs r1, r7 - adds r0, r4, #0 - movs r2, #2 - str r3, [sp] - bl sub_0807B9B8 - adds r6, #0x10 - adds r4, #1 - adds r5, #1 - ldr r3, [sp] - cmp r5, #3 - bls _08059B94 - mov r6, r8 - cmp r6, #2 - bls _08059B78 - ldr r1, _08059BDC @ =0x000005C2 - movs r0, #0xd6 - movs r2, #2 - bl sub_0807B9B8 - ldr r1, _08059BE0 @ =0x000005C3 - movs r0, #0xd7 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059BE4 @ =gUnk_086E8460 - ldr r1, _08059BE8 @ =0x06001800 - movs r2, #0x80 - lsls r2, r2, #4 - bl LoadResourceAsync - b _08059C5E - .align 2, 0 -_08059BD8: .4byte 0x000004AB -_08059BDC: .4byte 0x000005C2 -_08059BE0: .4byte 0x000005C3 -_08059BE4: .4byte gUnk_086E8460 -_08059BE8: .4byte 0x06001800 -_08059BEC: - movs r0, #0x19 - bl CheckGlobalFlag - cmp r0, #0 - beq _08059C5E - movs r6, #0 - movs r3, #0x3f -_08059BFA: - movs r5, #0 - lsls r1, r6, #4 - adds r6, #1 - mov r8, r6 - movs r2, #0xc4 - lsls r2, r2, #1 - adds r0, r1, r2 - lsrs r0, r0, #4 - ands r0, r3 - lsls r7, r0, #6 - movs r6, #0x28 - ldr r0, _08059C68 @ =0x000004A6 - adds r4, r1, r0 -_08059C14: - lsrs r1, r6, #4 - ands r1, r3 - orrs r1, r7 - adds r0, r4, #0 - movs r2, #1 - str r3, [sp] - bl sub_0807B9B8 - adds r6, #0x10 - adds r4, #1 - adds r5, #1 - ldr r3, [sp] - cmp r5, #3 - bls _08059C14 - mov r6, r8 - cmp r6, #4 - bls _08059BFA - ldr r0, _08059C6C @ =0x00000444 - ldr r1, _08059C70 @ =0x00000602 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059C74 @ =0x00000445 - ldr r1, _08059C78 @ =0x00000605 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059C7C @ =0x00000454 - ldr r1, _08059C80 @ =0x00000642 - movs r2, #2 - bl sub_0807B9B8 - ldr r0, _08059C84 @ =0x00000455 - ldr r1, _08059C88 @ =0x00000645 - movs r2, #2 - bl sub_0807B9B8 -_08059C5E: - add sp, #4 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08059C68: .4byte 0x000004A6 -_08059C6C: .4byte 0x00000444 -_08059C70: .4byte 0x00000602 -_08059C74: .4byte 0x00000445 -_08059C78: .4byte 0x00000605 -_08059C7C: .4byte 0x00000454 -_08059C80: .4byte 0x00000642 -_08059C84: .4byte 0x00000455 -_08059C88: .4byte 0x00000645 - .syntax divided diff --git a/asm/non_matching/manager12/sub_08059CC0.inc b/asm/non_matching/manager12/sub_08059CC0.inc deleted file mode 100644 index e0d66ece..00000000 --- a/asm/non_matching/manager12/sub_08059CC0.inc +++ /dev/null @@ -1,41 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r2, r1, #0 - ldr r1, _08059CDC @ =gRoomVars - adds r1, #0x10 - adds r0, r0, r1 - strb r2, [r0] - ldr r0, _08059CE0 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x15 - beq _08059CE8 - lsls r1, r2, #4 - ldr r0, _08059CE4 @ =gUnk_08108408 - b _08059CEC - .align 2, 0 -_08059CDC: .4byte gRoomVars -_08059CE0: .4byte gRoomControls -_08059CE4: .4byte gUnk_08108408 -_08059CE8: - lsls r1, r2, #4 - ldr r0, _08059D10 @ =gUnk_08108468 -_08059CEC: - adds r6, r1, r0 - ldr r0, [r6] - ldr r4, _08059D14 @ =gGlobalGfxAndPalettes - adds r0, r0, r4 - ldr r1, [r6, #4] - movs r5, #0x80 - lsls r5, r5, #5 - adds r2, r5, #0 - bl LoadResourceAsync - ldr r0, [r6, #8] - adds r0, r0, r4 - ldr r1, [r6, #0xc] - adds r2, r5, #0 - bl LoadResourceAsync - pop {r4, r5, r6, pc} - .align 2, 0 -_08059D10: .4byte gUnk_08108468 -_08059D14: .4byte gGlobalGfxAndPalettes - .syntax divided diff --git a/include/room.h b/include/room.h index f192c164..c26c9ed3 100644 --- a/include/room.h +++ b/include/room.h @@ -46,8 +46,7 @@ typedef struct { u8 field_0x9; u8 unk2; u8 filler2[5]; - u8 unk_10; - u8 filler6[3]; + u8 unk_10[4]; u32 roomFlags; u32 unk3; u8 filler4[48]; diff --git a/include/save.h b/include/save.h index 65258dee..dbb2b6b3 100644 --- a/include/save.h +++ b/include/save.h @@ -41,7 +41,8 @@ typedef struct { /*0x141*/ u8 unk141[0x34f]; /*0x490*/ u32 unk490; /*0x494*/ u32 unk494; - /*0x498*/ u8 filler498[0x1C]; + /*0x498*/ u32 unk498; + /*0x49C*/ u8 filler49C[0x18]; } SaveFile; extern SaveFile gSave; diff --git a/src/manager/manager12.c b/src/manager/manager12.c index 15759fdd..35d431d2 100644 --- a/src/manager/manager12.c +++ b/src/manager/manager12.c @@ -1,15 +1,178 @@ #include "manager.h" +#include "room.h" +#include "functions.h" +#include "flags.h" -ASM_FUNC("asm/non_matching/manager12/Manager12_Main.inc", void Manager12_Main()) +typedef struct { + Manager manager; + u8 field_0x20; + u8 field_0x21; + u8 field_0x22; +} Manager12; -ASM_FUNC("asm/non_matching/manager12/sub_08059A2C.inc", void sub_08059A2C()) +void sub_08059A58(Manager12*); -ASM_FUNC("asm/non_matching/manager12/sub_08059A58.inc", void sub_08059A58()) +void sub_08059A2C(Manager12*); -ASM_FUNC("asm/non_matching/manager12/sub_08059B18.inc", void sub_08059B18()) +u32 sub_08056300(u16* arr); +extern u16 gUnk_081083DA; +extern u16 gUnk_081083F2; +extern u16 gUnk_08108398; +extern u16 gUnk_081083AE; +extern u16 gUnk_081083C4; -ASM_FUNC("asm/non_matching/manager12/sub_08059C8C.inc", void sub_08059C8C()) +void sub_08059CC0(u32, u32); +void sub_08059B18(); -ASM_FUNC("asm/non_matching/manager12/sub_08059CC0.inc", void sub_08059CC0()) +bool32 sub_08059C8C(Manager12*, u32, u8*, u16*); -ASM_FUNC("asm/non_matching/manager12/TryLoadPrologueHyruleTown.inc", void TryLoadPrologueHyruleTown()) +extern void sub_0807B9B8(s32, s32, s32); +extern u32 gUnk_086E8460; + +typedef struct { + u32 field_0x0; + u32 field_0x4; + u32 field_0x8; + u32 field_0xc; +} Unknown; + +extern Unknown gUnk_08108468[]; +extern Unknown gUnk_08108408[]; +extern const u8 gGlobalGfxAndPalettes[]; + + +void Manager12_Main(Manager12* this) { + if (this->manager.action == 0) { + this->manager.action = 1; + this->field_0x22 = 0xff; + this->field_0x21 = 0xff; + this->field_0x20 = 0xff; + sub_08052D74(this, sub_08059A2C, NULL); + sub_0805E3A0(this, 6); + } + sub_08059A58(this); +} + +void sub_08059A2C(Manager12* this) { + gRoomVars.unk_10[2] = 0xff; + gRoomVars.unk_10[1] = 0xff; + gRoomVars.unk_10[0] = 0xff; + this->field_0x22 = 0xff; + this->field_0x21 = 0xff; + this->field_0x20 = 0xff; + sub_08059A58(this); +} + +void sub_08059A58(Manager12* this) { + if (gRoomControls.areaID != 0x15) { + if (sub_08059C8C(this, 0, &this->field_0x20, &gUnk_08108398) != 0) { + sub_08059CC0(0, (u32)this->field_0x20); + } + if (sub_08059C8C(this, 1, &this->field_0x21, &gUnk_081083AE) != 0) { + sub_08059CC0(1, this->field_0x21); + if (this->field_0x21 == 2) { + sub_08059B18(); + } + } + if (sub_08059C8C(this, 2, &this->field_0x22, &gUnk_081083C4) != 0) { + sub_08059CC0(2, (u32)this->field_0x22); + } + } else { + if (sub_08059C8C(this, 0, &this->field_0x20, &gUnk_081083DA) != 0) { + sub_08059CC0(0, (u32)this->field_0x20); + } + if (sub_08059C8C(this, 2, &this->field_0x22, &gUnk_081083F2) != 0) { + sub_08059CC0(2, (u32)this->field_0x22); + } + } +} + + +#define COMMON(tmp2, tmp1) ((tmp2) >> 4 & 0x3f) | (((tmp1)+0x188U) >> 4 & 0x3f) << 6 +void sub_08059B18(void) { + u32 loopVar; + u32 innerLoopVar; + + if (CheckGlobalFlag(TATEKAKE_HOUSE) != 0) { + for(loopVar = 0; loopVar < 4; ++loopVar) { + for(innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { + sub_0807B9B8(loopVar * 0x10 + 0x4ab + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 1); + } + } + + for(loopVar = 0; loopVar < 3; ++loopVar) { + for(innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { + sub_0807B9B8(loopVar * 0x10 + 0x440 + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 2); + } + } + sub_0807B9B8(0xd6, 0x5c2, 2); + sub_0807B9B8(0xd7, 0x5c3, 2); + LoadResourceAsync(&gUnk_086E8460, 0x6001800, 0x800); + } else { + if (CheckGlobalFlag(TATEKAKE_TOCHU) != 0) { + for(loopVar = 0; loopVar < 5; ++loopVar) { + for(innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { + sub_0807B9B8(loopVar * 0x10 + 0x4a6 + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 1); + } + } + sub_0807B9B8(0x444, 0x602, 2); + sub_0807B9B8(0x445, 0x605, 2); + sub_0807B9B8(0x454, 0x642, 2); + sub_0807B9B8(0x455, 0x645, 2); + } + } +} + +bool32 sub_08059C8C(Manager12* this, u32 param_2, u8* param_3, u16* param_4) { + bool32 bVar2; + + *param_3 = sub_08056300(param_4); + if ((*param_3 != 0xff) && (gRoomVars.unk_10[param_2] != *param_3)) { + gRoomVars.unk_10[param_2] = *param_3; + return TRUE; + } else { + return FALSE; + } +} + + +void sub_08059CC0(u32 param_1, u32 param_2) { + Unknown* unknown; + + gRoomVars.unk_10[param_1] = param_2; + if (gRoomControls.areaID != 0x15) { + unknown = &gUnk_08108408[param_2]; + } else { + unknown = &gUnk_08108468[param_2]; + } + LoadResourceAsync((void*)&gGlobalGfxAndPalettes + unknown->field_0x0, unknown->field_0x4, 0x1000); + LoadResourceAsync((void*)&gGlobalGfxAndPalettes + unknown->field_0x8, unknown->field_0xc, 0x1000); +} + +void TryLoadPrologueHyruleTown(void) { + u32 tmp; + + if (gRoomControls.areaID != 0x15) { + tmp = sub_08056300(&gUnk_08108398); + if (tmp != 0xff) { + sub_08059CC0(0, tmp); + } + tmp = sub_08056300(&gUnk_081083AE); + if ((tmp != 0xff) && (sub_08059CC0(1, tmp), tmp == 2)) { + sub_08059B18(); + } + tmp = sub_08056300(&gUnk_081083C4); + if (tmp != 0xff) { + sub_08059CC0(2, tmp); + } + } else { + tmp = sub_08056300(&gUnk_081083DA); + if (tmp != 0xff) { + sub_08059CC0(0, tmp); + } + tmp = sub_08056300(&gUnk_081083F2); + if (tmp != 0xff) { + sub_08059CC0(2, tmp); + } + } +} From 9283aa5afecdcb4632d95b40f1c0f0a2bbb35b57 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 26 Sep 2021 14:05:32 +0200 Subject: [PATCH 38/64] Decompile manager32 --- asm/non_matching/eu/sub_0801B4C8.inc | 2 +- asm/non_matching/eu/sub_08075338.inc | 2 +- asm/non_matching/eu/sub_08075ADC.inc | 2 +- asm/non_matching/manager32/Manager32_Main.inc | 25 --- asm/non_matching/manager32/sub_0805D7DC.inc | 77 -------- asm/non_matching/manager32/sub_0805D860.inc | 84 -------- asm/non_matching/manager32/sub_0805D900.inc | 75 ------- asm/non_matching/manager32/sub_0805D98C.inc | 43 ---- asm/non_matching/manager32/sub_0805D9D8.inc | 25 --- asm/non_matching/manager32/sub_0805DA08.inc | 65 ------- asm/non_matching/manager32/sub_0805DA90.inc | 40 ---- asm/non_matching/managerF/ManagerF_Main.inc | 12 -- asm/non_matching/managerF/SetDirtTile.inc | 19 -- asm/non_matching/managerF/sub_08058F44.inc | 31 --- asm/non_matching/managerF/sub_08058F84.inc | 23 --- asm/non_matching/managerF/sub_08059064.inc | 26 --- asm/non_matching/managerF/sub_08059094.inc | 37 ---- asm/non_matching/managerF/sub_080590E0.inc | 34 ---- asm/non_matching/managerF/sub_08059278.inc | 13 -- asm/non_matching/managerF/sub_08059290.inc | 11 -- asm/non_matching/managerF/sub_080592A4.inc | 34 ---- asm/non_matching/managerF/sub_080592EC.inc | 17 -- asm/non_matching/managerF/sub_0805930C.inc | 32 --- asm/non_matching/managerF/sub_08059368.inc | 18 -- asm/non_matching/managerF/sub_0805938C.inc | 33 ---- asm/non_matching/managerF/sub_08059424.inc | 42 ---- asm/non_matching/managerF/sub_0805947C.inc | 1 - asm/non_matching/managerF/sub_080594DC.inc | 1 - include/room.h | 4 +- src/manager/manager12.c | 26 +-- src/manager/manager13.c | 4 +- src/manager/manager15.c | 11 +- src/manager/manager18.c | 3 +- src/manager/manager1B.c | 5 +- src/manager/manager2.c | 10 +- src/manager/manager21.c | 3 +- src/manager/manager23.c | 20 +- src/manager/manager31.c | 16 +- src/manager/manager32.c | 183 +++++++++++++++++- src/manager/manager33.c | 5 +- src/manager/manager34.c | 2 +- src/manager/manager37.c | 6 +- src/manager/manager7.c | 8 +- src/manager/manager8.c | 4 +- src/manager/managerF.c | 49 ----- 45 files changed, 236 insertions(+), 947 deletions(-) delete mode 100644 asm/non_matching/manager32/Manager32_Main.inc delete mode 100644 asm/non_matching/manager32/sub_0805D7DC.inc delete mode 100644 asm/non_matching/manager32/sub_0805D860.inc delete mode 100644 asm/non_matching/manager32/sub_0805D900.inc delete mode 100644 asm/non_matching/manager32/sub_0805D98C.inc delete mode 100644 asm/non_matching/manager32/sub_0805D9D8.inc delete mode 100644 asm/non_matching/manager32/sub_0805DA08.inc delete mode 100644 asm/non_matching/manager32/sub_0805DA90.inc delete mode 100644 asm/non_matching/managerF/ManagerF_Main.inc delete mode 100644 asm/non_matching/managerF/SetDirtTile.inc delete mode 100644 asm/non_matching/managerF/sub_08058F44.inc delete mode 100644 asm/non_matching/managerF/sub_08058F84.inc delete mode 100644 asm/non_matching/managerF/sub_08059064.inc delete mode 100644 asm/non_matching/managerF/sub_08059094.inc delete mode 100644 asm/non_matching/managerF/sub_080590E0.inc delete mode 100644 asm/non_matching/managerF/sub_08059278.inc delete mode 100644 asm/non_matching/managerF/sub_08059290.inc delete mode 100644 asm/non_matching/managerF/sub_080592A4.inc delete mode 100644 asm/non_matching/managerF/sub_080592EC.inc delete mode 100644 asm/non_matching/managerF/sub_0805930C.inc delete mode 100644 asm/non_matching/managerF/sub_08059368.inc delete mode 100644 asm/non_matching/managerF/sub_0805938C.inc delete mode 100644 asm/non_matching/managerF/sub_08059424.inc delete mode 100644 src/manager/managerF.c diff --git a/asm/non_matching/eu/sub_0801B4C8.inc b/asm/non_matching/eu/sub_0801B4C8.inc index 33416c34..53ee5df6 100644 --- a/asm/non_matching/eu/sub_0801B4C8.inc +++ b/asm/non_matching/eu/sub_0801B4C8.inc @@ -100,4 +100,4 @@ _0801B5A4: adds r0, r4, #0 bl sub_0801B584 pop {r4, r5, pc} - .syntax divided \ No newline at end of file + .syntax divided diff --git a/asm/non_matching/eu/sub_08075338.inc b/asm/non_matching/eu/sub_08075338.inc index 1ab34548..384a2137 100644 --- a/asm/non_matching/eu/sub_08075338.inc +++ b/asm/non_matching/eu/sub_08075338.inc @@ -177,4 +177,4 @@ _08074EE2: pop {r4, r5, r6, r7, pc} .align 2, 0 _08074EE4: .4byte gPlayerEntity - .syntax divided \ No newline at end of file + .syntax divided diff --git a/asm/non_matching/eu/sub_08075ADC.inc b/asm/non_matching/eu/sub_08075ADC.inc index 5ebc348f..e9bdb235 100644 --- a/asm/non_matching/eu/sub_08075ADC.inc +++ b/asm/non_matching/eu/sub_08075ADC.inc @@ -55,4 +55,4 @@ _08075578: bl UpdateItemAnim _0807557E: pop {r4, r5, pc} - .syntax divided \ No newline at end of file + .syntax divided diff --git a/asm/non_matching/manager32/Manager32_Main.inc b/asm/non_matching/manager32/Manager32_Main.inc deleted file mode 100644 index 7b7b447b..00000000 --- a/asm/non_matching/manager32/Manager32_Main.inc +++ /dev/null @@ -1,25 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0805D7D4 @ =gUnk_08108D7C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldr r0, _0805D7D8 @ =gScreenTransition - ldr r0, [r0] - lsls r0, r0, #4 - str r0, [r4, #0x24] - adds r0, r4, #0 - bl sub_0805D9D8 - ldr r0, [r4, #0x20] - ldr r1, [r4, #0x28] - ldr r2, [r4, #0x24] - bl sub_0805DA08 - pop {r4, pc} - .align 2, 0 -_0805D7D4: .4byte gUnk_08108D7C -_0805D7D8: .4byte gScreenTransition - .syntax divided diff --git a/asm/non_matching/manager32/sub_0805D7DC.inc b/asm/non_matching/manager32/sub_0805D7DC.inc deleted file mode 100644 index 51d63c09..00000000 --- a/asm/non_matching/manager32/sub_0805D7DC.inc +++ /dev/null @@ -1,77 +0,0 @@ - .syntax unified - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xa] - movs r2, #2 - cmp r0, #0 - bne _0805D7EA - movs r2, #1 -_0805D7EA: - movs r0, #0 - strb r2, [r1, #0xc] - str r0, [r1, #0x20] - str r0, [r1, #0x24] - ldr r0, _0805D80C @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x78 - beq _0805D83C - cmp r0, #0x78 - bgt _0805D816 - cmp r0, #7 - beq _0805D828 - cmp r0, #7 - bgt _0805D810 - cmp r0, #3 - beq _0805D82C - b _0805D828 - .align 2, 0 -_0805D80C: .4byte gRoomControls -_0805D810: - cmp r0, #0x38 - beq _0805D840 - b _0805D828 -_0805D816: - cmp r0, #0x81 - beq _0805D830 - cmp r0, #0x81 - bgt _0805D824 - cmp r0, #0x80 - beq _0805D834 - b _0805D828 -_0805D824: - cmp r0, #0x88 - beq _0805D838 -_0805D828: - movs r1, #0 - b _0805D842 -_0805D82C: - movs r1, #1 - b _0805D842 -_0805D830: - movs r1, #2 - b _0805D842 -_0805D834: - movs r1, #3 - b _0805D842 -_0805D838: - movs r1, #4 - b _0805D842 -_0805D83C: - movs r1, #5 - b _0805D842 -_0805D840: - movs r1, #6 -_0805D842: - ldr r0, _0805D854 @ =gUnk_08108D74 - adds r0, r1, r0 - ldrb r0, [r0] - bl LoadGfxGroup - ldr r1, _0805D858 @ =gScreen - ldr r0, _0805D85C @ =0x00001E04 - strh r0, [r1, #0x2c] - pop {pc} - .align 2, 0 -_0805D854: .4byte gUnk_08108D74 -_0805D858: .4byte gScreen -_0805D85C: .4byte 0x00001E04 - .syntax divided diff --git a/asm/non_matching/manager32/sub_0805D860.inc b/asm/non_matching/manager32/sub_0805D860.inc deleted file mode 100644 index 7e46065a..00000000 --- a/asm/non_matching/manager32/sub_0805D860.inc +++ /dev/null @@ -1,84 +0,0 @@ - .syntax unified - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xd] - cmp r0, #1 - beq _0805D89C - cmp r0, #1 - bgt _0805D874 - cmp r0, #0 - beq _0805D87E - b _0805D8D6 -_0805D874: - cmp r0, #2 - beq _0805D8B0 - cmp r0, #3 - beq _0805D8C2 - b _0805D8D6 -_0805D87E: - movs r0, #1 - strb r0, [r1, #0xd] - movs r0, #0x80 - str r0, [r1, #0x20] - ldr r2, _0805D898 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - b _0805D8F4 - .align 2, 0 -_0805D898: .4byte gScreen -_0805D89C: - ldr r0, [r1, #0x20] - subs r0, #1 - str r0, [r1, #0x20] - cmp r0, #0x10 - bne _0805D8F4 - movs r0, #2 - strb r0, [r1, #0xd] - movs r0, #0x2d - strb r0, [r1, #0xe] - b _0805D8F4 -_0805D8B0: - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D8F4 - movs r0, #3 - strb r0, [r1, #0xd] - b _0805D8F4 -_0805D8C2: - ldr r0, [r1, #0x20] - subs r0, #1 - str r0, [r1, #0x20] - cmp r0, #0 - bne _0805D8F4 - movs r0, #4 - strb r0, [r1, #0xd] - movs r0, #0x3c - strb r0, [r1, #0xe] - b _0805D8F4 -_0805D8D6: - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D8F4 - bl sub_0801E104 - ldr r2, _0805D8F8 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805D8FC @ =0x0000F7FF - ands r0, r1 - strh r0, [r2] - bl DeleteThisEntity -_0805D8F4: - pop {pc} - .align 2, 0 -_0805D8F8: .4byte gScreen -_0805D8FC: .4byte 0x0000F7FF - .syntax divided diff --git a/asm/non_matching/manager32/sub_0805D900.inc b/asm/non_matching/manager32/sub_0805D900.inc deleted file mode 100644 index 957bfdfe..00000000 --- a/asm/non_matching/manager32/sub_0805D900.inc +++ /dev/null @@ -1,75 +0,0 @@ - .syntax unified - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xd] - cmp r0, #1 - beq _0805D938 - cmp r0, #1 - bgt _0805D914 - cmp r0, #0 - beq _0805D91A - b _0805D966 -_0805D914: - cmp r0, #2 - beq _0805D94E - b _0805D966 -_0805D91A: - movs r1, #1 - strb r1, [r2, #0xd] - movs r0, #0x2d - strb r0, [r2, #0xe] - str r1, [r2, #0x20] - ldr r2, _0805D934 @ =gScreen - ldrh r1, [r2] - movs r3, #0x80 - lsls r3, r3, #4 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - b _0805D982 - .align 2, 0 -_0805D934: .4byte gScreen -_0805D938: - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D982 - movs r0, #2 - strb r0, [r2, #0xd] - movs r0, #0x14 - strb r0, [r2, #0xe] - b _0805D982 -_0805D94E: - ldr r0, [r2, #0x20] - adds r0, #1 - str r0, [r2, #0x20] - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805D982 - movs r0, #3 - strb r0, [r2, #0xd] - b _0805D982 -_0805D966: - ldr r0, [r2, #0x20] - adds r0, #4 - str r0, [r2, #0x20] - cmp r0, #0x80 - bls _0805D982 - bl sub_0801E104 - ldr r2, _0805D984 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805D988 @ =0x0000F7FF - ands r0, r1 - strh r0, [r2] - bl DeleteThisEntity -_0805D982: - pop {pc} - .align 2, 0 -_0805D984: .4byte gScreen -_0805D988: .4byte 0x0000F7FF - .syntax divided diff --git a/asm/non_matching/manager32/sub_0805D98C.inc b/asm/non_matching/manager32/sub_0805D98C.inc deleted file mode 100644 index 85c4b0b3..00000000 --- a/asm/non_matching/manager32/sub_0805D98C.inc +++ /dev/null @@ -1,43 +0,0 @@ - .syntax unified - push {lr} - adds r2, r0, #0 - ldr r3, _0805D9D4 @ =gInput - ldrh r1, [r3] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _0805D9A2 - ldr r0, [r2, #0x20] - subs r0, #1 - str r0, [r2, #0x20] -_0805D9A2: - ldrh r1, [r3] - movs r0, #0x80 - ands r0, r1 - adds r3, r1, #0 - cmp r0, #0 - beq _0805D9B4 - ldr r0, [r2, #0x20] - adds r0, #1 - str r0, [r2, #0x20] -_0805D9B4: - movs r0, #0x20 - ands r0, r3 - cmp r0, #0 - beq _0805D9C2 - ldr r0, [r2, #0x28] - subs r0, #1 - str r0, [r2, #0x28] -_0805D9C2: - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0805D9D0 - ldr r0, [r2, #0x28] - adds r0, #1 - str r0, [r2, #0x28] -_0805D9D0: - pop {pc} - .align 2, 0 -_0805D9D4: .4byte gInput - .syntax divided diff --git a/asm/non_matching/manager32/sub_0805D9D8.inc b/asm/non_matching/manager32/sub_0805D9D8.inc deleted file mode 100644 index 5ca9e63a..00000000 --- a/asm/non_matching/manager32/sub_0805D9D8.inc +++ /dev/null @@ -1,25 +0,0 @@ - .syntax unified - push {r4, lr} - ldr r4, [r0, #0x14] - cmp r4, #0 - beq _0805D9FC - ldr r3, _0805DA00 @ =gScreen - ldr r2, _0805DA04 @ =gRoomControls - ldrh r1, [r4, #0x2e] - ldrh r0, [r2, #0xa] - subs r1, r1, r0 - movs r0, #0x80 - subs r0, r0, r1 - strh r0, [r3, #0x2e] - ldrh r1, [r4, #0x32] - ldrh r0, [r2, #0xc] - subs r1, r1, r0 - movs r0, #0x8c - subs r0, r0, r1 - strh r0, [r3, #0x30] -_0805D9FC: - pop {r4, pc} - .align 2, 0 -_0805DA00: .4byte gScreen -_0805DA04: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager32/sub_0805DA08.inc b/asm/non_matching/manager32/sub_0805DA08.inc deleted file mode 100644 index dda42029..00000000 --- a/asm/non_matching/manager32/sub_0805DA08.inc +++ /dev/null @@ -1,65 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - mov sl, r0 - adds r5, r1, #0 - adds r6, r2, #0 - ldr r2, _0805DA78 @ =gUnk_03003DE4 - ldrb r1, [r2] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r1, _0805DA7C @ =gUnk_02017AA0 - adds r4, r0, r1 - movs r3, #0 - mov r8, r2 - mov sb, r1 - ldr r0, _0805DA80 @ =gSineTable - mov ip, r0 - movs r2, #0xff - ldr r1, _0805DA84 @ =gScreen -_0805DA34: - adds r0, r6, r3 - adds r0, r0, r5 - ands r0, r2 - lsls r0, r0, #1 - add r0, ip - movs r7, #0 - ldrsh r0, [r0, r7] - mov r7, sl - muls r7, r0, r7 - adds r0, r7, #0 - lsrs r0, r0, #8 - ldrh r7, [r1, #0x2e] - adds r0, r0, r7 - strh r0, [r4] - adds r4, #2 - adds r3, #1 - adds r5, #0x17 - cmp r3, #0x9f - bls _0805DA34 - mov r0, r8 - ldrb r1, [r0] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - add r0, sb - ldr r1, _0805DA88 @ =0x0400001C - ldr r2, _0805DA8C @ =0xA2600001 - bl sub_0805622C - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805DA78: .4byte gUnk_03003DE4 -_0805DA7C: .4byte gUnk_02017AA0 -_0805DA80: .4byte gSineTable -_0805DA84: .4byte gScreen -_0805DA88: .4byte 0x0400001C -_0805DA8C: .4byte 0xA2600001 - .syntax divided diff --git a/asm/non_matching/manager32/sub_0805DA90.inc b/asm/non_matching/manager32/sub_0805DA90.inc deleted file mode 100644 index 2bb58d66..00000000 --- a/asm/non_matching/manager32/sub_0805DA90.inc +++ /dev/null @@ -1,40 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r1, #0 - bl GetEmptyManager - adds r1, r0, #0 - cmp r1, #0 - beq _0805DAB4 - movs r0, #9 - strb r0, [r1, #8] - movs r0, #0x32 - strb r0, [r1, #9] - strb r4, [r1, #0xa] - str r5, [r1, #0x14] - adds r0, r1, #0 - movs r1, #8 - bl AppendEntityToList -_0805DAB4: - ldr r0, _0805DAD8 @ =gArea - ldr r1, _0805DADC @ =0x0000088C - adds r4, r0, r1 - ldr r0, [r4] - cmp r0, #0 - beq _0805DAD4 - ldr r2, _0805DAE0 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805DAE4 @ =0x0000F7FF - ands r0, r1 - strh r0, [r2] - bl sub_080528F0 - ldr r0, [r4] - bl DeleteManager -_0805DAD4: - pop {r4, r5, pc} - .align 2, 0 -_0805DAD8: .4byte gArea -_0805DADC: .4byte 0x0000088C -_0805DAE0: .4byte gScreen -_0805DAE4: .4byte 0x0000F7FF - .syntax divided diff --git a/asm/non_matching/managerF/ManagerF_Main.inc b/asm/non_matching/managerF/ManagerF_Main.inc deleted file mode 100644 index 6cb92606..00000000 --- a/asm/non_matching/managerF/ManagerF_Main.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _08058EE0 @ =gUnk_08108314 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08058EE0: .4byte gUnk_08108314 - .syntax divided diff --git a/asm/non_matching/managerF/SetDirtTile.inc b/asm/non_matching/managerF/SetDirtTile.inc deleted file mode 100644 index c60b7e19..00000000 --- a/asm/non_matching/managerF/SetDirtTile.inc +++ /dev/null @@ -1,19 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x1d - adds r1, r4, #0 - movs r2, #1 - bl SetTileType - movs r0, #0 - adds r1, r4, #0 - movs r2, #2 - bl SetTileType - subs r4, #0x40 - movs r0, #0 - adds r1, r4, #0 - movs r2, #2 - bl SetTileType - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/managerF/sub_08058F44.inc b/asm/non_matching/managerF/sub_08058F44.inc deleted file mode 100644 index c6c1b113..00000000 --- a/asm/non_matching/managerF/sub_08058F44.inc +++ /dev/null @@ -1,31 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - adds r0, r2, #0 - bl CheckRoomFlag - cmp r0, #0 - bne _08058F80 - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #1 - bl sub_080002A8 - cmp r0, #0x61 - bne _08058F80 - lsrs r1, r4, #4 - movs r2, #0x3f - ands r1, r2 - lsrs r0, r5, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - movs r0, #0x26 - movs r2, #1 - bl SetTileType - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_08058F84 -_08058F80: - pop {r4, r5, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/managerF/sub_08058F84.inc b/asm/non_matching/managerF/sub_08058F84.inc deleted file mode 100644 index 9be2adab..00000000 --- a/asm/non_matching/managerF/sub_08058F84.inc +++ /dev/null @@ -1,23 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r0, #0x21 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08058FA8 - ldr r0, _08058FAC @ =gRoomControls - ldrh r1, [r0, #6] - adds r1, r1, r4 - strh r1, [r2, #0x2e] - ldrh r0, [r0, #8] - adds r0, r0, r5 - strh r0, [r2, #0x32] -_08058FA8: - pop {r4, r5, pc} - .align 2, 0 -_08058FAC: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/managerF/sub_08059064.inc b/asm/non_matching/managerF/sub_08059064.inc deleted file mode 100644 index e0b4e12d..00000000 --- a/asm/non_matching/managerF/sub_08059064.inc +++ /dev/null @@ -1,26 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - movs r0, #0 - movs r1, #0x53 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805908E - movs r0, #2 - strb r0, [r2, #0xe] - ldr r1, _08059090 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r4, [r4, #0x3a] - adds r0, r0, r4 - strh r0, [r2, #0x32] -_0805908E: - pop {r4, pc} - .align 2, 0 -_08059090: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/managerF/sub_08059094.inc b/asm/non_matching/managerF/sub_08059094.inc deleted file mode 100644 index b4956529..00000000 --- a/asm/non_matching/managerF/sub_08059094.inc +++ /dev/null @@ -1,37 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080590B6 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x60 - bl CheckLocalFlag - cmp r0, #0 - bne _080590CC - movs r0, #0x5f - bl SetLocalFlag - b _080590C8 -_080590B6: - movs r0, #0x60 - bl CheckLocalFlag - cmp r0, #0 - beq _080590C8 - movs r0, #0x5f - bl ClearLocalFlag - movs r5, #1 -_080590C8: - cmp r5, #0 - beq _080590D8 -_080590CC: - ldr r0, _080590DC @ =gUnk_080F4B88 - bl LoadRoomEntityList - adds r0, r4, #0 - bl DeleteManager -_080590D8: - pop {r4, r5, pc} - .align 2, 0 -_080590DC: .4byte gUnk_080F4B88 - .syntax divided diff --git a/asm/non_matching/managerF/sub_080590E0.inc b/asm/non_matching/managerF/sub_080590E0.inc deleted file mode 100644 index f48e5002..00000000 --- a/asm/non_matching/managerF/sub_080590E0.inc +++ /dev/null @@ -1,34 +0,0 @@ - .syntax unified - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xc] - cmp r0, #0 - bne _080590F6 - movs r0, #1 - strb r0, [r1, #0xc] - adds r0, r1, #0 - movs r1, #6 - bl sub_0805E3A0 -_080590F6: - movs r0, #0x6c - bl CheckLocalFlag - cmp r0, #0 - beq _0805911A - movs r0, #0x4b - bl CheckLocalFlag - cmp r0, #0 - beq _08059112 - movs r0, #0x4a - bl SetLocalFlag - b _08059120 -_08059112: - movs r0, #0x4a - bl ClearLocalFlag - b _08059120 -_0805911A: - movs r0, #0x4a - bl ClearLocalFlag -_08059120: - pop {pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/managerF/sub_08059278.inc b/asm/non_matching/managerF/sub_08059278.inc deleted file mode 100644 index 25ce854e..00000000 --- a/asm/non_matching/managerF/sub_08059278.inc +++ /dev/null @@ -1,13 +0,0 @@ - .syntax unified - push {lr} - movs r0, #9 - movs r1, #0xf - movs r2, #6 - bl FindEntityByID - cmp r0, #0 - beq _0805928C - bl ManagerF_Main -_0805928C: - pop {pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/managerF/sub_08059290.inc b/asm/non_matching/managerF/sub_08059290.inc deleted file mode 100644 index 22500012..00000000 --- a/asm/non_matching/managerF/sub_08059290.inc +++ /dev/null @@ -1,11 +0,0 @@ - .syntax unified - movs r1, #1 - strb r1, [r0, #0xc] - ldr r1, _0805929C @ =gRoomControls - ldr r0, _080592A0 @ =gPlayerEntity - str r0, [r1, #0x30] - bx lr - .align 2, 0 -_0805929C: .4byte gRoomControls -_080592A0: .4byte gPlayerEntity - .syntax divided diff --git a/asm/non_matching/managerF/sub_080592A4.inc b/asm/non_matching/managerF/sub_080592A4.inc deleted file mode 100644 index aecf7389..00000000 --- a/asm/non_matching/managerF/sub_080592A4.inc +++ /dev/null @@ -1,34 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080592C8 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _080592EA - adds r0, r4, #0 - bl sub_080592EC - bl DeleteThisEntity - b _080592EA -_080592C8: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _080592EA - adds r0, r4, #0 - bl sub_080592EC - adds r0, r4, #0 - bl sub_0805930C -.ifndef EU - movs r0, #0xb7 - lsls r0, r0, #1 - bl SoundReq -.endif - bl DeleteThisEntity -_080592EA: - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/managerF/sub_080592EC.inc b/asm/non_matching/managerF/sub_080592EC.inc deleted file mode 100644 index dcec9327..00000000 --- a/asm/non_matching/managerF/sub_080592EC.inc +++ /dev/null @@ -1,17 +0,0 @@ - .syntax unified - push {lr} - adds r1, r0, #0 - ldrh r0, [r1, #0x38] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - movs r2, #0x3f - ands r0, r2 - ldrh r1, [r1, #0x3a] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - bl SetDirtTile - pop {pc} - .syntax divided diff --git a/asm/non_matching/managerF/sub_0805930C.inc b/asm/non_matching/managerF/sub_0805930C.inc deleted file mode 100644 index dc5ec24c..00000000 --- a/asm/non_matching/managerF/sub_0805930C.inc +++ /dev/null @@ -1,32 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - movs r0, #0xf - movs r1, #0x43 -.ifdef EU - movs r2, #0x0 -.else - movs r2, #0x40 -.endif - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805933A - ldr r1, _0805933C @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r4, [r4, #0x3a] - adds r0, r0, r4 - strh r0, [r2, #0x32] - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] -_0805933A: - pop {r4, pc} - .align 2, 0 -_0805933C: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/managerF/sub_08059368.inc b/asm/non_matching/managerF/sub_08059368.inc deleted file mode 100644 index 4c48609e..00000000 --- a/asm/non_matching/managerF/sub_08059368.inc +++ /dev/null @@ -1,18 +0,0 @@ - .syntax unified - push {lr} - adds r2, r0, #0 - movs r0, #1 - strb r0, [r2, #0xc] - ldr r1, _08059388 @ =gCurrentTextBox - ldrh r0, [r2, #0x3c] - ldrh r1, [r1, #0x28] - cmp r0, r1 - bne _08059384 - ldrh r0, [r2, #0x3e] - bl SetFlag - bl DeleteThisEntity -_08059384: - pop {pc} - .align 2, 0 -_08059388: .4byte gCurrentTextBox - .syntax divided diff --git a/asm/non_matching/managerF/sub_0805938C.inc b/asm/non_matching/managerF/sub_0805938C.inc deleted file mode 100644 index 628a8773..00000000 --- a/asm/non_matching/managerF/sub_0805938C.inc +++ /dev/null @@ -1,33 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - bl sub_080593CC - cmp r0, #0 - beq _080593C8 - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #7 - bls _080593CA - movs r1, #0x38 - ldrsh r0, [r4, r1] - ldr r2, _080593C4 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - movs r3, #0x3a - ldrsh r1, [r4, r3] - ldrh r2, [r2, #8] - subs r1, r1, r2 - movs r2, #0xff - movs r3, #0xa - bl sub_080806BC - b _080593CA - .align 2, 0 -_080593C4: .4byte gRoomControls -_080593C8: - strb r0, [r4, #0xe] -_080593CA: - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/managerF/sub_08059424.inc b/asm/non_matching/managerF/sub_08059424.inc deleted file mode 100644 index 265f6ecb..00000000 --- a/asm/non_matching/managerF/sub_08059424.inc +++ /dev/null @@ -1,42 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059436 - bl DeleteThisEntity -_08059436: - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _08059476 - movs r0, #0xf - movs r1, #0x35 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08059476 - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - ldr r1, _08059478 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r4, [r4, #0x3a] - adds r0, r0, r4 - strh r0, [r2, #0x32] - movs r0, #0xd8 - lsls r0, r0, #1 - bl EnqueueSFX - bl DeleteThisEntity -_08059476: - pop {r4, pc} - .align 2, 0 -_08059478: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/managerF/sub_0805947C.inc b/asm/non_matching/managerF/sub_0805947C.inc index 9c858c5d..3f061bc2 100644 --- a/asm/non_matching/managerF/sub_0805947C.inc +++ b/asm/non_matching/managerF/sub_0805947C.inc @@ -41,5 +41,4 @@ _080594D2: .align 2, 0 _080594D4: .4byte gUnk_08108380 _080594D8: .4byte gPlayerEntity -.ifndef EU .syntax divided diff --git a/asm/non_matching/managerF/sub_080594DC.inc b/asm/non_matching/managerF/sub_080594DC.inc index da9cffeb..0733df2a 100644 --- a/asm/non_matching/managerF/sub_080594DC.inc +++ b/asm/non_matching/managerF/sub_080594DC.inc @@ -48,5 +48,4 @@ _08059540: pop {r4, pc} .align 2, 0 _08059544: .4byte gArea -.endif .syntax divided diff --git a/include/room.h b/include/room.h index c26c9ed3..ff71d1f8 100644 --- a/include/room.h +++ b/include/room.h @@ -45,7 +45,9 @@ typedef struct { u8 field_0x8; u8 field_0x9; u8 unk2; - u8 filler2[5]; + u8 filler2; + u16 field_0xc; + u8 filler3[2]; u8 unk_10[4]; u32 roomFlags; u32 unk3; diff --git a/src/manager/manager12.c b/src/manager/manager12.c index 35d431d2..7ab89be8 100644 --- a/src/manager/manager12.c +++ b/src/manager/manager12.c @@ -40,7 +40,6 @@ extern Unknown gUnk_08108468[]; extern Unknown gUnk_08108408[]; extern const u8 gGlobalGfxAndPalettes[]; - void Manager12_Main(Manager12* this) { if (this->manager.action == 0) { this->manager.action = 1; @@ -87,22 +86,23 @@ void sub_08059A58(Manager12* this) { } } - -#define COMMON(tmp2, tmp1) ((tmp2) >> 4 & 0x3f) | (((tmp1)+0x188U) >> 4 & 0x3f) << 6 +#define COMMON(tmp2, tmp1) ((tmp2) >> 4 & 0x3f) | (((tmp1) + 0x188U) >> 4 & 0x3f) << 6 void sub_08059B18(void) { u32 loopVar; u32 innerLoopVar; if (CheckGlobalFlag(TATEKAKE_HOUSE) != 0) { - for(loopVar = 0; loopVar < 4; ++loopVar) { - for(innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { - sub_0807B9B8(loopVar * 0x10 + 0x4ab + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 1); + for (loopVar = 0; loopVar < 4; ++loopVar) { + for (innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { + sub_0807B9B8(loopVar * 0x10 + 0x4ab + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), + 1); } } - for(loopVar = 0; loopVar < 3; ++loopVar) { - for(innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { - sub_0807B9B8(loopVar * 0x10 + 0x440 + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 2); + for (loopVar = 0; loopVar < 3; ++loopVar) { + for (innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { + sub_0807B9B8(loopVar * 0x10 + 0x440 + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), + 2); } } sub_0807B9B8(0xd6, 0x5c2, 2); @@ -110,9 +110,10 @@ void sub_08059B18(void) { LoadResourceAsync(&gUnk_086E8460, 0x6001800, 0x800); } else { if (CheckGlobalFlag(TATEKAKE_TOCHU) != 0) { - for(loopVar = 0; loopVar < 5; ++loopVar) { - for(innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { - sub_0807B9B8(loopVar * 0x10 + 0x4a6 + innerLoopVar, COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 1); + for (loopVar = 0; loopVar < 5; ++loopVar) { + for (innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) { + sub_0807B9B8(loopVar * 0x10 + 0x4a6 + innerLoopVar, + COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 1); } } sub_0807B9B8(0x444, 0x602, 2); @@ -135,7 +136,6 @@ bool32 sub_08059C8C(Manager12* this, u32 param_2, u8* param_3, u16* param_4) { } } - void sub_08059CC0(u32 param_1, u32 param_2) { Unknown* unknown; diff --git a/src/manager/manager13.c b/src/manager/manager13.c index 5c733063..36598b1e 100644 --- a/src/manager/manager13.c +++ b/src/manager/manager13.c @@ -2,7 +2,7 @@ #include "room.h" #include "object.h" -typedef struct{ +typedef struct { Manager manager; u32 bitfield; } Manager13; @@ -41,7 +41,7 @@ void Manager13_Main(Manager13* this) { while ((spawnData->x != 0) && (type2 < 0x20)) { u32 bitfieldFlag = 1 << type2; if ((((this->bitfield & bitfieldFlag) == 0) && - (CheckRectOnScreen(spawnData->x, spawnData->y, 0x10, 0x10) != 0))) { + (CheckRectOnScreen(spawnData->x, spawnData->y, 0x10, 0x10) != 0))) { Entity* object = CreateObject(OBJECT_1C, spawnData->type, type2); if (object != NULL) { object->frameIndex = spawnData->frameIndex; diff --git a/src/manager/manager15.c b/src/manager/manager15.c index b158fdcb..47a384ac 100644 --- a/src/manager/manager15.c +++ b/src/manager/manager15.c @@ -427,7 +427,7 @@ void sub_0805A94C(Manager15* this) { gScreen.controls.window1VerticalDimensions = (tmp1 << 8 | tmp2); } -NONMATCH("asm/non_matching/manager15/sub_0805A9CC.inc", void sub_0805A9CC(Manager15* this)) { +void sub_0805A9CC(Manager15* this) { int tmp1, tmp2; void* tmp3; gScreen.affine.bg3xOffset = gRoomControls.roomScrollX - this->unk_24 + this->unk_34; @@ -444,17 +444,14 @@ NONMATCH("asm/non_matching/manager15/sub_0805A9CC.inc", void sub_0805A9CC(Manage gScreen.controls.window1HorizontalDimensions = tmp1 << 8 | tmp2; tmp1 = gRoomControls.roomScrollY - this->unk_26 + this->unk_36; gScreen.affine.bg3yOffset = tmp1 & 0x3F; - if (tmp1 < 0) - tmp1 += 0x3F; - tmp3 = (&gBG3Buffer[(tmp1 >> 6 << 9)]); - gScreen.affine.bg2Tilemap = (u32*)tmp3; // TODO .unk5 + tmp3 = (&gBG3Buffer[((tmp1 / 0x40) << 8)]); + gScreen.affine.bg3Tilemap = (u32*)tmp3; gScreen.controls.window1VerticalDimensions = 0xa0; if (this->unk_28 == tmp3) return; this->unk_28 = tmp3; - gScreen.affine.bg2Updated = 1; // TODO .unk4 + gScreen.affine.bg3Updated = 1; } -END_NONMATCH extern struct { u8 unk_00[0x20]; } gUnk_085A97A0[]; extern u16 gUnk_081085B8[]; diff --git a/src/manager/manager18.c b/src/manager/manager18.c index 335f2fed..cadd8885 100644 --- a/src/manager/manager18.c +++ b/src/manager/manager18.c @@ -31,8 +31,7 @@ void Manager18_Main(Manager18* this) { DeleteThisEntity(); } } else { - if ((gUnk_0810865C[this->manager.unk_0e] != 0) && - (--this->manager.unk_0f == 0)) { + if ((gUnk_0810865C[this->manager.unk_0e] != 0) && (--this->manager.unk_0f == 0)) { this->manager.unk_0f = 4; if (gUnk_0810865C[++this->manager.unk_0e] != 0) { this->field_0x20 = gUnk_0810865C[this->manager.unk_0e]; diff --git a/src/manager/manager1B.c b/src/manager/manager1B.c index 37cb856e..3dd4f36f 100644 --- a/src/manager/manager1B.c +++ b/src/manager/manager1B.c @@ -51,8 +51,7 @@ void sub_0805B448(Manager1B* this) { } void sub_0805B474(Manager1B* this) { - s32 tmp = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) * 0x60) / - (gRoomControls.height - 0xa0); + s32 tmp = ((gRoomControls.roomScrollY - gRoomControls.roomOriginY) * 0x60) / (gRoomControls.height - 0xa0); gScreen.affine.bg3yOffset = gRoomControls.roomOriginY + tmp; gScreen.affine.bg3xOffset = gRoomControls.roomScrollX - ((gRoomControls.width - 0x100) / 2); } @@ -79,5 +78,5 @@ void sub_0805B4D0(u32 param_1) { if (iVar1 < 0) { iVar1 = 0; } - gScreen.affine.bg3yOffset = uVar2 + iVar1+gUnk_08108C44[param_1]; + gScreen.affine.bg3yOffset = uVar2 + iVar1 + gUnk_08108C44[param_1]; } diff --git a/src/manager/manager2.c b/src/manager/manager2.c index ca71f503..6f020f25 100644 --- a/src/manager/manager2.c +++ b/src/manager/manager2.c @@ -34,7 +34,7 @@ void sub_0805754C(Manager2* this) { bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY); bgOffset += bgOffset >> 3; gScreen.affine.bg3yOffset = bgOffset & 0x3f; - gScreen.affine.bg3Tilemap = gMapDataTopSpecial + (bgOffset/0x40) * 0x200; + gScreen.affine.bg3Tilemap = gMapDataTopSpecial + (bgOffset / 0x40) * 0x200; if (this->field_0x38 != gScreen.affine.bg3Tilemap) { this->field_0x38 = gScreen.affine.bg3Tilemap; gScreen.affine.bg3Updated = 1; @@ -42,7 +42,7 @@ void sub_0805754C(Manager2* this) { bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY); bgOffset += bgOffset >> 2; gScreen.bg.bg1yOffset = bgOffset & 0x3f; - gScreen.bg.bg1Tilemap = gMapDataTopSpecial + 0x2000+ (bgOffset/0x40) * 0x200; + gScreen.bg.bg1Tilemap = gMapDataTopSpecial + 0x2000 + (bgOffset / 0x40) * 0x200; if (this->field_0x3c != gScreen.bg.bg1Tilemap) { this->field_0x3c = gScreen.bg.bg1Tilemap; gScreen.bg.bg1Updated = 1; @@ -55,14 +55,14 @@ void sub_080575C8(u32 param) { gUnk_0200B650 = 0; *(u16*)0x4000000 = 0; LoadGfxGroup(param); - gRoomVars.unk_10 = param; + gRoomVars.unk_10[0] = param; bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY); bgOffset += bgOffset >> 3; gScreen.affine.bg3yOffset = bgOffset & 0x3f; gScreen.affine.bg3xOffset = 0; gScreen.affine.bg3Tilemap = &gMapDataTopSpecial[(bgOffset / 0x40) * 0x200]; - gScreen.affine.bg3Control = 0x1d49; + gScreen.affine.bg3Control = 0x1d49; gScreen.affine.bg3Updated = 1; bgOffset = (gRoomControls.roomScrollY - gRoomControls.roomOriginY); @@ -83,7 +83,7 @@ void sub_08057688(void) { } void sub_080576A0(Manager2* this) { - LoadGfxGroup(gRoomVars.unk_10); + LoadGfxGroup(gRoomVars.unk_10[0]); this->field_0x38 = NULL; this->field_0x3c = NULL; sub_0805754C(this); diff --git a/src/manager/manager21.c b/src/manager/manager21.c index 586fedd6..f0cc377a 100644 --- a/src/manager/manager21.c +++ b/src/manager/manager21.c @@ -22,7 +22,8 @@ typedef struct { bool32 sub_0805B8CC(u32); /* -Spawns MINISH_SIZED_ENTRANCE at the locations in the room property this->manager.unk_0a when they are visible on the screen. +Spawns MINISH_SIZED_ENTRANCE at the locations in the room property this->manager.unk_0a when they are visible on the +screen. */ void Manager21_Main(Manager21* this) { MinishEntranceSpawnData* spawnData; diff --git a/src/manager/manager23.c b/src/manager/manager23.c index f38c3831..949ccf3f 100644 --- a/src/manager/manager23.c +++ b/src/manager/manager23.c @@ -46,7 +46,7 @@ void sub_0805BC8C(Manager23* this) { } void sub_0805BCD4(Manager23* this) { - switch(this->manager.action) { + switch (this->manager.action) { case 0: this->manager.action = 1; this->manager.unk_0f = 0x1e; @@ -76,8 +76,8 @@ void sub_0805BD5C(Manager23* this) { if (CheckFlags(this->field_0x3e) != 0) { sub_0805BE94(this); } - this->field_0x20 = ((s16)this->field_0x38 >> 4 & 0x3fU) | - ((s32)((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6); + this->field_0x20 = + ((s16)this->field_0x38 >> 4 & 0x3fU) | ((s32)((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6); this->manager.action = 1; } else { if (GetTileType(this->field_0x20, this->manager.unk_0b) == 0x76) { @@ -88,7 +88,6 @@ void sub_0805BD5C(Manager23* this) { } } - void sub_0805BDB4(Manager23* this) { u8 bVar1; u16 uVar2; @@ -99,8 +98,8 @@ void sub_0805BDB4(Manager23* this) { if (CheckFlags(this->field_0x3e) != 0 || CheckFlags(this->field_0x3c) != 0) { sub_0805BE94(this); } - this->field_0x20 = ((s16)this->field_0x38 >> 4 & 0x3fU) | - (((s32)(this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6); + this->field_0x20 = + ((s16)this->field_0x38 >> 4 & 0x3fU) | (((s32)(this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6); this->manager.action = 1; break; @@ -135,15 +134,12 @@ void sub_0805BDB4(Manager23* this) { void sub_0805BE70(Manager23* this, u32 param_2) { SetTileType(param_2, - ((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | - ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6, + ((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6, this->manager.unk_0b); } void sub_0805BE94(Manager23* this) { - SetTileType(0x76, - ((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | - ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6, + SetTileType(0x76, ((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6, this->manager.unk_0b); sub_0805308C(this->manager.unk_0e); DeleteThisEntity(); @@ -152,7 +148,7 @@ void sub_0805BE94(Manager23* this) { void sub_0805BEC4(Manager23* this) { Entity* object = CreateObject(OBJECT_2A, 1, 0); if (object != NULL) { - *(s8*)(&object->flags+1) = ((*(s8*)(&object->flags+1)) & (-0x10)) | 3; + *(s8*)(&object->flags + 1) = ((*(s8*)(&object->flags + 1)) & (-0x10)) | 3; object->x.HALF.HI = this->field_0x38 + gRoomControls.roomOriginX; object->y.HALF.HI = this->field_0x3a + gRoomControls.roomOriginY; object->collisionLayer = this->manager.unk_0b; diff --git a/src/manager/manager31.c b/src/manager/manager31.c index e1017242..2dcf7727 100644 --- a/src/manager/manager31.c +++ b/src/manager/manager31.c @@ -29,9 +29,8 @@ void Manager31_Main(Manager31* this) { if (this->manager.action == 0) { this->manager.action += 1; - if (CheckGlobalFlag(GORON_KAKERA_L) != 0 - && CheckGlobalFlag(GORON_KAKERA_M) != 0 - && CheckGlobalFlag(GORON_KAKERA_R) != 0) { + if (CheckGlobalFlag(GORON_KAKERA_L) != 0 && CheckGlobalFlag(GORON_KAKERA_M) != 0 && + CheckGlobalFlag(GORON_KAKERA_R) != 0) { if (CheckGlobalFlag(GORON_KAKERA_LV2) == 0) { if (CheckGlobalFlag(LV1_CLEAR) != 0) { SetGlobalFlag(GORON_KAKERA_LV2); @@ -48,13 +47,11 @@ void Manager31_Main(Manager31* this) { if (CheckGlobalFlag(LV3_CLEAR) != 0) { SetGlobalFlag(GORON_KAKERA_LV4); goto clearGlobalFlags; - } } else { - if (CheckGlobalFlag(GORON_KAKERA_LV5) == 0 - && CheckGlobalFlag(LV4_CLEAR) != 0) { + if (CheckGlobalFlag(GORON_KAKERA_LV5) == 0 && CheckGlobalFlag(LV4_CLEAR) != 0) { SetGlobalFlag(GORON_KAKERA_LV5); -clearGlobalFlags: + clearGlobalFlags: ClearGlobalFlag(GORON_KAKERA_L); ClearGlobalFlag(GORON_KAKERA_M); ClearGlobalFlag(GORON_KAKERA_R); @@ -70,7 +67,8 @@ clearGlobalFlags: count = 0; for (count = 0; count < 3;) { if (CheckGlobalFlag(GORON_KAKERA_L + count) == 0) { - Entity* object = CreateObject(SHOP_ITEM, 0x5c, ((s32)Random() % spawnData->maxType) + spawnData->minType); + Entity* object = + CreateObject(SHOP_ITEM, 0x5c, ((s32)Random() % spawnData->maxType) + spawnData->minType); if (object != NULL) { object->actionDelay = 1; object->field_0xf = count; @@ -91,7 +89,7 @@ clearGlobalFlags: if (CheckGlobalFlag(GORON_KAKERA_L + count) == 0) { if ((s8)this->itemActive[count] >= FALSE) { } else { - SetGlobalFlag(GORON_KAKERA_L + count); + SetGlobalFlag(GORON_KAKERA_L + count); } } } diff --git a/src/manager/manager32.c b/src/manager/manager32.c index 4461617e..514aedf6 100644 --- a/src/manager/manager32.c +++ b/src/manager/manager32.c @@ -1,17 +1,184 @@ #include "manager.h" +#include "screen.h" +#include "structures.h" +#include "room.h" +#include "functions.h" +#include "area.h" +#include "utils.h" +#include "gba/types.h" -ASM_FUNC("asm/non_matching/manager32/Manager32_Main.inc", void Manager32_Main()) +typedef struct { + Manager manager; + u32 field_0x20; + u32 field_0x24; + u32 field_0x28; +} Manager32; -ASM_FUNC("asm/non_matching/manager32/sub_0805D7DC.inc", void sub_0805D7DC()) +extern void (*const gUnk_08108D7C[])(Manager32*); +void sub_0805D9D8(Manager32*); +void sub_0805DA08(u32, u32, u32); -ASM_FUNC("asm/non_matching/manager32/sub_0805D860.inc", void sub_0805D860()) +extern void sub_080528F0(); -ASM_FUNC("asm/non_matching/manager32/sub_0805D900.inc", void sub_0805D900()) +extern u8 gUnk_08108D74[]; -ASM_FUNC("asm/non_matching/manager32/sub_0805D98C.inc", void sub_0805D98C()) +extern struct BgAffineDstData gUnk_02017AA0[]; +extern u8 gUnk_03003DE4[0xC]; +extern void sub_0805622C(struct BgAffineDstData*, u32, u32); -ASM_FUNC("asm/non_matching/manager32/sub_0805D9D8.inc", void sub_0805D9D8()) +void Manager32_Main(Manager32* this) { + gUnk_08108D7C[this->manager.action](this); + this->field_0x24 = gScreenTransition.frameCount << 4; + sub_0805D9D8(this); + sub_0805DA08(this->field_0x20, this->field_0x28, this->field_0x24); +} -ASM_FUNC("asm/non_matching/manager32/sub_0805DA08.inc", void sub_0805DA08()) +void sub_0805D7DC(Manager32* this) { + u32 index; -ASM_FUNC("asm/non_matching/manager32/sub_0805DA90.inc", void sub_0805DA90()) + this->manager.action = (this->manager.unk_0a == 0) ? 1 : 2; + this->field_0x20 = 0; + this->field_0x24 = 0; + switch (gRoomControls.areaID) { + case 7: + default: + index = 0; + break; + case 3: + index = 1; + break; + case 0x81: + index = 2; + break; + case 0x80: + index = 3; + break; + case 0x88: + index = 4; + break; + case 0x78: + index = 5; + break; + case 0x38: + index = 6; + break; + } + + LoadGfxGroup(gUnk_08108D74[index]); + gScreen.affine.bg3Control = 0x1e04; +} + +void sub_0805D860(Manager32* this) { + switch (this->manager.unk_0d) { + case 0: + this->manager.unk_0d = 1; + this->field_0x20 = 0x80; + gScreen.lcd.displayControl |= 0x800; + break; + case 1: + if (--this->field_0x20 == 0x10) { + this->manager.unk_0d = 2; + this->manager.unk_0e = 0x2d; + } + break; + case 2: + if (--this->manager.unk_0e == 0) { + this->manager.unk_0d = 3; + } + break; + case 3: + if (--this->field_0x20 == 0) { + this->manager.unk_0d = 4; + this->manager.unk_0e = 0x3c; + } + break; + default: + if (--this->manager.unk_0e == 0) { + sub_0801E104(); + gScreen.lcd.displayControl &= 0xf7ff; + DeleteThisEntity(); + } + } +} + +void sub_0805D900(Manager32* this) { + switch (this->manager.unk_0d) { + case 0: + this->manager.unk_0d = 1; + this->manager.unk_0e = 0x2d; + this->field_0x20 = 1; + gScreen.lcd.displayControl |= 0x800; + break; + case 1: + if (--this->manager.unk_0e == 0) { + this->manager.unk_0d = 2; + this->manager.unk_0e = 0x14; + } + break; + case 2: + this->field_0x20 += 1; + if (--this->manager.unk_0e != 0) { + return; + } + this->manager.unk_0d = 3; + break; + default: + this->field_0x20 += 4; + if (this->field_0x20 > 0x80) { + sub_0801E104(); + gScreen.lcd.displayControl &= 0xf7ff; + DeleteThisEntity(); + } + break; + } +} + +void sub_0805D98C(Manager32* this) { + if ((gInput.heldKeys & 0x40) != 0) { + this->field_0x20 -= 1; + } + if ((gInput.heldKeys & 0x80) != 0) { + this->field_0x20 += 1; + } + if ((gInput.heldKeys & 0x20) != 0) { + this->field_0x28 -= 1; + } + if ((gInput.heldKeys & 0x10) != 0) { + this->field_0x28 += 1; + } +} + +void sub_0805D9D8(Manager32* this) { + // TODO find out the actual type of the parent of this manager. + Manager* pMVar1 = this->manager.parent; + if (pMVar1 != NULL) { + gScreen.affine.bg3xOffset = 0x80 - (*(s16*)&pMVar1[1].unk_0e - gRoomControls.roomScrollX); + gScreen.affine.bg3yOffset = 0x8c - (*(s16*)(pMVar1[1].unk_11 + 1) - gRoomControls.roomScrollY); + } +} + +void sub_0805DA08(u32 x, u32 y, u32 param_3) { + u32 i; + struct BgAffineDstData* affineDstData = &gUnk_02017AA0[gUnk_03003DE4[0] * 0xa0]; + for (i = 0; i < 0xa0; ++i, y += 0x17) { + affineDstData->pa = ((gSineTable[(param_3 + i + y) & 0xff] * x) >> 8) + gScreen.affine.bg3xOffset; + affineDstData = (struct BgAffineDstData*)&affineDstData->pb; + } + sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4[0] * 0xa0], 0x400001c, 0xa2600001); +} + +void sub_0805DA90(Manager32* this, u32 param_2) { + Manager* manager = GetEmptyManager(); + if (manager != NULL) { + manager->type = 9; + manager->subtype = 0x32; + manager->unk_0a = param_2; + manager->parent = &this->manager; + AppendEntityToList((Entity*)manager, 8); + } + if (gArea.unk3 != 0) { + gScreen.lcd.displayControl &= 0xf7ff; + sub_080528F0(); + DeleteManager((Manager*)gArea.unk3); + } +} diff --git a/src/manager/manager33.c b/src/manager/manager33.c index b284a1b5..3ed92fc2 100644 --- a/src/manager/manager33.c +++ b/src/manager/manager33.c @@ -11,10 +11,7 @@ void Manager33_Main(Manager* this) { u32 b = roomControls->roomOriginY + 0x140; u32 y = (b - gPlayerEntity.y.HALF.HI) + 0x10; if (this->action == 0) { - if (x < 0x20 && - y < 0x20 && - gPlayerEntity.height.HALF.HI < -0x18 && - gPlayerState.field_0xa8 == 0x14) { + if (x < 0x20 && y < 0x20 && gPlayerEntity.height.HALF.HI < -0x18 && gPlayerState.field_0xa8 == 0x14) { this->action += 1; this->unk_0e = 0x5a; SoundReq(SFX_10A); diff --git a/src/manager/manager34.c b/src/manager/manager34.c index be0c7921..77e9dee4 100644 --- a/src/manager/manager34.c +++ b/src/manager/manager34.c @@ -48,7 +48,7 @@ void sub_0805DBF0(Manager34* this) { if (this->field_0x20 < 0x78) { if ((this->field_0x20 & 0xf) == 0) { - SoundReq(SFX_126); + SoundReq(SFX_126); } } else if (0xd1 >= this->field_0x20) { if ((this->field_0x20 & 0x1f) == 0) { diff --git a/src/manager/manager37.c b/src/manager/manager37.c index de139253..f7b56dfa 100644 --- a/src/manager/manager37.c +++ b/src/manager/manager37.c @@ -37,7 +37,7 @@ void sub_0805DE68(Manager* this) { gScreenTransition.field_0x38 = 0; gScreenTransition.field_0x39 = 0x0f; *(u8*)&gScreenTransition.field_0x3a = 0x20; - *((u8*)&gScreenTransition.field_0x3a+1) = 0x20; + *((u8*)&gScreenTransition.field_0x3a + 1) = 0x20; #if !defined(EU) && !defined(JP) && !defined(DEMO_JP) gSave.unk498 = 0x1194; #endif @@ -48,8 +48,8 @@ void sub_0805DEB8(Manager* this) { s32 distY; Entity* object; - distX = gPlayerEntity.x.HALF.HI - (gRoomControls.roomOriginX+0x88); - distY = gPlayerEntity.y.HALF.HI - (gRoomControls.roomOriginY+0x40); + distX = gPlayerEntity.x.HALF.HI - (gRoomControls.roomOriginX + 0x88); + distY = gPlayerEntity.y.HALF.HI - (gRoomControls.roomOriginY + 0x40); if (distX * distX + distY * distY < 0x901) { this->action = 2; this->unk_0d = 0; diff --git a/src/manager/manager7.c b/src/manager/manager7.c index 85e49295..8c7ce57f 100644 --- a/src/manager/manager7.c +++ b/src/manager/manager7.c @@ -70,7 +70,7 @@ void Manager7_Main(Manager7* this) { sub_08052D74(this, sub_08057E30, 0); } if (sub_08057E40(this)) { - tmp = gRoomVars.unk_10; + tmp = (u32)gRoomVars.unk_10[0]; if (this->unk_20 != tmp) { this->unk_20 = tmp; this->manager.unk_0e = 0; @@ -109,13 +109,13 @@ void Manager7_Main(Manager7* this) { #endif void sub_08057E30(Manager7* this) { - sub_08057E7C(gRoomVars.unk_10); + sub_08057E7C(gRoomVars.unk_10[0]); } u32 sub_08057E40(Manager7* this) { u32 tmp = sub_08056300(gUnk_08108050); if (tmp != 0xFF) { - gRoomVars.unk_10 = tmp; + gRoomVars.unk_10[0] = tmp; return 1; } else { return 0; @@ -143,6 +143,6 @@ void sub_08057E7C(u32 unk1) { for (tmp = 0; tmp < 8; tmp++, tmp2 += 2) { DmaSet(3, &gGlobalGfxAndPalettes[tmp2[0]], tmp2[1], 0x84000400); } - gRoomVars.unk_10 = unk1; + gRoomVars.unk_10[0] = unk1; } #endif diff --git a/src/manager/manager8.c b/src/manager/manager8.c index 56acfd9a..198cb0e3 100644 --- a/src/manager/manager8.c +++ b/src/manager/manager8.c @@ -30,7 +30,7 @@ void Manager8_Main(Manager8* this) { } void sub_08057EFC(Manager8* this) { - LoadGfxGroup(gRoomVars.unk_10); + LoadGfxGroup((u32)gRoomVars.unk_10[0]); sub_08058034(); this->unk_3c = 0; this->unk_38 = 0; @@ -110,7 +110,7 @@ void sub_080580B0(u32 unk1) { gUnk_0200B650 = 0; REG_DISPCNT = 0; LoadGfxGroup(unk1); - gRoomVars.unk_10 = unk1; + gRoomVars.unk_10[0] = unk1; sub_08058034(); tmp = gRoomControls.roomScrollX - gRoomControls.roomOriginX; // r7 tmp = tmp + (tmp >> 3) + (0x400 - gRoomControls.width) / 2; diff --git a/src/manager/managerF.c b/src/manager/managerF.c deleted file mode 100644 index 3f99ad78..00000000 --- a/src/manager/managerF.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "manager.h" - -ASM_FUNC("asm/non_matching/managerF/ManagerF_Main.inc", void ManagerF_Main()) - -ASM_FUNC("asm/non_matching/managerF/sub_08058EE4.inc", void sub_08058EE4()) - -ASM_FUNC("asm/non_matching/managerF/sub_08058F44.inc", void sub_08058F44()) - -ASM_FUNC("asm/non_matching/managerF/sub_08058F84.inc", void sub_08058F84()) - -ASM_FUNC("asm/non_matching/managerF/sub_08058FB0.inc", void sub_08058FB0()) - -ASM_FUNC("asm/non_matching/managerF/sub_08059064.inc", void sub_08059064()) - -ASM_FUNC("asm/non_matching/managerF/sub_08059094.inc", void sub_08059094()) - -ASM_FUNC("asm/non_matching/managerF/sub_080590E0.inc", void sub_080590E0()) - -ASM_FUNC("asm/non_matching/managerF/sub_08059124.inc", void sub_08059124()) - -ASM_FUNC("asm/non_matching/managerF/sub_080591CC.inc", void sub_080591CC()) - -ASM_FUNC("asm/non_matching/managerF/sub_08059220.inc", void sub_08059220()) - -ASM_FUNC("asm/non_matching/managerF/sub_08059278.inc", void sub_08059278()) - -ASM_FUNC("asm/non_matching/managerF/sub_08059290.inc", void sub_08059290()) - -ASM_FUNC("asm/non_matching/managerF/sub_080592A4.inc", void sub_080592A4()) - -ASM_FUNC("asm/non_matching/managerF/sub_080592EC.inc", void sub_080592EC()) - -ASM_FUNC("asm/non_matching/managerF/sub_0805930C.inc", void sub_0805930C()) - -ASM_FUNC("asm/non_matching/managerF/SetDirtTile.inc", void SetDirtTile()) - -ASM_FUNC("asm/non_matching/managerF/sub_08059368.inc", void sub_08059368()) - -ASM_FUNC("asm/non_matching/managerF/sub_0805938C.inc", void sub_0805938C()) - -ASM_FUNC("asm/non_matching/managerF/sub_080593CC.inc", void sub_080593CC()) - -ASM_FUNC("asm/non_matching/managerF/sub_08059424.inc", void sub_08059424()) - -ASM_FUNC("asm/non_matching/managerF/sub_0805947C.inc", void sub_0805947C()) - -ASM_FUNC("asm/non_matching/managerF/sub_080594DC.inc", void sub_080594DC()) - -ASM_FUNC("asm/non_matching/managerF/sub_08059548.inc", void sub_08059548()) From c603199e0aedc258a3b6310457fa7f2dd045663f Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 26 Sep 2021 14:57:42 +0200 Subject: [PATCH 39/64] Unsplit managerF to avoid conflicts with the pr of Ibot02 --- data/const/manager/managerF.s | 36 --- include/area.h | 7 +- include/functions.h | 8 + include/manager.h | 11 +- include/room.h | 8 +- linker.ld | 2 +- src/code_0805436C.c | 4 +- src/code_0808091C.c | 2 +- src/enemy/puffstool.c | 1 - src/manager.c | 2 +- src/manager/manager23.c | 2 - src/manager/managerA.c | 3 +- src/manager/managerF.c | 436 ++++++++++++++++++++++++++++++++++ src/npc/npc5.c | 2 +- src/npc/rem.c | 2 +- src/player.c | 2 +- src/room.c | 2 +- 17 files changed, 475 insertions(+), 55 deletions(-) delete mode 100644 data/const/manager/managerF.s create mode 100644 src/manager/managerF.c diff --git a/data/const/manager/managerF.s b/data/const/manager/managerF.s deleted file mode 100644 index 9bd68705..00000000 --- a/data/const/manager/managerF.s +++ /dev/null @@ -1,36 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08108314:: @ 08108314 - .4byte sub_08058EE4 - .4byte sub_08058FB0 - .4byte sub_08058FB0 - .4byte sub_08059094 - .4byte sub_080590E0 - .4byte sub_08059124 - .4byte sub_080591CC - .4byte sub_08059220 - .4byte sub_08059290 - .4byte sub_080592A4 - .4byte sub_08059368 - .4byte sub_0805938C - .4byte sub_08059424 - .4byte sub_0805947C -.ifndef EU - .4byte sub_080594DC -.ifndef JP - .4byte sub_08059548 -.endif -.endif - -gUnk_08108354:: @ 08108354 - .incbin "baserom.gba", 0x108354, 0x000002C - -gUnk_08108380:: @ 08108380 - .4byte script_0800E600 - .4byte script_0800E62C - .4byte script_0800E658 - .4byte script_0800E684 diff --git a/include/area.h b/include/area.h index 1c2ef424..f8e6078e 100644 --- a/include/area.h +++ b/include/area.h @@ -9,7 +9,9 @@ typedef struct { u8 unk; u8 regret; u16 localFlagOffset; - u8 filler[10]; + u8 filler[4]; + u16 unk_0a; + u8 filler3[4]; u16 field_0x10; u16 curPortalX; u16 curPortalY; @@ -20,7 +22,8 @@ typedef struct { bool8 playShrinkSeq; u8 unk1A; u8 filler2[13]; - u8 filler4[0x835]; + u8 field_0x28; + u8 filler4[0x834]; u32 musicIndex; u32 pMusicIndex; u8 filler5[0x20]; diff --git a/include/functions.h b/include/functions.h index 0f8645d6..135d7b92 100644 --- a/include/functions.h +++ b/include/functions.h @@ -281,4 +281,12 @@ extern bool32 sub_08077EFC(ItemBehavior*); extern void sub_08078E84(Entity*, Entity*); extern void sub_080042D0(Entity*, u32, u16); + +extern u32 sub_080002A8(u32, u32, u32); +extern void CreateDustAt(u32, u32, u32); +extern void sub_080806BC(u32, u32, u32, u32); + +extern void sub_080186C0(u32); +extern void sub_0801855C(void); + #endif diff --git a/include/manager.h b/include/manager.h index ecb6bcb4..4253e3f1 100644 --- a/include/manager.h +++ b/include/manager.h @@ -103,6 +103,15 @@ typedef struct { u16 unk_3e; } ManagerE; +typedef struct { + Manager manager; + u8 unk_20[0x18]; + s16 unk_38; + s16 unk_3a; + u16 unk_3c; + u16 unk_3e; +} ManagerF; + typedef struct Manager11 { Manager manager; u8 unk_20[0x1C]; @@ -154,7 +163,7 @@ extern void ManagerB_Main(); extern void ManagerC_Main(); extern void ManagerD_Main(); extern void ManagerE_Main(); -extern void ManagerF_Main(); +extern void sub_08058ECC(ManagerF*); extern void Manager10_Main(); extern void Manager11_Main(Manager11*); extern void Manager12_Main(); diff --git a/include/room.h b/include/room.h index ff71d1f8..f34f7297 100644 --- a/include/room.h +++ b/include/room.h @@ -23,7 +23,8 @@ typedef struct { /*0x0C*/ s16 roomScrollY; /*0x0E*/ u8 unk5; /*0x0F*/ u8 unk6; - /*0x10*/ u8 filler[4]; + /*0x10*/ u8 unk_10; + /*0x11*/ u8 filler[3]; /*0x14*/ u8 screenShakeMagnitude; /*0x15*/ u8 unk7; /*0x16*/ u16 screenShakeTime; @@ -37,7 +38,10 @@ typedef struct { } RoomControls; typedef struct { - u8 filler[4]; + u8 field_0x0; + u8 filler_0x1; + u8 field_0x2; + u8 field_0x3; u8 field_0x4; u8 filler1[1]; u8 itemForSaleIndex; diff --git a/linker.ld b/linker.ld index 13d8713f..b64f44f2 100644 --- a/linker.ld +++ b/linker.ld @@ -1203,7 +1203,7 @@ SECTIONS { src/manager/managerB.o(.rodata); src/manager/managerC.o(.rodata); data/const/manager/managerD.o(.rodata); - data/const/manager/managerF.o(.rodata); + src/manager/managerF.o(.rodata); data/const/manager/manager10.o(.rodata); data/const/manager/manager12.o(.rodata); data/const/manager/manager13.o(.rodata); diff --git a/src/code_0805436C.c b/src/code_0805436C.c index 77fb95e8..2273aab3 100644 --- a/src/code_0805436C.c +++ b/src/code_0805436C.c @@ -171,11 +171,11 @@ NONMATCH("asm/non_matching/sub_08054524.inc", void sub_08054524(void)) { END_NONMATCH void sub_08054564(void) { - gRoomVars.filler[2] = 1; + gRoomVars.field_0x2 = 1; } void sub_08054570(void) { - gRoomVars.filler[2] = 0; + gRoomVars.field_0x2 = 0; } #ifdef EU diff --git a/src/code_0808091C.c b/src/code_0808091C.c index 7d11a428..9fc8718f 100644 --- a/src/code_0808091C.c +++ b/src/code_0808091C.c @@ -42,7 +42,7 @@ void sub_08080930(void) gRoomControls.unk3 = 5; gRoomControls.unk4 = 0; gRoomControls.unk2 = 2; - gRoomControls.filler[0] = 0; + gRoomControls.unk_10 = 0; sub_0805E5A8(); } diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c index 0bce6e2a..c3b02ae4 100644 --- a/src/enemy/puffstool.c +++ b/src/enemy/puffstool.c @@ -6,7 +6,6 @@ extern u32 sub_080002E0(u32, u32); extern u32 sub_080002C8(u16, u8); -extern u16 sub_080002A8(u32, u32, u32); extern u16 sub_080002D4(u32, u32, u32); extern void sub_0804AA1C(Entity*); extern Entity* sub_08049DF4(u32); diff --git a/src/manager.c b/src/manager.c index ae589b39..1d8974cf 100644 --- a/src/manager.c +++ b/src/manager.c @@ -4,7 +4,7 @@ void (*const gManagerFunctions[])() = { NULL, Manager1_Main, Manager2_Main, Manager3_Main, Manager4_Main, Manager5_Main, Manager6_Main, Manager7_Main, Manager8_Main, Manager9_Main, ManagerA_Main, ManagerB_Main, ManagerC_Main, ManagerD_Main, - ManagerE_Main, ManagerF_Main, Manager10_Main, Manager11_Main, Manager12_Main, Manager13_Main, Manager14_Main, + ManagerE_Main, sub_08058ECC, Manager10_Main, Manager11_Main, Manager12_Main, Manager13_Main, Manager14_Main, Manager15_Main, Manager16_Main, Manager17_Main, Manager18_Main, Manager19_Main, Manager1A_Main, Manager1B_Main, Manager1C_Main, Manager1D_Main, Manager1E_Main, Manager1F_Main, Manager20_Main, Manager21_Main, Manager22_Main, Manager23_Main, Manager24_Main, Manager25_Main, Manager26_Main, Manager27_Main, Manager28_Main, Manager29_Main, diff --git a/src/manager/manager23.c b/src/manager/manager23.c index 949ccf3f..1d895f30 100644 --- a/src/manager/manager23.c +++ b/src/manager/manager23.c @@ -25,8 +25,6 @@ void sub_0805BEC4(Manager23*); void sub_0805BE70(Manager23*, u32); -extern void CreateDustAt(s32, s32, u32); - void Manager23_Main(Manager* this) { gUnk_08108CCC[this->unk_0a](this); } diff --git a/src/manager/managerA.c b/src/manager/managerA.c index ec6bfd05..3f1b841e 100644 --- a/src/manager/managerA.c +++ b/src/manager/managerA.c @@ -43,7 +43,6 @@ void sub_080583EC(ManagerA* this) { } extern void sub_0805E544(void); -extern void sub_080186C0(u16); u32 sub_0805848C(ManagerA*); void sub_080585DC(ManagerA*); @@ -150,7 +149,7 @@ void sub_08058514(ManagerA* this) { extern void sub_0801855C(void); void sub_080585B0(ManagerA* this) { - if (gArea.filler4[0] != 0xFF) { + if (gArea.field_0x28 != 0xFF) { DeleteThisEntity(); } if (CheckFlags(this->unk_3c)) { diff --git a/src/manager/managerF.c b/src/manager/managerF.c new file mode 100644 index 00000000..a4f5c78f --- /dev/null +++ b/src/manager/managerF.c @@ -0,0 +1,436 @@ +#include "global.h" +#include "manager.h" +#include "flags.h" +#include "audio.h" +#include "room.h" +#include "player.h" +#include "functions.h" +#include "area.h" +#include "textbox.h" +#include "script.h" +#include "utils.h" + +void sub_08058ECC(ManagerF*); + +void sub_08058EE4(ManagerF*); +void sub_08058FB0(ManagerF*); +void sub_08059094(ManagerF*); +void sub_080590E0(ManagerF*); +void sub_08059124(ManagerF*); +void sub_080591CC(ManagerF*); +void sub_08059220(ManagerF*); +void sub_08059290(ManagerF*); +void sub_080592A4(ManagerF*); +void sub_08059368(ManagerF*); +void sub_0805938C(ManagerF*); +void sub_08059424(ManagerF*); +void sub_0805947C(ManagerF*); +#ifndef EU +void sub_080594DC(ManagerF*); +#endif +#if defined(USA) || defined(DEMO) +void sub_08059548(ManagerF*); +#endif + +// clang-format off +void (*const gUnk_08108314[])(ManagerF*) = { + sub_08058EE4, + sub_08058FB0, + sub_08058FB0, // dup + sub_08059094, + sub_080590E0, + sub_08059124, + sub_080591CC, + sub_08059220, + sub_08059290, + sub_080592A4, + sub_08059368, + sub_0805938C, + sub_08059424, + sub_0805947C, +#ifndef EU + sub_080594DC, +#endif +#if defined(USA) || defined(DEMO) + sub_08059548, +#endif +}; +// clang-format on + +typedef struct { + u16 x; + u16 y; + u16 width; + u16 height; + u16 unk_08; +} PACKED __attribute__((aligned(2))) ManagerF_HelperStruct; + +const ManagerF_HelperStruct gUnk_08108354[] = { + { 0xF0, 0xB0, 0xF0, 0xB0, 0x100 }, + { 0x188, 0x190, 0x28, 0x30, 0x100 }, + { 0xF0, 0x340, 0xF0, 0xB0, 0x80 }, + { 0x180, 0x278, 0x60, 0x38, 0x80 }, +}; + +const u32 gUnk_08108354_terminator = 0xFFFF; // terminator for the previous array + +extern u16 script_0800E600[]; +extern u16 script_0800E62C[]; +extern u16 script_0800E658[]; +extern u16 script_0800E684[]; + +u16* const gUnk_08108380[] = { + script_0800E600, + script_0800E62C, + script_0800E658, + script_0800E684, +}; + +void sub_08058F44(u32, u32, u32); +void sub_08058F84(u32, u32); +void sub_08059064(ManagerF*); +void sub_080592EC(ManagerF*); +void sub_0805930C(ManagerF*); +u32 sub_080593CC(ManagerF*); +void sub_0805E4E0(ManagerF*, u32); + +// to be moved to headers +extern EntityData gUnk_080F4B88[]; + +void sub_08058ECC(ManagerF* this) { + gUnk_08108314[this->manager.unk_0a](this); +} + +void sub_08058EE4(ManagerF* this) { + if (!this->manager.action) + this->manager.action = 1; + if (!CheckRoomFlag(this->manager.unk_0b)) + return; + sub_08058F44(0x128, 0x68, this->manager.unk_0b + 1); + sub_08058F44(0x158, 0x68, this->manager.unk_0b + 2); + sub_08058F44(0x128, 0x98, this->manager.unk_0b + 3); + sub_08058F44(0x158, 0x98, this->manager.unk_0b + 4); + SoundReq(0x124); + DeleteThisEntity(); +} + +void sub_08058F44(u32 unk0, u32 unk1, u32 unk2) { + if (CheckRoomFlag(unk2)) + return; + if (sub_080002A8(unk0, unk1, 1) != 0x61) + return; + SetTileType(0x26, ((unk0 >> 4) & 0x3F) | (((unk1 >> 4) & 0x3F) << 6), 1); + sub_08058F84(unk0, unk1); +} + +void sub_08058F84(u32 unk0, u32 unk1) { + Entity* tmp; + tmp = CreateObject(0x21, 0, 0); + if (!tmp) + return; + tmp->x.HALF.HI = gRoomControls.roomOriginX + unk0; + tmp->y.HALF.HI = gRoomControls.roomOriginY + unk1; +} + +void sub_08058FB0(ManagerF* this) { + switch (this->manager.action) { + case 0: + this->manager.action = 1; + if (this->manager.unk_0a == 1) { + this->manager.unk_0d = 7; + this->manager.unk_0f = 6; + } else { + this->manager.unk_0d = 8; + this->manager.unk_0f = 2; + } + if (CheckFlags(this->unk_3e)) { + DeleteManager(&this->manager); + } + break; + case 1: + if (CheckFlags(this->unk_3e)) { + this->manager.action = 2; + this->manager.unk_0e = 120; + sub_0805E4E0(this, 0xF0); + sub_08059064(this); + } + break; + case 2: + if (this->manager.unk_0e == 90) { + sub_08078A90(2); + sub_08077B20(); + } + if (this->manager.unk_0e == 60) { + gPlayerEntity.animationState = this->manager.unk_0f; + } + if (!--this->manager.unk_0e) { + this->manager.action = 3; + MenuFadeIn(5, this->manager.unk_0d); + } + break; + default: + SetFlag(this->unk_3e); + sub_08078A90(1); + DeleteThisEntity(); + } +} + +void sub_08059064(ManagerF* this) { + Entity* tmp; + tmp = CreateObject(0, 0x53, 0); + if (!tmp) + return; + tmp->actionDelay = 2; + tmp->x.HALF.HI = this->unk_38 + gRoomControls.roomOriginX; + tmp->y.HALF.HI = this->unk_3a + gRoomControls.roomOriginY; +} + +void sub_08059094(ManagerF* this) { + u32 tmp = 0; + if (!this->manager.action) { + this->manager.action = 1; + if (CheckLocalFlag(0x60)) { + tmp = 1; + } else { + SetLocalFlag(0x5F); + } + } else { + if (CheckLocalFlag(0x60)) { + ClearLocalFlag(0x5F); + tmp = 1; + } + } + if (tmp) { + LoadRoomEntityList(gUnk_080F4B88); + DeleteManager(&this->manager); + } +} + +void sub_080590E0(ManagerF* this) { + if (!this->manager.action) { + this->manager.action = 1; + sub_0805E3A0(this, 6); + } + if (CheckLocalFlag(0x6c)) { + if (CheckLocalFlag(0x4b)) { + SetLocalFlag(0x4a); + } else { + ClearLocalFlag(0x4a); + } + } else { + ClearLocalFlag(0x4a); + } +} + +void sub_08059124(ManagerF* this) { + switch (this->manager.action) { + default: + if (!--this->manager.unk_0e) { + CreateDustAt(this->unk_38, this->unk_3a, this->manager.unk_0b); + sub_0807BA8C(((this->unk_38 >> 4) & 0x3f) | ((this->unk_3a >> 4) & 0x3f) << 6, this->manager.unk_0b); + SoundReq(0xcd); + DeleteThisEntity(); + } + break; + case 0: + if (CheckFlags(this->unk_3e)) { + DeleteThisEntity(); + } + this->manager.action = 1; + SetTileType(0x365, ((this->unk_38 >> 4) & 0x3f) | ((this->unk_3a >> 4) & 0x3f) << 6, this->manager.unk_0b); + break; + case 1: + if (CheckFlags(this->unk_3e)) { + sub_0805E4E0(this, 0x4b); + this->manager.unk_0e = 0x2d; + this->manager.action++; + } + } +} + +void sub_080591CC(ManagerF* this) { + if (!this->manager.action) { + this->manager.action = 1; + this->manager.unk_0b = CheckFlags(this->unk_3e); + if (this->manager.unk_0b) { + gRoomVars.field_0xc = this->unk_3a; + } else { + gRoomVars.field_0xc = this->unk_38; + } + } else { + u32 tmp = CheckFlags(this->unk_3e); + if (this->manager.unk_0b != tmp) { + this->manager.unk_0b = tmp; + if (tmp) { + gRoomVars.field_0xc = this->unk_3a; + } else { + gRoomVars.field_0xc = this->unk_38; + } + } + } +} + +void sub_08059220(ManagerF* this) { + const ManagerF_HelperStruct* data; + gRoomVars.field_0xc = 0; + + for (data = gUnk_08108354; data->x != 0xFFFF; data++) { + if (CheckPlayerInRegion(data->x, data->y, data->width, data->height)) { + gRoomVars.field_0xc = data->unk_08; + } + } + if (!this->manager.action) { + this->manager.action = 1; + gArea.unk_0a = gRoomVars.field_0xc; + } +} + +void sub_08059278() { + ManagerF* tmp; + tmp = (ManagerF*)FindEntityByID(0x9, 0xF, 0x6); + if (tmp) { + sub_08058ECC(tmp); + } +} + +void sub_08059290(ManagerF* this) { + this->manager.action = 1; + gRoomControls.cameraTarget = &gPlayerEntity; +} + +void sub_080592A4(ManagerF* this) { + if (!this->manager.action) { + this->manager.action = 1; + if (CheckFlags(this->unk_3e)) { + sub_080592EC(this); + DeleteThisEntity(); + } + } else { + if (CheckFlags(this->unk_3e)) { + sub_080592EC(this); + sub_0805930C(this); +#ifndef EU + SoundReq(0x16E); +#endif + DeleteThisEntity(); + } + } +} + +void sub_080592EC(ManagerF* this) { + SetDirtTile(((this->unk_38 >> 4) & 0x3F) | (((this->unk_3a >> 4) & 0x3F) << 6)); +} + +void sub_0805930C(ManagerF* this) { + Entity* tmp; +#ifdef EU + tmp = CreateObject(0xF, 0x43, 0x0); +#else + tmp = CreateObject(0xF, 0x43, 0x40); +#endif + if (!tmp) + return; + tmp->x.HALF.HI = this->unk_38 + gRoomControls.roomOriginX; + tmp->y.HALF.HI = this->unk_3a + gRoomControls.roomOriginY; + tmp->collisionLayer = 1; +} + +void SetDirtTile(u32 tile) { + SetTileType(0x1d, tile, 1); + SetTileType(0, tile, 2); + SetTileType(0, tile - 0x40, 2); +} + +void sub_08059368(ManagerF* this) { + this->manager.action = 1; + if (this->unk_3c == gCurrentTextBox._28) { + SetFlag(this->unk_3e); + DeleteThisEntity(); + } +} + +void sub_0805938C(ManagerF* this) { + if (sub_080593CC(this)) { + if (++this->manager.unk_0e >= 8) { + sub_080806BC(this->unk_38 - gRoomControls.roomOriginX, this->unk_3a - gRoomControls.roomOriginY, 0xFF, 0xA); + } + } else { + this->manager.unk_0e = 0; + } +} + +u32 sub_080593CC(ManagerF* this) { + if (!(gPlayerState.flags.all & 0x80) && gPlayerState.swimState != 0 && gPlayerEntity.animationState == 0 && + (gPlayerState.field_0x90.HALF.LO & 0xF00) == 0x400) { + return sub_0806FCB8(&gPlayerEntity, this->unk_38, this->unk_3a + 0xC, 6); + } + return 0; +} + +void sub_08059424(ManagerF* this) { + Entity* tmp; + if (CheckFlags(this->unk_3e)) { + DeleteThisEntity(); + } + if (!CheckFlags(this->unk_3c)) + return; + tmp = CreateObject(0xF, 0x35, 0); + if (!tmp) + return; + tmp->collisionLayer = 2; + tmp->x.HALF.HI = this->unk_38 + gRoomControls.roomOriginX; + tmp->y.HALF.HI = this->unk_3a + gRoomControls.roomOriginY; + EnqueueSFX(0x1B0); + DeleteThisEntity(); +} + +void sub_0805947C(ManagerF* this) { + if (!CheckFlags(this->unk_3e)) { + sub_08078A90(3); + if (gRoomControls.unk2) + return; + if (gRoomVars.field_0x0) { + StartPlayerScript(gUnk_08108380[gRoomControls.unk_10]); + } else { + StartPlayerScript(gUnk_08108380[gPlayerEntity.animationState >> 1]); + } + } + DeleteThisEntity(); +} + +#ifndef EU +void sub_080594DC(ManagerF* this) { + switch (this->manager.action) { + case 0: + this->manager.action = 1; + // fall through + case 1: + if (!GetInventoryValue(6)) + return; + if (CheckLocalFlagByOffset(0x8c0, 0x85)) + return; + this->manager.action = 2; + sub_080186C0(0xB0F); + break; + case 2: + default: + if (gArea.field_0x28 != 0xFF) { + DeleteThisEntity(); + } + if (CheckLocalFlagByOffset(0x8c0, 0x85)) { + sub_0801855C(); + DeleteThisEntity(); + } + } +} +#endif + +#if defined(USA) || defined(DEMO) +void sub_08059548(ManagerF* this) { + sub_0805E3A0(this, 6); + if (gPlayerEntity.action == 0x16) { + DeleteThisEntity(); + } + gInput.heldKeys |= 0x4; +} +#endif diff --git a/src/npc/npc5.c b/src/npc/npc5.c index ec68f38b..d64e5c77 100644 --- a/src/npc/npc5.c +++ b/src/npc/npc5.c @@ -117,7 +117,7 @@ void sub_08060A00(Entity* this) { this->action = 1; this->spriteSettings.b.draw = 1; this->speed = 0x120; - tmp = gRoomControls.filler[0]; + tmp = gRoomControls.unk_10; this->animationState = tmp * 2; InitAnimationForceUpdate(this, tmp << 0x19 >> 0x19); // TODO some conversion between u8 and u32? this->frameDuration = (Random() & 0x7f) + 0x80; diff --git a/src/npc/rem.c b/src/npc/rem.c index eec31fe9..974640a1 100644 --- a/src/npc/rem.c +++ b/src/npc/rem.c @@ -308,7 +308,7 @@ void sub_0806AA18(Entity* this) { ASM_FUNC("asm/non_matching/rem/sub_0806AA50.inc", void sub_0806AA50(Entity* this, ScriptExecutionContext* context)) void sub_0806AB74(Entity* this) { - gRoomVars.filler[3] = 1; + gRoomVars.field_0x3 = 1; if ((s32)(this->y.HALF.HI - (u32)gRoomControls.roomOriginY) < 0xa8) { this->y.HALF.HI = gRoomControls.roomOriginY + 0xa8; } diff --git a/src/player.c b/src/player.c index 8c3612f1..1d7be0a7 100644 --- a/src/player.c +++ b/src/player.c @@ -1375,7 +1375,7 @@ void sub_080724DC(Entity* this) { } else { this->spriteSettings.b.draw = 3; this->subAction = 1; - if (gRoomVars.filler[0] == 0) { + if (gRoomVars.field_0x0 == 0) { if (gPlayerState.flags.all & 0x80) { gPlayerState.field_0x8 = 0xc18; } else { diff --git a/src/room.c b/src/room.c index 62c56db8..6e1c44d5 100644 --- a/src/room.c +++ b/src/room.c @@ -521,7 +521,7 @@ void sub_0804BA0C(void) { if (gSave.unk8 < 8) { LoadRoomEntityList(&gUnk_080D7038); } - if (gRoomVars.filler[0] == 0) { + if (gRoomVars.field_0x0 == 0) { sub_08052CA4(2, 0, 0x2c8, 0xa8); } } From 86eae33e326fbe7b15f760cffbe23fed50963933 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Wed, 29 Sep 2021 10:23:49 +0200 Subject: [PATCH 40/64] manager2: Deleted unused nonmatching --- asm/non_matching/manager2/sub_080575C8.inc | 90 ---------------------- 1 file changed, 90 deletions(-) delete mode 100644 asm/non_matching/manager2/sub_080575C8.inc diff --git a/asm/non_matching/manager2/sub_080575C8.inc b/asm/non_matching/manager2/sub_080575C8.inc deleted file mode 100644 index ed601e15..00000000 --- a/asm/non_matching/manager2/sub_080575C8.inc +++ /dev/null @@ -1,90 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldr r0, _08057664 @ =gUnk_0200B650 - movs r5, #0 - str r5, [r0] - movs r0, #0x80 - lsls r0, r0, #0x13 - strh r5, [r0] - adds r0, r4, #0 - bl LoadGfxGroup - ldr r0, _08057668 @ =gRoomVars - strb r4, [r0, #0x10] - ldr r3, _0805766C @ =gRoomControls - movs r0, #0xc - ldrsh r1, [r3, r0] - ldrh r0, [r3, #8] - subs r1, r1, r0 - asrs r0, r1, #3 - adds r1, r1, r0 - ldr r2, _08057670 @ =gScreen - movs r7, #0x3f - adds r0, r1, #0 - ands r0, r7 - strh r0, [r2, #0x30] - strh r5, [r2, #0x2e] - adds r0, r1, #0 - cmp r1, #0 - bge _08057604 - adds r0, #0x3f -_08057604: - asrs r0, r0, #6 - lsls r0, r0, #9 - ldr r4, _08057674 @ =gMapDataTopSpecial - adds r0, r0, r4 - str r0, [r2, #0x34] - ldr r0, _08057678 @ =0x00001D49 - strh r0, [r2, #0x2c] - movs r6, #1 - strh r6, [r2, #0x32] - movs r0, #0xc - ldrsh r1, [r3, r0] - ldrh r0, [r3, #8] - subs r1, r1, r0 - asrs r0, r1, #2 - adds r1, r1, r0 - adds r0, r1, #0 - ands r0, r7 - strh r0, [r2, #0x18] - strh r5, [r2, #0x16] - adds r0, r1, #0 - cmp r0, #0 - bge _08057632 - adds r0, #0x3f -_08057632: - asrs r0, r0, #6 - lsls r0, r0, #9 - movs r3, #0x80 - lsls r3, r3, #6 - adds r1, r4, r3 - adds r0, r0, r1 - str r0, [r2, #0x1c] - ldr r0, _0805767C @ =0x00001E49 - strh r0, [r2, #0x14] - strh r6, [r2, #0x1a] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _08057680 @ =0x00003C48 - strh r0, [r1] - adds r1, #2 - ldr r0, _08057684 @ =0x00000609 - strh r0, [r1] - ldrh r0, [r2] - movs r3, #0xa0 - lsls r3, r3, #4 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08057664: .4byte gUnk_0200B650 -_08057668: .4byte gRoomVars -_0805766C: .4byte gRoomControls -_08057670: .4byte gScreen -_08057674: .4byte gMapDataTopSpecial -_08057678: .4byte 0x00001D49 -_0805767C: .4byte 0x00001E49 -_08057680: .4byte 0x00003C48 -_08057684: .4byte 0x00000609 - .syntax divided From 81c8e7622f5f5f16b111aa31e20e956cdc7c6c41 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Wed, 29 Sep 2021 10:24:28 +0200 Subject: [PATCH 41/64] manager4: matched sub_0805795C --- asm/non_matching/manager4/sub_0805795C.inc | 94 ---------------------- src/manager/manager4.c | 32 +++----- 2 files changed, 13 insertions(+), 113 deletions(-) delete mode 100644 asm/non_matching/manager4/sub_0805795C.inc diff --git a/asm/non_matching/manager4/sub_0805795C.inc b/asm/non_matching/manager4/sub_0805795C.inc deleted file mode 100644 index a74f41ed..00000000 --- a/asm/non_matching/manager4/sub_0805795C.inc +++ /dev/null @@ -1,94 +0,0 @@ - push {r4, r5, r6, r7, lr} - add r7, r0, #0 - add r6, r1, #0 - ldr r0, _080579BC @ =gUnk_03004030 - ldrb r0, [r0, #8] - cmp r0, #0 - beq _080579C8 - ldr r1, _080579C0 @ =gPlayerEntity - ldr r3, _080579C4 @ =gRoomControls - ldrh r2, [r1, #0x2e] - ldrh r0, [r3, #6] - sub r2, r2, r0 - lsl r2, r2, #0x10 - lsr r2, r2, #0x10 - ldrh r0, [r1, #0x32] - ldrh r1, [r3, #8] - sub r0, r0, r1 - lsl r0, r0, #0x10 - lsr r4, r0, #0x10 - ldrh r3, [r6] - mov r1, #0x3f - and r1, r3 - lsl r1, r1, #4 - add r1, #8 - mov r0, #0xfc - lsl r0, r0, #4 - and r0, r3 - lsl r0, r0, #0xe - mov r3, #0xc0 - lsl r3, r3, #0xd - add r0, r0, r3 - lsr r3, r0, #0x10 - sub r2, r2, r1 - add r0, r2, #0 - add r0, #0x18 - cmp r0, #0x30 - bhi _08057A14 - sub r0, r4, r3 - add r0, #8 - cmp r0, #0x10 - bhi _08057A14 - cmp r4, r3 - bhs _08057A00 - add r0, r2, #0 - add r0, #0xc - cmp r0, #0x18 - bls _08057A14 - b _08057A00 - .align 2, 0 -_080579BC: .4byte gUnk_03004030 -_080579C0: .4byte gPlayerEntity -_080579C4: .4byte gRoomControls -_080579C8: - ldr r3, _08057A0C @ =gPlayerEntity - mov r1, #0x2e - ldrsh r0, [r3, r1] - ldr r2, _08057A10 @ =gRoomControls - ldrh r1, [r2, #6] - sub r0, r0, r1 - asr r4, r0, #4 - mov r1, #0x3f - and r4, r1 - mov r0, #0x32 - ldrsh r5, [r3, r0] - ldrh r2, [r2, #8] - sub r0, r5, r2 - asr r0, r0, #4 - and r0, r1 - lsl r0, r0, #6 - orr r4, r0 - ldrh r1, [r6] - cmp r4, r1 - bne _08057A14 - lsr r0, r4, #6 - lsl r0, r0, #4 - add r0, r2, r0 - add r0, #6 - lsl r0, r0, #0x10 - lsr r3, r0, #0x10 - cmp r5, r3 - bge _08057A14 -_08057A00: - add r0, r7, #0 - add r1, r6, #0 - bl sub_08057A18 - mov r0, #1 - b _08057A16 - .align 2, 0 -_08057A0C: .4byte gPlayerEntity -_08057A10: .4byte gRoomControls -_08057A14: - mov r0, #0 -_08057A16: - pop {r4, r5, r6, r7, pc} diff --git a/src/manager/manager4.c b/src/manager/manager4.c index 970c544f..50c497b5 100644 --- a/src/manager/manager4.c +++ b/src/manager/manager4.c @@ -62,37 +62,31 @@ void sub_08057920(Manager* this) { void sub_08057A18(Manager*, DiggingCaveEntrance*); -NONMATCH("asm/non_matching/manager4/sub_0805795C.inc", u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr)) { +u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr) { u16 offsetX, offsetY, offsetX2, offsetY2; - u32 tmp; - if (gUnk_03004030.unk_00) { // TODO .address_width (?) + u32 tmp, tmp2; + if (gUnk_03004030.unk_08) { offsetX = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX; offsetY = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY; offsetX2 = (entr->unk_00 & 0x3F) * 16 + 8; offsetY2 = ((entr->unk_00 & 0xFC0) >> 6) * 16 + 0x18; - if ((u32)(offsetX - offsetX2) + 0x18 > 0x30) + tmp = offsetX - offsetX2; + if (tmp + 0x18 > 0x30 || offsetY - offsetY2 + 8 > 0x10U) return 0; - if ((u32)(offsetY - offsetY2) + 8 > 0x10) + if (offsetY < offsetY2 && tmp + 0xC <= 0x18) return 0; - if (((offsetY < offsetY2))) - if ((u32)(offsetX - offsetX2) + 0xC <= 0x18) - return 0; - + sub_08057A18(this, entr); + return 1; } else { - // offsetX = ((gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3F; - // offsetY = ((gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3F; - // tmp = offsetX | (offsetY << 6); - tmp = COORD_TO_TILE((&gPlayerEntity)); - if (tmp != entr->unk_00) + if (COORD_TO_TILE(&gPlayerEntity) != entr->unk_00) return 0; - offsetY = gRoomControls.roomOriginY + ((tmp >> 6) * 16) + 6; - if (gPlayerEntity.y.HALF.HI >= offsetY) + offsetY2 = gRoomControls.roomOriginY + ((entr->unk_00 >> 6) << 4) + 6; + if (gPlayerEntity.y.HALF.HI >= offsetY2) return 0; + sub_08057A18(this, entr); + return 1; } - sub_08057A18(this, entr); - return 1; } -END_NONMATCH extern void sub_08080930(); From f1447af6f8ff32c32a3889075ed1b101ed630e0c Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Wed, 29 Sep 2021 10:28:12 +0200 Subject: [PATCH 42/64] managerF: delete unused nonmatchings --- asm/non_matching/managerF/sub_08058EE4.inc | 45 ----------- asm/non_matching/managerF/sub_08058FB0.inc | 91 ---------------------- asm/non_matching/managerF/sub_08059124.inc | 80 ------------------- asm/non_matching/managerF/sub_080591CC.inc | 44 ----------- asm/non_matching/managerF/sub_08059220.inc | 46 ----------- asm/non_matching/managerF/sub_080593CC.inc | 45 ----------- asm/non_matching/managerF/sub_0805947C.inc | 44 ----------- asm/non_matching/managerF/sub_080594DC.inc | 51 ------------ asm/non_matching/managerF/sub_08059548.inc | 43 ---------- 9 files changed, 489 deletions(-) delete mode 100644 asm/non_matching/managerF/sub_08058EE4.inc delete mode 100644 asm/non_matching/managerF/sub_08058FB0.inc delete mode 100644 asm/non_matching/managerF/sub_08059124.inc delete mode 100644 asm/non_matching/managerF/sub_080591CC.inc delete mode 100644 asm/non_matching/managerF/sub_08059220.inc delete mode 100644 asm/non_matching/managerF/sub_080593CC.inc delete mode 100644 asm/non_matching/managerF/sub_0805947C.inc delete mode 100644 asm/non_matching/managerF/sub_080594DC.inc delete mode 100644 asm/non_matching/managerF/sub_08059548.inc diff --git a/asm/non_matching/managerF/sub_08058EE4.inc b/asm/non_matching/managerF/sub_08058EE4.inc deleted file mode 100644 index 0cea43d5..00000000 --- a/asm/non_matching/managerF/sub_08058EE4.inc +++ /dev/null @@ -1,45 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldrb r0, [r6, #0xc] - cmp r0, #0 - bne _08058EF2 - movs r0, #1 - strb r0, [r6, #0xc] -_08058EF2: - ldrb r0, [r6, #0xb] - bl CheckRoomFlag - cmp r0, #0 - beq _08058F40 - movs r5, #0x94 - lsls r5, r5, #1 - ldrb r2, [r6, #0xb] - adds r2, #1 - adds r0, r5, #0 - movs r1, #0x68 - bl sub_08058F44 - movs r4, #0xac - lsls r4, r4, #1 - ldrb r2, [r6, #0xb] - adds r2, #2 - adds r0, r4, #0 - movs r1, #0x68 - bl sub_08058F44 - ldrb r2, [r6, #0xb] - adds r2, #3 - adds r0, r5, #0 - movs r1, #0x98 - bl sub_08058F44 - ldrb r2, [r6, #0xb] - adds r2, #4 - adds r0, r4, #0 - movs r1, #0x98 - bl sub_08058F44 - movs r0, #0x92 - lsls r0, r0, #1 - bl SoundReq - bl DeleteThisEntity -_08058F40: - pop {r4, r5, r6, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/managerF/sub_08058FB0.inc b/asm/non_matching/managerF/sub_08058FB0.inc deleted file mode 100644 index 5e748b8b..00000000 --- a/asm/non_matching/managerF/sub_08058FB0.inc +++ /dev/null @@ -1,91 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _08058FF6 - cmp r0, #1 - bgt _08058FC4 - cmp r0, #0 - beq _08058FCA - b _08059050 -_08058FC4: - cmp r0, #2 - beq _08059018 - b _08059050 -_08058FCA: - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - cmp r0, #1 - bne _08058FDC - movs r0, #7 - strb r0, [r4, #0xd] - movs r0, #6 - b _08058FE2 -_08058FDC: - movs r0, #8 - strb r0, [r4, #0xd] - movs r0, #2 -_08058FE2: - strb r0, [r4, #0xf] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059060 - adds r0, r4, #0 - bl DeleteManager - b _08059060 -_08058FF6: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059060 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0xf0 - bl sub_0805E4E0 - adds r0, r4, #0 - bl sub_08059064 - b _08059060 -_08059018: - ldrb r0, [r4, #0xe] - cmp r0, #0x5a - bne _08059028 - movs r0, #2 - bl sub_08078A90 - bl sub_08077B20 -_08059028: - ldrb r2, [r4, #0xe] - cmp r2, #0x3c - bne _08059034 - ldr r1, _0805904C @ =gPlayerEntity - ldrb r0, [r4, #0xf] - strb r0, [r1, #0x14] -_08059034: - subs r0, r2, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08059060 - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0xd] - movs r0, #5 - bl MenuFadeIn - b _08059060 - .align 2, 0 -_0805904C: .4byte gPlayerEntity -_08059050: - ldrh r0, [r4, #0x3e] - bl SetFlag - movs r0, #1 - bl sub_08078A90 - bl DeleteThisEntity -_08059060: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/managerF/sub_08059124.inc b/asm/non_matching/managerF/sub_08059124.inc deleted file mode 100644 index afd30258..00000000 --- a/asm/non_matching/managerF/sub_08059124.inc +++ /dev/null @@ -1,80 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _08059174 - cmp r0, #1 - beq _080591AC - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080591C8 - movs r1, #0x38 - ldrsh r0, [r4, r1] - movs r2, #0x3a - ldrsh r1, [r4, r2] - ldrb r2, [r4, #0xb] - bl CreateDustAt - ldrh r0, [r4, #0x38] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - movs r2, #0x3f - ands r0, r2 - ldrh r1, [r4, #0x3a] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - ldrb r1, [r4, #0xb] - bl sub_0807BA8C - movs r0, #0xcd - bl SoundReq - bl DeleteThisEntity - b _080591C8 -_08059174: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059182 - bl DeleteThisEntity -_08059182: - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _080591A8 @ =0x00000365 - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r3, #0x3f - ands r1, r3 - ldrh r2, [r4, #0x3a] - lsls r2, r2, #0x10 - asrs r2, r2, #0x14 - ands r2, r3 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r4, #0xb] - bl SetTileType - b _080591C8 - .align 2, 0 -_080591A8: .4byte 0x00000365 -_080591AC: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _080591C8 - adds r0, r4, #0 - movs r1, #0x4b - bl sub_0805E4E0 - movs r0, #0x2d - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] -_080591C8: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/managerF/sub_080591CC.inc b/asm/non_matching/managerF/sub_080591CC.inc deleted file mode 100644 index 37753968..00000000 --- a/asm/non_matching/managerF/sub_080591CC.inc +++ /dev/null @@ -1,44 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080591F4 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3e] - bl CheckFlags - strb r0, [r4, #0xb] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _08059214 - ldr r1, _080591F0 @ =gRoomVars - ldrh r0, [r4, #0x3a] - b _08059218 - .align 2, 0 -_080591F0: .4byte gRoomVars -_080591F4: - ldrh r0, [r4, #0x3e] - bl CheckFlags - adds r1, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, r1 - beq _0805921A - strb r1, [r4, #0xb] - cmp r1, #0 - beq _08059214 - ldr r1, _08059210 @ =gRoomVars - ldrh r0, [r4, #0x3a] - b _08059218 - .align 2, 0 -_08059210: .4byte gRoomVars -_08059214: - ldr r1, _0805921C @ =gRoomVars - ldrh r0, [r4, #0x38] -_08059218: - strh r0, [r1, #0xc] -_0805921A: - pop {r4, pc} - .align 2, 0 -_0805921C: .4byte gRoomVars - .syntax divided diff --git a/asm/non_matching/managerF/sub_08059220.inc b/asm/non_matching/managerF/sub_08059220.inc deleted file mode 100644 index 2538d3a3..00000000 --- a/asm/non_matching/managerF/sub_08059220.inc +++ /dev/null @@ -1,46 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldr r2, _08059268 @ =gRoomVars - movs r0, #0 - strh r0, [r2, #0xc] - ldr r4, _0805926C @ =gUnk_08108354 - ldrh r0, [r4] - ldr r1, _08059270 @ =0x0000FFFF - cmp r0, r1 - beq _08059254 - adds r7, r2, #0 - adds r6, r1, #0 -_08059238: - ldrh r0, [r4] - ldrh r1, [r4, #2] - ldrh r2, [r4, #4] - ldrh r3, [r4, #6] - bl CheckPlayerInRegion - cmp r0, #0 - beq _0805924C - ldrh r0, [r4, #8] - strh r0, [r7, #0xc] -_0805924C: - adds r4, #0xa - ldrh r0, [r4] - cmp r0, r6 - bne _08059238 -_08059254: - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _08059266 - movs r0, #1 - strb r0, [r5, #0xc] - ldr r1, _08059274 @ =gArea - ldr r0, _08059268 @ =gRoomVars - ldrh r0, [r0, #0xc] - strh r0, [r1, #0xa] -_08059266: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08059268: .4byte gRoomVars -_0805926C: .4byte gUnk_08108354 -_08059270: .4byte 0x0000FFFF -_08059274: .4byte gArea - .syntax divided diff --git a/asm/non_matching/managerF/sub_080593CC.inc b/asm/non_matching/managerF/sub_080593CC.inc deleted file mode 100644 index f8da8864..00000000 --- a/asm/non_matching/managerF/sub_080593CC.inc +++ /dev/null @@ -1,45 +0,0 @@ - .syntax unified - push {r4, lr} - adds r3, r0, #0 - ldr r2, _08059418 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08059420 - adds r0, r2, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08059420 - ldr r4, _0805941C @ =gPlayerEntity - ldrb r0, [r4, #0x14] - cmp r0, #0 - bne _08059420 - adds r0, r2, #0 - adds r0, #0x90 - ldrh r1, [r0] - movs r0, #0xf0 - lsls r0, r0, #4 - ands r0, r1 - movs r1, #0x80 - lsls r1, r1, #3 - cmp r0, r1 - bne _08059420 - movs r0, #0x38 - ldrsh r1, [r3, r0] - movs r0, #0x3a - ldrsh r2, [r3, r0] - adds r2, #0xc - adds r0, r4, #0 - movs r3, #6 - bl sub_0806FCB8 - b _08059422 - .align 2, 0 -_08059418: .4byte gPlayerState -_0805941C: .4byte gPlayerEntity -_08059420: - movs r0, #0 -_08059422: - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/managerF/sub_0805947C.inc b/asm/non_matching/managerF/sub_0805947C.inc deleted file mode 100644 index 3f061bc2..00000000 --- a/asm/non_matching/managerF/sub_0805947C.inc +++ /dev/null @@ -1,44 +0,0 @@ - .syntax unified - push {lr} - ldrh r0, [r0, #0x3e] - bl CheckFlags - cmp r0, #0 - bne _080594CE - movs r0, #3 - bl sub_08078A90 - ldr r1, _080594B0 @ =gRoomControls - ldrh r0, [r1] - cmp r0, #0 - bne _080594D2 - ldr r0, _080594B4 @ =gRoomVars - ldrb r0, [r0] - cmp r0, #0 - beq _080594BC - ldr r0, _080594B8 @ =gUnk_08108380 - ldrb r1, [r1, #0x10] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r0, [r1] - bl StartPlayerScript - b _080594CE - .align 2, 0 -_080594B0: .4byte gRoomControls -_080594B4: .4byte gRoomVars -_080594B8: .4byte gUnk_08108380 -_080594BC: - ldr r1, _080594D4 @ =gUnk_08108380 - ldr r0, _080594D8 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl StartPlayerScript -_080594CE: - bl DeleteThisEntity -_080594D2: - pop {pc} - .align 2, 0 -_080594D4: .4byte gUnk_08108380 -_080594D8: .4byte gPlayerEntity - .syntax divided diff --git a/asm/non_matching/managerF/sub_080594DC.inc b/asm/non_matching/managerF/sub_080594DC.inc deleted file mode 100644 index 0733df2a..00000000 --- a/asm/non_matching/managerF/sub_080594DC.inc +++ /dev/null @@ -1,51 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _080594F2 - cmp r0, #1 - bgt _0805951C - cmp r0, #0 - bne _0805951C - movs r0, #1 - strb r0, [r4, #0xc] -_080594F2: - movs r0, #6 - bl GetInventoryValue - cmp r0, #0 - beq _08059540 - movs r0, #0x8c - lsls r0, r0, #4 - movs r1, #0x85 - bl CheckLocalFlagByOffset - cmp r0, #0 - bne _08059540 - movs r0, #2 - strb r0, [r4, #0xc] - ldr r0, _08059518 @ =0x00000B0F - bl sub_080186C0 - b _08059540 - .align 2, 0 -_08059518: .4byte 0x00000B0F -_0805951C: - ldr r0, _08059544 @ =gArea - adds r0, #0x28 - ldrb r0, [r0] - cmp r0, #0xff - beq _0805952A - bl DeleteThisEntity -_0805952A: - movs r0, #0x8c - lsls r0, r0, #4 - movs r1, #0x85 - bl CheckLocalFlagByOffset - cmp r0, #0 - beq _08059540 - bl sub_0801855C - bl DeleteThisEntity -_08059540: - pop {r4, pc} - .align 2, 0 -_08059544: .4byte gArea - .syntax divided diff --git a/asm/non_matching/managerF/sub_08059548.inc b/asm/non_matching/managerF/sub_08059548.inc deleted file mode 100644 index a324756b..00000000 --- a/asm/non_matching/managerF/sub_08059548.inc +++ /dev/null @@ -1,43 +0,0 @@ - .syntax unified -.ifdef USA - push {lr} - movs r1, #6 - bl sub_0805E3A0 - ldr r0, _08059568 @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #0x16 - bne _0805955C - bl DeleteThisEntity -_0805955C: - ldr r2, _0805956C @ =gInput - ldrh r1, [r2] - movs r0, #4 - orrs r0, r1 - strh r0, [r2] - pop {pc} - .align 2, 0 -_08059568: .4byte gPlayerEntity -_0805956C: .4byte gInput -.else -.ifdef DEMO @ TODO deduplicate - push {lr} - movs r1, #6 - bl sub_0805E3A0 - ldr r0, _08059568 @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #0x16 - bne _0805955C - bl DeleteThisEntity -_0805955C: - ldr r2, _0805956C @ =gInput - ldrh r1, [r2] - movs r0, #4 - orrs r0, r1 - strh r0, [r2] - pop {pc} - .align 2, 0 -_08059568: .4byte gPlayerEntity -_0805956C: .4byte gInput -.endif -.endif - .syntax divided From 8be102db29c38066145b4cf70a357bda5860dfae Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Wed, 29 Sep 2021 10:38:33 +0200 Subject: [PATCH 43/64] managerC: matched sub_08058D34 --- asm/non_matching/managerC/sub_08058D34.inc | 65 ---------------------- src/manager/managerC.c | 10 ++-- 2 files changed, 4 insertions(+), 71 deletions(-) delete mode 100644 asm/non_matching/managerC/sub_08058D34.inc diff --git a/asm/non_matching/managerC/sub_08058D34.inc b/asm/non_matching/managerC/sub_08058D34.inc deleted file mode 100644 index dbbcd9e7..00000000 --- a/asm/non_matching/managerC/sub_08058D34.inc +++ /dev/null @@ -1,65 +0,0 @@ - push {r4, lr} - mov r0, #0x28 - bl LoadPaletteGroup - ldr r0, _08058DAC @ =gUnk_02017700 - mov r2, #0x90 - lsl r2, r2, #0x2 - add r1, r0, r2 - mov r2, #0x20 - bl MemCopy - ldr r2, _08058DB0 @ =gUsedPalettes - ldr r0, [r2] - mov r1, #0x80 - lsl r1, r1, #0xe - orr r0, r0, r1 - str r0, [r2] - mov r0, #0x16 - bl LoadGfxGroup - ldr r1, _08058DB4 @ =gScreen - ldrh r0, [r1] - mov r3, #0 - mov r2, #0x1 - mov r4, #0 - orr r0, r0, r2 - strh r0, [r1] - ldr r0, _08058DB8 @ =0x0000BC82 - strh r0, [r1, #0x20] - ldr r0, _08058DBC @ =0x00005E86 - strh r0, [r1, #0x14] - strh r3, [r1, #0x16] - strh r3, [r1, #0x18] - add r2, r1, #0 - add r2, r2, #0x66 - ldr r0, _08058DC0 @ =0x00003456 - strh r0, [r2] - add r1, r1, #0x68 - ldr r0, _08058DC4 @ =0x00000909 - strh r0, [r1] - ldr r0, _08058DC8 @ =gArea - mov r2, #0x86 - lsl r2, r2, #0x4 - add r1, r0, r2 - add r2, r2, #0x4 - add r0, r0, r2 - ldr r0, [r0] - str r0, [r1] - ldr r0, _08058DCC @ =gUnk_02000070 - strb r4, [r0] - mov r0, #0x17 - bl CheckGlobalFlag - cmp r0, #0 - beq _08058DA8 - mov r0, #0x4a - bl LoadGfxGroup -_08058DA8: - pop {r4, pc} -.align 2,0 -_08058DAC: .4byte gUnk_02017700 -_08058DB0: .4byte gUsedPalettes -_08058DB4: .4byte gScreen -_08058DB8: .4byte 0x0000BC82 -_08058DBC: .4byte 0x00005E86 -_08058DC0: .4byte 0x00003456 -_08058DC4: .4byte 0x00000909 -_08058DC8: .4byte gArea -_08058DCC: .4byte gUnk_02000070 diff --git a/src/manager/managerC.c b/src/manager/managerC.c index 3af59a81..20202345 100644 --- a/src/manager/managerC.c +++ b/src/manager/managerC.c @@ -277,27 +277,25 @@ void sub_08058CFC() { } } -NONMATCH("asm/non_matching/managerC/sub_08058D34.inc", void sub_08058D34()) { +void sub_08058D34() { u16 tmp; + u32 tmp2; LoadPaletteGroup(0x28); MemCopy(gUnk_02017700, gUnk_02017700 + 0x240, 0x20); gUsedPalettes |= 0x200000; LoadGfxGroup(0x16); tmp = gScreen.lcd.displayControl; + tmp2 = 0; gScreen.lcd.displayControl |= 1; gScreen.affine.bg2Control = 0xBC82; gScreen.bg.bg1Control = 0x5E86; gScreen.bg.bg1xOffset = 0; - gScreen.bg.bg1yOffset = 0; - gScreen.bg.bg1Tilemap = 0; + gScreen.bg.bg1yOffset = tmp2; gScreen.controls.layerFXControl = 0x3456; - gScreen.controls.alphaBlend = 0x909; - gArea.musicIndex = gArea.pMusicIndex; gUnk_02000070 = 0; if (CheckGlobalFlag(LV1TARU_OPEN)) { LoadGfxGroup(0x4A); } } -END_NONMATCH From d28b21890450ff7247800f9084864c4a188f5cf8 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Wed, 29 Sep 2021 10:42:00 +0200 Subject: [PATCH 44/64] manager12: removed unused nonmatching --- asm/non_matching/manager12/sub_08059C8C.inc | 28 --------------------- 1 file changed, 28 deletions(-) delete mode 100644 asm/non_matching/manager12/sub_08059C8C.inc diff --git a/asm/non_matching/manager12/sub_08059C8C.inc b/asm/non_matching/manager12/sub_08059C8C.inc deleted file mode 100644 index 3ac8da37..00000000 --- a/asm/non_matching/manager12/sub_08059C8C.inc +++ /dev/null @@ -1,28 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r5, r1, #0 - adds r4, r2, #0 - adds r0, r3, #0 - bl sub_08056300 - adds r2, r0, #0 - strb r2, [r4] - lsls r0, r2, #0x18 - lsrs r3, r0, #0x18 - cmp r3, #0xff - beq _08059CBC - ldr r0, _08059CB8 @ =gRoomVars - adds r0, #0x10 - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, r3 - beq _08059CBC - strb r2, [r1] - movs r0, #1 - b _08059CBE - .align 2, 0 -_08059CB8: .4byte gRoomVars -_08059CBC: - movs r0, #0 -_08059CBE: - pop {r4, r5, pc} - .syntax divided From 23413dadca5103a3afd24ee3177e09962ffc0d50 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Wed, 29 Sep 2021 10:43:03 +0200 Subject: [PATCH 45/64] manager15: removed unused nonmatching --- asm/non_matching/manager15/sub_0805A9CC.inc | 74 --------------------- 1 file changed, 74 deletions(-) delete mode 100644 asm/non_matching/manager15/sub_0805A9CC.inc diff --git a/asm/non_matching/manager15/sub_0805A9CC.inc b/asm/non_matching/manager15/sub_0805A9CC.inc deleted file mode 100644 index a9cf2adc..00000000 --- a/asm/non_matching/manager15/sub_0805A9CC.inc +++ /dev/null @@ -1,74 +0,0 @@ - push {r4, r5, lr} - add r4, r0, #0 - ldr r3, _0805AA4C @ =gScreen - ldr r5, _0805AA50 @ =gRoomControls - ldrh r0, [r5, #0xa] - ldrh r1, [r4, #0x24] - sub r0, r0, r1 - ldrh r1, [r4, #0x34] - add r0, r0, r1 - strh r0, [r3, #0x2e] - mov r2, #0x2e - ldrsh r0, [r3, r2] - neg r2, r0 - mov r0, #0x80 - lsl r0, r0, #1 - add r1, r2, r0 - cmp r2, #0 - bge _0805A9F2 - mov r2, #0 -_0805A9F2: - cmp r2, #0xf0 - ble _0805A9F8 - mov r2, #0xf0 -_0805A9F8: - cmp r1, #0 - bge _0805A9FE - mov r1, #0 -_0805A9FE: - cmp r1, #0xf0 - ble _0805AA04 - mov r1, #0xf0 -_0805AA04: - lsl r0, r2, #8 - orr r0, r1 - add r1, r3, #0 - add r1, #0x5a - strh r0, [r1] - mov r1, #0xc - ldrsh r0, [r5, r1] - ldrh r1, [r4, #0x26] - sub r0, r0, r1 - mov r2, #0x36 - ldrsh r1, [r4, r2] - add r2, r0, r1 - mov r1, #0x3f - add r0, r2, #0 - and r0, r1 - strh r0, [r3, #0x30] - add r0, r2, #0 - cmp r0, #0 - bge _0805AA2C - add r0, #0x3f -_0805AA2C: - asr r0, r0, #6 - lsl r0, r0, #9 - ldr r1, _0805AA54 @ =gBG3Buffer - add r1, r0, r1 - str r1, [r3, #0x34] - add r2, r3, #0 - add r2, #0x5e - mov r0, #0xa0 - strh r0, [r2] - ldr r0, [r4, #0x28] - cmp r0, r1 - beq _0805AA4A - str r1, [r4, #0x28] - mov r0, #1 - strh r0, [r3, #0x32] -_0805AA4A: - pop {r4, r5, pc} - .align 2, 0 -_0805AA4C: .4byte gScreen -_0805AA50: .4byte gRoomControls -_0805AA54: .4byte gBG3Buffer From dff1c29f5602bf818746151004c98cfd0b0f2001 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Wed, 29 Sep 2021 11:27:12 +0200 Subject: [PATCH 46/64] manager2B: match sub_0805D02C and sub_0805D11C --- asm/non_matching/manager2B/sub_0805D02C.inc | 74 --------------------- asm/non_matching/manager2B/sub_0805D11C.inc | 44 ------------ src/manager/manager2B.c | 46 ++++--------- 3 files changed, 12 insertions(+), 152 deletions(-) delete mode 100644 asm/non_matching/manager2B/sub_0805D02C.inc delete mode 100644 asm/non_matching/manager2B/sub_0805D11C.inc diff --git a/asm/non_matching/manager2B/sub_0805D02C.inc b/asm/non_matching/manager2B/sub_0805D02C.inc deleted file mode 100644 index fc30b11f..00000000 --- a/asm/non_matching/manager2B/sub_0805D02C.inc +++ /dev/null @@ -1,74 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r6, r0, #0 - ldrh r0, [r6, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805D046 - bl DeleteThisEntity -_0805D046: - ldr r0, _0805D0BC @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x43 - bhi _0805D0B0 - ldrb r0, [r6, #0xa] - bl GetCurrentRoomProperty - adds r5, r0, #0 - movs r7, #0 - movs r0, #0x36 - adds r0, r0, r6 - mov sl, r0 - ldr r1, _0805D0C0 @ =gRoomControls - mov r8, r1 - movs r0, #0x20 - adds r0, r0, r6 - mov sb, r0 -_0805D068: - ldrh r1, [r5, #4] - movs r0, #0xa0 - adds r2, r7, #0 - bl CreateObject - adds r4, r0, #0 - mov r1, r8 - ldrh r0, [r1, #6] - ldrh r1, [r5] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - mov r1, r8 - ldrh r0, [r1, #8] - ldrh r1, [r5, #2] - adds r0, r0, r1 - strh r0, [r4, #0x32] - str r6, [r4, #0x50] - adds r0, r4, #0 - bl sub_08016A30 - mov r0, sb - adds r0, #4 - mov sb, r0 - subs r0, #4 - stm r0!, {r4} - adds r7, #1 - adds r5, #6 - cmp r7, #3 - bls _0805D068 - movs r0, #0 - movs r1, #1 - strb r1, [r6, #0xc] - movs r1, #0x3c - strb r1, [r6, #0xf] - mov r1, sl - strb r0, [r1] -_0805D0B0: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805D0BC: .4byte gEntCount -_0805D0C0: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager2B/sub_0805D11C.inc b/asm/non_matching/manager2B/sub_0805D11C.inc deleted file mode 100644 index 6f1e4f0e..00000000 --- a/asm/non_matching/manager2B/sub_0805D11C.inc +++ /dev/null @@ -1,44 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - movs r6, #0 - ldr r1, _0805D170 @ =gRoomControls - mov r8, r1 - movs r7, #0x3f - adds r5, r0, #0 - adds r5, #0x20 -_0805D12E: - ldr r4, [r5] - movs r0, #0 - stm r5!, {r0} - movs r2, #0x2e - ldrsh r0, [r4, r2] - mov r3, r8 - ldrh r1, [r3, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r7 - movs r2, #0x32 - ldrsh r1, [r4, r2] - ldrh r2, [r3, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r7 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_0807BA8C - adds r0, r4, #0 - bl DeleteEntity - adds r6, #1 - cmp r6, #3 - bls _0805D12E - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805D170: .4byte gRoomControls - .syntax divided diff --git a/src/manager/manager2B.c b/src/manager/manager2B.c index 29cc7462..3ef01daf 100644 --- a/src/manager/manager2B.c +++ b/src/manager/manager2B.c @@ -7,19 +7,7 @@ typedef struct { Manager manager; - Entity* field_0x20; - u8 field_0x24; - u8 field_0x25; - u8 field_0x26; - u8 field_0x27; - u8 field_0x28; - u8 field_0x29; - u8 field_0x2a; - u8 field_0x2b; - u8 field_0x2c; - u8 field_0x2d; - u8 field_0x2e; - u8 field_0x2f; + Entity* field_0x20[4]; u8 field_0x30; u8 field_0x31; u8 field_0x32; @@ -47,36 +35,31 @@ void Manager2B_Main(Manager2B* this) { gUnk_08108D30[this->manager.action](this); } -NONMATCH("asm/non_matching/manager2B/sub_0805D02C.inc", void sub_0805D02C(Manager2B* this)) { +void sub_0805D02C(Manager2B* this) { u32 counter; u16* objectData; Entity* object; - Entity** createdObjects; - - if (CheckFlags((u32)this->field_0x3e) != 0) { + if (CheckFlags(this->field_0x3e)) { DeleteThisEntity(); } if (gEntCount < 0x44) { objectData = GetCurrentRoomProperty(this->manager.unk_0a); counter = 0; - createdObjects = &this->field_0x20; while (counter < 4) { object = CreateObject(OBJECT_A0, objectData[2], counter); object->x.HALF.HI = objectData[0] + gRoomControls.roomOriginX; object->y.HALF.HI = objectData[1] + gRoomControls.roomOriginY; object->parent = (Entity*)this; sub_08016A30(object); - *createdObjects = object; + this->field_0x20[counter] = object; counter += 1; objectData += 3; - createdObjects += 1; } this->manager.action = 1; this->manager.unk_0f = 0x3c; this->field_0x36 = 0; } } -END_NONMATCH void sub_0805D0C4(Manager2B* this) { if (--this->manager.unk_0f == 0) { @@ -98,20 +81,15 @@ void sub_0805D0FC(Manager2B* this) { } } -NONMATCH("asm/non_matching/manager2B/sub_0805D11C.inc", void sub_0805D11C(Manager2B* this)) { - Entity* entity; - Entity** createdObjects; +void sub_0805D11C(Manager2B* this) { + Entity** entity_iterator; u32 counter; - - counter = 0; - createdObjects = &this->field_0x20; - while (counter < 4) { - entity = *createdObjects; - *createdObjects = NULL; - sub_0807BA8C(TILE(entity->x.HALF.HI, entity->y.HALF.HI), entity->collisionLayer); + for (counter = 0; counter < 4; counter++) { + Entity* entity; + entity_iterator = &this->field_0x20[counter]; + entity = *entity_iterator; + *entity_iterator = NULL; + sub_0807BA8C(COORD_TO_TILE(entity), entity->collisionLayer); DeleteEntity(entity); - createdObjects += 1; - counter += 1; } } -END_NONMATCH From 2709802f33f97a18010922f8a0e00d23315d8052 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Thu, 30 Sep 2021 12:22:00 +0200 Subject: [PATCH 47/64] manager10.c: ok --- asm/non_matching/manager10/Manager10_Main.inc | 56 ----- asm/non_matching/manager10/sub_080595E4.inc | 16 -- asm/non_matching/manager10/sub_08059608.inc | 65 ------ asm/non_matching/manager10/sub_08059690.inc | 41 ---- asm/non_matching/manager10/sub_080596E0.inc | 175 -------------- asm/non_matching/manager10/sub_08059844.inc | 21 -- asm/non_matching/manager10/sub_0805986C.inc | 21 -- asm/non_matching/manager10/sub_08059894.inc | 47 ---- asm/non_matching/manager10/sub_080598F8.inc | 54 ----- asm/non_matching/manager10/sub_08059960.inc | 28 --- asm/non_matching/manager10/sub_08059994.inc | 18 -- include/manager.h | 11 +- linker.ld | 2 +- src/manager/manager10.c | 215 +++++++++++++++++- 14 files changed, 215 insertions(+), 555 deletions(-) delete mode 100644 asm/non_matching/manager10/Manager10_Main.inc delete mode 100644 asm/non_matching/manager10/sub_080595E4.inc delete mode 100644 asm/non_matching/manager10/sub_08059608.inc delete mode 100644 asm/non_matching/manager10/sub_08059690.inc delete mode 100644 asm/non_matching/manager10/sub_080596E0.inc delete mode 100644 asm/non_matching/manager10/sub_08059844.inc delete mode 100644 asm/non_matching/manager10/sub_0805986C.inc delete mode 100644 asm/non_matching/manager10/sub_08059894.inc delete mode 100644 asm/non_matching/manager10/sub_080598F8.inc delete mode 100644 asm/non_matching/manager10/sub_08059960.inc delete mode 100644 asm/non_matching/manager10/sub_08059994.inc diff --git a/asm/non_matching/manager10/Manager10_Main.inc b/asm/non_matching/manager10/Manager10_Main.inc deleted file mode 100644 index b352c800..00000000 --- a/asm/non_matching/manager10/Manager10_Main.inc +++ /dev/null @@ -1,56 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r5, [r4, #0xc] - cmp r5, #0 - bne _080595C8 - movs r6, #1 - strb r6, [r4, #0xc] - adds r0, #0x21 - strb r5, [r0] - adds r0, #2 - strb r5, [r0] - bl sub_0805986C - cmp r0, #0 - beq _080595A8 - adds r0, r4, #0 - adds r0, #0x20 - strb r6, [r0] - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #2 - strb r0, [r1] - ldr r0, _080595A4 @ =gUnk_0200B650 - str r5, [r0] - b _080595B8 - .align 2, 0 -_080595A4: .4byte gUnk_0200B650 -_080595A8: - adds r0, r4, #0 - adds r0, #0x20 - movs r1, #0x1f - strb r1, [r0] - adds r1, r4, #0 - adds r1, #0x22 - movs r0, #5 - strb r0, [r1] -_080595B8: - ldr r0, _080595DC @ =gRoomVars - movs r1, #0xff - strb r1, [r0, #0x10] - ldr r1, _080595E0 @ =sub_080595E4 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 -_080595C8: - adds r0, r4, #0 - bl sub_08059608 - adds r0, r4, #0 - bl sub_08059690 - adds r0, r4, #0 - bl sub_080596E0 - pop {r4, r5, r6, pc} - .align 2, 0 -_080595DC: .4byte gRoomVars -_080595E0: .4byte sub_080595E4 - .syntax divided diff --git a/asm/non_matching/manager10/sub_080595E4.inc b/asm/non_matching/manager10/sub_080595E4.inc deleted file mode 100644 index 21842a1e..00000000 --- a/asm/non_matching/manager10/sub_080595E4.inc +++ /dev/null @@ -1,16 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08059604 @ =gRoomVars - movs r0, #0xff - strb r0, [r1, #0x10] - adds r0, r4, #0 - bl sub_08059690 - adds r0, r4, #0 - bl sub_080596E0 - movs r0, #0 - bl sub_0805B4D0 - pop {r4, pc} - .align 2, 0 -_08059604: .4byte gRoomVars - .syntax divided diff --git a/asm/non_matching/manager10/sub_08059608.inc b/asm/non_matching/manager10/sub_08059608.inc deleted file mode 100644 index 93a1156a..00000000 --- a/asm/non_matching/manager10/sub_08059608.inc +++ /dev/null @@ -1,65 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - adds r4, #0x23 - ldrb r0, [r4] - cmp r0, #0 - beq _08059638 - subs r0, #1 - strb r0, [r4] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08059682 - ldr r0, _08059634 @ =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] - bl SoundReq - b _08059682 - .align 2, 0 -_08059634: .4byte gArea -_08059638: - bl sub_0805986C - cmp r0, #0 - beq _08059668 - ldr r0, _0805965C @ =gArea - ldr r2, _08059660 @ =0x00000864 - adds r1, r0, r2 - ldr r0, [r1] - cmp r0, #0x1e - beq _08059682 - movs r0, #0x1e - str r0, [r1] - movs r0, #0x78 - strb r0, [r4] - ldr r0, _08059664 @ =0x800D0000 - bl SoundReq - b _08059682 - .align 2, 0 -_0805965C: .4byte gArea -_08059660: .4byte 0x00000864 -_08059664: .4byte 0x800D0000 -_08059668: - ldr r0, _08059684 @ =gArea - ldr r2, _08059688 @ =0x00000864 - adds r1, r0, r2 - ldr r0, [r1] - cmp r0, #0x37 - beq _08059682 - movs r0, #0x37 - str r0, [r1] - movs r0, #0x78 - strb r0, [r4] - ldr r0, _0805968C @ =0x800D0000 - bl SoundReq -_08059682: - pop {r4, pc} - .align 2, 0 -_08059684: .4byte gArea -_08059688: .4byte 0x00000864 -_0805968C: .4byte 0x800D0000 - .syntax divided diff --git a/asm/non_matching/manager10/sub_08059690.inc b/asm/non_matching/manager10/sub_08059690.inc deleted file mode 100644 index b2d66b45..00000000 --- a/asm/non_matching/manager10/sub_08059690.inc +++ /dev/null @@ -1,41 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - bl sub_08059844 - cmp r0, #0 - beq _080596BC - adds r4, #0x20 - ldrb r0, [r4] - cmp r0, #0 - beq _080596D8 - ldr r0, _080596B8 @ =gUnk_085A7320 - movs r2, #0xd0 - lsls r2, r2, #1 - adds r1, r0, r2 - ldrb r2, [r4] - bl sub_08059894 - ldrb r0, [r4] - subs r0, #1 - b _080596D6 - .align 2, 0 -_080596B8: .4byte gUnk_085A7320 -_080596BC: - adds r4, #0x20 - ldrb r0, [r4] - cmp r0, #0x1f - bhi _080596D8 - ldr r0, _080596DC @ =gUnk_085A7320 - movs r2, #0xd0 - lsls r2, r2, #1 - adds r1, r0, r2 - ldrb r2, [r4] - bl sub_08059894 - ldrb r0, [r4] - adds r0, #1 -_080596D6: - strb r0, [r4] -_080596D8: - pop {r4, pc} - .align 2, 0 -_080596DC: .4byte gUnk_085A7320 - .syntax divided diff --git a/asm/non_matching/manager10/sub_080596E0.inc b/asm/non_matching/manager10/sub_080596E0.inc deleted file mode 100644 index 8198dbe6..00000000 --- a/asm/non_matching/manager10/sub_080596E0.inc +++ /dev/null @@ -1,175 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r0, _08059730 @ =gScreenTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _080596FC - ldr r0, _08059734 @ =gScreen - ldrh r1, [r0, #0x16] - adds r1, #8 - movs r2, #0x1f - ands r1, r2 - strh r1, [r0, #0x16] -_080596FC: - bl sub_0805986C - cmp r0, #0 - beq _08059740 - adds r0, r4, #0 - adds r0, #0x21 - ldrb r1, [r0] - adds r5, r0, #0 - adds r2, r4, #0 - adds r2, #0x22 - cmp r1, #0 - bne _08059764 - ldrb r0, [r2] - cmp r0, #2 - beq _08059764 - movs r0, #1 - strb r0, [r5] - movs r0, #3 - strb r0, [r2] - ldr r0, _08059738 @ =gUnk_08108390 - ldrb r0, [r0, #3] - strb r0, [r4, #0xe] - ldr r0, _0805973C @ =gUnk_0200B650 - str r1, [r0] - b _08059764 - .align 2, 0 -_08059730: .4byte gScreenTransition -_08059734: .4byte gScreen -_08059738: .4byte gUnk_08108390 -_0805973C: .4byte gUnk_0200B650 -_08059740: - adds r0, r4, #0 - adds r0, #0x21 - ldrb r1, [r0] - adds r5, r0, #0 - adds r2, r4, #0 - adds r2, #0x22 - cmp r1, #0 - bne _08059764 - ldrb r0, [r2] - cmp r0, #5 - beq _08059764 - movs r0, #2 - strb r0, [r5] - ldr r1, _08059774 @ =gUnk_08108390 - ldrb r0, [r2] - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] -_08059764: - adds r6, r5, #0 - ldrb r0, [r6] - cmp r0, #1 - beq _08059778 - cmp r0, #2 - beq _080597A8 - b _080597D0 - .align 2, 0 -_08059774: .4byte gUnk_08108390 -_08059778: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r3, #0xff - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - cmp r5, #0 - bne _080597D0 - ldr r1, _080597A4 @ =gUnk_08108390 - ldrb r0, [r2] - subs r0, #1 - strb r0, [r2] - ands r0, r3 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] - ldrb r0, [r2] - cmp r0, #2 - bne _080597D0 - strb r5, [r6] - b _080597D0 - .align 2, 0 -_080597A4: .4byte gUnk_08108390 -_080597A8: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r3, #0xff - lsls r0, r0, #0x18 - lsrs r6, r0, #0x18 - cmp r6, #0 - bne _080597D0 - ldr r1, _080597EC @ =gUnk_08108390 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - ands r0, r3 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r4, #0xe] - ldrb r0, [r2] - cmp r0, #5 - bne _080597D0 - strb r6, [r5] -_080597D0: - ldr r3, _080597F0 @ =gRoomVars - ldrb r1, [r2] - ldrb r0, [r3, #0x10] - cmp r0, r1 - beq _08059838 - strb r1, [r3, #0x10] - ldrb r0, [r2] - cmp r0, #4 - beq _08059800 - cmp r0, #4 - ble _080597F4 - cmp r0, #5 - beq _08059824 - b _08059838 - .align 2, 0 -_080597EC: .4byte gUnk_08108390 -_080597F0: .4byte gRoomVars -_080597F4: - cmp r0, #0 - blt _08059838 - adds r0, #0x2b - bl LoadGfxGroup - b _08059838 -_08059800: - ldr r4, _0805981C @ =gBG3Buffer - movs r5, #0x80 - lsls r5, r5, #4 - adds r0, r4, #0 - adds r1, r5, #0 - bl MemClear - ldr r1, _08059820 @ =0x0600E800 - adds r0, r4, #0 - adds r2, r5, #0 - bl LoadResourceAsync - b _08059838 - .align 2, 0 -_0805981C: .4byte gBG3Buffer -_08059820: .4byte 0x0600E800 -_08059824: - ldr r0, _0805983C @ =gUnk_0200B650 - ldr r1, _08059840 @ =gBG1Settings - str r1, [r0] - subs r1, #0x14 - ldrh r2, [r1] - movs r3, #0x80 - lsls r3, r3, #2 - adds r0, r3, #0 - orrs r0, r2 - strh r0, [r1] -_08059838: - pop {r4, r5, r6, pc} - .align 2, 0 -_0805983C: .4byte gUnk_0200B650 -_08059840: .4byte gBG1Settings - .syntax divided diff --git a/asm/non_matching/manager10/sub_08059844.inc b/asm/non_matching/manager10/sub_08059844.inc deleted file mode 100644 index f898b690..00000000 --- a/asm/non_matching/manager10/sub_08059844.inc +++ /dev/null @@ -1,21 +0,0 @@ - .syntax unified - push {lr} - movs r3, #0 - ldr r0, _08059864 @ =gPlayerEntity - movs r2, #0x2e - ldrsh r1, [r0, r2] - ldr r2, _08059868 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - ldrh r0, [r2, #0x1e] - lsrs r0, r0, #1 - cmp r1, r0 - ble _0805985E - movs r3, #1 -_0805985E: - adds r0, r3, #0 - pop {pc} - .align 2, 0 -_08059864: .4byte gPlayerEntity -_08059868: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager10/sub_0805986C.inc b/asm/non_matching/manager10/sub_0805986C.inc deleted file mode 100644 index 74fc9540..00000000 --- a/asm/non_matching/manager10/sub_0805986C.inc +++ /dev/null @@ -1,21 +0,0 @@ - .syntax unified - push {lr} - movs r2, #0 - ldr r0, _0805988C @ =gPlayerEntity - movs r3, #0x2e - ldrsh r1, [r0, r3] - ldr r0, _08059890 @ =gRoomControls - ldrh r0, [r0, #6] - subs r1, r1, r0 - movs r0, #0x80 - lsls r0, r0, #2 - cmp r1, r0 - ble _08059886 - movs r2, #1 -_08059886: - adds r0, r2, #0 - pop {pc} - .align 2, 0 -_0805988C: .4byte gPlayerEntity -_08059890: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager10/sub_08059894.inc b/asm/non_matching/manager10/sub_08059894.inc deleted file mode 100644 index c41861f1..00000000 --- a/asm/non_matching/manager10/sub_08059894.inc +++ /dev/null @@ -1,47 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r5, r0, #0 - adds r4, r1, #0 - ldr r0, _080598E8 @ =gUnk_020176E0 - mov sb, r0 - movs r6, #0 - lsls r2, r2, #0x18 - mov r8, r2 -_080598AA: - adds r0, r5, #0 - adds r1, r4, #0 - mov r2, sb - mov r7, r8 - lsrs r3, r7, #0x18 - bl sub_08059960 - adds r5, #0x20 - adds r4, #0x20 - movs r0, #0x20 - add sb, r0 - adds r6, #1 - cmp r6, #0xc - bls _080598AA - ldr r0, _080598EC @ =gUnk_02017700 - movs r2, #0x90 - lsls r2, r2, #2 - adds r1, r0, r2 - movs r2, #0x20 - bl MemCopy - ldr r2, _080598F0 @ =gUsedPalettes - ldr r0, [r2] - ldr r1, _080598F4 @ =0x00207FFC - orrs r0, r1 - str r0, [r2] - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080598E8: .4byte gUnk_020176E0 -_080598EC: .4byte gUnk_02017700 -_080598F0: .4byte gUsedPalettes -_080598F4: .4byte 0x00207FFC - .syntax divided diff --git a/asm/non_matching/manager10/sub_080598F8.inc b/asm/non_matching/manager10/sub_080598F8.inc deleted file mode 100644 index ae4525ff..00000000 --- a/asm/non_matching/manager10/sub_080598F8.inc +++ /dev/null @@ -1,54 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - movs r4, #0x1f - adds r3, r0, #0 - ands r3, r4 - lsls r6, r3, #8 - adds r3, r6, #0 - muls r3, r2, r3 - lsrs r6, r3, #5 - adds r3, r1, #0 - ands r3, r4 - lsls r3, r3, #8 - movs r4, #0x20 - subs r4, r4, r2 - muls r3, r4, r3 - lsrs r3, r3, #5 - adds r3, r6, r3 - lsrs r6, r3, #8 - movs r5, #0xf8 - lsls r5, r5, #2 - adds r3, r0, #0 - ands r3, r5 - lsls r7, r3, #3 - adds r3, r7, #0 - muls r3, r2, r3 - lsrs r7, r3, #5 - adds r3, r1, #0 - ands r3, r5 - lsls r3, r3, #3 - muls r3, r4, r3 - lsrs r3, r3, #5 - adds r3, r7, r3 - lsrs r7, r3, #8 - movs r3, #0xf8 - lsls r3, r3, #7 - ands r0, r3 - lsrs r5, r0, #2 - adds r0, r5, #0 - muls r0, r2, r0 - lsrs r5, r0, #5 - ands r1, r3 - lsrs r0, r1, #2 - muls r0, r4, r0 - lsrs r0, r0, #5 - adds r0, r5, r0 - lsrs r5, r0, #8 - lsls r0, r7, #5 - orrs r6, r0 - lsls r0, r5, #0xa - orrs r6, r0 - adds r0, r6, #0 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager10/sub_08059960.inc b/asm/non_matching/manager10/sub_08059960.inc deleted file mode 100644 index 49568522..00000000 --- a/asm/non_matching/manager10/sub_08059960.inc +++ /dev/null @@ -1,28 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - adds r5, r1, #0 - adds r4, r2, #0 - lsls r3, r3, #0x18 - lsrs r3, r3, #0x18 - mov r8, r3 - movs r7, #0 -_08059974: - ldrh r0, [r6] - adds r6, #2 - ldrh r1, [r5] - adds r5, #2 - mov r2, r8 - bl sub_080598F8 - strh r0, [r4] - adds r4, #2 - adds r7, #1 - cmp r7, #0xf - bls _08059974 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager10/sub_08059994.inc b/asm/non_matching/manager10/sub_08059994.inc deleted file mode 100644 index 6021e9fe..00000000 --- a/asm/non_matching/manager10/sub_08059994.inc +++ /dev/null @@ -1,18 +0,0 @@ - .syntax unified - push {lr} - bl sub_0805986C - cmp r0, #0 - beq _080599AE - movs r0, #0x5b - bl LoadPaletteGroup - ldr r0, _080599B0 @ =gArea - ldr r1, _080599B4 @ =0x00000864 - adds r0, r0, r1 - movs r1, #0x1e - str r1, [r0] -_080599AE: - pop {pc} - .align 2, 0 -_080599B0: .4byte gArea -_080599B4: .4byte 0x00000864 - .syntax divided diff --git a/include/manager.h b/include/manager.h index 4253e3f1..fd094dfe 100644 --- a/include/manager.h +++ b/include/manager.h @@ -112,6 +112,15 @@ typedef struct { u16 unk_3e; } ManagerF; +typedef struct { + Manager manager; + u8 unk_20; + u8 unk_21; + u8 unk_22; + u8 unk_23; + u8 filler_0x24[0x1C]; +} Manager10; + typedef struct Manager11 { Manager manager; u8 unk_20[0x1C]; @@ -164,7 +173,7 @@ extern void ManagerC_Main(); extern void ManagerD_Main(); extern void ManagerE_Main(); extern void sub_08058ECC(ManagerF*); -extern void Manager10_Main(); +extern void Manager10_Main(Manager10*); extern void Manager11_Main(Manager11*); extern void Manager12_Main(); extern void Manager13_Main(); diff --git a/linker.ld b/linker.ld index b64f44f2..bb9cb076 100644 --- a/linker.ld +++ b/linker.ld @@ -1204,7 +1204,7 @@ SECTIONS { src/manager/managerC.o(.rodata); data/const/manager/managerD.o(.rodata); src/manager/managerF.o(.rodata); - data/const/manager/manager10.o(.rodata); + src/manager/manager10.o(.rodata); data/const/manager/manager12.o(.rodata); data/const/manager/manager13.o(.rodata); data/const/manager/manager14.o(.rodata); diff --git a/src/manager/manager10.c b/src/manager/manager10.c index e1b1b2a8..658bf297 100644 --- a/src/manager/manager10.c +++ b/src/manager/manager10.c @@ -1,23 +1,216 @@ +#include "global.h" #include "manager.h" +#include "room.h" +#include "area.h" +#include "audio.h" +#include "screen.h" +#include "utils.h" +#include "fileScreen.h" +#include "functions.h" -ASM_FUNC("asm/non_matching/manager10/Manager10_Main.inc", void Manager10_Main()) +void Manager10_Main(Manager10*); +void sub_080595E4(Manager10*); +void sub_08059608(Manager10*); +void sub_08059690(Manager10*); +void sub_080596E0(Manager10*); +u32 sub_08059844(void); +u32 sub_0805986C(void); +void sub_08059894(const u16*, const u16*, u32); +u32 sub_080598F8(u32, u32, u32); +void sub_08059960(const u16*, const u16*, u16*, u8); +void sub_08059994(void); -ASM_FUNC("asm/non_matching/manager10/sub_080595E4.inc", void sub_080595E4()) +const u8 gUnk_08108390[6] = { + 0x0F, 0x1E, 0x2D, 0x3C, 0x01, 0x01, +}; -ASM_FUNC("asm/non_matching/manager10/sub_08059608.inc", void sub_08059608()) +extern void* gUnk_0200B650; +extern u16 gUnk_020176E0[]; +extern u8 gUnk_02017700[]; -ASM_FUNC("asm/non_matching/manager10/sub_08059690.inc", void sub_08059690()) +extern const u16 gUnk_085A7320[]; -ASM_FUNC("asm/non_matching/manager10/sub_080596E0.inc", void sub_080596E0()) +void Manager10_Main(Manager10* this) { + if (!this->manager.action) { + this->manager.action = 1; + this->unk_21 = 0; + this->unk_23 = 0; + if (sub_0805986C()) { + this->unk_20 = 1; + this->unk_22 = 2; + gUnk_0200B650 = 0; + } else { + this->unk_20 = 0x1F; + this->unk_22 = 5; + } + gRoomVars.unk_10[0] = 0xFF; + sub_08052D74(this, sub_080595E4, 0); + } + sub_08059608(this); + sub_08059690(this); + sub_080596E0(this); +} -ASM_FUNC("asm/non_matching/manager10/sub_08059844.inc", void sub_08059844()) +void sub_080595E4(Manager10* this) { + gRoomVars.unk_10[0] = 0xFF; + sub_08059690(this); + sub_080596E0(this); + sub_0805B4D0(0); +} -ASM_FUNC("asm/non_matching/manager10/sub_0805986C.inc", void sub_0805986C()) +void sub_08059608(Manager10* this) { + if (this->unk_23) { + if (!--this->unk_23) { + gArea.musicIndex = gArea.pMusicIndex; + SoundReq(gArea.musicIndex); + } + return; + } + if (sub_0805986C()) { + if (gArea.pMusicIndex != 0x1E) { + gArea.pMusicIndex = 0x1E; + this->unk_23 = 0x78; + SoundReq(0x800d0000); + } + return; + } + if (gArea.pMusicIndex != 0x37) { + gArea.pMusicIndex = 0x37; + this->unk_23 = 0x78; + SoundReq(0x800d0000); + } +} -ASM_FUNC("asm/non_matching/manager10/sub_08059894.inc", void sub_08059894()) +void sub_08059690(Manager10* this) { + if (sub_08059844()) { + if (this->unk_20 == 0) + return; + sub_08059894(gUnk_085A7320, gUnk_085A7320 + 0xD0, this->unk_20); + this->unk_20--; + } else { + if (this->unk_20 > 0x1F) + return; + sub_08059894(gUnk_085A7320, gUnk_085A7320 + 0xD0, this->unk_20); + this->unk_20++; + } +} -ASM_FUNC("asm/non_matching/manager10/sub_080598F8.inc", void sub_080598F8()) +void sub_080596E0(Manager10* this) { + if ((gScreenTransition.frameCount & 7) == 0) { + gScreen.bg.bg1xOffset += 8; + gScreen.bg.bg1xOffset &= 0x1F; + } + if (sub_0805986C()) { + if (this->unk_21 == 0 && this->unk_22 != 2) { + this->unk_21 = 1; + this->unk_22 = 3; + this->manager.unk_0e = gUnk_08108390[3]; + gUnk_0200B650 = 0; + } + } else { + if (this->unk_21 == 0 && this->unk_22 != 5) { + this->unk_21 = 2; + this->manager.unk_0e = gUnk_08108390[this->unk_22]; + } + } + switch (this->unk_21) { + case 1: + if (--this->manager.unk_0e == 0) { + this->manager.unk_0e = gUnk_08108390[--this->unk_22]; + if (this->unk_22 == 2) { + this->unk_21 = 0; + } + } + break; + case 2: + if (--this->manager.unk_0e == 0) { + this->manager.unk_0e = gUnk_08108390[++this->unk_22]; + if (this->unk_22 == 5) { + this->unk_21 = 0; + } + } + break; + } + if (gRoomVars.unk_10[0] != this->unk_22) { + gRoomVars.unk_10[0] = this->unk_22; + switch (this->unk_22) { + case 0 ... 3: + LoadGfxGroup(this->unk_22 + 0x2B); + break; + case 4: + MemClear(gBG3Buffer, 0x800); + LoadResourceAsync(gBG3Buffer, 0x600e800, 0x800); + break; + case 5: + gUnk_0200B650 = &gScreen.bg.bg1Control; + gScreen.lcd.displayControl |= 0x200; + break; + } + } +} -ASM_FUNC("asm/non_matching/manager10/sub_08059960.inc", void sub_08059960()) +u32 sub_08059844() { + return gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX > gRoomControls.width >> 1; +} -ASM_FUNC("asm/non_matching/manager10/sub_08059994.inc", void sub_08059994()) +u32 sub_0805986C() { + return gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX > 0x200; +} + +void sub_08059894(const u16* unk1, const u16* unk2, u32 unk3) { + const u16* tmp1; + const u16* tmp2; + u16* tmp3; + u32 tmp4; + u32 i; + tmp1 = unk1; + tmp2 = unk2; + tmp3 = gUnk_020176E0; + for (i = 0; i < 13; i++) { + sub_08059960(tmp1, tmp2, tmp3, unk3); + tmp1 += 0x10; + tmp2 += 0x10; + tmp3 += 0x10; + } + MemCopy(gUnk_02017700, gUnk_02017700 + 0x240, 0x20); + gUsedPalettes |= 0x207ffc; +} + +u32 sub_080598F8(u32 unk1, u32 unk2, u32 unk3) { + u32 tmp1, tmp2, tmp3; + u32 tmp4, tmp5, tmp6; + + tmp1 = (unk1 & 0x1F) << 8; + tmp1 = (tmp1 * unk3) >> 5; + tmp4 = (unk2 & 0x1F) << 8; + tmp4 = (tmp4 * (0x20 - unk3)) >> 5; + tmp1 = (tmp1 + tmp4) >> 8; + + tmp2 = (unk1 & 0x3E0) << 3; + tmp2 = (tmp2 * unk3) >> 5; + tmp5 = (unk2 & 0x3E0) << 3; + tmp5 = (tmp5 * (0x20 - unk3)) >> 5; + tmp2 = (tmp2 + tmp5) >> 8; + + tmp3 = (unk1 & 0x7C00) >> 2; + tmp3 = (tmp3 * unk3) >> 5; + tmp6 = (unk2 & 0x7C00) >> 2; + tmp6 = (tmp6 * (0x20 - unk3)) >> 5; + tmp3 = (tmp3 + tmp6) >> 8; + + return tmp1 | (tmp2 << 5) | (tmp3 << 10); +} + +void sub_08059960(const u16* unk1, const u16* unk2, u16* unk3, u8 unk4) { + u32 i; + for (i = 0; i < 0x10; i++) { + *unk3++ = sub_080598F8(*unk1++, *unk2++, unk4); + } +} + +void sub_08059994() { + if (sub_0805986C()) { + LoadPaletteGroup(0x5B); + gArea.pMusicIndex = 0x1E; + } +} From 07069f78870339b2344916160c04f140003d8575 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Thu, 30 Sep 2021 14:25:04 +0200 Subject: [PATCH 48/64] Deleted unused data file --- data/const/manager/manager10.s | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 data/const/manager/manager10.s diff --git a/data/const/manager/manager10.s b/data/const/manager/manager10.s deleted file mode 100644 index 7207556b..00000000 --- a/data/const/manager/manager10.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08108390:: @ 08108390 - .incbin "baserom.gba", 0x108390, 0x0000008 From c50c628c80f41b6e24a6036b701f2b6b22b1b683 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Tue, 5 Oct 2021 17:24:13 +0200 Subject: [PATCH 49/64] warpPoint.c: ok --- asm/warpPoint.s | 568 --------------------------------------- include/functions.h | 4 + include/structures.h | 2 +- linker.ld | 4 +- src/manager/manager15.c | 4 +- src/manager/manager2E.c | 3 +- src/manager/managerF.c | 5 +- src/npc/picolyteBottle.c | 10 +- src/object/warpPoint.c | 230 ++++++++++++++++ 9 files changed, 246 insertions(+), 584 deletions(-) delete mode 100644 asm/warpPoint.s create mode 100644 src/object/warpPoint.c diff --git a/asm/warpPoint.s b/asm/warpPoint.s deleted file mode 100644 index 99f34f71..00000000 --- a/asm/warpPoint.s +++ /dev/null @@ -1,568 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start WarpPoint -WarpPoint: @ 0x0808B448 - push {lr} - adds r2, r0, #0 - adds r0, #0x70 - ldrb r0, [r0] - cmp r0, #0 - bne _0808B46C - ldr r0, _0808B468 @ =gUnk_08121368 - ldrb r1, [r2, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 - b _0808B472 - .align 2, 0 -_0808B468: .4byte gUnk_08121368 -_0808B46C: - adds r0, r2, #0 - bl sub_0808B73C -_0808B472: - pop {pc} - - thumb_func_start sub_0808B474 -sub_0808B474: @ 0x0808B474 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r4, #0xf] - ldr r1, _0808B4D8 @ =gUnk_08121380 - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r1, [r0] - movs r0, #0xf - ands r1, r0 - ldrb r3, [r4, #0x1a] - movs r2, #0x10 - rsbs r2, r2, #0 - adds r0, r2, #0 - ands r0, r3 - orrs r0, r1 - strb r0, [r4, #0x1a] - adds r3, r4, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r3] - ldr r0, _0808B4DC @ =gUnk_080FD168 - str r0, [r4, #0x48] - ldrb r0, [r4, #0x11] - ands r2, r0 - movs r0, #3 - orrs r2, r0 - strb r2, [r4, #0x11] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0808B4E0 - adds r0, r4, #0 - bl sub_0808B830 - b _0808B4F8 - .align 2, 0 -_0808B4D8: .4byte gUnk_08121380 -_0808B4DC: .4byte gUnk_080FD168 -_0808B4E0: - bl CheckIsDungeon - cmp r0, #0 - beq _0808B4F8 - ldrb r0, [r4, #0xa] - bl sub_0807CAEC - cmp r0, #0 - beq _0808B4F8 - adds r0, r4, #0 - bl sub_0808B830 -_0808B4F8: - adds r0, r4, #0 - bl sub_0808B7C8 - cmp r0, #0 - beq _0808B528 - movs r2, #4 - strb r2, [r4, #0xc] - movs r0, #0x60 - strb r0, [r4, #0xf] - ldr r1, _0808B52C @ =gPlayerEntity - ldrh r0, [r4, #0x2e] - strh r0, [r1, #0x2e] - ldrh r0, [r4, #0x32] - strh r0, [r1, #0x32] - strb r2, [r1, #0x14] - movs r0, #0x89 - lsls r0, r0, #1 - bl EnqueueSFX - ldrb r1, [r4, #0xf] - adds r1, #0x10 - adds r0, r4, #0 - bl sub_0805E4E0 -_0808B528: - pop {r4, pc} - .align 2, 0 -_0808B52C: .4byte gPlayerEntity - - thumb_func_start sub_0808B530 -sub_0808B530: @ 0x0808B530 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0808B562 - adds r0, r4, #0 - bl sub_0808B830 - bl CheckIsDungeon - cmp r0, #0 - beq _0808B554 - ldrb r0, [r4, #0xa] - bl sub_0807CAC8 -_0808B554: - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xf] - adds r0, #0xd6 - bl EnqueueSFX -_0808B562: - pop {r4, pc} - - thumb_func_start sub_0808B564 -sub_0808B564: @ 0x0808B564 - push {lr} - adds r3, r0, #0 - ldrb r0, [r3, #0xf] - subs r1, r0, #1 - strb r1, [r3, #0xf] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0808B57A - movs r0, #3 - strb r0, [r3, #0xc] - b _0808B58E -_0808B57A: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x19 - movs r1, #1 - bics r1, r0 - ldrb r2, [r3, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] -_0808B58E: - pop {pc} - - thumb_func_start sub_0808B590 -sub_0808B590: @ 0x0808B590 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_0808B7C8 - cmp r0, #0 - beq _0808B5E4 - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _0808B5E6 - movs r0, #5 - strb r0, [r4, #0xc] - movs r0, #0x60 - strb r0, [r4, #0xf] - bl sub_08077B20 - ldr r1, _0808B5DC @ =gPlayerEntity - ldrh r0, [r4, #0x2e] - strh r0, [r1, #0x2e] - ldrh r0, [r4, #0x32] - strh r0, [r1, #0x32] - movs r0, #4 - strb r0, [r1, #0x14] - ldrb r2, [r1, #0x10] - movs r0, #0x7f - ands r0, r2 - strb r0, [r1, #0x10] - ldrb r1, [r4, #0xf] - adds r1, #0x10 - adds r0, r4, #0 - bl sub_0805E4E0 - ldr r0, _0808B5E0 @ =0x00000113 - bl SoundReq - b _0808B5E6 - .align 2, 0 -_0808B5DC: .4byte gPlayerEntity -_0808B5E0: .4byte 0x00000113 -_0808B5E4: - strb r0, [r4, #0xe] -_0808B5E6: - pop {r4, pc} - - thumb_func_start sub_0808B5E8 -sub_0808B5E8: @ 0x0808B5E8 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - subs r1, r0, #1 - strb r1, [r4, #0xf] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _0808B610 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #1 - strb r0, [r4, #0xe] - ldr r1, _0808B60C @ =gPlayerEntity - movs r0, #4 - strb r0, [r1, #0x14] - movs r0, #0x10 - strb r0, [r1, #0x15] - b _0808B67E - .align 2, 0 -_0808B60C: .4byte gPlayerEntity -_0808B610: - movs r5, #0 - movs r0, #0x60 - ands r0, r1 - cmp r0, #0x20 - beq _0808B644 - cmp r0, #0x20 - bgt _0808B624 - cmp r0, #0 - beq _0808B64E - b _0808B66E -_0808B624: - cmp r0, #0x40 - bne _0808B66E - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x58 - bne _0808B638 - movs r0, #0x8a - lsls r0, r0, #1 - bl SoundReq -_0808B638: - ldrb r1, [r4, #0xf] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _0808B66E - b _0808B672 -_0808B644: - movs r0, #3 - ands r1, r0 - cmp r1, #0 - bne _0808B66E - b _0808B672 -_0808B64E: - movs r0, #7 - ands r0, r1 - cmp r0, #0 - bne _0808B66E - ldr r0, _0808B668 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - cmp r0, #4 - bne _0808B66C - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x18 - bls _0808B66E - b _0808B672 - .align 2, 0 -_0808B668: .4byte gPlayerEntity -_0808B66C: - movs r5, #1 -_0808B66E: - cmp r5, #0 - beq _0808B67E -_0808B672: - ldr r0, _0808B680 @ =gPlayerEntity - ldrb r1, [r0, #0x14] - adds r1, #2 - movs r2, #6 - ands r1, r2 - strb r1, [r0, #0x14] -_0808B67E: - pop {r4, r5, pc} - .align 2, 0 -_0808B680: .4byte gPlayerEntity - - thumb_func_start sub_0808B684 -sub_0808B684: @ 0x0808B684 - push {lr} - mov ip, r0 - ldrb r0, [r0, #0xf] - subs r1, r0, #1 - mov r0, ip - strb r1, [r0, #0xf] - lsls r0, r1, #0x18 - lsrs r2, r0, #0x18 - cmp r2, #0 - bne _0808B6E8 - ldr r3, _0808B6E4 @ =gScreenTransition - movs r0, #1 - strb r0, [r3, #8] - strb r2, [r3, #9] - mov r0, ip - adds r0, #0x7c - ldrb r0, [r0] - strb r0, [r3, #0xc] - mov r0, ip - adds r0, #0x7d - ldrb r0, [r0] - strb r0, [r3, #0xd] - mov r0, ip - adds r0, #0x84 - ldrh r1, [r0] - movs r0, #0x3f - ands r0, r1 - lsls r0, r0, #4 - adds r0, #8 - movs r2, #0 - strh r0, [r3, #0x10] - movs r0, #0xfc - lsls r0, r0, #4 - ands r0, r1 - lsrs r0, r0, #2 - adds r0, #8 - strh r0, [r3, #0x12] - strb r2, [r3, #0x14] - movs r0, #4 - strb r0, [r3, #0xe] - strb r2, [r3, #0xf] - mov r1, ip - ldrb r0, [r1, #0xa] - cmp r0, #2 - bne _0808B736 - strb r0, [r3, #9] - b _0808B736 - .align 2, 0 -_0808B6E4: .4byte gScreenTransition -_0808B6E8: - movs r0, #0x60 - ands r0, r1 - cmp r0, #0x20 - beq _0808B702 - cmp r0, #0x20 - bgt _0808B6FA - cmp r0, #0 - beq _0808B706 - b _0808B724 -_0808B6FA: - cmp r0, #0x40 - bne _0808B724 - movs r0, #7 - b _0808B710 -_0808B702: - movs r0, #3 - b _0808B710 -_0808B706: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x10 - bls _0808B718 - movs r0, #1 -_0808B710: - ands r1, r0 - cmp r1, #0 - bne _0808B724 - b _0808B72A -_0808B718: - ldr r2, _0808B738 @ =gPlayerEntity - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x18] -_0808B724: - movs r0, #0 - cmp r0, #0 - beq _0808B736 -_0808B72A: - ldr r0, _0808B738 @ =gPlayerEntity - ldrb r1, [r0, #0x14] - adds r1, #2 - movs r2, #6 - ands r1, r2 - strb r1, [r0, #0x14] -_0808B736: - pop {pc} - .align 2, 0 -_0808B738: .4byte gPlayerEntity - - thumb_func_start sub_0808B73C -sub_0808B73C: @ 0x0808B73C - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0808B766 - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, [r4, #0x50] - ldrb r1, [r0, #0x1a] - lsls r1, r1, #0x1c - lsrs r1, r1, #0x1c - ldrb r2, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1a] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation -_0808B766: - ldr r5, _0808B78C @ =gPlayerEntity - movs r0, #0x2e - ldrsh r1, [r5, r0] - movs r0, #0x32 - ldrsh r2, [r5, r0] - adds r0, r4, #0 - movs r3, #0x28 - bl sub_0806FCB8 - cmp r0, #0 - beq _0808B790 - ldrb r0, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #1 - orrs r1, r0 - strb r1, [r4, #0x18] - b _0808B7C0 - .align 2, 0 -_0808B78C: .4byte gPlayerEntity -_0808B790: - movs r0, #0x2e - ldrsh r1, [r5, r0] - movs r0, #0x32 - ldrsh r2, [r5, r0] - adds r0, r4, #0 - movs r3, #0x2e - bl sub_0806FCB8 - cmp r0, #0 - beq _0808B7B6 - ldrb r2, [r4, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - movs r0, #1 - eors r1, r0 - subs r0, #5 - ands r0, r2 - orrs r0, r1 - b _0808B7BE -_0808B7B6: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 -_0808B7BE: - strb r0, [r4, #0x18] -_0808B7C0: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, r5, pc} - - thumb_func_start sub_0808B7C8 -sub_0808B7C8: @ 0x0808B7C8 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r2, _0808B824 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0808B82C - adds r0, r2, #0 - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #0x12 - beq _0808B82C - ldr r4, _0808B828 @ =gPlayerEntity - adds r0, r4, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _0808B82C - bl sub_08079F8C - cmp r0, #0 - beq _0808B82C - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #5 - movs r3, #5 - bl sub_080041A0 - cmp r0, #0 - beq _0808B82C - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - bne _0808B82C - ldrb r0, [r5, #0xe] - cmp r0, #0 - bne _0808B81E - ldrb r0, [r4, #0xc] - cmp r0, #0x1b - bne _0808B81E - bl sub_080791D0 -_0808B81E: - movs r0, #1 - b _0808B82E - .align 2, 0 -_0808B824: .4byte gPlayerState -_0808B828: .4byte gPlayerEntity -_0808B82C: - movs r0, #0 -_0808B82E: - pop {r4, r5, pc} - - thumb_func_start sub_0808B830 -sub_0808B830: @ 0x0808B830 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - movs r0, #3 - strb r0, [r4, #0xc] - strb r1, [r4, #0xe] - ldrb r1, [r4, #0x18] - subs r0, #7 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - movs r0, #0x34 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0808B86A - adds r1, r2, #0 - adds r1, #0x70 - movs r0, #1 - strb r0, [r1] - str r4, [r2, #0x50] - adds r0, r4, #0 - adds r1, r2, #0 - bl CopyPosition -_0808B86A: - pop {r4, pc} diff --git a/include/functions.h b/include/functions.h index 135d7b92..22915222 100644 --- a/include/functions.h +++ b/include/functions.h @@ -289,4 +289,8 @@ extern void sub_080806BC(u32, u32, u32, u32); extern void sub_080186C0(u32); extern void sub_0801855C(void); +extern u32 sub_0807CAEC(u32); +extern void sub_0807CAC8(u32); +extern void sub_0805E4E0(Entity*, u32); + #endif diff --git a/include/structures.h b/include/structures.h index 20f83c3b..e05d0f78 100644 --- a/include/structures.h +++ b/include/structures.h @@ -39,7 +39,7 @@ extern struct_02000010 gUnk_02000010; typedef struct { s32 frameCount; // regular frame count? does anything reset it? u8 field_0x4[0x2]; - u16 field_0x8; + u16 field_0x6; bool8 transitioningOut; u8 transitionType; // transition when changing areas u16 field_0xa; // seems to be a tile type diff --git a/linker.ld b/linker.ld index b64f44f2..32e1fb7a 100644 --- a/linker.ld +++ b/linker.ld @@ -757,7 +757,7 @@ SECTIONS { src/object/frozenFlower.o(.text); asm/pullableMushroom.o(.text); asm/bollard.o(.text); - asm/warpPoint.o(.text); + src/object/warpPoint.o(.text); asm/object35.o(.text); asm/object36.o(.text); asm/object37.o(.text); @@ -1480,7 +1480,7 @@ data/const/object/object1D.o(.rodata); data/animations/object/pullableMushroom.o(.rodata); data/const/object/bollard.o(.rodata); data/animations/object/bollard.o(.rodata); - data/const/object/warpPoint.o(.rodata); + src/object/warpPoint.o(.rodata); data/animations/object/warpPoint.o(.rodata); data/const/object/object35.o(.rodata); data/animations/object/object35.o(.rodata); diff --git a/src/manager/manager15.c b/src/manager/manager15.c index 47a384ac..24b214b5 100644 --- a/src/manager/manager15.c +++ b/src/manager/manager15.c @@ -296,8 +296,6 @@ void sub_0805A758(Manager15* this) { } } -extern void sub_0805E4E0(Manager*, u32); - void sub_0805A76C(Manager15* this) { if ((gPlayerEntity.currentHealth != 0) && (gPlayerEntity.height.HALF.HI == 0) && (!gPlayerState.field_0x2c)) { switch (gPlayerState.field_0xa9) { @@ -307,7 +305,7 @@ void sub_0805A76C(Manager15* this) { this->manager.action++; sub_08004168(&gPlayerEntity); gPlayerEntity.animationState = 4; - sub_0805E4E0(&this->manager, 0x258); + sub_0805E4E0((Entity*)this, 0x258); sub_08078A90(0xFF); gUnk_02034490[0] = 1; gRoomControls.cameraTarget = 0; diff --git a/src/manager/manager2E.c b/src/manager/manager2E.c index 5d114b6f..f52c185e 100644 --- a/src/manager/manager2E.c +++ b/src/manager/manager2E.c @@ -19,7 +19,6 @@ extern void (*const gUnk_08108D3C[])(Manager2E*); extern void (*const gUnk_08108D44[])(Manager2E*); void sub_0805D2F4(Manager2E*); -extern void sub_0805E4E0(void*, u32); extern void (*const gUnk_08108D50[])(Manager2E*); @@ -52,7 +51,7 @@ void sub_0805D2C0(Manager2E* this) { if (this->manager.unk_0e == 1) { sub_0805D2F4(this); } - sub_0805E4E0(this, this->manager.unk_0e); + sub_0805E4E0((Entity*)this, this->manager.unk_0e); } } diff --git a/src/manager/managerF.c b/src/manager/managerF.c index a4f5c78f..d7e1d7bb 100644 --- a/src/manager/managerF.c +++ b/src/manager/managerF.c @@ -92,7 +92,6 @@ void sub_08059064(ManagerF*); void sub_080592EC(ManagerF*); void sub_0805930C(ManagerF*); u32 sub_080593CC(ManagerF*); -void sub_0805E4E0(ManagerF*, u32); // to be moved to headers extern EntityData gUnk_080F4B88[]; @@ -151,7 +150,7 @@ void sub_08058FB0(ManagerF* this) { if (CheckFlags(this->unk_3e)) { this->manager.action = 2; this->manager.unk_0e = 120; - sub_0805E4E0(this, 0xF0); + sub_0805E4E0((Entity*)this, 0xF0); sub_08059064(this); } break; @@ -241,7 +240,7 @@ void sub_08059124(ManagerF* this) { break; case 1: if (CheckFlags(this->unk_3e)) { - sub_0805E4E0(this, 0x4b); + sub_0805E4E0((Entity*)this, 0x4b); this->manager.unk_0e = 0x2d; this->manager.action++; } diff --git a/src/npc/picolyteBottle.c b/src/npc/picolyteBottle.c index 4dd3dcaf..73c99b40 100644 --- a/src/npc/picolyteBottle.c +++ b/src/npc/picolyteBottle.c @@ -38,7 +38,7 @@ void sub_0806DF00(Entity* this) { npc->parent = this; this->field_0x74.HWORD = 0; this->field_0x76.HWORD = 10; - gScreenTransition.field_0x8 = 10; + gScreenTransition.field_0x6 = 10; sub_0806E014(this); sub_0807DD50(this); } else { @@ -108,17 +108,17 @@ void sub_0806E1FC(Entity* this) { } void sub_0806E20C(void) { - if (gScreenTransition.field_0x8 != 0) { + if (gScreenTransition.field_0x6 != 0) { TextboxNoOverlapFollow(0x421f); - gTextBox.field_0x10 = gScreenTransition.field_0x8; + gTextBox.field_0x10 = gScreenTransition.field_0x6; } else { TextboxNoOverlapFollow(0x4220); } } void sub_0806E23C(void) { - if (gScreenTransition.field_0x8 != 0) { - ModRupees(gScreenTransition.field_0x8); + if (gScreenTransition.field_0x6 != 0) { + ModRupees(gScreenTransition.field_0x6); } } diff --git a/src/object/warpPoint.c b/src/object/warpPoint.c new file mode 100644 index 00000000..287a2e70 --- /dev/null +++ b/src/object/warpPoint.c @@ -0,0 +1,230 @@ +#include "global.h" +#include "object.h" +#include "player.h" +#include "flags.h" +#include "game.h" +#include "audio.h" +#include "functions.h" + +extern Hitbox gUnk_080FD168; + +void WarpPoint(Entity*); +void sub_0808B474(Entity*); +void sub_0808B530(Entity*); +void sub_0808B564(Entity*); +void sub_0808B590(Entity*); +void sub_0808B5E8(Entity*); +void sub_0808B684(Entity*); +void sub_0808B73C(Entity*); +u32 sub_0808B7C8(Entity*); +void sub_0808B830(Entity*); + +void (*const gUnk_08121368[])(Entity*) = { + sub_0808B474, sub_0808B530, sub_0808B564, sub_0808B590, sub_0808B5E8, sub_0808B684, +}; + +const u8 gUnk_08121380[3] = { 1, 0, 2 }; + +void WarpPoint(Entity* this) { + if (!this->field_0x70.BYTES.byte0) { + gUnk_08121368[this->action](this); + } else { + sub_0808B73C(this); + } +} + +void sub_0808B474(Entity* this) { + u32 tmp; + this->action = 1; + this->field_0xf = 0; + tmp = gUnk_08121380[this->type]; + this->palette.b.b0 = tmp; + this->spritePriority.b0 = 6; + this->hitbox = &gUnk_080FD168; + this->scriptedScene = 3; + InitializeAnimation(this, 0); + if (CheckFlags(this->field_0x86.HWORD)) { + sub_0808B830(this); + } else { + if (CheckIsDungeon() && sub_0807CAEC(this->type)) { + sub_0808B830(this); + } + } + if (!sub_0808B7C8(this)) + return; + this->action = 4; + this->field_0xf = 0x60; + gPlayerEntity.x.HALF.HI = this->x.HALF.HI; + gPlayerEntity.y.HALF.HI = this->y.HALF.HI; + gPlayerEntity.animationState = 4; + EnqueueSFX(0x112); + sub_0805E4E0(this, this->field_0xf + 0x10); +} + +void sub_0808B530(Entity* this) { + if (CheckFlags(this->field_0x86.HWORD)) { + sub_0808B830(this); + if (CheckIsDungeon()) { + sub_0807CAC8(this->type); + } + this->action = 2; + this->field_0xf = 60; + EnqueueSFX(0x112); + } +} + +void sub_0808B564(Entity* this) { + if (!--this->field_0xf) { + this->action = 3; + } else { + this->spriteSettings.b.draw = this->field_0xf & 2 ? 0 : 1; + } +} + +void sub_0808B590(Entity* this) { + GetNextFrame(this); + if (sub_0808B7C8(this)) { + if (this->actionDelay) + return; + this->action = 5; + this->field_0xf = 0x60; + sub_08077B20(); + gPlayerEntity.x.HALF.HI = this->x.HALF.HI; + gPlayerEntity.y.HALF.HI = this->y.HALF.HI; + gPlayerEntity.animationState = 4; + gPlayerEntity.flags &= ~0x80; + sub_0805E4E0(this, this->field_0xf + 0x10); + SoundReq(0x113); + } else { + this->actionDelay = 0; + } +} + +void sub_0808B5E8(Entity* this) { + u32 tmp; + if (!--this->field_0xf) { + this->action = 3; + this->actionDelay = 1; + gPlayerEntity.animationState = 4; + gPlayerEntity.direction = DirectionSouth; + return; + } + tmp = 0; + switch (this->field_0xf & 0x60) { + case 0x40: + if (this->field_0xf == 0x58) { + SoundReq(0x114); + } + if (!(this->field_0xf & 1)) { + tmp = 1; + } + break; + case 0x20: + if (!(this->field_0xf & 3)) { + tmp = 1; + } + break; + case 0: + if (!(this->field_0xf & 7)) { + if (gPlayerEntity.animationState == 4) { + if (this->field_0xf > 0x18) { + tmp = 1; + } + } else { + tmp = 1; + } + } + break; + } + if (tmp) { + gPlayerEntity.animationState += 2; + gPlayerEntity.animationState &= 6; + } +} + +void sub_0808B684(Entity* this) { + u32 tmp; + if (!--this->field_0xf) { + gScreenTransition.transitioningOut = 1; + gScreenTransition.transitionType = 0; + gScreenTransition.areaID = this->field_0x7c.BYTES.byte0; + gScreenTransition.roomID = this->field_0x7c.BYTES.byte1; + gScreenTransition.playerStartPos.HALF.x = ((this->cutsceneBeh.HWORD & 0x3f) << 4) + 8; + gScreenTransition.playerStartPos.HALF.y = ((this->cutsceneBeh.HWORD & 0xfc0) >> 2) + 8; + gScreenTransition.playerLayer = 0; + gScreenTransition.playerState = 4; + gScreenTransition.field_0xf = 0; + if (this->type == 2) { + gScreenTransition.transitionType = 2; + } + return; + } + tmp = 0; + switch (this->field_0xf & 0x60) { + case 0x40: + if (!(this->field_0xf & 7)) { + tmp = 1; + } + break; + case 0x20: + if (!(this->field_0xf & 3)) { + tmp = 1; + } + break; + case 0: + if (this->field_0xf > 0x10) { + if (!(this->field_0xf & 1)) { + tmp = 1; + } + } else { + gPlayerEntity.spriteSettings.b.draw = 0; + } + break; + } + if (tmp) { + gPlayerEntity.animationState += 2; + gPlayerEntity.animationState &= 6; + } +} + +void sub_0808B73C(Entity* this) { + if (this->action == 0) { + this->action = 1; + this->palette.b.b0 = this->parent->palette.b.b0; + InitializeAnimation(this, 1); + } + if (sub_0806FCB8(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x28)) { + this->spriteSettings.b.draw = 1; + } else { + if (sub_0806FCB8(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x2e)) { + this->spriteSettings.b.draw ^= 1; + } else { + this->spriteSettings.b.draw = 0; + } + } + GetNextFrame(this); +} + +u32 sub_0808B7C8(Entity* this) { + if (!(gPlayerState.flags.all & 0x80) && gPlayerState.field_0xa8 != 0x12 && gPlayerEntity.currentHealth != 0 && + sub_08079F8C() && sub_080041A0(this, &gPlayerEntity, 5, 5) && gPlayerEntity.height.HALF.HI == 0) { + if (this->actionDelay == 0 && gPlayerEntity.action == 0x1b) { + sub_080791D0(); + } + return 1; + } + return 0; +} + +void sub_0808B830(Entity* this) { + Entity* tmp; + this->action = 3; + this->actionDelay = 0; + this->spriteSettings.b.draw = 1; + tmp = CreateObject(0x34, 0, 0); + if (tmp) { + tmp->field_0x70.BYTES.byte0 = 1; + tmp->parent = this; + CopyPosition(this, tmp); + } +} From e1759fa99cac28ae50c24a18c89092f0704ad685 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Thu, 7 Oct 2021 15:10:40 +0200 Subject: [PATCH 50/64] 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 b1e38308727729a356b124a6a31837343e235499 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Tue, 12 Oct 2021 16:44:14 +0200 Subject: [PATCH 51/64] Name CreateProjectile functions --- asm/ballChainSoldier.s | 2 +- asm/bowMoblin.s | 2 +- asm/businessScrubPrologue.s | 2 +- asm/code_08049D30.s | 6 +- asm/code_0805E3B0.s | 8 +- asm/code_080A7C00.s | 4 +- asm/enemy49.s | 2 +- asm/enemy5F.s | 2 +- asm/enemy64.s | 4 +- asm/gleerok.s | 6 +- asm/gyorgFemale.s | 2 +- asm/intr.s | 7 +- asm/non_matching/mazaal/sub_08034B38.inc | 2 +- .../projectile14/sub_080AA544.inc | 134 ------------------ .../projectile1B/sub_080AB634.inc | 49 ------- .../projectile21/sub_080AC200.inc | 2 +- .../projectile22/sub_080AC5E4.inc | 12 +- asm/object98.s | 2 +- asm/objectA0.s | 2 +- asm/objectA5.s | 2 +- asm/octorokBoss.s | 8 +- asm/octorokGolden.s | 2 +- asm/scissorsBeetle.s | 2 +- asm/stalfos.s | 8 +- asm/vaatiArm.s | 2 +- asm/vaatiRebornEnemy.s | 4 +- asm/vaatiTransfigured.s | 10 +- asm/vaatiWrath.s | 2 +- asm/wizzrobeFire.s | 4 +- asm/wizzrobeIce.s | 4 +- asm/wizzrobeWind.s | 6 +- include/functions.h | 6 +- linker.ld | 4 +- src/enemy/businessScrub.c | 2 +- src/enemy/darkNut.c | 10 +- src/enemy/enemy4D.c | 2 +- src/enemy/gyorgMale.c | 6 +- src/enemy/keaton.c | 2 +- src/enemy/lakitu.c | 4 +- src/enemy/mazaalHead.c | 2 +- src/enemy/octorok.c | 2 +- src/enemy/pesto.c | 6 +- src/enemy/spearMoblin.c | 2 +- src/enemy/vaatiBall.c | 4 +- src/entity.c | 4 +- src/npc/guard.c | 2 +- src/projectile/projectile14.c | 8 +- src/projectile/projectile18.c | 2 +- src/projectile/projectile19.c | 8 +- src/projectile/projectile1B.c | 22 ++- src/projectile/projectile1C.c | 2 +- src/projectile/projectile1D.c | 2 +- src/projectile/projectile22.c | 12 +- src/projectile/projectileC.c | 2 +- src/projectile/projectileF.c | 2 +- 55 files changed, 127 insertions(+), 295 deletions(-) delete mode 100644 asm/non_matching/projectile14/sub_080AA544.inc delete mode 100644 asm/non_matching/projectile1B/sub_080AB634.inc diff --git a/asm/ballChainSoldier.s b/asm/ballChainSoldier.s index 515d4854..0f897b81 100644 --- a/asm/ballChainSoldier.s +++ b/asm/ballChainSoldier.s @@ -71,7 +71,7 @@ sub_0803E580: @ 0x0803E580 adds r0, r5, #0 movs r1, #0x19 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent cmp r0, #0 beq _0803E5E4 str r5, [r0, #0x50] diff --git a/asm/bowMoblin.s b/asm/bowMoblin.s index 4ac302e7..1a005d0f 100644 --- a/asm/bowMoblin.s +++ b/asm/bowMoblin.s @@ -344,7 +344,7 @@ _0803C46C: lsrs r2, r2, #0x19 adds r0, r4, #0 movs r1, #0xd - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _0803C49A diff --git a/asm/businessScrubPrologue.s b/asm/businessScrubPrologue.s index f1e8909d..8a48c644 100644 --- a/asm/businessScrubPrologue.s +++ b/asm/businessScrubPrologue.s @@ -261,7 +261,7 @@ _08045D60: adds r0, r4, #0 movs r1, #4 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _08045DF8 diff --git a/asm/code_08049D30.s b/asm/code_08049D30.s index 930b85a7..2368553e 100644 --- a/asm/code_08049D30.s +++ b/asm/code_08049D30.s @@ -1682,13 +1682,13 @@ _0804A982: mov sl, r5 pop {r4, r5, r6, r7, pc} - thumb_func_start sub_0804A98C -sub_0804A98C: @ 0x0804A98C + thumb_func_start CreateProjectileWithParent +CreateProjectileWithParent: @ 0x0804A98C push {r4, r5, r6, lr} adds r6, r0, #0 adds r0, r1, #0 adds r5, r2, #0 - bl sub_080A7EE0 + bl CreateProjectile adds r4, r0, #0 cmp r4, #0 beq _0804A9A8 diff --git a/asm/code_0805E3B0.s b/asm/code_0805E3B0.s index 5a0336df..adb78211 100644 --- a/asm/code_0805E3B0.s +++ b/asm/code_0805E3B0.s @@ -333,7 +333,7 @@ sub_0805E5C0: @ 0x0805E5C0 bl sub_0805E428 bl ClearHitboxList bl sub_0806F0A4 - ldr r1, _0805E5F4 @ =gUnk_03005F40 + ldr r1, _0805E5F4 @ =_UpdateEntities movs r0, #0 bl _call_via_r1 bl ClearAllDeletedEntities @@ -341,18 +341,18 @@ sub_0805E5C0: @ 0x0805E5C0 pop {pc} .align 2, 0 _0805E5F0: .4byte gRoomVars -_0805E5F4: .4byte gUnk_03005F40 +_0805E5F4: .4byte _UpdateEntities thumb_func_start sub_0805E5F8 sub_0805E5F8: @ 0x0805E5F8 push {lr} - ldr r1, _0805E608 @ =gUnk_03005F40 + ldr r1, _0805E608 @ =_UpdateEntities movs r0, #1 bl _call_via_r1 bl ClearAllDeletedEntities pop {pc} .align 2, 0 -_0805E608: .4byte gUnk_03005F40 +_0805E608: .4byte _UpdateEntities thumb_func_start EraseAllEntities EraseAllEntities: @ 0x0805E60C diff --git a/asm/code_080A7C00.s b/asm/code_080A7C00.s index 159cfcbb..38273dbe 100644 --- a/asm/code_080A7C00.s +++ b/asm/code_080A7C00.s @@ -411,8 +411,8 @@ _080A7EDC: _080A7EDE: pop {pc} - thumb_func_start sub_080A7EE0 -sub_080A7EE0: @ 0x080A7EE0 + thumb_func_start CreateProjectile +CreateProjectile: @ 0x080A7EE0 push {r4, r5, lr} adds r5, r0, #0 bl GetEmptyEntity diff --git a/asm/enemy49.s b/asm/enemy49.s index 771bfb54..416bbc1f 100644 --- a/asm/enemy49.s +++ b/asm/enemy49.s @@ -262,7 +262,7 @@ sub_0803D058: @ 0x0803D058 adds r4, r0, #0 movs r1, #0x16 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r5, r0, #0 cmp r5, #0 beq _0803D0AE diff --git a/asm/enemy5F.s b/asm/enemy5F.s index 0c4df266..4109cf33 100644 --- a/asm/enemy5F.s +++ b/asm/enemy5F.s @@ -279,7 +279,7 @@ _080484BC: ands r0, r1 strb r0, [r3] movs r0, #0x24 - bl sub_080A7EE0 + bl CreateProjectile adds r1, r0, #0 cmp r1, #0 beq _080484E6 diff --git a/asm/enemy64.s b/asm/enemy64.s index 19beed75..d70851ed 100644 --- a/asm/enemy64.s +++ b/asm/enemy64.s @@ -139,7 +139,7 @@ _08049144: bl sub_0807B7D8 _0804916E: movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r2, r0, #0 cmp r2, #0 beq _080491E4 @@ -560,7 +560,7 @@ _0804948C: cmp r0, #0 beq _080494B2 movs r0, #0x23 - bl sub_080A7EE0 + bl CreateProjectile adds r2, r0, #0 cmp r2, #0 beq _080494B2 diff --git a/asm/gleerok.s b/asm/gleerok.s index b1e611bb..9bb5a88a 100644 --- a/asm/gleerok.s +++ b/asm/gleerok.s @@ -1838,7 +1838,7 @@ _0802DD74: adds r0, r4, #0 movs r1, #0xa movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 str r1, [r4, #0x54] cmp r1, #0 @@ -1985,7 +1985,7 @@ _0802DE7E: bne _0802DEC4 adds r0, r5, #0 movs r1, #0xa - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 str r1, [r5, #0x54] cmp r1, #0 @@ -2711,7 +2711,7 @@ _0802E40C: adds r0, r4, #0 movs r1, #0xa movs r2, #3 - bl sub_0804A98C + bl CreateProjectileWithParent _0802E422: adds r0, r4, #0 bl sub_0802E518 diff --git a/asm/gyorgFemale.s b/asm/gyorgFemale.s index 49dd9eda..cd5d79f3 100644 --- a/asm/gyorgFemale.s +++ b/asm/gyorgFemale.s @@ -29,7 +29,7 @@ sub_0804614C: @ 0x0804614C cmp r0, #0x3d bhi _08046244 movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r1, r0, #0 movs r4, #0 strb r4, [r1, #0xa] diff --git a/asm/intr.s b/asm/intr.s index c8c67bea..ed83cba1 100644 --- a/asm/intr.s +++ b/asm/intr.s @@ -659,6 +659,7 @@ UpdateEntities: @ 0x080B21B0 ldr r8, [fp, #4] ldr r0, [fp, #8] add pc, pc, #0x60 @ =_080B2230 +@ UpdateEntities starts here ldr r1, _080B2274 @ =gUnk_080026A4 add r1, r1, r0, lsl #4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} @@ -682,12 +683,12 @@ _080B21FC: ldr r1, [sl, r1, lsl #2] mov r0, r4 mov lr, pc - bx r1 + bx r1 @ Jump to address stored in r1 _080B2224: ldr r0, [fp, #8] cmp r0, r4 bleq sub_080B1C54 -_080B2230: +_080B2230: @ jumped here if ClearAndUpdateEntities ldr r4, [r0, #4] b _080B21FC _080B2238: @@ -695,7 +696,7 @@ _080B2238: str r0, [fp, #8] pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} bx lr -_080B2248: .4byte DeleteThisEntity +_080B2248: .4byte DeleteThisEntity @ 0x3005fbc _080B224C: .4byte PlayerUpdate _080B2250: .4byte DeleteThisEntity _080B2254: .4byte EnemyUpdate diff --git a/asm/non_matching/mazaal/sub_08034B38.inc b/asm/non_matching/mazaal/sub_08034B38.inc index 58dda627..319ce862 100644 --- a/asm/non_matching/mazaal/sub_08034B38.inc +++ b/asm/non_matching/mazaal/sub_08034B38.inc @@ -17,7 +17,7 @@ b _08034B9A _08034B58: movs r0, #0xe - bl sub_080A7EE0 + bl CreateProjectile adds r5, r0, #0 cmp r5, #0 beq _08034B9A diff --git a/asm/non_matching/projectile14/sub_080AA544.inc b/asm/non_matching/projectile14/sub_080AA544.inc deleted file mode 100644 index 22945df2..00000000 --- a/asm/non_matching/projectile14/sub_080AA544.inc +++ /dev/null @@ -1,134 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r6, r0, #0 - ldrb r0, [r6, #0xb] - cmp r0, #8 - bhi _080AA618 - ldr r0, _080AA5E8 @ =gUnk_08129FF8 - mov sb, r0 - movs r1, #0x2e - ldrsh r2, [r6, r1] - ldr r1, _080AA5EC @ =gRoomControls - ldrh r0, [r1, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - movs r3, #0x3f - ands r2, r3 - movs r4, #0x32 - ldrsh r0, [r6, r4] - ldrh r1, [r1, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r2, r0 - ldrb r0, [r6, #0xb] - add r0, sb - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r7, r2, r0 - movs r4, #0 - movs r5, #0 - movs r0, #0x38 - adds r0, r0, r6 - mov r8, r0 -_080AA58E: - mov r1, sb - adds r0, r1, r4 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - subs r0, r7, r0 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - mov r2, r8 - ldrb r1, [r2] - bl sub_080002C8 - cmp r0, #0x3e - bne _080AA5AC - adds r5, #1 -_080AA5AC: - adds r4, #1 - cmp r4, #8 - bls _080AA58E - cmp r5, #8 - bne _080AA5F4 - movs r4, #0 - ldr r5, _080AA5F0 @ =gUnk_08129FD0 -_080AA5BA: - ldrh r0, [r5] - mov r3, sb - adds r1, r3, r4 - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - subs r1, r7, r1 - mov r3, r8 - ldrb r2, [r3] - bl sub_0807B7D8 - adds r5, #2 - adds r4, #1 - cmp r4, #8 - bls _080AA5BA - adds r0, r6, #0 - adds r1, r7, #0 - bl sub_080AA654 - ldrh r0, [r6, #0x24] - bl SetFlag - b _080AA648 - .align 2, 0 -_080AA5E8: .4byte gUnk_08129FF8 -_080AA5EC: .4byte gRoomControls -_080AA5F0: .4byte gUnk_08129FD0 -_080AA5F4: - ldr r2, _080AA614 @ =gUnk_08129FE4 - ldrb r1, [r6, #0xb] - lsls r0, r1, #1 - adds r0, r0, r2 - ldrh r0, [r0] - add r1, sb - ldrb r1, [r1] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - subs r1, r7, r1 - mov r4, r8 - ldrb r2, [r4] - bl sub_0807B7D8 - b _080AA648 - .align 2, 0 -_080AA614: .4byte gUnk_08129FE4 -_080AA618: - movs r1, #0x2e - ldrsh r0, [r6, r1] - ldr r2, _080AA650 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r4, #0x32 - ldrsh r1, [r6, r4] - ldrh r2, [r2, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - adds r1, r6, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl sub_0807BA8C - ldrh r0, [r6, #0x24] - bl SetFlag -_080AA648: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080AA650: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/projectile1B/sub_080AB634.inc b/asm/non_matching/projectile1B/sub_080AB634.inc deleted file mode 100644 index 95c6b453..00000000 --- a/asm/non_matching/projectile1B/sub_080AB634.inc +++ /dev/null @@ -1,49 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r0, [r6, #0x50] - movs r5, #0 - adds r4, r0, #0 - adds r4, #0x20 -_080AB640: - ldr r1, [r4] - cmp r1, #0 - beq _080AB684 - adds r0, r6, #0 - bl sub_080177A0 - cmp r0, #0 - beq _080AB684 - ldr r1, [r4] - ldrb r0, [r1, #0xc] - cmp r0, #2 - bhi _080AB67A - movs r0, #3 - strb r0, [r1, #0xc] - ldr r1, [r4] - movs r0, #0x1e - strb r0, [r1, #0xe] - ldr r2, [r4] - ldrb r0, [r2, #0x18] - movs r3, #4 - rsbs r3, r3, #0 - adds r1, r3, #0 - ands r0, r1 - strb r0, [r2, #0x18] - ldr r0, [r4] - movs r1, #0x45 - movs r2, #0 - bl CreateFx -_080AB67A: - adds r0, r6, #0 - bl DeleteEntity - movs r0, #1 - b _080AB68E -_080AB684: - adds r4, #4 - adds r5, #1 - cmp r5, #3 - bls _080AB640 - movs r0, #0 -_080AB68E: - pop {r4, r5, r6, pc} - .syntax divided diff --git a/asm/non_matching/projectile21/sub_080AC200.inc b/asm/non_matching/projectile21/sub_080AC200.inc index 6c1b2b1b..1d117905 100644 --- a/asm/non_matching/projectile21/sub_080AC200.inc +++ b/asm/non_matching/projectile21/sub_080AC200.inc @@ -12,7 +12,7 @@ movs r0, #0x10 strb r0, [r4, #0xe] movs r0, #0x21 - bl sub_080A7EE0 + bl CreateProjectile adds r1, r0, #0 cmp r1, #0 beq _080AC23C diff --git a/asm/non_matching/projectile22/sub_080AC5E4.inc b/asm/non_matching/projectile22/sub_080AC5E4.inc index 7189007f..1bd2d4b8 100644 --- a/asm/non_matching/projectile22/sub_080AC5E4.inc +++ b/asm/non_matching/projectile22/sub_080AC5E4.inc @@ -16,7 +16,7 @@ movs r0, #0x11 strb r0, [r1] movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r6, r0, #0 ldrb r0, [r5, #0xa] strb r0, [r6, #0xa] @@ -30,7 +30,7 @@ strb r0, [r1] str r6, [r5, #0x54] movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r7, r0, #0 ldrb r0, [r5, #0xa] strb r0, [r7, #0xa] @@ -46,7 +46,7 @@ strb r1, [r0] str r7, [r6, #0x54] movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile ldrb r1, [r5, #0xa] strb r1, [r0, #0xa] movs r1, #3 @@ -79,7 +79,7 @@ _080AC678: movs r0, #0xf strb r0, [r1] movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r6, r0, #0 ldrb r0, [r5, #0xa] strb r0, [r6, #0xa] @@ -95,7 +95,7 @@ _080AC678: strb r1, [r0] str r6, [r5, #0x54] movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r7, r0, #0 ldrb r0, [r5, #0xa] strb r0, [r7, #0xa] @@ -112,7 +112,7 @@ _080AC678: str r7, [r6, #0x54] _080AC6C8: movs r0, #0x22 - bl sub_080A7EE0 + bl CreateProjectile adds r6, r0, #0 ldrb r0, [r5, #0xa] strb r0, [r6, #0xa] diff --git a/asm/object98.s b/asm/object98.s index d72bf8b0..18f11555 100644 --- a/asm/object98.s +++ b/asm/object98.s @@ -50,7 +50,7 @@ _0809E372: movs r6, #0xe _0809E392: movs r0, #0x17 - bl sub_080A7EE0 + bl CreateProjectile strb r6, [r0, #0xe] str r4, [r0, #0x50] adds r6, #0xc diff --git a/asm/objectA0.s b/asm/objectA0.s index fee7ebba..17e17e6d 100644 --- a/asm/objectA0.s +++ b/asm/objectA0.s @@ -92,7 +92,7 @@ sub_0809F1B0: @ 0x0809F1B0 ands r0, r1 strb r0, [r2] movs r0, #0x1b - bl sub_080A7EE0 + bl CreateProjectile adds r5, r0, #0 cmp r5, #0 beq _0809F21E diff --git a/asm/objectA5.s b/asm/objectA5.s index 9e86a2bd..44831ffc 100644 --- a/asm/objectA5.s +++ b/asm/objectA5.s @@ -20,7 +20,7 @@ ObjectA5: @ 0x0809F8A4 movs r5, #0 _0809F8B6: movs r0, #0x1d - bl sub_080A7EE0 + bl CreateProjectile adds r4, r0, #0 cmp r5, #0 bne _0809F8C6 diff --git a/asm/octorokBoss.s b/asm/octorokBoss.s index 59ca7773..c55f522a 100644 --- a/asm/octorokBoss.s +++ b/asm/octorokBoss.s @@ -2256,7 +2256,7 @@ _08035F16: adds r0, r5, #0 movs r1, #0xf movs r2, #3 - bl sub_0804A98C + bl CreateProjectileWithParent _08035F48: ldr r1, _08035F78 @ =gUnk_080CF0C4 ldrb r0, [r5, #0xd] @@ -2847,7 +2847,7 @@ sub_08036390: @ 0x08036390 adds r4, r0, #0 movs r1, #0xf movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent str r0, [r4, #0x54] cmp r0, #0 beq _080363B4 @@ -3277,7 +3277,7 @@ _080366D4: adds r0, r4, #0 movs r1, #0xf movs r2, #2 - bl sub_0804A98C + bl CreateProjectileWithParent str r0, [r4, #0x54] cmp r0, #0 beq _08036706 @@ -3323,7 +3323,7 @@ sub_0803670C: @ 0x0803670C adds r0, r4, #0 movs r1, #0xf movs r2, #3 - bl sub_0804A98C + bl CreateProjectileWithParent _08036746: adds r0, r4, #0 adds r0, #0x76 diff --git a/asm/octorokGolden.s b/asm/octorokGolden.s index 3256ab32..35b51f7e 100644 --- a/asm/octorokGolden.s +++ b/asm/octorokGolden.s @@ -177,7 +177,7 @@ sub_08037D54: @ 0x08037D54 adds r0, r4, #0 movs r1, #1 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _08037E0C diff --git a/asm/scissorsBeetle.s b/asm/scissorsBeetle.s index 956643ba..010a9ff0 100644 --- a/asm/scissorsBeetle.s +++ b/asm/scissorsBeetle.s @@ -122,7 +122,7 @@ sub_08038984: @ 0x08038984 push {r4, r5, r6, lr} adds r5, r0, #0 movs r0, #0x13 - bl sub_080A7EE0 + bl CreateProjectile adds r6, r0, #0 cmp r6, #0 beq _080389E6 diff --git a/asm/stalfos.s b/asm/stalfos.s index 1476b093..fa469360 100644 --- a/asm/stalfos.s +++ b/asm/stalfos.s @@ -142,7 +142,7 @@ _08039390: adds r0, r5, #0 movs r1, #0x10 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _080393DC @@ -258,7 +258,7 @@ sub_08039470: @ 0x08039470 bne _08039494 movs r1, #0x10 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _0803949C @@ -1007,7 +1007,7 @@ sub_08039A20: @ 0x08039A20 adds r4, r0, #0 movs r1, #2 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _08039A44 @@ -1107,7 +1107,7 @@ sub_08039AD4: @ 0x08039AD4 ldrb r2, [r4, #0xb] adds r0, r4, #0 movs r1, #0x10 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _08039B20 diff --git a/asm/vaatiArm.s b/asm/vaatiArm.s index e0bb1f35..0c825de9 100644 --- a/asm/vaatiArm.s +++ b/asm/vaatiArm.s @@ -1451,7 +1451,7 @@ sub_08042FD8: @ 0x08042FD8 cmp r0, #0 beq _08043018 movs r0, #0x20 - bl sub_080A7EE0 + bl CreateProjectile adds r4, r0, #0 cmp r4, #0 beq _08043046 diff --git a/asm/vaatiRebornEnemy.s b/asm/vaatiRebornEnemy.s index 1a1a6103..c6334c91 100644 --- a/asm/vaatiRebornEnemy.s +++ b/asm/vaatiRebornEnemy.s @@ -812,7 +812,7 @@ _0803D6C8: ldrb r2, [r5] adds r0, r4, #0 movs r1, #0x1a - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _0803D6EE @@ -1041,7 +1041,7 @@ _0803D870: adds r0, r5, #0 movs r1, #0x18 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r4, r0, #0 cmp r4, #0 beq _0803D8EE diff --git a/asm/vaatiTransfigured.s b/asm/vaatiTransfigured.s index f3aac9f0..410f8a50 100644 --- a/asm/vaatiTransfigured.s +++ b/asm/vaatiTransfigured.s @@ -906,7 +906,7 @@ _0803FE34: ldrb r2, [r4, #0xf] adds r0, r4, #0 movs r1, #0x1f - bl sub_0804A98C + bl CreateProjectileWithParent _0803FE46: ldrb r0, [r4, #0xf] cmp r0, #0 @@ -1015,7 +1015,7 @@ _0803FEFC: ldrb r2, [r4, #0xf] adds r0, r4, #0 movs r1, #0x1f - bl sub_0804A98C + bl CreateProjectileWithParent _0803FF14: ldrb r0, [r4, #0xe] cmp r0, #5 @@ -1033,7 +1033,7 @@ _0803FF24: adds r0, r4, #0 movs r1, #0x1f movs r2, #2 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _0803FF74 @@ -1137,7 +1137,7 @@ _0803FFE4: ldrb r2, [r4, #0xf] adds r0, r4, #0 movs r1, #0x1f - bl sub_0804A98C + bl CreateProjectileWithParent _0803FFFC: ldrb r0, [r4, #0xe] cmp r0, #5 @@ -1155,7 +1155,7 @@ _0804000C: adds r0, r4, #0 movs r1, #0x1f movs r2, #2 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _08040062 diff --git a/asm/vaatiWrath.s b/asm/vaatiWrath.s index 5fb19bab..6cb92bc1 100644 --- a/asm/vaatiWrath.s +++ b/asm/vaatiWrath.s @@ -2160,7 +2160,7 @@ sub_080422C0: @ 0x080422C0 cmp r0, r4 bne _08042306 movs r0, #0x21 - bl sub_080A7EE0 + bl CreateProjectile cmp r0, #0 beq _08042354 mov r1, r8 diff --git a/asm/wizzrobeFire.s b/asm/wizzrobeFire.s index 43f398ff..17a05df2 100644 --- a/asm/wizzrobeFire.s +++ b/asm/wizzrobeFire.s @@ -98,7 +98,7 @@ sub_0802FBB8: @ 0x0802FBB8 adds r0, r4, #0 movs r1, #8 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _0802FBF6 @@ -248,7 +248,7 @@ _0802FCDE: adds r0, r4, #0 movs r1, #8 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _0802FDCA diff --git a/asm/wizzrobeIce.s b/asm/wizzrobeIce.s index f74293ee..8e5c95ee 100644 --- a/asm/wizzrobeIce.s +++ b/asm/wizzrobeIce.s @@ -125,7 +125,7 @@ sub_0802FE90: @ 0x0802FE90 adds r0, r4, #0 movs r1, #9 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _0802FECE @@ -275,7 +275,7 @@ _0802FFB6: adds r0, r4, #0 movs r1, #9 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _080300A2 diff --git a/asm/wizzrobeWind.s b/asm/wizzrobeWind.s index b411d030..0e24ccf7 100644 --- a/asm/wizzrobeWind.s +++ b/asm/wizzrobeWind.s @@ -151,7 +151,7 @@ _0802F5B8: adds r0, r4, #0 movs r1, #7 movs r2, #0 - bl sub_0804A98C + bl CreateProjectileWithParent adds r1, r0, #0 cmp r1, #0 beq _0802F5D0 @@ -300,7 +300,7 @@ _0802F6B6: adds r0, r4, #0 movs r1, #7 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r2, r0, #0 cmp r2, #0 beq _0802F7A2 @@ -493,7 +493,7 @@ _0802F84C: adds r0, r4, #0 movs r1, #7 movs r2, #1 - bl sub_0804A98C + bl CreateProjectileWithParent adds r5, r0, #0 cmp r5, #0 beq _0802F884 diff --git a/include/functions.h b/include/functions.h index 22915222..45e0f294 100644 --- a/include/functions.h +++ b/include/functions.h @@ -80,7 +80,7 @@ extern u32 sub_08049FA0(Entity*); extern u32 sub_08049FDC(Entity*, u32); extern u32 sub_080041A0(Entity*, Entity*, u32, u32); extern u32 sub_08049EE4(Entity*); -extern Entity* sub_0804A98C(Entity*, u8, u8); +extern Entity* CreateProjectileWithParent(Entity*, u8, u8); extern u32 GetBottleContaining(u32); extern void sub_08077E54(ItemBehavior*); extern void sub_080042BA(Entity*, u32); @@ -206,7 +206,7 @@ extern void sub_0802F45C(Entity*); extern u32 sub_0800419C(Entity*, Entity*, u32, u32); extern void sub_08004542(Entity*); extern void sub_08077B20(); -extern u32 sub_080040A8(Entity*); +extern bool32 sub_080040A8(Entity*); extern u32 sub_08017850(Entity*); extern void sub_080809D4(void); extern void sub_08080CB4(Entity*); @@ -227,7 +227,7 @@ extern u32 sub_0805F7A0(u32); extern u32* sub_0805F25C(u32); extern u32 sub_080045DA(s32, s32); u32 sub_0806FCB8(Entity*, u32, u32, u32); -extern Entity* sub_080A7EE0(u32); +extern Entity* CreateProjectile(u32); extern void sub_080A1D70(Entity*, u32); extern void sub_0806F62C(Entity*, u32, u32); extern void sub_080A1ED0(u32, u32, u32); diff --git a/linker.ld b/linker.ld index 42de15d3..14a873ce 100644 --- a/linker.ld +++ b/linker.ld @@ -277,8 +277,8 @@ SECTIONS { . = 0x00005D90; IntrMain = .; . = 0x00005E60; gUnk_03005E60 = .; . = 0x00005E98; gUnk_03005E98 = .; - . = 0x00005F24; _EntUpdate = .; - . = 0x00005F40; gUnk_03005F40 = .; + . = 0x00005F24; _ClearAndUpdateEntities = .; + . = 0x00005F40; _UpdateEntities = .; . = 0x00005FBC; gUnk_03005FBC = .; . = 0x00005FF0; gUnk_03005FF0 = .; . = 0x000060F0; gUnk_030060F0 = .; diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c index 2fd6ac8f..afc9da4e 100644 --- a/src/enemy/businessScrub.c +++ b/src/enemy/businessScrub.c @@ -138,7 +138,7 @@ void sub_08028A74(Entity* this) { unk = 1; sub_080290FC(this); if (this->frames.all & 1) { - Entity* ent = sub_0804A98C(this, 4, 0); + Entity* ent = CreateProjectileWithParent(this, 4, 0); if (ent != NULL) { ent->parent = this; ent->direction = this->direction; diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c index 6f9d08e7..4ede2e2d 100644 --- a/src/enemy/darkNut.c +++ b/src/enemy/darkNut.c @@ -224,7 +224,7 @@ void sub_08020F48(Entity* this) { this->action = 14; sub_08021218(this, 13, uVar2 >> 3); - pEVar3 = sub_0804A98C(this, 0, 1); + pEVar3 = CreateProjectileWithParent(this, 0, 1); if (pEVar3) { pEVar3->parent = this; this->attachedEntity = pEVar3; @@ -270,7 +270,7 @@ void sub_08021010(Entity* this) { void sub_08021038(Entity* this) { if (this->attachedEntity == NULL && this->frames.all) { - Entity* pEVar2 = (Entity*)sub_0804A98C(this, 0, 0); + Entity* pEVar2 = (Entity*)CreateProjectileWithParent(this, 0, 0); if (pEVar2) { pEVar2->parent = this; this->attachedEntity = pEVar2; @@ -309,7 +309,7 @@ void sub_080210E4(Entity* this) { Entity* ent; this->frames.all &= ~1; - ent = sub_0804A98C(this, 0, 2); + ent = CreateProjectileWithParent(this, 0, 2); if (ent) { ent->parent = this; this->attachedEntity = ent; @@ -569,7 +569,7 @@ void sub_0802159C(Entity* this) { this->frames.all = 0; this->damageType = 0x51; - ent = sub_0804A98C(this, 0, 3); + ent = CreateProjectileWithParent(this, 0, 3); if (ent) { ent->parent = this; this->attachedEntity = ent; @@ -590,7 +590,7 @@ void sub_08021600(Entity* this) { this->frames.all = 0; this->damageType = 0x51; - ent = sub_0804A98C(this, 0, 4); + ent = CreateProjectileWithParent(this, 0, 4); if (ent) { ent->parent = this; this->attachedEntity = ent; diff --git a/src/enemy/enemy4D.c b/src/enemy/enemy4D.c index a29157bc..0049a853 100644 --- a/src/enemy/enemy4D.c +++ b/src/enemy/enemy4D.c @@ -36,7 +36,7 @@ void sub_0803EB44(Entity* this) { Entity* pEVar1; sub_0804A720(this); - pEVar1 = sub_0804A98C(this, 0x19, 0); + pEVar1 = CreateProjectileWithParent(this, 0x19, 0); if (pEVar1 != NULL) { pEVar1->parent = this; this->attachedEntity = pEVar1; diff --git a/src/enemy/gyorgMale.c b/src/enemy/gyorgMale.c index 921784df..effceb3b 100644 --- a/src/enemy/gyorgMale.c +++ b/src/enemy/gyorgMale.c @@ -109,7 +109,7 @@ void GyorgMale(Entity* this) { } void sub_08046898(Entity* this) { - Entity* tmp = sub_080A7EE0(0x22); + Entity* tmp = CreateProjectile(0x22); u32 tmp2; if (!tmp) return; @@ -402,7 +402,7 @@ void sub_08046EF4(Entity* this) { if ((--this->field_0xf & 0xFF) == 0) { Entity* tmp; this->field_0xf = (Random() & 0x38) + 0x78; - tmp = sub_080A7EE0(0x23); + tmp = CreateProjectile(0x23); if (tmp) { tmp->collisionLayer = 2; tmp->parent = this; @@ -426,7 +426,7 @@ void sub_08046F64(Entity* this) { if (--this->field_0x7c.HALF.HI == 0) { Entity* tmp; this->field_0x7c.HALF.HI = 0x78; - tmp = sub_080A7EE0(0x23); + tmp = CreateProjectile(0x23); if (tmp) { tmp->collisionLayer = 2; tmp->parent = this; diff --git a/src/enemy/keaton.c b/src/enemy/keaton.c index 79e98065..df748792 100644 --- a/src/enemy/keaton.c +++ b/src/enemy/keaton.c @@ -232,7 +232,7 @@ void sub_08032794(Entity* this) { void sub_080327C8(Entity* this) { Entity* child; - child = sub_0804A98C(this, 11, 0); + child = CreateProjectileWithParent(this, 11, 0); if (child != NULL) { child->parent = this; this->attachedEntity = child; diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c index cd9ce2b2..d97bec40 100644 --- a/src/enemy/lakitu.c +++ b/src/enemy/lakitu.c @@ -117,7 +117,7 @@ void sub_0803C86C(Entity* this) { } void Lakitu_Initialize(Entity* this) { - Entity* cloud = sub_0804A98C(this, 17, 0); + Entity* cloud = CreateProjectileWithParent(this, 17, 0); if (cloud == NULL) { return; } @@ -303,7 +303,7 @@ void Lakitu_SpawnLightning(Entity* this) { Entity* lightning; const OffsetCoords* offset; - lightning = sub_0804A98C(this, 18, 0); + lightning = CreateProjectileWithParent(this, 18, 0); if (lightning == NULL) { return; diff --git a/src/enemy/mazaalHead.c b/src/enemy/mazaalHead.c index 1672b5c4..bfa45e69 100644 --- a/src/enemy/mazaalHead.c +++ b/src/enemy/mazaalHead.c @@ -779,7 +779,7 @@ NONMATCH("asm/non_matching/mazaal/sub_08034B38.inc", void sub_08034B38(Entity* t this->action = 3; InitializeAnimation(this, this->type + 3); } else { - target = sub_080A7EE0(0xe); + target = CreateProjectile(0xe); if (target != NULL) { target->type -= 2; if (target->type == 0) { diff --git a/src/enemy/octorok.c b/src/enemy/octorok.c index 565ed259..525ad1bf 100644 --- a/src/enemy/octorok.c +++ b/src/enemy/octorok.c @@ -126,7 +126,7 @@ void Octorok_Move(Entity* this) { void Octorok_ShootNut(Entity* this) { GetNextFrame(this); if (this->frames.all & 1) { - Entity* ent = sub_0804A98C(this, 1, 0); + Entity* ent = CreateProjectileWithParent(this, 1, 0); if (ent) { const s8* off; ent->direction = this->direction; diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c index 1277f0c6..698edc94 100644 --- a/src/enemy/pesto.c +++ b/src/enemy/pesto.c @@ -170,7 +170,7 @@ void sub_080240B8(Entity* this) { Entity* ent; this->field_0x82.HALF.HI = 0; - ent = sub_0804A98C(this, 6, this->field_0x82.HALF.HI); + ent = CreateProjectileWithParent(this, 6, this->field_0x82.HALF.HI); if (ent) { this->attachedEntity = ent; ent->parent = this; @@ -413,7 +413,7 @@ void sub_080244E8(Entity* this) { this->height.HALF.HI -= 0xe; this->field_0x78.HWORD -= 0xe; - ent = sub_0804A98C(this, 6, this->field_0x82.HALF.HI); + ent = CreateProjectileWithParent(this, 6, this->field_0x82.HALF.HI); if (ent) { ent->parent = this; ent->height.HALF.HI += 0xe; @@ -436,7 +436,7 @@ void sub_080244E8(Entity* this) { this->height.HALF.HI -= 0xe; this->field_0x78.HWORD -= 0xe; - ent = sub_0804A98C(this, 6, this->field_0x82.HALF.HI); + ent = CreateProjectileWithParent(this, 6, this->field_0x82.HALF.HI); if (ent) { ent->parent = this; ent->height.HALF.HI += 0xe; diff --git a/src/enemy/spearMoblin.c b/src/enemy/spearMoblin.c index b12186e0..68f52f04 100644 --- a/src/enemy/spearMoblin.c +++ b/src/enemy/spearMoblin.c @@ -94,7 +94,7 @@ void sub_08028314(Entity* this) { sub_08028604(this); } - pEVar2 = sub_080A7EE0(3); + pEVar2 = CreateProjectile(3); if (pEVar2 != NULL) { pEVar2->parent = this; this->attachedEntity = pEVar2; diff --git a/src/enemy/vaatiBall.c b/src/enemy/vaatiBall.c index 903a84db..00c3f24c 100644 --- a/src/enemy/vaatiBall.c +++ b/src/enemy/vaatiBall.c @@ -185,7 +185,7 @@ void sub_08044868(Entity* this) { if (*(u8*)&vaati->field_0x86 > 1) { u8 draw = this->spriteSettings.b.draw; if (draw == 1 && this->cutsceneBeh.HALF.LO == 0) { - vaati = sub_0804A98C(this, 0x18, 0); + vaati = CreateProjectileWithParent(this, 0x18, 0); if (vaati) { vaati->type2 = 1; vaati->parent = this; @@ -275,7 +275,7 @@ void sub_080449F8(Entity* this) { this->field_0x74.HALF.LO++; draw = this->spriteSettings.b.draw; if (draw) { - vaati = sub_0804A98C(this, 0x1c, 0); + vaati = CreateProjectileWithParent(this, 0x1c, 0); if (vaati) { vaati->y.HALF.HI += 4; vaati->parent = this; diff --git a/src/entity.c b/src/entity.c index 02230491..60e571ff 100644 --- a/src/entity.c +++ b/src/entity.c @@ -48,11 +48,11 @@ typedef struct { extern struct_03003DD0 gUnk_03003DD0; extern u32 _call_via_r0(u32*); -extern u32 _EntUpdate; +extern u32 _ClearAndUpdateEntities; void DeleteThisEntity(void) { DeleteEntityAny(gUnk_03003DD0.field_0x8); - _call_via_r0((u32*)&_EntUpdate); + _call_via_r0((u32*)&_ClearAndUpdateEntities); } void DeleteManager(OtherEntity*); diff --git a/src/npc/guard.c b/src/npc/guard.c index d94827c4..7e9b0034 100644 --- a/src/npc/guard.c +++ b/src/npc/guard.c @@ -64,7 +64,7 @@ void sub_08063D44(Entity* this) { sub_0806EE04(this, gUnk_0810F6BC[this->type], 0); switch (this->type) { case 0 ... 3: - ent = sub_080A7EE0(0xc); + ent = CreateProjectile(0xc); ent->parent = this; ent->field_0xf = 0x3c; break; diff --git a/src/projectile/projectile14.c b/src/projectile/projectile14.c index 0284e5d0..301e441e 100644 --- a/src/projectile/projectile14.c +++ b/src/projectile/projectile14.c @@ -91,7 +91,8 @@ void sub_080AA534(Entity* this) { UpdateSpriteForCollisionLayer(this); } -NONMATCH("asm/non_matching/projectile14/sub_080AA544.inc", void sub_080AA544(Entity* this)) { + +void sub_080AA544(Entity* this) { u8* pbVar1; s32 iVar2; u32 uVar3; @@ -125,9 +126,7 @@ NONMATCH("asm/non_matching/projectile14/sub_080AA544.inc", void sub_080AA544(Ent SetFlag((u16)this->speed); } else { sub_0807B7D8(gUnk_08129FE4[this->type2], - param - - // TODO this array access is wrong - *((s8*)gUnk_08129FE4 + this->type2), + param - tmp[this->type2], this->collisionLayer); } } else { @@ -135,7 +134,6 @@ NONMATCH("asm/non_matching/projectile14/sub_080AA544.inc", void sub_080AA544(Ent SetFlag((u16)this->speed); } } -END_NONMATCH void sub_080AA654(Entity* this, u32 param) { EntityData* entityData; diff --git a/src/projectile/projectile18.c b/src/projectile/projectile18.c index 7efec1c5..999ca4e6 100644 --- a/src/projectile/projectile18.c +++ b/src/projectile/projectile18.c @@ -101,7 +101,7 @@ void sub_080AADBC(Entity* this) { this->direction = GetFacingDirection(this, &gPlayerEntity); this->field_0x86.HALF.LO = 0; this->cutsceneBeh.HWORD = 300; - entity = sub_080A7EE0(0x18); + entity = CreateProjectile(0x18); if (entity != NULL) { entity->type = 1; entity->type2 = this->type2; diff --git a/src/projectile/projectile19.c b/src/projectile/projectile19.c index 8c23bd65..c89f2d15 100644 --- a/src/projectile/projectile19.c +++ b/src/projectile/projectile19.c @@ -35,7 +35,7 @@ void sub_080AB074(Entity* this) { this->height.HALF.HI += (s8)parent->field_0x7c.BYTES.byte3; if (parent->field_0x7a.HALF.HI != 0) { - parent = sub_080A7EE0(0x19); + parent = CreateProjectile(0x19); if (parent != NULL) { parent->type = 4; CopyPositionAndSpriteOffset(this, parent); @@ -49,13 +49,13 @@ bool32 sub_080AB12C(Entity* this) { if (gEntCount > 0x44) { return FALSE; } - entity = sub_080A7EE0(0x19); + entity = CreateProjectile(0x19); entity->type = 1; entity->parent = this; - entity = sub_080A7EE0(0x19); + entity = CreateProjectile(0x19); entity->type = 2; entity->parent = this; - entity = sub_080A7EE0(0x19); + entity = CreateProjectile(0x19); entity->type = 3; entity->parent = this; return TRUE; diff --git a/src/projectile/projectile1B.c b/src/projectile/projectile1B.c index 01284bc3..34b65650 100644 --- a/src/projectile/projectile1B.c +++ b/src/projectile/projectile1B.c @@ -15,6 +15,8 @@ extern void sub_080043A8(Entity*); extern void CreateItemOnGround(Entity*); extern void CreateChestSpawner(Entity*); +extern u32 sub_080177A0(Entity*, Entity*); + void Projectile1B(Entity* this) { gUnk_0812A58C[GetNextFunction(this)](this); } @@ -63,8 +65,6 @@ void sub_080AB5C4(Entity* this) { } bool32 sub_080AB5F4(Entity* this) { - u32 uVar1; - switch (sub_080043E8(this)) { case 1: CreateItemOnGround(this); @@ -79,4 +79,20 @@ bool32 sub_080AB5F4(Entity* this) { return FALSE; } -ASM_FUNC("asm/non_matching/projectile1B/sub_080AB634.inc", bool32 sub_080AB634(Entity* this)) +bool32 sub_080AB634(Entity* this) { + Entity** entities = ((Entity**)&this->parent->field_0x20); + u32 i; + for (i = 0; i <= 3; ++i) { + if(entities[i] != NULL && (sub_080177A0(this, entities[i]) != 0)) { + if (entities[i]->action < 3) { + entities[i]->action = 3; + entities[i]->actionDelay = 0x1e; + entities[i]->spriteSettings.b.draw = 0; + CreateFx(entities[i], 0x45, 0); + } + DeleteEntity(this); + return TRUE; + } + } + return FALSE; +} diff --git a/src/projectile/projectile1C.c b/src/projectile/projectile1C.c index 5b5f1938..62d9a391 100644 --- a/src/projectile/projectile1C.c +++ b/src/projectile/projectile1C.c @@ -59,7 +59,7 @@ ASM_FUNC("asm/non_matching/projectile1C/sub_080AB758.inc", void sub_080AB758(Ent void sub_080AB844(Entity* this, s32 param_1, s32 param_2) { Entity* entity; - entity = sub_080A7EE0(0x1c); + entity = CreateProjectile(0x1c); if (entity != NULL) { entity->type = 1; entity->actionDelay = param_1; diff --git a/src/projectile/projectile1D.c b/src/projectile/projectile1D.c index c6dfe87f..f79079e3 100644 --- a/src/projectile/projectile1D.c +++ b/src/projectile/projectile1D.c @@ -25,7 +25,7 @@ void sub_080AB8E8(Entity* this) { } InitializeAnimation(this, 0); if (this->type < 4) { - entity = sub_080A7EE0(0x1d); + entity = CreateProjectile(0x1d); entity->type = this->type + 1; entity->parent = this->parent; entity->attachedEntity = this; diff --git a/src/projectile/projectile22.c b/src/projectile/projectile22.c index bbc4fc58..9da1e83c 100644 --- a/src/projectile/projectile22.c +++ b/src/projectile/projectile22.c @@ -139,20 +139,20 @@ NONMATCH("asm/non_matching/projectile22/sub_080AC5E4.inc", bool32 sub_080AC5E4(E return 0; } this->field_0x78.HALF.HI = 0x11; - entity = sub_080A7EE0(0x22); + entity = CreateProjectile(0x22); entity->type = this->type; entity->type2 = 1; entity->parent = this->parent; entity->field_0x78.HALF.HI = 0x12; this->attachedEntity = entity; - entity2 = sub_080A7EE0(0x22); + entity2 = CreateProjectile(0x22); entity2->type = this->type; entity2->type2 = 2; entity2->parent = this->parent; entity2->field_0x78.HALF.HI = 0x14; uVar3 = entity2->field_0x78.HALF.HI; entity->attachedEntity = entity2; - entity3 = sub_080A7EE0(0x22); + entity3 = CreateProjectile(0x22); entity3->type = this->type; entity3->type2 = 3; entity3->parent = this->parent; @@ -164,14 +164,14 @@ NONMATCH("asm/non_matching/projectile22/sub_080AC5E4.inc", bool32 sub_080AC5E4(E return 0; } this->field_0x78.HALF.HI = 0xf; - entity = sub_080A7EE0(0x22); + entity = CreateProjectile(0x22); entity->type = this->type; entity->type2 = 1; entity->parent = this->parent; entity->field_0x78.HALF.HI = 0x10; uVar3 = entity->field_0x78.HALF.HI; this->attachedEntity = entity; - entity2 = sub_080A7EE0(0x22); + entity2 = CreateProjectile(0x22); entity2->type = this->type; entity2->type2 = 2; entity2->parent = this->parent; @@ -179,7 +179,7 @@ NONMATCH("asm/non_matching/projectile22/sub_080AC5E4.inc", bool32 sub_080AC5E4(E entity2->field_0x78.HALF.HI = 0x20; entity->attachedEntity = entity2; } - entity4 = sub_080A7EE0(0x22); + entity4 = CreateProjectile(0x22); entity4->type = this->type; entity4->type2 = 4; entity4->parent = this->parent; diff --git a/src/projectile/projectileC.c b/src/projectile/projectileC.c index 8af3163a..0e617ba8 100644 --- a/src/projectile/projectileC.c +++ b/src/projectile/projectileC.c @@ -31,7 +31,7 @@ void ProjectileC(Entity* this) { } else { if (sub_080644C8(this) != 0) { if (((this->actionDelay++) & 3) == 0) { - entity = sub_080A7EE0(0xc); + entity = CreateProjectile(0xc); if (entity != NULL) { entity->type = 1; tmp = this->parent->field_0x3e; diff --git a/src/projectile/projectileF.c b/src/projectile/projectileF.c index 5f9ce5a4..a69eddc0 100644 --- a/src/projectile/projectileF.c +++ b/src/projectile/projectileF.c @@ -133,7 +133,7 @@ void sub_080A976C(Entity* this) { return; } for (index = 0; index < 3; ++index) { - this->attachedEntity = sub_0804A98C(this, 0xf, 1); + this->attachedEntity = CreateProjectileWithParent(this, 0xf, 1); if (this->attachedEntity != NULL) { this->attachedEntity->parent = this->parent; this->attachedEntity->direction = this->direction + gUnk_08129ADC[index]; From 6630a82057c924b1da6f723ee12daa87cf055497 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 16 Oct 2021 15:25:15 +0200 Subject: [PATCH 52/64] Rename projectiles --- .../sub_080AB170.inc | 0 ...44.inc => MandiblesProjectile_Action3.inc} | 0 .../sub_080AC8DC.inc | 2 +- .../sub_080AC388.inc | 0 .../sub_080AC5E4.inc | 0 .../sub_080AC6F0.inc | 0 .../sub_080AC760.inc | 0 .../sub_080AC7C4.inc | 0 .../sub_080AA320.inc | 0 .../sub_080AA374.inc | 0 .../MoblinSpear_Action1.inc} | 0 .../sub_080AA9E0.inc | 0 .../sub_080ABA74.inc | 0 .../sub_080ABAE0.inc | 0 .../sub_080AACE0.inc | 0 .../sub_080AB758.inc | 0 .../sub_080ABBA8.inc | 0 .../sub_080ABBF4.inc | 0 .../sub_080ABE04.inc | 0 .../sub_080ABFEC.inc | 0 .../sub_080AC168.inc | 0 .../sub_080AC200.inc | 0 .../sub_080ACA68.inc | 0 .../sub_080ACB40.inc | 0 .../{projectile1D => winder}/sub_080AB950.inc | 0 .../{projectile1D => winder}/sub_080AB9FC.inc | 0 .../{projectileD.s => arrowProjectile.s} | 0 .../{projectile2.s => boneProjectile.s} | 0 ...{projectile1B.s => cannonballProjectile.s} | 0 .../{projectile6.s => dirtBallProjectile.s} | 0 .../{projectile8.s => fireProjectile.s} | 0 ...ectile23.s => gyorgMaleEnergyProjectile.s} | 0 .../{projectile9.s => iceProjectile.s} | 0 ...projectile11.s => lakituCloudProjectile.s} | 0 .../{projectile12.s => lakituLightning.s} | 0 .../{projectile13.s => mandiblesProjectile.s} | 0 .../{projectileE.s => mazaalEnergyBeam.s} | 0 .../{projectile1.s => rockProjectile.s} | 0 .../{projectile15.s => spiderWeb.s} | 0 .../{projectile1E.s => spikedRollers.s} | 0 .../{projectile16.s => torchTrapProjectile.s} | 7 + ...projectile18.s => v1DarkMagicProjectile.s} | 0 .../{projectile1C.s => v1EyeLaser.s} | 0 .../{projectile1F.s => v2Projectile.s} | 0 .../{projectile20.s => v3HandProjectile.s} | 0 .../{projectile7.s => windProjectile.s} | 0 data/const/projectile/projectile0.s | 197 ------------------ data/const/projectile/projectile1.s | 18 -- data/const/projectile/projectile10.s | 33 --- data/const/projectile/projectile11.s | 23 -- data/const/projectile/projectile12.s | 17 -- data/const/projectile/projectile13.s | 63 ------ data/const/projectile/projectile14.s | 25 --- data/const/projectile/projectile15.s | 45 ---- data/const/projectile/projectile16.s | 24 --- data/const/projectile/projectile18.s | 25 --- data/const/projectile/projectile19.s | 15 -- data/const/projectile/projectile1A.s | 21 -- data/const/projectile/projectile1B.s | 17 -- data/const/projectile/projectile1C.s | 36 ---- data/const/projectile/projectile1D.s | 15 -- data/const/projectile/projectile1E.s | 13 -- data/const/projectile/projectile1F.s | 32 --- data/const/projectile/projectile2.s | 20 -- data/const/projectile/projectile20.s | 13 -- data/const/projectile/projectile21.s | 28 --- data/const/projectile/projectile22.s | 29 --- data/const/projectile/projectile23.s | 19 -- data/const/projectile/projectile24.s | 18 -- data/const/projectile/projectile3.s | 19 -- data/const/projectile/projectile4.s | 19 -- data/const/projectile/projectile5.s | 19 -- data/const/projectile/projectile6.s | 22 -- data/const/projectile/projectile7.s | 12 -- data/const/projectile/projectile8.s | 12 -- data/const/projectile/projectile9.s | 12 -- data/const/projectile/projectileA.s | 27 --- data/const/projectile/projectileB.s | 23 -- data/const/projectile/projectileC.s | 8 - data/const/projectile/projectileD.s | 35 ---- data/const/projectile/projectileE.s | 11 - data/const/projectile/projectileF.s | 20 -- data/data_08129320.s | 72 +++---- linker.ld | 184 ++++++++-------- .../{projectileD.c => arrowProjectile.c} | 67 +++--- .../{projectile19.c => ballAndChain.c} | 18 +- .../{projectile2.c => boneProjectile.c} | 36 ++-- ...{projectile1B.c => cannonballProjectile.c} | 44 ++-- src/projectile/darkNutSwordSlash.c | 188 +++++++++++++++++ .../{projectile4.c => dekuSeedProjectile.c} | 39 ++-- .../{projectile6.c => dirtBallProjectile.c} | 39 ++-- .../{projectile8.c => fireProjectile.c} | 27 ++- .../{projectileA.c => gleerokProjectile.c} | 45 ++-- .../{projectileC.c => guardLineOfSight.c} | 13 +- ...projectile17.c => guruguruBarProjectile.c} | 2 +- ...ectile23.c => gyorgMaleEnergyProjectile.c} | 41 ++-- .../{projectile22.c => gyorgTail.c} | 47 +++-- .../{projectile9.c => iceProjectile.c} | 23 +- src/projectile/keatonDagger.c | 45 ++++ src/projectile/lakituCloudProjectile.c | 77 +++++++ src/projectile/lakituLightning.c | 52 +++++ .../{projectile13.c => mandiblesProjectile.c} | 88 ++++---- .../{projectileE.c => mazaalEnergyBeam.c} | 18 +- .../{projectile3.c => moblinSpear.c} | 49 +++-- ...{projectileF.c => octorokBossProjectile.c} | 53 +++-- src/projectile/projectile0.c | 73 ------- src/projectile/projectile11.c | 66 ------ src/projectile/projectile12.c | 45 ---- src/projectile/projectile16.c | 53 ----- src/projectile/projectile1E.c | 11 - src/projectile/projectile24.c | 66 ------ src/projectile/projectile5.c | 35 ++-- src/projectile/projectileB.c | 27 --- .../{projectile14.c => removableDust.c} | 47 +++-- .../{projectile1.c => rockProjectile.c} | 37 ++-- .../{projectile15.c => spiderWeb.c} | 84 +++++--- src/projectile/spikedRollers.c | 20 ++ .../{projectile10.c => stalfosProjectile.c} | 75 ++++--- src/projectile/torchTrapProjectile.c | 60 ++++++ ...projectile18.c => v1DarkMagicProjectile.c} | 51 +++-- .../{projectile1C.c => v1EyeLaser.c} | 54 +++-- .../{projectile1A.c => v1FireProjectile.c} | 51 +++-- .../{projectile1F.c => v2Projectile.c} | 38 +++- ...{projectile21.c => v3ElectricProjectile.c} | 42 ++-- .../{projectile20.c => v3HandProjectile.c} | 14 +- src/projectile/v3TennisBallProjectile.c | 73 +++++++ .../{projectile7.c => windProjectile.c} | 27 ++- src/projectile/{projectile1D.c => winder.c} | 26 ++- 128 files changed, 1426 insertions(+), 1910 deletions(-) rename asm/non_matching/{projectile19 => ballAndChain}/sub_080AB170.inc (100%) rename asm/non_matching/eu/{sub_080AA044.inc => MandiblesProjectile_Action3.inc} (100%) rename asm/non_matching/{projectile23 => gyorgMaleEnergyProjectile}/sub_080AC8DC.inc (94%) rename asm/non_matching/{projectile22 => gyorgTail}/sub_080AC388.inc (100%) rename asm/non_matching/{projectile22 => gyorgTail}/sub_080AC5E4.inc (100%) rename asm/non_matching/{projectile22 => gyorgTail}/sub_080AC6F0.inc (100%) rename asm/non_matching/{projectile22 => gyorgTail}/sub_080AC760.inc (100%) rename asm/non_matching/{projectile22 => gyorgTail}/sub_080AC7C4.inc (100%) rename asm/non_matching/{projectile13 => mandiblesProjectile}/sub_080AA320.inc (100%) rename asm/non_matching/{projectile13 => mandiblesProjectile}/sub_080AA374.inc (100%) rename asm/non_matching/{projectile3/sub_080A83B4.inc => moblinSpear/MoblinSpear_Action1.inc} (100%) rename asm/non_matching/{projectile15 => spiderWeb}/sub_080AA9E0.inc (100%) rename asm/non_matching/{projectile1E => spikedRollers}/sub_080ABA74.inc (100%) rename asm/non_matching/{projectile1E => spikedRollers}/sub_080ABAE0.inc (100%) rename asm/non_matching/{projectile18 => v1DarkMagicProjectile}/sub_080AACE0.inc (100%) rename asm/non_matching/{projectile1C => v1EyeLaser}/sub_080AB758.inc (100%) rename asm/non_matching/{projectile1F => v2Projectile}/sub_080ABBA8.inc (100%) rename asm/non_matching/{projectile1F => v2Projectile}/sub_080ABBF4.inc (100%) rename asm/non_matching/{projectile1F => v2Projectile}/sub_080ABE04.inc (100%) rename asm/non_matching/{projectile21 => v3ElectricProjectile}/sub_080ABFEC.inc (100%) rename asm/non_matching/{projectile21 => v3ElectricProjectile}/sub_080AC168.inc (100%) rename asm/non_matching/{projectile21 => v3ElectricProjectile}/sub_080AC200.inc (100%) rename asm/non_matching/{projectile24 => v3TennisBallProjectile}/sub_080ACA68.inc (100%) rename asm/non_matching/{projectile24 => v3TennisBallProjectile}/sub_080ACB40.inc (100%) rename asm/non_matching/{projectile1D => winder}/sub_080AB950.inc (100%) rename asm/non_matching/{projectile1D => winder}/sub_080AB9FC.inc (100%) rename data/animations/projectile/{projectileD.s => arrowProjectile.s} (100%) rename data/animations/projectile/{projectile2.s => boneProjectile.s} (100%) rename data/animations/projectile/{projectile1B.s => cannonballProjectile.s} (100%) rename data/animations/projectile/{projectile6.s => dirtBallProjectile.s} (100%) rename data/animations/projectile/{projectile8.s => fireProjectile.s} (100%) rename data/animations/projectile/{projectile23.s => gyorgMaleEnergyProjectile.s} (100%) rename data/animations/projectile/{projectile9.s => iceProjectile.s} (100%) rename data/animations/projectile/{projectile11.s => lakituCloudProjectile.s} (100%) rename data/animations/projectile/{projectile12.s => lakituLightning.s} (100%) rename data/animations/projectile/{projectile13.s => mandiblesProjectile.s} (100%) rename data/animations/projectile/{projectileE.s => mazaalEnergyBeam.s} (100%) rename data/animations/projectile/{projectile1.s => rockProjectile.s} (100%) rename data/animations/projectile/{projectile15.s => spiderWeb.s} (100%) rename data/animations/projectile/{projectile1E.s => spikedRollers.s} (100%) rename data/animations/projectile/{projectile16.s => torchTrapProjectile.s} (62%) rename data/animations/projectile/{projectile18.s => v1DarkMagicProjectile.s} (100%) rename data/animations/projectile/{projectile1C.s => v1EyeLaser.s} (100%) rename data/animations/projectile/{projectile1F.s => v2Projectile.s} (100%) rename data/animations/projectile/{projectile20.s => v3HandProjectile.s} (100%) rename data/animations/projectile/{projectile7.s => windProjectile.s} (100%) delete mode 100644 data/const/projectile/projectile0.s delete mode 100644 data/const/projectile/projectile1.s delete mode 100644 data/const/projectile/projectile10.s delete mode 100644 data/const/projectile/projectile11.s delete mode 100644 data/const/projectile/projectile12.s delete mode 100644 data/const/projectile/projectile13.s delete mode 100644 data/const/projectile/projectile14.s delete mode 100644 data/const/projectile/projectile15.s delete mode 100644 data/const/projectile/projectile16.s delete mode 100644 data/const/projectile/projectile18.s delete mode 100644 data/const/projectile/projectile19.s delete mode 100644 data/const/projectile/projectile1A.s delete mode 100644 data/const/projectile/projectile1B.s delete mode 100644 data/const/projectile/projectile1C.s delete mode 100644 data/const/projectile/projectile1D.s delete mode 100644 data/const/projectile/projectile1E.s delete mode 100644 data/const/projectile/projectile1F.s delete mode 100644 data/const/projectile/projectile2.s delete mode 100644 data/const/projectile/projectile20.s delete mode 100644 data/const/projectile/projectile21.s delete mode 100644 data/const/projectile/projectile22.s delete mode 100644 data/const/projectile/projectile23.s delete mode 100644 data/const/projectile/projectile24.s delete mode 100644 data/const/projectile/projectile3.s delete mode 100644 data/const/projectile/projectile4.s delete mode 100644 data/const/projectile/projectile5.s delete mode 100644 data/const/projectile/projectile6.s delete mode 100644 data/const/projectile/projectile7.s delete mode 100644 data/const/projectile/projectile8.s delete mode 100644 data/const/projectile/projectile9.s delete mode 100644 data/const/projectile/projectileA.s delete mode 100644 data/const/projectile/projectileB.s delete mode 100644 data/const/projectile/projectileC.s delete mode 100644 data/const/projectile/projectileD.s delete mode 100644 data/const/projectile/projectileE.s delete mode 100644 data/const/projectile/projectileF.s rename src/projectile/{projectileD.c => arrowProjectile.c} (61%) rename src/projectile/{projectile19.c => ballAndChain.c} (80%) rename src/projectile/{projectile2.c => boneProjectile.c} (65%) rename src/projectile/{projectile1B.c => cannonballProjectile.c} (68%) create mode 100644 src/projectile/darkNutSwordSlash.c rename src/projectile/{projectile4.c => dekuSeedProjectile.c} (77%) rename src/projectile/{projectile6.c => dirtBallProjectile.c} (78%) rename src/projectile/{projectile8.c => fireProjectile.c} (74%) rename src/projectile/{projectileA.c => gleerokProjectile.c} (77%) rename src/projectile/{projectileC.c => guardLineOfSight.c} (89%) rename src/projectile/{projectile17.c => guruguruBarProjectile.c} (92%) rename src/projectile/{projectile23.c => gyorgMaleEnergyProjectile.c} (52%) rename src/projectile/{projectile22.c => gyorgTail.c} (83%) rename src/projectile/{projectile9.c => iceProjectile.c} (77%) create mode 100644 src/projectile/keatonDagger.c create mode 100644 src/projectile/lakituCloudProjectile.c create mode 100644 src/projectile/lakituLightning.c rename src/projectile/{projectile13.c => mandiblesProjectile.c} (78%) rename src/projectile/{projectileE.c => mazaalEnergyBeam.c} (66%) rename src/projectile/{projectile3.c => moblinSpear.c} (50%) rename src/projectile/{projectileF.c => octorokBossProjectile.c} (81%) delete mode 100644 src/projectile/projectile0.c delete mode 100644 src/projectile/projectile11.c delete mode 100644 src/projectile/projectile12.c delete mode 100644 src/projectile/projectile16.c delete mode 100644 src/projectile/projectile1E.c delete mode 100644 src/projectile/projectile24.c delete mode 100644 src/projectile/projectileB.c rename src/projectile/{projectile14.c => removableDust.c} (75%) rename src/projectile/{projectile1.c => rockProjectile.c} (67%) rename src/projectile/{projectile15.c => spiderWeb.c} (69%) create mode 100644 src/projectile/spikedRollers.c rename src/projectile/{projectile10.c => stalfosProjectile.c} (61%) create mode 100644 src/projectile/torchTrapProjectile.c rename src/projectile/{projectile18.c => v1DarkMagicProjectile.c} (76%) rename src/projectile/{projectile1C.c => v1EyeLaser.c} (54%) rename src/projectile/{projectile1A.c => v1FireProjectile.c} (56%) rename src/projectile/{projectile1F.c => v2Projectile.c} (73%) rename src/projectile/{projectile21.c => v3ElectricProjectile.c} (52%) rename src/projectile/{projectile20.c => v3HandProjectile.c} (65%) create mode 100644 src/projectile/v3TennisBallProjectile.c rename src/projectile/{projectile7.c => windProjectile.c} (78%) rename src/projectile/{projectile1D.c => winder.c} (62%) diff --git a/asm/non_matching/projectile19/sub_080AB170.inc b/asm/non_matching/ballAndChain/sub_080AB170.inc similarity index 100% rename from asm/non_matching/projectile19/sub_080AB170.inc rename to asm/non_matching/ballAndChain/sub_080AB170.inc diff --git a/asm/non_matching/eu/sub_080AA044.inc b/asm/non_matching/eu/MandiblesProjectile_Action3.inc similarity index 100% rename from asm/non_matching/eu/sub_080AA044.inc rename to asm/non_matching/eu/MandiblesProjectile_Action3.inc diff --git a/asm/non_matching/projectile23/sub_080AC8DC.inc b/asm/non_matching/gyorgMaleEnergyProjectile/sub_080AC8DC.inc similarity index 94% rename from asm/non_matching/projectile23/sub_080AC8DC.inc rename to asm/non_matching/gyorgMaleEnergyProjectile/sub_080AC8DC.inc index e1bc226d..dbb0ab91 100644 --- a/asm/non_matching/projectile23/sub_080AC8DC.inc +++ b/asm/non_matching/gyorgMaleEnergyProjectile/sub_080AC8DC.inc @@ -35,6 +35,6 @@ _080AC8FE: bl InitializeAnimation _080AC920: adds r0, r4, #0 - bl sub_080AC8C4 + bl GyorgMaleEnergyProjectile_OnTick pop {r4, pc} .syntax divided diff --git a/asm/non_matching/projectile22/sub_080AC388.inc b/asm/non_matching/gyorgTail/sub_080AC388.inc similarity index 100% rename from asm/non_matching/projectile22/sub_080AC388.inc rename to asm/non_matching/gyorgTail/sub_080AC388.inc diff --git a/asm/non_matching/projectile22/sub_080AC5E4.inc b/asm/non_matching/gyorgTail/sub_080AC5E4.inc similarity index 100% rename from asm/non_matching/projectile22/sub_080AC5E4.inc rename to asm/non_matching/gyorgTail/sub_080AC5E4.inc diff --git a/asm/non_matching/projectile22/sub_080AC6F0.inc b/asm/non_matching/gyorgTail/sub_080AC6F0.inc similarity index 100% rename from asm/non_matching/projectile22/sub_080AC6F0.inc rename to asm/non_matching/gyorgTail/sub_080AC6F0.inc diff --git a/asm/non_matching/projectile22/sub_080AC760.inc b/asm/non_matching/gyorgTail/sub_080AC760.inc similarity index 100% rename from asm/non_matching/projectile22/sub_080AC760.inc rename to asm/non_matching/gyorgTail/sub_080AC760.inc diff --git a/asm/non_matching/projectile22/sub_080AC7C4.inc b/asm/non_matching/gyorgTail/sub_080AC7C4.inc similarity index 100% rename from asm/non_matching/projectile22/sub_080AC7C4.inc rename to asm/non_matching/gyorgTail/sub_080AC7C4.inc diff --git a/asm/non_matching/projectile13/sub_080AA320.inc b/asm/non_matching/mandiblesProjectile/sub_080AA320.inc similarity index 100% rename from asm/non_matching/projectile13/sub_080AA320.inc rename to asm/non_matching/mandiblesProjectile/sub_080AA320.inc diff --git a/asm/non_matching/projectile13/sub_080AA374.inc b/asm/non_matching/mandiblesProjectile/sub_080AA374.inc similarity index 100% rename from asm/non_matching/projectile13/sub_080AA374.inc rename to asm/non_matching/mandiblesProjectile/sub_080AA374.inc diff --git a/asm/non_matching/projectile3/sub_080A83B4.inc b/asm/non_matching/moblinSpear/MoblinSpear_Action1.inc similarity index 100% rename from asm/non_matching/projectile3/sub_080A83B4.inc rename to asm/non_matching/moblinSpear/MoblinSpear_Action1.inc diff --git a/asm/non_matching/projectile15/sub_080AA9E0.inc b/asm/non_matching/spiderWeb/sub_080AA9E0.inc similarity index 100% rename from asm/non_matching/projectile15/sub_080AA9E0.inc rename to asm/non_matching/spiderWeb/sub_080AA9E0.inc diff --git a/asm/non_matching/projectile1E/sub_080ABA74.inc b/asm/non_matching/spikedRollers/sub_080ABA74.inc similarity index 100% rename from asm/non_matching/projectile1E/sub_080ABA74.inc rename to asm/non_matching/spikedRollers/sub_080ABA74.inc diff --git a/asm/non_matching/projectile1E/sub_080ABAE0.inc b/asm/non_matching/spikedRollers/sub_080ABAE0.inc similarity index 100% rename from asm/non_matching/projectile1E/sub_080ABAE0.inc rename to asm/non_matching/spikedRollers/sub_080ABAE0.inc diff --git a/asm/non_matching/projectile18/sub_080AACE0.inc b/asm/non_matching/v1DarkMagicProjectile/sub_080AACE0.inc similarity index 100% rename from asm/non_matching/projectile18/sub_080AACE0.inc rename to asm/non_matching/v1DarkMagicProjectile/sub_080AACE0.inc diff --git a/asm/non_matching/projectile1C/sub_080AB758.inc b/asm/non_matching/v1EyeLaser/sub_080AB758.inc similarity index 100% rename from asm/non_matching/projectile1C/sub_080AB758.inc rename to asm/non_matching/v1EyeLaser/sub_080AB758.inc diff --git a/asm/non_matching/projectile1F/sub_080ABBA8.inc b/asm/non_matching/v2Projectile/sub_080ABBA8.inc similarity index 100% rename from asm/non_matching/projectile1F/sub_080ABBA8.inc rename to asm/non_matching/v2Projectile/sub_080ABBA8.inc diff --git a/asm/non_matching/projectile1F/sub_080ABBF4.inc b/asm/non_matching/v2Projectile/sub_080ABBF4.inc similarity index 100% rename from asm/non_matching/projectile1F/sub_080ABBF4.inc rename to asm/non_matching/v2Projectile/sub_080ABBF4.inc diff --git a/asm/non_matching/projectile1F/sub_080ABE04.inc b/asm/non_matching/v2Projectile/sub_080ABE04.inc similarity index 100% rename from asm/non_matching/projectile1F/sub_080ABE04.inc rename to asm/non_matching/v2Projectile/sub_080ABE04.inc diff --git a/asm/non_matching/projectile21/sub_080ABFEC.inc b/asm/non_matching/v3ElectricProjectile/sub_080ABFEC.inc similarity index 100% rename from asm/non_matching/projectile21/sub_080ABFEC.inc rename to asm/non_matching/v3ElectricProjectile/sub_080ABFEC.inc diff --git a/asm/non_matching/projectile21/sub_080AC168.inc b/asm/non_matching/v3ElectricProjectile/sub_080AC168.inc similarity index 100% rename from asm/non_matching/projectile21/sub_080AC168.inc rename to asm/non_matching/v3ElectricProjectile/sub_080AC168.inc diff --git a/asm/non_matching/projectile21/sub_080AC200.inc b/asm/non_matching/v3ElectricProjectile/sub_080AC200.inc similarity index 100% rename from asm/non_matching/projectile21/sub_080AC200.inc rename to asm/non_matching/v3ElectricProjectile/sub_080AC200.inc diff --git a/asm/non_matching/projectile24/sub_080ACA68.inc b/asm/non_matching/v3TennisBallProjectile/sub_080ACA68.inc similarity index 100% rename from asm/non_matching/projectile24/sub_080ACA68.inc rename to asm/non_matching/v3TennisBallProjectile/sub_080ACA68.inc diff --git a/asm/non_matching/projectile24/sub_080ACB40.inc b/asm/non_matching/v3TennisBallProjectile/sub_080ACB40.inc similarity index 100% rename from asm/non_matching/projectile24/sub_080ACB40.inc rename to asm/non_matching/v3TennisBallProjectile/sub_080ACB40.inc diff --git a/asm/non_matching/projectile1D/sub_080AB950.inc b/asm/non_matching/winder/sub_080AB950.inc similarity index 100% rename from asm/non_matching/projectile1D/sub_080AB950.inc rename to asm/non_matching/winder/sub_080AB950.inc diff --git a/asm/non_matching/projectile1D/sub_080AB9FC.inc b/asm/non_matching/winder/sub_080AB9FC.inc similarity index 100% rename from asm/non_matching/projectile1D/sub_080AB9FC.inc rename to asm/non_matching/winder/sub_080AB9FC.inc diff --git a/data/animations/projectile/projectileD.s b/data/animations/projectile/arrowProjectile.s similarity index 100% rename from data/animations/projectile/projectileD.s rename to data/animations/projectile/arrowProjectile.s diff --git a/data/animations/projectile/projectile2.s b/data/animations/projectile/boneProjectile.s similarity index 100% rename from data/animations/projectile/projectile2.s rename to data/animations/projectile/boneProjectile.s diff --git a/data/animations/projectile/projectile1B.s b/data/animations/projectile/cannonballProjectile.s similarity index 100% rename from data/animations/projectile/projectile1B.s rename to data/animations/projectile/cannonballProjectile.s diff --git a/data/animations/projectile/projectile6.s b/data/animations/projectile/dirtBallProjectile.s similarity index 100% rename from data/animations/projectile/projectile6.s rename to data/animations/projectile/dirtBallProjectile.s diff --git a/data/animations/projectile/projectile8.s b/data/animations/projectile/fireProjectile.s similarity index 100% rename from data/animations/projectile/projectile8.s rename to data/animations/projectile/fireProjectile.s diff --git a/data/animations/projectile/projectile23.s b/data/animations/projectile/gyorgMaleEnergyProjectile.s similarity index 100% rename from data/animations/projectile/projectile23.s rename to data/animations/projectile/gyorgMaleEnergyProjectile.s diff --git a/data/animations/projectile/projectile9.s b/data/animations/projectile/iceProjectile.s similarity index 100% rename from data/animations/projectile/projectile9.s rename to data/animations/projectile/iceProjectile.s diff --git a/data/animations/projectile/projectile11.s b/data/animations/projectile/lakituCloudProjectile.s similarity index 100% rename from data/animations/projectile/projectile11.s rename to data/animations/projectile/lakituCloudProjectile.s diff --git a/data/animations/projectile/projectile12.s b/data/animations/projectile/lakituLightning.s similarity index 100% rename from data/animations/projectile/projectile12.s rename to data/animations/projectile/lakituLightning.s diff --git a/data/animations/projectile/projectile13.s b/data/animations/projectile/mandiblesProjectile.s similarity index 100% rename from data/animations/projectile/projectile13.s rename to data/animations/projectile/mandiblesProjectile.s diff --git a/data/animations/projectile/projectileE.s b/data/animations/projectile/mazaalEnergyBeam.s similarity index 100% rename from data/animations/projectile/projectileE.s rename to data/animations/projectile/mazaalEnergyBeam.s diff --git a/data/animations/projectile/projectile1.s b/data/animations/projectile/rockProjectile.s similarity index 100% rename from data/animations/projectile/projectile1.s rename to data/animations/projectile/rockProjectile.s diff --git a/data/animations/projectile/projectile15.s b/data/animations/projectile/spiderWeb.s similarity index 100% rename from data/animations/projectile/projectile15.s rename to data/animations/projectile/spiderWeb.s diff --git a/data/animations/projectile/projectile1E.s b/data/animations/projectile/spikedRollers.s similarity index 100% rename from data/animations/projectile/projectile1E.s rename to data/animations/projectile/spikedRollers.s diff --git a/data/animations/projectile/projectile16.s b/data/animations/projectile/torchTrapProjectile.s similarity index 62% rename from data/animations/projectile/projectile16.s rename to data/animations/projectile/torchTrapProjectile.s index 674977d7..a0f8153d 100644 --- a/data/animations/projectile/projectile16.s +++ b/data/animations/projectile/torchTrapProjectile.s @@ -4,6 +4,13 @@ .section .rodata .align 2 +gUnk_0812A3E0:: @ 0812A3E0 + .incbin "baserom.gba", 0x12A3E0, 0x0000014 + +gUnk_0812A3F4:: @ 0812A3F4 + .4byte gUnk_0812A3E0 + .4byte 00000000 + gUnk_0812A3FC:: @ 0812A3FC .incbin "baserom.gba", 0x12A3FC, 0x0000014 diff --git a/data/animations/projectile/projectile18.s b/data/animations/projectile/v1DarkMagicProjectile.s similarity index 100% rename from data/animations/projectile/projectile18.s rename to data/animations/projectile/v1DarkMagicProjectile.s diff --git a/data/animations/projectile/projectile1C.s b/data/animations/projectile/v1EyeLaser.s similarity index 100% rename from data/animations/projectile/projectile1C.s rename to data/animations/projectile/v1EyeLaser.s diff --git a/data/animations/projectile/projectile1F.s b/data/animations/projectile/v2Projectile.s similarity index 100% rename from data/animations/projectile/projectile1F.s rename to data/animations/projectile/v2Projectile.s diff --git a/data/animations/projectile/projectile20.s b/data/animations/projectile/v3HandProjectile.s similarity index 100% rename from data/animations/projectile/projectile20.s rename to data/animations/projectile/v3HandProjectile.s diff --git a/data/animations/projectile/projectile7.s b/data/animations/projectile/windProjectile.s similarity index 100% rename from data/animations/projectile/projectile7.s rename to data/animations/projectile/windProjectile.s diff --git a/data/const/projectile/projectile0.s b/data/const/projectile/projectile0.s deleted file mode 100644 index bd83c6d7..00000000 --- a/data/const/projectile/projectile0.s +++ /dev/null @@ -1,197 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081293B8:: @ 081293B8 - .incbin "baserom.gba", 0x1293B8, 0x0000014 - -gUnk_081293CC:: @ 081293CC - .4byte sub_080A7FB4 - .4byte sub_080A801C - .4byte sub_080A7FD8 - .4byte sub_080A7FEC - .4byte sub_080A7FEC - -gUnk_081293E0:: @ 081293E0 - .4byte gUnk_08129460 - .4byte gUnk_081294A8 - .4byte gUnk_081294F0 - .4byte gUnk_08129538 - -gUnk_081293F0:: @ 081293F0 - .4byte gUnk_08129550 - .4byte gUnk_08129558 - .4byte gUnk_08129560 - .4byte gUnk_08129568 - -gUnk_08129400:: @ 08129400 - .4byte gUnk_08129590 - .4byte gUnk_081295A0 - .4byte gUnk_081295B0 - .4byte gUnk_081295C0 - -gUnk_08129410:: @ 08129410 - .4byte gUnk_08129598 - .4byte gUnk_081295A8 - .4byte gUnk_081295B8 - .4byte gUnk_081295C8 - -gUnk_08129420:: @ 08129420 - .4byte gUnk_08129570 - .4byte gUnk_08129578 - .4byte gUnk_08129580 - .4byte gUnk_08129588 - -gUnk_08129430:: @ 08129430 - .incbin "baserom.gba", 0x129430, 0x0000008 - -gUnk_08129438:: @ 08129438 - .incbin "baserom.gba", 0x129438, 0x0000008 - -gUnk_08129440:: @ 08129440 - .incbin "baserom.gba", 0x129440, 0x0000008 - -gUnk_08129448:: @ 08129448 - .incbin "baserom.gba", 0x129448, 0x0000008 - -gUnk_08129450:: @ 08129450 - .incbin "baserom.gba", 0x129450, 0x0000008 - -gUnk_08129458:: @ 08129458 - .incbin "baserom.gba", 0x129458, 0x0000008 - -gUnk_08129460:: @ 08129460 - .4byte gUnk_08129430 - .4byte gUnk_08129438 - .4byte gUnk_08129440 - .4byte gUnk_08129448 - .4byte gUnk_08129450 - .4byte gUnk_08129458 - -gUnk_08129478:: @ 08129478 - .incbin "baserom.gba", 0x129478, 0x0000008 - -gUnk_08129480:: @ 08129480 - .incbin "baserom.gba", 0x129480, 0x0000008 - -gUnk_08129488:: @ 08129488 - .incbin "baserom.gba", 0x129488, 0x0000008 - -gUnk_08129490:: @ 08129490 - .incbin "baserom.gba", 0x129490, 0x0000008 - -gUnk_08129498:: @ 08129498 - .incbin "baserom.gba", 0x129498, 0x0000008 - -gUnk_081294A0:: @ 081294A0 - .incbin "baserom.gba", 0x1294A0, 0x0000008 - -gUnk_081294A8:: @ 081294A8 - .4byte gUnk_08129478 - .4byte gUnk_08129480 - .4byte gUnk_08129488 - .4byte gUnk_08129490 - .4byte gUnk_08129498 - .4byte gUnk_081294A0 - -gUnk_081294C0:: @ 081294C0 - .incbin "baserom.gba", 0x1294C0, 0x0000008 - -gUnk_081294C8:: @ 081294C8 - .incbin "baserom.gba", 0x1294C8, 0x0000008 - -gUnk_081294D0:: @ 081294D0 - .incbin "baserom.gba", 0x1294D0, 0x0000008 - -gUnk_081294D8:: @ 081294D8 - .incbin "baserom.gba", 0x1294D8, 0x0000008 - -gUnk_081294E0:: @ 081294E0 - .incbin "baserom.gba", 0x1294E0, 0x0000008 - -gUnk_081294E8:: @ 081294E8 - .incbin "baserom.gba", 0x1294E8, 0x0000008 - -gUnk_081294F0:: @ 081294F0 - .4byte gUnk_081294C0 - .4byte gUnk_081294C8 - .4byte gUnk_081294D0 - .4byte gUnk_081294D8 - .4byte gUnk_081294E0 - .4byte gUnk_081294E8 - -gUnk_08129508:: @ 08129508 - .incbin "baserom.gba", 0x129508, 0x0000008 - -gUnk_08129510:: @ 08129510 - .incbin "baserom.gba", 0x129510, 0x0000008 - -gUnk_08129518:: @ 08129518 - .incbin "baserom.gba", 0x129518, 0x0000008 - -gUnk_08129520:: @ 08129520 - .incbin "baserom.gba", 0x129520, 0x0000008 - -gUnk_08129528:: @ 08129528 - .incbin "baserom.gba", 0x129528, 0x0000008 - -gUnk_08129530:: @ 08129530 - .incbin "baserom.gba", 0x129530, 0x0000008 - -gUnk_08129538:: @ 08129538 - .4byte gUnk_08129508 - .4byte gUnk_08129510 - .4byte gUnk_08129518 - .4byte gUnk_08129520 - .4byte gUnk_08129528 - .4byte gUnk_08129530 - -gUnk_08129550:: @ 08129550 - .incbin "baserom.gba", 0x129550, 0x0000008 - -gUnk_08129558:: @ 08129558 - .incbin "baserom.gba", 0x129558, 0x0000008 - -gUnk_08129560:: @ 08129560 - .incbin "baserom.gba", 0x129560, 0x0000008 - -gUnk_08129568:: @ 08129568 - .incbin "baserom.gba", 0x129568, 0x0000008 - -gUnk_08129570:: @ 08129570 - .incbin "baserom.gba", 0x129570, 0x0000008 - -gUnk_08129578:: @ 08129578 - .incbin "baserom.gba", 0x129578, 0x0000008 - -gUnk_08129580:: @ 08129580 - .incbin "baserom.gba", 0x129580, 0x0000008 - -gUnk_08129588:: @ 08129588 - .incbin "baserom.gba", 0x129588, 0x0000008 - -gUnk_08129590:: @ 08129590 - .incbin "baserom.gba", 0x129590, 0x0000008 - -gUnk_08129598:: @ 08129598 - .incbin "baserom.gba", 0x129598, 0x0000008 - -gUnk_081295A0:: @ 081295A0 - .incbin "baserom.gba", 0x1295A0, 0x0000008 - -gUnk_081295A8:: @ 081295A8 - .incbin "baserom.gba", 0x1295A8, 0x0000008 - -gUnk_081295B0:: @ 081295B0 - .incbin "baserom.gba", 0x1295B0, 0x0000008 - -gUnk_081295B8:: @ 081295B8 - .incbin "baserom.gba", 0x1295B8, 0x0000008 - -gUnk_081295C0:: @ 081295C0 - .incbin "baserom.gba", 0x1295C0, 0x0000008 - -gUnk_081295C8:: @ 081295C8 - .incbin "baserom.gba", 0x1295C8, 0x0000008 diff --git a/data/const/projectile/projectile1.s b/data/const/projectile/projectile1.s deleted file mode 100644 index e874227b..00000000 --- a/data/const/projectile/projectile1.s +++ /dev/null @@ -1,18 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081295D0:: @ 081295D0 - .4byte sub_080A804C - .4byte sub_080A8064 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_081295E4:: @ 081295E4 - .4byte sub_080A8088 - .4byte sub_080A80A0 - .4byte sub_080A80F4 - .4byte sub_080A8118 diff --git a/data/const/projectile/projectile10.s b/data/const/projectile/projectile10.s deleted file mode 100644 index 231ecc8f..00000000 --- a/data/const/projectile/projectile10.s +++ /dev/null @@ -1,33 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129AE0:: @ 08129AE0 - .4byte sub_080A9A1C - .4byte sub_080A9A34 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080A9A64 - -gUnk_08129AF8:: @ 08129AF8 - .4byte sub_080A9ACC - .4byte sub_080A9B24 - .4byte sub_080A9B54 - .4byte sub_080A9B80 - -gUnk_08129B08:: @ 08129B08 - .4byte sub_080A9A94 - .4byte sub_080A9AA4 - .4byte sub_080A9AAC - .4byte sub_080A9AB4 - .4byte nullsub_128 - .4byte sub_080A9AC4 - -gUnk_08129B20:: @ 08129B20 - .incbin "baserom.gba", 0x129B20, 0x0000030 - -gUnk_08129B50:: @ 08129B50 - .incbin "baserom.gba", 0x129B50, 0x0000008 diff --git a/data/const/projectile/projectile11.s b/data/const/projectile/projectile11.s deleted file mode 100644 index 7ea1628a..00000000 --- a/data/const/projectile/projectile11.s +++ /dev/null @@ -1,23 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129B58:: @ 08129B58 - .4byte sub_080A9CD4 - .4byte nullsub_539 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080A9CF0 - -gUnk_08129B70:: @ 08129B70 - .4byte sub_080A9D6C - .4byte sub_080A9D80 - -gUnk_08129B78:: @ 08129B78 - .4byte sub_080A9D20 - .4byte nullsub_540 - .4byte sub_080A9D2C - diff --git a/data/const/projectile/projectile12.s b/data/const/projectile/projectile12.s deleted file mode 100644 index abf0a5ac..00000000 --- a/data/const/projectile/projectile12.s +++ /dev/null @@ -1,17 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129BEC:: @ 08129BEC - .4byte sub_080A9DC0 - .4byte sub_080A9DD8 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129C00:: @ 08129C00 - .4byte sub_080A9DFC - .4byte sub_080A9E14 - diff --git a/data/const/projectile/projectile13.s b/data/const/projectile/projectile13.s deleted file mode 100644 index 25bcf3ac..00000000 --- a/data/const/projectile/projectile13.s +++ /dev/null @@ -1,63 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129C7C:: @ 08129C7C - .4byte sub_080A9E94 - .4byte sub_080A9EBC - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129C90:: @ 08129C90 - .4byte sub_080A9F50 - .4byte sub_080A9F90 - .4byte sub_080A9FD0 - .4byte sub_080AA044 - .4byte sub_080AA110 - -gUnk_08129CA4:: @ 08129CA4 - .incbin "baserom.gba", 0x129CA4, 0x0000008 - -gUnk_08129CAC:: @ 08129CAC - .incbin "baserom.gba", 0x129CAC, 0x0000008 - -gUnk_08129CB4:: @ 08129CB4 - .incbin "baserom.gba", 0x129CB4, 0x0000008 - -gUnk_08129CBC:: @ 08129CBC - .incbin "baserom.gba", 0x129CBC, 0x0000008 - -gUnk_08129CC4:: @ 08129CC4 - .incbin "baserom.gba", 0x129CC4, 0x0000008 - -gUnk_08129CCC:: @ 08129CCC - .incbin "baserom.gba", 0x129CCC, 0x0000008 - -gUnk_08129CD4:: @ 08129CD4 - .incbin "baserom.gba", 0x129CD4, 0x0000008 - -gUnk_08129CDC:: @ 08129CDC - .incbin "baserom.gba", 0x129CDC, 0x0000008 - -gUnk_08129CE4:: @ 08129CE4 - .incbin "baserom.gba", 0x129CE4, 0x0000008 - -gUnk_08129CEC:: @ 08129CEC - .incbin "baserom.gba", 0x129CEC, 0x0000008 - -gUnk_08129CF4:: @ 08129CF4 - .4byte gUnk_08129CB4 - .4byte gUnk_08129CBC - .4byte gUnk_08129CC4 - .4byte gUnk_08129CCC - .4byte gUnk_08129CD4 - .4byte gUnk_08129CDC - .4byte gUnk_08129CE4 - .4byte gUnk_08129CEC - -gUnk_08129D14:: @ 08129D14 - .incbin "baserom.gba", 0x129D14, 0x0000008 - diff --git a/data/const/projectile/projectile14.s b/data/const/projectile/projectile14.s deleted file mode 100644 index d0e22677..00000000 --- a/data/const/projectile/projectile14.s +++ /dev/null @@ -1,25 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129FB8:: @ 08129FB8 - .4byte sub_080AA41C - .4byte sub_080AA450 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080AA464 - -gUnk_08129FD0:: @ 08129FD0 - .incbin "baserom.gba", 0x129FD0, 0x0000014 - -gUnk_08129FE4:: @ 08129FE4 - .incbin "baserom.gba", 0x129FE4, 0x0000014 - -gUnk_08129FF8:: @ 08129FF8 - .incbin "baserom.gba", 0x129FF8, 0x000000C - -gUnk_0812A004:: @ 0812A004 - .incbin "baserom.gba", 0x12A004, 0x0000010 diff --git a/data/const/projectile/projectile15.s b/data/const/projectile/projectile15.s deleted file mode 100644 index a309d3b0..00000000 --- a/data/const/projectile/projectile15.s +++ /dev/null @@ -1,45 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A014:: @ 0812A014 - .4byte sub_080AA6A8 - .4byte sub_080AA6C0 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080AA78C - -gUnk_0812A02C:: @ 0812A02C - .4byte sub_080AA834 - .4byte sub_080AA878 - .4byte sub_080AA898 - .4byte sub_080AA9C4 - -gUnk_0812A03C:: @ 0812A03C - .incbin "baserom.gba", 0x12A03C, 0x0000010 - -gUnk_0812A04C:: @ 0812A04C - .4byte gUnk_080FD41C - .4byte gUnk_080FD424 - .4byte gUnk_080FD42C - .4byte gUnk_080FD434 - -gUnk_0812A05C:: @ 0812A05C - .4byte sub_080AA8B8 - .4byte sub_080AA9AC - -gUnk_0812A064:: @ 0812A064 - .incbin "baserom.gba", 0x12A064, 0x0000008 - -gUnk_0812A06C:: @ 0812A06C - .incbin "baserom.gba", 0x12A06C, 0x0000008 - -gUnk_0812A074:: @ 0812A074 - .incbin "baserom.gba", 0x12A074, 0x0000010 - -gUnk_0812A084:: @ 0812A084 - .incbin "baserom.gba", 0x12A084, 0x0000008 - diff --git a/data/const/projectile/projectile16.s b/data/const/projectile/projectile16.s deleted file mode 100644 index bc333109..00000000 --- a/data/const/projectile/projectile16.s +++ /dev/null @@ -1,24 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A3C0:: @ 0812A3C0 - .4byte sub_080AAB04 - .4byte sub_080AAB1C - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812A3D4:: @ 0812A3D4 - .4byte sub_080AAB24 - .4byte sub_080AAB38 - .4byte sub_080AAB64 - -gUnk_0812A3E0:: @ 0812A3E0 - .incbin "baserom.gba", 0x12A3E0, 0x0000014 - -gUnk_0812A3F4:: @ 0812A3F4 - .4byte gUnk_0812A3E0 - .incbin "baserom.gba", 0x12A3F8, 0x0000004 diff --git a/data/const/projectile/projectile18.s b/data/const/projectile/projectile18.s deleted file mode 100644 index 591ae81c..00000000 --- a/data/const/projectile/projectile18.s +++ /dev/null @@ -1,25 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A418:: @ 0812A418 - .4byte sub_080AAC0C - .4byte sub_080AAC44 - .4byte DeleteEntity - .4byte sub_080AACE0 - .4byte DeleteEntity - .4byte sub_080AAD70 - -gUnk_0812A430:: @ 0812A430 - .4byte sub_080AADBC - .4byte sub_080AAE88 - .4byte sub_080AAF00 - .4byte sub_080AAF10 - -gUnk_0812A440:: @ 0812A440 - .4byte sub_080AAD98 - .4byte nullsub_541 - .4byte sub_080AADA4 - diff --git a/data/const/projectile/projectile19.s b/data/const/projectile/projectile19.s deleted file mode 100644 index 98b34416..00000000 --- a/data/const/projectile/projectile19.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A494:: @ 0812A494 - .4byte sub_080AB074 - .4byte sub_080AB170 - .4byte sub_080AB170 - .4byte sub_080AB170 - .4byte sub_080AB26C - -gUnk_0812A4A8:: @ 0812A4A8 - .incbin "baserom.gba", 0x12A4A8, 0x0000020 diff --git a/data/const/projectile/projectile1A.s b/data/const/projectile/projectile1A.s deleted file mode 100644 index 44136b7c..00000000 --- a/data/const/projectile/projectile1A.s +++ /dev/null @@ -1,21 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A4C8:: @ 0812A4C8 - .4byte sub_080AB2C4 - .4byte sub_080AB2DC - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812A4DC:: @ 0812A4DC - .4byte sub_080AB318 - .4byte sub_080AB414 - .4byte sub_080AB45C - .4byte sub_080AB488 - -gUnk_0812A4EC:: @ 0812A4EC - .incbin "baserom.gba", 0x12A4EC, 0x00000A0 diff --git a/data/const/projectile/projectile1B.s b/data/const/projectile/projectile1B.s deleted file mode 100644 index 8b32f41b..00000000 --- a/data/const/projectile/projectile1B.s +++ /dev/null @@ -1,17 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A58C:: @ 0812A58C - .4byte sub_080AB52C - .4byte sub_080AB544 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812A5A0:: @ 0812A5A0 - .4byte sub_080AB580 - .4byte sub_080AB59C - .4byte sub_080AB5C4 diff --git a/data/const/projectile/projectile1C.s b/data/const/projectile/projectile1C.s deleted file mode 100644 index 373c5b54..00000000 --- a/data/const/projectile/projectile1C.s +++ /dev/null @@ -1,36 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A5E8:: @ 0812A5E8 - .4byte sub_080AB6B8 - .4byte sub_080AB6FC - .4byte sub_080AB728 - -gUnk_0812A5F4:: @ 0812A5F4 - .4byte gUnk_0812A61C - .4byte gUnk_0812A61C - .4byte gUnk_0812A624 - .4byte gUnk_0812A61C - .4byte gUnk_0812A62C - .4byte gUnk_0812A624 - .4byte gUnk_0812A634 - .4byte gUnk_0812A624 - -gUnk_0812A614:: @ 0812A614 - .incbin "baserom.gba", 0x12A614, 0x0000008 - -gUnk_0812A61C:: @ 0812A61C - .incbin "baserom.gba", 0x12A61C, 0x0000008 - -gUnk_0812A624:: @ 0812A624 - .incbin "baserom.gba", 0x12A624, 0x0000008 - -gUnk_0812A62C:: @ 0812A62C - .incbin "baserom.gba", 0x12A62C, 0x0000008 - -gUnk_0812A634:: @ 0812A634 - .incbin "baserom.gba", 0x12A634, 0x0000008 - diff --git a/data/const/projectile/projectile1D.s b/data/const/projectile/projectile1D.s deleted file mode 100644 index 4da32524..00000000 --- a/data/const/projectile/projectile1D.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A6B4:: @ 0812A6B4 - .4byte sub_080AB8E8 - .4byte sub_080AB950 - -gUnk_0812A6BC:: @ 0812A6BC - .incbin "baserom.gba", 0x12A6BC, 0x0000008 - -gUnk_0812A6C4:: @ 0812A6C4 - .incbin "baserom.gba", 0x12A6C4, 0x0000008 diff --git a/data/const/projectile/projectile1E.s b/data/const/projectile/projectile1E.s deleted file mode 100644 index a47f97ea..00000000 --- a/data/const/projectile/projectile1E.s +++ /dev/null @@ -1,13 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A6CC:: @ 0812A6CC - .4byte sub_080ABA74 - .4byte sub_080ABAE0 - -gUnk_0812A6D4:: @ 0812A6D4 - .incbin "baserom.gba", 0x12A6D4, 0x000000E - diff --git a/data/const/projectile/projectile1F.s b/data/const/projectile/projectile1F.s deleted file mode 100644 index 9d9f75dc..00000000 --- a/data/const/projectile/projectile1F.s +++ /dev/null @@ -1,32 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A7D4:: @ 0812A7D4 - .4byte sub_080ABBA8 - .4byte sub_080ABBF4 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080ABC54 - -gUnk_0812A7EC:: @ 0812A7EC - .4byte sub_080ABCC4 - .4byte sub_080ABD44 - .4byte sub_080ABD70 - -gUnk_0812A7F8:: @ 0812A7F8 - .4byte sub_080ABE04 - .4byte sub_080ABE88 - -gUnk_0812A800:: @ 0812A800 - .4byte sub_080ABEA8 - .4byte sub_080ABF04 - -gUnk_0812A808:: @ 0812A808 - .4byte sub_080ABC84 - .4byte nullsub_542 - .4byte sub_080ABC90 - diff --git a/data/const/projectile/projectile2.s b/data/const/projectile/projectile2.s deleted file mode 100644 index 18bfec58..00000000 --- a/data/const/projectile/projectile2.s +++ /dev/null @@ -1,20 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812960C:: @ 0812960C - .4byte sub_080A81AC - .4byte sub_080A81C4 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129620:: @ 08129620 - .4byte sub_080A81E0 - .4byte sub_080A81FC - .4byte sub_080A8248 - .4byte sub_080A827C - .4byte sub_080A82B4 - diff --git a/data/const/projectile/projectile20.s b/data/const/projectile/projectile20.s deleted file mode 100644 index 48714f7a..00000000 --- a/data/const/projectile/projectile20.s +++ /dev/null @@ -1,13 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A84C:: @ 0812A84C - .4byte sub_080ABF40 - .4byte sub_080ABFA8 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - diff --git a/data/const/projectile/projectile21.s b/data/const/projectile/projectile21.s deleted file mode 100644 index 2ed70c39..00000000 --- a/data/const/projectile/projectile21.s +++ /dev/null @@ -1,28 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A954:: @ 0812A954 - .4byte sub_080ABFCC - .4byte sub_080ABFE4 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812A968:: @ 0812A968 - .4byte sub_080ABFEC - .4byte sub_080AC074 - .4byte sub_080AC100 - .4byte sub_080AC168 - .4byte sub_080AC200 - -gUnk_0812A97C:: @ 0812A97C - .incbin "baserom.gba", 0x12A97C, 0x0000006 - -gUnk_0812A982:: @ 0812A982 - .incbin "baserom.gba", 0x12A982, 0x0000008 - -gUnk_0812A98A:: @ 0812A98A - .incbin "baserom.gba", 0x12A98A, 0x000000A diff --git a/data/const/projectile/projectile22.s b/data/const/projectile/projectile22.s deleted file mode 100644 index 9504fae5..00000000 --- a/data/const/projectile/projectile22.s +++ /dev/null @@ -1,29 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A994:: @ 0812A994 - .4byte sub_080AC328 - .4byte sub_080AC510 - .4byte sub_080AC510 - .4byte sub_080AC510 - .4byte sub_080AC560 - -gUnk_0812A9A8:: @ 0812A9A8 - .4byte sub_080AC340 - .4byte sub_080AC388 - .4byte sub_080AC480 - -gUnk_0812A9B4:: @ 0812A9B4 - .incbin "baserom.gba", 0x12A9B4, 0x0000004 - -gUnk_0812A9B8:: @ 0812A9B8 - .incbin "baserom.gba", 0x12A9B8, 0x0000002 - -gUnk_0812A9BA:: @ 0812A9BA - .incbin "baserom.gba", 0x12A9BA, 0x0000006 - -gUnk_0812A9C0:: @ 0812A9C0 - .incbin "baserom.gba", 0x12A9C0, 0x0000018 diff --git a/data/const/projectile/projectile23.s b/data/const/projectile/projectile23.s deleted file mode 100644 index 61448e8c..00000000 --- a/data/const/projectile/projectile23.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812A9D8:: @ 0812A9D8 - .4byte sub_080AC8C4 - .4byte sub_080AC8DC - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812A9EC:: @ 0812A9EC - .4byte sub_080AC928 - .4byte sub_080AC954 - .4byte sub_080AC9CC - .4byte sub_080ACA14 - diff --git a/data/const/projectile/projectile24.s b/data/const/projectile/projectile24.s deleted file mode 100644 index 3572d9a1..00000000 --- a/data/const/projectile/projectile24.s +++ /dev/null @@ -1,18 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812AA5C:: @ 0812AA5C - .4byte sub_080ACA50 - .4byte sub_080ACA68 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - .4byte sub_080ACA50 - -gUnk_0812AA74:: @ 0812AA74 - .4byte sub_080ACAC8 - .4byte sub_080ACAF0 - .4byte sub_080ACB10 diff --git a/data/const/projectile/projectile3.s b/data/const/projectile/projectile3.s deleted file mode 100644 index 80e4e71e..00000000 --- a/data/const/projectile/projectile3.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129650:: @ 08129650 - .4byte sub_080A8314 - .4byte sub_080A832C - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129664:: @ 08129664 - .4byte sub_080A83A0 - .4byte sub_080A83B4 - -gUnk_0812966C:: @ 0812966C - .incbin "baserom.gba", 0x12966C, 0x0000084 diff --git a/data/const/projectile/projectile4.s b/data/const/projectile/projectile4.s deleted file mode 100644 index 7fd5ed49..00000000 --- a/data/const/projectile/projectile4.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081296F0:: @ 081296F0 - .4byte sub_080A8458 - .4byte sub_080A8470 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129704:: @ 08129704 - .4byte sub_080A84C8 - .4byte sub_080A8504 - .4byte sub_080A85B8 - .4byte sub_080A8610 - .4byte sub_080A862C diff --git a/data/const/projectile/projectile5.s b/data/const/projectile/projectile5.s deleted file mode 100644 index e0ca1b24..00000000 --- a/data/const/projectile/projectile5.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129718:: @ 08129718 - .4byte sub_080A86D8 - .4byte sub_080A86F0 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_0812972C:: @ 0812972C - .4byte sub_080A8770 - .4byte sub_080A878C - -gUnk_08129734:: @ 08129734 - .incbin "baserom.gba", 0x129734, 0x000000C diff --git a/data/const/projectile/projectile6.s b/data/const/projectile/projectile6.s deleted file mode 100644 index ab466be0..00000000 --- a/data/const/projectile/projectile6.s +++ /dev/null @@ -1,22 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129740:: @ 08129740 - .4byte sub_080A87E4 - .4byte sub_080A881C - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129754:: @ 08129754 - .4byte sub_080A8868 - .4byte sub_080A88C8 - .4byte sub_080A8988 - .4byte sub_080A8A48 - -gUnk_08129764:: @ 08129764 - .incbin "baserom.gba", 0x129764, 0x000000C - diff --git a/data/const/projectile/projectile7.s b/data/const/projectile/projectile7.s deleted file mode 100644 index c6e1c457..00000000 --- a/data/const/projectile/projectile7.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812979C:: @ 0812979C - .4byte sub_080A8A90 - .4byte sub_080A8AC8 - .4byte sub_080A8B38 - .4byte sub_080A8B78 - diff --git a/data/const/projectile/projectile8.s b/data/const/projectile/projectile8.s deleted file mode 100644 index 87d3d5f2..00000000 --- a/data/const/projectile/projectile8.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0812982C:: @ 0812982C - .4byte sub_080A8BC0 - .4byte sub_080A8BF8 - .4byte sub_080A8C4C - .4byte sub_080A8C8C - diff --git a/data/const/projectile/projectile9.s b/data/const/projectile/projectile9.s deleted file mode 100644 index 344cb8ae..00000000 --- a/data/const/projectile/projectile9.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081298B8:: @ 081298B8 - .4byte sub_080A8CD4 - .4byte sub_080A8D0C - .4byte sub_080A8D60 - .4byte sub_080A8DA0 - diff --git a/data/const/projectile/projectileA.s b/data/const/projectile/projectileA.s deleted file mode 100644 index 368f60e8..00000000 --- a/data/const/projectile/projectileA.s +++ /dev/null @@ -1,27 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129954:: @ 08129954 - .4byte sub_080A8DDC - .4byte sub_080A8DDC - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129968:: @ 08129968 - .4byte sub_080A8E28 - .4byte sub_080A8FB8 - .4byte sub_080A9058 - .4byte sub_080A90BC - -gUnk_08129978:: @ 08129978 - .incbin "baserom.gba", 0x129978, 0x0000008 - -gUnk_08129980:: @ 08129980 - .incbin "baserom.gba", 0x129980, 0x0000008 - -gUnk_08129988:: @ 08129988 - .incbin "baserom.gba", 0x129988, 0x0000010 diff --git a/data/const/projectile/projectileB.s b/data/const/projectile/projectileB.s deleted file mode 100644 index 7150bf8f..00000000 --- a/data/const/projectile/projectileB.s +++ /dev/null @@ -1,23 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129998:: @ 08129998 - .4byte gUnk_081299A8 - .4byte gUnk_081299B0 - .4byte gUnk_081299B8 - .4byte gUnk_081299C0 - -gUnk_081299A8:: @ 081299A8 - .incbin "baserom.gba", 0x1299A8, 0x0000008 - -gUnk_081299B0:: @ 081299B0 - .incbin "baserom.gba", 0x1299B0, 0x0000008 - -gUnk_081299B8:: @ 081299B8 - .incbin "baserom.gba", 0x1299B8, 0x0000008 - -gUnk_081299C0:: @ 081299C0 - .incbin "baserom.gba", 0x1299C0, 0x0000008 diff --git a/data/const/projectile/projectileC.s b/data/const/projectile/projectileC.s deleted file mode 100644 index 6968edb3..00000000 --- a/data/const/projectile/projectileC.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081299C8:: @ 081299C8 - .incbin "baserom.gba", 0x1299C8, 0x0000008 diff --git a/data/const/projectile/projectileD.s b/data/const/projectile/projectileD.s deleted file mode 100644 index 3290016f..00000000 --- a/data/const/projectile/projectileD.s +++ /dev/null @@ -1,35 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081299D0:: @ 081299D0 - .4byte sub_080A931C - .4byte sub_080A9334 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_081299E4:: @ 081299E4 - .4byte sub_080A9370 - .4byte sub_080A93A0 - .4byte sub_080A93DC - .4byte sub_080A942C - .4byte sub_080A9448 - -gUnk_081299F8:: @ 081299F8 - .incbin "baserom.gba", 0x1299F8, 0x0000004 - .4byte gUnk_08129A20 - .incbin "baserom.gba", 0x129A00, 0x0000004 - .4byte gUnk_08129A18 - .incbin "baserom.gba", 0x129A08, 0x0000004 - .4byte gUnk_08129A20 - .incbin "baserom.gba", 0x129A10, 0x0000004 - .4byte gUnk_08129A18 - -gUnk_08129A18:: @ 08129A18 - .incbin "baserom.gba", 0x129A18, 0x0000008 - -gUnk_08129A20:: @ 08129A20 - .incbin "baserom.gba", 0x129A20, 0x0000008 diff --git a/data/const/projectile/projectileE.s b/data/const/projectile/projectileE.s deleted file mode 100644 index 69b605ec..00000000 --- a/data/const/projectile/projectileE.s +++ /dev/null @@ -1,11 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129A64:: @ 08129A64 - .4byte sub_080A9518 - .4byte sub_080A9540 - .4byte sub_080A95BC - diff --git a/data/const/projectile/projectileF.s b/data/const/projectile/projectileF.s deleted file mode 100644 index ca3e4a4f..00000000 --- a/data/const/projectile/projectileF.s +++ /dev/null @@ -1,20 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08129ABC:: @ 08129ABC - .4byte sub_080A95F8 - .4byte sub_080A95F8 - .4byte DeleteEntity - .4byte DeleteEntity - .4byte DeleteEntity - -gUnk_08129AD0:: @ 08129AD0 - .4byte sub_080A9610 - .4byte sub_080A976C - .4byte sub_080A99F0 - -gUnk_08129ADC:: @ 08129ADC - .incbin "baserom.gba", 0x129ADC, 0x0000004 diff --git a/data/data_08129320.s b/data/data_08129320.s index c0088c02..41b4d6ba 100644 --- a/data/data_08129320.s +++ b/data/data_08129320.s @@ -5,41 +5,41 @@ .align 2 gProjectileFunctions:: @ 08129320 - .4byte Projectile0 - .4byte Projectile1 - .4byte Projectile2 - .4byte Projectile3 - .4byte Projectile4 + .4byte DarkNutSwordSlash + .4byte RockProjectile + .4byte BoneProjectile + .4byte MoblinSpear + .4byte DekuSeedProjectile .4byte Projectile5 - .4byte Projectile6 - .4byte Projectile7 - .4byte Projectile8 - .4byte Projectile9 - .4byte ProjectileA - .4byte ProjectileB - .4byte ProjectileC - .4byte ProjectileD - .4byte ProjectileE - .4byte ProjectileF - .4byte Projectile10 - .4byte Projectile11 - .4byte Projectile12 - .4byte Projectile13 - .4byte Projectile14 - .4byte Projectile15 - .4byte Projectile16 - .4byte Projectile17 - .4byte Projectile18 - .4byte Projectile19 - .4byte Projectile1A - .4byte Projectile1B - .4byte Projectile1C - .4byte Projectile1D - .4byte Projectile1E - .4byte Projectile1F - .4byte Projectile20 - .4byte Projectile21 - .4byte Projectile22 - .4byte Projectile23 - .4byte Projectile24 + .4byte DirtBallProjectile + .4byte WindProjectile + .4byte FireProjectile + .4byte IceProjectile + .4byte GleerokProjectile + .4byte KeatonDagger + .4byte GuardLineOfSight + .4byte ArrowProjectile + .4byte MazaalEnergyBeam + .4byte OctorokBossProjectile + .4byte StalfosProjectile + .4byte LakituCloudProjectile + .4byte LakituLightning + .4byte MandiblesProjectile + .4byte RemovableDust + .4byte SpiderWeb + .4byte TorchTrapProjectile + .4byte GuruguruBarProjectile + .4byte V1DarkMagicProjectile + .4byte BallAndChain + .4byte V1FireProjectile + .4byte CannonballProjectile + .4byte V1EyeLaser + .4byte Winder + .4byte SpikedRollers + .4byte V2Projectile + .4byte V3HandProjectile + .4byte V3ElectricProjectile + .4byte GyorgTail + .4byte GyorgMaleEnergyProjectile + .4byte V3TennisBallProjectile .4byte DeleteEntity diff --git a/linker.ld b/linker.ld index 14a873ce..53391260 100644 --- a/linker.ld +++ b/linker.ld @@ -924,43 +924,43 @@ SECTIONS { asm/code_080A5574.o(.text); src/playerItem/playerItemSword.o(.text); asm/code_080A7C00.o(.text); - src/projectile/projectile0.o(.text); - src/projectile/projectile1.o(.text); - src/projectile/projectile2.o(.text); - src/projectile/projectile3.o(.text); - src/projectile/projectile4.o(.text); + src/projectile/darkNutSwordSlash.o(.text); + src/projectile/rockProjectile.o(.text); + src/projectile/boneProjectile.o(.text); + src/projectile/moblinSpear.o(.text); + src/projectile/dekuSeedProjectile.o(.text); src/projectile/projectile5.o(.text); - src/projectile/projectile6.o(.text); - src/projectile/projectile7.o(.text); - src/projectile/projectile8.o(.text); - src/projectile/projectile9.o(.text); - src/projectile/projectileA.o(.text); - src/projectile/projectileB.o(.text); - src/projectile/projectileC.o(.text); - src/projectile/projectileD.o(.text); - src/projectile/projectileE.o(.text); - src/projectile/projectileF.o(.text); - src/projectile/projectile10.o(.text); - src/projectile/projectile11.o(.text); - src/projectile/projectile12.o(.text); - src/projectile/projectile13.o(.text); - src/projectile/projectile14.o(.text); - src/projectile/projectile15.o(.text); - src/projectile/projectile16.o(.text); - src/projectile/projectile17.o(.text); - src/projectile/projectile18.o(.text); - src/projectile/projectile19.o(.text); - src/projectile/projectile1A.o(.text); - src/projectile/projectile1B.o(.text); - src/projectile/projectile1C.o(.text); - src/projectile/projectile1D.o(.text); - src/projectile/projectile1E.o(.text); - src/projectile/projectile1F.o(.text); - src/projectile/projectile20.o(.text); - src/projectile/projectile21.o(.text); - src/projectile/projectile22.o(.text); - src/projectile/projectile23.o(.text); - src/projectile/projectile24.o(.text); + src/projectile/dirtBallProjectile.o(.text); + src/projectile/windProjectile.o(.text); + src/projectile/fireProjectile.o(.text); + src/projectile/iceProjectile.o(.text); + src/projectile/gleerokProjectile.o(.text); + src/projectile/keatonDagger.o(.text); + src/projectile/guardLineOfSight.o(.text); + src/projectile/arrowProjectile.o(.text); + src/projectile/mazaalEnergyBeam.o(.text); + src/projectile/octorokBossProjectile.o(.text); + src/projectile/stalfosProjectile.o(.text); + src/projectile/lakituCloudProjectile.o(.text); + src/projectile/lakituLightning.o(.text); + src/projectile/mandiblesProjectile.o(.text); + src/projectile/removableDust.o(.text); + src/projectile/spiderWeb.o(.text); + src/projectile/torchTrapProjectile.o(.text); + src/projectile/guruguruBarProjectile.o(.text); + src/projectile/v1DarkMagicProjectile.o(.text); + src/projectile/ballAndChain.o(.text); + src/projectile/v1FireProjectile.o(.text); + src/projectile/cannonballProjectile.o(.text); + src/projectile/v1EyeLaser.o(.text); + src/projectile/winder.o(.text); + src/projectile/spikedRollers.o(.text); + src/projectile/v2Projectile.o(.text); + src/projectile/v3HandProjectile.o(.text); + src/projectile/v3ElectricProjectile.o(.text); + src/projectile/gyorgTail.o(.text); + src/projectile/gyorgMaleEnergyProjectile.o(.text); + src/projectile/v3TennisBallProjectile.o(.text); src/playerItem/playerItem10.o(.text); src/playerItem/playerItem13.o(.text); src/intro.o(.text); @@ -1655,62 +1655,62 @@ data/const/object/object1D.o(.rodata); data/data_08127280.o(.rodata); data/const/playerItem/playerItemSword.o(.rodata); data/data_08129320.o(.rodata); - data/const/projectile/projectile0.o(.rodata); - data/const/projectile/projectile1.o(.rodata); - data/animations/projectile/projectile1.o(.rodata); - data/const/projectile/projectile2.o(.rodata); - data/animations/projectile/projectile2.o(.rodata); - data/const/projectile/projectile3.o(.rodata); - data/const/projectile/projectile4.o(.rodata); - data/const/projectile/projectile5.o(.rodata); - data/const/projectile/projectile6.o(.rodata); - data/animations/projectile/projectile6.o(.rodata); - data/const/projectile/projectile7.o(.rodata); - data/animations/projectile/projectile7.o(.rodata); - data/const/projectile/projectile8.o(.rodata); - data/animations/projectile/projectile8.o(.rodata); - data/const/projectile/projectile9.o(.rodata); - data/animations/projectile/projectile9.o(.rodata); - data/const/projectile/projectileA.o(.rodata); - data/const/projectile/projectileB.o(.rodata); - data/const/projectile/projectileC.o(.rodata); - data/const/projectile/projectileD.o(.rodata); - data/animations/projectile/projectileD.o(.rodata); - data/const/projectile/projectileE.o(.rodata); - data/animations/projectile/projectileE.o(.rodata); - data/const/projectile/projectileF.o(.rodata); - data/const/projectile/projectile10.o(.rodata); - data/const/projectile/projectile11.o(.rodata); - data/animations/projectile/projectile11.o(.rodata); - data/const/projectile/projectile12.o(.rodata); - data/animations/projectile/projectile12.o(.rodata); - data/const/projectile/projectile13.o(.rodata); - data/animations/projectile/projectile13.o(.rodata); - data/const/projectile/projectile14.o(.rodata); - data/const/projectile/projectile15.o(.rodata); - data/animations/projectile/projectile15.o(.rodata); - data/const/projectile/projectile16.o(.rodata); - data/animations/projectile/projectile16.o(.rodata); - data/const/projectile/projectile18.o(.rodata); - data/animations/projectile/projectile18.o(.rodata); - data/const/projectile/projectile19.o(.rodata); - data/const/projectile/projectile1A.o(.rodata); - data/const/projectile/projectile1B.o(.rodata); - data/animations/projectile/projectile1B.o(.rodata); - data/const/projectile/projectile1C.o(.rodata); - data/animations/projectile/projectile1C.o(.rodata); - data/const/projectile/projectile1D.o(.rodata); - data/const/projectile/projectile1E.o(.rodata); - data/animations/projectile/projectile1E.o(.rodata); - data/const/projectile/projectile1F.o(.rodata); - data/animations/projectile/projectile1F.o(.rodata); - data/const/projectile/projectile20.o(.rodata); - data/animations/projectile/projectile20.o(.rodata); - data/const/projectile/projectile21.o(.rodata); - data/const/projectile/projectile22.o(.rodata); - data/const/projectile/projectile23.o(.rodata); - data/animations/projectile/projectile23.o(.rodata); - data/const/projectile/projectile24.o(.rodata); + src/projectile/darkNutSwordSlash.o(.rodata); + src/projectile/rockProjectile.o(.rodata); + data/animations/projectile/rockProjectile.o(.rodata); + src/projectile/boneProjectile.o(.rodata); + data/animations/projectile/boneProjectile.o(.rodata); + src/projectile/moblinSpear.o(.rodata); + src/projectile/dekuSeedProjectile.o(.rodata); + src/projectile/projectile5.o(.rodata); + src/projectile/dirtBallProjectile.o(.rodata); + data/animations/projectile/dirtBallProjectile.o(.rodata); + src/projectile/windProjectile.o(.rodata); + data/animations/projectile/windProjectile.o(.rodata); + src/projectile/fireProjectile.o(.rodata); + data/animations/projectile/fireProjectile.o(.rodata); + src/projectile/iceProjectile.o(.rodata); + data/animations/projectile/iceProjectile.o(.rodata); + src/projectile/gleerokProjectile.o(.rodata); + src/projectile/keatonDagger.o(.rodata); + src/projectile/guardLineOfSight.o(.rodata); + src/projectile/arrowProjectile.o(.rodata); + data/animations/projectile/arrowProjectile.o(.rodata); + src/projectile/mazaalEnergyBeam.o(.rodata); + data/animations/projectile/mazaalEnergyBeam.o(.rodata); + src/projectile/octorokBossProjectile.o(.rodata); + src/projectile/stalfosProjectile.o(.rodata); + src/projectile/lakituCloudProjectile.o(.rodata); + data/animations/projectile/lakituCloudProjectile.o(.rodata); + src/projectile/lakituLightning.o(.rodata); + data/animations/projectile/lakituLightning.o(.rodata); + src/projectile/mandiblesProjectile.o(.rodata); + data/animations/projectile/mandiblesProjectile.o(.rodata); + src/projectile/removableDust.o(.rodata); + src/projectile/spiderWeb.o(.rodata); + data/animations/projectile/spiderWeb.o(.rodata); + src/projectile/torchTrapProjectile.o(.rodata); + data/animations/projectile/torchTrapProjectile.o(.rodata); + src/projectile/v1DarkMagicProjectile.o(.rodata); + data/animations/projectile/v1DarkMagicProjectile.o(.rodata); + src/projectile/ballAndChain.o(.rodata); + src/projectile/v1FireProjectile.o(.rodata); + src/projectile/cannonballProjectile.o(.rodata); + data/animations/projectile/cannonballProjectile.o(.rodata); + src/projectile/v1EyeLaser.o(.rodata); + data/animations/projectile/v1EyeLaser.o(.rodata); + src/projectile/winder.o(.rodata); + src/projectile/spikedRollers.o(.rodata); + data/animations/projectile/spikedRollers.o(.rodata); + src/projectile/v2Projectile.o(.rodata); + data/animations/projectile/v2Projectile.o(.rodata); + src/projectile/v3HandProjectile.o(.rodata); + data/animations/projectile/v3HandProjectile.o(.rodata); + src/projectile/v3ElectricProjectile.o(.rodata); + src/projectile/gyorgTail.o(.rodata); + src/projectile/gyorgMaleEnergyProjectile.o(.rodata); + data/animations/projectile/gyorgMaleEnergyProjectile.o(.rodata); + src/projectile/v3TennisBallProjectile.o(.rodata); data/const/playerItem/playerItem10.o(.rodata); data/data_0812AA88.o(.rodata); data/const/playerItem/playerItem13.o(.rodata); diff --git a/src/projectile/projectileD.c b/src/projectile/arrowProjectile.c similarity index 61% rename from src/projectile/projectileD.c rename to src/projectile/arrowProjectile.c index 931728dd..48db32b3 100644 --- a/src/projectile/projectileD.c +++ b/src/projectile/arrowProjectile.c @@ -4,31 +4,29 @@ #include "audio.h" #include "createObject.h" -extern void (*const gUnk_081299D0[])(Entity*); - -extern void (*const gUnk_081299E4[])(Entity*); - -void sub_080A9488(Entity*); - -void sub_080A94C0(Entity*, u32); - extern s32 sub_080AF090(Entity*); +extern void (*const gArrowProjectile[])(Entity*); +extern void (*const gArrowProjectileActions[])(Entity*); + typedef struct { u8 flipX; u8 flipY; u8 animIndex; u8 unk; - Hitbox* hitbox; + const Hitbox* hitbox; } struct_081299F8; -extern struct_081299F8 gUnk_081299F8[]; +extern const struct_081299F8 gUnk_081299F8[]; -void ProjectileD(Entity* this) { - gUnk_081299D0[GetNextFunction(this)](this); +void sub_080A9488(Entity*); +void sub_080A94C0(Entity*, u32); + +void ArrowProjectile(Entity* this) { + gArrowProjectile[GetNextFunction(this)](this); } -void sub_080A931C(Entity* this) { - gUnk_081299E4[this->action](this); +void ArrowProjectile_OnTick(Entity* this) { + gArrowProjectileActions[this->action](this); } void sub_080A9334(Entity* this) { @@ -44,7 +42,7 @@ void sub_080A9334(Entity* this) { } } -void sub_080A9370(Entity* this) { +void ArrowProjectile_Init(Entity* this) { this->action = 1; this->spriteSettings.b.draw = 1; this->flags &= 0x7f; @@ -54,10 +52,8 @@ void sub_080A9370(Entity* this) { sub_080A94C0(this, this->type); } -void sub_080A93A0(Entity* this) { - Entity* parent; - - parent = this->parent; +void ArrowProjectile_Action1(Entity* this) { + Entity* parent = this->parent; if ((parent == NULL) || (parent->next == NULL)) { DeleteThisEntity(); } @@ -72,7 +68,7 @@ void sub_080A93A0(Entity* this) { } } -void sub_080A93DC(Entity* this) { +void ArrowProjectile_Action2(Entity* this) { if (this->collisions != 0) { this->action = 3; this->flags &= 0x7f; @@ -86,14 +82,14 @@ void sub_080A93DC(Entity* this) { sub_080AF090(this); } -void sub_080A942C(Entity* this) { +void ArrowProjectile_Action3(Entity* this) { if (--this->actionDelay == 0) { DeleteThisEntity(); } GetNextFrame(this); } -void sub_080A9448(Entity* this) { +void ArrowProjectile_Action4(Entity* this) { if (sub_08003FC4(this, 0x2800) == 0) { CreateDust(this); DeleteThisEntity(); @@ -116,11 +112,32 @@ void sub_080A9488(Entity* this) { sub_080A94C0(this, this->animationState); } -void sub_080A94C0(Entity* this, u32 param) { - struct_081299F8* entry = &gUnk_081299F8[param]; +void sub_080A94C0(Entity* this, u32 animationState) { + const struct_081299F8* entry = &gUnk_081299F8[animationState]; this->spriteSettings.b.flipX = entry->flipX; this->spriteSettings.b.flipY = entry->flipY; this->animIndex = entry->animIndex; - this->hitbox = entry->hitbox; + this->hitbox = (Hitbox*)entry->hitbox; InitializeAnimation(this, this->animIndex); } + +void (*const gArrowProjectile[])(Entity*) = { + ArrowProjectile_OnTick, sub_080A9334, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const gArrowProjectileActions[])(Entity*) = { + ArrowProjectile_Init, ArrowProjectile_Action1, ArrowProjectile_Action2, + ArrowProjectile_Action3, ArrowProjectile_Action4, +}; + +extern const Hitbox gUnk_08129A18; +extern const Hitbox gUnk_08129A20; + +const struct_081299F8 gUnk_081299F8[] = { + { 0, 0, 1, 0, &gUnk_08129A20 }, + { 1, 0, 0, 0, &gUnk_08129A18 }, + { 0, 1, 1, 0, &gUnk_08129A20 }, + { 0, 0, 0, 0, &gUnk_08129A18 }, +}; + +const Hitbox gUnk_08129A18 = { 0, 0, { 4, 0, 0, 0 }, 6, 4 }; +const Hitbox gUnk_08129A20 = { 0, 0, { 0, 0, 0, 4 }, 4, 6 }; diff --git a/src/projectile/projectile19.c b/src/projectile/ballAndChain.c similarity index 80% rename from src/projectile/projectile19.c rename to src/projectile/ballAndChain.c index c89f2d15..065c9e8a 100644 --- a/src/projectile/projectile19.c +++ b/src/projectile/ballAndChain.c @@ -1,13 +1,13 @@ #include "entity.h" #include "functions.h" -extern void (*const gUnk_0812A494[])(Entity*); - extern u8 gEntCount; - bool32 sub_080AB12C(Entity* this); -void Projectile19(Entity* this) { +extern void (*const gUnk_0812A494[])(Entity*); +extern const u8 gUnk_0812A4A8[]; + +void BallAndChain(Entity* this) { gUnk_0812A494[this->type](this); } @@ -61,7 +61,7 @@ bool32 sub_080AB12C(Entity* this) { return TRUE; } -ASM_FUNC("asm/non_matching/projectile19/sub_080AB170.inc", void sub_080AB170(Entity* this)) +ASM_FUNC("asm/non_matching/ballAndChain/sub_080AB170.inc", void sub_080AB170(Entity* this)) void sub_080AB26C(Entity* this) { if (this->action == 0) { @@ -78,3 +78,11 @@ void sub_080AB26C(Entity* this) { this->frameIndex += 1; } } + +void (*const gUnk_0812A494[])(Entity*) = { + sub_080AB074, sub_080AB170, sub_080AB170, sub_080AB170, sub_080AB26C, +}; +const u8 gUnk_0812A4A8[] = { + 6, 240, 10, 242, 10, 240, 8, 240, 252, 242, 248, 242, 252, 246, 4, 246, + 250, 242, 248, 240, 246, 242, 248, 244, 4, 242, 8, 242, 4, 246, 252, 246, +}; diff --git a/src/projectile/projectile2.c b/src/projectile/boneProjectile.c similarity index 65% rename from src/projectile/projectile2.c rename to src/projectile/boneProjectile.c index fa163358..61f60863 100644 --- a/src/projectile/projectile2.c +++ b/src/projectile/boneProjectile.c @@ -2,22 +2,21 @@ #include "enemy.h" #include "functions.h" -extern void (*const gUnk_0812960C[])(Entity*); - -extern void (*const gUnk_08129620[])(Entity*); - -void sub_080A82D8(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); -void Projectile2(Entity* this) { - gUnk_0812960C[GetNextFunction(this)](this); +extern void (*const BoneProjectile_Functions[])(Entity*); +extern void (*const BoneProjectile_Actions[])(Entity*); + +void sub_080A82D8(Entity*); + +void BoneProjectile(Entity* this) { + BoneProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A81AC(Entity* this) { - gUnk_08129620[this->action](this); +void BoneProjectile_OnTick(Entity* this) { + BoneProjectile_Actions[this->action](this); } void sub_080A81C4(Entity* this) { @@ -28,14 +27,14 @@ void sub_080A81C4(Entity* this) { } } -void sub_080A81E0(Entity* this) { +void BoneProjectile_Init(Entity* this) { this->action = 1; this->actionDelay = 0x3c; this->height.HALF.HI = 0xfffe; InitializeAnimation(this, 0); } -void sub_080A81FC(Entity* this) { +void BoneProjectile_Action1(Entity* this) { GetNextFrame(this); sub_080AF090(this); if (this->collisions == 0) { @@ -53,7 +52,7 @@ void sub_080A81FC(Entity* this) { } } -void sub_080A8248(Entity* this) { +void BoneProjectile_Action2(Entity* this) { GetNextFrame(this); sub_080AF090(this); if (sub_08003FC4(this, 0x1800) == 0) { @@ -64,7 +63,7 @@ void sub_080A8248(Entity* this) { } } -void sub_080A827C(Entity* this) { +void BoneProjectile_Action3(Entity* this) { this->spriteSettings.b.draw ^= 1; sub_0806F69C(this); GetNextFrame(this); @@ -73,7 +72,7 @@ void sub_080A827C(Entity* this) { } } -void sub_080A82B4(Entity* this) { +void BoneProjectile_Action4(Entity* this) { GetNextFrame(this); sub_0806F69C(this); if (sub_08003FC4(this, 0x1800) == 0) { @@ -88,3 +87,10 @@ void sub_080A82D8(Entity* this) { this->direction ^= 0x10; this->speed = 0x80; } + +void (*const BoneProjectile_Functions[])(Entity*) = { + BoneProjectile_OnTick, sub_080A81C4, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const BoneProjectile_Actions[])(Entity*) = { + BoneProjectile_Init, BoneProjectile_Action1, BoneProjectile_Action2, BoneProjectile_Action3, BoneProjectile_Action4, +}; diff --git a/src/projectile/projectile1B.c b/src/projectile/cannonballProjectile.c similarity index 68% rename from src/projectile/projectile1B.c rename to src/projectile/cannonballProjectile.c index 34b65650..950b6159 100644 --- a/src/projectile/projectile1B.c +++ b/src/projectile/cannonballProjectile.c @@ -2,27 +2,24 @@ #include "enemy.h" #include "functions.h" -extern void (*const gUnk_0812A58C[])(Entity*); - -extern void (*const gUnk_0812A5A0[])(Entity*); - -extern s32 sub_080AF090(Entity*); -bool32 sub_080AB5F4(Entity*); - -bool32 sub_080AB634(Entity*); - -extern void sub_080043A8(Entity*); extern void CreateItemOnGround(Entity*); +extern s32 sub_080AF090(Entity*); +extern void sub_080043A8(Entity*); extern void CreateChestSpawner(Entity*); - extern u32 sub_080177A0(Entity*, Entity*); -void Projectile1B(Entity* this) { - gUnk_0812A58C[GetNextFunction(this)](this); +extern void (*const CannonballProjectile_Functions[])(Entity*); +extern void (*const CannonballProjectile_Actions[])(Entity*); + +bool32 sub_080AB5F4(Entity*); +bool32 sub_080AB634(Entity*); + +void CannonballProjectile(Entity* this) { + CannonballProjectile_Functions[GetNextFunction(this)](this); } -void sub_080AB52C(Entity* this) { - gUnk_0812A5A0[this->action](this); +void CannonballProjectile_OnTick(Entity* this) { + CannonballProjectile_Actions[this->action](this); } void sub_080AB544(Entity* this) { @@ -39,14 +36,14 @@ void sub_080AB544(Entity* this) { } } -void sub_080AB580(Entity* this) { +void CannonballProjectile_Init(Entity* this) { this->action = 1; this->direction = this->type << 3; this->height.HALF.HI = 0xfffc; InitializeAnimation(this, this->type); } -void sub_080AB59C(Entity* this) { +void CannonballProjectile_Action1(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) == 0) { CreateFx(this, 2, 0); @@ -55,7 +52,7 @@ void sub_080AB59C(Entity* this) { sub_080AB5F4(this); } -void sub_080AB5C4(Entity* this) { +void CannonballProjectile_Action2(Entity* this) { GetNextFrame(this); sub_080AF090(this); if ((sub_080AB634(this) == 0) && (this->collisions != 0)) { @@ -83,7 +80,7 @@ bool32 sub_080AB634(Entity* this) { Entity** entities = ((Entity**)&this->parent->field_0x20); u32 i; for (i = 0; i <= 3; ++i) { - if(entities[i] != NULL && (sub_080177A0(this, entities[i]) != 0)) { + if (entities[i] != NULL && (sub_080177A0(this, entities[i]) != 0)) { if (entities[i]->action < 3) { entities[i]->action = 3; entities[i]->actionDelay = 0x1e; @@ -96,3 +93,12 @@ bool32 sub_080AB634(Entity* this) { } return FALSE; } + +void (*const CannonballProjectile_Functions[])(Entity*) = { + CannonballProjectile_OnTick, sub_080AB544, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const CannonballProjectile_Actions[])(Entity*) = { + CannonballProjectile_Init, + CannonballProjectile_Action1, + CannonballProjectile_Action2, +}; diff --git a/src/projectile/darkNutSwordSlash.c b/src/projectile/darkNutSwordSlash.c new file mode 100644 index 00000000..51123fc7 --- /dev/null +++ b/src/projectile/darkNutSwordSlash.c @@ -0,0 +1,188 @@ +#include "entity.h" +#include "player.h" +#include "coord.h" + +extern const u8 DarkNutSwordSlash_DamageTypes[]; +extern void (*const DarkNutSwordSlash_UpdatesForType[])(Entity*); +extern Hitbox const* const* const gUnk_081293E0[]; +extern const Hitbox* const gUnk_081293F0[]; +extern const Hitbox* const gUnk_08129400[]; +extern const Hitbox* const gUnk_08129410[]; +extern const Hitbox* const gUnk_08129420[]; + +void DarkNutSwordSlash_Init(Entity*); +void DarkNutSwordSlash_OnTick(Entity*); + +void DarkNutSwordSlash(Entity* this) { + if (this->action == 0) { + this->action = 1; + DarkNutSwordSlash_Init(this); + if (this->type == 3) { + InitAnimationForceUpdate(this, this->parent->animationState + 0x18); + } + } + if ((this->parent == NULL) || (this->parent->currentHealth == 0)) { + DeleteThisEntity(); + } + if (((this->bitfield & 0x80) != 0) && (this->field_0x4c == &gPlayerEntity)) { + this->iframes = -0x2d; + } + this->bitfield = 0; + CopyPositionAndSpriteOffset(this->parent, this); + DarkNutSwordSlash_OnTick(this); + if (this->type == 3) { + this->y.HALF.HI += 1; + UpdateAnimationSingleFrame(this); + } +} + +void DarkNutSwordSlash_Init(Entity* this) { + this->damageType = DarkNutSwordSlash_DamageTypes[this->parent->type + this->type * 4]; +} + +void DarkNutSwordSlash_OnTick(Entity* this) { + DarkNutSwordSlash_UpdatesForType[this->type](this); +} + +void DarkNutSwordSlash_UpdateType0(Entity* this) { + Entity* parent = this->parent; + this->hitbox = (Hitbox*)gUnk_081293E0[parent->animationState][(parent->frames.all & 0xf) - 1]; +} + +void DarkNutSwordSlash_UpdateType2(Entity* this) { + Entity* parent = this->parent; + this->hitbox = (Hitbox*)gUnk_081293F0[parent->animationState]; +} + +void DarkNutSwordSlash_UpdateType34(Entity* this) { + if ((this->parent->frames.all & 0x10) != 0) { + this->hitbox = (Hitbox*)gUnk_08129410[this->parent->animationState]; + } else { + this->hitbox = (Hitbox*)gUnk_08129400[this->parent->animationState]; + } +} + +void DarkNutSwordSlash_UpdateType1(Entity* this) { + Entity* parent = this->parent; + this->hitbox = (Hitbox*)gUnk_08129420[parent->animationState]; +} + +const u8 DarkNutSwordSlash_DamageTypes[] = { + 76, 76, 78, 77, 83, 83, 83, 83, 79, 79, 76, 80, 84, 84, 84, 85, 79, 79, 76, 80, +}; +void (*const DarkNutSwordSlash_UpdatesForType[])(Entity*) = { + DarkNutSwordSlash_UpdateType0, DarkNutSwordSlash_UpdateType1, DarkNutSwordSlash_UpdateType2, + DarkNutSwordSlash_UpdateType34, DarkNutSwordSlash_UpdateType34, +}; + +extern const Hitbox* const gUnk_08129460[]; +extern const Hitbox* const gUnk_081294A8[]; +extern const Hitbox* const gUnk_081294F0[]; +extern const Hitbox* const gUnk_08129538[]; +Hitbox const* const* const gUnk_081293E0[] = { + gUnk_08129460, + gUnk_081294A8, + gUnk_081294F0, + gUnk_08129538, +}; +extern const Hitbox gUnk_08129550; +extern const Hitbox gUnk_08129558; +extern const Hitbox gUnk_08129560; +extern const Hitbox gUnk_08129568; +const Hitbox* const gUnk_081293F0[] = { + &gUnk_08129550, + &gUnk_08129558, + &gUnk_08129560, + &gUnk_08129568, +}; +extern const Hitbox gUnk_08129590; +extern const Hitbox gUnk_081295A0; +extern const Hitbox gUnk_081295B0; +extern const Hitbox gUnk_081295C0; +const Hitbox* const gUnk_08129400[] = { + &gUnk_08129590, + &gUnk_081295A0, + &gUnk_081295B0, + &gUnk_081295C0, +}; +extern const Hitbox gUnk_08129598; +extern const Hitbox gUnk_081295A8; +extern const Hitbox gUnk_081295B8; +extern const Hitbox gUnk_081295C8; +const Hitbox* const gUnk_08129410[] = { + &gUnk_08129598, + &gUnk_081295A8, + &gUnk_081295B8, + &gUnk_081295C8, +}; +extern const Hitbox gUnk_08129570; +extern const Hitbox gUnk_08129578; +extern const Hitbox gUnk_08129580; +extern const Hitbox gUnk_08129588; +const Hitbox* const gUnk_08129420[] = { + &gUnk_08129570, + &gUnk_08129578, + &gUnk_08129580, + &gUnk_08129588, +}; + +const Hitbox gUnk_08129430 = { -5, -32, { 0, 0, 0, 0 }, 8, 10 }; +const Hitbox gUnk_08129438 = { 2, -37, { 0, 0, 0, 0 }, 8, 10 }; +const Hitbox gUnk_08129440 = { 19, -33, { 0, 0, 0, 0 }, 10, 11 }; +const Hitbox gUnk_08129448 = { 28, -14, { 0, 0, 0, 0 }, 16, 6 }; +const Hitbox gUnk_08129450 = { 34, -18, { 0, 0, 0, 0 }, 8, 4 }; +const Hitbox gUnk_08129458 = { 25, 15, { 0, 0, 0, 0 }, 4, 4 }; + +const Hitbox* const gUnk_08129460[] = { + &gUnk_08129430, &gUnk_08129438, &gUnk_08129440, &gUnk_08129448, &gUnk_08129450, &gUnk_08129458, +}; + +const Hitbox gUnk_08129478 = { 21, -6, { 0, 0, 0, 0 }, 12, 8 }; +const Hitbox gUnk_08129480 = { 21, -20, { 0, 0, 0, 0 }, 16, 8 }; +const Hitbox gUnk_08129488 = { 15, -31, { 0, 0, 0, 0 }, 8, 10 }; +const Hitbox gUnk_08129490 = { 3, -39, { 0, 0, 0, 0 }, 8, 12 }; +const Hitbox gUnk_08129498 = { 7, -38, { 0, 0, 0, 0 }, 7, 8 }; +const Hitbox gUnk_081294A0 = { 1, -29, { 0, 0, 0, 0 }, 4, 5 }; + +const Hitbox* const gUnk_081294A8[] = { + &gUnk_08129478, &gUnk_08129480, &gUnk_08129488, &gUnk_08129490, &gUnk_08129498, &gUnk_081294A0, +}; + +const Hitbox gUnk_081294C0 = { 7, 7, { 0, 0, 0, 0 }, 8, 11 }; +const Hitbox gUnk_081294C8 = { -6, 10, { 0, 0, 0, 0 }, 8, 12 }; +const Hitbox gUnk_081294D0 = { -22, 2, { 0, 0, 0, 0 }, 8, 8 }; +const Hitbox gUnk_081294D8 = { -27, -11, { 0, 0, 0, 0 }, 12, 8 }; +const Hitbox gUnk_081294E0 = { -28, -9, { 0, 0, 0, 0 }, 15, 6 }; +const Hitbox gUnk_081294E8 = { -21, -12, { 0, 0, 0, 0 }, 6, 2 }; + +const Hitbox* const gUnk_081294F0[] = { + &gUnk_081294C0, &gUnk_081294C8, &gUnk_081294D0, &gUnk_081294D8, &gUnk_081294E0, &gUnk_081294E8, +}; + +const Hitbox gUnk_08129508 = { -21, -6, { 0, 0, 0, 0 }, 12, 8 }; +const Hitbox gUnk_08129510 = { -21, -20, { 0, 0, 0, 0 }, 16, 8 }; +const Hitbox gUnk_08129518 = { -15, -31, { 0, 0, 0, 0 }, 8, 10 }; +const Hitbox gUnk_08129520 = { -3, -39, { 0, 0, 0, 0 }, 8, 12 }; +const Hitbox gUnk_08129528 = { -7, -38, { 0, 0, 0, 0 }, 7, 8 }; +const Hitbox gUnk_08129530 = { -1, -29, { 0, 0, 0, 0 }, 4, 5 }; + +const Hitbox* const gUnk_08129538[] = { + &gUnk_08129508, &gUnk_08129510, &gUnk_08129518, &gUnk_08129520, &gUnk_08129528, &gUnk_08129530, +}; + +const Hitbox gUnk_08129550 = { 3, -30, { 0, 0, 0, 0 }, 7, 10 }; +const Hitbox gUnk_08129558 = { 28, -12, { 0, 0, 0, 0 }, 14, 7 }; +const Hitbox gUnk_08129560 = { -2, 14, { 0, 0, 0, 0 }, 12, 7 }; +const Hitbox gUnk_08129568 = { -28, -12, { 0, 0, 0, 0 }, 14, 7 }; +const Hitbox gUnk_08129570 = { 1, -29, { 0, 0, 0, 0 }, 8, 8 }; +const Hitbox gUnk_08129578 = { 19, -8, { 0, 0, 0, 0 }, 8, 8 }; +const Hitbox gUnk_08129580 = { 0, 10, { 0, 0, 0, 0 }, 8, 8 }; +const Hitbox gUnk_08129588 = { -19, -8, { 0, 0, 0, 0 }, 8, 8 }; +const Hitbox gUnk_08129590 = { 4, -37, { 0, 0, 0, 0 }, 7, 10 }; +const Hitbox gUnk_08129598 = { 4, -35, { 0, 0, 0, 0 }, 2, 8 }; +const Hitbox gUnk_081295A0 = { 32, -14, { 0, 0, 0, 0 }, 14, 6 }; +const Hitbox gUnk_081295A8 = { 30, -14, { 0, 0, 0, 0 }, 12, 2 }; +const Hitbox gUnk_081295B0 = { -1, 22, { 0, 0, 0, 0 }, 7, 12 }; +const Hitbox gUnk_081295B8 = { -1, 20, { 0, 0, 0, 0 }, 2, 10 }; +const Hitbox gUnk_081295C0 = { -32, -14, { 0, 0, 0, 0 }, 14, 6 }; +const Hitbox gUnk_081295C8 = { -30, -14, { 0, 0, 0, 0 }, 12, 2 }; diff --git a/src/projectile/projectile4.c b/src/projectile/dekuSeedProjectile.c similarity index 77% rename from src/projectile/projectile4.c rename to src/projectile/dekuSeedProjectile.c index 7d58f00a..e17caa58 100644 --- a/src/projectile/projectile4.c +++ b/src/projectile/dekuSeedProjectile.c @@ -4,24 +4,23 @@ #include "audio.h" #include "flags.h" -extern void (*const gUnk_081296F0[])(Entity*); - -extern void (*const gUnk_08129704[])(Entity*); - -void sub_080A8680(Entity*); -void sub_080A86A0(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); extern u32 sub_080177A0(Entity*, Entity*); -void Projectile4(Entity* this) { - gUnk_081296F0[GetNextFunction(this)](this); +extern void (*const DekuSeedProjectile_Functions[])(Entity*); +extern void (*const DekuSeedProjectile_Actions[])(Entity*); + +void sub_080A8680(Entity*); +void sub_080A86A0(Entity*); + +void DekuSeedProjectile(Entity* this) { + DekuSeedProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A8458(Entity* this) { - gUnk_08129704[this->action](this); +void DekuSeedProjectile_OnTick(Entity* this) { + DekuSeedProjectile_Actions[this->action](this); } void sub_080A8470(Entity* this) { @@ -41,7 +40,7 @@ void sub_080A8470(Entity* this) { } } -void sub_080A84C8(Entity* this) { +void DekuSeedProjectile_Init(Entity* this) { this->action = 1; this->actionDelay = 0x30; this->field_0xf = 0; @@ -53,7 +52,7 @@ void sub_080A84C8(Entity* this) { InitializeAnimation(this, 0x18); } -void sub_080A8504(Entity* this) { +void DekuSeedProjectile_Action1(Entity* this) { Entity* parent; GetNextFrame(this); @@ -88,7 +87,7 @@ void sub_080A8504(Entity* this) { } } -void sub_080A85B8(Entity* this) { +void DekuSeedProjectile_Action2(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) != 0) { if (sub_080A7EB0(this) != 0) { @@ -106,14 +105,14 @@ void sub_080A85B8(Entity* this) { } } -void sub_080A8610(Entity* this) { +void DekuSeedProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteThisEntity(); } } -void sub_080A862C(Entity* this) { +void DekuSeedProjectile_Action4(Entity* this) { GetNextFrame(this); sub_080AF090(this); switch (sub_080044EC(this, 0x2800)) { @@ -145,3 +144,11 @@ void sub_080A86A0(Entity* this) { this->speed = 0; EnqueueSFX(SFX_18E); } + +void (*const DekuSeedProjectile_Functions[])(Entity*) = { + DekuSeedProjectile_OnTick, sub_080A8470, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const DekuSeedProjectile_Actions[])(Entity*) = { + DekuSeedProjectile_Init, DekuSeedProjectile_Action1, DekuSeedProjectile_Action2, + DekuSeedProjectile_Action3, DekuSeedProjectile_Action4, +}; diff --git a/src/projectile/projectile6.c b/src/projectile/dirtBallProjectile.c similarity index 78% rename from src/projectile/projectile6.c rename to src/projectile/dirtBallProjectile.c index 92c0b83e..fd2765e7 100644 --- a/src/projectile/projectile6.c +++ b/src/projectile/dirtBallProjectile.c @@ -4,19 +4,17 @@ #include "coord.h" #include "functions.h" -extern void (*const gUnk_08129740[])(Entity*); - -extern void (*const gUnk_08129754[])(Entity*); - -extern Hitbox gUnk_08129764; - extern void sub_08078954(Entity*); -void Projectile6(Entity* this) { - gUnk_08129740[GetNextFunction(this)](this); +extern void (*const DirtBallProjectile_Functions[])(Entity*); +extern void (*const DirtBallProjectile_Actions[])(Entity*); +extern const Hitbox3D gUnk_08129764; + +void DirtBallProjectile(Entity* this) { + DirtBallProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A87E4(Entity* this) { +void DirtBallProjectile_OnTick(Entity* this) { if (this->type == 1) { if (this->attachedEntity == NULL) { DeleteThisEntity(); @@ -25,7 +23,7 @@ void sub_080A87E4(Entity* this) { DeleteThisEntity(); } } - gUnk_08129754[this->action](this); + DirtBallProjectile_Actions[this->action](this); } void sub_080A881C(Entity* this) { @@ -45,12 +43,12 @@ void sub_080A881C(Entity* this) { } } -void sub_080A8868(Entity* this) { +void DirtBallProjectile_Init(Entity* this) { this->action = 1; this->subAction = 0; this->spriteSettings.b.shadow = 1; this->field_0x20 = 0x8000; - this->hitbox = &gUnk_08129764; + this->hitbox = (Hitbox*)&gUnk_08129764; this->field_0x3c |= 0x10; switch (this->type) { case 0: @@ -66,7 +64,7 @@ void sub_080A8868(Entity* this) { } } -void sub_080A88C8(Entity* this) { +void DirtBallProjectile_Action1(Entity* this) { Entity* entity; Entity* parent; @@ -106,7 +104,7 @@ void sub_080A88C8(Entity* this) { } } -void sub_080A8988(Entity* this) { +void DirtBallProjectile_Action2(Entity* this) { u8 bVar1; u32 uVar2; u32 tmp; @@ -160,9 +158,20 @@ void sub_080A8988(Entity* this) { } } -void sub_080A8A48(Entity* this) { +void DirtBallProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteEntity(this); } } + +void (*const DirtBallProjectile_Functions[])(Entity*) = { + DirtBallProjectile_OnTick, sub_080A881C, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const DirtBallProjectile_Actions[])(Entity*) = { + DirtBallProjectile_Init, + DirtBallProjectile_Action1, + DirtBallProjectile_Action2, + DirtBallProjectile_Action3, +}; +const Hitbox3D gUnk_08129764 = { 0, -3, { 5, 3, 3, 5 }, 6, 6, 10, { 0, 0, 0 } }; diff --git a/src/projectile/projectile8.c b/src/projectile/fireProjectile.c similarity index 74% rename from src/projectile/projectile8.c rename to src/projectile/fireProjectile.c index 08a5a555..0e32bede 100644 --- a/src/projectile/projectile8.c +++ b/src/projectile/fireProjectile.c @@ -4,20 +4,20 @@ #include "functions.h" #include "audio.h" -extern void (*const gUnk_0812982C[])(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); -void Projectile8(Entity* this) { +extern void (*const FireProjectile_Actions[])(Entity*); + +void FireProjectile(Entity* this) { if (GetNextFunction(this) != 0) { DeleteThisEntity(); } - gUnk_0812982C[this->action](this); + FireProjectile_Actions[this->action](this); } -void sub_080A8BC0(Entity* this) { +void FireProjectile_Init(Entity* this) { if (this->type == 0) { this->action = 1; InitializeAnimation(this, this->direction >> 3); @@ -28,11 +28,9 @@ void sub_080A8BC0(Entity* this) { } } -void sub_080A8BF8(Entity* this) { +void FireProjectile_Action1(Entity* this) { u32 direction; - Entity* parent; - - parent = this->parent; + Entity* parent = this->parent; if (parent == NULL) { DeleteEntity(this); } else { @@ -53,7 +51,7 @@ void sub_080A8BF8(Entity* this) { } } -void sub_080A8C4C(Entity* this) { +void FireProjectile_Action2(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) != 0) { if (sub_080A7EB0(this) != 0) { @@ -68,9 +66,16 @@ void sub_080A8C4C(Entity* this) { } } -void sub_080A8C8C(Entity* this) { +void FireProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteEntity(this); } } + +void (*const FireProjectile_Actions[])(Entity*) = { + FireProjectile_Init, + FireProjectile_Action1, + FireProjectile_Action2, + FireProjectile_Action3, +}; diff --git a/src/projectile/projectileA.c b/src/projectile/gleerokProjectile.c similarity index 77% rename from src/projectile/projectileA.c rename to src/projectile/gleerokProjectile.c index 1699a1a5..287b0013 100644 --- a/src/projectile/projectileA.c +++ b/src/projectile/gleerokProjectile.c @@ -6,33 +6,31 @@ #include "random.h" #include "audio.h" -extern void (*const gUnk_08129954[])(Entity*); - -extern void (*const gUnk_08129968[])(Entity*); - -void sub_080A90D8(Entity*); - extern void sub_0806F5BC(Entity*, u32, u32); extern u32 sub_080041DC(Entity*, u32, u32); -extern s8 gUnk_08129978[]; -extern s8 gUnk_08129980[]; -extern s8 gUnk_08129988[]; +extern void (*const GleerokProjectile_Functions[])(Entity*); +extern void (*const GleerokProjectile_Actions[])(Entity*); +extern const s8 gUnk_08129978[]; +extern const s8 gUnk_08129980[]; +extern const s8 gUnk_08129988[]; -void ProjectileA(Entity* this) { - gUnk_08129954[GetNextFunction(this)](this); +void sub_080A90D8(Entity*); + +void GleerokProjectile(Entity* this) { + GleerokProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A8DDC(Entity* this) { +void GleerokProjectile_OnTick(Entity* this) { if (((this->type != 3) && ((this->bitfield & 0x80) != 0)) && ((this->bitfield & 0x7f) != 0x1e)) { this->action = 3; this->flags &= 0x7f; InitializeAnimation(this, 0x53); } - gUnk_08129968[this->action](this); + GleerokProjectile_Actions[this->action](this); } -void sub_080A8E28(Entity* this) { +void GleerokProjectile_Init(Entity* this) { u32 uVar1; s32 iVar2; @@ -88,7 +86,7 @@ void sub_080A8E28(Entity* this) { } } -void sub_080A8FB8(Entity* this) { +void GleerokProjectile_Action1(Entity* this) { if (this->type == 3) { if (sub_08003FC4(this, 0x1800) == 0) { sub_08008790(this, 7); @@ -115,7 +113,7 @@ void sub_080A8FB8(Entity* this) { } } -void sub_080A9058(Entity* this) { +void GleerokProjectile_Action2(Entity* this) { GetNextFrame(this); if (this->type == 2) { if (--this->actionDelay == 0xff) { @@ -135,7 +133,7 @@ void sub_080A9058(Entity* this) { } } -void sub_080A90BC(Entity* this) { +void GleerokProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteThisEntity(); @@ -153,3 +151,16 @@ void sub_080A90D8(Entity* this) { } } } + +void (*const GleerokProjectile_Functions[])(Entity*) = { + GleerokProjectile_OnTick, GleerokProjectile_OnTick, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const GleerokProjectile_Actions[])(Entity*) = { + GleerokProjectile_Init, + GleerokProjectile_Action1, + GleerokProjectile_Action2, + GleerokProjectile_Action3, +}; +const s8 gUnk_08129978[] = { 80, 0, 0, 80, -96, 0, 0, -96 }; +const s8 gUnk_08129980[] = { 0, 16, -16, 0, 16, -16, 16, -16 }; +const s8 gUnk_08129988[] = { 0, -16, -32, -48, -64, -80, -96, -112, 0, 16, 32, 48, 64, 80, 96, 112 }; diff --git a/src/projectile/projectileC.c b/src/projectile/guardLineOfSight.c similarity index 89% rename from src/projectile/projectileC.c rename to src/projectile/guardLineOfSight.c index 0e617ba8..9cbe3a22 100644 --- a/src/projectile/projectileC.c +++ b/src/projectile/guardLineOfSight.c @@ -3,13 +3,14 @@ #include "coord.h" #include "functions.h" -extern Hitbox gUnk_080FD1E4; extern u32 sub_080644C8(Entity*); -extern u8 gUnk_081299C8[]; extern bool32 sub_080AE4CC(Entity*, u32, u32, u32); extern Entity gUnk_02027EB4; +extern const Hitbox gUnk_080FD1E4; -void ProjectileC(Entity* this) { +extern const u8 gUnk_081299C8[]; + +void GuardLineOfSight(Entity* this) { Entity* entity; u8 tmp; @@ -48,7 +49,7 @@ void ProjectileC(Entity* this) { this->actionDelay = 0x12; this->spriteSettings.b.draw = 0; this->speed = 0x800; - this->hitbox = &gUnk_080FD1E4; + this->hitbox = (Hitbox*)&gUnk_080FD1E4; InitializeAnimation(this, 0); } if (this->bitfield == 0x80) { @@ -66,3 +67,7 @@ void ProjectileC(Entity* this) { } } } + +const u8 gUnk_081299C8[] = { + 0, 254, 0, 254, 0, 2, 0, 2, +}; diff --git a/src/projectile/projectile17.c b/src/projectile/guruguruBarProjectile.c similarity index 92% rename from src/projectile/projectile17.c rename to src/projectile/guruguruBarProjectile.c index 47a0cb1b..de504cf5 100644 --- a/src/projectile/projectile17.c +++ b/src/projectile/guruguruBarProjectile.c @@ -5,7 +5,7 @@ void sub_080AABB0(Entity*); -void Projectile17(Entity* this) { +void GuruguruBarProjectile(Entity* this) { if (this->action == 0) { this->action = 1; InitializeAnimation(this, 0); diff --git a/src/projectile/projectile23.c b/src/projectile/gyorgMaleEnergyProjectile.c similarity index 52% rename from src/projectile/projectile23.c rename to src/projectile/gyorgMaleEnergyProjectile.c index ae9edb41..56ff4307 100644 --- a/src/projectile/projectile23.c +++ b/src/projectile/gyorgMaleEnergyProjectile.c @@ -4,35 +4,34 @@ #include "player.h" #include "audio.h" -extern void (*const gUnk_0812A9D8[])(Entity*); - -extern void (*const gUnk_0812A9EC[])(Entity*); - -void sub_080AC954(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); -void Projectile23(Entity* this) { - gUnk_0812A9D8[GetNextFunction(this)](this); +extern void (*const GyorgMaleEnergyProjectile_Functions[])(Entity*); +extern void (*const GyorgMaleEnergyProjectile_Actions[])(Entity*); + +void GyorgMaleEnergyProjectile_Action1(Entity*); + +void GyorgMaleEnergyProjectile(Entity* this) { + GyorgMaleEnergyProjectile_Functions[GetNextFunction(this)](this); } -void sub_080AC8C4(Entity* this) { - gUnk_0812A9EC[this->action](this); +void GyorgMaleEnergyProjectile_OnTick(Entity* this) { + GyorgMaleEnergyProjectile_Actions[this->action](this); } -ASM_FUNC("asm/non_matching/projectile23/sub_080AC8DC.inc", void sub_080AC8DC(Entity* this)) +ASM_FUNC("asm/non_matching/gyorgMaleEnergyProjectile/sub_080AC8DC.inc", void sub_080AC8DC(Entity* this)) -void sub_080AC928(Entity* this) { +void GyorgMaleEnergyProjectile_Init(Entity* this) { this->action = 1; this->actionDelay = 0x3c; this->collisionLayer = 2; UpdateSpriteForCollisionLayer(this); InitializeAnimation(this, 0); - sub_080AC954(this); + GyorgMaleEnergyProjectile_Action1(this); } -void sub_080AC954(Entity* this) { +void GyorgMaleEnergyProjectile_Action1(Entity* this) { u32 animationState; if (this->parent->next == NULL) { @@ -50,7 +49,7 @@ void sub_080AC954(Entity* this) { } } -void sub_080AC9CC(Entity* this) { +void GyorgMaleEnergyProjectile_Action2(Entity* this) { sub_080AF090(this); GetNextFrame(this); if (sub_080A7EB0(this) != 0) { @@ -64,10 +63,20 @@ void sub_080AC9CC(Entity* this) { } } -void sub_080ACA14(Entity* this) { +void GyorgMaleEnergyProjectile_Action3(Entity* this) { sub_080AF090(this); GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteThisEntity(); } } + +void (*const GyorgMaleEnergyProjectile_Functions[])(Entity*) = { + GyorgMaleEnergyProjectile_OnTick, sub_080AC8DC, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const GyorgMaleEnergyProjectile_Actions[])(Entity*) = { + GyorgMaleEnergyProjectile_Init, + GyorgMaleEnergyProjectile_Action1, + GyorgMaleEnergyProjectile_Action2, + GyorgMaleEnergyProjectile_Action3, +}; diff --git a/src/projectile/projectile22.c b/src/projectile/gyorgTail.c similarity index 83% rename from src/projectile/projectile22.c rename to src/projectile/gyorgTail.c index 9da1e83c..d75a8123 100644 --- a/src/projectile/projectile22.c +++ b/src/projectile/gyorgTail.c @@ -4,27 +4,25 @@ #include "audio.h" #include "functions.h" -extern void (*const gUnk_0812A9A8[])(Entity*); - -extern u16 gUnk_0812A9B4[]; -bool32 sub_080AC5E4(Entity*); -void sub_080AC388(Entity*); - -extern u8 gUnk_0812A9BA[]; +extern u8 gEntCount; extern Hitbox gUnk_080FD458; - extern Hitbox gUnk_080FD168; extern Hitbox gUnk_080FD448; extern void (*const gUnk_0812A994[])(Entity*); +extern void (*const GyorgTail_Actions[])(Entity*); +extern const s16 gUnk_0812A9B4[]; +extern const u8 gUnk_0812A9B8[]; +extern const u8 gUnk_0812A9BA[]; +extern const u8 gUnk_0812A9C0[]; +bool32 sub_080AC5E4(Entity*); +void sub_080AC388(Entity*); void sub_080AC6F0(Entity*); void sub_080AC760(Entity*); void sub_080AC7C4(Entity*); -extern u8 gEntCount; - -void Projectile22(Entity* this) { +void GyorgTail(Entity* this) { Entity* parent; if (this->parent->next == NULL) { @@ -50,10 +48,10 @@ void Projectile22(Entity* this) { } void sub_080AC328(Entity* this) { - gUnk_0812A9A8[this->action](this); + GyorgTail_Actions[this->action](this); } -void sub_080AC340(Entity* this) { +void GyorgTail_Init(Entity* this) { if (sub_080AC5E4(this) != 0) { this->action = 1; this->frameIndex = 0xc; @@ -64,7 +62,7 @@ void sub_080AC340(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile22/sub_080AC388.inc", void sub_080AC388(Entity* this)) +ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC388.inc", void sub_080AC388(Entity* this)) void sub_080AC480(Entity* this) { if (this->actionDelay != 0) { @@ -126,7 +124,7 @@ void sub_080AC560(Entity* this) { this->y.WORD = entity->y.WORD - gSineTable[entity->direction + 0x40] * factor; } -NONMATCH("asm/non_matching/projectile22/sub_080AC5E4.inc", bool32 sub_080AC5E4(Entity* this)) { +NONMATCH("asm/non_matching/gyorgTail/sub_080AC5E4.inc", bool32 sub_080AC5E4(Entity* this)) { // TODO regalloc Entity* entity; Entity* entity2; @@ -189,11 +187,11 @@ NONMATCH("asm/non_matching/projectile22/sub_080AC5E4.inc", bool32 sub_080AC5E4(E } END_NONMATCH -ASM_FUNC("asm/non_matching/projectile22/sub_080AC6F0.inc", void sub_080AC6F0(Entity* this)) +ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC6F0.inc", void sub_080AC6F0(Entity* this)) -ASM_FUNC("asm/non_matching/projectile22/sub_080AC760.inc", void sub_080AC760(Entity* this)) +ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC760.inc", void sub_080AC760(Entity* this)) -NONMATCH("asm/non_matching/projectile22/sub_080AC7C4.inc", void sub_080AC7C4(Entity* this)) { +NONMATCH("asm/non_matching/gyorgTail/sub_080AC7C4.inc", void sub_080AC7C4(Entity* this)) { // TODO regalloc Entity* entity1; Entity* entity2; @@ -227,3 +225,16 @@ void sub_080AC884(Entity* this) { this->field_0xf = 0x56; } } + +void (*const gUnk_0812A994[])(Entity*) = { + sub_080AC328, sub_080AC510, sub_080AC510, sub_080AC510, sub_080AC560, +}; +void (*const GyorgTail_Actions[])(Entity*) = { + GyorgTail_Init, + sub_080AC388, + sub_080AC480, +}; +const s16 gUnk_0812A9B4[] = { -64, 64 }; +const u8 gUnk_0812A9B8[] = { 24, 20 }; +const u8 gUnk_0812A9BA[] = { 24, 25, 25, 24, 24, 24 }; +const u8 gUnk_0812A9C0[] = { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; diff --git a/src/projectile/projectile9.c b/src/projectile/iceProjectile.c similarity index 77% rename from src/projectile/projectile9.c rename to src/projectile/iceProjectile.c index dfb8e213..0cd93e21 100644 --- a/src/projectile/projectile9.c +++ b/src/projectile/iceProjectile.c @@ -4,20 +4,20 @@ #include "functions.h" #include "audio.h" -extern void (*const gUnk_081298B8[])(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); -void Projectile9(Entity* this) { +extern void (*const IceProjectile_Actions[])(Entity*); + +void IceProjectile(Entity* this) { if (GetNextFunction(this) != 0) { DeleteThisEntity(); } - gUnk_081298B8[this->action](this); + IceProjectile_Actions[this->action](this); } -void sub_080A8CD4(Entity* this) { +void IceProjectile_Init(Entity* this) { if (this->type == 0) { this->action = 1; InitializeAnimation(this, this->direction >> 3); @@ -28,7 +28,7 @@ void sub_080A8CD4(Entity* this) { } } -void sub_080A8D0C(Entity* this) { +void IceProjectile_Action1(Entity* this) { u32 direction; Entity* parent; @@ -53,7 +53,7 @@ void sub_080A8D0C(Entity* this) { } } -void sub_080A8D60(Entity* this) { +void IceProjectile_Action2(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) != 0) { if (sub_080A7EB0(this) != 0) { @@ -68,9 +68,16 @@ void sub_080A8D60(Entity* this) { } } -void sub_080A8DA0(Entity* this) { +void IceProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteEntity(this); } } + +void (*const IceProjectile_Actions[])(Entity*) = { + IceProjectile_Init, + IceProjectile_Action1, + IceProjectile_Action2, + IceProjectile_Action3, +}; diff --git a/src/projectile/keatonDagger.c b/src/projectile/keatonDagger.c new file mode 100644 index 00000000..b7a876e0 --- /dev/null +++ b/src/projectile/keatonDagger.c @@ -0,0 +1,45 @@ +#include "entity.h" +#include "player.h" +#include "coord.h" + +extern void sub_0803C0AC(Entity*); + +extern const Hitbox* const gUnk_08129998[]; + +void KeatonDagger(Entity* this) { + Entity* parent; + + if (this->action == 0) { + this->action = 1; + } + parent = this->parent; + if (((parent == NULL) || (parent->currentHealth == 0)) || (parent->next == NULL)) { + if (((this->bitfield & 0x80) != 0) && (this->field_0x4c == &gPlayerEntity)) { + sub_0803C0AC(this); + } + DeleteEntity(this); + } else { + this->hitbox = (Hitbox*)gUnk_08129998[parent->animationState]; + CopyPosition(parent, this); + if ((parent->iframes != 0) && (this->iframes == 0)) { + this->iframes = 0xff; + } + } +} + +extern const Hitbox gUnk_081299A8; +extern const Hitbox gUnk_081299B0; +extern const Hitbox gUnk_081299B8; +extern const Hitbox gUnk_081299C0; + +const Hitbox* const gUnk_08129998[] = { + &gUnk_081299A8, + &gUnk_081299B0, + &gUnk_081299B8, + &gUnk_081299C0, +}; + +const Hitbox gUnk_081299A8 = { 4, -16, { 0, 0, 0, 0 }, 2, 3 }; +const Hitbox gUnk_081299B0 = { 9, -2, { 0, 0, 0, 0 }, 3, 2 }; +const Hitbox gUnk_081299B8 = { -4, 1, { 0, 0, 0, 0 }, 2, 3 }; +const Hitbox gUnk_081299C0 = { -9, -2, { 0, 0, 0, 0 }, 3, 3 }; diff --git a/src/projectile/lakituCloudProjectile.c b/src/projectile/lakituCloudProjectile.c new file mode 100644 index 00000000..76ac9ea5 --- /dev/null +++ b/src/projectile/lakituCloudProjectile.c @@ -0,0 +1,77 @@ +#include "entity.h" +#include "enemy.h" +#include "functions.h" +#include "player.h" + +extern void sub_0800449C(Entity*, u32); +extern void sub_08079D84(void); + +extern void (*const LakituCloudProjectile_Functions[])(Entity*); +extern void (*const LakituCloudProjectile_Actions[])(Entity*); +extern void (*const LakituCloudProjectile_SubActions[])(Entity*); + +void LakituCloudProjectile(Entity* this) { + if (this->parent->next == NULL) { + DeleteThisEntity(); + } + LakituCloudProjectile_Functions[GetNextFunction(this)](this); +} + +void LakituCloudProjectile_OnTick(Entity* this) { + LakituCloudProjectile_Actions[this->action](this); +} + +void nullsub_539(Entity* this) { +} + +void sub_080A9CF0(Entity* this) { + if (sub_0806F520() == 0) { + CreateFx(this, 2, 0); + DeleteThisEntity(); + } + LakituCloudProjectile_SubActions[this->subAction](this); +} + +void LakituCloudProjectile_SubAction0(Entity* this) { + this->subAction = 2; +} + +void LakituCloudProjectile_SubAction1(Entity* this) { +} + +void LakituCloudProjectile_SubAction2(Entity* this) { + if (sub_0806F3E4(this) != 0) { + if (this->damageType == 0xa6) { + ModHealth(-2); + sub_0800449C(&gPlayerEntity, 0x7a); + sub_08079D84(); + } + CreateFx(this, 2, 0); + DeleteThisEntity(); + } +} + +void LakituCloudProjectile_Init(Entity* this) { + this->action = 1; + this->animationState = this->parent->animationState; + InitAnimationForceUpdate(this, this->animationState); +} + +void LakituCloudProjectile_Action1(Entity* this) { + PositionRelative(this->parent, this, 0, -0x10000); + this->height.HALF.HI = 0xfffe; + UpdateAnimationSingleFrame(this); +} + +void (*const LakituCloudProjectile_Functions[])(Entity*) = { + LakituCloudProjectile_OnTick, nullsub_539, DeleteEntity, DeleteEntity, DeleteEntity, sub_080A9CF0, +}; +void (*const LakituCloudProjectile_Actions[])(Entity*) = { + LakituCloudProjectile_Init, + LakituCloudProjectile_Action1, +}; +void (*const LakituCloudProjectile_SubActions[])(Entity*) = { + LakituCloudProjectile_SubAction0, + LakituCloudProjectile_SubAction1, + LakituCloudProjectile_SubAction2, +}; diff --git a/src/projectile/lakituLightning.c b/src/projectile/lakituLightning.c new file mode 100644 index 00000000..8d055ba6 --- /dev/null +++ b/src/projectile/lakituLightning.c @@ -0,0 +1,52 @@ +#include "entity.h" +#include "enemy.h" + +extern s32 sub_080AF090(Entity*); +extern s32 sub_080A7EB0(Entity*); + +extern void (*const LakituLightning_Functions[])(Entity*); +extern void (*const LakituLightning_Actions[])(Entity*); + +void LakituLightning_OnTick(Entity*); + +void LakituLightning(Entity* this) { + LakituLightning_Functions[GetNextFunction(this)](this); +} + +void LakituLightning_OnTick(Entity* this) { + LakituLightning_Actions[this->action](this); +} + +void sub_080A9DD8(Entity* this) { + if ((this->currentHealth == 0) || (this->bitfield == 0x80)) { + DeleteThisEntity(); + } + LakituLightning_OnTick(this); +} + +void LakituLightning_Init(Entity* this) { + this->action = 1; + this->actionDelay = 0xb4; + this->currentHealth = 1; + InitializeAnimation(this, 0); +} + +void LakituLightning_Action1(Entity* this) { + GetNextFrame(this); + sub_080AF090(this); + if ((this->collisions != 0) || (--this->actionDelay == 0)) { + CreateFx(this, 0x4f, 0); + DeleteThisEntity(); + } + if (sub_080A7EB0(this) != 0) { + DeleteThisEntity(); + } +} + +void (*const LakituLightning_Functions[])(Entity*) = { + LakituLightning_OnTick, sub_080A9DD8, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const LakituLightning_Actions[])(Entity*) = { + LakituLightning_Init, + LakituLightning_Action1, +}; diff --git a/src/projectile/projectile13.c b/src/projectile/mandiblesProjectile.c similarity index 78% rename from src/projectile/projectile13.c rename to src/projectile/mandiblesProjectile.c index fc8e06a2..0ab5c3ad 100644 --- a/src/projectile/projectile13.c +++ b/src/projectile/mandiblesProjectile.c @@ -6,51 +6,42 @@ #include "random.h" #include "game.h" -extern void (*const gUnk_08129C7C[])(Entity*); +extern Entity* sub_08049DF4(u32); +extern u32 sub_08049F1C(Entity*, Entity*, u32); +extern s32 sub_080AF090(Entity*); +extern u32 sub_0806F824(Entity*, Entity*, u32, u32); +extern Hitbox gUnk_080FD150; + +extern void (*const MandiblesProjectile_Functions[])(Entity*); +extern void (*const MandiblesProjectile_Actions[])(Entity*); +extern const u8 gUnk_08129CA4[]; +extern const Hitbox* const gUnk_08129CF4[]; +extern const u8 gUnk_08129CAC[]; +extern const s8 gUnk_08129D14[]; -extern void (*const gUnk_08129C90[])(Entity*); void sub_080AA1D8(Entity*); - void sub_080AA270(Entity*); - bool32 sub_080AA2E0(Entity*); void sub_080AA320(Entity*); - void sub_080AA3E0(Entity*, u32); bool32 sub_080AA374(Entity*); -extern u8 gUnk_08129CA4[]; -extern Hitbox* gUnk_08129CF4[]; -extern u8 gUnk_08129CAC[]; - -extern Entity* sub_08049DF4(u32); -extern u32 sub_08049F1C(Entity*, Entity*, u32); - -extern s32 sub_080AF090(Entity*); - -extern Hitbox gUnk_080FD150; - -extern s8 gUnk_08129D14[]; -extern u32 sub_0806F824(Entity*, Entity*, u32, u32); - -void Projectile13(Entity* this) { - Entity* entity; - - entity = this->attachedEntity; +void MandiblesProjectile(Entity* this) { + Entity* entity = this->attachedEntity; if (entity == NULL) { entity = this->parent; } if ((entity->field_0x43 == 0) && ((this->flags & 0x80) == 0)) { this->flags |= 0x80; } - gUnk_08129C7C[GetNextFunction(this)](this); + MandiblesProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A9E94(Entity* this) { +void MandiblesProjectile_OnTick(Entity* this) { if (this->action < 3) { sub_080AA1D8(this); } - gUnk_08129C90[this->action](this); + MandiblesProjectile_Actions[this->action](this); } void sub_080A9EBC(Entity* this) { @@ -86,7 +77,7 @@ void sub_080A9EBC(Entity* this) { } } -void sub_080A9F50(Entity* this) { +void MandiblesProjectile_Init(Entity* this) { this->action = 1; this->field_0x80.HWORD = 0; this->animationState = 0xff; @@ -96,7 +87,7 @@ void sub_080A9F50(Entity* this) { sub_080AA270(this); } -void sub_080A9F90(Entity* this) { +void MandiblesProjectile_Action1(Entity* this) { if (this->field_0x80.HWORD != 0) { this->field_0x80.HWORD -= 1; } else { @@ -111,7 +102,7 @@ void sub_080A9F90(Entity* this) { UpdateAnimationSingleFrame(this); } -void sub_080A9FD0(Entity* this) { +void MandiblesProjectile_Action2(Entity* this) { UpdateAnimationSingleFrame(this); if ((this->frames.all & 0x40) != 0) { this->frames.all &= 0xbf; @@ -124,9 +115,9 @@ void sub_080A9FD0(Entity* this) { } #ifdef EU -ASM_FUNC("asm/non_matching/eu/sub_080AA044.inc", void sub_080AA044(Entity* this)) +ASM_FUNC("asm/non_matching/eu/MandiblesProjectile_Action3.inc", void MandiblesProjectile_Action3(Entity* this)) #else -void sub_080AA044(Entity* this) { +void MandiblesProjectile_Action3(Entity* this) { u32 uVar1; s8* tmp; Entity* entity; @@ -168,7 +159,7 @@ void sub_080AA044(Entity* this) { } #endif -void sub_080AA110(Entity* this) { +void MandiblesProjectile_Action4(Entity* this) { s32 iVar1; u32 uVar2; Entity* entity; @@ -254,13 +245,13 @@ void sub_080AA270(Entity* this) { animationState = parent->animationState; if (this->animationState == 0xff) { this->animationState = animationState; - this->hitbox = gUnk_08129CF4[animationState]; + this->hitbox = (Hitbox*)gUnk_08129CF4[animationState]; sub_080AA3E0(this, 0); } else { animationState = (gUnk_08129CAC[Random() & 7] + animationState) & 7; if (animationState != this->animationState) { this->animationState = animationState; - this->hitbox = gUnk_08129CF4[animationState]; + this->hitbox = (Hitbox*)gUnk_08129CF4[animationState]; sub_080AA3E0(this, 0); } } @@ -286,7 +277,7 @@ bool32 sub_080AA2E0(Entity* this) { return TRUE; } -NONMATCH("asm/non_matching/projectile13/sub_080AA320.inc", void sub_080AA320(Entity* this)) { +NONMATCH("asm/non_matching/mandiblesProjectile/sub_080AA320.inc", void sub_080AA320(Entity* this)) { u32 uVar2; Entity* parent; @@ -308,7 +299,7 @@ NONMATCH("asm/non_matching/projectile13/sub_080AA320.inc", void sub_080AA320(Ent } END_NONMATCH -NONMATCH("asm/non_matching/projectile13/sub_080AA374.inc", bool32 sub_080AA374(Entity* this)) { +NONMATCH("asm/non_matching/mandiblesProjectile/sub_080AA374.inc", bool32 sub_080AA374(Entity* this)) { u32 uVar1; u32 animationState; Entity* entity; @@ -340,3 +331,28 @@ void sub_080AA3E0(Entity* this, u32 param) { } InitAnimationForceUpdate(this, tmp); } + +void (*const MandiblesProjectile_Functions[])(Entity*) = { + MandiblesProjectile_OnTick, sub_080A9EBC, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const MandiblesProjectile_Actions[])(Entity*) = { + MandiblesProjectile_Init, MandiblesProjectile_Action1, MandiblesProjectile_Action2, + MandiblesProjectile_Action3, MandiblesProjectile_Action4, +}; +const u8 gUnk_08129CA4[] = { 24, 36, 52, 32, 60, 28, 44, 40 }; +const u8 gUnk_08129CAC[] = { + 1, 0, 7, 1, 0, 7, 0, 0, +}; +const Hitbox gUnk_08129CB4 = { 0, -4, { 5, 5, 3, 7 }, 6, 8 }; +const Hitbox gUnk_08129CBC = { 3, -3, { 5, 3, 3, 5 }, 6, 6 }; +const Hitbox gUnk_08129CC4 = { 4, 0, { 7, 3, 5, 5 }, 8, 6 }; +const Hitbox gUnk_08129CCC = { 3, 3, { 5, 3, 3, 5 }, 6, 6 }; +const Hitbox gUnk_08129CD4 = { 0, 4, { 5, 5, 3, 7 }, 6, 8 }; +const Hitbox gUnk_08129CDC = { -3, 3, { 5, 3, 3, 5 }, 6, 6 }; +const Hitbox gUnk_08129CE4 = { -4, 0, { 7, 3, 5, 5 }, 8, 6 }; +const Hitbox gUnk_08129CEC = { -3, -3, { 5, 3, 3, 5 }, 6, 6 }; +const Hitbox* const gUnk_08129CF4[] = { + &gUnk_08129CB4, &gUnk_08129CBC, &gUnk_08129CC4, &gUnk_08129CCC, + &gUnk_08129CD4, &gUnk_08129CDC, &gUnk_08129CE4, &gUnk_08129CEC, +}; +const s8 gUnk_08129D14[] = { 0, -16, 6, -10, 0, 4, -6, -10 }; diff --git a/src/projectile/projectileE.c b/src/projectile/mazaalEnergyBeam.c similarity index 66% rename from src/projectile/projectileE.c rename to src/projectile/mazaalEnergyBeam.c index cc5745e5..4fe557b0 100644 --- a/src/projectile/projectileE.c +++ b/src/projectile/mazaalEnergyBeam.c @@ -2,13 +2,13 @@ #include "audio.h" #include "coord.h" -extern void (*const gUnk_08129A64[])(Entity*); +extern void (*const MazaalEnergyBeam_Actions[])(Entity*); -void ProjectileE(Entity* this) { - gUnk_08129A64[this->action](this); +void MazaalEnergyBeam(Entity* this) { + MazaalEnergyBeam_Actions[this->action](this); } -void sub_080A9518(Entity* this) { +void MazaalEnergyBeam_Init(Entity* this) { this->action = 1; this->actionDelay = 10; this->height.HALF.HI -= 2; @@ -17,7 +17,7 @@ void sub_080A9518(Entity* this) { SoundReq(SFX_149); } -void sub_080A9540(Entity* this) { +void MazaalEnergyBeam_Action1(Entity* this) { const s16* tmp; if (--this->actionDelay == 0) { @@ -38,9 +38,15 @@ void sub_080A9540(Entity* this) { } } -void sub_080A95BC(Entity* this) { +void MazaalEnergyBeam_Action2(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteEntity(this); } } + +void (*const MazaalEnergyBeam_Actions[])(Entity*) = { + MazaalEnergyBeam_Init, + MazaalEnergyBeam_Action1, + MazaalEnergyBeam_Action2, +}; diff --git a/src/projectile/projectile3.c b/src/projectile/moblinSpear.c similarity index 50% rename from src/projectile/projectile3.c rename to src/projectile/moblinSpear.c index b1f86734..a4123e20 100644 --- a/src/projectile/projectile3.c +++ b/src/projectile/moblinSpear.c @@ -1,27 +1,25 @@ #include "entity.h" #include "enemy.h" -extern void (*const gUnk_08129650[])(Entity*); - -extern void (*const gUnk_08129664[])(Entity*); - extern bool32 AllocMutableHitbox(Entity*); - typedef struct { - u8 offsetX; - u8 offsetY; + s8 offsetX; + s8 offsetY; u8 width; u8 height; -} Test; +} HitboxChange; -extern Test gUnk_0812966C[]; +extern void (*const MoblinSpear_Functions[])(Entity*); +extern void (*const MoblinSpear_Actions[])(Entity*); -void Projectile3(Entity* this) { - gUnk_08129650[GetNextFunction(this)](this); +extern const HitboxChange gUnk_0812966C[]; + +void MoblinSpear(Entity* this) { + MoblinSpear_Functions[GetNextFunction(this)](this); } -void sub_080A8314(Entity* this) { - gUnk_08129664[this->action](this); +void MoblinSpear_OnTick(Entity* this) { + MoblinSpear_Actions[this->action](this); } void sub_080A832C(Entity* this) { @@ -45,17 +43,17 @@ void sub_080A832C(Entity* this) { this->field_0x42 = 0; } -void sub_080A83A0(Entity* this) { +void MoblinSpear_Init(Entity* this) { if (AllocMutableHitbox(this) != 0) { this->action = 1; } } -NONMATCH("asm/non_matching/projectile3/sub_080A83B4.inc", void sub_080A83B4(Entity* this)) { +NONMATCH("asm/non_matching/moblinSpear/MoblinSpear_Action1.inc", void MoblinSpear_Action1(Entity* this)) { u8 frames; Entity* parent; u32 tmp; - Test* a; + const HitboxChange* a; parent = this->parent; if (parent == NULL) { @@ -67,7 +65,7 @@ NONMATCH("asm/non_matching/projectile3/sub_080A83B4.inc", void sub_080A83B4(Enti frames = parent->frames.all * 4; a = &gUnk_0812966C[frames / 4]; this->hitbox->offset_x = a->offsetX; - // TODO offset used to increate a pointer is already increated here? + // TODO offset used to increase a pointer is already increated here? if (parent->frameSpriteSettings == 0x40) { this->hitbox->offset_x = -this->hitbox->offset_x; } @@ -85,3 +83,20 @@ NONMATCH("asm/non_matching/projectile3/sub_080A83B4.inc", void sub_080A83B4(Enti } } END_NONMATCH + +void (*const MoblinSpear_Functions[])(Entity*) = { + MoblinSpear_OnTick, sub_080A832C, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const MoblinSpear_Actions[])(Entity*) = { + MoblinSpear_Init, + MoblinSpear_Action1, +}; + +const HitboxChange gUnk_0812966C[] = { + { 6, 11, 2, 4 }, { -12, 2, 3, 3 }, { -13, -15, 1, 2 }, { 5, 12, 1, 3 }, { 7, 10, 1, 2 }, { 8, 9, 1, 3 }, + { 7, 10, 1, 2 }, { -22, 1, 4, 2 }, { -12, 1, 3, 2 }, { -6, 2, 4, 2 }, { -12, 1, 3, 2 }, { -1, -19, 1, 1 }, + { -4, -19, 1, 1 }, { -4, -20, 1, 1 }, { -4, -19, 1, 1 }, { 6, 9, 1, 2 }, { 6, 10, 1, 2 }, { 6, 9, 1, 2 }, + { 6, 10, 1, 2 }, { -29, -11, 3, 2 }, { -29, -9, 3, 2 }, { -29, -11, 3, 2 }, { -29, -9, 3, 2 }, { -5, -25, 1, 2 }, + { -5, -24, 1, 2 }, { -5, -25, 1, 2 }, { -5, -24, 1, 2 }, { 7, 12, 1, 2 }, { 7, 11, 1, 2 }, { -12, 3, 3, 1 }, + { -12, 2, 3, 1 }, { -13, -16, 1, 2 }, { -13, -15, 1, 2 }, +}; diff --git a/src/projectile/projectileF.c b/src/projectile/octorokBossProjectile.c similarity index 81% rename from src/projectile/projectileF.c rename to src/projectile/octorokBossProjectile.c index a69eddc0..e927283e 100644 --- a/src/projectile/projectileF.c +++ b/src/projectile/octorokBossProjectile.c @@ -4,25 +4,23 @@ #include "functions.h" #include "audio.h" -extern void (*const gUnk_08129ABC[])(Entity*); - -extern void (*const gUnk_08129AD0[])(Entity*); - -void sub_080A99F0(Entity*); +void OctorokBossProjectile_Action2(Entity*); extern void sub_080AE58C(Entity*, u32, u32); extern u32 sub_0806FC80(Entity*, Entity*, s32); -extern u8 gUnk_08129ADC[]; +extern void (*const OctorokBossProjectile_Functions[])(Entity*); +extern void (*const OctorokBossProjectile_Actions[])(Entity*); +extern const u8 gUnk_08129ADC[]; -void ProjectileF(Entity* this) { - gUnk_08129ABC[GetNextFunction(this)](this); +void OctorokBossProjectile(Entity* this) { + OctorokBossProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A95F8(Entity* this) { - gUnk_08129AD0[this->action](this); +void OctorokBossProjectile_OnTick(Entity* this) { + OctorokBossProjectile_Actions[this->action](this); } -void sub_080A9610(Entity* this) { +void OctorokBossProjectile_Init(Entity* this) { u32 uVar1; u32 uVar2; @@ -74,7 +72,7 @@ void sub_080A9610(Entity* this) { SoundReq(SFX_1B5); } -void sub_080A976C(Entity* this) { +void OctorokBossProjectile_Action1(Entity* this) { u32 index; switch (this->type) { @@ -84,7 +82,7 @@ void sub_080A976C(Entity* this) { } if ((this->type2 == 0) && ((this->bitfield & 0x80) != 0)) { if ((this->bitfield & 0x7f) == 0) { - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); } this->direction = this->field_0x3e << 3; this->speed = 0x400; @@ -105,7 +103,7 @@ void sub_080A976C(Entity* this) { this->parent->field_0x3e = this->direction >> 3; } SoundReq(SFX_BOSS_HIT); - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); } } UpdateAnimationSingleFrame(this); @@ -140,11 +138,11 @@ void sub_080A976C(Entity* this) { CopyPosition(this, this->attachedEntity); } } - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); break; case 1: if (this->parent->action == 2) { - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); } GetNextFrame(this); if (sub_08003FC4(this, 0x1800) != 0) { @@ -152,7 +150,7 @@ void sub_080A976C(Entity* this) { if (this->collisions == 0) { sub_0806F62C(this, (s32)this->speed, (u32)this->direction); } else { - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); } } if (*(u32*)&this->field_0x78 < 0x1e) { @@ -163,12 +161,12 @@ void sub_080A976C(Entity* this) { } } if (--*(u32*)&this->field_0x78 == -1) { - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); } if ((this->bitfield & 0x80) == 0) { return; } - sub_080A99F0(this); + OctorokBossProjectile_Action2(this); break; case 2: GetNextFrame(this); @@ -191,7 +189,22 @@ void sub_080A976C(Entity* this) { } } -void sub_080A99F0(Entity* this) { +void OctorokBossProjectile_Action2(Entity* this) { CreateFx(this, 4, 0); DeleteThisEntity(); } + +void (*const OctorokBossProjectile_Functions[])(Entity*) = { + OctorokBossProjectile_OnTick, OctorokBossProjectile_OnTick, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const OctorokBossProjectile_Actions[])(Entity*) = { + OctorokBossProjectile_Init, + OctorokBossProjectile_Action1, + OctorokBossProjectile_Action2, +}; +const u8 gUnk_08129ADC[] = { + 0, + 224, + 32, + 0, +}; diff --git a/src/projectile/projectile0.c b/src/projectile/projectile0.c deleted file mode 100644 index 644d9686..00000000 --- a/src/projectile/projectile0.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "entity.h" -#include "player.h" -#include "coord.h" - -void sub_080A7F80(Entity*); -void sub_080A7F9C(Entity*); - -extern u8 gUnk_081293B8[]; - -extern void (*const gUnk_081293CC[])(Entity*); - -extern Hitbox** gUnk_081293E0[]; - -extern Hitbox* gUnk_081293F0[]; - -extern Hitbox* gUnk_08129400[]; -extern Hitbox* gUnk_08129410[]; - -extern Hitbox* gUnk_08129420[]; - -void Projectile0(Entity* this) { - if (this->action == 0) { - this->action = 1; - sub_080A7F80(this); - if (this->type == 3) { - InitAnimationForceUpdate(this, this->parent->animationState + 0x18); - } - } - if ((this->parent == NULL) || (this->parent->currentHealth == 0)) { - DeleteThisEntity(); - } - if (((this->bitfield & 0x80) != 0) && (this->field_0x4c == &gPlayerEntity)) { - this->iframes = -0x2d; - } - this->bitfield = 0; - CopyPositionAndSpriteOffset(this->parent, this); - sub_080A7F9C(this); - if (this->type == 3) { - this->y.HALF.HI += 1; - UpdateAnimationSingleFrame(this); - } -} - -void sub_080A7F80(Entity* this) { - this->damageType = gUnk_081293B8[this->parent->type + this->type * 4]; -} - -void sub_080A7F9C(Entity* this) { - gUnk_081293CC[this->type](this); -} - -void sub_080A7FB4(Entity* this) { - Entity* parent = this->parent; - this->hitbox = gUnk_081293E0[parent->animationState][(parent->frames.all & 0xf) - 1]; -} - -void sub_080A7FD8(Entity* this) { - Entity* parent = this->parent; - this->hitbox = gUnk_081293F0[parent->animationState]; -} - -void sub_080A7FEC(Entity* this) { - if ((this->parent->frames.all & 0x10) != 0) { - this->hitbox = gUnk_08129410[this->parent->animationState]; - } else { - this->hitbox = gUnk_08129400[this->parent->animationState]; - } -} - -void sub_080A801C(Entity* this) { - Entity* parent = this->parent; - this->hitbox = gUnk_08129420[parent->animationState]; -} diff --git a/src/projectile/projectile11.c b/src/projectile/projectile11.c deleted file mode 100644 index a3b62c6e..00000000 --- a/src/projectile/projectile11.c +++ /dev/null @@ -1,66 +0,0 @@ -#include "entity.h" -#include "enemy.h" -#include "functions.h" -#include "player.h" - -extern void (*const gUnk_08129B58[])(Entity*); - -extern void (*const gUnk_08129B70[])(Entity*); - -extern void (*const gUnk_08129B78[])(Entity*); - -extern void sub_0800449C(Entity*, u32); -extern void sub_08079D84(void); - -void Projectile11(Entity* this) { - if (this->parent->next == NULL) { - DeleteThisEntity(); - } - gUnk_08129B58[GetNextFunction(this)](this); -} - -void sub_080A9CD4(Entity* this) { - gUnk_08129B70[this->action](this); -} - -void nullsub_539(Entity* this) { -} - -void sub_080A9CF0(Entity* this) { - if (sub_0806F520() == 0) { - CreateFx(this, 2, 0); - DeleteThisEntity(); - } - gUnk_08129B78[this->subAction](this); -} - -void sub_080A9D20(Entity* this) { - this->subAction = 2; -} - -void nullsub_540(Entity* this) { -} - -void sub_080A9D2C(Entity* this) { - if (sub_0806F3E4(this) != 0) { - if (this->damageType == 0xa6) { - ModHealth(-2); - sub_0800449C(&gPlayerEntity, 0x7a); - sub_08079D84(); - } - CreateFx(this, 2, 0); - DeleteThisEntity(); - } -} - -void sub_080A9D6C(Entity* this) { - this->action = 1; - this->animationState = this->parent->animationState; - InitAnimationForceUpdate(this, this->animationState); -} - -void sub_080A9D80(Entity* this) { - PositionRelative(this->parent, this, 0, -0x10000); - this->height.HALF.HI = 0xfffe; - UpdateAnimationSingleFrame(this); -} diff --git a/src/projectile/projectile12.c b/src/projectile/projectile12.c deleted file mode 100644 index 98c2d546..00000000 --- a/src/projectile/projectile12.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "entity.h" -#include "enemy.h" - -extern void (*const gUnk_08129BEC[])(Entity*); - -extern void (*const gUnk_08129C00[])(Entity*); - -void sub_080A9DC0(Entity*); - -extern s32 sub_080AF090(Entity*); -extern s32 sub_080A7EB0(Entity*); - -void Projectile12(Entity* this) { - gUnk_08129BEC[GetNextFunction(this)](this); -} - -void sub_080A9DC0(Entity* this) { - gUnk_08129C00[this->action](this); -} - -void sub_080A9DD8(Entity* this) { - if ((this->currentHealth == 0) || (this->bitfield == 0x80)) { - DeleteThisEntity(); - } - sub_080A9DC0(this); -} - -void sub_080A9DFC(Entity* this) { - this->action = 1; - this->actionDelay = 0xb4; - this->currentHealth = 1; - InitializeAnimation(this, 0); -} - -void sub_080A9E14(Entity* this) { - GetNextFrame(this); - sub_080AF090(this); - if ((this->collisions != 0) || (--this->actionDelay == 0)) { - CreateFx(this, 0x4f, 0); - DeleteThisEntity(); - } - if (sub_080A7EB0(this) != 0) { - DeleteThisEntity(); - } -} diff --git a/src/projectile/projectile16.c b/src/projectile/projectile16.c deleted file mode 100644 index 93208ac9..00000000 --- a/src/projectile/projectile16.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "entity.h" -#include "enemy.h" -#include "functions.h" - -extern void (*const gUnk_0812A3C0[])(Entity*); - -extern void (*const gUnk_0812A3D4[])(Entity*); - -extern s32 sub_080AF090(Entity*); - -extern s32 sub_080A7EB0(Entity*); - -void Projectile16(Entity* this) { - gUnk_0812A3C0[GetNextFunction(this)](this); -} - -void sub_080AAB04(Entity* this) { - gUnk_0812A3D4[this->action](this); -} - -void sub_080AAB1C(Entity* this) { - DeleteThisEntity(); -} - -void sub_080AAB24(Entity* this) { - this->action = 1; - this->actionDelay = 0x1e; - InitializeAnimation(this, 0); -} - -void sub_080AAB38(Entity* this) { - GetNextFrame(this); - if (this->actionDelay != 0) { - this->actionDelay -= 1; - } else { - if (sub_080AF090(this) == 0) { - sub_0806F69C(this); - } else { - this->action = 2; - } - } -} - -void sub_080AAB64(Entity* this) { - GetNextFrame(this); - sub_080AF090(this); - if (this->collisions != 0) { - DeleteThisEntity(); - } - if (sub_080A7EB0(this) != 0) { - DeleteThisEntity(); - } -} diff --git a/src/projectile/projectile1E.c b/src/projectile/projectile1E.c deleted file mode 100644 index 9b160f9d..00000000 --- a/src/projectile/projectile1E.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "entity.h" - -extern void (*const gUnk_0812A6CC[])(Entity*); - -void Projectile1E(Entity* this) { - gUnk_0812A6CC[this->action](this); -} - -ASM_FUNC("asm/non_matching/projectile1E/sub_080ABA74.inc", void sub_080ABA74(Entity* this)) - -ASM_FUNC("asm/non_matching/projectile1E/sub_080ABAE0.inc", void sub_080ABAE0(Entity* this)) diff --git a/src/projectile/projectile24.c b/src/projectile/projectile24.c deleted file mode 100644 index d60bf32b..00000000 --- a/src/projectile/projectile24.c +++ /dev/null @@ -1,66 +0,0 @@ -#include "entity.h" -#include "enemy.h" -#include "audio.h" -#include "functions.h" - -extern void (*const gUnk_0812AA5C[])(Entity*); - -extern void (*const gUnk_0812AA74[])(Entity*); - -extern s32 sub_080AF090(Entity*); -extern s32 sub_080A7EB0(Entity*); - -void sub_080ACB90(Entity*); - -void Projectile24(Entity* this) { - gUnk_0812AA5C[GetNextFunction(this)](this); -} - -void sub_080ACA50(Entity* this) { - gUnk_0812AA74[this->action](this); -} - -ASM_FUNC("asm/non_matching/projectile24/sub_080ACA68.inc", void sub_080ACA68(Entity* this)) - -void sub_080ACAC8(Entity* this) { - this->action = 1; - this->direction = 0x10; - this->height.HALF.HI = 0xfffc; - this->attachedEntity = NULL; - InitializeAnimation(this, 7); - SoundReq(SFX_199); -} - -void sub_080ACAF0(Entity* this) { - sub_080AF090(this); - GetNextFrame(this); - if (sub_080A7EB0(this) != 0) { - DeleteThisEntity(); - } -} - -void sub_080ACB10(Entity* this) { - sub_080AF090(this); - if (this->collisions != 0) { - DeleteThisEntity(); - } - GetNextFrame(this); - sub_080ACB90(this); - if (sub_080A7EB0(this) != 0) { - DeleteThisEntity(); - } -} - -ASM_FUNC("asm/non_matching/projectile24/sub_080ACB40.inc", void sub_080ACB40(Entity* this)) - -void sub_080ACB90(Entity* this) { - Entity* parent; - - parent = this->parent; - if ((this->x.HALF.HI == parent->x.HALF.HI) && (this->y.HALF.HI <= parent->y.HALF.HI)) { - parent->field_0xf = 1; - CreateFx(this, 0x1f, 0x40); - EnqueueSFX(SFX_ITEM_GLOVES_KNOCKBACK); - DeleteThisEntity(); - } -} diff --git a/src/projectile/projectile5.c b/src/projectile/projectile5.c index 1d0d6c5a..1010eb45 100644 --- a/src/projectile/projectile5.c +++ b/src/projectile/projectile5.c @@ -1,24 +1,22 @@ - #include "entity.h" #include "enemy.h" #include "player.h" #include "room.h" #include "coord.h" -extern void (*const gUnk_08129718[])(Entity*); - -extern void (*const gUnk_0812972C[])(Entity*); - extern u32 sub_080002E0(u32, u32); -extern Hitbox gUnk_08129734; +extern void (*const Projectile5_Functions[])(Entity*); +extern void (*const Projectile5_Actions[])(Entity*); + +extern const Hitbox3D gUnk_08129734; void Projectile5(Entity* this) { - gUnk_08129718[GetNextFunction(this)](this); + Projectile5_Functions[GetNextFunction(this)](this); } -void sub_080A86D8(Entity* this) { - gUnk_0812972C[this->action](this); +void Projectile5_OnTick(Entity* this) { + Projectile5_Actions[this->action](this); } void sub_080A86F0(Entity* this) { @@ -43,16 +41,14 @@ void sub_080A86F0(Entity* this) { } } -void sub_080A8770(Entity* this) { +void Projectile5_Init(Entity* this) { this->action = 1; this->field_0x3c |= 0x10; - this->hitbox = &gUnk_08129734; + this->hitbox = (Hitbox*)&gUnk_08129734; } -void sub_080A878C(Entity* this) { - Entity* parent; - - parent = this->parent; +void Projectile5_Action1(Entity* this) { + Entity* parent = this->parent; if (parent == NULL) { DeleteThisEntity(); } @@ -65,3 +61,12 @@ void sub_080A878C(Entity* this) { CopyPosition(parent, this); this->height.HALF.HI += 2; } + +void (*const Projectile5_Functions[])(Entity*) = { + Projectile5_OnTick, sub_080A86F0, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const Projectile5_Actions[])(Entity*) = { + Projectile5_Init, + Projectile5_Action1, +}; +const Hitbox3D gUnk_08129734 = { 0, 0, { 9, 6, 6, 9 }, 10, 10, 12, { 0, 0, 0 } }; diff --git a/src/projectile/projectileB.c b/src/projectile/projectileB.c deleted file mode 100644 index 0a4c6898..00000000 --- a/src/projectile/projectileB.c +++ /dev/null @@ -1,27 +0,0 @@ -#include "entity.h" -#include "player.h" -#include "coord.h" - -extern Hitbox* gUnk_08129998[]; -extern void sub_0803C0AC(Entity*); - -void ProjectileB(Entity* this) { - Entity* parent; - - if (this->action == 0) { - this->action = 1; - } - parent = this->parent; - if (((parent == NULL) || (parent->currentHealth == 0)) || (parent->next == NULL)) { - if (((this->bitfield & 0x80) != 0) && (this->field_0x4c == &gPlayerEntity)) { - sub_0803C0AC(this); - } - DeleteEntity(this); - } else { - this->hitbox = gUnk_08129998[parent->animationState]; - CopyPosition(parent, this); - if ((parent->iframes != 0) && (this->iframes == 0)) { - this->iframes = 0xff; - } - } -} diff --git a/src/projectile/projectile14.c b/src/projectile/removableDust.c similarity index 75% rename from src/projectile/projectile14.c rename to src/projectile/removableDust.c index 301e441e..f6bc3346 100644 --- a/src/projectile/projectile14.c +++ b/src/projectile/removableDust.c @@ -5,30 +5,26 @@ #include "flags.h" #include "utils.h" -extern void (*const gUnk_08129FB8[])(Entity*); +extern u32 sub_080002C8(u16, u8); +extern Entity* LoadRoomEntity(EntityData*); + +extern void (*const RemovableDust_Functions[])(Entity*); +extern const u16 gUnk_08129FD0[]; +extern const u16 gUnk_08129FE4[]; +extern const s8 gUnk_08129FF8[]; +extern const u8 gUnk_0812A004[]; void sub_080AA494(Entity*); void sub_080AA534(Entity*); - void sub_080AA464(Entity*); - void sub_080AA544(Entity*); - -extern u16 gUnk_08129FD0[]; void sub_080AA654(Entity*, u32); -extern s8 gUnk_08129FF8[]; -extern u16 gUnk_08129FE4[]; -extern u32 sub_080002C8(u16, u8); - -extern u32 gUnk_0812A004; -extern Entity* LoadRoomEntity(EntityData*); - -void Projectile14(Entity* this) { - gUnk_08129FB8[GetNextFunction(this)](this); +void RemovableDust(Entity* this) { + RemovableDust_Functions[GetNextFunction(this)](this); } -void sub_080AA41C(Entity* this) { +void RemovableDust_OnTick(Entity* this) { if (this->action == 0) { this->action = 1; this->frameIndex = this->type; @@ -63,7 +59,7 @@ void sub_080AA464(Entity* this) { void sub_080AA494(Entity* this) { u32 tileType; - u16* iterator; + const u16* iterator; u32 index; index = 0; @@ -91,15 +87,14 @@ void sub_080AA534(Entity* this) { UpdateSpriteForCollisionLayer(this); } - void sub_080AA544(Entity* this) { u8* pbVar1; s32 iVar2; u32 uVar3; s32 iVar4; - u16* puVar5; + const u16* puVar5; u32 param; - s8* tmp; + const s8* tmp; if (this->type2 < 9) { tmp = gUnk_08129FF8; @@ -125,9 +120,7 @@ void sub_080AA544(Entity* this) { sub_080AA654(this, param); SetFlag((u16)this->speed); } else { - sub_0807B7D8(gUnk_08129FE4[this->type2], - param - tmp[this->type2], - this->collisionLayer); + sub_0807B7D8(gUnk_08129FE4[this->type2], param - tmp[this->type2], this->collisionLayer); } } else { sub_0807BA8C(TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer); @@ -146,3 +139,13 @@ void sub_080AA654(Entity* this, u32 param) { LoadRoomEntity(entityData); } + +void (*const RemovableDust_Functions[])(Entity*) = { + RemovableDust_OnTick, sub_080AA450, DeleteEntity, DeleteEntity, DeleteEntity, sub_080AA464, +}; +const u16 gUnk_08129FD0[] = { 387, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 0 }; +const u16 gUnk_08129FE4[] = { 388, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 0 }; +const s8 gUnk_08129FF8[] = { 65, 64, 63, 1, 0, -1, -63, -64, -65, 0, 0, 0 }; +const u8 gUnk_0812A004[] = { + 9, 0, 3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; diff --git a/src/projectile/projectile1.c b/src/projectile/rockProjectile.c similarity index 67% rename from src/projectile/projectile1.c rename to src/projectile/rockProjectile.c index d300cd5f..e9e47b2c 100644 --- a/src/projectile/projectile1.c +++ b/src/projectile/rockProjectile.c @@ -2,22 +2,21 @@ #include "enemy.h" #include "functions.h" -extern void (*const gUnk_081295D0[])(Entity*); - -extern void (*const gUnk_081295E4[])(Entity*); - -void sub_080A8178(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); -void Projectile1(Entity* this) { - gUnk_081295D0[GetNextFunction(this)](this); +extern void (*const RockProjectile_Functions[])(Entity*); +extern void (*const RockProjectile_Actions[])(Entity*); + +void sub_080A8178(Entity*); + +void RockProjectile(Entity* this) { + RockProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A804C(Entity* this) { - gUnk_081295E4[this->action](this); +void RockProjectile_OnTick(Entity* this) { + RockProjectile_Actions[this->action](this); } void sub_080A8064(Entity* this) { @@ -29,14 +28,14 @@ void sub_080A8064(Entity* this) { } } -void sub_080A8088(Entity* this) { +void RockProjectile_Init(Entity* this) { this->action = 1; this->actionDelay = 0x30; this->field_0x20 = 0xa000; InitializeAnimation(this, 0); } -void sub_080A80A0(Entity* this) { +void RockProjectile_Action1(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) != 0) { if (sub_080A7EB0(this) != 0) { @@ -54,7 +53,7 @@ void sub_080A80A0(Entity* this) { } } -void sub_080A80F4(Entity* this) { +void RockProjectile_Action2(Entity* this) { sub_0806F69C(this); GetNextFrame(this); if (sub_08003FC4(this, 0x1800) == 0) { @@ -62,7 +61,7 @@ void sub_080A80F4(Entity* this) { } } -void sub_080A8118(Entity* this) { +void RockProjectile_Action3(Entity* this) { GetNextFrame(this); sub_080AF090(this); switch (sub_080044EC(this, 0x2800)) { @@ -89,3 +88,13 @@ void sub_080A8178(Entity* this) { this->speed = 0x40; this->field_0x20 = 0x14000; } + +void (*const RockProjectile_Functions[])(Entity*) = { + RockProjectile_OnTick, sub_080A8064, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const RockProjectile_Actions[])(Entity*) = { + RockProjectile_Init, + RockProjectile_Action1, + RockProjectile_Action2, + RockProjectile_Action3, +}; diff --git a/src/projectile/projectile15.c b/src/projectile/spiderWeb.c similarity index 69% rename from src/projectile/projectile15.c rename to src/projectile/spiderWeb.c index 0130e3a7..68d6e868 100644 --- a/src/projectile/projectile15.c +++ b/src/projectile/spiderWeb.c @@ -5,35 +5,30 @@ #include "object.h" #include "flags.h" -extern void (*const gUnk_0812A014[])(Entity*); +extern void sub_0806FBB4(Entity*); +extern u32 sub_080002D4(s32, s32, u32); -extern void (*const gUnk_0812A02C[])(Entity*); - -extern u8 gUnk_0812A03C[]; +extern void (*const SpiderWeb_Functions[])(Entity*); +extern void (*const SpiderWeb_Actions[])(Entity*); +extern const u8 gUnk_0812A03C[]; +extern const Hitbox* const gUnk_0812A04C[]; +extern void (*const SpiderWeb_SubActions[])(Entity*); +extern const s8 gUnk_0812A064[]; +extern const s8 gUnk_0812A06C[]; +extern const u8 gUnk_0812A074[]; +extern const u16 gUnk_0812A084[]; void sub_080AA6C0(Entity*); void sub_080AAAA8(Entity*); - -extern Hitbox* gUnk_0812A04C[]; void sub_080AAA68(Entity*); - void sub_080AA9E0(Entity*); -extern void (*const gUnk_0812A05C[])(Entity*); -extern void sub_0806FBB4(Entity*); - -extern u16 gUnk_0812A084[]; - -extern u32 sub_080002D4(s32, s32, u32); -extern s8 gUnk_0812A064[]; -extern s8 gUnk_0812A06C[]; - -void Projectile15(Entity* this) { - gUnk_0812A014[GetNextFunction(this)](this); +void SpiderWeb(Entity* this) { + SpiderWeb_Functions[GetNextFunction(this)](this); } -void sub_080AA6A8(Entity* this) { - gUnk_0812A02C[this->action](this); +void SpiderWeb_OnTick(Entity* this) { + SpiderWeb_Actions[this->action](this); } void sub_080AA6C0(Entity* this) { @@ -101,32 +96,32 @@ void sub_080AA78C(Entity* this) { } } -void sub_080AA834(Entity* this) { +void SpiderWeb_Init(Entity* this) { if (CheckFlags(this->field_0x86.HWORD) != 0) { DeleteThisEntity(); } this->action = 1; this->field_0x1c = 1; this->field_0x16 = 1; - this->hitbox = gUnk_0812A04C[this->type]; + this->hitbox = (Hitbox*)gUnk_0812A04C[this->type]; this->cutsceneBeh.HALF.LO = 0; InitAnimationForceUpdate(this, this->type); sub_080AAA68(this); } -void sub_080AA878(Entity* this) { +void SpiderWeb_Action1(Entity* this) { if ((this->frames.all & 0x80) == 0) { UpdateAnimationSingleFrame(this); } sub_080AA9E0(this); } -void sub_080AA898(Entity* this) { +void SpiderWeb_Action2(Entity* this) { sub_0806FBB4(this); - gUnk_0812A05C[this->subAction - 5](this); + SpiderWeb_SubActions[this->subAction - 5](this); } -void sub_080AA8B8(Entity* this) { +void SpiderWeb_SubAction0(Entity* this) { u32 tmp; u16 x; u16 y; @@ -160,20 +155,20 @@ void sub_080AA8B8(Entity* this) { } } -void sub_080AA9AC(Entity* this) { +void SpiderWeb_SubAction1(Entity* this) { this->action = 1; this->cutsceneBeh.HALF.LO = 0; InitAnimationForceUpdate(this, this->type + 0xc); } -void sub_080AA9C4(Entity* this) { +void SpiderWeb_Action3(Entity* this) { GetNextFrame(this); if (--this->actionDelay == 0) { sub_080AAAA8(this); } } -ASM_FUNC("asm/non_matching/projectile15/sub_080AA9E0.inc", void sub_080AA9E0(Entity* this)) +ASM_FUNC("asm/non_matching/spiderWeb/sub_080AA9E0.inc", void sub_080AA9E0(Entity* this)) void sub_080AAA68(Entity* this) { SetTile(gUnk_0812A084[this->type], TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer); @@ -184,3 +179,34 @@ void sub_080AAAA8(Entity* this) { sub_0807BA8C(TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer); DeleteThisEntity(); } + +void (*const SpiderWeb_Functions[])(Entity*) = { + SpiderWeb_OnTick, sub_080AA6C0, DeleteEntity, DeleteEntity, DeleteEntity, sub_080AA78C, +}; +void (*const SpiderWeb_Actions[])(Entity*) = { + SpiderWeb_Init, + SpiderWeb_Action1, + SpiderWeb_Action2, + SpiderWeb_Action3, +}; +const u8 gUnk_0812A03C[] = { + 248, 252, 6, 1, 4, 245, 253, 3, 249, 253, 6, 4, 252, 245, 3, 3, +}; +extern const Hitbox gUnk_080FD41C; +extern const Hitbox gUnk_080FD424; +extern const Hitbox gUnk_080FD42C; +extern const Hitbox gUnk_080FD434; +const Hitbox* const gUnk_0812A04C[] = { + &gUnk_080FD41C, + &gUnk_080FD424, + &gUnk_080FD42C, + &gUnk_080FD434, +}; +void (*const SpiderWeb_SubActions[])(Entity*) = { + SpiderWeb_SubAction0, + SpiderWeb_SubAction1, +}; +const s8 gUnk_0812A064[] = { 0, 17, -15, 4, 0, -11, 15, 4 }; +const s8 gUnk_0812A06C[] = { 0, 2, -2, 0, 0, -2, 2, 0 }; +const u8 gUnk_0812A074[] = { 4, 0, 5, 16, 3, 8, 5, 24, 3, 16, 5, 0, 3, 24, 5, 8 }; +const u16 gUnk_0812A084[] = { 16419, 16421, 16422, 16420 }; diff --git a/src/projectile/spikedRollers.c b/src/projectile/spikedRollers.c new file mode 100644 index 00000000..503792ba --- /dev/null +++ b/src/projectile/spikedRollers.c @@ -0,0 +1,20 @@ +#include "entity.h" + +extern void (*const SpikedRollers_Actions[])(Entity*); +extern const u8 gUnk_0812A6D4[]; + +void SpikedRollers(Entity* this) { + SpikedRollers_Actions[this->action](this); +} + +ASM_FUNC("asm/non_matching/spikedRollers/sub_080ABA74.inc", void sub_080ABA74(Entity* this)) + +ASM_FUNC("asm/non_matching/spikedRollers/sub_080ABAE0.inc", void sub_080ABAE0(Entity* this)) + +void (*const SpikedRollers_Actions[])(Entity*) = { + sub_080ABA74, + sub_080ABAE0, +}; +const u8 gUnk_0812A6D4[] = { + 8, 16, 24, 32, 40, 48, 56, 16, 24, 32, 40, 48, 56, 64, +}; diff --git a/src/projectile/projectile10.c b/src/projectile/stalfosProjectile.c similarity index 61% rename from src/projectile/projectile10.c rename to src/projectile/stalfosProjectile.c index d93f9e0c..c743fcbc 100644 --- a/src/projectile/projectile10.c +++ b/src/projectile/stalfosProjectile.c @@ -2,33 +2,30 @@ #include "enemy.h" #include "functions.h" -extern void (*const gUnk_08129AE0[])(Entity*); - -extern void (*const gUnk_08129AF8[])(Entity*); - -extern void (*const gUnk_08129B08[])(Entity*); -void sub_080A9BA8(Entity*); - -void sub_080A9BD0(Entity*); -void sub_080A9C34(Entity*); - -void sub_080A9C50(Entity*); +extern void (*const StalfosProjectile_Functions[])(Entity*); +extern void (*const StalfosProjectile_Actions[])(Entity*); +extern void (*const StalfosProjectile_SubActions[])(Entity*); typedef struct { s8 unk_0; s8 unk_1; s8 unk_2; } PACKED struct_08129B20; -extern struct_08129B20 gUnk_08129B20[]; +extern const struct_08129B20 gUnk_08129B20[]; -extern u8 gUnk_08129B50[]; +extern const u8 gUnk_08129B50[]; -void Projectile10(Entity* this) { - gUnk_08129AE0[GetNextFunction(this)](this); +void sub_080A9BA8(Entity*); +void sub_080A9BD0(Entity*); +void sub_080A9C34(Entity*); +void sub_080A9C50(Entity*); + +void StalfosProjectile(Entity* this) { + StalfosProjectile_Functions[GetNextFunction(this)](this); } -void sub_080A9A1C(Entity* this) { - gUnk_08129AF8[this->action](this); +void StalfosProjectile_OnTick(Entity* this) { + StalfosProjectile_Actions[this->action](this); } void sub_080A9A34(Entity* this) { @@ -44,34 +41,34 @@ void sub_080A9A64(Entity* this) { if ((this->subAction < 3) && (sub_0806F520(this) == 0)) { sub_080A9BA8(this); } - gUnk_08129B08[this->subAction](this); + StalfosProjectile_SubActions[this->subAction](this); } -void sub_080A9A94(Entity* this) { +void StalfosProjectile_SubAction0(Entity* this) { this->subAction = 2; this->height.HALF.HI = 0xfffe; } -void sub_080A9AA4(Entity* this) { +void StalfosProjectile_SubAction1(Entity* this) { sub_0806F4E8(this); } -void sub_080A9AAC(Entity* this) { +void StalfosProjectile_SubAction2(Entity* this) { sub_0806F3E4(this); } -void sub_080A9AB4(Entity* this) { +void StalfosProjectile_SubAction3(Entity* this) { this->flags &= 0x7f; } -void nullsub_128(Entity* this) { +void StalfosProjectile_SubAction4(Entity* this) { } -void sub_080A9AC4(Entity* this) { +void StalfosProjectile_SubAction5(Entity* this) { sub_080A9BA8(this); } -void sub_080A9ACC(Entity* this) { +void StalfosProjectile_Init(Entity* this) { switch (this->type2) { case 1: this->action = 2; @@ -95,7 +92,7 @@ void sub_080A9ACC(Entity* this) { } } -void sub_080A9B24(Entity* this) { +void StalfosProjectile_Action1(Entity* this) { if (this->parent->next == NULL) { sub_080A9BA8(this); } @@ -107,7 +104,7 @@ void sub_080A9B24(Entity* this) { } } -void sub_080A9B54(Entity* this) { +void StalfosProjectile_Action2(Entity* this) { if (this->parent->next == NULL) { sub_080A9BA8(this); } @@ -118,7 +115,7 @@ void sub_080A9B54(Entity* this) { } } -void sub_080A9B80(Entity* this) { +void StalfosProjectile_Action3(Entity* this) { if (this->field_0x20 < 0) { this->spriteSettings.b.flipY = 1; } @@ -140,7 +137,7 @@ void sub_080A9BD0(Entity* this) { Entity* parent; s32 tmp; u32 tmp2; - struct_08129B20* entry; + const struct_08129B20* entry; parent = this->parent; switch (parent->animationState) { @@ -186,3 +183,23 @@ void sub_080A9C50(Entity* this) { sub_0806FA90(parent, this, 0, 1); this->spriteOffsetY += gUnk_08129B50[tmp]; } + +void (*const StalfosProjectile_Functions[])(Entity*) = { + StalfosProjectile_OnTick, sub_080A9A34, DeleteEntity, DeleteEntity, DeleteEntity, sub_080A9A64, +}; +void (*const StalfosProjectile_Actions[])(Entity*) = { + StalfosProjectile_Init, + StalfosProjectile_Action1, + StalfosProjectile_Action2, + StalfosProjectile_Action3, +}; +void (*const StalfosProjectile_SubActions[])(Entity*) = { + StalfosProjectile_SubAction0, StalfosProjectile_SubAction1, StalfosProjectile_SubAction2, + StalfosProjectile_SubAction3, StalfosProjectile_SubAction4, StalfosProjectile_SubAction5, +}; +const struct_08129B20 gUnk_08129B20[] = { + { 0, -9, -1 }, { 0, 5, -25 }, { 0, 3, -20 }, { 0, 0, -14 }, { 10, 0, -1 }, { -5, 0, -24 }, + { -3, 0, -20 }, { 0, 0, -13 }, { 0, 5, -1 }, { 0, -5, -19 }, { 0, -3, -16 }, { 0, 0, -11 }, + { -10, 0, -1 }, { 5, 0, -24 }, { 3, 0, -20 }, { 0, 0, -13 }, +}; +const u8 gUnk_08129B50[] = { 241, 243, 242, 241, 243, 242, 0, 0 }; diff --git a/src/projectile/torchTrapProjectile.c b/src/projectile/torchTrapProjectile.c new file mode 100644 index 00000000..aa550c6a --- /dev/null +++ b/src/projectile/torchTrapProjectile.c @@ -0,0 +1,60 @@ +#include "entity.h" +#include "enemy.h" +#include "functions.h" + +extern s32 sub_080AF090(Entity*); +extern s32 sub_080A7EB0(Entity*); + +extern void (*const TorchTrapProjectile_Functions[])(Entity*); +extern void (*const TorchTrapProjectile_Actions[])(Entity*); + +void TorchTrapProjectile(Entity* this) { + TorchTrapProjectile_Functions[GetNextFunction(this)](this); +} + +void TorchTrapProjectile_OnTick(Entity* this) { + TorchTrapProjectile_Actions[this->action](this); +} + +void sub_080AAB1C(Entity* this) { + DeleteThisEntity(); +} + +void TorchTrapProjectile_Init(Entity* this) { + this->action = 1; + this->actionDelay = 0x1e; + InitializeAnimation(this, 0); +} + +void TorchTrapProjectile_Action1(Entity* this) { + GetNextFrame(this); + if (this->actionDelay != 0) { + this->actionDelay -= 1; + } else { + if (sub_080AF090(this) == 0) { + sub_0806F69C(this); + } else { + this->action = 2; + } + } +} + +void TorchTrapProjectile_Action2(Entity* this) { + GetNextFrame(this); + sub_080AF090(this); + if (this->collisions != 0) { + DeleteThisEntity(); + } + if (sub_080A7EB0(this) != 0) { + DeleteThisEntity(); + } +} + +void (*const TorchTrapProjectile_Functions[])(Entity*) = { + TorchTrapProjectile_OnTick, sub_080AAB1C, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const TorchTrapProjectile_Actions[])(Entity*) = { + TorchTrapProjectile_Init, + TorchTrapProjectile_Action1, + TorchTrapProjectile_Action2, +}; diff --git a/src/projectile/projectile18.c b/src/projectile/v1DarkMagicProjectile.c similarity index 76% rename from src/projectile/projectile18.c rename to src/projectile/v1DarkMagicProjectile.c index 999ca4e6..baa70ecb 100644 --- a/src/projectile/projectile18.c +++ b/src/projectile/v1DarkMagicProjectile.c @@ -6,23 +6,21 @@ #include "functions.h" #include "random.h" -extern void (*const gUnk_0812A418[])(Entity*); +extern void sub_0800449C(Entity*, u32); -extern void (*const gUnk_0812A430[])(Entity*); - -extern void (*const gUnk_0812A440[])(Entity*); +extern void (*const V1DarkMagicProjectile_Functions[])(Entity*); +extern void (*const V1DarkMagicProjectile_Actions[])(Entity*); +extern void (*const V1DarkMagicProjectile_SubActions[])(Entity*); void sub_080AAF74(Entity*); void sub_080AB034(Entity*); -extern void sub_0800449C(Entity*, u32); - -void Projectile18(Entity* this) { - gUnk_0812A418[GetNextFunction(this)](this); +void V1DarkMagicProjectile(Entity* this) { + V1DarkMagicProjectile_Functions[GetNextFunction(this)](this); } -void sub_080AAC0C(Entity* this) { - gUnk_0812A430[this->action](this); +void V1DarkMagicProjectile_OnTick(Entity* this) { + V1DarkMagicProjectile_Actions[this->action](this); if ((this->type2 == 0) && (--this->cutsceneBeh.HWORD == 0)) { this->currentHealth = 0; } @@ -56,29 +54,29 @@ void sub_080AAC44(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile18/sub_080AACE0.inc", void sub_080AACE0(Entity* this)) +ASM_FUNC("asm/non_matching/v1DarkMagicProjectile/sub_080AACE0.inc", void sub_080AACE0(Entity* this)) void sub_080AAD70(Entity* this) { if (sub_0806F520() == 0) { this->currentHealth = 0; } - gUnk_0812A440[this->subAction](this); + V1DarkMagicProjectile_SubActions[this->subAction](this); } -void sub_080AAD98(Entity* this) { +void V1DarkMagicProjectile_SubAction0(Entity* this) { this->subAction = 2; } -void nullsub_541(Entity* this) { +void V1DarkMagicProjectile_SubAction1(Entity* this) { } -void sub_080AADA4(Entity* this) { +void V1DarkMagicProjectile_SubAction2(Entity* this) { if (sub_0806F3E4(this) != 0) { this->currentHealth = 0; } } -void sub_080AADBC(Entity* this) { +void V1DarkMagicProjectile_Init(Entity* this) { Entity* entity; if (this->type2 == 0) { @@ -115,7 +113,7 @@ void sub_080AADBC(Entity* this) { InitializeAnimation(this, this->type); } -void sub_080AAE88(Entity* this) { +void V1DarkMagicProjectile_Action1(Entity* this) { u8 bVar1; u32 uVar2; @@ -142,12 +140,12 @@ void sub_080AAE88(Entity* this) { sub_080AB034(this); } -void sub_080AAF00(Entity* this) { +void V1DarkMagicProjectile_Action2(Entity* this) { sub_080AAF74(this); sub_080AB034(this); } -void sub_080AAF10(Entity* this) { +void V1DarkMagicProjectile_Action3(Entity* this) { CopyPosition(this->parent, this); sub_080AB034(this); this->spriteSettings.b.draw = this->parent->spriteSettings.b.draw; @@ -206,3 +204,18 @@ void sub_080AB034(Entity* this) { } sub_0801D2B4(this, tmp); } + +void (*const V1DarkMagicProjectile_Functions[])(Entity*) = { + V1DarkMagicProjectile_OnTick, sub_080AAC44, DeleteEntity, sub_080AACE0, DeleteEntity, sub_080AAD70, +}; +void (*const V1DarkMagicProjectile_Actions[])(Entity*) = { + V1DarkMagicProjectile_Init, + V1DarkMagicProjectile_Action1, + V1DarkMagicProjectile_Action2, + V1DarkMagicProjectile_Action3, +}; +void (*const V1DarkMagicProjectile_SubActions[])(Entity*) = { + V1DarkMagicProjectile_SubAction0, + V1DarkMagicProjectile_SubAction1, + V1DarkMagicProjectile_SubAction2, +}; diff --git a/src/projectile/projectile1C.c b/src/projectile/v1EyeLaser.c similarity index 54% rename from src/projectile/projectile1C.c rename to src/projectile/v1EyeLaser.c index 62d9a391..2af3ae08 100644 --- a/src/projectile/projectile1C.c +++ b/src/projectile/v1EyeLaser.c @@ -1,32 +1,27 @@ #include "entity.h" #include "functions.h" -extern void (*const gUnk_0812A5E8[])(Entity*); - -extern Hitbox gUnk_0812A614; +extern void (*const V1EyeLaser_Actions[])(Entity*); +extern const Hitbox* const gUnk_0812A5F4[]; +extern const Hitbox gUnk_0812A614; +extern const Hitbox gUnk_0812A61C; void sub_080AB758(Entity*); - void sub_080AB888(Entity*); -extern Hitbox gUnk_0812A614; -extern Hitbox gUnk_0812A61C; - -extern Hitbox* gUnk_0812A5F4[]; - -void Projectile1C(Entity* this) { +void V1EyeLaser(Entity* this) { if (this->parent->spriteSettings.b.draw == 0) { DeleteThisEntity(); } - gUnk_0812A5E8[this->action](this); + V1EyeLaser_Actions[this->action](this); } -void sub_080AB6B8(Entity* this) { +void V1EyeLaser_Init(Entity* this) { *(u32*)&this->field_0x74 = this->parent->x.WORD; if (this->type == 0) { this->action = 1; this->flags &= 0x7f; - this->hitbox = &gUnk_0812A614; + this->hitbox = (Hitbox*)&gUnk_0812A614; InitializeAnimation(this, 0); } else { this->action = 2; @@ -35,7 +30,7 @@ void sub_080AB6B8(Entity* this) { } } -void sub_080AB6FC(Entity* this) { +void V1EyeLaser_Action1(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { this->action = 2; @@ -44,7 +39,7 @@ void sub_080AB6FC(Entity* this) { } } -void sub_080AB728(Entity* this) { +void V1EyeLaser_Action2(Entity* this) { GetNextFrame(this); this->x.WORD += (this->parent->x.WORD - *(u32*)&this->field_0x74); *(u32*)&this->field_0x74 = this->parent->x.WORD; @@ -54,7 +49,7 @@ void sub_080AB728(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile1C/sub_080AB758.inc", void sub_080AB758(Entity* this)) +ASM_FUNC("asm/non_matching/v1EyeLaser/sub_080AB758.inc", void sub_080AB758(Entity* this)) void sub_080AB844(Entity* this, s32 param_1, s32 param_2) { Entity* entity; @@ -66,9 +61,9 @@ void sub_080AB844(Entity* this, s32 param_1, s32 param_2) { entity->parent = this->parent; PositionRelative(this, entity, 0, param_2 << 0x10); if (param_1 != 1) { - entity->hitbox = &gUnk_0812A61C; + entity->hitbox = (Hitbox*)&gUnk_0812A61C; } else { - entity->hitbox = &gUnk_0812A614; + entity->hitbox = (Hitbox*)&gUnk_0812A614; } } } @@ -83,7 +78,7 @@ void sub_080AB888(Entity* this) { case 3: index = 1; case 4: - this->hitbox = gUnk_0812A5F4[this->field_0xf * 2 + index]; + this->hitbox = (Hitbox*)gUnk_0812A5F4[this->field_0xf * 2 + index]; break; case 0: case 1: @@ -96,3 +91,24 @@ void sub_080AB888(Entity* this) { this->field_0xf = 4; } } + +void (*const V1EyeLaser_Actions[])(Entity*) = { + V1EyeLaser_Init, + V1EyeLaser_Action1, + V1EyeLaser_Action2, +}; + +extern const Hitbox gUnk_0812A624; +extern const Hitbox gUnk_0812A62C; +extern const Hitbox gUnk_0812A634; + +const Hitbox* const gUnk_0812A5F4[] = { + &gUnk_0812A61C, &gUnk_0812A61C, &gUnk_0812A624, &gUnk_0812A61C, + &gUnk_0812A62C, &gUnk_0812A624, &gUnk_0812A634, &gUnk_0812A624, +}; + +const Hitbox gUnk_0812A614 = { 0, 4, { 0, 0, 0, 0 }, 1, 3 }; +const Hitbox gUnk_0812A61C = { 0, 8, { 0, 0, 0, 0 }, 1, 6 }; +const Hitbox gUnk_0812A624 = { 0, 24, { 0, 0, 0, 0 }, 1, 6 }; +const Hitbox gUnk_0812A62C = { 0, 40, { 0, 0, 0, 0 }, 1, 6 }; +const Hitbox gUnk_0812A634 = { 0, 56, { 0, 0, 0, 0 }, 1, 6 }; diff --git a/src/projectile/projectile1A.c b/src/projectile/v1FireProjectile.c similarity index 56% rename from src/projectile/projectile1A.c rename to src/projectile/v1FireProjectile.c index de519353..cad6d879 100644 --- a/src/projectile/projectile1A.c +++ b/src/projectile/v1FireProjectile.c @@ -5,24 +5,22 @@ #include "audio.h" #include "random.h" -extern void (*const gUnk_0812A4C8[])(Entity*); - -extern void (*const gUnk_0812A4DC[])(Entity*); - -void sub_080AB4A4(Entity*); - extern void sub_0806F5BC(Entity*, u32, u32); extern u32 sub_080041DC(Entity*, u32, u32); + +extern void (*const V1FireProjectile_Functions[])(Entity*); +extern void (*const V1FireProjectile_Actions[])(Entity*); +extern const s8 gUnk_0812A4EC[]; + +void sub_080AB4A4(Entity*); s8* sub_080AB4F8(Entity*); -extern s8 gUnk_0812A4EC[]; - -void Projectile1A(Entity* this) { - gUnk_0812A4C8[GetNextFunction(this)](this); +void V1FireProjectile(Entity* this) { + V1FireProjectile_Functions[GetNextFunction(this)](this); } -void sub_080AB2C4(Entity* this) { - gUnk_0812A4DC[this->action](this); +void V1FireProjectile_OnTick(Entity* this) { + V1FireProjectile_Actions[this->action](this); } void sub_080AB2DC(Entity* this) { @@ -36,7 +34,7 @@ void sub_080AB2DC(Entity* this) { } } -void sub_080AB318(Entity* this) { +void V1FireProjectile_Init(Entity* this) { s32 iVar2; u32 rnd; u32 x; @@ -75,7 +73,7 @@ void sub_080AB318(Entity* this) { this->direction = sub_080045B4(this, x, y); } -void sub_080AB414(Entity* this) { +void V1FireProjectile_Action1(Entity* this) { GetNextFrame(this); sub_0806F69C(this); if (sub_08003FC4(this, 0) == 0) { @@ -90,7 +88,7 @@ void sub_080AB414(Entity* this) { } } -void sub_080AB45C(Entity* this) { +void V1FireProjectile_Action2(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { this->action = 3; @@ -99,7 +97,7 @@ void sub_080AB45C(Entity* this) { } } -void sub_080AB488(Entity* this) { +void V1FireProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteThisEntity(); @@ -124,5 +122,24 @@ void sub_080AB4A4(Entity* this) { } s8* sub_080AB4F8(Entity* this) { - return &gUnk_0812A4EC[this->type << 5 | this->field_0xf << 1]; + return (s8*)&gUnk_0812A4EC[this->type << 5 | this->field_0xf << 1]; } + +void (*const V1FireProjectile_Functions[])(Entity*) = { + V1FireProjectile_OnTick, sub_080AB2DC, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const V1FireProjectile_Actions[])(Entity*) = { + V1FireProjectile_Init, + V1FireProjectile_Action1, + V1FireProjectile_Action2, + V1FireProjectile_Action3, +}; +const s8 gUnk_0812A4EC[] = { 16, 0, 64, -48, 80, -32, 80, 0, 80, 32, 64, 48, 32, 16, 48, 0, 32, -16, + 80, -64, 80, -64, 32, 0, 48, -32, 64, -16, 64, 16, 48, 32, 16, 16, 64, 16, + 64, 32, 48, 48, 32, 64, 16, 64, 16, 32, 32, 16, 80, 16, 80, 48, 64, 64, + 48, 80, 16, 80, 16, 48, 32, 32, 48, 16, 0, 16, -48, 48, -32, 64, 32, 64, + 48, 48, 80, 80, 0, 80, -80, 80, 0, 32, 64, 64, 48, 80, -48, 80, -64, 64, + -16, 16, 0, 48, 16, 16, -16, 16, -64, 16, -64, 32, -48, 48, -32, 64, -16, 64, + -16, 32, -32, 16, -80, 16, -80, 48, -64, 64, -48, 80, -16, 80, -16, 48, -32, 32, + -48, 16, -16, 0, -64, -48, -80, -32, -80, 0, -80, 32, -64, 48, -32, 16, -48, 0, + -32, -16, -80, -64, -80, -64, -32, 0, -48, -32, -64, -16, -64, 16, -48, 32 }; diff --git a/src/projectile/projectile1F.c b/src/projectile/v2Projectile.c similarity index 73% rename from src/projectile/projectile1F.c rename to src/projectile/v2Projectile.c index 93941e4c..0420790b 100644 --- a/src/projectile/projectile1F.c +++ b/src/projectile/v2Projectile.c @@ -5,8 +5,10 @@ #include "random.h" #include "audio.h" -extern void (*const gUnk_0812A7D4[])(Entity*); - +extern void (*const V2Projectile_Functions[])(Entity*); +extern void (*const gUnk_0812A7EC[])(Entity*); +extern void (*const gUnk_0812A7F8[])(Entity*); +extern void (*const gUnk_0812A800[])(Entity*); extern void (*const gUnk_0812A808[])(Entity*); extern void sub_0800449C(Entity*, u32); @@ -14,13 +16,13 @@ extern void sub_08079D84(void); extern s32 sub_080AF090(Entity*); -void Projectile1F(Entity* this) { - gUnk_0812A7D4[GetNextFunction(this)](this); +void V2Projectile(Entity* this) { + V2Projectile_Functions[GetNextFunction(this)](this); } -ASM_FUNC("asm/non_matching/projectile1F/sub_080ABBA8.inc", void sub_080ABBA8(Entity* this)) +ASM_FUNC("asm/non_matching/v2Projectile/sub_080ABBA8.inc", void sub_080ABBA8(Entity* this)) -ASM_FUNC("asm/non_matching/projectile1F/sub_080ABBF4.inc", void sub_080ABBF4(Entity* this)) +ASM_FUNC("asm/non_matching/v2Projectile/sub_080ABBF4.inc", void sub_080ABBF4(Entity* this)) void sub_080ABC54(Entity* this) { if (sub_0806F520() == 0) { @@ -90,7 +92,7 @@ void sub_080ABD70(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile1F/sub_080ABE04.inc", void sub_080ABE04(Entity* this)) +ASM_FUNC("asm/non_matching/v2Projectile/sub_080ABE04.inc", void sub_080ABE04(Entity* this)) void sub_080ABE88(Entity* this) { if (sub_08003FC4(this, 0x1800) == 0) { @@ -121,3 +123,25 @@ void sub_080ABF04(Entity* this) { sub_0806F69C(this); GetNextFrame(this); } + +void (*const V2Projectile_Functions[])(Entity*) = { + sub_080ABBA8, sub_080ABBF4, DeleteEntity, DeleteEntity, DeleteEntity, sub_080ABC54, +}; +void (*const gUnk_0812A7EC[])(Entity*) = { + sub_080ABCC4, + sub_080ABD44, + sub_080ABD70, +}; +void (*const gUnk_0812A7F8[])(Entity*) = { + sub_080ABE04, + sub_080ABE88, +}; +void (*const gUnk_0812A800[])(Entity*) = { + sub_080ABEA8, + sub_080ABF04, +}; +void (*const gUnk_0812A808[])(Entity*) = { + sub_080ABC84, + nullsub_542, + sub_080ABC90, +}; diff --git a/src/projectile/projectile21.c b/src/projectile/v3ElectricProjectile.c similarity index 52% rename from src/projectile/projectile21.c rename to src/projectile/v3ElectricProjectile.c index d8ac77fc..4d18a8ba 100644 --- a/src/projectile/projectile21.c +++ b/src/projectile/v3ElectricProjectile.c @@ -5,28 +5,30 @@ #include "coord.h" #include "functions.h" -extern void (*const gUnk_0812A954[])(Entity*); - -extern void (*const gUnk_0812A968[])(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); -void Projectile21(Entity* this) { - gUnk_0812A954[GetNextFunction(this)](this); +extern void (*const V3ElectricProjectile_Functions[])(Entity*); +extern void (*const V3ElectricProjectile_Actions[])(Entity*); +extern const u16 gUnk_0812A97C[]; +extern const u8 gUnk_0812A982[]; +extern const u8 gUnk_0812A98A[]; + +void V3ElectricProjectile(Entity* this) { + V3ElectricProjectile_Functions[GetNextFunction(this)](this); } -void sub_080ABFCC(Entity* this) { - gUnk_0812A968[this->action](this); +void V3ElectricProjectile_OnTick(Entity* this) { + V3ElectricProjectile_Actions[this->action](this); } void sub_080ABFE4(Entity* this) { DeleteThisEntity(); } -ASM_FUNC("asm/non_matching/projectile21/sub_080ABFEC.inc", void sub_080ABFEC(Entity* this)) +ASM_FUNC("asm/non_matching/v3ElectricProjectile/sub_080ABFEC.inc", void sub_080ABFEC(Entity* this)) -void sub_080AC074(Entity* this) { +void V3ElectricProjectile_Action1(Entity* this) { if (this->parent->next == NULL) { DeleteThisEntity(); } @@ -52,7 +54,7 @@ void sub_080AC074(Entity* this) { } } -void sub_080AC100(Entity* this) { +void V3ElectricProjectile_Action2(Entity* this) { u8 bVar1; s32 iVar2; u32 uVar3; @@ -75,6 +77,20 @@ void sub_080AC100(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile21/sub_080AC168.inc", void sub_080AC168(Entity* this)) +ASM_FUNC("asm/non_matching/v3ElectricProjectile/sub_080AC168.inc", void sub_080AC168(Entity* this)) -ASM_FUNC("asm/non_matching/projectile21/sub_080AC200.inc", void sub_080AC200(Entity* this)) +ASM_FUNC("asm/non_matching/v3ElectricProjectile/sub_080AC200.inc", void sub_080AC200(Entity* this)) + +void (*const V3ElectricProjectile_Functions[])(Entity*) = { + V3ElectricProjectile_OnTick, sub_080ABFE4, DeleteEntity, DeleteEntity, DeleteEntity, +}; +void (*const V3ElectricProjectile_Actions[])(Entity*) = { + sub_080ABFEC, V3ElectricProjectile_Action1, V3ElectricProjectile_Action2, sub_080AC168, sub_080AC200, +}; +const u16 gUnk_0812A97C[] = { 352, 480, 480 }; +const u8 gUnk_0812A982[] = { + 5, 6, 7, 8, 5, 6, 7, 6, +}; +const u8 gUnk_0812A98A[] = { + 6, 9, 9, 12, 6, 9, 9, 9, 0, 0, +}; diff --git a/src/projectile/projectile20.c b/src/projectile/v3HandProjectile.c similarity index 65% rename from src/projectile/projectile20.c rename to src/projectile/v3HandProjectile.c index 4c97790d..2c4ff6d2 100644 --- a/src/projectile/projectile20.c +++ b/src/projectile/v3HandProjectile.c @@ -3,16 +3,16 @@ #include "player.h" #include "audio.h" -extern void (*const gUnk_0812A84C[])(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); -void Projectile20(Entity* this) { - gUnk_0812A84C[GetNextFunction(this)](this); +extern void (*const V3HandProjectile_Functions[])(Entity*); + +void V3HandProjectile(Entity* this) { + V3HandProjectile_Functions[GetNextFunction(this)](this); } -void sub_080ABF40(Entity* this) { +void V3HandProjectile_OnTick(Entity* this) { if (this->action == 0) { this->action = 1; this->direction = GetFacingDirection(this, &gPlayerEntity); @@ -35,3 +35,7 @@ void sub_080ABF40(Entity* this) { void sub_080ABFA8(Entity* this) { DeleteThisEntity(); } + +void (*const V3HandProjectile_Functions[])(Entity*) = { + V3HandProjectile_OnTick, sub_080ABFA8, DeleteEntity, DeleteEntity, DeleteEntity, +}; diff --git a/src/projectile/v3TennisBallProjectile.c b/src/projectile/v3TennisBallProjectile.c new file mode 100644 index 00000000..82d64a3c --- /dev/null +++ b/src/projectile/v3TennisBallProjectile.c @@ -0,0 +1,73 @@ +#include "entity.h" +#include "enemy.h" +#include "audio.h" +#include "functions.h" + +extern s32 sub_080AF090(Entity*); +extern s32 sub_080A7EB0(Entity*); + +extern void (*const V3TennisBallProjectile_Functions[])(Entity*); +extern void (*const V3TennisBallProjectile_Actions[])(Entity*); + +void sub_080ACB90(Entity*); + +void V3TennisBallProjectile(Entity* this) { + V3TennisBallProjectile_Functions[GetNextFunction(this)](this); +} + +void V3TennisBallProjectile_OnTick(Entity* this) { + V3TennisBallProjectile_Actions[this->action](this); +} + +ASM_FUNC("asm/non_matching/v3TennisBallProjectile/sub_080ACA68.inc", void sub_080ACA68(Entity* this)) + +void V3TennisBallProjectile_Init(Entity* this) { + this->action = 1; + this->direction = 0x10; + this->height.HALF.HI = 0xfffc; + this->attachedEntity = NULL; + InitializeAnimation(this, 7); + SoundReq(SFX_199); +} + +void V3TennisBallProjectile_Action1(Entity* this) { + sub_080AF090(this); + GetNextFrame(this); + if (sub_080A7EB0(this) != 0) { + DeleteThisEntity(); + } +} + +void V3TennisBallProjectile_Action2(Entity* this) { + sub_080AF090(this); + if (this->collisions != 0) { + DeleteThisEntity(); + } + GetNextFrame(this); + sub_080ACB90(this); + if (sub_080A7EB0(this) != 0) { + DeleteThisEntity(); + } +} + +ASM_FUNC("asm/non_matching/v3TennisBallProjectile/sub_080ACB40.inc", void sub_080ACB40(Entity* this)) + +void sub_080ACB90(Entity* this) { + Entity* parent = this->parent; + if ((this->x.HALF.HI == parent->x.HALF.HI) && (this->y.HALF.HI <= parent->y.HALF.HI)) { + parent->field_0xf = 1; + CreateFx(this, 0x1f, 0x40); + EnqueueSFX(SFX_ITEM_GLOVES_KNOCKBACK); + DeleteThisEntity(); + } +} + +void (*const V3TennisBallProjectile_Functions[])(Entity*) = { + V3TennisBallProjectile_OnTick, sub_080ACA68, DeleteEntity, DeleteEntity, DeleteEntity, + V3TennisBallProjectile_OnTick, +}; +void (*const V3TennisBallProjectile_Actions[])(Entity*) = { + V3TennisBallProjectile_Init, + V3TennisBallProjectile_Action1, + V3TennisBallProjectile_Action2, +}; diff --git a/src/projectile/projectile7.c b/src/projectile/windProjectile.c similarity index 78% rename from src/projectile/projectile7.c rename to src/projectile/windProjectile.c index 9d59e7eb..92308f75 100644 --- a/src/projectile/projectile7.c +++ b/src/projectile/windProjectile.c @@ -3,20 +3,20 @@ #include "functions.h" #include "audio.h" -extern void (*const gUnk_0812979C[])(Entity*); - extern s32 sub_080AF090(Entity*); extern s32 sub_080A7EB0(Entity*); extern void sub_08016AD2(Entity*); -void Projectile7(Entity* this) { +extern void (*const WindProjectile_Actions[])(Entity*); + +void WindProjectile(Entity* this) { if (GetNextFunction(this) != 0) { DeleteThisEntity(); } - gUnk_0812979C[this->action](this); + WindProjectile_Actions[this->action](this); } -void sub_080A8A90(Entity* this) { +void WindProjectile_Init(Entity* this) { if (this->type == 0) { this->action = 1; InitializeAnimation(this, this->direction >> 3); @@ -27,11 +27,9 @@ void sub_080A8A90(Entity* this) { } } -void sub_080A8AC8(Entity* this) { +void WindProjectile_Action1(Entity* this) { u32 direction; - Entity* parent; - - parent = this->parent; + Entity* parent = this->parent; if (parent == NULL) { DeleteEntity(this); } else { @@ -59,7 +57,7 @@ void sub_080A8AC8(Entity* this) { } } -void sub_080A8B38(Entity* this) { +void WindProjectile_Action2(Entity* this) { GetNextFrame(this); if (sub_080AF090(this) != 0) { if (sub_080A7EB0(this) != 0) { @@ -74,9 +72,16 @@ void sub_080A8B38(Entity* this) { } } -void sub_080A8B78(Entity* this) { +void WindProjectile_Action3(Entity* this) { GetNextFrame(this); if ((this->frames.all & 0x80) != 0) { DeleteEntity(this); } } + +void (*const WindProjectile_Actions[])(Entity*) = { + WindProjectile_Init, + WindProjectile_Action1, + WindProjectile_Action2, + WindProjectile_Action3, +}; diff --git a/src/projectile/projectile1D.c b/src/projectile/winder.c similarity index 62% rename from src/projectile/projectile1D.c rename to src/projectile/winder.c index f79079e3..19e35248 100644 --- a/src/projectile/projectile1D.c +++ b/src/projectile/winder.c @@ -3,15 +3,18 @@ #include "functions.h" #include "utils.h" -extern void (*const gUnk_0812A6B4[])(Entity*); +extern void (*const Winder_Actions[])(Entity*); +extern const u8 gUnk_0812A6BC[]; +extern const u8 gUnk_0812A6C4[]; + void sub_080AB9DC(Entity*); -void Projectile1D(Entity* this) { - gUnk_0812A6B4[this->action](this); +void Winder(Entity* this) { + Winder_Actions[this->action](this); sub_080AB9DC(this); } -void sub_080AB8E8(Entity* this) { +void Winder_Init(Entity* this) { Entity* entity; u16* puVar3; s32 index; @@ -41,7 +44,7 @@ void sub_080AB8E8(Entity* this) { } } -ASM_FUNC("asm/non_matching/projectile1D/sub_080AB950.inc", void sub_080AB950(Entity* this)) +ASM_FUNC("asm/non_matching/winder/sub_080AB950.inc", void sub_080AB950(Entity* this)) void sub_080AB9DC(Entity* this) { MemCopy(&this->field_0x6c, &this->field_0x68, 0x1c); @@ -49,4 +52,15 @@ void sub_080AB9DC(Entity* this) { this->field_0x86.HWORD = this->y.HALF.HI; } -ASM_FUNC("asm/non_matching/projectile1D/sub_080AB9FC.inc", void sub_080AB9FC(Entity* this)) +ASM_FUNC("asm/non_matching/winder/sub_080AB9FC.inc", void sub_080AB9FC(Entity* this)) + +void (*const Winder_Actions[])(Entity*) = { + Winder_Init, + sub_080AB950, +}; +const u8 gUnk_0812A6BC[] = { + 8, 24, 0, 16, 8, 24, 0, 16, +}; +const u8 gUnk_0812A6C4[] = { + 14, 0, 0, 224, 224, 0, 0, 14, +}; From 00a57e3b368c98ccf5f2f45f89b1353523445940 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Thu, 21 Oct 2021 10:36:44 +0200 Subject: [PATCH 53/64] 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 54/64] 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 55/64] 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 56/64] 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 f180caeb6f45743998e6cba2cd974d9a2a0f5cdf Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Wed, 20 Oct 2021 23:49:40 +0200 Subject: [PATCH 57/64] Add missing JP pointers --- asm/code_0801D79C.s | 8 ++++---- asm/figurineDevice.s | 4 ++-- asm/windTribeTeleporter.s | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/asm/code_0801D79C.s b/asm/code_0801D79C.s index a4614d00..caed4ae5 100644 --- a/asm/code_0801D79C.s +++ b/asm/code_0801D79C.s @@ -2202,14 +2202,14 @@ _0801E8BC: bl sub_0801E810 cmp r0, #0 bne _0801E93A - ldr r1, _0801E8F4 @ =0x080C9A5C + ldr r1, _0801E8F4 @ =gUnk_080FC3E4 lsls r0, r4, #3 adds r0, r0, r1 ldrb r1, [r0, #4] lsls r0, r1, #2 adds r0, r0, r1 lsls r0, r0, #2 - ldr r1, _0801E8F8 @ =0x080FDFD0 + ldr r1, _0801E8F8 @ =gUnk_080FE320 adds r2, r0, r1 ldrb r0, [r2, #0x10] cmp r0, #4 @@ -2220,8 +2220,8 @@ _0801E8BC: ldr r0, [r0] mov pc, r0 .align 2, 0 -_0801E8F4: .4byte 0x080C9A5C -_0801E8F8: .4byte 0x080FDFD0 +_0801E8F4: .4byte gUnk_080C9CBC +_0801E8F8: .4byte gUnk_080FE320 _0801E8FC: .4byte _0801E900 _0801E900: @ jump table .4byte _0801E914 @ case 0 diff --git a/asm/figurineDevice.s b/asm/figurineDevice.s index 5a4e395b..34c9e3d2 100644 --- a/asm/figurineDevice.s +++ b/asm/figurineDevice.s @@ -1098,7 +1098,7 @@ sub_08088160: @ 0x08088160 push {r4, lr} adds r2, r0, #0 lsls r1, r1, #3 - ldr r0, _08087FB0 @ =0x080FC094 + ldr r0, _08087FB0 @ =gUnk_080FC3E4 adds r1, r1, r0 movs r4, #0 adds r0, r2, #0 @@ -1116,7 +1116,7 @@ sub_08088160: @ 0x08088160 beq _08087FBC b _0808806A .align 2, 0 -_08087FB0: .4byte 0x080FC094 +_08087FB0: .4byte gUnk_080FC3E4 _08087FB4: cmp r0, #0x20 beq _08087FCA diff --git a/asm/windTribeTeleporter.s b/asm/windTribeTeleporter.s index 6a9d2e91..8398e743 100644 --- a/asm/windTribeTeleporter.s +++ b/asm/windTribeTeleporter.s @@ -201,12 +201,12 @@ _080A0E50: lsls r0, r1, #2 adds r0, r0, r1 lsls r0, r0, #2 - ldr r1, _080A0E70 @ =0x0813AA18 + ldr r1, _080A0E70 @ =gUnk_0813ADEC adds r0, r0, r1 bl DoExitTransition b _080A0E8C .align 2, 0 -_080A0E70: .4byte 0x0813AA18 +_080A0E70: .4byte gUnk_0813ADEC _080A0E74: ldr r0, _080A0E90 @ =0x030010A0 ldr r0, [r0] From 195c62d64118bac156d23ab373ac4baa1a3af5ac Mon Sep 17 00:00:00 2001 From: Henny022p Date: Sat, 23 Oct 2021 02:10:42 +0200 Subject: [PATCH 58/64] 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 59/64] 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)) { From fd131b8694af752343f58f2cc7b46156398b1038 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Sun, 24 Oct 2021 16:29:35 +0200 Subject: [PATCH 60/64] extracted gItemMenuTable --- asm/code_080A3BD0.s | 20 +++--- data/data_08127280.s | 154 ------------------------------------------ data/data_08128BF4.s | 156 +++++++++++++++++++++++++++++++++++++++++++ linker.ld | 2 + src/itemMenuTable.c | 12 ++++ 5 files changed, 180 insertions(+), 164 deletions(-) create mode 100644 data/data_08128BF4.s create mode 100644 src/itemMenuTable.c diff --git a/asm/code_080A3BD0.s b/asm/code_080A3BD0.s index e32620f3..1c7d7683 100644 --- a/asm/code_080A3BD0.s +++ b/asm/code_080A3BD0.s @@ -3196,7 +3196,7 @@ sub_080A529C: @ 0x080A529C str r0, [r1, #0xc] ldrb r4, [r1, #3] lsls r1, r4, #3 - ldr r0, _080A52D8 @ =gUnk_08128B64 + ldr r0, _080A52D8 @ =gItemMenuTable adds r1, r1, r0 ldr r0, _080A52DC @ =gInput ldrh r2, [r0, #2] @@ -3214,7 +3214,7 @@ sub_080A529C: @ 0x080A529C .align 2, 0 _080A52D0: .4byte gMenu _080A52D4: .4byte gUnk_08128BF4 -_080A52D8: .4byte gUnk_08128B64 +_080A52D8: .4byte gItemMenuTable _080A52DC: .4byte gInput _080A52E0: cmp r4, #0x10 @@ -3347,7 +3347,7 @@ _080A4BC8: ldrb r0, [r2] cmp r0, #0 beq _080A4C68 - ldr r0, _080A4C20 @ =gUnk_08128B64 + ldr r0, _080A4C20 @ =gItemMenuTable adds r1, r6, r0 ldrb r0, [r1, #6] ldr r3, _080A4C14EU @ =gOamCmd @@ -3384,7 +3384,7 @@ _080A4BF4: _080A4C14EU: .4byte gOamCmd _080A4C18: .4byte gSave _080A4C1C: .4byte gChooseFileState -_080A4C20: .4byte gUnk_08128B64 +_080A4C20: .4byte gItemMenuTable _080A4C24: .4byte gBombBagSizes _080A4C28: cmp r3, #0xa @@ -3442,7 +3442,7 @@ _080A4C68: movs r1, #0x11 _080A4C8E: lsls r0, r1, #3 - ldr r1, _080A4D54EU @ =gUnk_08128B64 + ldr r1, _080A4D54EU @ =gItemMenuTable mov r8, r1 adds r1, r0, r1 mov r4, sb @@ -3534,7 +3534,7 @@ _080A4D44: .4byte gOamCmd _080A4D48: .4byte gUnk_080FDFD8 _080A4D4C: .4byte 0x00000141 _080A4D50EU: .4byte gChooseFileState -_080A4D54EU: .4byte gUnk_08128B64 +_080A4D54EU: .4byte gItemMenuTable _080A4D58: .4byte gMain _080A4D5C: .4byte gSave .else @@ -3569,7 +3569,7 @@ _080A53B4: ldrb r0, [r2] cmp r0, #0 beq _080A5456 - ldr r0, _080A540C @ =gUnk_08128B64 + ldr r0, _080A540C @ =gItemMenuTable adds r1, r6, r0 ldrb r0, [r1, #6] ldr r3, _080A5400 @ =gOamCmd @@ -3606,7 +3606,7 @@ _080A53E0: _080A5400: .4byte gOamCmd _080A5404: .4byte gSave _080A5408: .4byte gMenu -_080A540C: .4byte gUnk_08128B64 +_080A540C: .4byte gItemMenuTable _080A5410: .4byte gBombBagSizes _080A5414: cmp r3, #0xa @@ -3665,7 +3665,7 @@ _080A5456: movs r1, #0x11 _080A547C: lsls r0, r1, #3 - ldr r1, _080A553C @ =gUnk_08128B64 + ldr r1, _080A553C @ =gItemMenuTable mov r8, r1 adds r1, r0, r1 mov r4, sb @@ -3755,7 +3755,7 @@ _080A552C: .4byte gQuiverSizes _080A5530: .4byte gOamCmd _080A5534: .4byte gUnk_080FDFD8 _080A5538: .4byte gMenu -_080A553C: .4byte gUnk_08128B64 +_080A553C: .4byte gItemMenuTable _080A5540: .4byte gMain _080A5544: .4byte 0x000001FB _080A5548: .4byte gSave diff --git a/data/data_08127280.s b/data/data_08127280.s index f8d5fc0d..5733d217 100644 --- a/data/data_08127280.s +++ b/data/data_08127280.s @@ -733,157 +733,3 @@ gUnk_08128B48:: @ 08128B48 gUnk_08128B50:: @ 08128B50 .incbin "baserom.gba", 0x128B50, 0x0000014 - -gUnk_08128B64:: @ 08128B64 - .incbin "baserom.gba", 0x128B64, 0x0000090 - -gUnk_08128BF4:: @ 08128BF4 - .incbin "baserom.gba", 0x128BF4, 0x0000004 - -gUnk_08128BF8:: @ 08128BF8 - .4byte sub_080A5594 - .4byte sub_080A56A0 - -gUnk_08128C00:: @ 08128C00 - .incbin "baserom.gba", 0x128C00, 0x0000004 - -gUnk_08128C04:: @ 08128C04 - .incbin "baserom.gba", 0x128C04, 0x0000010 - -gUnk_08128C14:: @ 08128C14 - .incbin "baserom.gba", 0x128C14, 0x0000080 - -gUnk_08128C94:: @ 08128C94 - .incbin "baserom.gba", 0x128C94, 0x0000080 - -gUnk_08128D14:: @ 08128D14 - .4byte sub_080A59AC - .4byte sub_080A59C8 - .4byte sub_080A5A54 - .4byte sub_080A5A90 - -gUnk_08128D24:: @ 08128D24 - .4byte sub_080A5AF4 - .4byte sub_080A5B34 - .4byte sub_080A5BB8 - -gUnk_08128D30:: @ 08128D30 - .4byte sub_080A5C44 - .4byte sub_080A5C9C - -gUnk_08128D38:: @ 08128D38 - .incbin "baserom.gba", 0x128D38, 0x0000004 - -gUnk_08128D3C:: @ 08128D3C - .incbin "baserom.gba", 0x128D3C, 0x0000007 - -gUnk_08128D43:: @ 08128D43 - .incbin "baserom.gba", 0x128D43, 0x000000E - -gUnk_08128D51:: @ 08128D51 - .incbin "baserom.gba", 0x128D51, 0x0000007 - -gUnk_08128D58:: @ 08128D58 - .4byte sub_080A6024 - .4byte sub_080A6044 - -gUnk_08128D60:: @ 08128D60 - .incbin "baserom.gba", 0x128D60, 0x0000010 - -gUnk_08128D70:: @ 08128D70 - .incbin "baserom.gba", 0x128D70, 0x0000040 - -gUnk_08128DB0:: @ 08128DB0 - .4byte sub_080A6108 - .4byte sub_080A612C - -gUnk_08128DB8:: @ 08128DB8 - .incbin "baserom.gba", 0x128DB8, 0x0000004 - -gUnk_08128DBC:: @ 08128DBC - .incbin "baserom.gba", 0x128DBC, 0x0000010 - -gUnk_08128DCC:: @ 08128DCC - .4byte sub_080A6290 - .4byte sub_080A62E0 - -gUnk_08128DD4:: @ 08128DD4 - .incbin "baserom.gba", 0x128DD4, 0x0000004 - -gUnk_08128DD8:: @ 08128DD8 - .incbin "baserom.gba", 0x128DD8, 0x0000010 - -gUnk_08128DE8:: @ 08128DE8 - .incbin "baserom.gba", 0x128DE8, 0x0000088 - -gUnk_08128E70:: @ 08128E70 - .4byte sub_080A6534 - .4byte sub_080A65AC - -gUnk_08128E78:: @ 08128E78 - .4byte sub_080A6650 - .4byte sub_080A667C - -gUnk_08128E80:: @ 08128E80 - .incbin "baserom.gba", 0x128E80, 0x0000004 - -gUnk_08128E84:: @ 08128E84 - .incbin "baserom.gba", 0x128E84, 0x0000010 - -gUnk_08128E94:: @ 08128E94 - .incbin "baserom.gba", 0x128E94, 0x0000088 - -gUnk_08128F1C:: @ 08128F1C - .4byte sub_080A6B04 - .4byte sub_080A6C1C - -gUnk_08128F24:: @ 08128F24 - .4byte sub_080A6CA8 - .4byte sub_080A6CD8 - .4byte sub_080A6DD0 - .4byte sub_080A6DF8 - .4byte sub_080A6E44 - -gUnk_08128F38:: @ 08128F38 - .incbin "baserom.gba", 0x128F38, 0x0000014 - -gUnk_08128F4C:: @ 08128F4C - .incbin "baserom.gba", 0x128F4C, 0x000000C - -gUnk_08128F58:: @ 08128F58 - .incbin "baserom.gba", 0x128F58, 0x0000050 - -gUnk_08128FA8:: @ 08128FA8 - .incbin "baserom.gba", 0x128FA8, 0x0000018 - -gUnk_08128FC0:: @ 08128FC0 - .incbin "baserom.gba", 0x128FC0, 0x0000018 - -gUnk_08128FD8:: @ 08128FD8 - .incbin "baserom.gba", 0x128FD8, 0x0000018 - -gUnk_08128FF0:: @ 08128FF0 - .incbin "baserom.gba", 0x128FF0, 0x0000014 - -gUnk_08129004:: @ 08129004 - .incbin "baserom.gba", 0x129004, 0x0000018 - -gUnk_0812901C:: @ 0812901C - .4byte sub_080A7250 - .4byte sub_080A7328 - .4byte sub_080A7528 - .4byte sub_080A73A8 - .4byte sub_080A74C8 - -gUnk_08129030:: @ 08129030 - .4byte sub_080A71DC - .4byte sub_080A4EA0 - .4byte sub_080A71DC - .4byte sub_080A64FC - .4byte DrawKinstoneMenu - .4byte sub_08051E68 - .4byte sub_0804AB54 - .4byte sub_080A45A4 - .4byte sub_08054870 - .4byte sub_080A6C74 - .4byte sub_080A6AB8 diff --git a/data/data_08128BF4.s b/data/data_08128BF4.s new file mode 100644 index 00000000..42050d2e --- /dev/null +++ b/data/data_08128BF4.s @@ -0,0 +1,156 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + .align 2 + +gUnk_08128BF4:: @ 08128BF4 + .incbin "baserom.gba", 0x128BF4, 0x0000004 + +gUnk_08128BF8:: @ 08128BF8 + .4byte sub_080A5594 + .4byte sub_080A56A0 + +gUnk_08128C00:: @ 08128C00 + .incbin "baserom.gba", 0x128C00, 0x0000004 + +gUnk_08128C04:: @ 08128C04 + .incbin "baserom.gba", 0x128C04, 0x0000010 + +gUnk_08128C14:: @ 08128C14 + .incbin "baserom.gba", 0x128C14, 0x0000080 + +gUnk_08128C94:: @ 08128C94 + .incbin "baserom.gba", 0x128C94, 0x0000080 + +gUnk_08128D14:: @ 08128D14 + .4byte sub_080A59AC + .4byte sub_080A59C8 + .4byte sub_080A5A54 + .4byte sub_080A5A90 + +gUnk_08128D24:: @ 08128D24 + .4byte sub_080A5AF4 + .4byte sub_080A5B34 + .4byte sub_080A5BB8 + +gUnk_08128D30:: @ 08128D30 + .4byte sub_080A5C44 + .4byte sub_080A5C9C + +gUnk_08128D38:: @ 08128D38 + .incbin "baserom.gba", 0x128D38, 0x0000004 + +gUnk_08128D3C:: @ 08128D3C + .incbin "baserom.gba", 0x128D3C, 0x0000007 + +gUnk_08128D43:: @ 08128D43 + .incbin "baserom.gba", 0x128D43, 0x000000E + +gUnk_08128D51:: @ 08128D51 + .incbin "baserom.gba", 0x128D51, 0x0000007 + +gUnk_08128D58:: @ 08128D58 + .4byte sub_080A6024 + .4byte sub_080A6044 + +gUnk_08128D60:: @ 08128D60 + .incbin "baserom.gba", 0x128D60, 0x0000010 + +gUnk_08128D70:: @ 08128D70 + .incbin "baserom.gba", 0x128D70, 0x0000040 + +gUnk_08128DB0:: @ 08128DB0 + .4byte sub_080A6108 + .4byte sub_080A612C + +gUnk_08128DB8:: @ 08128DB8 + .incbin "baserom.gba", 0x128DB8, 0x0000004 + +gUnk_08128DBC:: @ 08128DBC + .incbin "baserom.gba", 0x128DBC, 0x0000010 + +gUnk_08128DCC:: @ 08128DCC + .4byte sub_080A6290 + .4byte sub_080A62E0 + +gUnk_08128DD4:: @ 08128DD4 + .incbin "baserom.gba", 0x128DD4, 0x0000004 + +gUnk_08128DD8:: @ 08128DD8 + .incbin "baserom.gba", 0x128DD8, 0x0000010 + +gUnk_08128DE8:: @ 08128DE8 + .incbin "baserom.gba", 0x128DE8, 0x0000088 + +gUnk_08128E70:: @ 08128E70 + .4byte sub_080A6534 + .4byte sub_080A65AC + +gUnk_08128E78:: @ 08128E78 + .4byte sub_080A6650 + .4byte sub_080A667C + +gUnk_08128E80:: @ 08128E80 + .incbin "baserom.gba", 0x128E80, 0x0000004 + +gUnk_08128E84:: @ 08128E84 + .incbin "baserom.gba", 0x128E84, 0x0000010 + +gUnk_08128E94:: @ 08128E94 + .incbin "baserom.gba", 0x128E94, 0x0000088 + +gUnk_08128F1C:: @ 08128F1C + .4byte sub_080A6B04 + .4byte sub_080A6C1C + +gUnk_08128F24:: @ 08128F24 + .4byte sub_080A6CA8 + .4byte sub_080A6CD8 + .4byte sub_080A6DD0 + .4byte sub_080A6DF8 + .4byte sub_080A6E44 + +gUnk_08128F38:: @ 08128F38 + .incbin "baserom.gba", 0x128F38, 0x0000014 + +gUnk_08128F4C:: @ 08128F4C + .incbin "baserom.gba", 0x128F4C, 0x000000C + +gUnk_08128F58:: @ 08128F58 + .incbin "baserom.gba", 0x128F58, 0x0000050 + +gUnk_08128FA8:: @ 08128FA8 + .incbin "baserom.gba", 0x128FA8, 0x0000018 + +gUnk_08128FC0:: @ 08128FC0 + .incbin "baserom.gba", 0x128FC0, 0x0000018 + +gUnk_08128FD8:: @ 08128FD8 + .incbin "baserom.gba", 0x128FD8, 0x0000018 + +gUnk_08128FF0:: @ 08128FF0 + .incbin "baserom.gba", 0x128FF0, 0x0000014 + +gUnk_08129004:: @ 08129004 + .incbin "baserom.gba", 0x129004, 0x0000018 + +gUnk_0812901C:: @ 0812901C + .4byte sub_080A7250 + .4byte sub_080A7328 + .4byte sub_080A7528 + .4byte sub_080A73A8 + .4byte sub_080A74C8 + +gUnk_08129030:: @ 08129030 + .4byte sub_080A71DC + .4byte sub_080A4EA0 + .4byte sub_080A71DC + .4byte sub_080A64FC + .4byte DrawKinstoneMenu + .4byte sub_08051E68 + .4byte sub_0804AB54 + .4byte sub_080A45A4 + .4byte sub_08054870 + .4byte sub_080A6C74 + .4byte sub_080A6AB8 diff --git a/linker.ld b/linker.ld index 6835372f..b1030355 100644 --- a/linker.ld +++ b/linker.ld @@ -1653,6 +1653,8 @@ data/const/object/object1D.o(.rodata); data/const/demoScreen.o(.rodata); #endif data/data_08127280.o(.rodata); + src/itemMenuTable.o(.rodata); + data/data_08128BF4.o(.rodata); data/const/playerItem/playerItemSword.o(.rodata); data/data_08129320.o(.rodata); src/projectile/darkNutSwordSlash.o(.rodata); diff --git a/src/itemMenuTable.c b/src/itemMenuTable.c new file mode 100644 index 00000000..a7bd6b6d --- /dev/null +++ b/src/itemMenuTable.c @@ -0,0 +1,12 @@ +#include "global.h" + +const u8 gItemMenuTable[] = { 0x0c, 0x04, 0x03, 0x01, 0x01, 0x0c, 0x42, 0x33, 0x0d, 0x05, 0x00, 0x02, 0x01, 0x10, 0x66, + 0x33, 0x0f, 0x06, 0x01, 0x03, 0x01, 0x14, 0x8a, 0x33, 0x10, 0x07, 0x02, 0x00, 0x01, 0x15, + 0xae, 0x33, 0x00, 0x08, 0x07, 0x05, 0x01, 0x16, 0x42, 0x4b, 0x01, 0x09, 0x04, 0x06, 0x01, + 0x17, 0x66, 0x4b, 0x02, 0x0a, 0x05, 0x07, 0x01, 0x00, 0x8a, 0x4b, 0x03, 0x0b, 0x06, 0x04, + 0x01, 0x00, 0xae, 0x4b, 0x04, 0x0c, 0x0b, 0x09, 0x01, 0x00, 0x42, 0x63, 0x05, 0x0d, 0x08, + 0x0a, 0x01, 0x00, 0x66, 0x63, 0x06, 0x0f, 0x09, 0x0b, 0x01, 0x00, 0x8a, 0x63, 0x07, 0x10, + 0x0a, 0x08, 0x01, 0x00, 0xae, 0x63, 0x08, 0x00, 0x10, 0x0d, 0x01, 0x00, 0x42, 0x7b, 0x09, + 0x01, 0x0c, 0x0e, 0x01, 0x00, 0x5a, 0x7b, 0x09, 0x01, 0x0d, 0x0f, 0x01, 0x00, 0x72, 0x7b, + 0x0a, 0x02, 0x0e, 0x10, 0x01, 0x00, 0x8a, 0x7b, 0x0b, 0x03, 0x0f, 0x0c, 0x03, 0x00, 0xb5, + 0x75, 0x0b, 0x03, 0x0f, 0x0c, 0x05, 0x00, 0xb5, 0x75 }; From 814a2822a60b78bdfd3ae17e03072865498e2249 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Sun, 24 Oct 2021 16:47:04 +0200 Subject: [PATCH 61/64] properly typed gItemMenuTable --- src/itemMenuTable.c | 61 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/src/itemMenuTable.c b/src/itemMenuTable.c index a7bd6b6d..04622c7a 100644 --- a/src/itemMenuTable.c +++ b/src/itemMenuTable.c @@ -1,12 +1,53 @@ #include "global.h" -const u8 gItemMenuTable[] = { 0x0c, 0x04, 0x03, 0x01, 0x01, 0x0c, 0x42, 0x33, 0x0d, 0x05, 0x00, 0x02, 0x01, 0x10, 0x66, - 0x33, 0x0f, 0x06, 0x01, 0x03, 0x01, 0x14, 0x8a, 0x33, 0x10, 0x07, 0x02, 0x00, 0x01, 0x15, - 0xae, 0x33, 0x00, 0x08, 0x07, 0x05, 0x01, 0x16, 0x42, 0x4b, 0x01, 0x09, 0x04, 0x06, 0x01, - 0x17, 0x66, 0x4b, 0x02, 0x0a, 0x05, 0x07, 0x01, 0x00, 0x8a, 0x4b, 0x03, 0x0b, 0x06, 0x04, - 0x01, 0x00, 0xae, 0x4b, 0x04, 0x0c, 0x0b, 0x09, 0x01, 0x00, 0x42, 0x63, 0x05, 0x0d, 0x08, - 0x0a, 0x01, 0x00, 0x66, 0x63, 0x06, 0x0f, 0x09, 0x0b, 0x01, 0x00, 0x8a, 0x63, 0x07, 0x10, - 0x0a, 0x08, 0x01, 0x00, 0xae, 0x63, 0x08, 0x00, 0x10, 0x0d, 0x01, 0x00, 0x42, 0x7b, 0x09, - 0x01, 0x0c, 0x0e, 0x01, 0x00, 0x5a, 0x7b, 0x09, 0x01, 0x0d, 0x0f, 0x01, 0x00, 0x72, 0x7b, - 0x0a, 0x02, 0x0e, 0x10, 0x01, 0x00, 0x8a, 0x7b, 0x0b, 0x03, 0x0f, 0x0c, 0x03, 0x00, 0xb5, - 0x75, 0x0b, 0x03, 0x0f, 0x0c, 0x05, 0x00, 0xb5, 0x75 }; +typedef enum { + SWORD, + GUST_JAR, + CANE, + BOOMERANG, + SHIELD, + MOLE_MITTS, + LANTERN, + BOMBS, + PEGASUS_BOOTS, + ROCS_CAPE, + OCARINA, + BOW, + BOTTLE0, + BOTTLE1, + BOTTLE2, + BOTTLE3, + SAVE_BUTTON, +} ItemMenuTableSlot; + +typedef struct { + u8 up; + u8 down; + u8 left; + u8 right; + u8 type; + u8 unk0; + u8 x; + u8 y; +} ItemMenuTableEntry; + +const ItemMenuTableEntry gItemMenuTable[] = { + [SWORD] = { BOTTLE0, SHIELD, BOOMERANG, GUST_JAR, 0x01, 0x0c, 0x42, 0x33 }, + [GUST_JAR] = { BOTTLE1, MOLE_MITTS, SWORD, CANE, 0x01, 0x10, 0x66, 0x33 }, + [CANE] = { BOTTLE3, LANTERN, GUST_JAR, BOOMERANG, 0x01, 0x14, 0x8a, 0x33 }, + [BOOMERANG] = { SAVE_BUTTON, BOMBS, CANE, SWORD, 0x01, 0x15, 0xae, 0x33 }, + [SHIELD] = { SWORD, PEGASUS_BOOTS, BOMBS, MOLE_MITTS, 0x01, 0x16, 0x42, 0x4b }, + [MOLE_MITTS] = { GUST_JAR, ROCS_CAPE, SHIELD, LANTERN, 0x01, 0x17, 0x66, 0x4b }, + [LANTERN] = { CANE, OCARINA, MOLE_MITTS, BOMBS, 0x01, 0x00, 0x8a, 0x4b }, + [BOMBS] = { BOOMERANG, BOW, LANTERN, SHIELD, 0x01, 0x00, 0xae, 0x4b }, + [PEGASUS_BOOTS] = { SHIELD, BOTTLE0, BOW, ROCS_CAPE, 0x01, 0x00, 0x42, 0x63 }, + [ROCS_CAPE] = { MOLE_MITTS, BOTTLE1, PEGASUS_BOOTS, OCARINA, 0x01, 0x00, 0x66, 0x63 }, + [OCARINA] = { LANTERN, BOTTLE3, ROCS_CAPE, BOW, 0x01, 0x00, 0x8a, 0x63 }, + [BOW] = { BOMBS, SAVE_BUTTON, OCARINA, PEGASUS_BOOTS, 0x01, 0x00, 0xae, 0x63 }, + [BOTTLE0] = { PEGASUS_BOOTS, SWORD, SAVE_BUTTON, BOTTLE1, 0x01, 0x00, 0x42, 0x7b }, + [BOTTLE1] = { ROCS_CAPE, GUST_JAR, BOTTLE0, BOTTLE2, 0x01, 0x00, 0x5a, 0x7b }, + [BOTTLE2] = { ROCS_CAPE, GUST_JAR, BOTTLE1, BOTTLE3, 0x01, 0x00, 0x72, 0x7b }, + [BOTTLE3] = { OCARINA, CANE, BOTTLE2, SAVE_BUTTON, 0x01, 0x00, 0x8a, 0x7b }, + [SAVE_BUTTON] = { BOW, BOOMERANG, BOTTLE3, BOTTLE0, 0x03, 0x00, 0xb5, 0x75 }, + { BOW, BOOMERANG, BOTTLE3, BOTTLE0, 0x05, 0x00, 0xb5, 0x75 }, +}; From d2936fcabbdf34103e04b15f3f9738b9a151cfc4 Mon Sep 17 00:00:00 2001 From: Revo Date: Sun, 24 Oct 2021 17:22:39 -0400 Subject: [PATCH 62/64] Update progress to 45% to reflect website --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 02008aaa..ba3a6bb0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # The Legend of Zelda: The Minish Cap -**Progress:** [⬛⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 30% +**Progress:** [⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 45% ```diff - WARNING! - From 79223bae31a09a6bb706d51aa5f01568c29dc284 Mon Sep 17 00:00:00 2001 From: notyourav <65437533+notyourav@users.noreply.github.com> Date: Sun, 24 Oct 2021 18:35:48 -0700 Subject: [PATCH 63/64] Update README.md --- README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ba3a6bb0..d1f7f29f 100644 --- a/README.md +++ b/README.md @@ -5,19 +5,21 @@ ```diff - WARNING! - -The ROM this repository builds cannot be 'shifted', primarily due to some hardcoded pointers which have yet -to be dumped. Thus this repository is currently in an experimental and research phase and cannot yet be used -traditionally as a source code base for general changes. +This repository is a work in progress, and while it can be used to make certain changes, it's still +constantly evolving. If you use it for modding purposes in its current state, please be aware that +the codebase can drastically change at any time. Also note that some parts of the ROM may not be +'shiftable' yet, so modifying them could be difficult at this point. ``` This is a WIP decompilation of The Legend of Zelda: The Minish Cap. The purpose of the project is to recreate a source code base for the game from scratch, using information found inside the game along with static and/or dynamic analysis. -The only build currently supported is `The Legend of Zelda: The Minish Cap (USA)`, but other versions are planned to be supported. - -It builds the following ROM: +It can target the following ROMs: * [**tmc.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1841) `sha1: b4bd50e4131b027c334547b4524e2dbbd4227130` +* [**tmc_jp.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1719) `sha1: 6c5404a1effb17f481f352181d0f1c61a2765c5d` +* [**tmc_eu.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1734) `sha1: cff199b36ff173fb6faf152653d1bccf87c26fb7` +* [**tmc_demo.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=x051) `sha1: 63fcad218f9047b6a9edbb68c98bd0dec322d7a1` **Note:** This repository does not include any of the assets necessary to build the ROM. A prior copy of the game is required to extract the needed assets. From 7f37362a1c333333ecbedfdb53acf921394fc728 Mon Sep 17 00:00:00 2001 From: theo3 Date: Mon, 25 Oct 2021 00:23:40 -0700 Subject: [PATCH 64/64] decompile script functions --- asm/code_0807F0D8.s | 1615 ------------------------------------------- asmdiff.sh | 4 +- include/functions.h | 35 +- include/utils.h | 2 + src/npc/din.c | 2 - src/script.c | 624 +++++++++++++++++ 6 files changed, 652 insertions(+), 1630 deletions(-) diff --git a/asm/code_0807F0D8.s b/asm/code_0807F0D8.s index 74d902aa..3c9a2658 100644 --- a/asm/code_0807F0D8.s +++ b/asm/code_0807F0D8.s @@ -5,1621 +5,6 @@ .text - thumb_func_start sub_0807F0D8 -sub_0807F0D8: @ 0x0807F0D8 - ldr r0, _0807F0E8 @ =gInput - ldrh r2, [r0, #2] - rsbs r0, r2, #0 - orrs r0, r2 - lsrs r0, r0, #0x1f - str r0, [r1, #0x14] - bx lr - .align 2, 0 -_0807F0E8: .4byte gInput - - thumb_func_start sub_0807F0EC -sub_0807F0EC: @ 0x0807F0EC - push {r4, lr} - adds r4, r1, #0 - bl Random - ldr r1, [r4, #4] - bl __modsi3 - str r0, [r4, #4] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0807F100 -sub_0807F100: @ 0x0807F100 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - bl Random - movs r2, #6 - adds r1, r0, #0 - ands r1, r2 - strb r1, [r4, #0x14] - ldr r2, _0807F124 @ =gUnk_0811E750 - lsrs r0, r0, #8 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - strb r0, [r5, #0x1a] - pop {r4, r5, pc} - .align 2, 0 -_0807F124: .4byte gUnk_0811E750 - - thumb_func_start sub_0807F128 -sub_0807F128: @ 0x0807F128 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - bl Random - ldr r2, _0807F150 @ =gUnk_0811E758 - movs r3, #7 - adds r1, r0, #0 - ands r1, r3 - adds r1, r1, r2 - ldrb r1, [r1] - strb r1, [r4, #0x14] - ldr r1, _0807F154 @ =gUnk_0811E760 - lsrs r0, r0, #8 - ands r0, r3 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r5, #0x1a] - pop {r4, r5, pc} - .align 2, 0 -_0807F150: .4byte gUnk_0811E758 -_0807F154: .4byte gUnk_0811E760 - - thumb_func_start sub_0807F158 -sub_0807F158: @ 0x0807F158 - push {lr} - adds r2, r0, #0 - adds r2, #0x38 - movs r1, #1 - strb r1, [r2] - bl UpdateSpriteForCollisionLayer - pop {pc} - - thumb_func_start sub_0807F168 -sub_0807F168: @ 0x0807F168 - push {lr} - ldr r0, _0807F17C @ =gPlayerEntity - adds r2, r0, #0 - adds r2, #0x38 - movs r1, #1 - strb r1, [r2] - bl UpdateSpriteForCollisionLayer - pop {pc} - .align 2, 0 -_0807F17C: .4byte gPlayerEntity - - thumb_func_start sub_0807F180 -sub_0807F180: @ 0x0807F180 - push {lr} - adds r2, r0, #0 - adds r2, #0x38 - movs r1, #2 - strb r1, [r2] - bl UpdateSpriteForCollisionLayer - pop {pc} - - thumb_func_start sub_0807F190 -sub_0807F190: @ 0x0807F190 - push {lr} - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #4 - bl DoFade - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F1A0 -sub_0807F1A0: @ 0x0807F1A0 - push {r4, lr} - ldr r3, _0807F1BC @ =gPlayerEntity - movs r4, #0x2e - ldrsh r2, [r3, r4] - movs r4, #0x32 - ldrsh r3, [r3, r4] - bl sub_0807DEDC - ldr r2, _0807F1C0 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, pc} - .align 2, 0 -_0807F1BC: .4byte gPlayerEntity -_0807F1C0: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F1C4 -sub_0807F1C4: @ 0x0807F1C4 - push {lr} - ldr r2, _0807F1D8 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0807F1E0 - ldr r0, _0807F1DC @ =0x00000459 - b _0807F1E4 - .align 2, 0 -_0807F1D8: .4byte gPlayerState -_0807F1DC: .4byte 0x00000459 -_0807F1E0: - movs r0, #0xde - lsls r0, r0, #1 -_0807F1E4: - strh r0, [r2, #8] - pop {pc} - - thumb_func_start sub_0807F1E8 -sub_0807F1E8: @ 0x0807F1E8 - push {lr} - ldr r2, _0807F1FC @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0807F204 - ldr r0, _0807F200 @ =0x0000045A - b _0807F206 - .align 2, 0 -_0807F1FC: .4byte gPlayerState -_0807F200: .4byte 0x0000045A -_0807F204: - ldr r0, _0807F20C @ =0x000002BD -_0807F206: - strh r0, [r2, #8] - pop {pc} - .align 2, 0 -_0807F20C: .4byte 0x000002BD - - thumb_func_start sub_0807F210 -sub_0807F210: @ 0x0807F210 - push {lr} - ldr r2, _0807F224 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0807F22C - ldr r0, _0807F228 @ =0x0000041C - b _0807F22E - .align 2, 0 -_0807F224: .4byte gPlayerState -_0807F228: .4byte 0x0000041C -_0807F22C: - ldr r0, _0807F234 @ =0x0000080C -_0807F22E: - strh r0, [r2, #8] - pop {pc} - .align 2, 0 -_0807F234: .4byte 0x0000080C - - thumb_func_start sub_0807F238 -sub_0807F238: @ 0x0807F238 - ldr r2, _0807F240 @ =gPlayerState - ldr r0, [r1, #4] - strh r0, [r2, #8] - bx lr - .align 2, 0 -_0807F240: .4byte gPlayerState - - thumb_func_start sub_0807F244 -sub_0807F244: @ 0x0807F244 - push {r4, r5, lr} - ldr r0, [r1, #4] - ldr r4, _0807F298 @ =0x0000FFFF - lsrs r5, r0, #0x10 - ands r4, r0 - cmp r4, #1 - blo _0807F28C - cmp r4, #4 - bls _0807F25A - cmp r4, #6 - bne _0807F28C -_0807F25A: - movs r4, #1 - movs r0, #2 - bl GetInventoryValue - cmp r0, #0 - beq _0807F268 - movs r4, #2 -_0807F268: - movs r0, #3 - bl GetInventoryValue - cmp r0, #0 - beq _0807F274 - movs r4, #3 -_0807F274: - movs r0, #4 - bl GetInventoryValue - cmp r0, #0 - beq _0807F280 - movs r4, #4 -_0807F280: - movs r0, #6 - bl GetInventoryValue - cmp r0, #0 - beq _0807F28C - movs r4, #6 -_0807F28C: - adds r0, r4, #0 - adds r1, r5, #0 - bl ForceEquipItem - pop {r4, r5, pc} - .align 2, 0 -_0807F298: .4byte 0x0000FFFF - - thumb_func_start sub_0807F29C -sub_0807F29C: @ 0x0807F29C - push {lr} - ldr r0, [r1, #4] - bl sub_0805ED14 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F2A8 -sub_0807F2A8: @ 0x0807F2A8 - push {lr} - ldr r0, _0807F2C0 @ =gPlayerState - adds r0, #0x9c - ldr r0, [r0] - cmp r0, #0 - bne _0807F2C8 - ldr r2, _0807F2C4 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - b _0807F2CE - .align 2, 0 -_0807F2C0: .4byte gPlayerState -_0807F2C4: .4byte gActiveScriptInfo -_0807F2C8: - ldr r1, _0807F2D0 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807F2CE: - pop {pc} - .align 2, 0 -_0807F2D0: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F2D4 -sub_0807F2D4: @ 0x0807F2D4 - push {lr} - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _0807F2F8 - ldr r2, _0807F2F4 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - b _0807F2FC - .align 2, 0 -_0807F2F4: .4byte gActiveScriptInfo -_0807F2F8: - ldr r0, _0807F300 @ =gActiveScriptInfo - strb r1, [r0, #6] -_0807F2FC: - pop {pc} - .align 2, 0 -_0807F300: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F304 -sub_0807F304: @ 0x0807F304 - push {lr} - ldr r0, _0807F324 @ =gPlayerEntity - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _0807F32C - ldr r2, _0807F328 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - b _0807F330 - .align 2, 0 -_0807F324: .4byte gPlayerEntity -_0807F328: .4byte gActiveScriptInfo -_0807F32C: - ldr r0, _0807F334 @ =gActiveScriptInfo - strb r1, [r0, #6] -_0807F330: - pop {pc} - .align 2, 0 -_0807F334: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F338 -sub_0807F338: @ 0x0807F338 - movs r1, #0 - str r1, [r0, #0x48] - ldrb r2, [r0, #0x17] - movs r1, #0xfe - ands r1, r2 - strb r1, [r0, #0x17] - bx lr - .align 2, 0 - - thumb_func_start sub_0807F348 -sub_0807F348: @ 0x0807F348 - push {lr} - movs r1, #2 - bl sub_0805E3A0 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F354 -sub_0807F354: @ 0x0807F354 - push {lr} - movs r1, #6 - bl sub_0805E3A0 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F360 -sub_0807F360: @ 0x0807F360 - push {lr} - movs r1, #3 - bl sub_0805E3A0 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F36C -sub_0807F36C: @ 0x0807F36C - push {r4, r5, lr} - adds r5, r0, #0 - movs r1, #0x41 - movs r2, #0 - bl CreateFx - adds r4, r0, #0 - cmp r4, #0 - beq _0807F3C2 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2] - ldr r3, _0807F3C4 @ =0xFFF80000 - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - bl Random - movs r5, #1 - ands r0, r5 - cmp r0, #0 - beq _0807F3B0 - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r4, #0x18] -_0807F3B0: - bl Random - ands r0, r5 - cmp r0, #0 - beq _0807F3C2 - ldrb r0, [r4, #0x18] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x18] -_0807F3C2: - pop {r4, r5, pc} - .align 2, 0 -_0807F3C4: .4byte 0xFFF80000 - - thumb_func_start sub_0807F3C8 -sub_0807F3C8: @ 0x0807F3C8 - push {lr} - bl sub_0807F36C - movs r0, #0xe5 - bl SoundReq - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F3D8 -sub_0807F3D8: @ 0x0807F3D8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - ldr r1, [r1, #4] - adds r1, r1, r0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - adds r4, #0x80 - strh r0, [r4] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0807F3F8 -sub_0807F3F8: @ 0x0807F3F8 - push {lr} - ldr r0, _0807F408 @ =gPlayerEntity - movs r2, #0x18 - rsbs r2, r2, #0 - movs r1, #8 - bl CreateSpeechBubbleExclamationMark - pop {pc} - .align 2, 0 -_0807F408: .4byte gPlayerEntity - - thumb_func_start sub_0807F40C -sub_0807F40C: @ 0x0807F40C - push {lr} - ldr r0, _0807F41C @ =gPlayerEntity - movs r2, #0x18 - rsbs r2, r2, #0 - movs r1, #8 - bl CreateSpeechBubbleQuestionMark - pop {pc} - .align 2, 0 -_0807F41C: .4byte gPlayerEntity - - thumb_func_start sub_0807F420 -sub_0807F420: @ 0x0807F420 - push {lr} - ldr r2, [r1, #4] - ldrb r0, [r1, #4] - lsrs r2, r2, #8 - lsls r2, r2, #0x18 - lsrs r2, r2, #0x18 - adds r1, r2, #0 - bl MenuFadeIn - pop {pc} - - thumb_func_start sub_0807F434 -sub_0807F434: @ 0x0807F434 - push {lr} - adds r3, r0, #0 - adds r3, #0x39 - movs r2, #0 - ldrsb r2, [r3, r2] - cmp r2, #1 - beq _0807F44C - cmp r2, #2 - beq _0807F44C - movs r0, #0 - str r0, [r1, #4] - b _0807F452 -_0807F44C: - movs r0, #0 - strb r0, [r3] - str r2, [r1, #4] -_0807F452: - ldr r2, _0807F460 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {pc} - .align 2, 0 -_0807F460: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F464 -sub_0807F464: @ 0x0807F464 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r5, r1, #0 - ldrb r0, [r5, #0x18] - cmp r0, #0 - bne _0807F4BC - adds r0, #1 - movs r3, #0 - strb r0, [r5, #0x18] - ldr r0, [r5, #8] - movs r1, #2 - orrs r0, r1 - str r0, [r5, #8] - ldr r2, [r5, #4] - ldr r1, _0807F4A8 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, r0, r2 - strh r0, [r5, #0x1e] - ldrh r0, [r4, #0x32] - strh r0, [r5, #0x22] - movs r6, #0x2e - ldrsh r0, [r4, r6] - ldrh r1, [r1, #6] - subs r0, r0, r1 - cmp r2, r0 - ble _0807F4AC - movs r0, #0x40 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x14] - movs r0, #0x80 - ands r0, r1 - movs r1, #2 - b _0807F4B8 - .align 2, 0 -_0807F4A8: .4byte gRoomControls -_0807F4AC: - movs r0, #0xc0 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x14] - movs r0, #0x80 - ands r0, r1 - movs r1, #6 -_0807F4B8: - orrs r0, r1 - strb r0, [r4, #0x14] -_0807F4BC: - movs r0, #0x24 - ldrsh r1, [r4, r0] - ldrb r2, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F62C - movs r2, #0x1e - ldrsh r1, [r5, r2] - movs r6, #0x2e - ldrsh r0, [r4, r6] - subs r1, r1, r0 - ldrb r2, [r4, #0x15] - movs r0, #0x80 - ands r0, r2 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - lsls r0, r0, #0x18 - eors r1, r0 - cmp r1, #0 - bge _0807F4EA - ldrh r0, [r5, #0x1e] - strh r0, [r4, #0x2e] - b _0807F4F0 -_0807F4EA: - ldr r1, _0807F4F4 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807F4F0: - pop {r4, r5, r6, pc} - .align 2, 0 -_0807F4F4: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F4F8 -sub_0807F4F8: @ 0x0807F4F8 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - ldrb r0, [r5, #0x18] - cmp r0, #0 - bne _0807F548 - adds r0, #1 - strb r0, [r5, #0x18] - ldr r0, [r5, #8] - movs r1, #2 - orrs r0, r1 - str r0, [r5, #8] - ldr r2, [r5, #4] - ldrh r0, [r4, #0x2e] - strh r0, [r5, #0x1e] - ldr r1, _0807F538 @ =gRoomControls - ldrh r0, [r1, #8] - adds r0, r0, r2 - strh r0, [r5, #0x22] - movs r3, #0x32 - ldrsh r0, [r4, r3] - ldrh r1, [r1, #8] - subs r0, r0, r1 - cmp r2, r0 - ble _0807F53C - movs r0, #0x80 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x14] - ands r0, r1 - movs r1, #4 - orrs r0, r1 - b _0807F546 - .align 2, 0 -_0807F538: .4byte gRoomControls -_0807F53C: - movs r0, #0 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x14] - movs r0, #0x80 - ands r0, r1 -_0807F546: - strb r0, [r4, #0x14] -_0807F548: - movs r0, #0x24 - ldrsh r1, [r4, r0] - ldrb r2, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F62C - movs r2, #0x22 - ldrsh r1, [r5, r2] - movs r3, #0x32 - ldrsh r0, [r4, r3] - subs r1, r1, r0 - ldrb r2, [r4, #0x15] - movs r0, #0x80 - ands r0, r2 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - lsls r0, r0, #0x18 - eors r1, r0 - cmp r1, #0 - blt _0807F576 - ldrh r0, [r5, #0x22] - strh r0, [r4, #0x32] - b _0807F57C -_0807F576: - ldr r1, _0807F580 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807F57C: - pop {r4, r5, pc} - .align 2, 0 -_0807F580: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F584 -sub_0807F584: @ 0x0807F584 - ldr r0, _0807F590 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - str r0, [r1, #4] - bx lr - .align 2, 0 -_0807F590: .4byte gPlayerEntity - - thumb_func_start sub_0807F594 -sub_0807F594: @ 0x0807F594 - push {lr} - ldr r0, _0807F5A8 @ =gPlayerState - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #0 - beq _0807F5A6 - ldr r1, _0807F5AC @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807F5A6: - pop {pc} - .align 2, 0 -_0807F5A8: .4byte gPlayerState -_0807F5AC: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F5B0 -sub_0807F5B0: @ 0x0807F5B0 - ldr r0, _0807F5BC @ =gPlayerState - ldr r1, [r1, #4] - adds r0, #0x27 - strb r1, [r0] - bx lr - .align 2, 0 -_0807F5BC: .4byte gPlayerState - - thumb_func_start sub_0807F5C0 -sub_0807F5C0: @ 0x0807F5C0 - push {r4, lr} - ldr r4, _0807F620 @ =gRoomControls - ldr r1, [r4, #0x30] - cmp r1, #0 - beq _0807F62E - movs r2, #0x2e - ldrsh r0, [r1, r2] - adds r2, r0, #0 - subs r2, #0x78 - movs r3, #0x32 - ldrsh r0, [r1, r3] - adds r3, r0, #0 - subs r3, #0x50 - ldrh r1, [r4, #6] - cmp r2, r1 - bge _0807F5E2 - adds r2, r1, #0 -_0807F5E2: - ldrh r0, [r4, #0x1e] - adds r0, r1, r0 - subs r0, #0xf0 - cmp r2, r0 - ble _0807F5EE - adds r2, r0, #0 -_0807F5EE: - ldrh r1, [r4, #8] - cmp r3, r1 - bge _0807F5F6 - adds r3, r1, #0 -_0807F5F6: - ldrh r0, [r4, #0x20] - adds r0, r1, r0 - subs r0, #0xa0 - cmp r3, r0 - ble _0807F602 - adds r3, r0, #0 -_0807F602: - movs r1, #0xa - ldrsh r0, [r4, r1] - cmp r2, r0 - bne _0807F628 - movs r2, #0xc - ldrsh r0, [r4, r2] - cmp r3, r0 - bne _0807F628 - ldr r2, _0807F624 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - b _0807F62E - .align 2, 0 -_0807F620: .4byte gRoomControls -_0807F624: .4byte gActiveScriptInfo -_0807F628: - ldr r1, _0807F630 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807F62E: - pop {r4, pc} - .align 2, 0 -_0807F630: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F634 -sub_0807F634: @ 0x0807F634 - push {lr} - ldr r3, [r1, #4] - ldrh r1, [r3] - ldrh r2, [r3, #2] - ldrh r3, [r3, #4] - bl sub_0801DFB4 - ldr r0, _0807F64C @ =gPlayerState - adds r0, #0x8b - movs r1, #3 - strb r1, [r0] - pop {pc} - .align 2, 0 -_0807F64C: .4byte gPlayerState - - thumb_func_start sub_0807F650 -sub_0807F650: @ 0x0807F650 - push {r4, lr} - adds r4, r0, #0 - bl sub_08002632 - ldr r1, _0807F678 @ =gUnk_08001A7C - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldrh r1, [r0] - ldrh r2, [r0, #2] - ldrh r3, [r0, #4] - adds r0, r4, #0 - bl sub_0801DFB4 - ldr r0, _0807F67C @ =gPlayerState - adds r0, #0x8b - movs r1, #3 - strb r1, [r0] - pop {r4, pc} - .align 2, 0 -_0807F678: .4byte gUnk_08001A7C -_0807F67C: .4byte gPlayerState - - thumb_func_start sub_0807F680 -sub_0807F680: @ 0x0807F680 - push {lr} - adds r2, r1, #0 - movs r3, #0 - ldr r0, _0807F6A8 @ =gPlayerEntity - movs r1, #0x2e - ldrsh r0, [r0, r1] - ldr r1, _0807F6AC @ =gRoomControls - ldrh r1, [r1, #6] - subs r0, r0, r1 - ldrh r1, [r2, #4] - cmp r0, r1 - ble _0807F69A - movs r3, #1 -_0807F69A: - str r3, [r2, #0x14] - ldr r2, _0807F6B0 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {pc} - .align 2, 0 -_0807F6A8: .4byte gPlayerEntity -_0807F6AC: .4byte gRoomControls -_0807F6B0: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F6B4 -sub_0807F6B4: @ 0x0807F6B4 - push {lr} - adds r2, r1, #0 - movs r3, #0 - ldr r0, _0807F6DC @ =gPlayerEntity - movs r1, #0x32 - ldrsh r0, [r0, r1] - ldr r1, _0807F6E0 @ =gRoomControls - ldrh r1, [r1, #8] - subs r0, r0, r1 - ldrh r1, [r2, #4] - cmp r0, r1 - ble _0807F6CE - movs r3, #1 -_0807F6CE: - str r3, [r2, #0x14] - ldr r2, _0807F6E4 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {pc} - .align 2, 0 -_0807F6DC: .4byte gPlayerEntity -_0807F6E0: .4byte gRoomControls -_0807F6E4: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F6E8 -sub_0807F6E8: @ 0x0807F6E8 - ldr r2, _0807F6F4 @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, [r1, #4] - orrs r0, r1 - str r0, [r2, #0x30] - bx lr - .align 2, 0 -_0807F6F4: .4byte gPlayerState - - thumb_func_start sub_0807F6F8 -sub_0807F6F8: @ 0x0807F6F8 - ldr r2, _0807F704 @ =gPlayerState - ldr r1, [r1, #4] - ldr r0, [r2, #0x30] - bics r0, r1 - str r0, [r2, #0x30] - bx lr - .align 2, 0 -_0807F704: .4byte gPlayerState - - thumb_func_start sub_0807F708 -sub_0807F708: @ 0x0807F708 - push {lr} - ldr r1, [r1, #4] - bl ShowNPCDialogue - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F714 -sub_0807F714: @ 0x0807F714 - push {lr} - adds r1, r0, #0 - ldr r2, _0807F734 @ =gUnk_08114F30 - ldrb r3, [r1, #0x19] - lsrs r0, r3, #6 - adds r0, r0, r2 - ldrb r2, [r0] - lsls r2, r2, #6 - movs r0, #0x3f - ands r0, r3 - orrs r0, r2 - strb r0, [r1, #0x19] - adds r0, r1, #0 - bl ResolveEntityOnTop - pop {pc} - .align 2, 0 -_0807F734: .4byte gUnk_08114F30 - - thumb_func_start sub_0807F738 -sub_0807F738: @ 0x0807F738 - push {lr} - adds r1, r0, #0 - ldr r2, _0807F758 @ =gUnk_08114F34 - ldrb r3, [r1, #0x19] - lsrs r0, r3, #6 - adds r0, r0, r2 - ldrb r2, [r0] - lsls r2, r2, #6 - movs r0, #0x3f - ands r0, r3 - orrs r0, r2 - strb r0, [r1, #0x19] - adds r0, r1, #0 - bl sub_0806FAD8 - pop {pc} - .align 2, 0 -_0807F758: .4byte gUnk_08114F34 - - thumb_func_start sub_0807F75C -sub_0807F75C: @ 0x0807F75C - push {r4, lr} - ldr r2, [r1, #4] - ldr r3, _0807F774 @ =gPlayerEntity - ldr r1, _0807F778 @ =gRoomControls - asrs r0, r2, #0x10 - ldrh r4, [r1, #6] - adds r0, r0, r4 - strh r0, [r3, #0x2e] - ldrh r0, [r1, #8] - adds r0, r0, r2 - strh r0, [r3, #0x32] - pop {r4, pc} - .align 2, 0 -_0807F774: .4byte gPlayerEntity -_0807F778: .4byte gRoomControls - - thumb_func_start sub_0807F77C -sub_0807F77C: @ 0x0807F77C - push {lr} - ldr r0, [r1, #0x14] - cmp r0, #0 - beq _0807F786 - movs r0, #1 -_0807F786: - str r0, [r1, #4] - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F78C -sub_0807F78C: @ 0x0807F78C - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r5, [r1, #4] - cmp r5, #0 - bne _0807F79A - ldr r0, _0807F7BC @ =gRoomVars - ldrb r5, [r0, #6] -_0807F79A: - adds r0, r5, #0 - bl GetSaleItemConfirmMessageID - adds r4, r0, #0 - adds r0, r5, #0 - bl GetItemPrice - adds r5, r0, #0 - adds r0, r4, #0 - adds r1, r6, #0 - bl TextboxNoOverlap - ldr r0, _0807F7C0 @ =gTextBox - lsls r5, r5, #0x10 - lsrs r5, r5, #0x10 - str r5, [r0, #0x10] - pop {r4, r5, r6, pc} - .align 2, 0 -_0807F7BC: .4byte gRoomVars -_0807F7C0: .4byte gTextBox - - thumb_func_start sub_0807F7C4 -sub_0807F7C4: @ 0x0807F7C4 - push {r4, lr} - adds r4, r1, #0 - ldr r0, [r4, #4] - cmp r0, #0 - bne _0807F7D2 - ldr r0, _0807F7F4 @ =gRoomVars - ldrb r0, [r0, #6] -_0807F7D2: - bl GetItemPrice - movs r2, #0 - ldr r1, _0807F7F8 @ =gSave - adds r1, #0xc0 - ldrh r1, [r1] - cmp r0, r1 - bgt _0807F7E4 - movs r2, #1 -_0807F7E4: - str r2, [r4, #0x14] - ldr r2, _0807F7FC @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, pc} - .align 2, 0 -_0807F7F4: .4byte gRoomVars -_0807F7F8: .4byte gSave -_0807F7FC: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F800 -sub_0807F800: @ 0x0807F800 - push {r4, lr} - ldr r4, [r1, #4] - cmp r4, #0 - bne _0807F80C - ldr r0, _0807F834 @ =gRoomVars - ldrb r4, [r0, #6] -_0807F80C: - adds r0, r4, #0 - bl GetItemPrice - rsbs r0, r0, #0 - bl ModRupees - adds r0, r4, #0 - movs r1, #0 - movs r2, #0 - bl sub_080A7C18 - ldr r1, _0807F834 @ =gRoomVars - movs r0, #0 - strb r0, [r1, #6] - ldr r2, _0807F838 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, pc} - .align 2, 0 -_0807F834: .4byte gRoomVars -_0807F838: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F83C -sub_0807F83C: @ 0x0807F83C - push {lr} - bl sub_08079184 - pop {pc} - - thumb_func_start sub_0807F844 -sub_0807F844: @ 0x0807F844 - push {lr} - ldr r1, _0807F850 @ =gRoomControls - str r0, [r1, #0x30] - bl sub_080809D4 - pop {pc} - .align 2, 0 -_0807F850: .4byte gRoomControls - - thumb_func_start sub_0807F854 -sub_0807F854: @ 0x0807F854 - push {lr} - ldr r1, [r1, #4] - lsrs r2, r1, #0x10 - movs r0, #3 - ands r2, r0 - ldr r3, _0807F870 @ =0x0000FFFF - ands r3, r1 - cmp r2, #4 - bhi _0807F8B4 - lsls r0, r2, #2 - ldr r1, _0807F874 @ =_0807F878 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807F870: .4byte 0x0000FFFF -_0807F874: .4byte _0807F878 -_0807F878: @ jump table - .4byte _0807F88C @ case 0 - .4byte _0807F88C @ case 1 - .4byte _0807F898 @ case 2 - .4byte _0807F8A4 @ case 3 - .4byte _0807F8B0 @ case 4 -_0807F88C: - ldr r0, _0807F894 @ =gTextBox - str r3, [r0, #0x10] - b _0807F8B4 - .align 2, 0 -_0807F894: .4byte gTextBox -_0807F898: - ldr r0, _0807F8A0 @ =gTextBox - str r3, [r0, #0x14] - b _0807F8B4 - .align 2, 0 -_0807F8A0: .4byte gTextBox -_0807F8A4: - ldr r0, _0807F8AC @ =gTextBox - str r3, [r0, #0x18] - b _0807F8B4 - .align 2, 0 -_0807F8AC: .4byte gTextBox -_0807F8B0: - ldr r0, _0807F8B8 @ =gTextBox - str r3, [r0, #0x1c] -_0807F8B4: - pop {pc} - .align 2, 0 -_0807F8B8: .4byte gTextBox - - thumb_func_start sub_0807F8BC -sub_0807F8BC: @ 0x0807F8BC - push {r4, lr} - adds r4, r1, #0 - bl sub_080040A8 - cmp r0, #0 - beq _0807F8CA - movs r0, #1 -_0807F8CA: - str r0, [r4, #0x14] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0807F8D0 -sub_0807F8D0: @ 0x0807F8D0 - push {lr} - ldr r1, [r1, #4] - bl sub_08003FC4 - ldr r2, _0807F8E4 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {pc} - .align 2, 0 -_0807F8E4: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F8E8 -sub_0807F8E8: @ 0x0807F8E8 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r1, #0xa6 - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent - adds r2, r0, #0 - cmp r2, #0 - beq _0807F912 - str r4, [r2, #0x50] - ldr r0, [r5, #4] - ldr r1, _0807F914 @ =0x000003FF - ands r0, r1 - movs r3, #0x80 - lsls r3, r3, #8 - adds r1, r3, #0 - adds r2, #0x86 - orrs r0, r1 - strh r0, [r2] -_0807F912: - pop {r4, r5, pc} - .align 2, 0 -_0807F914: .4byte 0x000003FF - - thumb_func_start sub_0807F918 -sub_0807F918: @ 0x0807F918 - push {lr} - ldr r0, [r1, #4] - bl PutItemOnSlot - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F924 -sub_0807F924: @ 0x0807F924 - push {lr} - bl sub_0807879C - pop {pc} - - thumb_func_start sub_0807F92C -sub_0807F92C: @ 0x0807F92C - push {lr} - bl sub_080787C0 - pop {pc} - - thumb_func_start sub_0807F934 -sub_0807F934: @ 0x0807F934 - push {lr} - bl sub_080787B4 - pop {pc} - - thumb_func_start sub_0807F93C -sub_0807F93C: @ 0x0807F93C - push {lr} - ldr r2, [r1, #4] - lsrs r1, r2, #8 - movs r3, #0xff - ands r1, r3 - ands r2, r3 - bl CreateSpeechBubbleSleep - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F950 -sub_0807F950: @ 0x0807F950 - push {lr} - sub sp, #4 - movs r0, #2 - str r0, [sp] - movs r0, #6 - movs r1, #0x56 - movs r2, #6 - movs r3, #0 - bl FindEntity - cmp r0, #0 - beq _0807F96C - bl DeleteEntity -_0807F96C: - add sp, #4 - pop {pc} - - thumb_func_start sub_0807F970 -sub_0807F970: @ 0x0807F970 - push {lr} - adds r2, r1, #0 - movs r3, #0 - ldr r1, _0807F988 @ =gCurrentTextBox - ldr r0, [r2, #4] - ldrh r1, [r1, #0x28] - cmp r0, r1 - bne _0807F982 - movs r3, #1 -_0807F982: - str r3, [r2, #0x14] - pop {pc} - .align 2, 0 -_0807F988: .4byte gCurrentTextBox - - thumb_func_start sub_0807F98C -sub_0807F98C: @ 0x0807F98C - ldr r1, [r1, #4] - str r1, [r0, #0x34] - bx lr - .align 2, 0 - - thumb_func_start sub_0807F994 -sub_0807F994: @ 0x0807F994 - ldr r2, [r1, #4] - asrs r1, r2, #0x10 - adds r3, r0, #0 - adds r3, #0x62 - strb r1, [r3] - adds r0, #0x63 - strb r2, [r0] - bx lr - - thumb_func_start sub_0807F9A4 -sub_0807F9A4: @ 0x0807F9A4 - push {lr} - ldr r0, _0807F9BC @ =gPlayerState - adds r0, #0xa8 - ldrb r0, [r0] - subs r0, #5 - cmp r0, #0x17 - bhi _0807FA30 - lsls r0, r0, #2 - ldr r1, _0807F9C0 @ =_0807F9C4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807F9BC: .4byte gPlayerState -_0807F9C0: .4byte _0807F9C4 -_0807F9C4: @ jump table - .4byte _0807FA24 @ case 0 - .4byte _0807FA30 @ case 1 - .4byte _0807FA24 @ case 2 - .4byte _0807FA24 @ case 3 - .4byte _0807FA30 @ case 4 - .4byte _0807FA24 @ case 5 - .4byte _0807FA24 @ case 6 - .4byte _0807FA24 @ case 7 - .4byte _0807FA24 @ case 8 - .4byte _0807FA24 @ case 9 - .4byte _0807FA24 @ case 10 - .4byte _0807FA24 @ case 11 - .4byte _0807FA24 @ case 12 - .4byte _0807FA24 @ case 13 - .4byte _0807FA24 @ case 14 - .4byte _0807FA24 @ case 15 - .4byte _0807FA24 @ case 16 - .4byte _0807FA24 @ case 17 - .4byte _0807FA24 @ case 18 - .4byte _0807FA24 @ case 19 - .4byte _0807FA30 @ case 20 - .4byte _0807FA30 @ case 21 - .4byte _0807FA24 @ case 22 - .4byte _0807FA24 @ case 23 -_0807FA24: - ldr r1, _0807FA2C @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] - b _0807FA3A - .align 2, 0 -_0807FA2C: .4byte gActiveScriptInfo -_0807FA30: - ldr r2, _0807FA3C @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] -_0807FA3A: - pop {pc} - .align 2, 0 -_0807FA3C: .4byte gActiveScriptInfo - - thumb_func_start sub_0807FA40 -sub_0807FA40: @ 0x0807FA40 - push {lr} - ldr r0, _0807FA58 @ =gPlayerState - adds r0, #0xa8 - ldrb r0, [r0] - subs r0, #5 - cmp r0, #0x17 - bhi _0807FACC - lsls r0, r0, #2 - ldr r1, _0807FA5C @ =_0807FA60 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807FA58: .4byte gPlayerState -_0807FA5C: .4byte _0807FA60 -_0807FA60: @ jump table - .4byte _0807FAC0 @ case 0 - .4byte _0807FACC @ case 1 - .4byte _0807FAC0 @ case 2 - .4byte _0807FAC0 @ case 3 - .4byte _0807FACC @ case 4 - .4byte _0807FAC0 @ case 5 - .4byte _0807FAC0 @ case 6 - .4byte _0807FAC0 @ case 7 - .4byte _0807FAC0 @ case 8 - .4byte _0807FAC0 @ case 9 - .4byte _0807FAC0 @ case 10 - .4byte _0807FAC0 @ case 11 - .4byte _0807FAC0 @ case 12 - .4byte _0807FAC0 @ case 13 - .4byte _0807FACC @ case 14 - .4byte _0807FAC0 @ case 15 - .4byte _0807FAC0 @ case 16 - .4byte _0807FAC0 @ case 17 - .4byte _0807FAC0 @ case 18 - .4byte _0807FAC0 @ case 19 - .4byte _0807FACC @ case 20 - .4byte _0807FACC @ case 21 - .4byte _0807FAC0 @ case 22 - .4byte _0807FAC0 @ case 23 -_0807FAC0: - ldr r1, _0807FAC8 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] - b _0807FAD6 - .align 2, 0 -_0807FAC8: .4byte gActiveScriptInfo -_0807FACC: - ldr r2, _0807FAD8 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] -_0807FAD6: - pop {pc} - .align 2, 0 -_0807FAD8: .4byte gActiveScriptInfo - - thumb_func_start sub_0807FADC -sub_0807FADC: @ 0x0807FADC - push {r4, lr} - adds r2, r0, #0 - adds r4, r1, #0 - ldrb r0, [r4, #0x18] - cmp r0, #1 - beq _0807FB06 - cmp r0, #1 - bgt _0807FAF2 - cmp r0, #0 - beq _0807FAF8 - b _0807FB1C -_0807FAF2: - cmp r0, #2 - beq _0807FB16 - b _0807FB1C -_0807FAF8: - movs r0, #1 - strb r0, [r4, #0x18] - ldr r1, [r4, #4] - adds r0, r2, #0 - bl sub_0808C650 - b _0807FB1C -_0807FB06: - bl sub_0808C67C - cmp r0, #0 - beq _0807FB1C - ldrb r0, [r4, #0x18] - adds r0, #1 - strb r0, [r4, #0x18] - b _0807FB1C -_0807FB16: - bl sub_0808C688 - b _0807FB22 -_0807FB1C: - ldr r1, _0807FB24 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807FB22: - pop {r4, pc} - .align 2, 0 -_0807FB24: .4byte gActiveScriptInfo - - thumb_func_start sub_0807FB28 -sub_0807FB28: @ 0x0807FB28 - push {r4, lr} - adds r4, r1, #0 - ldrb r0, [r4, #0x18] - cmp r0, #0 - bne _0807FB3A - ldr r0, _0807FB54 @ =0x00007FFF - movs r1, #1 - bl sub_0801D7BC -_0807FB3A: - ldrb r0, [r4, #0x18] - adds r0, #1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x18] - ldr r0, [r4, #4] - cmp r1, r0 - blo _0807FB58 - movs r0, #0 - movs r1, #0 - bl sub_0801D7BC - b _0807FB5E - .align 2, 0 -_0807FB54: .4byte 0x00007FFF -_0807FB58: - ldr r1, _0807FB60 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807FB5E: - pop {r4, pc} - .align 2, 0 -_0807FB60: .4byte gActiveScriptInfo - - thumb_func_start sub_0807FB64 -sub_0807FB64: @ 0x0807FB64 - ldr r0, _0807FB70 @ =gPlayerEntity - ldr r1, [r1, #4] - adds r0, #0x3d - strb r1, [r0] - bx lr - .align 2, 0 -_0807FB70: .4byte gPlayerEntity - - thumb_func_start sub_0807FB74 -sub_0807FB74: @ 0x0807FB74 - ldr r0, _0807FB8C @ =gPlayerState - adds r0, #0x26 - movs r1, #0 - strb r1, [r0] - ldr r1, _0807FB90 @ =gPlayerEntity - adds r1, #0x3c - ldrb r2, [r1] - movs r0, #0xfb - ands r0, r2 - strb r0, [r1] - bx lr - .align 2, 0 -_0807FB8C: .4byte gPlayerState -_0807FB90: .4byte gPlayerEntity - - thumb_func_start sub_0807FB94 -sub_0807FB94: @ 0x0807FB94 - push {lr} - movs r0, #4 - bl InitScreen - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807FBA0 -sub_0807FBA0: @ 0x0807FBA0 - ldr r2, _0807FBB0 @ =gRoomControls - ldrh r1, [r2, #0xa] - adds r1, #0x78 - strh r1, [r0, #0x2e] - ldrh r1, [r2, #0xc] - adds r1, #0x50 - strh r1, [r0, #0x32] - bx lr - .align 2, 0 -_0807FBB0: .4byte gRoomControls - - thumb_func_start sub_0807FBB4 -sub_0807FBB4: @ 0x0807FBB4 - ldr r2, _0807FBC0 @ =gPlayerState - ldrb r1, [r2, #0x1a] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x1a] - bx lr - .align 2, 0 -_0807FBC0: .4byte gPlayerState - - thumb_func_start sub_0807FBC4 -sub_0807FBC4: @ 0x0807FBC4 - push {lr} - bl sub_0805E4A0 - pop {pc} - - thumb_func_start sub_0807FBCC -sub_0807FBCC: @ 0x0807FBCC - push {lr} - bl sub_0805E4CC - pop {pc} - - thumb_func_start sub_0807FBD4 -sub_0807FBD4: @ 0x0807FBD4 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x24 - ldrsh r1, [r4, r0] - ldrb r2, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F62C - adds r0, r4, #0 - bl sub_080040A8 - cmp r0, #0 - beq _0807FBF4 - ldr r1, _0807FBF8 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807FBF4: - pop {r4, pc} - .align 2, 0 -_0807FBF8: .4byte gActiveScriptInfo - -.ifndef EU - thumb_func_start sub_0807FBFC -sub_0807FBFC: @ 0x0807FBFC - ldr r3, _0807FC20 @ =gSave - adds r0, r3, #0 - adds r0, #0xb2 - movs r1, #0 - strb r1, [r0] - adds r0, #0x12 - movs r2, #0 - strh r1, [r0] - subs r0, #0x11 - strb r2, [r0] - adds r0, #0x13 - strh r1, [r0] - subs r0, #0xc - strb r2, [r0] - adds r0, #0xe - strh r1, [r0] - bx lr - .align 2, 0 -_0807FC20: .4byte gSave -.endif - -.ifdef USA - thumb_func_start sub_0807FC24 -sub_0807FC24: @ 0x0807FC24 - push {lr} - ldr r0, _0807FC3C @ =gRoomControls - ldrb r0, [r0, #5] - movs r1, #0xd1 - cmp r0, #1 - bne _0807FC32 - movs r1, #0xcf -_0807FC32: - adds r0, r1, #0 - bl SetLocalFlag - pop {pc} - .align 2, 0 -_0807FC3C: .4byte gRoomControls -.else -.ifdef DEMO @ TODO deduplicate - thumb_func_start sub_0807FC24 -sub_0807FC24: @ 0x0807FC24 - push {lr} - ldr r0, _0807FC3C @ =gRoomControls - ldrb r0, [r0, #5] - movs r1, #0xd1 - cmp r0, #1 - bne _0807FC32 - movs r1, #0xcf -_0807FC32: - adds r0, r1, #0 - bl SetLocalFlag - pop {pc} - .align 2, 0 -_0807FC3C: .4byte gRoomControls -.endif -.endif - thumb_func_start UpdateScroll UpdateScroll: @ 0xUpdateScroll push {lr} diff --git a/asmdiff.sh b/asmdiff.sh index 54cac7b5..bf6a907a 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,7 +1,7 @@ #!/bin/bash -buildname=tmc_eu -baserom=baserom_eu +buildname=tmc +baserom=baserom OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" diff --git a/include/functions.h b/include/functions.h index 45e0f294..ad271fa5 100644 --- a/include/functions.h +++ b/include/functions.h @@ -9,6 +9,7 @@ #include "player.h" #include "room.h" #include "structures.h" +#include "script.h" // Identified - to be sorted into header files extern void ShowNPCDialogue(Entity*, Dialog*); @@ -42,7 +43,21 @@ extern void ResetPlayer(void); extern u32 IsItemEquipped(u32); extern void DeleteManager(Manager*); extern bool32 CheckPlayerInRegion(u32 centerX, u32 centerY, u32 radiusX, u32 radiusY); +extern Entity* CreateProjectileWithParent(Entity*, u8, u8); +extern u32 GetBottleContaining(u32); extern u32 GetTileTypeByEntity(Entity*); +extern u32 GetSaleItemConfirmMessageID(u32); +extern void FlushSprites(void); +extern void DispReset(u32); +extern void InitSoundPlayingInfo(void); +extern void InitDMA(void); +extern Entity* CreateProjectile(u32); +extern void RegisterPlayerHitbox(); +extern s32 GetItemPrice(); +extern void DoExitTransition(ScreenTransitionData*); +extern void CreateDustAt(u32, u32, u32); +extern void PutItemOnSlot(u32 itemID); +extern void CreateSpeechBubbleSleep(Entity*, u32, u32); // Unidentified extern u32 sub_0806ED78(Entity*); @@ -80,8 +95,6 @@ extern u32 sub_08049FA0(Entity*); extern u32 sub_08049FDC(Entity*, u32); extern u32 sub_080041A0(Entity*, Entity*, u32, u32); extern u32 sub_08049EE4(Entity*); -extern Entity* CreateProjectileWithParent(Entity*, u8, u8); -extern u32 GetBottleContaining(u32); extern void sub_08077E54(ItemBehavior*); extern void sub_080042BA(Entity*, u32); extern bool32 sub_08077F24(ItemBehavior*, u32); @@ -92,7 +105,6 @@ extern s32 sub_0807887C(Entity*, u32, u32); extern s32 sub_08078904(); extern void sub_0805E5A8(void); extern void sub_0805E5C0(void); -extern void FlushSprites(void); extern void sub_080AD9B0(void); extern void sub_080AD918(void); extern void sub_0801E104(void); @@ -118,7 +130,6 @@ extern u32 sub_08060354(void); extern void sub_08057E64(void); extern void sub_0809F814(u32); extern void sub_080300E8(void); -extern void DispReset(u32); extern void sub_08058D34(void); extern void sub_0807AABC(Entity*); extern void sub_08078A90(u32); @@ -142,7 +153,6 @@ extern void sub_080AF2E4(void); extern void sub_0804F578(void); extern void sub_08059994(void); extern s32 sub_0801CFA8(u32); -extern void InitSoundPlayingInfo(void); extern void sub_080ADA14(u32, u32); // trampoline to sub_080B27F4 extern void sub_0801E1B8(u32, u32); extern void sub_0801E1EC(s32, s32, s32); @@ -171,7 +181,6 @@ extern void sub_0807A108(void); extern u32 sub_0801766C(Entity*); extern void sub_08004168(Entity*); extern u32 sub_08052638(u32); -extern void InitDMA(void); extern void sub_08056208(void); extern void sub_08050384(); extern u32 sub_0806F520(); @@ -181,7 +190,6 @@ extern void sub_0804A7D4(Entity*); extern void sub_08033744(Entity*); extern void sub_0800417E(Entity*, u32); extern void sub_080784C8(); -extern void RegisterPlayerHitbox(); extern u32 sub_0808288C(Entity*, u32, u32, u32); extern void sub_0806FDA0(Entity*); extern void sub_080AE008(Entity*, u32, u32); @@ -227,7 +235,6 @@ extern u32 sub_0805F7A0(u32); extern u32* sub_0805F25C(u32); extern u32 sub_080045DA(s32, s32); u32 sub_0806FCB8(Entity*, u32, u32, u32); -extern Entity* CreateProjectile(u32); extern void sub_080A1D70(Entity*, u32); extern void sub_0806F62C(Entity*, u32, u32); extern void sub_080A1ED0(u32, u32, u32); @@ -241,7 +248,6 @@ extern u32 sub_08052734(); // has Dungeon Map? extern u32 sub_08052764(); // has Dungeon Compass? extern u32 sub_0805279C(); // has Dungeon Big Key? extern u32 sub_080527CC(); // num Dungeon small keys? -extern u32 GetItemPrice(); extern void sub_08078790(Entity*, u32); extern void sub_080788E0(Entity*); extern void sub_08078AA8(u32, u32); @@ -267,7 +273,15 @@ extern void sub_0805EEB4(u8*, u32); extern void sub_08056BDC(u32); extern void sub_08056F88(u32, u32); extern void sub_0805F8E4(u32 r0, WStruct* r1); -extern void DoExitTransition(ScreenTransitionData*); +extern u32 sub_08002632(Entity*); +extern void sub_0807879C(Entity*); +extern void sub_080787C0(Entity*); +extern void sub_080787B4(Entity*); +extern void sub_0808C650(Entity*, u32); +extern u32 sub_0808C67C(void); +extern void sub_0808C688(void); +extern void sub_0805E4A0(Entity*); +extern void sub_0805E4CC(Entity*); extern Entity* sub_08077C94(ItemBehavior*, u32); extern Entity* sub_08077C0C(ItemBehavior*, u32); @@ -283,7 +297,6 @@ extern void sub_08078E84(Entity*, Entity*); extern void sub_080042D0(Entity*, u32, u16); extern u32 sub_080002A8(u32, u32, u32); -extern void CreateDustAt(u32, u32, u32); extern void sub_080806BC(u32, u32, u32, u32); extern void sub_080186C0(u32); diff --git a/include/utils.h b/include/utils.h index 0634700e..004a5ada 100644 --- a/include/utils.h +++ b/include/utils.h @@ -40,6 +40,8 @@ void ReadKeyInput(void); void LoadPalettes(const u8*, int, int); void LoadPaletteGroup(u32 group); +void sub_0801D79C(u32 colorIndex, u32 color); +void sub_0801D7BC(u32 color, u32 arg1); /** * Allocate memory on heap. diff --git a/src/npc/din.c b/src/npc/din.c index ec340fb1..d17d1dea 100644 --- a/src/npc/din.c +++ b/src/npc/din.c @@ -5,8 +5,6 @@ #include "functions.h" #include "save.h" -extern u32 sub_08002632(Entity*); - void Din(Entity* this) { switch (this->action) { case 0: diff --git a/src/script.c b/src/script.c index 105f7af2..9529156f 100644 --- a/src/script.c +++ b/src/script.c @@ -11,6 +11,7 @@ #include "random.h" #include "audio.h" #include "functions.h" +#include "main.h" void InitScriptForEntity(Entity*, ScriptExecutionContext*, u16*); void InitScriptExecutionContext(ScriptExecutionContext* context, u16* script); @@ -301,6 +302,9 @@ const ScriptCommand gScriptCommands[] = { ScriptCommandNop, ScriptCommand_0807F0B4, ScriptCommand_0807F0C8 }; +extern u16* gUnk_08001A7C[]; +extern u8 gUnk_08114F30[]; +extern u8 gUnk_08114F34[]; extern const u16 gUnk_08016984; extern u8 gUnk_0811E514[]; extern u8 gUnk_0811E510[]; @@ -1524,3 +1528,623 @@ void ScriptCommand_0807F0B4(Entity* entity, ScriptExecutionContext* context) { void ScriptCommand_0807F0C8(Entity* entity, ScriptExecutionContext* context) { sub_08080964(context->scriptInstructionPointer[1], context->scriptInstructionPointer[2]); } + +extern u8 gUnk_0811E750[]; +extern u8 gUnk_0811E758[]; +extern u8 gUnk_0811E760[]; + +void sub_0807F0D8(Entity* entity, ScriptExecutionContext* context) { + context->condition = (-(u32)gInput.newKeys | ((u32)gInput.newKeys)) >> 0x1f; +} + +void sub_0807F0EC(Entity* entity, ScriptExecutionContext* context) { + context->intVariable = (s32)Random() % (s32)context->intVariable; +} + +void sub_0807F100(Entity* entity, ScriptExecutionContext* context) { + u32 rand; + + rand = Random(); + entity->animationState = rand & 6; + context->unk_1A = gUnk_0811E750[(rand >> 8) & 7]; +} + +void sub_0807F128(Entity* entity, ScriptExecutionContext* context) { + u32 rand; + + rand = Random(); + entity->animationState = gUnk_0811E758[rand & 7]; + context->unk_1A = gUnk_0811E760[(rand >> 8) & 7]; +} + +void sub_0807F158(Entity* entity, ScriptExecutionContext* context) { + entity->collisionLayer = 1; + UpdateSpriteForCollisionLayer(entity); +} + +void sub_0807F168(Entity* entity, ScriptExecutionContext* context) { + gPlayerEntity.collisionLayer = 1; + UpdateSpriteForCollisionLayer(&gPlayerEntity); +} + +void sub_0807F180(Entity* entity, ScriptExecutionContext* context) { + entity->collisionLayer = 2; + UpdateSpriteForCollisionLayer(entity); +} + +void sub_0807F190(Entity* entity, ScriptExecutionContext* context) { + DoFade(4, 256); +} + +void sub_0807F1A0(Entity* entity, ScriptExecutionContext* context) { + sub_0807DEDC(entity, context, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI); + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F1C4(Entity* entity, ScriptExecutionContext* context) { + if ((gPlayerState.flags.all & 8) != 0) { + gPlayerState.field_0x8 = 0x459; + } else { + gPlayerState.field_0x8 = 0x1bc; + } +} + +void sub_0807F1E8(Entity* entity, ScriptExecutionContext* context) { + if ((gPlayerState.flags.all & 8) != 0) { + gPlayerState.field_0x8 = 0x45a; + } else { + gPlayerState.field_0x8 = 0x2bd; + } +} + +void sub_0807F210(Entity* entity, ScriptExecutionContext* context) { + if ((gPlayerState.flags.all & 8) != 0) { + gPlayerState.field_0x8 = 0x41c; + } else { + gPlayerState.field_0x8 = 0x80c; + } +} + +void sub_0807F238(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.field_0x8 = context->intVariable; +} + +void sub_0807F244(Entity* entity, ScriptExecutionContext* context) { + u32 slot; + u32 item; + + item = context->intVariable & 0xFFFF; + slot = context->intVariable >> 0x10; + item &= 0xFFFF; + switch (item) { + case 1: + case 2: + case 3: + case 4: + case 6: + // Pick greatest sword unlocked + item = 1; + if (GetInventoryValue(2)) + item = 2; + if (GetInventoryValue(3)) + item = 3; + if (GetInventoryValue(4)) + item = 4; + if (GetInventoryValue(6)) + item = 6; + break; + } + ForceEquipItem(item, slot); +} + +void sub_0807F29C(Entity* entity, ScriptExecutionContext* context) { + sub_0805ED14((void*)context->intVariable); +} + +void sub_0807F2A8(Entity* entity, ScriptExecutionContext* context) { + if (gPlayerState.field_0x9c == 0) { + gActiveScriptInfo.flags |= 1; + } else { + gActiveScriptInfo.commandSize = 0; + } +} + +void sub_0807F2D4(Entity* entity, ScriptExecutionContext* context) { + if ((entity->frames.all & 0x80) != 0) { + gActiveScriptInfo.flags |= 1; + } else { + gActiveScriptInfo.commandSize = 0; + } +} + +void sub_0807F304(Entity* entity, ScriptExecutionContext* context) { + if ((gPlayerEntity.frames.all & 0x80) != 0) { + gActiveScriptInfo.flags |= 1; + } else { + gActiveScriptInfo.commandSize = 0; + } +} + +void sub_0807F338(Entity* entity, ScriptExecutionContext* context) { + entity->hitbox = NULL; + entity->field_0x17 &= ~1; +} + +void sub_0807F348(Entity* entity, ScriptExecutionContext* context) { + sub_0805E3A0(entity, 2); +} + +void sub_0807F354(Entity* entity, ScriptExecutionContext* context) { + sub_0805E3A0(entity, 6); +} + +void sub_0807F360(Entity* entity, ScriptExecutionContext* context) { + sub_0805E3A0(entity, 3); +} + +void sub_0807F36C(Entity* entity, ScriptExecutionContext* context) { + Entity* fx; + fx = CreateFx(entity, 0x41, 0); + if (fx != NULL) { + fx->spritePriority.b0 = 1; + PositionRelative(entity, fx, 0, -524288); + if (Random() & 1) + fx->spriteSettings.b.flipX = 1; + if (Random() & 1) + fx->spriteSettings.b.flipY = 1; + } +} + +void sub_0807F3C8(Entity* entity, ScriptExecutionContext* context) { + sub_0807F36C(entity, context); + SoundReq(SFX_BUTTON_DEPRESS); +} + +void sub_0807F3D8(Entity* entity, ScriptExecutionContext* context) { + InitAnimationForceUpdate(entity, context->intVariable + (entity->animationState >> 1)); + entity->field_0x80.HWORD = entity->animIndex; +} + +void sub_0807F3F8(Entity* entity, ScriptExecutionContext* context) { + CreateSpeechBubbleExclamationMark(&gPlayerEntity, 8, -24); +} + +void sub_0807F40C(Entity* entity, ScriptExecutionContext* context) { + CreateSpeechBubbleQuestionMark(&gPlayerEntity, 8, -24); +} + +void sub_0807F420(Entity* entity, ScriptExecutionContext* context) { + MenuFadeIn(context->intVariable & 0xff, (u8)(context->intVariable >> 8)); +} + +void sub_0807F434(Entity* entity, ScriptExecutionContext* context) { + switch (entity->interactType) { + case 1: + entity->interactType = 0; + context->intVariable = 1; + break; + case 2: + entity->interactType = 0; + context->intVariable = 2; + break; + default: + context->intVariable = 0; + break; + } + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F464(Entity* entity, ScriptExecutionContext* context) { + s32 s32Var; + + if (!context->unk_18) { + context->unk_18++; + context->postScriptActions |= 2; + s32Var = context->intVariable; + context->x.HALF.HI = gRoomControls.roomOriginX + s32Var; + context->y.HALF.HI = entity->y.HALF.HI; + if (s32Var > entity->x.HALF.HI - gRoomControls.roomOriginX) { + entity->direction = 64; + entity->animationState = (entity->animationState & 0x80) | 2; + } else { + entity->direction = -64; + entity->animationState = (entity->animationState & 0x80) | 6; + } + } + sub_0806F62C(entity, entity->speed, entity->direction); + if (((context->x.HALF.HI - entity->x.HALF.HI) ^ ((entity->direction & 0x80) << 24)) < 0) + entity->x.HALF.HI = context->x.HALF.HI; + else + gActiveScriptInfo.commandSize = 0; +} + +void sub_0807F4F8(Entity* entity, ScriptExecutionContext* context) { + s32 s32Var; + + if (!context->unk_18) { + context->unk_18++; + context->postScriptActions |= 2; + s32Var = context->intVariable; + context->x.HALF.HI = entity->x.HALF.HI; + context->y.HALF.HI = gRoomControls.roomOriginY + s32Var; + if (s32Var > entity->y.HALF.HI - gRoomControls.roomOriginY) { + entity->direction = 128; + entity->animationState = (entity->animationState & 0x80) | 4; + } else { + entity->direction = 0; + entity->animationState = (entity->animationState & 0x80); + } + } + sub_0806F62C(entity, entity->speed, entity->direction); + if (((context->y.HALF.HI - entity->y.HALF.HI) ^ ((entity->direction & 0x80) << 24)) >= 0) + entity->y.HALF.HI = context->y.HALF.HI; + else + gActiveScriptInfo.commandSize = 0; +} + +void sub_0807F584(Entity* entity, ScriptExecutionContext* context) { + context->intVariable = gPlayerEntity.animationState >> 1; +} + +void sub_0807F594(Entity* entity, ScriptExecutionContext* context) { + if (gPlayerState.field_0xa8) + gActiveScriptInfo.commandSize = 0; +} + +void sub_0807F5B0(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.field_0x27[0] = context->intVariable; +} + +void sub_0807F5C0(Entity* entity, ScriptExecutionContext* context) { + s32 left; + s32 bottom; + + if (gRoomControls.cameraTarget != NULL) { + left = gRoomControls.cameraTarget->x.HALF.HI - DISPLAY_WIDTH / 2; + bottom = gRoomControls.cameraTarget->y.HALF.HI - DISPLAY_HEIGHT / 2; + + if (left < gRoomControls.roomOriginX) + left = gRoomControls.roomOriginX; + if (left > gRoomControls.roomOriginX + gRoomControls.width - DISPLAY_WIDTH) + left = gRoomControls.roomOriginX + gRoomControls.width - DISPLAY_WIDTH; + if (bottom < gRoomControls.roomOriginY) + bottom = gRoomControls.roomOriginY; + if (bottom > gRoomControls.roomOriginY + gRoomControls.height - DISPLAY_HEIGHT) + bottom = gRoomControls.roomOriginY + gRoomControls.height - DISPLAY_HEIGHT; + + if (left == gRoomControls.roomScrollX && bottom == gRoomControls.roomScrollY) + gActiveScriptInfo.flags |= 1u; + else + gActiveScriptInfo.commandSize = 0; + } +} + +void sub_0807F634(Entity* entity, ScriptExecutionContext* context) { + u16* p = (u16*)context->intVariable; + sub_0801DFB4(entity, p[0], p[1], p[2]); + gPlayerState.field_0x8b = 3; +} + +void sub_0807F650(Entity* entity, ScriptExecutionContext* context) { + u32 p = sub_08002632(entity); + sub_0801DFB4(entity, gUnk_08001A7C[p][0], gUnk_08001A7C[p][1], gUnk_08001A7C[p][2]); + gPlayerState.field_0x8b = 3; +} + +void sub_0807F680(Entity* entity, ScriptExecutionContext* context) { + context->condition = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX > (s32)(context->intVariable & 0xffff); + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F6B4(Entity* entity, ScriptExecutionContext* context) { + context->condition = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY > (s32)(context->intVariable & 0xffff); + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F6E8(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.flags.all |= context->intVariable; +} + +void sub_0807F6F8(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.flags.all &= ~context->intVariable; +} + +void sub_0807F708(Entity* entity, ScriptExecutionContext* context) { + ShowNPCDialogue(entity, (Dialog*)context->intVariable); +} + +void sub_0807F714(Entity* entity, ScriptExecutionContext* context) { + entity->spriteRendering.b3 = gUnk_08114F30[entity->spriteRendering.b3]; + ResolveEntityOnTop(entity, entity); +} + +void sub_0807F738(Entity* entity, ScriptExecutionContext* context) { + entity->spriteRendering.b3 = gUnk_08114F34[entity->spriteRendering.b3]; + sub_0806FAD8(entity, entity); +} + +void sub_0807F75C(Entity* entity, ScriptExecutionContext* context) { + s32 s32Var = context->intVariable; + gPlayerEntity.x.HALF.HI = (s32Var >> 16) + gRoomControls.roomOriginX; + gPlayerEntity.y.HALF.HI = (s32Var & 0xffff) + gRoomControls.roomOriginY; +} + +void sub_0807F77C(Entity* entity, ScriptExecutionContext* context) { + if (context->condition) + context->intVariable = 1; + else + context->intVariable = 0; +} + +void sub_0807F78C(Entity* entity, ScriptExecutionContext* context) { + u32 item = context->intVariable; + u32 msg; + u32 price; + + if (context->intVariable == 0) + item = gRoomVars.itemForSaleIndex; + + msg = GetSaleItemConfirmMessageID(item); + price = GetItemPrice(item); + TextboxNoOverlap(msg, entity); + gTextBox.field_0x10 = (u16)price; +} + +void sub_0807F7C4(Entity* entity, ScriptExecutionContext* context) { + u32 item = context->intVariable; + u32 msg; + u32 price; + + if (context->intVariable == 0) + item = gRoomVars.itemForSaleIndex; + + context->condition = GetItemPrice(item) <= gSave.stats.rupees; + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F800(Entity* entity, ScriptExecutionContext* context) { + u32 item = context->intVariable; + u32 msg; + u32 price; + + if (context->intVariable == 0) + item = gRoomVars.itemForSaleIndex; + + price = GetItemPrice(item); + ModRupees(-price); + sub_080A7C18(item, 0, 0); + gRoomVars.itemForSaleIndex = 0; + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F83C(Entity* entity, ScriptExecutionContext* context) { + sub_08079184(); +} + +void sub_0807F844(Entity* entity, ScriptExecutionContext* context) { + gRoomControls.cameraTarget = entity; + sub_080809D4(); +} + +void sub_0807F854(Entity* entity, ScriptExecutionContext* context) { + u32 value; + u32 idx; + + idx = (context->intVariable >> 0x10) & 3; + value = context->intVariable & 0xffff; + switch (idx) { + case 0: + case 1: + gTextBox.field_0x10 = value; + break; + case 2: + gTextBox.field_0x14 = value; + break; + case 3: + gTextBox.field_0x18 = value; + break; + case 4: + gTextBox.field_0x1c = value; + break; + } +} + +void sub_0807F8BC(Entity* entity, ScriptExecutionContext* context) { + if (sub_080040A8(entity)) + context->condition = 1; + else + context->condition = 0; +} + +void sub_0807F8D0(Entity* entity, ScriptExecutionContext* context) { + sub_08003FC4(entity, context->intVariable); + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F8E8(Entity* entity, ScriptExecutionContext* context) { + Entity* c = CreateObjectWithParent(entity, 0xA6, 0, 0); + if (c != NULL) { + c->parent = entity; + c->field_0x86.HWORD = (context->intVariable & 0x3ff) | 0x8000; + } +} + +void sub_0807F918(Entity* entity, ScriptExecutionContext* context) { + PutItemOnSlot(context->intVariable); +} + +void sub_0807F924(Entity* entity, ScriptExecutionContext* context) { + sub_0807879C(entity); +} + +void sub_0807F92C(Entity* entity, ScriptExecutionContext* context) { + sub_080787C0(entity); +} + +void sub_0807F934(Entity* entity, ScriptExecutionContext* context) { + sub_080787B4(entity); +} + +void sub_0807F93C(Entity* entity, ScriptExecutionContext* context) { + CreateSpeechBubbleSleep(entity, (context->intVariable >> 8) & 0xff, context->intVariable & 0xff); +} + +void sub_0807F950(Entity* entity, ScriptExecutionContext* context) { + Entity* c = FindEntity(6, 0x56, 6, 0, 2); + if (c != NULL) + DeleteEntity(c); +} + +void sub_0807F970(Entity* entity, ScriptExecutionContext* context) { + context->condition = context->intVariable == gCurrentTextBox._28; +} + +void sub_0807F98C(Entity* entity, ScriptExecutionContext* context) { + entity->height.WORD = context->intVariable; +} + +void sub_0807F994(Entity* entity, ScriptExecutionContext* context) { + entity->spriteOffsetX = (s32)context->intVariable >> 0x10; + entity->spriteOffsetY = context->intVariable & 0xffff; +} + +void sub_0807F9A4(Entity* entity, ScriptExecutionContext* context) { + switch (gPlayerState.field_0xa8) { + case 5: + case 7: + case 8: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 24: + case 27: + case 28: + gActiveScriptInfo.commandSize = 0; + break; + default: + gActiveScriptInfo.flags |= 1u; + break; + } +} + +void sub_0807FA40(Entity* entity, ScriptExecutionContext* context) { + switch (gPlayerState.field_0xa8) { + case 5: + case 7: + case 8: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 20: + case 21: + case 22: + case 23: + case 24: + case 27: + case 28: + gActiveScriptInfo.commandSize = 0; + break; + default: + gActiveScriptInfo.flags |= 1u; + break; + } +} + +void sub_0807FADC(Entity* entity, ScriptExecutionContext* context) { + switch (context->unk_18) { + case 0: + context->unk_18++; + sub_0808C650(entity, context->intVariable); + break; + case 1: + if (sub_0808C67C()) + context->unk_18++; + break; + case 2: + sub_0808C688(); + return; + } + gActiveScriptInfo.commandSize = 0; +} + +void sub_0807FB28(Entity* entity, ScriptExecutionContext* context) { + if (!context->unk_18) + sub_0801D7BC(0x7fff, 1); + + context->unk_18++; + if (context->unk_18 >= context->intVariable) + sub_0801D7BC(0, 0); + else + gActiveScriptInfo.commandSize = 0; +} + +void sub_0807FB64(Entity* entity, ScriptExecutionContext* context) { + gPlayerEntity.iframes = context->intVariable; +} + +void sub_0807FB74(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.swimState = 0; + gPlayerEntity.field_0x3c &= ~4; +} + +void sub_0807FB94(Entity* entity, ScriptExecutionContext* context) { + InitScreen(SCREEN_CREDITS); +} + +void sub_0807FBA0(Entity* entity, ScriptExecutionContext* context) { + entity->x.HALF.HI = gRoomControls.roomScrollX + 120; + entity->y.HALF.HI = gRoomControls.roomScrollY + 80; +} + +void sub_0807FBB4(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.field_0x1a[0] |= 0x80; +} + +void sub_0807FBC4(Entity* entity, ScriptExecutionContext* context) { + sub_0805E4A0(entity); +} + +void sub_0807FBCC(Entity* entity, ScriptExecutionContext* context) { + sub_0805E4CC(entity); +} + +void sub_0807FBD4(Entity* entity, ScriptExecutionContext* context) { + sub_0806F62C(entity, entity->speed, entity->direction); + if (sub_080040A8(entity)) + gActiveScriptInfo.commandSize = 0; +} + +#ifndef EU +void sub_0807FBFC(Entity* entity, ScriptExecutionContext* context) { + gSave.stats.charm = 0; + gSave.stats.charmTimer = 0; + gSave.stats.unkB = 0; + gSave.stats.unkTimer = 0; + gSave.stats.effect = 0; + gSave.stats.effectTimer = 0; +} + +#if defined(USA) || defined(DEMO) +void sub_0807FC24(Entity* entity, ScriptExecutionContext* context) { + u32 idx = gRoomControls.roomID == 1 ? 0xcf : 0xd1; + SetLocalFlag(idx); +} +#endif +#endif