Files
oot/src/code/z_effect.c
T
Tharo 1bef952ff6 Unused variable/parameter cleanup (#1321)
* UNUSED attribute for variables and parameters in static segments and for all stack padding variables

* No more unused variable warnings

* Make pad variable names consistent

* Small cleanup

* Macro-ify stack padding

* Use stack padding for more variables not previously named pad

* Format

* Check unused parameter on gamestate overlays and pause menu

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* Merge 2x u8 stack pads into 1x s16 stack pad in en_ik

* Remove UNUSED from function prototypes

* Suggested changes

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* More unused variables

* Fix merge, updated for new versions

* Format

* questionable UNUSED and STACK_PAD more usage

* format

* format

* one more STACK_PADS in z_kaleido_map.c

---------

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>
2026-09-24 06:29:19 +02:00

267 lines
7.9 KiB
C

#include "gfx.h"
#include "attributes.h"
#include "printf.h"
#include "translation.h"
#include "effect.h"
#include "frame_advance.h"
#include "play_state.h"
EffectContext sEffectContext;
EffectInfo sEffectInfoTable[] = {
{
sizeof(EffectSpark),
EffectSpark_Init,
EffectSpark_Destroy,
EffectSpark_Update,
EffectSpark_Draw,
},
{
sizeof(EffectBlure),
EffectBlure_Init1,
EffectBlure_Destroy,
EffectBlure_Update,
EffectBlure_Draw,
},
{
sizeof(EffectBlure),
EffectBlure_Init2,
EffectBlure_Destroy,
EffectBlure_Update,
EffectBlure_Draw,
},
{
sizeof(EffectShieldParticle),
EffectShieldParticle_Init,
EffectShieldParticle_Destroy,
EffectShieldParticle_Update,
EffectShieldParticle_Draw,
},
};
PlayState* Effect_GetPlayState(void) {
return sEffectContext.play;
}
void* Effect_GetByIndex(s32 index) {
if (index == TOTAL_EFFECT_COUNT) {
return NULL;
}
if (index < SPARK_COUNT) {
if (sEffectContext.sparks[index].status.active == true) {
return &sEffectContext.sparks[index].effect;
} else {
return NULL;
}
}
index -= SPARK_COUNT;
if (index < BLURE_COUNT) {
if (sEffectContext.blures[index].status.active == true) {
return &sEffectContext.blures[index].effect;
} else {
return NULL;
}
}
index -= BLURE_COUNT;
if (index < SHIELD_PARTICLE_COUNT) {
if (sEffectContext.shieldParticles[index].status.active == true) {
return &sEffectContext.shieldParticles[index].effect;
} else {
return NULL;
}
}
return NULL;
}
void Effect_InitStatus(EffectStatus* status) {
status->active = false;
status->unk_01 = 0;
status->unk_02 = 0;
}
void Effect_InitContext(PlayState* play) {
s32 i;
for (i = 0; i < SPARK_COUNT; i++) {
Effect_InitStatus(&sEffectContext.sparks[i].status);
}
for (i = 0; i < BLURE_COUNT; i++) {
Effect_InitStatus(&sEffectContext.blures[i].status);
}
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
//! @bug This is supposed to initialize shieldParticles, not blures again
Effect_InitStatus(&sEffectContext.blures[i].status);
}
sEffectContext.play = play;
}
void Effect_Add(PlayState* play, s32* pIndex, s32 type, u8 arg3, u8 arg4, void* initParams) {
s32 i;
u32 slotFound;
void* effect = NULL;
EffectStatus* status = NULL;
*pIndex = TOTAL_EFFECT_COUNT;
if (FrameAdvance_IsEnabled(play) != true) {
slotFound = false;
switch (type) {
case EFFECT_SPARK:
for (i = 0; i < SPARK_COUNT; i++) {
if (!sEffectContext.sparks[i].status.active) {
slotFound = true;
*pIndex = i;
effect = &sEffectContext.sparks[i].effect;
status = &sEffectContext.sparks[i].status;
break;
}
}
break;
case EFFECT_BLURE1:
case EFFECT_BLURE2:
for (i = 0; i < BLURE_COUNT; i++) {
if (!sEffectContext.blures[i].status.active) {
slotFound = true;
*pIndex = i + SPARK_COUNT;
effect = &sEffectContext.blures[i].effect;
status = &sEffectContext.blures[i].status;
break;
}
}
break;
case EFFECT_SHIELD_PARTICLE:
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
if (!sEffectContext.shieldParticles[i].status.active) {
slotFound = true;
*pIndex = i + SPARK_COUNT + BLURE_COUNT;
effect = &sEffectContext.shieldParticles[i].effect;
status = &sEffectContext.shieldParticles[i].status;
break;
}
}
break;
}
if (!slotFound) {
PRINTF(T("EffectAdd():確保できません。注意してください。Type%d\n",
"EffectAdd(): I cannot secure it. Be careful. Type %d\n"),
type);
PRINTF(T("エフェクト追加せずに終了します。\n", "Exit without adding the effect.\n"));
} else {
sEffectInfoTable[type].init(effect, initParams);
status->unk_02 = arg3;
status->unk_01 = arg4;
status->active = true;
}
}
}
void Effect_DrawAll(GraphicsContext* gfxCtx) {
s32 i;
for (i = 0; i < SPARK_COUNT; i++) {
if (!sEffectContext.sparks[i].status.active) {
continue;
}
sEffectInfoTable[EFFECT_SPARK].draw(&sEffectContext.sparks[i].effect, gfxCtx);
}
for (i = 0; i < BLURE_COUNT; i++) {
if (!sEffectContext.blures[i].status.active) {
continue;
}
sEffectInfoTable[EFFECT_BLURE1].draw(&sEffectContext.blures[i].effect, gfxCtx);
}
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
if (!sEffectContext.shieldParticles[i].status.active) {
continue;
}
sEffectInfoTable[EFFECT_SHIELD_PARTICLE].draw(&sEffectContext.shieldParticles[i].effect, gfxCtx);
}
}
void Effect_UpdateAll(PlayState* play) {
s32 i;
for (i = 0; i < SPARK_COUNT; i++) {
if (sEffectContext.sparks[i].status.active) {
if (sEffectInfoTable[EFFECT_SPARK].update(&sEffectContext.sparks[i].effect) == 1) {
Effect_Delete(play, i);
}
}
}
for (i = 0; i < BLURE_COUNT; i++) {
if (sEffectContext.blures[i].status.active) {
if (sEffectInfoTable[EFFECT_BLURE1].update(&sEffectContext.blures[i].effect) == 1) {
Effect_Delete(play, i + SPARK_COUNT);
}
}
}
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
if (sEffectContext.shieldParticles[i].status.active) {
if (sEffectInfoTable[EFFECT_SHIELD_PARTICLE].update(&sEffectContext.shieldParticles[i].effect) == 1) {
Effect_Delete(play, i + SPARK_COUNT + BLURE_COUNT);
}
}
}
}
void Effect_Delete(UNUSED PlayState* play, s32 index) {
if (index == TOTAL_EFFECT_COUNT) {
return;
}
if (index < SPARK_COUNT) {
sEffectContext.sparks[index].status.active = false;
sEffectInfoTable[EFFECT_SPARK].destroy(&sEffectContext.sparks[index].effect);
return;
}
index -= SPARK_COUNT;
if (index < BLURE_COUNT) {
sEffectContext.blures[index].status.active = false;
sEffectInfoTable[EFFECT_BLURE1].destroy(&sEffectContext.blures[index].effect);
return;
}
index -= BLURE_COUNT;
if (index < SHIELD_PARTICLE_COUNT) {
sEffectContext.shieldParticles[index].status.active = false;
sEffectInfoTable[EFFECT_SHIELD_PARTICLE].destroy(&sEffectContext.shieldParticles[index].effect);
return;
}
}
void Effect_DeleteAll(UNUSED PlayState* play) {
s32 i;
PRINTF(T("エフェクト総て解放\n", "All effects release\n"));
for (i = 0; i < SPARK_COUNT; i++) {
sEffectContext.sparks[i].status.active = false;
sEffectInfoTable[EFFECT_SPARK].destroy(&sEffectContext.sparks[i].effect);
}
for (i = 0; i < BLURE_COUNT; i++) {
sEffectContext.blures[i].status.active = false;
sEffectInfoTable[EFFECT_BLURE1].destroy(&sEffectContext.blures[i].effect);
}
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
sEffectContext.shieldParticles[i].status.active = false;
sEffectInfoTable[EFFECT_SHIELD_PARTICLE].destroy(&sEffectContext.shieldParticles[i].effect);
}
PRINTF(T("エフェクト総て解放 終了\n", "All effects release End\n"));
}