Bail Sparkle

This commit is contained in:
Ashnal 2025-06-02 19:28:20 -04:00
parent 8711e287e4
commit 9c0432eb1b
4 changed files with 65 additions and 2 deletions

View file

@ -1576,6 +1576,7 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
"S_BAIL",
"S_BAIB",
"S_BAIC",
"S_BAILCHARGE",
"S_AMPRING",
@ -3570,6 +3571,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
"MT_BAIL",
"MT_BAILCHARGE",
"MT_BAILSPARKLE",
"MT_AMPRING",
"MT_AMPBODY",

View file

@ -336,6 +336,7 @@ char sprnames[NUMSPRITES + 1][5] =
"BAIL", // Bail charge
"BAIB", // Bail after effect
"BAIC", // Bail sparkle
"TECH", // Bail tech charge
"TRC1", // Charge aura
@ -2166,6 +2167,7 @@ state_t states[NUMSTATES] =
{SPR_BAIL, FF_FULLBRIGHT|FF_ANIMATE|0, 8, {NULL}, 8, 1, S_BAIB}, // S_BAIL
{SPR_BAIB, FF_FULLBRIGHT|FF_ANIMATE|0, 10, {NULL}, 9, 1, S_NULL}, // S_BAIB
{SPR_BAIC, FF_FULLBRIGHT|FF_ANIMATE|0, 11, {NULL}, 10, 1, S_NULL}, // S_BAIC
{SPR_TECH, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 41, 1, S_NULL}, // S_BAILCHARGE
{SPR_AMPB, FF_FULLBRIGHT|FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_AMPRING
@ -13776,7 +13778,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
100, // mass
0, // damage
sfx_None, // activesound
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
@ -13803,7 +13805,34 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
100, // mass
0, // damage
sfx_None, // activesound
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
{ // MT_BAILSPARKLE
-1, // doomednum
S_BAIC, // spawnstate
1000, // 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
67*FRACUNIT, // radius
67*FRACUNIT, // height
1, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIPTHING|MF_DONTENCOREMAP|MF_SCENERY, // flags
S_NULL // raisestate
},

View file

@ -877,6 +877,7 @@ typedef enum sprite
SPR_BAIL, // Bail charge
SPR_BAIB, // Bail after effect
SPR_BAIC, // Bail sparkle
SPR_TECH, // Bail tech charge
SPR_TRC1, // Charge aura
@ -2635,6 +2636,7 @@ typedef enum state
S_BAIL,
S_BAIB,
S_BAIC,
S_BAILCHARGE,
S_AMPRING,
@ -4656,6 +4658,7 @@ typedef enum mobj_type
MT_BAIL,
MT_BAILCHARGE,
MT_BAILSPARKLE,
MT_AMPRING,
MT_AMPBODY,

View file

@ -10001,6 +10001,35 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
// Extra tripwire leniency for the end of invincibility
if (player->invincibilitytimer <= 0) {
player->tripwireLeniency = max( player->tripwireLeniency, TICRATE );
}
if (player->baildrop)
{
mobj_t *pmo = player->mo;
// particle spawn
#define BAILSPARKLE_MAXBAIL 61 // amount of bail rings needed for max sparkle spawn frequency
UINT32 baildropinversefreq = BAILSPARKLE_MAXBAIL - min(player->baildrop, BAILSPARKLE_MAXBAIL-6);
UINT32 baildropmodulo = baildropinversefreq *5/3 /10;
if ((leveltime % (1+baildropmodulo)) == 0)
{
mobj_t *sparkle = P_SpawnMobj(pmo->x + (P_RandomRange(PR_DECORATION, -40,40) * pmo->scale),
pmo->y + (P_RandomRange(PR_DECORATION, -40,40) * pmo->scale),
pmo->z + (pmo->height/2) + (P_RandomRange(PR_DECORATION, -40,40) * pmo->scale),
MT_BAILSPARKLE);
sparkle->scale = pmo->scale;
sparkle->angle = pmo->angle;
sparkle->momx = 3*pmo->momx/4;
sparkle->momy = 3*pmo->momy/4;
sparkle->momz = 3*P_GetMobjZMovement(pmo)/4;
K_MatchGenericExtraFlags(sparkle, pmo);
sparkle->renderflags = (pmo->renderflags & ~RF_TRANSMASK);//|RF_TRANS20|RF_ADD;
}
if ((player->baildrop % BAIL_DROPFREQUENCY) == 0)
{
P_FlingBurst(player, K_MomentumAngle(pmo), MT_FLINGRING, 10*TICRATE, FRACUNIT, player->baildrop/BAIL_DROPFREQUENCY);
S_StartSound(pmo, sfx_gshad);
}
}