Shipwright/soh/src/overlays/effects/ovl_Effect_Ss_G_Magma/z_eff_ss_g_magma.c

62 lines
1.9 KiB
C

/*
* File: z_eff_ss_g_magma.c
* Overlay: ovl_Effect_Ss_G_Magma
* Description: Magma Bubbles
*/
#include "z_eff_ss_g_magma.h"
#include "objects/gameplay_keep/gameplay_keep.h"
u32 EffectSsGMagma_Init(GlobalContext* globalCtx, u32 index, EffectSs* this, void* initParamsx);
void EffectSsGMagma_Draw(GlobalContext* globalCtx, u32 index, EffectSs* this);
void EffectSsGMagma_Update(GlobalContext* globalCtx, u32 index, EffectSs* this);
EffectSsInit Effect_Ss_G_Magma_InitVars = {
EFFECT_SS_G_MAGMA,
EffectSsGMagma_Init,
};
u32 EffectSsGMagma_Init(GlobalContext* globalCtx, u32 index, EffectSs* this, void* initParamsx) {
EffectSsGMagmaInitParams* initParams = (EffectSsGMagmaInitParams*)initParamsx;
Vec3f zeroVec = { 0.0f, 0.0f, 0.0f };
this->velocity = this->accel = zeroVec;
this->pos = initParams->pos;
this->draw = EffectSsGMagma_Draw;
this->update = EffectSsGMagma_Update;
this->gfx = SEGMENTED_TO_VIRTUAL(gEffMagmaBubbleDL);
this->life = 16;
this->rgScale = (s16)(Rand_ZeroOne() * 100.0f) + 200;
this->rgTexIdx = 0;
this->rgTexIdxStep = 50;
this->rgPrimColorR = 255;
this->rgPrimColorG = 255;
this->rgPrimColorB = 0;
this->rgPrimColorA = 255;
this->rgEnvColorR = 255;
this->rgEnvColorG = 0;
this->rgEnvColorB = 0;
this->rgEnvColorA = 0;
return 1;
}
static void* sTextures[] = {
gEffMagmaBubble1Tex, gEffMagmaBubble2Tex, gEffMagmaBubble3Tex, gEffMagmaBubble4Tex,
gEffMagmaBubble5Tex, gEffMagmaBubble6Tex, gEffMagmaBubble7Tex, gEffMagmaBubble8Tex,
};
void EffectSsGMagma_Draw(GlobalContext* globalCtx, u32 index, EffectSs* this) {
s16 texIdx = this->rgTexIdx / 100;
if (texIdx > 7) {
texIdx = 7;
}
EffectSs_DrawGEffect(globalCtx, this, sTextures[texIdx]);
}
void EffectSsGMagma_Update(GlobalContext* globalCtx, u32 index, EffectSs* this) {
this->rgTexIdx += this->rgTexIdxStep;
}