diff --git a/decompressed.us.v10.yaml b/decompressed.us.v10.yaml index d758a310..b1603c6d 100644 --- a/decompressed.us.v10.yaml +++ b/decompressed.us.v10.yaml @@ -727,7 +727,8 @@ segments: - [0xFBFE10, c, code_6A4B0] - [0xFC0850, c, code_6AEF0] #DONE - [0xFC0990, c, code_6B030] #DONE - - [0xFC1D40, c, code_6C3E0] #DONE + - [0xFC1D40, c, fx/ripple] #DONE + - [0xFC2040, c, fx/sparkle] #DONE - [0xFC2680, c, code_6CD20] #DONE - [0xFC2820, c, code_6CEC0] #DONE - [0xFC2990, c, code_6D030] #DONE @@ -1008,7 +1009,8 @@ segments: - [0x10373A0, .data, code_6A4B0] - [0x1037470, .data, code_6AEF0] - [0x1037480, .data, code_6B030] - - [0x1037500, .data, code_6C3E0] + - [0x1037500, .data, fx/ripple] + - [0x10375A0, .data, fx/sparkle] - [0x1037750, .data, code_6CD20] - [0x10377A0, .data, code_6D030] - [0x10377B0, .data, code_6D270] @@ -1258,7 +1260,8 @@ segments: - [0x1045B80, .rodata, particle] - [0x1045BA0, .rodata, code_6A4B0] - [0x1045BB0, .rodata, code_6B030] - - [0x1045BC0, .rodata, code_6C3E0] + - [0x1045BC0, .rodata, fx/ripple] + - [0x1045BD0, .rodata, fx/sparkle] - [0x1045BE0, .rodata, code_6CEC0] - [0x1045BF0, .rodata, code_6D030] - [0x1045C00, .rodata, code_6D270] @@ -1515,7 +1518,7 @@ segments: - [0x1048560, .bss, code_69F60] - [0x1048560, .bss, code_6AEF0] - [0x1048560, .bss, code_6B030] - - [0x1048560, .bss, code_6C3E0] + - [0x1048560, .bss, fx/ripple] - [0x1048560, .bss, code_6CD20] - [0x1048560, .bss, code_6CEC0] - [0x1048560, .bss, code_6D030] diff --git a/include/core2/particle.h b/include/core2/particle.h index 3de9d085..9c35b0f6 100644 --- a/include/core2/particle.h +++ b/include/core2/particle.h @@ -5,7 +5,21 @@ #define PART_EMIT_NO_DEPTH 0x10 #define PART_EMIT_NO_LOOP 0x8 -#define PART_EMIT_3D_ROTATE 0x1 +#define PART_EMIT_ROTATABLE 0x1 + + +void particleEmitter_setAlpha(ParticleEmitter *this, s32 alpha); +void particleEmitter_setSfx(ParticleEmitter *this, enum sfx_e sfx_id, s32 arg2); +void func_802EFA04(ParticleEmitter *this, f32); +void particleEmitter_setParticleCallback(ParticleEmitter *this, void (*arg1)(ParticleEmitter *this, f32 pos[3])); +void func_802EFA20(ParticleEmitter *this, f32, f32); +void func_802EFA34(ParticleEmitter *this, f32); +void func_802EFA40(ParticleEmitter *this, f32 (*)[3]); +void func_802EFA78(ParticleEmitter *this, s32 arg1); +void func_802EFF5C(ParticleEmitter *this, f32, f32, f32); +void func_802EFF7C(ParticleEmitter *this, f32, f32, f32); +void func_802EFF9C(ParticleEmitter *this, f32); +void partEmitMgr_freeEmitter(ParticleEmitter *this); #endif diff --git a/include/functions.h b/include/functions.h index f4e5eef5..6541fc01 100644 --- a/include/functions.h +++ b/include/functions.h @@ -587,7 +587,7 @@ bool func_80311480(s32 text_id, s32 arg1, f32 *pos, ActorMarker *marker, void(*c void ability_unlock(enum ability_e); extern void func_802EE278(Actor *, s32, s32, s32, f32, f32); -extern void func_802F3BF4(s16[3]); +extern void fxSparkle_chTreasure(s16[3]); extern void actor_collisionOn(Actor *); extern void func_80328AC8(Actor *, s32); diff --git a/include/structs.h b/include/structs.h index 74e4fc84..bcd55c89 100644 --- a/include/structs.h +++ b/include/structs.h @@ -338,27 +338,10 @@ typedef struct struct_21_s{ void * unk1; }struct21s; -//particle -typedef struct struct_2F_s{ - f32 acceleration[3]; - f32 fade; - f32 frame; //frame - f32 framerate; //framerate - f32 position[3]; - f32 rotation[3]; - f32 scale; //size - f32 initialSize_34; //initial_size - f32 finalSizeDiff; //delta_size - f32 angluar_velocity[3]; - f32 age_48; - f32 lifetime_4C; - f32 velocity_50[3]; - u8 unk5C; - u8 pad5D[3]; -} Particle; + //particle_ctrl -typedef struct struct_30_s{ +typedef struct particle_emitter{ u32 pad0_31:8; u32 doneSpawning_0_23:7; //doneSpawning u32 unk0_16:1; @@ -388,7 +371,7 @@ typedef struct struct_30_s{ f32 unk74; f32 unk78; s32 unk7C; - void (*particleCallback_80)(struct struct_30_s *, f32 [3]); //particleCallback + void (*particleCallback_80)(struct particle_emitter *, f32 [3]); //particleCallback PAIR(s32, particleStartingFrameRange_84); PAIR(f32, particleFramerateRange_8C); TUPLE_PAIR(f32, particleSpawnPositionRange_94); @@ -414,10 +397,9 @@ typedef struct struct_30_s{ f32 unk108; f32 unk10C[3]; f32 unk118[3]; - Particle *pList_start_124; //start_ptr? - Particle *pList_end_128; //end_ptr - Particle *pList_capacity_12C; //capacity_end_ptr; - Particle data[];//end of struct 0x130 + struct particle *pList_start_124; //start_ptr? + struct particle *pList_end_128; //end_ptr + struct particle *pList_capacity_12C; //capacity_end_ptr; } ParticleEmitter; typedef struct struct_31_s{ diff --git a/src/CC/code_530.c b/src/CC/code_530.c index 132db1cd..1bac6a15 100644 --- a/src/CC/code_530.c +++ b/src/CC/code_530.c @@ -53,7 +53,7 @@ void CC_func_80386920(Actor *this, s32 next_state){ func_8025A6EC(COMUSIC_2B_DING_B, 0x7fff); player_getPosition(&sp28); TUPLE_COPY(sp20, sp28); - func_802F3A60(&sp20); + fxSparkle_giantGoldFeather(&sp20); } if(next_state == 4){ diff --git a/src/TTC/ch/treasure.c b/src/TTC/ch/treasure.c index 82980b37..d1bd3b05 100644 --- a/src/TTC/ch/treasure.c +++ b/src/TTC/ch/treasure.c @@ -69,7 +69,7 @@ void chtreasure_update(Actor *this){ sp34[1] = (s16)sp3C[1]; sp34[2] = (s16)sp3C[2]; sp34[1] += 50; - func_802F3BF4(sp34); + fxSparkle_chTreasure(sp34); switch(this->state){ case 1://L8038C29C diff --git a/src/core1/code_72B0.c b/src/core1/code_72B0.c index 2be552f9..eb83d545 100644 --- a/src/core1/code_72B0.c +++ b/src/core1/code_72B0.c @@ -309,7 +309,7 @@ BKCollisionTri *func_802457C4(f32 arg0[3], f32 arg1[3], f32 arg2, f32 arg3, f32 return var_v1; } -void func_8024587C(BKCollisionTri *dst, BKCollisionTri *src){ +void collisionTri_copy(BKCollisionTri *dst, BKCollisionTri *src){ dst->unk0[0] = src->unk0[0]; dst->unk0[1] = src->unk0[1]; dst->unk0[2] = src->unk0[2]; diff --git a/src/core2/ba/marker.c b/src/core2/ba/marker.c index 5528398d..c2576756 100644 --- a/src/core2/ba/marker.c +++ b/src/core2/ba/marker.c @@ -180,7 +180,7 @@ void __baMarker_resolveMusicNoteCollision(Prop *arg0) { func_8025A6EC(COMUSIC_9_NOTE_COLLECTED, 16000); timedFunc_set_1(0.75f, func_8035644C, 3); } - func_802F379C(arg0->unk4); + fxSparkle_musicNote(arg0->unk4); } void __baMarker_8028BAB0(enum jiggy_e jiggy_id, s32 arg1, s32 arg2, s32 arg3){ @@ -564,7 +564,7 @@ void __baMarker_resolveCollision(Prop *other_prop){ if(!(item_getCount(ITEM_13_EMPTY_HONEYCOMB) < 6)){ gcpausemenu_80314AC8(0); } - func_802F36DC(&other_prop->actorProp.x); + fxSparkle_emptyHoneycomb(&other_prop->actorProp.x); marker_despawn(marker); } } @@ -592,7 +592,7 @@ void __baMarker_resolveCollision(Prop *other_prop){ func_8025A6EC(COMUSIC_16_HONEYCOMB_COLLECTED, 28000); timedFunc_set_1(0.75f, func_8035644C, 0xA); item_inc(ITEM_14_HEALTH); - func_802F373C(&other_prop->actorProp.x); + fxSparkle_honeycomb(&other_prop->actorProp.x); marker_despawn(marker); break; @@ -702,7 +702,7 @@ void __baMarker_resolveCollision(Prop *other_prop){ } func_8025A6EC(COMUSIC_15_EXTRA_LIFE_COLLECTED, 0x7FFF); timedFunc_set_1(1.5f, func_8035646C, 0xC); - func_802F3B3C(&other_prop->actorProp.x); + fxSparkle_extraLife(&other_prop->actorProp.x); item_inc(ITEM_16_LIFE); marker_despawn(marker); break; diff --git a/src/core2/ch/collectable.c b/src/core2/ch/collectable.c index 59cbf8e9..a45f6cda 100644 --- a/src/core2/ch/collectable.c +++ b/src/core2/ch/collectable.c @@ -96,7 +96,7 @@ bool chcollectable_collectItem(Actor* actor, u32 arg1, enum asset_e dialogId, en s32 chcollectable_collectEgg(ActorProp *arg0){ Actor *actPtr = NULL; if(arg0 != NULL){ - func_802F3808(&arg0->x); + fxSparkle_blueEgg(&arg0->x); if(arg0->unk8_0) actPtr = marker_getActor(arg0->marker); } @@ -105,7 +105,7 @@ s32 chcollectable_collectEgg(ActorProp *arg0){ void chcollectable_collectRedFeather(ActorProp *arg0){ Actor *actPtr = NULL; - func_802F38F0(&arg0->x); + fxSparkle_redFeather(&arg0->x); if(arg0->unk8_0) actPtr = marker_getActor(arg0->marker); chcollectable_collectItem(actPtr, 6, 0xD9F, COMUSIC_B_RED_FEATHER_COLLECTED, 0xF, 4.0f); @@ -113,7 +113,7 @@ void chcollectable_collectRedFeather(ActorProp *arg0){ void chcollectable_collectGoldFeather(ActorProp *arg0){ Actor *actPtr = NULL; - func_802F39D8(&arg0->x); + fxSparkle_goldFeather(&arg0->x); if(arg0->unk8_0) actPtr = marker_getActor(arg0->marker); chcollectable_collectItem(actPtr, 7, 0xDA0, COMUSIC_14_GOLD_FEATHER_COLLECTED, ITEM_10_GOLD_FEATHER, 6.0f); diff --git a/src/core2/ch/drips.c b/src/core2/ch/drips.c index b443d8f0..d8a4db68 100644 --- a/src/core2/ch/drips.c +++ b/src/core2/ch/drips.c @@ -38,7 +38,7 @@ struct43s D_80372B00 = { void func_80359A40(f32 position[3], struct_core2_D2AB0 *arg1, s32 cnt){ ParticleEmitter *pCtrl = partEmitMgr_newEmitter(cnt); particleEmitter_setSprite(pCtrl, ASSET_70C_SPRITE_RIPPLE); - particleEmitter_setDrawMode(pCtrl, PART_EMIT_3D_ROTATE); + particleEmitter_setDrawMode(pCtrl, PART_EMIT_ROTATABLE); particleEmitter_setRGB(pCtrl, D_80372AE4); particleEmitter_setPosition(pCtrl, position); func_802EFB70(pCtrl, 0.1f, 0.1f); diff --git a/src/core2/code_14420.c b/src/core2/code_14420.c index df195f60..3ff04844 100644 --- a/src/core2/code_14420.c +++ b/src/core2/code_14420.c @@ -599,7 +599,7 @@ void func_8029C0D0(void) { _player_getPosition(sp3C); sp3C[1] = sp34 = func_80294500(); p_ctrl = func_802F4094(sp3C, 35.0f); - func_802F3554(3, sp3C); + fxRipple_802F3554(3, sp3C); particleEmitter_setParticleVelocityRange(p_ctrl, -350.0f, 300.0f, -350.0f, 350.0f, 500.0f, 350.0f); particleEmitter_emitN(p_ctrl, 0xA); particleEmitter_setParticleVelocityRange(p_ctrl, -150.0f, 500.0f, -150.0f, 150.0f, 800.0f, 150.0f); @@ -635,7 +635,7 @@ void func_8029C304(s32 arg0) { _player_getPosition(sp1C); sp1C[1] = func_80294500(); - func_802F3584(arg0, sp1C, func_802946CC()); + fxRipple_802F3584(arg0, sp1C, func_802946CC()); } void func_8029C348(void) { diff --git a/src/core2/code_3EC30.c b/src/core2/code_3EC30.c index a497ee0f..7cab4ad9 100644 --- a/src/core2/code_3EC30.c +++ b/src/core2/code_3EC30.c @@ -13,7 +13,7 @@ void func_802C5BC0(Actor *this){ actor_collisionOff(this); this->unk60 = 0.0f; this->pitch = 90.0f; - func_802F3554(4, this->position); + fxRipple_802F3554(4, this->position); this->initialized = TRUE; } else{ diff --git a/src/core2/code_42CB0.c b/src/core2/code_42CB0.c index 05ccfe73..1025d285 100644 --- a/src/core2/code_42CB0.c +++ b/src/core2/code_42CB0.c @@ -88,7 +88,7 @@ void func_802C9D80(void){ } } } - func_802F373C(&s5->propPtr->x); + fxSparkle_honeycomb(&s5->propPtr->x); marker_despawn(s5); } diff --git a/src/core2/code_4C020.c b/src/core2/code_4C020.c index 6a813bab..7005c207 100644 --- a/src/core2/code_4C020.c +++ b/src/core2/code_4C020.c @@ -7,7 +7,7 @@ extern f32 func_80258640(f32 [3], f32[3]); extern void func_8025A788(enum comusic_e, f32, f32); extern void func_8031CC40(enum map_e, s32); -extern void func_802F363C(f32); +extern void fxRipple_802F363C(f32); extern void func_802F9D38(s32); extern void func_802EE6CC(f32[3], f32[3], s32[4], s32, f32, f32, s32, s32, s32); extern void ml_vec3f_assign(f32[3], f32, f32, f32); @@ -865,7 +865,7 @@ void func_802D5260(void) { func_8034DEB4(sp38, sp34); player_getPosition(sp28); - func_802F363C(sp34 + ((sp3C != -1) ? (D_803679E0[sp3C] + ((sp3C == 2) ? (6600.0f < sp28[0]) ? -200 : 0 : 0)) : 0)); + fxRipple_802F363C(sp34 + ((sp3C != -1) ? (D_803679E0[sp3C] + ((sp3C == 2) ? (6600.0f < sp28[0]) ? -200 : 0 : 0)) : 0)); } } diff --git a/src/core2/code_59A80.c b/src/core2/code_59A80.c index fc4847b8..a2316016 100644 --- a/src/core2/code_59A80.c +++ b/src/core2/code_59A80.c @@ -30,7 +30,7 @@ void chMumboToken_collect(ActorMarker *marker, ActorMarker *other_marker){ mumboscore_set(func_802E0CB0(this), TRUE); func_8030E760(0x401, 1.0f, 0x7fff); timedFunc_set_1(0.75f, func_8035644C, 4); - func_802F3AC0(&marker->propPtr->x); + fxSparkle_mumboToken(&marker->propPtr->x); item_inc(ITEM_1C_MUMBO_TOKEN); marker_despawn(marker); diff --git a/src/core2/code_66D90.c b/src/core2/code_66D90.c index 50b5fa4a..784226f4 100644 --- a/src/core2/code_66D90.c +++ b/src/core2/code_66D90.c @@ -23,7 +23,7 @@ void func_802EDD44(void){ } void func_802EDD68(ParticleEmitter *caller, f32 pos[3]){ - func_802F3554(0, pos); + fxRipple_802F3554(0, pos); } ParticleEmitter *func_802EDD8C(f32 pos[3], f32 xz_range, f32 arg2){ diff --git a/src/core2/code_69F60.c b/src/core2/code_69F60.c index 1380ee32..6339d6f8 100644 --- a/src/core2/code_69F60.c +++ b/src/core2/code_69F60.c @@ -106,9 +106,9 @@ void func_802F1320(void){ void func_802F1388(void){ func_802EDD20(); - func_802F35B4(); + fxRipple_free(); func_802F1E80(); - func_802F3C64(); + fxSparkle_free(); func_802F404C(); func_802F422C(); func_802EE684(); @@ -117,9 +117,9 @@ void func_802F1388(void){ void func_802F13E0(void){ func_802EDD44(); - func_802F35D8(); + fxRipple_init(); func_802F1EA4(); - func_802F3C84(); + fxSparkle_init(); func_802F4070(); func_802F4250(); func_802EE63C(); diff --git a/src/core2/code_6C3E0.c b/src/core2/code_6C3E0.c deleted file mode 100644 index 9c23a879..00000000 --- a/src/core2/code_6C3E0.c +++ /dev/null @@ -1,289 +0,0 @@ -#include -#include "functions.h" -#include "variables.h" -#include "core2/particle.h" - -extern bool func_8024549C(f32[3], f32); -extern void func_802EFAB0(ParticleEmitter *, s32, f32); -extern ParticleEmitter *func_802F3670(s16[3], f32, enum asset_e); -extern void func_802F0EAC(ParticleEmitter *, f32); -extern ParticleEmitter *func_802F0EF0(u8); -extern ParticleEmitter *func_802F3E98(f32 pos[3], enum asset_e sprite_id); - -typedef struct { - f32 unk0[2]; - f32 unk8; - f32 unkC[2]; - f32 unk14[2]; - u8 unk1C[3]; - u8 unk1F; -}Struct_Core2_6C3E0; - -/* .data */ -Struct_Core2_6C3E0 D_80368B30[] = { - {{0.7f, 0.9f}, 0.5f, {0.1f, 0.1f}, { 0.4f, 0.6f}, {0xFF, 0xFF, 0xFE}, 0}, - {{0.8f, 1.2f}, 0.5f, {0.1f, 0.1f}, { 0.9f, 1.8f}, {0xFF, 0xFF, 0xFE}, 1}, - {{0.8f, 1.0f}, 0.5f, {0.1f, 0.1f}, { 0.6f, 1.0f}, {0xFF, 0xFF, 0xFE}, 2}, - {{0.7f, 0.7f}, 0.5f, {0.4f, 0.4f}, { 1.8f, 1.9f}, {0xFF, 0xFF, 0xFE}, 3}, - {{1.5f, 1.5f}, 0.5f, {0.1f, 0.1f}, {12.0f, 12.0f}, {0xFF, 0xFF, 0xFE}, 4} -}; - -struct42s D_80368BD0 = { - {{-100.0f, 100.0f, -100.0f}, { 100.0f, 250.0f, 100.0f}}, - {{ -10.0f, 10.0f, -10.0f}, { 10.0f, 10.0f, 10.0f}} -}; - -struct42s D_80368C00 = { - {{-100.0f, 100.0f, -100.0f}, { 100.0f, 250.0f, 100.0f}}, - {{ -10.0f, 10.0f, -10.0f}, { 10.0f, 10.0f, 10.0f}} -}; - -struct42s D_80368C30 = { - {{-200.0f, 100.0f, -200.0f}, { 200.0f, 350.0f, 200.0f}}, - {{ -30.0f, 100.0f, -30.0f}, { 30.0f, 100.0f, 30.0f}} -}; - -struct42s D_80368C60 = { - {{-125.0f, 100.0f, -125.0f}, { 125.0f, 250.0f, 125.0f}}, - {{ -15.0f, 100.0f, -15.0f}, { 15.0f, 100.0f, 15.0f}} -}; - -struct42s D_80368C90 = { - {{-125.0f, 100.0f, -125.0f}, { 125.0f, 250.0f, 125.0f}}, - {{ -15.0f, 100.0f, -15.0f}, { 15.0f, 100.0f, 15.0f}} -}; - -struct42s D_80368CC0 = { - {{-100.0f, 100.0f, -100.0f}, { 100.0f, 250.0f, 100.0f}}, - {{ -15.0f, 15.0f, -15.0f}, { 15.0f, 15.0f, 15.0f}} -}; - -struct42s D_80368CF0 = { - {{ -75.0f, 100.0f, -75.0f}, { 75.0f, 250.0f, 75.0f}}, - {{ -8.0f, 5.0f, -8.0f}, { -5.0f, 35.0f, 8.0f}} -}; - -struct42s D_80368D20 = { - {{ 0.0f, 0.0f, 0.0f}, { 0.0f, 0.0f, 0.0f}}, - {{ -15.0f, -15.0f, -15.0f}, { 15.0f, 15.0f, 15.0f}} -}; - -struct42s D_80368D50 = { - {{ 0.0f, 0.0f, 0.0f}, { 0.0f, 0.0f, 0.0f}}, - {{ -25.0f, -5.0f, -25.0f}, { 25.0f, 5.0f, 25.0f}} -}; - -/* .bss */ -u8 D_80380A60; - -/* .code */ -bool func_802F3370(f32 arg0[3], s32 *arg1, bool arg2){ - f32 sp1C; - - *arg1 = 0; - if(arg2){ - arg0[1] += 1.0f; - } else { - arg2 = func_8024549C(arg0, 20.0f); - if(!arg2){ - return FALSE; - } - } - - if(func_80245524(arg0, arg2, arg1, &sp1C)){ - arg0[1] = sp1C; - } - return TRUE; -} - -ParticleEmitter *func_802F3404(s32 arg0, f32 arg1[3], bool arg2){ - s32 sp44; - f32 sp38[3]; - ParticleEmitter *p_emitter; - s32 sp28[3]; - Struct_Core2_6C3E0 *var_s0; - - ml_vec3f_copy(sp38, arg1); - if(!func_802F3370(sp38, &sp44, arg2)){ - return NULL; - } - sp38[1] += 3.0f; - p_emitter = func_802F0EF0(D_80380A60); - particleEmitter_setSprite(p_emitter, ASSET_70C_SPRITE_RIPPLE); - particleEmitter_setDrawMode(p_emitter, PART_EMIT_3D_ROTATE); - if(sp44){ - func_802EFAB0(p_emitter, sp44, sp38[1]); - } - else{ - func_802EFAB0(p_emitter, 0, 0.0f); - } - var_s0 = &D_80368B30[arg0]; - sp28[0] = (s32) var_s0->unk1C[0]; - sp28[1] = (s32) var_s0->unk1C[1]; - sp28[2] = (s32) var_s0->unk1C[2]; - particleEmitter_setFade(p_emitter, 0.0f, var_s0->unk8); - particleEmitter_setPosition(p_emitter, sp38); - particleEmitter_setRGB(p_emitter, sp28); - func_802EFB70(p_emitter, var_s0->unkC[0], var_s0->unkC[1]); - func_802EFB84(p_emitter, var_s0->unk14[0], var_s0->unk14[1]); - particleEmitter_setParticleLifeTimeRange(p_emitter, var_s0->unk0[0], var_s0->unk0[1]); - func_802EFF50(p_emitter, 100.0f); - return p_emitter; -} - -void func_802F3554(s32 arg0, f32 arg1[3]){ - ParticleEmitter *p_emitter = func_802F3404(arg0, arg1, 0); - if(p_emitter != NULL){ - particleEmitter_emitN(p_emitter, 1); - } -} - -void func_802F3584(s32 arg0, f32 arg1[3], s32 arg2){ - ParticleEmitter *p_emitter = func_802F3404(arg0, arg1, arg2); - if(p_emitter != NULL){ - particleEmitter_emitN(p_emitter, 1); - } -} - -void func_802F35B4(void){ - func_802F1190(D_80380A60); -} - -void func_802F35D8(void){ - D_80380A60 = func_802F0F78(0x19); -} - -ParticleEmitter *func_802F35FC(s32 arg0, f32 arg1[3]){ - return func_802F3404(arg0, arg1, 0); -} - -ParticleEmitter *func_802F361C(s32 arg0, f32 arg1[3], s32 arg2){ - return func_802F3404(arg0, arg1, arg2); -} - -void func_802F363C(f32 arg0){ - func_802F0EAC(func_802F0EF0(D_80380A60), arg0); -} - -ParticleEmitter *func_802F3670(s16 arg0[3], f32 arg1, enum asset_e sprite_id){ - f32 sp1C[3]; - - sp1C[0] = (f32)arg0[0]; - sp1C[1] = (f32)arg0[1]; - sp1C[2] = (f32)arg0[2]; - sp1C[1] += arg1; - - return func_802F3E98(sp1C, sprite_id); -} - -void func_802F36DC(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 10.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); - particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368BD0); - func_802EFB70(p_emitter, 0.32f, 0.32f); - particleEmitter_emitN(p_emitter, 10); -} - -void func_802F373C(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 10.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); - particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368C00); - func_802EFB70(p_emitter, 0.32f, 0.32f); - particleEmitter_emitN(p_emitter, 7); -} - -void func_802F379C(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 7.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); - particleEmitter_setParticleVelocityRange(p_emitter, - -70.0f, 100.0f, -70.0f, - 70.0f, 250.0f, 70.0f - ); - particleEmitter_emitN(p_emitter, 5); -} - -void func_802F3808(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 7.0f, ASSET_716_SPRITE_SPARKLE_WHITE); - particleEmitter_setParticleVelocityRange(p_emitter, - -70.0f, 100.0f, -70.0f, - 70.0f, 250.0f, 70.0f - ); - particleEmitter_emitN(p_emitter, 5); -} - -void func_802F3874(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 25.0f, ASSET_716_SPRITE_SPARKLE_WHITE); - particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368C30); - func_802EFB70(p_emitter, 0.5f, 0.5f); - particleEmitter_emitN(p_emitter, 12); - particleEmitter_setParticleLifeTimeRange(p_emitter, 1.5f, 1.5f); -} - -void func_802F38F0(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 12.0f, ASSET_715_SPRITE_SPARKLE_RED); - particleEmitter_setParticleVelocityRange(p_emitter, - -75.0f, 100.0f, -75.0f, - 75.0f, 250.0f, 75.0f - ); - func_802EFB70(p_emitter, 0.3f, 0.3f); - particleEmitter_emitN(p_emitter, 5); -} - -void func_802F3978(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 40.0f, ASSET_715_SPRITE_SPARKLE_RED); - particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368C60); - func_802EFB70(p_emitter, 0.5f, 0.5f); - particleEmitter_emitN(p_emitter, 10); -} - -void func_802F39D8(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 7.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); - particleEmitter_setParticleVelocityRange(p_emitter, - -75.0f, 100.0f, -75.0f, - 75.0f, 250.0f, 75.0f - ); - func_802EFB70(p_emitter, 0.3f, 0.3f); - particleEmitter_emitN(p_emitter, 5); -} - -void func_802F3A60(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 40.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); - particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368C90); - func_802EFB70(p_emitter, 0.5f, 0.5f); - particleEmitter_emitN(p_emitter, 10); -} - -void func_802F3AC0(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 10.0f, ASSET_718_SPRITE_SPARKLE_WHITE_2); - particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368CC0); - func_802EFB70(p_emitter, 0.4f, 0.4f); - particleEmitter_emitN(p_emitter, 7); - particleEmitter_setParticleLifeTimeRange(p_emitter, 1.5f, 1.5f); -} - -void func_802F3B3C(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 10.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); - particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368CF0); - func_802EFB70(p_emitter, 0.27f, 0.27f); - particleEmitter_emitN(p_emitter, 5); -} - -void func_802F3B9C(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 10.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); - particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368D20); - func_802EFB70(p_emitter, 0.25f, 0.3f); - particleEmitter_emitN(p_emitter, 1); -} - -void func_802F3BF4(s16 arg0[3]){ - ParticleEmitter *p_emitter = func_802F3670(arg0, 10.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); - particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368D50); - func_802EFB70(p_emitter, 0.45f, 0.6f); - particleEmitter_setParticleLifeTimeRange(p_emitter, 0.5f, 0.8f); - particleEmitter_emitN(p_emitter, 3); -} - -void func_802F3C64(void){ - func_802F3E50(); -} - -void func_802F3C84(void){ - func_802F3E74(); -} diff --git a/src/core2/code_6D030.c b/src/core2/code_6D030.c index 1987cb85..1f41f9ce 100644 --- a/src/core2/code_6D030.c +++ b/src/core2/code_6D030.c @@ -1,20 +1,16 @@ #include #include "functions.h" #include "variables.h" - -extern void func_802EFA04(ParticleEmitter *, f32); +#include "core2/particle.h" ParticleEmitter *func_802F4094(f32 pos[3], f32 arg1); -/* .data */ -s32 D_80368DD0[3] = {0xff, 0xff, 0xfe}; - /* .bss */ u8 D_80380A90; /* .code */ void func_802F3FC0(ParticleEmitter *this, f32 pos[3]){ - func_802F3554(0, pos); + fxRipple_802F3554(0, pos); } void func_802F3FE4(f32 pos[3]){ @@ -37,6 +33,8 @@ void func_802F4070(void){ ParticleEmitter *func_802F4094(f32 pos[3], f32 arg1){ ParticleEmitter *pCtrl; + static s32 D_80368DD0[3] = {0xff, 0xff, 0xfe}; + pCtrl = func_802F0EF0(D_80380A90); particleEmitter_setSprite(pCtrl, ASSET_70B_SPRITE_BUBBLE_2); diff --git a/src/core2/code_94A20.c b/src/core2/code_94A20.c index 0a85b28b..e90b021a 100644 --- a/src/core2/code_94A20.c +++ b/src/core2/code_94A20.c @@ -4,7 +4,7 @@ BKCollisionTri *func_80309B48(f32 *, f32 *, f32 *, u32); void func_8031C608(struct0 *this); -void func_8031BD98(struct0 *, f32, s32, s32, f32 *, void *, s32); +void func_8031BD98(struct0 *, f32, s32, s32, f32 *, void *, BKCollisionTri *); void func_8031BE98(struct0*, f32, BKCollisionTri *); @@ -126,9 +126,9 @@ s32 func_8031BCF4(struct0 *this) { return 3; } -void func_8031BD98(struct0 *this, f32 arg1, s32 arg2, s32 arg3, f32 *normPtr, void *model, s32 arg6){ +void func_8031BD98(struct0 *this, f32 arg1, s32 arg2, s32 arg3, f32 *normPtr, void *model, BKCollisionTri *arg6){ if(arg6){ - func_8024587C(&this->unk4, arg6); + collisionTri_copy(&this->unk4, arg6); } this->unk58 = 1; this->unk4C = arg2; @@ -148,7 +148,7 @@ void func_8031BE58(struct0 *this){ void func_8031BE98(struct0 *this, f32 arg1, BKCollisionTri * arg2){ if(arg2 != NULL) - func_8024587C(&this->unk10, arg2); + collisionTri_copy(&this->unk10, arg2); this->unk59 = 1; this->posY = arg1; } diff --git a/src/core2/code_BD100.c b/src/core2/code_BD100.c index 262f7d06..98bdc7c3 100644 --- a/src/core2/code_BD100.c +++ b/src/core2/code_BD100.c @@ -96,7 +96,7 @@ void func_80344138(BKSpriteDisplayData *self, s32 frame, s32 mirrored, f32 posit func_80344124(); } -void func_80344424(BKSpriteDisplayData *arg0, s32 frame, bool mirrored, f32 arg3[3], f32 scale[3], f32 rotation, Gfx **gfx, Mtx **mtx) { +void func_80344424(BKSpriteDisplayData *arg0, s32 frame, bool mirrored, f32 position[3], f32 scale[3], f32 rotation, Gfx **gfx, Mtx **mtx) { f32 sp6C[3]; f32 sp60[3]; f32 sp5C; @@ -111,9 +111,9 @@ void func_80344424(BKSpriteDisplayData *arg0, s32 frame, bool mirrored, f32 arg3 func_8024C5CC(sp6C); func_8024C5A8(sp60); - sp50[0] = arg3[0] - sp6C[0]; - sp50[1] = arg3[1] - sp6C[1]; - sp50[2] = arg3[2] - sp6C[2]; + sp50[0] = position[0] - sp6C[0]; + sp50[1] = position[1] - sp6C[1]; + sp50[2] = position[2] - sp6C[2]; sp5C = sp60[0]*sp50[0] + sp60[1]*sp50[1] + sp60[2]*sp50[2]; if ((sp5C < 0.0f) || (20000.0f < sp5C)) { func_80344124(); @@ -157,7 +157,7 @@ void func_80344424(BKSpriteDisplayData *arg0, s32 frame, bool mirrored, f32 arg3 } -void func_80344720(BKSpriteDisplayData *arg0, s32 frame, bool mirrored, f32 arg3[3], f32 rotation[3], f32 scale[3], Gfx **gfx, Mtx **mtx) { +void func_80344720(BKSpriteDisplayData *arg0, s32 frame, bool mirrored, f32 position[3], f32 rotation[3], f32 scale[3], Gfx **gfx, Mtx **mtx) { f32 sp5C[3]; f32 sp50[3]; f32 sp4C; @@ -169,9 +169,9 @@ void func_80344720(BKSpriteDisplayData *arg0, s32 frame, bool mirrored, f32 arg3 func_8024C5CC(sp5C); func_8024C5A8(sp50); - sp40[0] = arg3[0] - sp5C[0]; - sp40[1] = arg3[1] - sp5C[1]; - sp40[2] = arg3[2] - sp5C[2]; + sp40[0] = position[0] - sp5C[0]; + sp40[1] = position[1] - sp5C[1]; + sp40[2] = position[2] - sp5C[2]; sp4C = sp50[0]*sp40[0] + sp50[1]*sp40[1] + sp50[2]*sp40[2]; if ((sp4C < 0.0f) || (20000.0f < sp4C)) { func_80344124(); diff --git a/src/core2/code_C4B0.c b/src/core2/code_C4B0.c index 3acece7d..3ba73e53 100644 --- a/src/core2/code_C4B0.c +++ b/src/core2/code_C4B0.c @@ -380,7 +380,7 @@ void func_80293F0C(void){ _player_getPosition(sp38); ml_vec3f_diff_copy(D_8037C268, sp38, sp2C); if (D_8037C204) { - func_8024587C(&D_8037C208, D_8037C204); + collisionTri_copy(&D_8037C208, D_8037C204); D_8037C204 = &D_8037C208; } } diff --git a/src/core2/fx/ripple.c b/src/core2/fx/ripple.c new file mode 100644 index 00000000..2658c789 --- /dev/null +++ b/src/core2/fx/ripple.c @@ -0,0 +1,128 @@ +#include +#include "functions.h" +#include "variables.h" +#include "core2/particle.h" + +extern bool func_8024549C(f32[3], f32); +extern void func_802EFAB0(ParticleEmitter *, s32, f32); +extern void func_802F0EAC(ParticleEmitter *, f32); +extern ParticleEmitter *func_802F0EF0(u8); + +typedef union range_f32_u { + f32 raw[2]; + struct { + f32 min; + f32 max; + }; +}Range_f32; + +typedef struct { + struct {f32 min; f32 max;} lifetime; + f32 fade_out; + f32 unkC[2]; + f32 unk14[2]; + struct {u8 r; u8 g; u8 b;} color; + u8 uid; +}Struct_Core2_6C3E0; + +/* .data */ +Struct_Core2_6C3E0 D_80368B30[] = { + {{0.7f, 0.9f}, 0.5f, {0.1f, 0.1f}, { 0.4f, 0.6f}, {0xFF, 0xFF, 0xFE}, 0}, + {{0.8f, 1.2f}, 0.5f, {0.1f, 0.1f}, { 0.9f, 1.8f}, {0xFF, 0xFF, 0xFE}, 1}, + {{0.8f, 1.0f}, 0.5f, {0.1f, 0.1f}, { 0.6f, 1.0f}, {0xFF, 0xFF, 0xFE}, 2}, + {{0.7f, 0.7f}, 0.5f, {0.4f, 0.4f}, { 1.8f, 1.9f}, {0xFF, 0xFF, 0xFE}, 3}, + {{1.5f, 1.5f}, 0.5f, {0.1f, 0.1f}, {12.0f, 12.0f}, {0xFF, 0xFF, 0xFE}, 4} +}; + +/* .bss */ +u8 D_80380A60; + +/* .code */ +bool __fxRipple_802F3370(f32 position[3], s32 *arg1, bool arg2){ + f32 sp1C; + + *arg1 = 0; + if(arg2){ + position[1] += 1.0f; + } else { + arg2 = func_8024549C(position, 20.0f); + if(!arg2){ + return FALSE; + } + } + + if(func_80245524(position, arg2, arg1, &sp1C)){ + position[1] = sp1C; + } + return TRUE; +} + +ParticleEmitter *__fxRipple_create(s32 arg0, f32 position[3], bool arg2){ + s32 sp44; + f32 spawn_position[3]; + ParticleEmitter *p_emitter; + s32 rgb[3]; + Struct_Core2_6C3E0 *var_s0; + + ml_vec3f_copy(spawn_position, position); + if(!__fxRipple_802F3370(spawn_position, &sp44, arg2)){ + return NULL; + } + spawn_position[1] += 3.0f; + p_emitter = func_802F0EF0(D_80380A60); + particleEmitter_setSprite(p_emitter, ASSET_70C_SPRITE_RIPPLE); + particleEmitter_setDrawMode(p_emitter, PART_EMIT_ROTATABLE); + if(sp44){ + func_802EFAB0(p_emitter, sp44, spawn_position[1]); + } + else{ + func_802EFAB0(p_emitter, 0, 0.0f); + } + var_s0 = &D_80368B30[arg0]; + rgb[0] = (s32) var_s0->color.r; + rgb[1] = (s32) var_s0->color.g; + rgb[2] = (s32) var_s0->color.b; + particleEmitter_setFade(p_emitter, 0.0f, var_s0->fade_out); + particleEmitter_setPosition(p_emitter, spawn_position); + particleEmitter_setRGB(p_emitter, rgb); + func_802EFB70(p_emitter, var_s0->unkC[0], var_s0->unkC[1]); + func_802EFB84(p_emitter, var_s0->unk14[0], var_s0->unk14[1]); + particleEmitter_setParticleLifeTimeRange(p_emitter, var_s0->lifetime.min, var_s0->lifetime.max); + func_802EFF50(p_emitter, 100.0f); + return p_emitter; +} + +void fxRipple_802F3554(s32 arg0, f32 position[3]){ + ParticleEmitter *p_emitter = __fxRipple_create(arg0, position, 0); + if(p_emitter != NULL){ + particleEmitter_emitN(p_emitter, 1); + } +} + +void fxRipple_802F3584(s32 arg0, f32 position[3], s32 arg2){ + ParticleEmitter *p_emitter = __fxRipple_create(arg0, position, arg2); + if(p_emitter != NULL){ + particleEmitter_emitN(p_emitter, 1); + } +} + +void fxRipple_free(void){ + func_802F1190(D_80380A60); +} + +void fxRipple_init(void){ + D_80380A60 = func_802F0F78(0x19); +} + +ParticleEmitter *fxRipple_802F35FC(s32 arg0, f32 position[3]){ + return __fxRipple_create(arg0, position, 0); +} + +ParticleEmitter *fxRipple_802F361C(s32 arg0, f32 position[3], s32 arg2){ + return __fxRipple_create(arg0, position, arg2); +} + +void fxRipple_802F363C(f32 arg0){ + func_802F0EAC(func_802F0EF0(D_80380A60), arg0); +} + diff --git a/src/core2/fx/sparkle.c b/src/core2/fx/sparkle.c new file mode 100644 index 00000000..2b5db412 --- /dev/null +++ b/src/core2/fx/sparkle.c @@ -0,0 +1,167 @@ +#include +#include "functions.h" +#include "variables.h" +#include "core2/particle.h" + +extern ParticleEmitter *func_802F3E98(f32 pos[3], enum asset_e sprite_id); + +ParticleEmitter *__fxSparkle_create(s16 position[3], f32 height, enum asset_e sprite_id){ + f32 position_f[3]; + + position_f[0] = (f32)position[0]; + position_f[1] = (f32)position[1]; + position_f[2] = (f32)position[2]; + position[1] += height; + + return func_802F3E98(position, sprite_id); +} + +void fxSparkle_emptyHoneycomb(s16 position[3]){ + static struct42s D_80368BD0 = { + {{-100.0f, 100.0f, -100.0f}, { 100.0f, 250.0f, 100.0f}}, + {{ -10.0f, 10.0f, -10.0f}, { 10.0f, 10.0f, 10.0f}} + }; + + ParticleEmitter *p_emitter = __fxSparkle_create(position, 10.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); + particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368BD0); + func_802EFB70(p_emitter, 0.32f, 0.32f); + particleEmitter_emitN(p_emitter, 10); +} + +void fxSparkle_honeycomb(s16 position[3]){ + static struct42s D_80368C00 = { + {{-100.0f, 100.0f, -100.0f}, { 100.0f, 250.0f, 100.0f}}, + {{ -10.0f, 10.0f, -10.0f}, { 10.0f, 10.0f, 10.0f}} + }; + + ParticleEmitter *p_emitter = __fxSparkle_create(position, 10.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); + particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368C00); + func_802EFB70(p_emitter, 0.32f, 0.32f); + particleEmitter_emitN(p_emitter, 7); +} + +void fxSparkle_musicNote(s16 position[3]){ + ParticleEmitter *p_emitter = __fxSparkle_create(position, 7.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); + particleEmitter_setParticleVelocityRange(p_emitter, + -70.0f, 100.0f, -70.0f, + 70.0f, 250.0f, 70.0f + ); + particleEmitter_emitN(p_emitter, 5); +} + +void fxSparkle_blueEgg(s16 position[3]){ + ParticleEmitter *p_emitter = __fxSparkle_create(position, 7.0f, ASSET_716_SPRITE_SPARKLE_WHITE); + particleEmitter_setParticleVelocityRange(p_emitter, + -70.0f, 100.0f, -70.0f, + 70.0f, 250.0f, 70.0f + ); + particleEmitter_emitN(p_emitter, 5); +} + +void fxSparkle_giantBlueEgg(s16 position[3]){ + static struct42s D_80368C30 = { + {{-200.0f, 100.0f, -200.0f}, { 200.0f, 350.0f, 200.0f}}, /*position*/ + {{ -30.0f, 100.0f, -30.0f}, { 30.0f, 100.0f, 30.0f}} /*velocity*/ + }; + ParticleEmitter *p_emitter = __fxSparkle_create(position, 25.0f, ASSET_716_SPRITE_SPARKLE_WHITE); + particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368C30); + func_802EFB70(p_emitter, 0.5f, 0.5f); + particleEmitter_emitN(p_emitter, 12); + particleEmitter_setParticleLifeTimeRange(p_emitter, 1.5f, 1.5f); +} + +void fxSparkle_redFeather(s16 position[3]){ + ParticleEmitter *p_emitter = __fxSparkle_create(position, 12.0f, ASSET_715_SPRITE_SPARKLE_RED); + particleEmitter_setParticleVelocityRange(p_emitter, + -75.0f, 100.0f, -75.0f, + 75.0f, 250.0f, 75.0f + ); + func_802EFB70(p_emitter, 0.3f, 0.3f); + particleEmitter_emitN(p_emitter, 5); +} + +void fxSparkle_giantRedFeather(s16 position[3]){ + static struct42s D_80368C60 = { + {{-125.0f, 100.0f, -125.0f}, { 125.0f, 250.0f, 125.0f}}, /*position*/ + {{ -15.0f, 100.0f, -15.0f}, { 15.0f, 100.0f, 15.0f}} /*velocity*/ + }; + ParticleEmitter *p_emitter = __fxSparkle_create(position, 40.0f, ASSET_715_SPRITE_SPARKLE_RED); + particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368C60); + func_802EFB70(p_emitter, 0.5f, 0.5f); + particleEmitter_emitN(p_emitter, 10); +} + +void fxSparkle_goldFeather(s16 position[3]){ + ParticleEmitter *p_emitter = __fxSparkle_create(position, 7.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); + particleEmitter_setParticleVelocityRange(p_emitter, + -75.0f, 100.0f, -75.0f, + 75.0f, 250.0f, 75.0f + ); + func_802EFB70(p_emitter, 0.3f, 0.3f); + particleEmitter_emitN(p_emitter, 5); +} + +void fxSparkle_giantGoldFeather(s16 position[3]){ + static struct42s D_80368C90 = { + {{-125.0f, 100.0f, -125.0f}, { 125.0f, 250.0f, 125.0f}}, /*position*/ + {{ -15.0f, 100.0f, -15.0f}, { 15.0f, 100.0f, 15.0f}} /*velocity*/ + }; + ParticleEmitter *p_emitter = __fxSparkle_create(position, 40.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); + particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368C90); + func_802EFB70(p_emitter, 0.5f, 0.5f); + particleEmitter_emitN(p_emitter, 10); +} + +void fxSparkle_mumboToken(s16 position[3]){ + static struct42s D_80368CC0 = { + {{-100.0f, 100.0f, -100.0f}, { 100.0f, 250.0f, 100.0f}}, /*position*/ + {{ -15.0f, 15.0f, -15.0f}, { 15.0f, 15.0f, 15.0f}} /*velocity*/ + }; + ParticleEmitter *p_emitter = __fxSparkle_create(position, 10.0f, ASSET_718_SPRITE_SPARKLE_WHITE_2); + particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368CC0); + func_802EFB70(p_emitter, 0.4f, 0.4f); + particleEmitter_emitN(p_emitter, 7); + particleEmitter_setParticleLifeTimeRange(p_emitter, 1.5f, 1.5f); +} + +void fxSparkle_extraLife(s16 position[3]){ + static struct42s D_80368CF0 = { + {{ -75.0f, 100.0f, -75.0f}, { 75.0f, 250.0f, 75.0f}}, /*position*/ + {{ -8.0f, 5.0f, -8.0f}, { -5.0f, 35.0f, 8.0f}} /*velocity*/ + }; + ParticleEmitter *p_emitter = __fxSparkle_create(position, 10.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); + particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368CF0); + func_802EFB70(p_emitter, 0.27f, 0.27f); + particleEmitter_emitN(p_emitter, 5); +} + +void fxSparkle_brentilda(s16 position[3]){ + static struct42s D_80368D20 = { + {{ 0.0f, 0.0f, 0.0f}, { 0.0f, 0.0f, 0.0f}}, /*position*/ + {{ -15.0f, -15.0f, -15.0f}, { 15.0f, 15.0f, 15.0f}} /*velocity*/ + }; + ParticleEmitter *p_emitter = __fxSparkle_create(position, 10.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); + particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368D20); + func_802EFB70(p_emitter, 0.25f, 0.3f); + particleEmitter_emitN(p_emitter, 1); +} + +void fxSparkle_chTreasure(s16 position[3]){ + static struct42s D_80368D50 = { + {{ 0.0f, 0.0f, 0.0f}, { 0.0f, 0.0f, 0.0f}}, /*position*/ + {{ -25.0f, -5.0f, -25.0f}, { 25.0f, 5.0f, 25.0f}} /*velocity*/ + }; + ParticleEmitter *p_emitter = __fxSparkle_create(position, 10.0f, ASSET_713_SPRITE_SPARKLE_YELLOW); + particleEmitter_setPositionAndVelocityRanges(p_emitter, &D_80368D50); + func_802EFB70(p_emitter, 0.45f, 0.6f); + particleEmitter_setParticleLifeTimeRange(p_emitter, 0.5f, 0.8f); + particleEmitter_emitN(p_emitter, 3); +} + +void fxSparkle_free(void){ + func_802F3E50(); +} + +void fxSparkle_init(void){ + func_802F3E74(); +} diff --git a/src/core2/particle.c b/src/core2/particle.c index 46571e93..a9775acb 100644 --- a/src/core2/particle.c +++ b/src/core2/particle.c @@ -8,21 +8,6 @@ extern s32 spriteGetFrameCount(BKSprite *); extern void func_80344720(s32 SpriteGfx, s32 frame, s32, f32[3], f32[3], f32[3], Gfx **, Mtx **); extern void func_80344424(s32 SpriteGfx, s32 frame, s32, f32[3], f32[3], f32, Gfx **, Mtx **); - -void particleEmitter_setAlpha(ParticleEmitter *this, s32 arg1); -void particleEmitter_setSfx(ParticleEmitter *this, enum sfx_e arg1, s32 arg2); -void func_802EFA04(ParticleEmitter *, f32); -void particleEmitter_setParticleCallback(ParticleEmitter *this, void (*arg1)(ParticleEmitter *this, f32 pos[3])); -void func_802EFA20(ParticleEmitter *, f32, f32); -void func_802EFA34(ParticleEmitter *, f32); -void func_802EFA40(ParticleEmitter *, f32 (*)[3]); -void func_802EFA78(ParticleEmitter *this, s32 arg1); -void func_802EFF5C(ParticleEmitter *, f32, f32, f32); -void func_802EFF7C(ParticleEmitter *, f32, f32, f32); -void func_802EFF9C(ParticleEmitter *, f32); -void partEmitMgr_freeEmitter(ParticleEmitter *this); - - Gfx D_80368940[] = { gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_TEXTURE_GEN_LINEAR | G_SHADING_SMOOTH), @@ -46,6 +31,25 @@ Gfx D_80368978[] = { ParticleEmitter **partEmitMgr = NULL; //particlePtrArrayPtr s32 partEmitMgrLength = 0; //particlePtrArraySize +//particle +typedef struct particle{ + f32 acceleration[3]; + f32 fade; + f32 frame; //frame + f32 framerate; //framerate + f32 position[3]; + f32 rotation[3]; + f32 scale; //size + f32 initialSize_34; //initial_size + f32 finalSizeDiff; //delta_size + f32 angluar_velocity[3]; + f32 age_48; + f32 lifetime_4C; + f32 velocity_50[3]; + u8 unk5C; + //u8 pad5D[3]; +} Particle; + /* .bss */ f32 particleSfxTimer; u8 partEmitMgrEnable; @@ -209,7 +213,7 @@ void __particleEmitter_drawOnPass(ParticleEmitter *this, Gfx **gfx, Mtx **mtx, V func_802EED1C(this, iPtr->age_48, scale); } func_80344C2C(this->unk0_16); - if(this->draw_mode & PART_EMIT_3D_ROTATE){ + if(this->draw_mode & PART_EMIT_ROTATABLE){ func_80344720(this->unk34, (s32)iPtr->frame, 0, position, flat_rotation, scale, gfx, mtx); }//L802EF2F8 else{ @@ -330,8 +334,8 @@ ParticleEmitter * particleEmitter_new(u32 capacity){ func_802EFF50(this, 0.0f); this->unk100 = 0; this->unk104 = 0; - this->pList_start_124 = &this->data[0]; - this->pList_end_128 = &this->data[0]; + this->pList_start_124 = (Particle *)(this + 1); + this->pList_end_128 = (Particle *)(this + 1); this->pList_capacity_12C = &this->pList_start_124[capacity]; return this; } diff --git a/src/lair/code_5640.c b/src/lair/code_5640.c index 21de220d..c949fde2 100644 --- a/src/lair/code_5640.c +++ b/src/lair/code_5640.c @@ -130,7 +130,7 @@ void func_8038BCF0(Actor *this) { sp48[0] = (s16)sp50[0]; sp48[1] = (s16)sp50[1]; sp48[2] = (s16)sp50[2]; - func_802F3B9C(sp48); + fxSparkle_brentilda(sp48); } this->unk38_31++; diff --git a/src/lair/code_A170.c b/src/lair/code_A170.c index a91b2d9e..a94ab5c3 100644 --- a/src/lair/code_A170.c +++ b/src/lair/code_A170.c @@ -35,17 +35,17 @@ void func_803905CC(ActorMarker *marker, ActorMarker *other_marker){ switch (marker->unk14_20) { case 0x170: func_80346448(ITEM_D_EGGS); - func_802F3874(&marker->propPtr->x); + fxSparkle_giantBlueEgg(&marker->propPtr->x); func_8025A6EC(SFX_EGG_REFILL, -1); break; case 0x171: func_80346448(ITEM_F_RED_FEATHER); - func_802F3978(&marker->propPtr->x); + fxSparkle_giantRedFeather(&marker->propPtr->x); func_8025A6EC(SFX_RED_FEATHER_REFILL, -1); break; case 0x172: func_80346448(ITEM_10_GOLD_FEATHER); - func_802F3A60(&marker->propPtr->x); + fxSparkle_giantGoldFeather(&marker->propPtr->x); func_8025A6EC(SFX_GOLD_FEATHER_REFILL, -1); break; }