document fxRipple and fxSparkle
This commit is contained in:
128
src/core2/fx/ripple.c
Normal file
128
src/core2/fx/ripple.c
Normal 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
167
src/core2/fx/sparkle.c
Normal 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();
|
||||
}
|
Reference in New Issue
Block a user