Merge branch 'knuxstuff' into 'master'

Knuckles changes: the fixes

See merge request STJr/SRB2Internal!428
This commit is contained in:
MascaraSnake 2019-11-12 15:40:15 -05:00
commit 1a023f1bf4

View file

@ -2265,7 +2265,7 @@ boolean P_PlayerHitFloor(player_t *player, boolean dorollstuff)
else if (!player->skidtime) else if (!player->skidtime)
player->pflags &= ~PF_GLIDING; player->pflags &= ~PF_GLIDING;
} }
else if (player->charability == CA_GLIDEANDCLIMB && player->pflags & PF_THOKKED && (~player->pflags) & PF_SHIELDABILITY) else if (player->charability == CA_GLIDEANDCLIMB && player->pflags & PF_THOKKED && !(player->pflags & PF_SHIELDABILITY) && player->mo->state-states == S_PLAY_FALL)
{ {
if (player->mo->state-states != S_PLAY_GLIDE_LANDING) if (player->mo->state-states != S_PLAY_GLIDE_LANDING)
{ {
@ -5305,14 +5305,23 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd)
// Now Knuckles-type abilities are checked. // Now Knuckles-type abilities are checked.
if (!(player->pflags & PF_THOKKED) || player->charflags & SF_MULTIABILITY) if (!(player->pflags & PF_THOKKED) || player->charflags & SF_MULTIABILITY)
{ {
INT32 glidespeed = player->actionspd; fixed_t glidespeed = FixedMul(player->actionspd, player->mo->scale);
fixed_t playerspeed = player->speed;
if (player->mo->eflags & MFE_UNDERWATER)
{
glidespeed >>= 1;
playerspeed >>= 1;
player->mo->momx = ((player->mo->momx - player->cmomx) >> 1) + player->cmomx;
player->mo->momy = ((player->mo->momy - player->cmomy) >> 1) + player->cmomy;
}
player->pflags |= PF_GLIDING|PF_THOKKED; player->pflags |= PF_GLIDING|PF_THOKKED;
player->glidetime = 0; player->glidetime = 0;
P_SetPlayerMobjState(player->mo, S_PLAY_GLIDE); P_SetPlayerMobjState(player->mo, S_PLAY_GLIDE);
if (player->speed < glidespeed) if (playerspeed < glidespeed)
P_Thrust(player->mo, player->mo->angle, glidespeed - player->speed); P_Thrust(player->mo, player->mo->angle, glidespeed - playerspeed);
player->pflags &= ~(PF_SPINNING|PF_STARTDASH); player->pflags &= ~(PF_SPINNING|PF_STARTDASH);
} }
break; break;
@ -5972,7 +5981,12 @@ static void P_3dMovement(player_t *player)
if (player->climbing) if (player->climbing)
{ {
if (cmd->forwardmove) if (cmd->forwardmove)
P_SetObjectMomZ(player->mo, FixedDiv(cmd->forwardmove*FRACUNIT, 15*FRACUNIT>>1), false); {
if (player->mo->eflags & MFE_UNDERWATER)
P_SetObjectMomZ(player->mo, FixedDiv(cmd->forwardmove*FRACUNIT, 10*FRACUNIT), false);
else
P_SetObjectMomZ(player->mo, FixedDiv(cmd->forwardmove*FRACUNIT, 15*FRACUNIT>>1), false);
}
} }
else if (!analogmove else if (!analogmove
&& cmd->forwardmove != 0 && !(player->pflags & PF_GLIDING || player->exiting && cmd->forwardmove != 0 && !(player->pflags & PF_GLIDING || player->exiting
@ -6006,7 +6020,12 @@ static void P_3dMovement(player_t *player)
} }
// Sideways movement // Sideways movement
if (player->climbing) if (player->climbing)
P_InstaThrust(player->mo, player->mo->angle-ANGLE_90, FixedDiv(cmd->sidemove*player->mo->scale, 15*FRACUNIT>>1)); {
if (player->mo->eflags & MFE_UNDERWATER)
P_InstaThrust(player->mo, player->mo->angle-ANGLE_90, FixedDiv(cmd->sidemove*player->mo->scale, 10*FRACUNIT));
else
P_InstaThrust(player->mo, player->mo->angle-ANGLE_90, FixedDiv(cmd->sidemove*player->mo->scale, 15*FRACUNIT>>1));
}
// Analog movement control // Analog movement control
else if (analogmove) else if (analogmove)
{ {