Additionally rename properties/variables assigned by sfxsource_createSfxsourceAndReturnIndex to sfxsourceIdx
92 lines
3.7 KiB
C
92 lines
3.7 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
#include <core1/viewport.h>
|
|
|
|
void chfirefx_update(Actor *this);
|
|
|
|
/* .data */
|
|
ActorInfo gChFireFxInfo = {
|
|
MARKER_256_FIRE_FX, ACTOR_383_FIRE_FX, ASSET_526_SPRITE_FIRE,
|
|
0, NULL,
|
|
chfirefx_update, func_80326224, actor_draw,
|
|
0, 0, 0.0f, 0
|
|
};
|
|
|
|
/* code */
|
|
void __chfirefx_spawnSmoke(f32 position[3], f32 scale){
|
|
ParticleEmitter *pCtrl;
|
|
|
|
pCtrl = partEmitMgr_newEmitter(1);
|
|
particleEmitter_setSprite(pCtrl, ASSET_70D_SPRITE_SMOKE_1);
|
|
particleEmitter_setStartingFrameRange(pCtrl, 1, 6);
|
|
particleEmitter_setAlpha(pCtrl, 0x23);
|
|
particleEmitter_setPosition(pCtrl, position);
|
|
particleEmitter_setParticleSpawnPositionRange(pCtrl, 0.0f, 110.0f*scale, 0.0f, 0.0f, 110.0f*scale, 0.0f);
|
|
particleEmitter_setParticleVelocityRange(pCtrl, 0.0f, 40.0f*scale, 0.0f, 0.0f, 90.0f*scale, 0.0f);
|
|
particleEmitter_setStartingScaleRange(pCtrl, 2.6*scale, 3.2*scale);
|
|
particleEmitter_setFinalScaleRange(pCtrl, 5.0*scale, 6.0*scale);
|
|
particleEmitter_setSpawnIntervalRange(pCtrl, 0.0f, 0.01f);
|
|
particleEmitter_setParticleLifeTimeRange(pCtrl, 4.0f, 7.0f);
|
|
particleEmitter_setFade(pCtrl, 0.3f, 0.7f);
|
|
particleEmitter_setDrawMode(pCtrl, 4);
|
|
particleEmitter_emitN(pCtrl, 1);
|
|
}
|
|
|
|
void __chfirefx_spawnSpark(f32 position[3], f32 scale){
|
|
ParticleEmitter *pCtrl;
|
|
|
|
pCtrl = partEmitMgr_newEmitter(1);
|
|
particleEmitter_setSprite(pCtrl, ASSET_713_SPRITE_SPARKLE_YELLOW);
|
|
particleEmitter_setStartingFrameRange(pCtrl, 1, 6);
|
|
particleEmitter_setPosition(pCtrl, position);
|
|
particleEmitter_setParticleSpawnPositionRange(pCtrl, 0.0f, 20.0f*scale, 0.0f, 0.0f, 20.0f*scale, 0.0f);
|
|
particleEmitter_setParticleVelocityRange(pCtrl, -30.0f*scale, 120.0f*scale, -30.0f*scale, 60.0f*scale, 360.0f*scale, 60.0f*scale);
|
|
particleEmitter_setParticleAccelerationRange(pCtrl, 0.0f, -50.0f, 0.0f, 0.0f, -90.0f, 0.0f);
|
|
particleEmitter_setStartingScaleRange(pCtrl, 0.1*scale, 0.2*scale);
|
|
particleEmitter_setFinalScaleRange(pCtrl, 0.2*scale, 0.4*scale);
|
|
particleEmitter_setSpawnIntervalRange(pCtrl, 0.0f, 0.01f);
|
|
particleEmitter_setParticleLifeTimeRange(pCtrl, 0.9f, 1.3f);
|
|
particleEmitter_setFade(pCtrl, 0.3f, 0.7f);
|
|
particleEmitter_setDrawMode(pCtrl, 4);
|
|
particleEmitter_emitN(pCtrl, 1);
|
|
}
|
|
|
|
void __chfirefx_hiss(ActorMarker *marker,ActorMarker *other_marker){
|
|
Actor *actor = marker_getActor(marker);
|
|
FUNC_8030E8B4(SFX_96_HOTSAND_EEL_HISS, 1.0f, 32000, actor->position, 1000, 2000);
|
|
}
|
|
|
|
void chfirefx_update(Actor *this){
|
|
if(!this->volatile_initialized){
|
|
this->volatile_initialized = TRUE;
|
|
this->marker->propPtr->unk8_3 = FALSE;
|
|
actor_collisionOn(this);
|
|
marker_setCollisionScripts(this->marker, __chfirefx_hiss, NULL, NULL);
|
|
this->unk38_31 = (0.0f != this->yaw) ? 1 : 0;
|
|
if(this->unkF4_8 != 0x32){
|
|
this->unk1C[0] = 1.0f;
|
|
this->unk44_31 = func_8030ED2C(SFX_128_FIRE_CRACKING, 2);
|
|
sfxsource_playSfxAtVolume(this->unk44_31, 1.1f);
|
|
}
|
|
else{
|
|
this->unk1C[0] = 0.0f;
|
|
}
|
|
}//L80359934
|
|
if(subaddie_playerIsWithinSphere(this, 2000)){
|
|
if( viewport_func_8024DB50(this->position, 50.0f) && this->unk38_31 ){
|
|
if(!(globalTimer_getTime() & 3) && randf() < 0.1){
|
|
__chfirefx_spawnSmoke(this->position, this->scale);
|
|
} //L803599AC
|
|
if(!(globalTimer_getTime() & 3) && randf() < 0.3){
|
|
__chfirefx_spawnSpark(this->position, this->scale);
|
|
}
|
|
}//L803599F4
|
|
if(0.0f != this->unk1C[0]){
|
|
func_8030DB04(this->unk44_31, 7000, this->position, 300.0f, 800.0f);
|
|
func_8030E2C4(this->unk44_31);
|
|
}
|
|
}//L80359A2C
|
|
}
|