From d429f7f9cbe2a5c1d90139d9459fcd899b390fbc Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 12 Jul 2020 22:27:28 -0700 Subject: [PATCH] mutoh.c OK --- asm/mutoh.s | 202 ----------------------------------------- include/npc.h | 9 ++ linker.ld | 2 +- src/mainLoop.c | 40 ++++---- src/mutoh.c | 99 ++++++++++++++++++++ src/windTribespeople.c | 11 +-- 6 files changed, 130 insertions(+), 233 deletions(-) delete mode 100644 asm/mutoh.s create mode 100644 src/mutoh.c diff --git a/asm/mutoh.s b/asm/mutoh.s deleted file mode 100644 index 75fe0c2c..00000000 --- a/asm/mutoh.s +++ /dev/null @@ -1,202 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Mutoh -Mutoh: @ 0x08066FD8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x84 - ldr r0, [r0] - cmp r0, #0 - bne _08066FE8 - bl DeleteThisEntity -_08066FE8: - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _08067030 - cmp r0, #1 - bgt _08066FF8 - cmp r0, #0 - beq _08066FFE - b _0806707C -_08066FF8: - cmp r0, #2 - beq _0806706E - b _0806707C -_08066FFE: - ldr r1, _0806702C @ =gUnk_08110C00 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806707C - 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] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805E3A0 - adds r0, r4, #0 - bl sub_0807DD50 - b _0806707C - .align 2, 0 -_0806702C: .4byte gUnk_08110C00 -_08067030: - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _08067064 - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - ldr r1, _08067060 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - adds r1, r0, #0 - adds r1, #4 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0806F118 - b _0806707C - .align 2, 0 -_08067060: .4byte gLinkEntity -_08067064: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - b _0806707C -_0806706E: - adds r0, r4, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _0806707C - movs r0, #1 - strb r0, [r4, #0xc] -_0806707C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start Mutoh_Head -Mutoh_Head: @ 0x08067080 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r2, [r0] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r2, r0 - adds r0, r4, #0 - movs r1, #0 - bl SetExtraSpriteFrame - ldrb r2, [r4, #0x1e] - adds r0, r4, #0 - movs r1, #1 - bl SetExtraSpriteFrame - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl SetSpriteSubEntryOffsetData1 - adds r0, r4, #0 - bl sub_0807000C - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080670B4 -sub_080670B4: @ 0x080670B4 - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #0 - movs r0, #0x11 - bl GetInventoryValue - cmp r0, #0 - bne _080670D0 - movs r0, #0x15 - bl CheckGlobalFlag - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r4, r1, #0x1f -_080670D0: - ldr r0, _080670E0 @ =gUnk_08110C0C - lsls r1, r4, #1 - adds r1, r1, r0 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_080670E0: .4byte gUnk_08110C0C - - thumb_func_start sub_080670E4 -sub_080670E4: @ 0x080670E4 - push {lr} - ldr r1, _080670F8 @ =gUnk_02002A40 - ldrb r1, [r1, #8] - lsls r1, r1, #3 - ldr r2, _080670FC @ =gUnk_08110C10 - adds r1, r1, r2 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_080670F8: .4byte gUnk_02002A40 -_080670FC: .4byte gUnk_08110C10 - - thumb_func_start sub_08067100 -sub_08067100: @ 0x08067100 - push {r4, lr} - adds r4, r0, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - pop {r4, pc} - - thumb_func_start Mutoh_Fusion -Mutoh_Fusion: @ 0x08067118 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08067150 - ldr r1, _0806714C @ =gUnk_08110C00 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _08067156 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - 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, #2 - bl InitializeAnimation - b _08067156 - .align 2, 0 -_0806714C: .4byte gUnk_08110C00 -_08067150: - adds r0, r4, #0 - bl GetNextFrame -_08067156: - pop {r4, pc} diff --git a/include/npc.h b/include/npc.h index b1a7c2b5..fff3334a 100644 --- a/include/npc.h +++ b/include/npc.h @@ -171,5 +171,14 @@ extern void NPC58_Head(Entity*); extern u32 UpdateFuseInteraction(Entity*); +extern void ShowNPCDialogue(Entity*, u32*); + +typedef struct { + u8 filler[8]; + u8 unk; +} struct_02002A40; + +extern struct_02002A40 gUnk_02002A40; + #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index a9eca411..27d898bc 100644 --- a/linker.ld +++ b/linker.ld @@ -572,7 +572,7 @@ SECTIONS { asm/npc26.o(.text); asm/vaati.o(.text); src/zelda.o(.text); - asm/mutoh.o(.text); + src/mutoh.o(.text); src/carpenter.o(.text); asm/carpenter.o(.text); asm/castorWildsStatue.o(.text); diff --git a/src/mainLoop.c b/src/mainLoop.c index a9bf0d32..dcc0ebbf 100644 --- a/src/mainLoop.c +++ b/src/mainLoop.c @@ -1,7 +1,7 @@ #include "global.h" #include "main.h" -#ifdef NON_MATCHING +#if 0 typedef struct { u8 interruptFlag; @@ -52,6 +52,7 @@ void MainLoop(void) { bool32 codeInputted; u8 cVar1; u32 uVar2; + MainStruct *s; sub_08055F70(); sub_080A3204(); @@ -66,45 +67,42 @@ void MainLoop(void) { sub_08056418(); sub_080ADD30(); gRand = 0x1234567; - sub_0801D630(&gUnk_03001000, 16); + s = &gUnk_03001000; + sub_0801D630(s, 16); sub_08056010(0); - do { + while (1) { ReadKeyInput(); codeInputted = sub_08055FF4(); if (codeInputted) { sub_080560A8(); } - if ((gUnk_03001000.field_0x1 == 0) || (gUnk_03001000.field_0x1 != 1)) { - if (gUnk_03001000.field_0x8 != '\0') { - while (codeInputted) { + if ((s->field_0x1 != 0) || (s->field_0x1 == 1)) { + sub_08056260(); + } else if (s->field_0x8 != 0) { + while (--s->field_0x8) { VBlankInterruptWait(); - cVar1 = gUnk_03001000.field_0x8 + -1; - codeInputted = gUnk_03001000.field_0x8 != '\x01'; - gUnk_03001000.field_0x8 = cVar1; } } - if (gUnk_03001000.countdown != '\0') { - gUnk_03001000.countdown = gUnk_03001000.countdown + -1; - uVar2 = gUnk_03001000.field_0xa; - while (0 < uVar2) { + if (s->countdown != 0) { + s->countdown--; + uVar2 = s->field_0xa; + while (uVar2 > 0) { VBlankIntrWait(); - uVar2 = uVar2 - 1; + uVar2--; } } - gUnk_03001000.ticks = gUnk_03001000.ticks + 1; - gUnk_08100CBC[gUnk_03001000.loadType](); + s->ticks++; + gUnk_08100CBC[s->loadType](); sub_08056458(); sub_08050154(); sub_080A3480(); - } else { - sub_08056260(); } sub_08016E78(); - } while (TRUE); } -#else + +#endif + NAKED void MainLoop(void) { asm(".include \"asm/non_matching/mainLoop.inc\""); } -#endif diff --git a/src/mutoh.c b/src/mutoh.c new file mode 100644 index 00000000..b50ff552 --- /dev/null +++ b/src/mutoh.c @@ -0,0 +1,99 @@ +#include "global.h" +#include "entity.h" +#include "link.h" +#include "flags.h" +#include "textbox.h" +#include "npc.h" + +extern void sub_0805E3A0(Entity*, u32); +extern void sub_0807DD50(Entity*); +extern u32 GetFacingDirection(Entity*, Entity*); +extern u32 sub_0806F5A4(u32); +extern void sub_0806F118(Entity*); +extern void sub_0807DD94(Entity*, u32); +extern u32 UpdateFuseInteraction(Entity*); +extern void sub_0807000C(Entity*); +extern u32 sub_0801E99C(Entity*); +extern void sub_08078784(Entity*, u32); + +extern SpriteLoadData gUnk_08110C00; +extern u16 gUnk_08110C0C[]; +extern u32 gUnk_08110C10[]; + +void Mutoh(Entity* this) +{ + if (*(u32*)&this->cutsceneBeh == 0) { + DeleteThisEntity(); + } + + switch (this->action) { + case 0: + if (LoadExtraSpriteData(this, &gUnk_08110C00)) { + this->action = 1; + this->spriteSettings.b.draw = TRUE; + sub_0805E3A0(this, 2); + sub_0807DD50(this); + } + break; + case 1: + if (this->interactType == 2) { + this->action = 2; + this->interactType = 0; + InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + 4); + sub_0806F118(this); + } else { + sub_0807DD94(this, 0); + } + break; + case 2: + if (UpdateFuseInteraction(this)) { + this->action = 1; + } + } +} + +void Mutoh_Head(Entity *this) +{ + SetExtraSpriteFrame(this, 0, (this->frames.all & -0x81)); + SetExtraSpriteFrame(this, 1, this->frameIndex); + SetSpriteSubEntryOffsetData1(this,1,0); + sub_0807000C(this); +} + +void sub_080670B4(Entity *this) +{ + u32 uVar1; + u32 uVar2; + + uVar2 = 0; + if (GetInventoryValue(0x11) == 0) { + uVar1 = CheckGlobalFlag(0x15); + uVar2 = (-uVar1 | uVar1) >> 0x1f; + } + TextboxNoOverlap(gUnk_08110C0C[uVar2],this); +} + +void sub_080670E4(Entity *this) +{ + ShowNPCDialogue(this, &gUnk_08110C10[gUnk_02002A40.unk * 2]); +} + +void sub_08067100(Entity *this) +{ + this->field_0x68 = sub_0801E99C(this); + sub_08078784(this, this->field_0x68); +} + +void Mutoh_Fusion(Entity *this) +{ + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08110C00) != 0) { + this->action++; + this->spriteSettings.b.draw = TRUE; + InitializeAnimation(this, 2); + } + } + else { + GetNextFrame(this); + } +} \ No newline at end of file diff --git a/src/windTribespeople.c b/src/windTribespeople.c index 965a73ea..d01f22d4 100644 --- a/src/windTribespeople.c +++ b/src/windTribespeople.c @@ -4,11 +4,6 @@ #include "textbox.h" #include "flags.h" -typedef struct { - u8 filler[8]; - u8 unk; -} struct_02002A40; - extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*); extern void sub_0807DD50(Entity*); extern void sub_0806C7D4(Entity*); @@ -21,15 +16,13 @@ extern void SetExtraSpriteFrame(Entity*, u32, u32); extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32); extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32); extern void sub_0807000C(Entity*); -extern void ShowNPCDialogue(Entity*, u16*); extern void (*const gUnk_08113A7C[])(Entity*); extern void (*const gUnk_08113A8C[])(Entity*, Entity*); extern SpriteLoadData gUnk_08113A1C[]; extern u32 gUnk_08014A80; -extern u16 gUnk_08113ABC[]; -extern struct_02002A40 gUnk_02002A40; +extern u32 gUnk_08113ABC[]; extern u16 gUnk_08113B0C[]; void WindTribespeople(Entity* this) { @@ -129,7 +122,7 @@ void sub_0806C90C(Entity *param_1,Entity *param_2) void sub_0806C928(Entity *this) { - ShowNPCDialogue(this, gUnk_08113ABC + (gUnk_02002A40.unk * 4)); + ShowNPCDialogue(this, &gUnk_08113ABC[gUnk_02002A40.unk * 2]); } void sub_0806C944(Entity *this)