Merge branch 'dashmode-fixes' into 'next'

Dashmode fixes

See merge request STJr/SRB2!909
This commit is contained in:
Lachlan Wright 2020-06-08 05:25:30 -04:00
commit 614a98bd9d
3 changed files with 25 additions and 2 deletions

View File

@ -2379,6 +2379,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
fixed_t height;
fixed_t spinheight;
INT32 exiting;
tic_t dashmode;
INT16 numboxes;
INT16 totalring;
UINT8 laps;
@ -2413,6 +2414,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
if (!(netgame || multiplayer))
pflags |= (players[player].pflags & (PF_GODMODE|PF_NOCLIP|PF_INVIS));
dashmode = players[player].dashmode;
numboxes = players[player].numboxes;
laps = players[player].laps;
totalring = players[player].totalring;
@ -2511,6 +2514,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
p->spinheight = spinheight;
p->exiting = exiting;
p->dashmode = dashmode;
p->numboxes = numboxes;
p->laps = laps;
p->totalring = totalring;

View File

@ -11389,6 +11389,14 @@ void P_SpawnPlayer(INT32 playernum)
p->realtime = leveltime;
p->followitem = skins[p->skin].followitem;
// Make sure player's stats are reset if they were in dashmode!
if (p->dashmode)
{
p->dashmode = 0;
p->normalspeed = skins[p->skin].normalspeed;
p->jumpfactor = skins[p->skin].jumpfactor;
}
//awayview stuff
p->awayviewmobj = NULL;
p->awayviewtics = 0;

View File

@ -11405,6 +11405,10 @@ static void P_DoMetalJetFume(player_t *player, mobj_t *fume)
fume->y = mo->y + P_ReturnThrustY(fume, angle, dist);
fume->z = mo->z + ((mo->height - fume->height) >> 1);
P_SetThingPosition(fume);
// If dashmode is high enough, spawn a trail
if (player->normalspeed >= skins[player->skin].normalspeed*2)
P_SpawnGhostMobj(fume);
}
//
@ -12198,6 +12202,7 @@ void P_PlayerThink(player_t *player)
// Dash mode - thanks be to VelocitOni
if ((player->charflags & SF_DASHMODE) && !player->gotflag && !player->powers[pw_carry] && !player->exiting && !(maptol & TOL_NIGHTS) && !metalrecording) // woo, dashmode! no nights tho.
{
tic_t prevdashmode = dashmode;
boolean totallyradical = player->speed >= FixedMul(player->runspeed, player->mo->scale);
boolean floating = (player->secondjump == 1);
@ -12222,8 +12227,11 @@ void P_PlayerThink(player_t *player)
if (dashmode < DASHMODE_THRESHOLD) // Exits Dash Mode if you drop below speed/dash counter tics. Not in the above block so it doesn't keep disabling in midair.
{
player->normalspeed = skins[player->skin].normalspeed; // Reset to default if not capable of entering dash mode.
player->jumpfactor = skins[player->skin].jumpfactor;
if (prevdashmode >= DASHMODE_THRESHOLD)
{
player->normalspeed = skins[player->skin].normalspeed; // Reset to default if not capable of entering dash mode.
player->jumpfactor = skins[player->skin].jumpfactor;
}
}
else if (P_IsObjectOnGround(player->mo)) // Activate dash mode if we're on the ground.
{
@ -12238,6 +12246,8 @@ void P_PlayerThink(player_t *player)
{
mobj_t *ghost = P_SpawnGhostMobj(player->mo); // Spawns afterimages
ghost->fuse = 2; // Makes the images fade quickly
if (ghost->tracer && !P_MobjWasRemoved(ghost->tracer))
ghost->tracer->fuse = ghost->fuse;
}
}
else if (dashmode)