Improve accuracy of movement code even more
This commit is contained in:
parent
e2edae253f
commit
af6e43dcd8
4 changed files with 36 additions and 30 deletions
23
src/k_kart.c
23
src/k_kart.c
|
|
@ -4097,6 +4097,26 @@ SINT8 K_GetForwardMove(player_t *player)
|
|||
return forwardmove;
|
||||
}
|
||||
|
||||
SINT8 K_GetSideMove(player_t *player)
|
||||
{
|
||||
SINT8 sidemove = player->cmd.sidemove;
|
||||
|
||||
if ((player->exiting || mapreset) ||
|
||||
player->pflags & PF_STASIS ||
|
||||
player->spinouttimer ||
|
||||
player->flipovertimer) // pw_introcam?
|
||||
{
|
||||
sidemove = 0;
|
||||
}
|
||||
|
||||
if (!player->pogospring)
|
||||
{
|
||||
sidemove = 0;
|
||||
}
|
||||
|
||||
return sidemove;
|
||||
}
|
||||
|
||||
fixed_t K_GetNewSpeed(player_t *player)
|
||||
{
|
||||
const fixed_t accelmax = 4000;
|
||||
|
|
@ -4137,10 +4157,9 @@ fixed_t K_GetNewSpeed(player_t *player)
|
|||
return finalspeed;
|
||||
}
|
||||
|
||||
fixed_t K_3dKartMovement(player_t *player, boolean onground)
|
||||
fixed_t K_3dKartMovement(player_t *player, boolean onground, SINT8 forwardmove)
|
||||
{
|
||||
fixed_t finalspeed = K_GetNewSpeed(player);
|
||||
SINT8 forwardmove = K_GetForwardMove(player);
|
||||
|
||||
if (!onground) return 0; // If the player isn't on the ground, there is no change in speed
|
||||
|
||||
|
|
|
|||
|
|
@ -271,8 +271,9 @@ void K_UpdateShrinkCheat(player_t *player);
|
|||
boolean K_KartKickstart(player_t *player);
|
||||
UINT16 K_GetKartButtons(player_t *player);
|
||||
SINT8 K_GetForwardMove(player_t *player);
|
||||
SINT8 K_GetSideMove(player_t *player);
|
||||
fixed_t K_GetNewSpeed(player_t *player);
|
||||
fixed_t K_3dKartMovement(player_t *player, boolean onground);
|
||||
fixed_t K_3dKartMovement(player_t *player, boolean onground, SINT8 fowardmove);
|
||||
SINT8 K_Sliptiding(player_t *player);
|
||||
fixed_t K_PlayerBaseFriction(player_t *player, fixed_t original);
|
||||
void K_MoveKartPlayer(player_t *player, boolean onground);
|
||||
|
|
|
|||
|
|
@ -4134,11 +4134,14 @@ static int lib_k3dKartMovement(lua_State *L)
|
|||
{
|
||||
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||
boolean onground = lua_optboolean(L, 2);
|
||||
SINT8 fowardmove = luaL_checkinteger(L, 3);
|
||||
|
||||
//HUDSAFE
|
||||
if (!player)
|
||||
return LUA_ErrInvalid(L, "player_t");
|
||||
lua_pushinteger(L, K_3dKartMovement(player, onground));
|
||||
if (lua_isnil(L, 3))
|
||||
fowardmove = K_GetForwardMove(player);
|
||||
lua_pushinteger(L, K_3dKartMovement(player, onground, fowardmove));
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
35
src/p_user.c
35
src/p_user.c
|
|
@ -1794,10 +1794,8 @@ static void P_3dMovement(player_t *player)
|
|||
|
||||
cmd = &player->cmd;
|
||||
|
||||
if (!player->pogospring)
|
||||
cmd->sidemove = 0;
|
||||
|
||||
cmd->forwardmove = K_GetForwardMove(player);
|
||||
cmd->sidemove = K_GetSideMove(player);
|
||||
|
||||
// Get the old momentum; this will be needed at the end of the function! -SH
|
||||
oldMagnitude = R_PointToDist2(player->mo->momx - player->cmomx, player->mo->momy - player->cmomy, 0, 0);
|
||||
|
|
@ -1814,6 +1812,7 @@ static void P_3dMovement(player_t *player)
|
|||
{
|
||||
movepushangle = player->mo->angle;
|
||||
}
|
||||
|
||||
movepushsideangle = movepushangle-ANGLE_90;
|
||||
|
||||
// cmomx/cmomy stands for the conveyor belt speed.
|
||||
|
|
@ -1825,9 +1824,7 @@ static void P_3dMovement(player_t *player)
|
|||
}
|
||||
else if (player->onconveyor == 4 && !P_IsObjectOnGround(player->mo)) // Actual conveyor belt
|
||||
player->cmomx = player->cmomy = 0;
|
||||
else if (player->onconveyor != 2 && player->onconveyor != 4
|
||||
&& player->onconveyor != 1
|
||||
)
|
||||
else if (player->onconveyor != 2 && player->onconveyor != 4 && player->onconveyor != 1)
|
||||
player->cmomx = player->cmomy = 0;
|
||||
|
||||
player->rmomx = player->mo->momx - player->cmomx;
|
||||
|
|
@ -1845,34 +1842,20 @@ static void P_3dMovement(player_t *player)
|
|||
dangle = InvAngle(dangle);
|
||||
}
|
||||
|
||||
// anything else will leave both at 0, so no need to do anything else
|
||||
|
||||
//{ SRB2kart 220217 - Toaster Code for misplaced thrust
|
||||
#if 0
|
||||
if (!player->drift) // Not Drifting
|
||||
{
|
||||
angle_t difference = dangle/2;
|
||||
boolean reverse = (dangle >= ANGLE_90);
|
||||
|
||||
if (dangleflip)
|
||||
difference = InvAngle(difference);
|
||||
|
||||
if (reverse)
|
||||
difference += ANGLE_180;
|
||||
|
||||
P_InstaThrust(player->mo, player->mo->angle + difference, player->speed);
|
||||
}
|
||||
#endif
|
||||
//}
|
||||
// When sliding, don't allow forward/back
|
||||
if (player->carry & CR_SLIDING)
|
||||
cmd->forwardmove = 0;
|
||||
|
||||
// Do not let the player control movement if not onground.
|
||||
// SRB2Kart: pogo spring and speed bumps are supposed to control like you're on the ground
|
||||
onground = (P_IsObjectOnGround(player->mo) || (player->pogospring));
|
||||
|
||||
player->aiming = cmd->aiming<<FRACBITS;
|
||||
|
||||
// Forward movement
|
||||
if (!((player->exiting || mapreset) || (P_PlayerInPain(player) && !onground)))
|
||||
{
|
||||
movepushforward = K_3dKartMovement(player, onground);
|
||||
movepushforward = K_3dKartMovement(player, onground, cmd->forwardmove);
|
||||
|
||||
// allow very small movement while in air for gameplay
|
||||
if (!onground)
|
||||
|
|
|
|||
Loading…
Reference in a new issue