diff --git a/src/k_kart.c b/src/k_kart.c index 75a50358a..0ffba6275 100644 --- a/src/k_kart.c +++ b/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 diff --git a/src/k_kart.h b/src/k_kart.h index d1d89ebcc..90d816a67 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -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); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 5ddf666b7..c0506afff 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -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; } diff --git a/src/p_user.c b/src/p_user.c index 65c575510..f543b00b7 100644 --- a/src/p_user.c +++ b/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<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)