More Flame Shield visuals

This commit is contained in:
Sally Cochenour 2020-03-26 08:48:02 -04:00
parent 8a3c7ad2fb
commit d1580a5b42
7 changed files with 70 additions and 10 deletions

View file

@ -6712,6 +6712,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_FLAMESHIELDDASH8",
"S_FLAMESHIELDPAPER",
"S_FLAMESHIELDLINE1",
"S_FLAMESHIELDLINE2",
"S_FLAMESHIELDLINE3",
"S_FLAMESHIELDFLASH",
// The legend
"S_SINK",

View file

@ -458,6 +458,7 @@ extern INT32 greasetics;
extern INT32 wipeoutslowtime;
extern INT32 wantedreduce;
extern INT32 wantedfrequency;
extern INT32 flameseg;
extern UINT8 introtoplay;
extern UINT8 creditscutscene;

View file

@ -232,6 +232,7 @@ INT32 greasetics = 3*TICRATE;
INT32 wipeoutslowtime = 20;
INT32 wantedreduce = 5*TICRATE;
INT32 wantedfrequency = 10*TICRATE;
INT32 flameseg = TICRATE/4;
INT32 gameovertics = 15*TICRATE;

View file

@ -58,7 +58,9 @@ char sprnames[NUMSPRITES + 1][5] =
//SRB2kart Sprites
"RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE","KINV","KINF",
"WIPD","DRIF","BDRF","DUST","DRWS","RSHE","FITM","BANA","ORBN","JAWZ","SSMN",
"KRBM","BHOG","BHBM","SPBM","THNS","BUBS","BWVE","FLMS","FLMD","FLMP","SINK","SITR",
"KRBM","BHOG","BHBM","SPBM","THNS","BUBS","BWVE",
"FLMS","FLMD","FLMP","FLML","FLMF",
"SINK","SITR",
"KBLN","DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB",
"CHOM","SACO","CRAB","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA",
"ISTB","ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","HIT1","HIT2",
@ -2928,7 +2930,11 @@ state_t states[NUMSTATES] =
{SPR_FLMD, FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_FLAMESHIELDDASH8}, // S_FLAMESHIELDDASH7
{SPR_FLMD, FF_FULLBRIGHT, 2, {A_FlameShieldPaper}, 3, 1, S_FLAMESHIELDDASH1}, // S_FLAMESHIELDDASH8
{SPR_FLMP, FF_FULLBRIGHT|FF_PAPERSPRITE, 3, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDPAPER
{SPR_FLMP, FF_FULLBRIGHT|FF_PAPERSPRITE, 3, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDPAPER
{SPR_FLML, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 7, {NULL}, 6, 1, S_NULL}, // S_FLAMESHIELDLINE1
{SPR_FLML, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE|7, 7, {NULL}, 6, 1, S_NULL}, // S_FLAMESHIELDLINE2
{SPR_FLML, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE|14, 7, {NULL}, 6, 1, S_NULL}, // S_FLAMESHIELDLINE3
{SPR_FLMF, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDFLASH
{SPR_SINK, 0, 1, {A_SmokeTrailer}, MT_SINKTRAIL, 0, S_SINK}, // S_SINK
{SPR_SINK, 0|FF_TRANS80|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_SINK_SHIELD}, // S_SINK_SHIELD

View file

@ -628,6 +628,8 @@ typedef enum sprite
SPR_FLMS, // Flame Shield
SPR_FLMD, // Flame Shield dash
SPR_FLMP, // Flame Shield paper sprites
SPR_FLML, // Flame Shield speed lines
SPR_FLMF, // Flame Shield flash
SPR_SINK, // Kitchen Sink
SPR_SITR, // Kitchen Sink Trail
SPR_KBLN, // Battle Mode Bumper
@ -3609,6 +3611,10 @@ typedef enum state
S_FLAMESHIELDDASH8,
S_FLAMESHIELDPAPER,
S_FLAMESHIELDLINE1,
S_FLAMESHIELDLINE2,
S_FLAMESHIELDLINE3,
S_FLAMESHIELDFLASH,
// The legend
S_SINK,

View file

@ -7583,10 +7583,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
if (player->kartstuff[k_flamelength] < destlen)
player->kartstuff[k_flamelength]++; // Can always go up!
flamemax = player->kartstuff[k_flamelength] * (TICRATE/4);
flamemax = player->kartstuff[k_flamelength] * flameseg;
if (flamemax > 0)
flamemax += 3*(TICRATE/4);
flamemax += TICRATE; // leniency period
if ((cmd->buttons & BT_ATTACK) && player->kartstuff[k_holdready])
{
@ -7634,9 +7633,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
{
player->kartstuff[k_flamelength]--; // Can ONLY go down if you're not using it
flamemax = player->kartstuff[k_flamelength] * (TICRATE/4);
flamemax = player->kartstuff[k_flamelength] * flameseg;
if (flamemax > 0)
flamemax += 3*(TICRATE/4);
flamemax += TICRATE; // leniency period
}
if (player->kartstuff[k_flamemeter] > flamemax)
@ -9070,8 +9069,8 @@ static void K_drawKartItem(void)
if (stplyr->kartstuff[k_itemtype] == KITEM_FLAMESHIELD && stplyr->kartstuff[k_flamelength] > 0)
{
INT32 numframes = 104;
INT32 absolutemax = 16 * (TICRATE/4);
INT32 flamemax = stplyr->kartstuff[k_flamelength] * (TICRATE/4);
INT32 absolutemax = 16 * flameseg;
INT32 flamemax = stplyr->kartstuff[k_flamelength] * flameseg;
INT32 flamemeter = min(stplyr->kartstuff[k_flamemeter], flamemax);
INT32 bf = 16 - stplyr->kartstuff[k_flamelength];
@ -9100,7 +9099,7 @@ static void K_drawKartItem(void)
if (ff >= 0 && ff < numframes && stplyr->kartstuff[k_flamemeter] > 0)
{
if (stplyr->kartstuff[k_flamemeter] > (flamemax - (TICRATE/4)) && (leveltime & 1))
if ((stplyr->kartstuff[k_flamemeter] > flamemax) && (leveltime & 1))
{
UINT8 *fsflash = R_GetTranslationColormap(TC_BLINK, SKINCOLOR_WHITE, GTC_CACHE);
V_DrawMappedPatch(fx-xo, fy-yo, V_HUDTRANS|fflags|flip, kp_flameshieldmeter[ff][offset], fsflash);

View file

@ -8614,6 +8614,7 @@ void P_MobjThinker(mobj_t *mobj)
{
fixed_t destx, desty;
statenum_t curstate;
INT32 flamemax = mobj->target->player->kartstuff[k_flamelength] * flameseg;
if (!mobj->target || !mobj->target->health || !mobj->target->player
|| mobj->target->player->kartstuff[k_curshield] != KSHIELD_FLAME)
@ -8629,6 +8630,31 @@ void P_MobjThinker(mobj_t *mobj)
{
if (!(curstate >= S_FLAMESHIELDDASH1 && curstate <= S_FLAMESHIELDDASH8))
P_SetMobjState(mobj, S_FLAMESHIELDDASH1);
if (leveltime & 1)
{
UINT8 i;
UINT8 nl = 2;
if (mobj->target->player->kartstuff[k_flamedash] > mobj->extravalue1)
nl = 3;
for (i = 0; i < nl; i++)
{
mobj_t *fast = P_SpawnMobj(mobj->x + (P_RandomRange(-36,36) * mobj->scale),
mobj->y + (P_RandomRange(-36,36) * mobj->scale),
mobj->z + (mobj->height/2) + (P_RandomRange(-20,20) * mobj->scale),
MT_FASTLINE);
fast->angle = mobj->angle;
fast->momx = 3*mobj->target->momx/4;
fast->momy = 3*mobj->target->momy/4;
fast->momz = 3*mobj->target->momz/4;
K_MatchGenericExtraFlags(fast, mobj);
P_SetMobjState(fast, S_FLAMESHIELDLINE1 + i);
}
}
}
else
{
@ -8636,6 +8662,23 @@ void P_MobjThinker(mobj_t *mobj)
P_SetMobjState(mobj, S_FLAMESHIELD1);
}
mobj->extravalue1 = mobj->target->player->kartstuff[k_flamedash];
if (mobj->target->player->kartstuff[k_flamemeter] > flamemax)
{
mobj_t *flash = P_SpawnMobj(mobj->x + mobj->target->momx, mobj->y + mobj->target->momy, mobj->z + mobj->target->momz, MT_THOK);
P_SetMobjState(flash, S_FLAMESHIELDFLASH);
if (leveltime & 1)
{
flash->frame |= 2 + ((leveltime / 2) % 4);
}
else
{
flash->frame |= ((leveltime / 2) % 2);
}
}
if (!splitscreen /*&& rendermode != render_soft*/)
{
angle_t viewingangle;