diff --git a/asm/carpenter.s b/asm/carpenter.s deleted file mode 100644 index 60e4a2c2..00000000 --- a/asm/carpenter.s +++ /dev/null @@ -1,101 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080672C8 -sub_080672C8: @ 0x080672C8 - push {r4, r5, lr} - adds r5, r0, #0 - movs r4, #0 - movs r0, #0x11 - bl GetInventoryValue - cmp r0, #0 - bne _080672E4 - movs r0, #0x15 - bl CheckGlobalFlag - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r4, r1, #0x1f -_080672E4: - ldr r3, _08067300 @ =gUnk_08110CE8 - lsls r1, r4, #1 - ldrb r2, [r5, #0xa] - lsls r0, r2, #1 - adds r0, r0, r2 - lsls r0, r0, #1 - adds r1, r1, r0 - adds r1, r1, r3 - ldrh r0, [r1] - adds r1, r5, #0 - bl TextboxNoOverlap - pop {r4, r5, pc} - .align 2, 0 -_08067300: .4byte gUnk_08110CE8 - - thumb_func_start sub_08067304 -sub_08067304: @ 0x08067304 - push {lr} - ldr r1, _08067310 @ =gUnk_08110D00 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_08067310: .4byte gUnk_08110D00 - - thumb_func_start sub_08067314 -sub_08067314: @ 0x08067314 - 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 Carpenter_Fusion -Carpenter_Fusion: @ 0x0806732C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08067378 - ldrb r1, [r4, #0xa] - lsls r1, r1, #4 - ldr r0, _08067374 @ =gUnk_08110CA8 - adds r1, r1, r0 - adds r0, r4, #0 - bl LoadExtraSpriteData - cmp r0, #0 - beq _0806737E - 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 sub_0805E3A0 - ldrb r1, [r4, #0xa] - lsls r1, r1, #3 - adds r1, #2 - adds r0, r4, #0 - bl InitializeAnimation - b _0806737E - .align 2, 0 -_08067374: .4byte gUnk_08110CA8 -_08067378: - adds r0, r4, #0 - bl GetNextFrame -_0806737E: - pop {r4, pc} diff --git a/linker.ld b/linker.ld index e8d7a300..25da9730 100644 --- a/linker.ld +++ b/linker.ld @@ -593,7 +593,6 @@ SECTIONS { src/npc/zelda.o(.text); src/npc/mutoh.o(.text); src/npc/carpenter.o(.text); - asm/carpenter.o(.text); asm/castorWildsStatue.o(.text); src/npc/cat.o(.text); asm/mountainMinish.o(.text); diff --git a/src/npc/carpenter.c b/src/npc/carpenter.c index 21f8db14..775ddce5 100644 --- a/src/npc/carpenter.c +++ b/src/npc/carpenter.c @@ -5,9 +5,15 @@ #include "npc.h" #include "functions.h" #include "script.h" +#include "flags.h" +#include "textbox.h" extern SpriteLoadData gUnk_08110CA8[]; +extern u16 gUnk_08110CE8[]; + +extern Dialog gUnk_08110D00; + void Carpenter(Entity* this) { if (*(u32*)&this->cutsceneBeh == 0) { DeleteThisEntity(); @@ -63,3 +69,35 @@ void Carpenter_Head(Entity* this) { void sub_080672B0(Entity* this, ScriptExecutionContext* context) { InitializeAnimation(this, context->intVariable + (this->animationState >> 1) + this->type * 8); } + +void sub_080672C8(Entity* this) { + u32 dialog = 0; + u32 tmp; + if (GetInventoryValue(0x11) == 0) { + tmp = CheckGlobalFlag(TABIDACHI); + dialog = BOOLCAST(tmp); + } + TextboxNoOverlap(gUnk_08110CE8[(dialog * 2 + this->type * 6) / 2], this); +} + +void sub_08067304(Entity* this) { + ShowNPCDialogue(this, &gUnk_08110D00); +} + +void sub_08067314(Entity* this) { + this->field_0x68.HALF.LO = sub_0801E99C(this); + sub_08078784(this, this->field_0x68.HALF.LO); +} + +void Carpenter_Fusion(Entity* this) { + if (this->action == 0) { + if (LoadExtraSpriteData(this, &gUnk_08110CA8[this->type*4]) != 0) { + this->action = this->action + 1; + this->spriteSettings.b.draw = 1; + sub_0805E3A0(this, 2); + InitializeAnimation(this, (u32)this->type * 8 + 2); + } + } else { + GetNextFrame(this); + } +}