diff --git a/src/d_netcmd.c b/src/d_netcmd.c index fcaba1a46..74dd42fbe 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -675,6 +675,7 @@ 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_operationorder = CVAR_INIT ("kartdriftoperationorder", "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); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 44e482f8c..beabe8b16 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -243,7 +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_operationorder; +extern consvar_t cv_kartdrift_operationorder, 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 6577df333..596e2a0f4 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -454,6 +454,7 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_karteggmine_slotbrick); CV_RegisterVar(&cv_kartdrift_operationorder); + CV_RegisterVar(&cv_kartdrift_snapshot); } //} @@ -7577,10 +7578,12 @@ 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 = player->cmd.turning; } } @@ -9368,14 +9371,19 @@ static void K_KartDrift(player_t *player, boolean onground) player->driftcharge = 0; } + // drift-turn snapshot 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);