diff --git a/asm/object/picoBloom.s b/asm/object/picoBloom.s deleted file mode 100644 index 0fa701a6..00000000 --- a/asm/object/picoBloom.s +++ /dev/null @@ -1,91 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start PicoBloom -PicoBloom: @ 0x08098A78 - push {lr} - ldr r2, _08098A8C @ =gUnk_08123568 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08098A8C: .4byte gUnk_08123568 - - thumb_func_start sub_08098A90 -sub_08098A90: @ 0x08098A90 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #1 - beq _08098A9C - movs r0, #2 -_08098A9C: - strb r0, [r4, #0xc] - bl Random - movs r1, #0x7f - ands r0, r1 - adds r0, #0x7f - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldr r1, _08098ACC @ =gUnk_08123574 - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r1, [r0] - ldrb r0, [r4, #0xb] - adds r1, r1, r0 - adds r0, r4, #0 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 -_08098ACC: .4byte gUnk_08123574 - - thumb_func_start sub_08098AD0 -sub_08098AD0: @ 0x08098AD0 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08098AE6 - ldrb r0, [r1, #0xc] - adds r0, #1 - strb r0, [r1, #0xc] -_08098AE6: - pop {pc} - - thumb_func_start sub_08098AE8 -sub_08098AE8: @ 0x08098AE8 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r4, #0x5a - ldrb r1, [r4] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08098B08 - movs r0, #0xfe - ands r0, r1 - strb r0, [r4] - ldr r0, _08098B0C @ =0x0000021B - bl EnqueueSFX -_08098B08: - pop {r4, pc} - .align 2, 0 -_08098B0C: .4byte 0x0000021B diff --git a/assets/assets.json b/assets/assets.json index cb8e9a93..21253c8f 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -44517,11 +44517,6 @@ "start": 1193532, "size": 32 }, - { - "path": "picoBloom/gUnk_08123574.bin", - "start": 1193332, - "size": 6 - }, { "path": "animations/gSpriteAnimations_BigVortex_0.bin", "start": 1193624, diff --git a/data/const/object/picoBloom.s b/data/const/object/picoBloom.s deleted file mode 100644 index db60592d..00000000 --- a/data/const/object/picoBloom.s +++ /dev/null @@ -1,13 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123568:: @ 08123568 - .4byte sub_08098A90 - .4byte sub_08098AD0 - .4byte sub_08098AE8 - -gUnk_08123574:: @ 08123574 - .incbin "picoBloom/gUnk_08123574.bin" diff --git a/linker.ld b/linker.ld index 88e6fae6..92cf3305 100644 --- a/linker.ld +++ b/linker.ld @@ -751,7 +751,7 @@ SECTIONS { src/object/macroShoes.o(.text); src/object/objectOnSpinyBeetle.o(.text); src/object/object7E.o(.text); - asm/object/picoBloom.o(.text); + src/object/picoBloom.o(.text); src/object/board.o(.text); src/object/object81.o(.text); src/object/bigVortex.o(.text); @@ -1494,7 +1494,7 @@ SECTIONS { data/animations/object/pushableLever.o(.rodata); src/object/macroShoes.o(.rodata); src/object/objectOnSpinyBeetle.o(.rodata); - data/const/object/picoBloom.o(.rodata); + src/object/picoBloom.o(.rodata); data/animations/object/picoBloom.o(.rodata); src/object/board.o(.rodata); src/object/object81.o(.rodata); diff --git a/src/object/picoBloom.c b/src/object/picoBloom.c new file mode 100644 index 00000000..de912b8a --- /dev/null +++ b/src/object/picoBloom.c @@ -0,0 +1,47 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "asm.h" +#include "sound.h" + +void PicoBloom_Init(Entity*); +void PicoBloom_Action1(Entity*); +void PicoBloom_Action2(Entity*); + +void PicoBloom(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + PicoBloom_Init, + PicoBloom_Action1, + PicoBloom_Action2, + }; + + actionFuncs[this->action](this); +} + +void PicoBloom_Init(Entity* this) { + static const u8 typeAnimationStates[] = { 3, 0, 3, 3, 3, 3 }; + u32 nextAction; + + nextAction = this->type2; + if (nextAction != 1) { + nextAction = 2; + } + this->action = nextAction; + this->actionDelay = (Random() & 0x7f) + 0x7f; + this->collisionLayer = 1; + UpdateSpriteForCollisionLayer(this); + InitializeAnimation(this, typeAnimationStates[this->type] + this->type2); +} + +void PicoBloom_Action1(Entity* this) { + if (--this->actionDelay == 0) { + this->action++; + } +} + +void PicoBloom_Action2(Entity* this) { + GetNextFrame(this); + if (this->frame & 1) { + this->frame &= ~1; + EnqueueSFX(SFX_21B); + } +}