diff --git a/asm/goron.s b/asm/goron.s deleted file mode 100644 index b5b9bfd2..00000000 --- a/asm/goron.s +++ /dev/null @@ -1,339 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start sub_080692D0 -sub_080692D0: @ 0x080692D0 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _080692F4 - ldr r0, _080692F0 @ =gUnk_08111A8C - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _0806930A - .align 2, 0 -_080692F0: .4byte gUnk_08111A8C -_080692F4: - ldr r0, _0806930C @ =gUnk_08111A80 - ldrb r1, [r4, #0xc] - 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_0806ED78 -_0806930A: - pop {r4, pc} - .align 2, 0 -_0806930C: .4byte gUnk_08111A80 - - thumb_func_start sub_08069310 -sub_08069310: @ 0x08069310 - push {r4, lr} - adds r4, r0, #0 - bl sub_08078778 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08069328 -sub_08069328: @ 0x08069328 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xf] - adds r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x10 - bls _0806934E - movs r0, #0 - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #0x28 - movs r2, #0x28 - bl sub_0806ED9C - cmp r0, #0 - blt _0806934E - strb r0, [r4, #0x14] -_0806934E: - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - ldrb r1, [r4, #0x14] - cmp r0, r1 - beq _08069362 - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_08069362: - adds r0, r4, #0 - adds r0, #0x39 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _0806938E - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0805E47C - adds r0, r4, #0 - movs r1, #8 - bl InitAnimationForceUpdate - ldrb r0, [r4, #0xe] - movs r1, #0x90 - lsls r1, r1, #5 - adds r0, r0, r1 - bl TextboxNoOverlapFollow -_0806938E: - pop {r4, pc} - - thumb_func_start sub_08069390 -sub_08069390: @ 0x08069390 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - ldr r0, _080693C0 @ =gTextBox - ldrb r0, [r0] - movs r1, #0x7f - ands r1, r0 - cmp r1, #0 - bne _080693BC - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x39 - strb r1, [r0] - adds r0, r4, #0 - bl sub_0805E584 - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_080693BC: - pop {r4, pc} - .align 2, 0 -_080693C0: .4byte gTextBox - - thumb_func_start sub_080693C4 -sub_080693C4: @ 0x080693C4 - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - bl sub_0807DD50 - pop {pc} - - thumb_func_start sub_080693D0 -sub_080693D0: @ 0x080693D0 - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r1, #0 - bl sub_0807DD94 - adds r0, r5, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #8 - bne _08069422 - adds r0, r5, #0 - adds r0, #0x82 - ldrh r0, [r0] - movs r1, #0xf - ands r1, r0 - rsbs r0, r1, #0 - orrs r0, r1 - lsrs r6, r0, #0x1f - adds r4, r5, #0 - adds r4, #0x5a - ldrb r0, [r4] - cmp r0, #1 - bne _0806940C - movs r0, #0 - strb r0, [r4] - ldr r1, _08069424 @ =0xFFF80000 - adds r0, r5, #0 - adds r2, r6, #0 - bl sub_08069428 -_0806940C: - ldrb r0, [r4] - cmp r0, #2 - bne _08069422 - movs r0, #0 - strb r0, [r4] - movs r1, #0x80 - lsls r1, r1, #0xc - adds r0, r5, #0 - adds r2, r6, #0 - bl sub_08069428 -_08069422: - pop {r4, r5, r6, pc} - .align 2, 0 -_08069424: .4byte 0xFFF80000 - - thumb_func_start sub_08069428 -sub_08069428: @ 0x08069428 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r7, r1, #0 - adds r6, r2, #0 - movs r1, #4 - movs r2, #0 - bl CreateFx - adds r4, r0, #0 - cmp r4, #0 - beq _08069452 - ldr r3, _0806947C @ =0xFFF00000 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - bl PositionRelative - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_0806FAB0 -_08069452: - cmp r6, #0 - beq _0806947A - adds r0, r5, #0 - movs r1, #0x41 - movs r2, #0 - bl CreateFx - adds r4, r0, #0 - cmp r4, #0 - beq _0806947A - ldr r3, _0806947C @ =0xFFF00000 - adds r0, r5, #0 - adds r1, r4, #0 - adds r2, r7, #0 - bl PositionRelative - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_0806FAB0 -_0806947A: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0806947C: .4byte 0xFFF00000 - - thumb_func_start sub_08069480 -sub_08069480: @ 0x08069480 - push {lr} - bl sub_0801E99C - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - pop {pc} - - thumb_func_start sub_0806948C -sub_0806948C: @ 0x0806948C - push {r4, lr} - adds r4, r1, #0 - bl sub_08069480 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - bl CheckKinstoneFused - str r0, [r4, #0x14] - ldr r2, _080694AC @ =gUnk_02033280 - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, pc} - .align 2, 0 -_080694AC: .4byte gUnk_02033280 - - thumb_func_start sub_080694B0 -sub_080694B0: @ 0x080694B0 - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_08069480 - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - adds r0, r5, #0 - bl CheckKinstoneFused - cmp r0, #0 - beq _080694CE - adds r0, r4, #0 - bl sub_08078778 - b _080694D6 -_080694CE: - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_08078784 -_080694D6: - pop {r4, r5, pc} - - thumb_func_start sub_080694D8 -sub_080694D8: @ 0x080694D8 - push {lr} - ldrb r1, [r0, #0xa] - lsls r1, r1, #3 - ldr r2, _080694E8 @ =gUnk_08111A94 - adds r1, r1, r2 - bl ShowNPCDialogue - pop {pc} - .align 2, 0 -_080694E8: .4byte gUnk_08111A94 - - thumb_func_start sub_080694EC -sub_080694EC: @ 0x080694EC - push {r4, r5, lr} - adds r4, r0, #0 - movs r0, #4 - strb r0, [r4, #0x14] - movs r5, #2 - movs r0, #0x2f - bl CheckKinstoneFused - cmp r0, #0 - bne _08069502 - movs r5, #8 -_08069502: - adds r0, r4, #0 - adds r1, r5, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - adds r0, #0x80 - strh r5, [r0] - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08069514 -sub_08069514: @ 0x08069514 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xc] - cmp r0, #0 - bne _0806953A - adds r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - adds r0, r2, #0 - movs r1, #2 - bl InitAnimationForceUpdate - b _08069540 -_0806953A: - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_08069540: - pop {pc} - .align 2, 0 diff --git a/asm/malon.s b/asm/malon.s deleted file mode 100644 index 438dc664..00000000 --- a/asm/malon.s +++ /dev/null @@ -1,204 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start sub_0806581C -sub_0806581C: @ 0x0806581C - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08065840 - ldr r0, _0806583C @ =gUnk_0810FF64 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _0806585C - .align 2, 0 -_0806583C: .4byte gUnk_0810FF64 -_08065840: - ldr r1, _08065860 @ =gUnk_0810FF5C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _0806585C - adds r0, r4, #0 - bl sub_0806ED78 -_0806585C: - pop {r4, pc} - .align 2, 0 -_08065860: .4byte gUnk_0810FF5C - - thumb_func_start sub_08065864 -sub_08065864: @ 0x08065864 - push {lr} - movs r3, #1 - movs r1, #1 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x18] - subs r1, #5 - ands r1, r2 - orrs r1, r3 - strb r1, [r0, #0x18] - movs r1, #0xc - bl InitAnimationForceUpdate - pop {pc} - .align 2, 0 - - thumb_func_start sub_08065880 -sub_08065880: @ 0x08065880 - push {lr} - bl UpdateAnimationSingleFrame - pop {pc} - - thumb_func_start sub_08065888 -sub_08065888: @ 0x08065888 - push {r4, lr} - adds r4, r0, #0 - 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] - movs r0, #4 - strb r0, [r4, #0x14] - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - adds r0, r4, #0 - bl sub_0807DD50 - pop {r4, pc} - - thumb_func_start sub_080658BC -sub_080658BC: @ 0x080658BC - push {r4, lr} - adds r4, r0, #0 - adds r2, r4, #0 - adds r2, #0x39 - movs r1, #0 - ldrsb r1, [r2, r1] - cmp r1, #2 - bne _080658F4 - movs r0, #0 - strb r1, [r4, #0xc] - strb r0, [r2] - ldr r1, _080658F0 @ =gLinkEntity - adds r0, r4, #0 - bl sub_080045C4 - bl sub_0806F5A4 - adds r1, r0, #0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0806F118 - b _080658FC - .align 2, 0 -_080658F0: .4byte gLinkEntity -_080658F4: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 -_080658FC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08065900 -sub_08065900: @ 0x08065900 - push {r4, lr} - adds r4, r0, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _08065910 - movs r0, #1 - strb r0, [r4, #0xc] -_08065910: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08065914 -sub_08065914: @ 0x08065914 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #7 - movs r1, #0x1f - movs r2, #7 - bl sub_0805EB00 - adds r4, r0, #0 - cmp r4, #0 - beq _08065938 - movs r2, #0xc0 - lsls r2, r2, #0xd - ldr r3, _0806595C @ =0xFFFF0000 - adds r0, r5, #0 - adds r1, r4, #0 - bl PositionRelative - str r5, [r4, #0x50] -_08065938: - movs r0, #7 - movs r1, #0x20 - movs r2, #7 - bl sub_0805EB00 - adds r4, r0, #0 - cmp r4, #0 - beq _08065958 - movs r2, #0xa0 - lsls r2, r2, #0xe - adds r0, r5, #0 - adds r1, r4, #0 - movs r3, #0 - bl PositionRelative - str r5, [r4, #0x50] -_08065958: - pop {r4, r5, pc} - .align 2, 0 -_0806595C: .4byte 0xFFFF0000 - - thumb_func_start sub_08065960 -sub_08065960: @ 0x08065960 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xc] - cmp r0, #0 - bne _08065986 - adds r0, #1 - strb r0, [r2, #0xc] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - adds r0, r2, #0 - movs r1, #0xc - bl InitAnimationForceUpdate - b _0806598C -_08065986: - adds r0, r2, #0 - bl UpdateAnimationSingleFrame -_0806598C: - pop {pc} - .align 2, 0 diff --git a/include/functions.h b/include/functions.h index b1932d28..f1ecae39 100644 --- a/include/functions.h +++ b/include/functions.h @@ -20,6 +20,9 @@ extern u32 __modsi3(u32, u32); extern void DoFade(u32, u32); extern void UpdateAnimationSingleFrame(Entity*); extern u32 GetInventoryValue(u32); +extern void TextboxNoOverlapFollow(u32 index); +extern Entity* CreateFx(Entity*, u32, u32); +extern u32 CheckKinstoneFused(u32); // Unidentified extern void sub_0806ED78(Entity*); @@ -59,4 +62,7 @@ extern s32* sub_0807DAD0(Entity*, u8*); extern void sub_0806FF60(Entity*, u32, u32); extern void sub_0806FF88(Entity*, u32, u32); extern void sub_0807000C(Entity*); -#endif \ No newline at end of file +extern void sub_0805E47C(Entity*); +extern void sub_0805E584(Entity*); +extern void sub_0806FAB0(Entity*, Entity*); +#endif diff --git a/linker.ld b/linker.ld index 3cdd89ef..ab7f6bfa 100644 --- a/linker.ld +++ b/linker.ld @@ -491,7 +491,7 @@ SECTIONS { asm/tingleSiblings.o(.text); asm/stockwell.o(.text); src/talon.o(.text); - asm/malon.o(.text); + src/malon.o(.text); src/epona.o(.text); src/milkCart.o(.text); asm/ghostBrothers.o(.text); @@ -512,7 +512,7 @@ SECTIONS { asm/melari.o(.text); src/bladeBrothers.o(.text); src/cow.o(.text); - asm/goron.o(.text); + src/goron.o(.text); asm/goronMerchant.o(.text); asm/gorman.o(.text); asm/dog.o(.text); diff --git a/src/goron.c b/src/goron.c new file mode 100644 index 00000000..ad3aa2ef --- /dev/null +++ b/src/goron.c @@ -0,0 +1,135 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "textbox.h" + +extern void (*gUnk_08111A80[])(Entity*); +extern void (*gUnk_08111A8C[])(Entity*); +extern u8 gUnk_02033280[]; + +void sub_080692D0(Entity* this) { + if (this->flags & 2) { + gUnk_08111A8C[this->action](this); + } else { + gUnk_08111A80[this->action](this); + sub_0806ED78(this); + } +} + +void sub_08069310(Entity* this) { + sub_08078778(this); + this->action = 1; + InitAnimationForceUpdate(this, 2); +} + +void sub_08069328(Entity* this) { + if (((u32)(++this->field_0xf << 24) >> 24) > 16) { + int action; + + this->field_0xf = 0; + action = sub_0806ED9C(this, 40, 40); + if (action >= 0) { + this->animationState = action; + } + } + if (this->field_0x58 != this->animationState) { + InitAnimationForceUpdate(this, this->animationState); + } + if (this->interactType != 0) { + this->action = 2; + sub_0805E47C(this); + InitAnimationForceUpdate(this, 8); + TextboxNoOverlapFollow(this->parameter3 + (0x90 << 5)); + } +} + +void sub_08069390(Entity* this) { + UpdateAnimationSingleFrame(this); + if ((gTextBox.doTextBox & 0x7F) == 0) { + this->action = 1; + this->interactType = 0; + sub_0805E584(this); + InitAnimationForceUpdate(this, this->animationState); + } +} + +void sub_080693C4(Entity* this) { + this->action = 1; + sub_0807DD50(this); +} + +void sub_08069428(Entity* this, s32 offsetX, bool32 createFx65); + +void sub_080693D0(Entity* this) { + sub_0807DD94(this, 0); + if (this->field_0x58 == 8) { + u32 var0 = this->field_0x82 & 0xF; + bool32 createFx65 = ((-var0) | var0) >> 0x1F; // = !var0 + + if (this->frames.all == 1) { + this->frames.all = 0; + sub_08069428(this, 0xFFF80000, createFx65); + } + if (this->frames.all == 2) { + this->frames.all = 0; + sub_08069428(this, 0x80<<12, createFx65); + } + } +} + +void sub_08069428(Entity* this, s32 offsetX, bool32 createFx65) { + Entity* fx = CreateFx(this, 4, 0); + if (fx) { + PositionRelative(this, fx, offsetX, 0xFFF00000); + sub_0806FAB0(this, fx); + } + if (createFx65 != 0) { + fx = CreateFx(this, 65, 0); + if (fx) { + PositionRelative(this, fx, offsetX, 0xFFF00000); + sub_0806FAB0(this, fx); + } + } +} + +u32 sub_08069480(Entity* this) { + return (sub_0801E99C(this) << 24) >> 24; +} + +void sub_0806948C(Entity* this, u32* param_1) { + param_1[5] = CheckKinstoneFused((sub_08069480(this) << 24) >> 24); + gUnk_02033280[7] |= 1; +} + +void sub_080694B0(Entity* this) { + u32 kinstone = (sub_08069480(this) << 24) >> 24; + if (CheckKinstoneFused(kinstone)) { + sub_08078778(this); + } else { + sub_08078784(this, kinstone); + } +} + +extern u64 gUnk_08111A94[]; //array of unknown 64 bit structure type +void sub_080694D8(Entity* this) { + ShowNPCDialogue(this, (u32*)&gUnk_08111A94[this->entityType.parameter1]); +} + +void sub_080694EC(Entity* this) { + u32 anim; + this->animationState = 4; + anim = 2; + if (!CheckKinstoneFused(47)) anim = 8; + InitAnimationForceUpdate(this, anim); + this->field_0x80 = anim; +} + +void sub_08069514(Entity* this) { + if (this->action == 0) { + this->action++; + this->spriteSettings.b.ss0 = 1; + InitAnimationForceUpdate(this, 2); + } else { + UpdateAnimationSingleFrame(this); + } +}