diff --git a/.gitignore b/.gitignore index 99612c35..babe0b21 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,15 @@ *.swp *.til *.code-workspace +*.ss1 +*.ss2 +*.ss3 +*.ss4 +*.ss5 +*.ss6 +*.ss7 +*.ss8 +*.ss9 .fuse_hidden* .idea/ Thumbs.db diff --git a/asm/blockPushed.s b/asm/blockPushed.s index a0bdb72d..35455994 100644 --- a/asm/blockPushed.s +++ b/asm/blockPushed.s @@ -33,7 +33,7 @@ sub_08082EB4: @ 0x08082EB4 bl sub_080AE068 ldr r1, _08082EE4 @ =0x000001C1 adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX cmp r0, #0 bne _08082EE8 ldrb r1, [r4, #0x18] diff --git a/asm/businessScrub.s b/asm/businessScrub.s index 52fb0065..097ed9f3 100644 --- a/asm/businessScrub.s +++ b/asm/businessScrub.s @@ -989,7 +989,7 @@ sub_08029078: @ 0x08029078 strb r0, [r2] adds r0, r4, #0 movs r1, #0x72 - bl sub_080ADF80 + bl LoadFixedGFX cmp r0, #0 bne _080290AE adds r0, r4, #0 diff --git a/asm/castorWildsStatue.s b/asm/castorWildsStatue.s index c8645281..a1e005b6 100644 --- a/asm/castorWildsStatue.s +++ b/asm/castorWildsStatue.s @@ -302,7 +302,7 @@ _080675BC: adds r1, r1, r0 ldr r1, [r1] adds r0, r2, #0 - bl sub_080ADF80 + bl LoadFixedGFX _080675CC: pop {pc} .align 2, 0 diff --git a/asm/chuchuBoss.s b/asm/chuchuBoss.s index 8313d95f..fca83811 100644 --- a/asm/chuchuBoss.s +++ b/asm/chuchuBoss.s @@ -1944,7 +1944,7 @@ _08026B2C: strh r0, [r4, #0x2e] adds r0, r4, #0 movs r1, #0x3e - bl sub_080ADF80 + bl LoadFixedGFX ldrb r0, [r6, #0xb] cmp r0, #0 bne _08026B46 @@ -4338,7 +4338,7 @@ sub_08027D20: @ 0x08027D20 strb r0, [r1] adds r0, r4, #0 movs r1, #0x3e - bl sub_080ADF80 + bl LoadFixedGFX ldrb r0, [r5, #0xb] cmp r0, #0 bne _08027D5E diff --git a/asm/code_08049CD4.s b/asm/code_08049CD4.s index a0177b4f..7322d820 100644 --- a/asm/code_08049CD4.s +++ b/asm/code_08049CD4.s @@ -1394,7 +1394,7 @@ _0804A6E8: _0804A702: ldrh r1, [r5] adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX _0804A70A: cmp r0, #0 bne _0804A712 diff --git a/asm/code_0806EC20.s b/asm/code_0806EC20.s index d8923c6d..8e3fbf72 100644 --- a/asm/code_0806EC20.s +++ b/asm/code_0806EC20.s @@ -103,7 +103,7 @@ _0806ECC0: b _0806ECD0 _0806ECCA: adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX _0806ECD0: ldrh r0, [r5, #4] lsls r0, r0, #0x16 diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index 9afcfc03..2d31c5f7 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -5247,7 +5247,7 @@ _080A7E78: _080A7E92: ldrh r1, [r5] adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX _080A7E9A: cmp r0, #0 bne _080A7EA2 diff --git a/asm/code_080AD90C.s b/asm/code_080AD90C.s index bda412ec..194d7acc 100644 --- a/asm/code_080AD90C.s +++ b/asm/code_080AD90C.s @@ -867,8 +867,8 @@ _080ADF7C: pop {r4, r5, r6, pc} .align 2, 0 - thumb_func_start sub_080ADF80 -sub_080ADF80: @ 0x080ADF80 + thumb_func_start LoadFixedGFX +LoadFixedGFX: @ 0x080ADF80 push {r4, r5, r6, r7, lr} mov r7, r8 push {r7} diff --git a/asm/lockedDoor.s b/asm/lockedDoor.s index 7ec6d88c..aad7a891 100644 --- a/asm/lockedDoor.s +++ b/asm/lockedDoor.s @@ -674,7 +674,7 @@ _080837FC: _08083808: adds r0, r4, #0 adds r1, r5, #0 - bl sub_080ADF80 + bl LoadFixedGFX pop {r4, r5, pc} .align 2, 0 diff --git a/asm/miniFireballGuy.s b/asm/miniFireballGuy.s index 2bd4a5ca..d72b24f6 100644 --- a/asm/miniFireballGuy.s +++ b/asm/miniFireballGuy.s @@ -6,118 +6,6 @@ .text - - thumb_func_start MiniFireballGuy -MiniFireballGuy: @ 0x080455AC - push {lr} - ldr r1, _080455B8 @ =gUnk_080D1868 - bl EnemyFunctionHandler - pop {pc} - .align 2, 0 -_080455B8: .4byte gUnk_080D1868 - - thumb_func_start sub_080455BC -sub_080455BC: @ 0x080455BC - push {lr} - ldr r2, _080455D0 @ =gUnk_080D1880 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_080455D0: .4byte gUnk_080D1880 - - thumb_func_start sub_080455D4 -sub_080455D4: @ 0x080455D4 - push {lr} - ldr r1, _080455E0 @ =gUnk_080D1868 - bl sub_0804AA30 - pop {pc} - .align 2, 0 -_080455E0: .4byte gUnk_080D1868 - - thumb_func_start sub_080455E4 -sub_080455E4: @ 0x080455E4 - push {lr} - adds r3, r0, #0 - ldr r0, [r3, #0x50] - cmp r3, r0 - beq _0804560A - cmp r0, #0 - beq _0804560A - adds r2, r3, #0 - adds r2, #0x6c - ldrb r1, [r2] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2] - ldr r1, [r3, #0x50] - ldr r0, [r3, #0x54] - str r0, [r1, #0x54] - ldr r1, [r3, #0x54] - ldr r0, [r3, #0x50] - str r0, [r1, #0x50] -_0804560A: - adds r0, r3, #0 - bl sub_0804A7D4 - pop {pc} - .align 2, 0 - - thumb_func_start nullsub_23 -nullsub_23: @ 0x08045614 - bx lr - .align 2, 0 - - thumb_func_start sub_08045618 -sub_08045618: @ 0x08045618 - 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, #0x80 - strh r0, [r4, #0x24] - adds r2, r4, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0x10 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - bl sub_0804A720 - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_08045678 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08045654 -sub_08045654: @ 0x08045654 - push {r4, lr} - adds r4, r0, #0 - bl sub_080AEFE0 - adds r0, r4, #0 - bl GetNextFrame - movs r1, #0xc0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _08045676 - adds r0, r4, #0 - bl sub_08045678 -_08045676: - pop {r4, pc} - thumb_func_start sub_08045678 sub_08045678: @ 0x08045678 push {r4, r5, lr} diff --git a/asm/minishSizedEntrance.s b/asm/minishSizedEntrance.s index c6c4a2dd..c0c3e93d 100644 --- a/asm/minishSizedEntrance.s +++ b/asm/minishSizedEntrance.s @@ -6,53 +6,6 @@ .text - - thumb_func_start MinishSizedEntrance -MinishSizedEntrance: @ 0x08090EA8 - push {lr} - ldr r2, _08090EBC @ =gUnk_08122254 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08090EBC: .4byte gUnk_08122254 - - thumb_func_start sub_08090EC0 -sub_08090EC0: @ 0x08090EC0 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0x19] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4, #0xb] - strb r0, [r4, #0x1e] - bl CheckIsDungeon - cmp r0, #0 - beq _08090EFE - ldrb r0, [r4, #0x1e] - adds r0, #4 - strb r0, [r4, #0x1e] - adds r0, r4, #0 - bl sub_080AE068 - movs r1, #0xc2 - lsls r1, r1, #1 - adds r0, r4, #0 - bl sub_080ADF80 -_08090EFE: - pop {r4, pc} - thumb_func_start sub_08090F00 sub_08090F00: @ 0x08090F00 push {r4, r5, r6, lr} diff --git a/asm/object3D.s b/asm/object3D.s index 492dedef..d7a2278d 100644 --- a/asm/object3D.s +++ b/asm/object3D.s @@ -101,7 +101,7 @@ _0808CF82: adds r4, r4, r0 ldrh r1, [r4] adds r0, r5, #0 - bl sub_080ADF80 + bl LoadFixedGFX ldrh r1, [r4, #2] adds r0, r5, #0 bl sub_0801D040 diff --git a/asm/object91.s b/asm/object91.s index 008e64b7..bbd0f8a0 100644 --- a/asm/object91.s +++ b/asm/object91.s @@ -735,10 +735,10 @@ _0809C948: ldr r4, _0809C984 @ =0x00000115 adds r0, r5, #0 adds r1, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX ldr r0, [r5, #0x50] adds r1, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX adds r0, r5, #0 movs r1, #0xef bl sub_0801D2B4 diff --git a/asm/octorokBoss.s b/asm/octorokBoss.s index 71bfb19c..b62b5d36 100644 --- a/asm/octorokBoss.s +++ b/asm/octorokBoss.s @@ -373,7 +373,7 @@ _08035456: movs r1, #0x84 lsls r1, r1, #1 adds r0, r5, #0 - bl sub_080ADF80 + bl LoadFixedGFX adds r0, r5, #0 movs r1, #0xef bl sub_0801D2B4 @@ -395,7 +395,7 @@ _080354B0: strb r0, [r1] ldr r1, _080354F4 @ =0x00000109 adds r0, r5, #0 - bl sub_080ADF80 + bl LoadFixedGFX adds r0, r5, #0 movs r1, #0xf0 bl sub_0801D2B4 diff --git a/asm/pushableStatue.s b/asm/pushableStatue.s index 7eb66914..370a535f 100644 --- a/asm/pushableStatue.s +++ b/asm/pushableStatue.s @@ -619,7 +619,7 @@ _08089680: adds r0, r2, #0 movs r1, #0xe9 _08089684: - bl sub_080ADF80 + bl LoadFixedGFX pop {pc} .align 2, 0 diff --git a/asm/rupeeLike.s b/asm/rupeeLike.s index 7f5d113c..4375db40 100644 --- a/asm/rupeeLike.s +++ b/asm/rupeeLike.s @@ -644,7 +644,7 @@ sub_08029770: @ 0x08029770 push {r4, lr} adds r4, r0, #0 movs r1, #0x73 - bl sub_080ADF80 + bl LoadFixedGFX cmp r0, #0 beq _080297E8 movs r0, #2 diff --git a/asm/sub_080A285C.s b/asm/sub_080A285C.s index f9d7809d..f5c4e16c 100644 --- a/asm/sub_080A285C.s +++ b/asm/sub_080A285C.s @@ -65,7 +65,7 @@ _080A28BA: b _080A28CA _080A28C4: adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX _080A28CA: cmp r0, #0 bne _080A28D2 diff --git a/asm/vaatiWrath.s b/asm/vaatiWrath.s index 33c203f7..ec525e45 100644 --- a/asm/vaatiWrath.s +++ b/asm/vaatiWrath.s @@ -1159,7 +1159,7 @@ sub_08041BE8: @ 0x08041BE8 bl sub_080AE068 ldr r1, _08041CC0 @ =0x000001F5 adds r0, r7, #0 - bl sub_080ADF80 + bl LoadFixedGFX ldr r1, _08041CC4 @ =0x0000016B adds r0, r7, #0 bl sub_0801D2B4 diff --git a/asm/waterfallOpening.s b/asm/waterfallOpening.s index 6d5447c9..c1743e43 100644 --- a/asm/waterfallOpening.s +++ b/asm/waterfallOpening.s @@ -82,7 +82,7 @@ _0809FFCE: movs r1, #0xc6 lsls r1, r1, #1 adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX movs r0, #0xf6 bl PlaySFX b _080A005A @@ -105,7 +105,7 @@ _080A0006: bl sub_080AE068 ldr r1, _080A0034 @ =0x0000018D adds r0, r4, #0 - bl sub_080ADF80 + bl LoadFixedGFX b _080A005A .align 2, 0 _080A0034: .4byte 0x0000018D diff --git a/linker.ld b/linker.ld index e667b817..d03fabb5 100644 --- a/linker.ld +++ b/linker.ld @@ -412,6 +412,7 @@ SECTIONS { asm/slime.o(.text); asm/miniSlime.o(.text); asm/fireballGuy.o(.text); + src/miniFireballGuy.o(.text); asm/miniFireballGuy.o(.text); asm/enemy5A.o(.text); asm/businessScrubPrologue.o(.text); @@ -731,6 +732,7 @@ SECTIONS { asm/object4B.o(.text); asm/pushableFurniture.o(.text); asm/furniture.o(.text); + src/minishSizedEntrance.o(.text); asm/minishSizedEntrance.o(.text); asm/archway.o(.text); asm/giantRock.o(.text); diff --git a/src/miniFireballGuy.c b/src/miniFireballGuy.c new file mode 100644 index 00000000..bb9ea593 --- /dev/null +++ b/src/miniFireballGuy.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "entity.h" + +extern void EnemyFunctionHandler(Entity*, void (*const func[])(Entity*)); +extern void sub_0804AA30(Entity*, void (*const func[][])(Entity*)); +extern void sub_0804A7D4(Entity*); +extern void sub_0804A720(Entity*); +extern void InitializeAnimation(Entity*, u32); +extern void sub_08045678(Entity*); +extern void sub_080AEFE0(void); +extern void GetNextFrame(Entity*); +extern u32 sub_08003FC4(Entity*, u32); +extern void sub_08045678(Entity*); + +extern void (*const gUnk_080D1868[])(Entity*); +extern void (*const gUnk_080D1880[])(Entity*); + +void MiniFireballGuy(Entity *this) +{ + EnemyFunctionHandler(this, gUnk_080D1868); +} + +void sub_080455BC(Entity *this) +{ + gUnk_080D1880[this->action](this); +} + +void sub_080455D4(Entity *this) +{ + sub_0804AA30(this, &gUnk_080D1868); +} + +void sub_080455E4(Entity *this) +{ + if ((this != this->parent) && (this->parent != NULL)) { + this->field_0x6c = this->field_0x6c & 0x7f; + this->parent->attachedEntity = this->attachedEntity; + this->attachedEntity->parent = this->parent; + } + sub_0804A7D4(this); +} + +void nullsub_23(Entity* this) {} + +void sub_08045618(Entity *this) +{ + this->action = 1; + this->spriteSettings.b.ss0 = 1; + this->nonPlanarMovement = 0x80; + this->field_0x3c = this->field_0x3c | 0x10; + sub_0804A720(this); + InitializeAnimation(this, 1); + sub_08045678(this); +} + +void sub_08045654(Entity *this) +{ + sub_080AEFE0(); + GetNextFrame(this); + if (sub_08003FC4(this, 0x1800) == 0) { + sub_08045678(this); + } +} \ No newline at end of file diff --git a/src/minishSizedEntrance.c b/src/minishSizedEntrance.c new file mode 100644 index 00000000..10ad0113 --- /dev/null +++ b/src/minishSizedEntrance.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "entity.h" + +extern u32 Random(); +extern bool32 CheckIsDungeon(); +extern void sub_080AE068(Entity*); +extern void LoadFixedGFX(Entity*, u32); + +extern void (*const gUnk_08122254[])(Entity*); + +void MinishSizedEntrance(Entity* this) +{ + gUnk_08122254[this->action](this); +} + +void sub_08090EC0(Entity *this) +{ + this->action = 1; + this->spriteOrder.b3 = 3; + this->ticks.b0 = 7; + this->frameIndex = (this->entityType).parameter; + if (CheckIsDungeon()) { + this->frameIndex += 4; + sub_080AE068(this); + LoadFixedGFX(this, 0x184); + } +}