Add grow/shrink particles

This commit is contained in:
Sally Coolatta 2022-09-14 02:47:42 -04:00
parent dd0635fb23
commit 970add8b91
4 changed files with 97 additions and 0 deletions

View file

@ -3755,6 +3755,9 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
// Caked-Up Booty-Sheet Ghost
"S_HYUDORO",
// Grow
"S_GROW_PARTICLE",
// Shrink
"S_SHRINK_GUN",
"S_SHRINK_LASER",
@ -5342,6 +5345,8 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
"MT_HYUDORO",
"MT_HYUDORO_CENTER",
"MT_GROW_PARTICLE",
"MT_SHRINK_POHBEE",
"MT_SHRINK_GUN",
"MT_SHRINK_CHAIN",

View file

@ -573,6 +573,7 @@ char sprnames[NUMSPRITES + 1][5] =
"FLML", // Flame Shield speed lines
"FLMF", // Flame Shield flash
"HYUU", // Hyudoro
"GRWP", // Grow
"SHRG", // Shrink gun / laser
"SINK", // Kitchen Sink
"SITR", // Kitchen Sink Trail
@ -4315,6 +4316,8 @@ state_t states[NUMSTATES] =
{SPR_HYUU, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_HYUDORO
{SPR_GRWP, FF_ADD|FF_FULLBRIGHT|FF_ANIMATE, 13, {NULL}, 7, 1, S_NULL}, // S_GROW_PARTICLE
{SPR_SHRG, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_GUN
{SPR_SHRG, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_LASER
{SPR_SHRG, FF_FULLBRIGHT|2, -1, {NULL}, 0, 0, S_NULL}, // S_SHRINK_PARTICLE
@ -24041,6 +24044,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_GROW_PARTICLE
-1, // doomednum
S_GROW_PARTICLE, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
4*FRACUNIT, // radius
8*FRACUNIT, // height
0, // display offset
0, // mass
0, // damage
sfx_None, // activesound
MF_SCENERY|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
{ // MT_SHRINK_POHBEE
-1, // doomednum
S_HYUDORO, // spawnstate

View file

@ -1119,6 +1119,7 @@ typedef enum sprite
SPR_FLML, // Flame Shield speed lines
SPR_FLMF, // Flame Shield flash
SPR_HYUU, // Hyudoro
SPR_GRWP, // Grow
SPR_SHRG, // Shrink gun / laser
SPR_SINK, // Kitchen Sink
SPR_SITR, // Kitchen Sink Trail
@ -4746,6 +4747,9 @@ typedef enum state
// Caked-Up Booty-Sheet Ghost
S_HYUDORO,
// Grow
S_GROW_PARTICLE,
// Shrink
S_SHRINK_GUN,
S_SHRINK_LASER,
@ -6369,6 +6373,8 @@ typedef enum mobj_type
MT_HYUDORO,
MT_HYUDORO_CENTER,
MT_GROW_PARTICLE,
MT_SHRINK_POHBEE,
MT_SHRINK_GUN,
MT_SHRINK_CHAIN,

View file

@ -2284,6 +2284,57 @@ void K_SpawnInvincibilitySpeedLines(mobj_t *mo)
fast->destscale = 6*((mo->player->invincibilitytimer/TICRATE)*FRACUNIT)/8;
}
static void K_SpawnGrowShrinkParticles(mobj_t *mo, INT32 timer)
{
const boolean shrink = (timer < 0);
const INT32 maxTime = (10*TICRATE);
INT32 spawnFreq = 1;
mobj_t *particle = NULL;
fixed_t particleSpeed = 0;
spawnFreq = (maxTime - min(maxTime, abs(timer))) / TICRATE / 2;
if (spawnFreq == 0)
{
spawnFreq++;
}
if (leveltime % spawnFreq != 0)
{
return;
}
particle = P_SpawnMobjFromMobj(
mo,
P_RandomRange(-32, 32) * FRACUNIT,
P_RandomRange(-32, 32) * FRACUNIT,
(shrink ? P_RandomRange(24, 48) : P_RandomRange(0, 24)) * FRACUNIT,
MT_GROW_PARTICLE
);
P_SetTarget(&particle->target, mo);
particle->momx = mo->momx;
particle->momy = mo->momy;
particle->momz = P_GetMobjZMovement(mo);
K_MatchGenericExtraFlags(particle, mo);
particleSpeed = particle->scale * 4 * P_MobjFlip(mo);
if (shrink == true)
{
particle->color = SKINCOLOR_KETCHUP;
particle->momz -= particleSpeed;
particle->renderflags |= RF_VERTICALFLIP;
}
else
{
particle->color = SKINCOLOR_SAPPHIRE;
particle->momz += particleSpeed;
}
}
void K_SpawnBumpEffect(mobj_t *mo)
{
mobj_t *fx = P_SpawnMobj(mo->x, mo->y, mo->z, MT_BUMP);
@ -7325,6 +7376,11 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
}
}
if (player->growshrinktimer != 0)
{
K_SpawnGrowShrinkParticles(player->mo, player->growshrinktimer);
}
if (gametype == GT_RACE && player->rings <= 0) // spawn ring debt indicator
{
mobj_t *debtflag = P_SpawnMobj(player->mo->x + player->mo->momx, player->mo->y + player->mo->momy,