diff --git a/asm/mineralWaterSource.s b/asm/mineralWaterSource.s deleted file mode 100644 index 983ee648..00000000 --- a/asm/mineralWaterSource.s +++ /dev/null @@ -1,72 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start MineralWaterSource -MineralWaterSource: @ 0x08097370 - push {lr} - ldr r2, _08097384 @ =gUnk_08123298 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08097384: .4byte gUnk_08123298 - - thumb_func_start sub_08097388 -sub_08097388: @ 0x08097388 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806FBD8 - cmp r0, #0 - beq _080973D4 - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - ldr r1, _080973D8 @ =gUnk_081232A0 - adds r0, r0, r1 - ldrb r1, [r0] - strb r1, [r4, #0xb] - ldrb r2, [r0, #3] - adds r1, r4, #0 - adds r1, #0x40 - strb r2, [r1] - ldr r2, [r4, #0x48] - ldrb r1, [r0, #1] - strb r1, [r2, #6] - ldr r1, [r4, #0x48] - ldrb r0, [r0, #2] - strb r0, [r1, #7] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #3 - movs r0, #0x91 - strb r0, [r1] - subs r1, #4 - movs r0, #2 - strb r0, [r1] - movs r0, #1 - strb r0, [r4, #0xc] -_080973D4: - pop {r4, pc} - .align 2, 0 -_080973D8: .4byte gUnk_081232A0 - - thumb_func_start sub_080973DC -sub_080973DC: @ 0x080973DC - adds r0, #0x41 - movs r1, #0 - strb r1, [r0] - bx lr diff --git a/data/data_902.s b/data/data_902.s index f72f7efa..195092dc 100644 --- a/data/data_902.s +++ b/data/data_902.s @@ -1828,10 +1828,10 @@ gUnk_08123274:: @ 08123274 gUnk_0812327C:: @ 0812327C .incbin "baserom.gba", 0x12327C, 0x000001C -gUnk_08123298:: @ 08123298 +MineralWaterSourceActionFuncs:: @ 08123298 .incbin "baserom.gba", 0x123298, 0x0000008 -gUnk_081232A0:: @ 081232A0 +MineralWaterSourceParameters:: @ 081232A0 .incbin "baserom.gba", 0x1232A0, 0x0000004 gUnk_081232A4:: @ 081232A4 diff --git a/include/entity.h b/include/entity.h index 9e286c40..d9a60d30 100644 --- a/include/entity.h +++ b/include/entity.h @@ -17,6 +17,13 @@ typedef struct { u8 parameter; } EntityType; +typedef struct { + u8 unknown[6]; + u8 field_0x6; + u8 field_0x7; + u8 unknown2[4]; +} BoundingBox; + union SplitWord { s32 WORD; struct { @@ -103,7 +110,7 @@ typedef struct Entity { u8 field_0x44; u8 currentHealth; s16 field_0x46; - u32* boundingBox; + BoundingBox* boundingBox; u8 field_0x4c; u8 field_0x4d; u8 field_0x4e; diff --git a/linker.ld b/linker.ld index b729b21d..2b5178a4 100644 --- a/linker.ld +++ b/linker.ld @@ -704,7 +704,7 @@ SECTIONS { asm/crenalBeanSprout.o(.text); asm/minecartDoor.o(.text); asm/objectOnPillar.o(.text); - asm/mineralWaterSource.o(.text); + src/mineralWaterSource.o(.text); asm/minishSizedArchway.o(.text); asm/object70.o(.text); asm/pushableGrave.o(.text); diff --git a/src/heartContainer.c b/src/heartContainer.c index d595c784..643b87dd 100644 --- a/src/heartContainer.c +++ b/src/heartContainer.c @@ -7,7 +7,7 @@ extern void sub_0808E714(Entity*); extern void (*const gUnk_08121C48[])(Entity*); -extern u32 gUnk_08121C58; +extern BoundingBox gUnk_08121C58; void HeartContainer(Entity* this) { gUnk_08121C48[this->action](this); diff --git a/src/mineralWaterSource.c b/src/mineralWaterSource.c new file mode 100644 index 00000000..c874530b --- /dev/null +++ b/src/mineralWaterSource.c @@ -0,0 +1,47 @@ +#include "global.h" +#include "entity.h" + +extern void (*MineralWaterSourceActionFuncs[])(Entity *); + +typedef struct { + u8 field_0x00; + u8 field_0x01; + u8 field_0x02; + u8 field_0x03; +} UnkStruct_MineralWater; + +extern UnkStruct_MineralWater MineralWaterSourceParameters[]; + +extern bool32 sub_0806FBD8(Entity *); + +void MineralWaterSource(Entity *this) { + MineralWaterSourceActionFuncs[this->action](this); +} + +void MineralWaterSource_Init(Entity *this) { + UnkStruct_MineralWater *unknownParameters; + + if (!sub_0806FBD8(this)) { + return; + } + + unknownParameters = &MineralWaterSourceParameters[this->entityType.form]; + + this->entityType.parameter = unknownParameters->field_0x00; + this->field_0x40 = unknownParameters->field_0x03; + + this->boundingBox->field_0x6 = unknownParameters->field_0x01; + this->boundingBox->field_0x7 = unknownParameters->field_0x02; + + this->flags |= 0x80; + + this->field_0x3c = 7; + this->damageType = 145; + this->flags2 = 2; + + this->action = 1; +} + +void sub_080973DC(Entity *this) { + this->bitfield = 0; +} \ No newline at end of file diff --git a/src/object1A.c b/src/object1A.c index 6a3ce51c..2cb9d9ff 100644 --- a/src/object1A.c +++ b/src/object1A.c @@ -11,7 +11,7 @@ extern u32 Random(void); extern void (*gUnk_081206C4[99])(Entity*); -extern u32 gUnk_080FD1A8; +extern BoundingBox gUnk_080FD1A8; // Main void Object1A(Entity* ent) {