diff --git a/asm/object/objectA6.s b/asm/object/objectA6.s deleted file mode 100644 index 6a4dc1f4..00000000 --- a/asm/object/objectA6.s +++ /dev/null @@ -1,95 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectA6 -ObjectA6: @ 0x0809F908 - push {lr} - ldr r2, _0809F91C @ =gUnk_08124800 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809F91C: .4byte gUnk_08124800 - - thumb_func_start sub_0809F920 -sub_0809F920: @ 0x0809F920 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0809F934 - bl DeleteThisEntity -_0809F934: - movs r2, #1 - strb r2, [r4, #0xc] - 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, #4 - movs r0, #0x48 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x3f - strb r2, [r0] - subs r1, #5 - movs r0, #2 - strb r0, [r1] - ldr r0, _0809F960 @ =gHitbox_0 - str r0, [r4, #0x48] - pop {r4, pc} - .align 2, 0 -_0809F960: .4byte gHitbox_0 - - thumb_func_start sub_0809F964 -sub_0809F964: @ 0x0809F964 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0xa1 - bne _0809F9A8 - adds r0, r4, #0 - movs r1, #0x4e - movs r2, #0 - bl CreateFx - adds r2, r0, #0 - cmp r2, #0 - beq _0809F99A - adds r3, r2, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r3] - adds r1, r2, #0 - adds r1, #0x63 - movs r0, #0xfb - strb r0, [r1] -_0809F99A: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag - bl DeleteThisEntity -_0809F9A8: - pop {r4, pc} - .align 2, 0 diff --git a/data/const/object/objectA6.s b/data/const/object/objectA6.s deleted file mode 100644 index 112174af..00000000 --- a/data/const/object/objectA6.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08124800:: @ 08124800 - .4byte sub_0809F920 - .4byte sub_0809F964 diff --git a/linker.ld b/linker.ld index 69bb9989..852e2f08 100644 --- a/linker.ld +++ b/linker.ld @@ -791,7 +791,7 @@ SECTIONS { src/object/cloud.o(.text); src/object/minishLight.o(.text); asm/object/fireballChain.o(.text); - asm/object/objectA6.o(.text); + src/object/objectA6.o(.text); src/object/objectA7.o(.text); src/object/objectA8.o(.text); asm/object/objectA9.o(.text); @@ -1544,7 +1544,7 @@ SECTIONS { data/animations/object/objectA2.o(.rodata); data/const/object/cloud.o(.rodata); data/const/object/minishLight.o(.rodata); - data/const/object/objectA6.o(.rodata); + src/object/objectA6.o(.rodata); data/animations/object/objectA6.o(.rodata); src/object/objectA8.o(.rodata); data/const/object/objectA9.o(.rodata); diff --git a/src/object/objectA6.c b/src/object/objectA6.c new file mode 100644 index 00000000..fc77a54e --- /dev/null +++ b/src/object/objectA6.c @@ -0,0 +1,51 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "flags.h" +#include "hitbox.h" +#include "effects.h" + +typedef struct { + Entity base; + u8 filler[0x1E]; + u16 objFlags; +} ObjectA6Entity; + +void sub_0809F920(ObjectA6Entity*); +void sub_0809F964(ObjectA6Entity*); + +void ObjectA6(Entity* this) { + static void (*const actionFuncs[])(ObjectA6Entity*) = { + sub_0809F920, + sub_0809F964, + }; + + actionFuncs[this->action]((ObjectA6Entity*)this); +} + +void sub_0809F920(ObjectA6Entity* this) { + if (CheckFlags(this->objFlags)) { + DeleteThisEntity(); + } + + super->action = 1; + COLLISION_ON(super); + super->field_0x3c = 7; + super->hurtType = 0x48; + super->hitType = 1; + super->flags2 = 2; + super->hitbox = (Hitbox*)&gHitbox_0; +} + +void sub_0809F964(ObjectA6Entity* this) { + Entity* fxEnt; + + if (super->bitfield == 0xa1) { + fxEnt = CreateFx(super, FX_MAGIC_STORM, 0); + if (fxEnt != NULL) { + fxEnt->spritePriority.b0 = 3; + fxEnt->spriteOffsetY = -5; + } + SetFlag(this->objFlags); + DeleteThisEntity(); + } +}