diff --git a/asm/chestSpawner.s b/asm/chestSpawner.s index de6ac87e..8c30c704 100644 --- a/asm/chestSpawner.s +++ b/asm/chestSpawner.s @@ -6,69 +6,6 @@ .text - - thumb_func_start ChestSpawner -ChestSpawner: @ 0x08083DD8 - push {lr} - ldr r2, _08083DEC @ =gUnk_0811F7E8 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08083DEC: .4byte gUnk_0811F7E8 - - thumb_func_start sub_08083DF0 -sub_08083DF0: @ 0x08083DF0 - push {lr} - ldr r2, _08083E04 @ =gUnk_0811F808 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08083E04: .4byte gUnk_0811F808 - - thumb_func_start sub_08083E08 -sub_08083E08: @ 0x08083E08 - push {lr} - ldr r2, _08083E1C @ =gUnk_0811F818 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08083E1C: .4byte gUnk_0811F818 - - thumb_func_start sub_08083E20 -sub_08083E20: @ 0x08083E20 - push {r4, lr} - adds r4, r0, #0 - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #7 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x19] - movs r0, #0xd - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - bl sub_080842D8 - adds r0, r4, #0 - bl sub_08078828 - pop {r4, pc} - thumb_func_start sub_08083E4C sub_08083E4C: @ 0x08083E4C push {r4, lr} diff --git a/asm/heartContainer.s b/asm/heartContainer.s index 747f1932..5dc7e9de 100644 --- a/asm/heartContainer.s +++ b/asm/heartContainer.s @@ -6,81 +6,6 @@ .text - - thumb_func_start HeartContainer -HeartContainer: @ 0x0808E688 - push {lr} - ldr r2, _0808E69C @ =gUnk_08121C48 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808E69C: .4byte gUnk_08121C48 - - thumb_func_start sub_0808E6A0 -sub_0808E6A0: @ 0x0808E6A0 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x84 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0808E6B4 - bl DeleteThisEntity -_0808E6B4: - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x62 - strb r0, [r4, #0xa] - ldrb r1, [r4, #0x18] - subs r0, #0x66 - ands r0, r1 - strb r0, [r4, #0x18] - ldr r0, _0808E6E0 @ =gUnk_08121C58 - str r0, [r4, #0x48] - adds r1, r4, #0 - adds r1, #0x38 - movs r2, #3 - movs r0, #3 - strb r0, [r1] - ldrb r1, [r4, #0x11] - subs r0, #0x13 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x11] - pop {r4, pc} - .align 2, 0 -_0808E6E0: .4byte gUnk_08121C58 - - thumb_func_start sub_0808E6E4 -sub_0808E6E4: @ 0x0808E6E4 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0808E712 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #6 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r0, [r4, #0x19] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - bl sub_0808E714 -_0808E712: - pop {r4, pc} - thumb_func_start sub_0808E714 sub_0808E714: @ 0x0808E714 push {r4, lr} diff --git a/linker.ld b/linker.ld index bd32465c..71862820 100644 --- a/linker.ld +++ b/linker.ld @@ -600,6 +600,7 @@ SECTIONS { asm/object9.o(.text); asm/objectA.o(.text); asm/objectB.o(.text); + src/chestSpawner.o(.text); asm/chestSpawner.o(.text); asm/objectD.o(.text); asm/objectE.o(.text); @@ -663,6 +664,7 @@ SECTIONS { asm/object44.o(.text); asm/object45.o(.text); asm/giantBookLadder.o(.text); + src/heartContainer.o(.text); asm/heartContainer.o(.text); asm/object48.o(.text); asm/object49.o(.text); diff --git a/src/chestSpawner.c b/src/chestSpawner.c new file mode 100644 index 00000000..ac50a692 --- /dev/null +++ b/src/chestSpawner.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "entity.h" + +extern void sub_080842D8(Entity*); +extern void sub_08078828(Entity*); +extern u32 CheckLocalFlag(u32); +extern void InitializeAnimation(Entity*, u32); +extern u32 CheckFlags(u32); +extern void sub_08083E20(Entity*); + +extern void (*const gUnk_0811F7E8[])(Entity*); +extern void (*const gUnk_0811F808[])(Entity*); +extern void (*const gUnk_0811F818[])(Entity*); + +extern u32 gUnk_0811F8B0; +void ChestSpawner(Entity* this) +{ + gUnk_0811F7E8[this->entityType.form](this); +} + +void sub_08083DF0(Entity* this) { + gUnk_0811F808[this->action](this); +} + +void sub_08083E08(Entity *this) +{ + gUnk_0811F818[this->action](this); +} + +void sub_08083E20(Entity *this) +{ + this->action = 3; + this->spriteSettings.b.ss0 = 1; + this->spriteOrder.b1 = 0; + sub_080842D8(this); + sub_08078828(this); +} diff --git a/src/heartContainer.c b/src/heartContainer.c new file mode 100644 index 00000000..d595c784 --- /dev/null +++ b/src/heartContainer.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "entity.h" + +extern u32 CheckFlags(u32); +extern void DeleteThisEntity(); +extern void sub_0808E714(Entity*); + +extern void (*const gUnk_08121C48[])(Entity*); + +extern u32 gUnk_08121C58; + +void HeartContainer(Entity* this) { + gUnk_08121C48[this->action](this); +} + +void sub_0808E6A0(Entity* this) { + + if (CheckFlags(*(u16*)&this->cutsceneBeh)) { + DeleteThisEntity(); + } + this->action = 1; + this->entityType.form = 0x62; + this->spriteSettings.b.ss0 = 0; + this->boundingBox = &gUnk_08121C58; + this->collisionLayer = 3; + this->scriptedScene = 3; +} + +void sub_0808E6E4(Entity* this) { + if (CheckFlags(this->field_0x86)) { + this->action = 2; + this->spriteSettings.b.ss0 = 1; + this->spriteOrder.b0 = 3; + sub_0808E714(this); + } +}