document fxRipple and fxSparkle

This commit is contained in:
Banjo Kazooie
2023-01-30 14:36:10 -06:00
parent cd146f444f
commit 4b1a4c225b
27 changed files with 390 additions and 383 deletions

View File

@@ -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]

View File

@@ -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

View File

@@ -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);

View File

@@ -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{

View File

@@ -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){

View File

@@ -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

View File

@@ -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];

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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{

View File

@@ -88,7 +88,7 @@ void func_802C9D80(void){
}
}
}
func_802F373C(&s5->propPtr->x);
fxSparkle_honeycomb(&s5->propPtr->x);
marker_despawn(s5);
}

View File

@@ -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));
}
}

View File

@@ -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);

View File

@@ -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){

View File

@@ -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();

View File

@@ -1,289 +0,0 @@
#include <ultra64.h>
#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();
}

View File

@@ -1,20 +1,16 @@
#include <ultra64.h>
#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);

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -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;
}
}

128
src/core2/fx/ripple.c Normal file
View File

@@ -0,0 +1,128 @@
#include <ultra64.h>
#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);
}

167
src/core2/fx/sparkle.c Normal file
View File

@@ -0,0 +1,167 @@
#include <ultra64.h>
#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();
}

View File

@@ -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;
}

View File

@@ -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++;

View File

@@ -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;
}