make this change operation order instead of use snapshots

This commit is contained in:
minenice55 2026-01-25 18:34:27 -05:00
parent c6b875b336
commit 2327f02529
6 changed files with 27 additions and 22 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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

View file

@ -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;

View file

@ -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);

View file

@ -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);