diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 3835b8804..fcaba1a46 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -674,7 +674,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_snapshot = CVAR_INIT ("kartdriftsnapshot", "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_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 cbb16e390..44e482f8c 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_snapshot; +extern consvar_t cv_kartdrift_operationorder; 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 294df844b..5fa403e74 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -567,7 +567,6 @@ 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 ae32dde70..6577df333 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -453,7 +453,7 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_karteggmine_slotlock); CV_RegisterVar(&cv_karteggmine_slotbrick); - CV_RegisterVar(&cv_kartdrift_snapshot); + CV_RegisterVar(&cv_kartdrift_operationorder); } //} @@ -7572,17 +7572,16 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->flamecamtime -= 1; } - if (cmd->buttons & BT_DRIFT) + if (!cv_kartdrift_operationorder.value) { - player->pflags |= PF_DRIFTINPUT; - - player->driftturnsnapshot = player->cmd.turning; - } - else - { - player->pflags &= ~PF_DRIFTINPUT; - - player->driftturnsnapshot = 0; + if (cmd->buttons & BT_DRIFT) + { + player->pflags |= PF_DRIFTINPUT; + } + else + { + player->pflags &= ~PF_DRIFTINPUT; + } } // Respawn Checker @@ -9369,19 +9368,14 @@ 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->driftturnsnapshot > 0) && player->speed > minspeed && (player->pflags & PF_DRIFTINPUT) && (player->drift == 0 || (player->pflags & PF_DRIFTEND))) + if ((player->cmd.turning > 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->driftturnsnapshot < 0) && player->speed > minspeed && (player->pflags & PF_DRIFTINPUT) && (player->drift == 0 || (player->pflags & PF_DRIFTEND))) + else if ((player->cmd.turning < 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 841d60887..b188baaa7 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -607,7 +607,6 @@ 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); diff --git a/src/p_user.c b/src/p_user.c index 4de6b61f9..015209560 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4298,6 +4298,19 @@ void P_PlayerThink(player_t *player) } player->pflags &= ~PF_HITFINISHLINE; + + // experiment: process the drift input *before* player movement instead of after + if (cv_kartdrift_operationorder.value) + { + if (cmd->buttons & BT_DRIFT) + { + player->pflags |= PF_DRIFTINPUT; + } + else + { + player->pflags &= ~PF_DRIFTINPUT; + } + } // check water content, set stuff in mobj P_MobjCheckWater(player->mo);