diff --git a/data/overlays/actors/z_eff_dust.data.s b/data/overlays/actors/z_eff_dust.data.s deleted file mode 100644 index 6cbb55f5b0..0000000000 --- a/data/overlays/actors/z_eff_dust.data.s +++ /dev/null @@ -1,20 +0,0 @@ -.include "macro.inc" - - # assembler directives - .set noat # allow manual use of $at - .set noreorder # don't insert nops after branches - .set gp=64 # allow use of 64-bit general purpose registers - -.section .data - -.balign 16 - -glabel Eff_Dust_InitVars - .word 0x01010400, 0x00000030, 0x00010000, 0x00000568 -.word EffDust_Init -.word EffDust_Destroy -.word EffDust_Update -.word EffDust_Draw -glabel D_8099EB60 - .word 0xDF000000, 0x00000000, 0x00000000, 0x00000000 - diff --git a/spec b/spec index 00dff8369f..fda4e20c80 100644 --- a/spec +++ b/spec @@ -1612,7 +1612,6 @@ endseg beginseg name "ovl_Eff_Dust" include "build/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.o" - include "build/data/overlays/actors/z_eff_dust.data.o" include "build/data/overlays/actors/z_eff_dust.reloc.o" endseg diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c index bf0d809353..9e23d65325 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c @@ -9,9 +9,16 @@ void EffDust_Destroy(Actor* thisx, GlobalContext* globalCtx); void EffDust_Update(Actor* thisx, GlobalContext* globalCtx); void EffDust_Draw(Actor* thisx, GlobalContext* globalCtx); +s32 func_8099D8E0(EffDust* this); + +f32 func_8099DB28(EffDust* this, GlobalContext* globalCtx); +f32 func_8099DD74(EffDust* this, GlobalContext* globalCtx); +f32 func_8099DFC0(EffDust* this, GlobalContext* globalCtx); +f32 func_8099E4F4(EffDust* this, GlobalContext* globalCtx); +f32 func_8099E784(EffDust* this, GlobalContext* globalCtx); + extern UNK_TYPE D_04037880; -/* const ActorInit Eff_Dust_InitVars = { ACTOR_EFF_DUST, ACTORTYPE_NPC, @@ -23,9 +30,10 @@ const ActorInit Eff_Dust_InitVars = { (ActorFunc)EffDust_Update, (ActorFunc)EffDust_Draw, }; -*/ -extern Gfx D_8099EB60[]; +static Gfx *D_8099EB60[] = { + 0xDF000000, 0x00000000, 0x00000000, 0x00000000 +}; //#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/func_8099D8D0.s") @@ -43,9 +51,65 @@ void func_8099D8D8(EffDust* this, EffDustActionFunc callback) { #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/func_8099D8E0.s") -s32 func_8099D8E0(EffDust* this); +//#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/EffDust_Init.s") + +void EffDust_Init(Actor *thisx, GlobalContext *globalCtx) { + EffDust *this = THIS; + u32 sp20; + + sp20 = this->actor.params; + func_8099D8E0(this); + + switch(sp20){ + case 0: + func_8099D8D0(this, func_8099DB28); + func_8099D8D8(this, func_8099E4F4); + this->unk_0554 = 0.8f; + this->unk_0558 = 0.8f; + this->unk_0550 = 1.0f; + this->unk_055C = 0.1f; + break; + + case 1: + func_8099D8D0(this, func_8099DD74); + func_8099D8D8(this, func_8099E4F4); + this->unk_0550 = 0.8f; + this->unk_0558 = 0.8f; + this->unk_0554 = 1.0f; + this->unk_055C = 0.5f; + break; + + case 2: + func_8099D8D0(this, func_8099DFC0); + func_8099D8D8(this, func_8099E784); + this->unk_0550 = 0.5f; + this->unk_055C = 15.0f; + break; + + case 3: + func_8099D8D0(this, func_8099DFC0); + func_8099D8D8(this, func_8099E784); + this->unk_0550 = 0.5f; + this->unk_055C = 10.0f; + break; + + case 4: + func_8099D8D0(this, func_8099DFC0); + func_8099D8D8(this, func_8099E784); + this->actor.room = -1; + this->unk_0550 = 0.5f; + this->unk_055C = 20.0f; + break; + + default: + SystemArena_FreeDebug(this, "../z_eff_dust.c", 0xCA); + break; + + } + + this->unk_054D = 0xA; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/EffDust_Init.s") //#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/EffDust_Destroy.s") @@ -56,24 +120,14 @@ void EffDust_Destroy(Actor *thisx, GlobalContext *globalCtx) { #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/func_8099DB28.s") -f32 func_8099DB28(EffDust* this, GlobalContext* globalCtx); - #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/func_8099DD74.s") -f32 func_8099DD74(EffDust* this, GlobalContext* globalCtx); - #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/func_8099DFC0.s") -f32 func_8099DFC0(EffDust* this, GlobalContext* globalCtx); - #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/EffDust_Update.s") #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/func_8099E4F4.s") -f32 func_8099E4F4(EffDust* this, GlobalContext* globalCtx); - #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/func_8099E784.s") -f32 func_8099E784(EffDust* this, GlobalContext* globalCtx); - #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Eff_Dust/EffDust_Draw.s") diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h index aabb22a96c..77a95db79f 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h @@ -10,7 +10,13 @@ typedef f32 (*EffDustActionFunc)(struct EffDust *, GlobalContext *); typedef struct EffDust { /* 0x0000 */ Actor actor; - /* 0x014C */ char unk_14C[0x414]; + /* 0x014C */ char unk_14C[0x401]; + /* 0x054D */ u8 unk_054D; + /* 0x054E */ char unk_54E[0x02]; + /* 0x0550 */ f32 unk_0550; + /* 0x0554 */ f32 unk_0554; + /* 0x0558 */ f32 unk_0558; + /* 0x055C */ f32 unk_055C; /* 0x0560 */ EffDustActionFunc unk_0560; /* 0x0560 */ EffDustActionFunc unk_0564; } EffDust; // size = 0x0568