diff --git a/src/d_player.h b/src/d_player.h index 606415a717692827b3b585899046becd994f1cee..e7e7d348e31640e267e7faee0215d2d3ee77e9a5 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -402,7 +402,7 @@ typedef struct player_s UINT8 justbumped; // Prevent players from endlessly bumping into each other UINT8 tumbleBounces; UINT16 tumbleHeight; // In *mobjscaled* fracunits, or mfu, not raw fu - boolean justDI; // Directional Influence ended, true until letting go of turn + UINT8 justDI; // Turn-lockout timer to briefly prevent unintended turning after DI, resets when actionable or no input boolean flipDI; // Bananas flip the DI direction. Was a bug, but it made bananas much more interesting. SINT8 drift; // (-5 to 5) - Drifting Left or Right, plus a bigger counter = sharper turn diff --git a/src/k_kart.c b/src/k_kart.c index 81374d9c6da088ecdda5461b235a9f16c85d8809..1ee01a9c887c575c11571fb293876c45bfc9eccd 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7561,6 +7561,15 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->instashield) player->instashield--; + if (player->justDI) + { + player->justDI--; + + // return turning if player is fully actionable, no matter when! + if (!P_PlayerInPain(player)) + player->justDI = 0; + } + if (player->eggmanexplode) { if (player->spectator || (gametype == GT_BATTLE && !player->bumpers)) @@ -8296,7 +8305,7 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue) return 0; } - if (player->justDI == true) + if (player->justDI > 0) { // No turning until you let go after DI-ing. return 0; @@ -10496,7 +10505,7 @@ void K_HandleDirectionalInfluence(player_t *player) } // DI attempted!! - player->justDI = true; + player->justDI = MAXHITLAGTICS; cmd = &player->cmd; diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index b4a971d996adc41843633917bb8551d83964ae8a..4b2bad33d19b17c42459dd33363c572f58b793ba 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -239,7 +239,7 @@ static int player_get(lua_State *L) else if (fastcmp(field,"tumbleHeight")) lua_pushinteger(L, plr->tumbleHeight); else if (fastcmp(field,"justDI")) - lua_pushboolean(L, plr->justDI); + lua_pushinteger(L, plr->justDI); else if (fastcmp(field,"flipDI")) lua_pushboolean(L, plr->flipDI); else if (fastcmp(field,"drift")) @@ -593,7 +593,7 @@ static int player_set(lua_State *L) else if (fastcmp(field,"tumbleHeight")) plr->tumbleHeight = luaL_checkinteger(L, 3); else if (fastcmp(field,"justDI")) - plr->justDI = luaL_checkboolean(L, 3); + plr->justDI = luaL_checkinteger(L, 3); else if (fastcmp(field,"flipDI")) plr->flipDI = luaL_checkboolean(L, 3); else if (fastcmp(field,"drift")) diff --git a/src/p_saveg.c b/src/p_saveg.c index f6819eb9c3b889db65d9c3a0c818850db56170f1..e92458710a3291b0ca16acbbb4b6d4fde27bc351 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -521,7 +521,7 @@ static void P_NetUnArchivePlayers(void) players[i].tumbleBounces = READUINT8(save_p); players[i].tumbleHeight = READUINT16(save_p); - players[i].justDI = (boolean)READUINT8(save_p); + players[i].justDI = READUINT8(save_p); players[i].flipDI = (boolean)READUINT8(save_p); players[i].drift = READSINT8(save_p); diff --git a/src/p_user.c b/src/p_user.c index dbf7169257b1f12df9ee12ac6602d1f2cacd2638..927dbf01854aed75530f58e1e5985897b6b91547 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2142,7 +2142,7 @@ void P_MovePlayer(player_t *player) if (cmd->turning == 0) { - player->justDI = false; + player->justDI = 0; } // Kart frames