diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 35f782b34..3835b8804 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -674,6 +674,8 @@ consvar_t cv_kartairsquish = CVAR_INIT ("kartairsquish", "None", CV_NETVAR, kart consvar_t cv_kartdebugshrink = CVAR_INIT ("kartdebugshrink", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); +consvar_t cv_kartdrift_snapshot = CVAR_INIT ("kartdriftsnapshot", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); + consvar_t cv_kartdebugdistribution = CVAR_INIT ("kartdebugdistribution", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); consvar_t cv_kartdebughuddrop = CVAR_INIT ("kartdebughuddrop", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); static CV_PossibleValue_t kartdebugwaypoint_cons_t[] = {{0, "Off"}, {1, "Forwards"}, {2, "Backwards"}, {0, NULL}}; diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 92aa7df48..cbb16e390 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -243,6 +243,7 @@ extern consvar_t cv_votetime; extern consvar_t cv_kartdebugitem, cv_kartdebugamount, cv_kartdebugdistribution, cv_kartdebughuddrop; extern consvar_t cv_kartdebugshrink; +extern consvar_t cv_kartdrift_snapshot; extern consvar_t cv_kartdebugcheckpoint, cv_kartdebugnodes, cv_kartdebugcolorize, cv_kartdebugdirector; extern consvar_t cv_kartdebugwaypoints, cv_kartdebuglap, cv_kartdebugbot, cv_kartdebugcluster, cv_kartdebugrings; extern consvar_t cv_gptest; diff --git a/src/d_player.h b/src/d_player.h index 5fa403e74..294df844b 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -567,6 +567,7 @@ struct player_t boolean noclip; // Fix Grow breaking the "noclip" cheat. Also applies noclip as a bonus. SINT8 drift; // (-5 to 5) - Drifting Left or Right, plus a bigger counter = sharper turn + INT16 driftturnsnapshot; SINT8 driftlock; // Prevents you from using drift angle for x tics. Used for zipper fix. fixed_t driftcharge; // Charge your drift so you can release a burst of speed UINT8 driftboost; // (0 to 125) - Boost you get from drifting diff --git a/src/k_kart.c b/src/k_kart.c index 683cc81f0..ae32dde70 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -452,6 +452,8 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_karteggmine_slotlock); CV_RegisterVar(&cv_karteggmine_slotbrick); + + CV_RegisterVar(&cv_kartdrift_snapshot); } //} @@ -7573,10 +7575,14 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (cmd->buttons & BT_DRIFT) { player->pflags |= PF_DRIFTINPUT; + + player->driftturnsnapshot = player->cmd.turning; } else { player->pflags &= ~PF_DRIFTINPUT; + + player->driftturnsnapshot = 0; } // Respawn Checker @@ -9363,14 +9369,19 @@ static void K_KartDrift(player_t *player, boolean onground) player->driftcharge = 0; } + // experiment disabled, drop the snapshot and use the turning value from this tick + if (!cv_kartdrift_snapshot.value) + { + player->driftturnsnapshot = player->cmd.turning; + } // Drifting: left or right? - if ((player->cmd.turning > 0) && player->speed > minspeed && (player->pflags & PF_DRIFTINPUT) && (player->drift == 0 || (player->pflags & PF_DRIFTEND))) + if ((player->driftturnsnapshot > 0) && player->speed > minspeed && (player->pflags & PF_DRIFTINPUT) && (player->drift == 0 || (player->pflags & PF_DRIFTEND))) { // Starting left drift player->drift = 1; player->pflags &= ~PF_DRIFTEND; } - else if ((player->cmd.turning < 0) && player->speed > minspeed && (player->pflags & PF_DRIFTINPUT) && (player->drift == 0 || (player->pflags & PF_DRIFTEND))) + else if ((player->driftturnsnapshot < 0) && player->speed > minspeed && (player->pflags & PF_DRIFTINPUT) && (player->drift == 0 || (player->pflags & PF_DRIFTEND))) { // Starting right drift player->drift = -1; diff --git a/src/p_saveg.c b/src/p_saveg.c index b188baaa7..841d60887 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -607,6 +607,7 @@ static void P_NetSyncPlayers(savebuffer_t *save) SYNCBOOLEAN(players[i].noclip); SYNC(players[i].drift); + SYNC(players[i].driftturnsnapshot); SYNC(players[i].driftlock); SYNC(players[i].driftcharge); SYNC(players[i].driftboost);