Hardcode waterfall particles spawner

This commit is contained in:
SteelT 2024-01-10 21:27:37 -05:00 committed by James R
parent b932e23187
commit 10e9cd7480
7 changed files with 92 additions and 0 deletions

View file

@ -4945,6 +4945,9 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
// MT_TRICKBALLOON_YELLOW_POINT // MT_TRICKBALLOON_YELLOW_POINT
"S_TRICKBALLOON_YELLOW_POINT1", "S_TRICKBALLOON_YELLOW_POINT1",
// MT_WATERFALLPARTICLESPAWNER
"S_WATERFALLPARTICLE",
}; };
// RegEx to generate this from info.h: ^\tMT_([^,]+), --> \t"MT_\1", // RegEx to generate this from info.h: ^\tMT_([^,]+), --> \t"MT_\1",
@ -6227,6 +6230,8 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
"MT_TRICKBALLOON_RED_POINT", "MT_TRICKBALLOON_RED_POINT",
"MT_TRICKBALLOON_YELLOW", "MT_TRICKBALLOON_YELLOW",
"MT_TRICKBALLOON_YELLOW_POINT", "MT_TRICKBALLOON_YELLOW_POINT",
"MT_WATERFALLPARTICLESPAWNER",
}; };
const char *const MOBJFLAG_LIST[] = { const char *const MOBJFLAG_LIST[] = {

View file

@ -1034,6 +1034,9 @@ char sprnames[NUMSPRITES + 1][5] =
"TKBR", "TKBR",
"TKBY", "TKBY",
// Waterfall particles
"WTRP",
// First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later
"VIEW", "VIEW",
}; };
@ -5842,6 +5845,9 @@ state_t states[NUMSTATES] =
// MT_TRICKBALLOON_YELLOW_POINT // MT_TRICKBALLOON_YELLOW_POINT
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_POINT1}, // S_TRICKBALLOON_YELLOW_POINT1 {SPR_NULL, 0, 1, {NULL}, 0, 0, S_TRICKBALLOON_YELLOW_POINT1}, // S_TRICKBALLOON_YELLOW_POINT1
// MT_WATERFALLPARTICLESPAWNER
{SPR_WTRP, FF_ANIMATE, 32, {NULL}, 31, 1, S_NULL},
}; };
mobjinfo_t mobjinfo[NUMMOBJTYPES] = mobjinfo_t mobjinfo[NUMMOBJTYPES] =
@ -33521,6 +33527,32 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
MF_NOGRAVITY, // flags MF_NOGRAVITY, // flags
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_WATERFALLPARTICLESPAWNER
3422, // doomednum
S_INVISIBLE, // spawnstate
1, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
0, // 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
1*FRACUNIT, // radius
1*FRACUNIT, // height
0, // dispoffset
0, // mass
0, // damage
sfx_None, // activesound
MF_NOGRAVITY, // flags
S_NULL // raisestate
},
}; };

View file

@ -1588,6 +1588,9 @@ typedef enum sprite
SPR_TKBR, SPR_TKBR,
SPR_TKBY, SPR_TKBY,
// Waterfall particles
SPR_WTRP,
// First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later
SPR_VIEW, SPR_VIEW,
@ -6267,6 +6270,9 @@ typedef enum state
// MT_TRICKBALLOON_YELLOW_POINT // MT_TRICKBALLOON_YELLOW_POINT
S_TRICKBALLOON_YELLOW_POINT1, S_TRICKBALLOON_YELLOW_POINT1,
// MT_WATERFALLPARTICLESPAWNER
S_WATERFALLPARTICLE,
S_FIRSTFREESLOT, S_FIRSTFREESLOT,
S_LASTFREESLOT = S_FIRSTFREESLOT + NUMSTATEFREESLOTS - 1, S_LASTFREESLOT = S_FIRSTFREESLOT + NUMSTATEFREESLOTS - 1,
NUMSTATES NUMSTATES
@ -7571,6 +7577,8 @@ typedef enum mobj_type
MT_TRICKBALLOON_YELLOW, MT_TRICKBALLOON_YELLOW,
MT_TRICKBALLOON_YELLOW_POINT, MT_TRICKBALLOON_YELLOW_POINT,
MT_WATERFALLPARTICLESPAWNER,
MT_FIRSTFREESLOT, MT_FIRSTFREESLOT,
MT_LASTFREESLOT = MT_FIRSTFREESLOT + NUMMOBJFREESLOTS - 1, MT_LASTFREESLOT = MT_FIRSTFREESLOT + NUMMOBJFREESLOTS - 1,
NUMMOBJTYPES NUMMOBJTYPES

View file

@ -366,6 +366,9 @@ void Obj_PlayerBulbThink(player_t *player);
void Obj_CloudTouched(mobj_t *special, mobj_t *toucher); void Obj_CloudTouched(mobj_t *special, mobj_t *toucher);
void Obj_BulbTouched(mobj_t *special, mobj_t *toucher); void Obj_BulbTouched(mobj_t *special, mobj_t *toucher);
/* Waterfall Particles Spawner */
void Obj_WaterfallParticleThink(mobj_t *mo);
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"
#endif #endif

View file

@ -51,6 +51,7 @@ target_sources(SRB2SDL2 PRIVATE
emz-faucet.cpp emz-faucet.cpp
trick-balloon.c trick-balloon.c
cloud.c cloud.c
waterfall-particle.c
) )
add_subdirectory(versus) add_subdirectory(versus)

View file

@ -0,0 +1,38 @@
// DR. ROBOTNIK'S RING RACERS
//-----------------------------------------------------------------------------
// Copyright (C) 2024 by Kart Krew
//
// This program is free software distributed under the
// terms of the GNU General Public License, version 2.
// See the 'LICENSE' file for more details.
//-----------------------------------------------------------------------------
/// \file waterfall-particle.c
/// \brief Waterfall particle spawner.
#include "../p_local.h"
#include "../m_random.h"
#include "../k_objects.h"
void Obj_WaterfallParticleThink(mobj_t *mo)
{
const INT32 radius = 320;
const INT32 momz = (mo->spawnpoint->angle) ? mo->spawnpoint->angle : 8;
INT32 x = P_RandomRange(PR_DECORATION, -radius, radius)*mapobjectscale;
INT32 y = P_RandomRange(PR_DECORATION, -radius, radius)*mapobjectscale;
mobj_t *particle = P_SpawnMobj(mo->x + x , mo->y + y , mo->z, MT_THOK);
P_SetMobjState(particle, S_WATERFALLPARTICLE);
particle->momx = P_RandomRange(PR_DECORATION, -5, 5)*mapobjectscale;
particle->momy = P_RandomRange(PR_DECORATION, -5, 5)*mapobjectscale;
particle->momz = P_RandomRange(PR_DECORATION, momz/2, momz)*mapobjectscale*P_MobjFlip(mo);
P_InstaScale(particle, 3 * particle->scale);
if (mo->eflags & MFE_VERTICALFLIP)
{
particle->eflags |= MFE_VERTICALFLIP;
particle->flags2 |= MF2_OBJECTFLIP;
}
}

View file

@ -10330,6 +10330,11 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
mobj->z = (mobj->extravalue1 - (16 * mobj->scale)) + sine; mobj->z = (mobj->extravalue1 - (16 * mobj->scale)) + sine;
break; break;
} }
case MT_WATERFALLPARTICLESPAWNER:
{
Obj_WaterfallParticleThink(mobj);
break;
}
default: default:
// check mobj against possible water content, before movement code // check mobj against possible water content, before movement code