diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 74dd42fbe..7b7c945c3 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -674,9 +674,6 @@ 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); static CV_PossibleValue_t kartdebugwaypoint_cons_t[] = {{0, "Off"}, {1, "Forwards"}, {2, "Backwards"}, {0, NULL}}; @@ -2373,11 +2370,12 @@ void WeaponPref_Send(UINT8 ssplayer) if (player->randomrestat) prefs |= WP_RANDOMRESTAT; - UINT8 buf[4]; + UINT8 buf[5]; buf[0] = prefs; buf[1] = cv_mindelay.value; buf[2] = player->kartspeedrestat; buf[3] = player->kartweightrestat; + buf[4] = cv_driftmode[ssplayer].value; SendNetXCmdForPlayer(ssplayer, XD_WEAPONPREF, buf, sizeof buf); } @@ -2465,6 +2463,16 @@ static void Got_WeaponPref(UINT8 **cp,INT32 playernum) player->kartspeedrestat = kartspeedrestat; player->kartweightrestat = kartweightrestat; + UINT8 driftmode = READUINT8(*cp); + if (driftmode >= NUMDRIFTMODES) + { + CONS_Alert(CONS_WARNING, M_GetText("Illegal drift mode received from %s\n"), player_names[playernum]); + if (server) + SendKick(playernum, KICK_MSG_CON_FAIL); + return; + } + player->driftmode = driftmode; + // SEE ALSO g_demo.c demo_extradata[playernum] |= DXD_WEAPONPREF; } diff --git a/src/d_netcmd.h b/src/d_netcmd.h index beabe8b16..92aa7df48 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -243,7 +243,6 @@ 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, 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 294df844b..10ecb284f 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -435,6 +435,15 @@ struct saltyhop_t fixed_t momz, zoffset; // erm... the mechanism.... }; +// this WILL conflict with a future commit I just need this to proto +typedef enum +{ + DRIFTMODE_CLASSIC = 0, + DRIFTMODE_SNAPSHOT, + DRIFTMODE_INSTANT, + NUMDRIFTMODES +} driftmode_e; + // enum for saved lap times typedef enum { @@ -566,6 +575,7 @@ struct player_t UINT8 justbumped; // Prevent players from endlessly bumping into each other boolean noclip; // Fix Grow breaking the "noclip" cheat. Also applies noclip as a bonus. + driftmode_e driftmode; 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. diff --git a/src/g_game.c b/src/g_game.c index 428b340e7..ada093c6f 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -464,6 +464,15 @@ consvar_t cv_jitterlegacy[MAXSPLITSCREENPLAYERS] = { CVAR_INIT ("driftjitter4", "Ring Racers", CV_SAVE|CV_CALL|CV_NOINIT, driftjitter_cons_t, weaponPrefChange) }; + +static CV_PossibleValue_t driftmode_cons_t[] = {{DRIFTMODE_CLASSIC, "Classic"}, {DRIFTMODE_SNAPSHOT, "Snapshot"}, {DRIFTMODE_INSTANT, "Instant"}, {0, NULL}}; +consvar_t cv_driftmode[MAXSPLITSCREENPLAYERS] = { + CVAR_INIT ("driftmode", "Classic", CV_SAVE|CV_CALL|CV_NOINIT, driftjitter_cons_t, weaponPrefChange), + CVAR_INIT ("driftmode2", "Classic", CV_SAVE|CV_CALL|CV_NOINIT, driftjitter_cons_t, weaponPrefChange), + CVAR_INIT ("driftmode3", "Classic", CV_SAVE|CV_CALL|CV_NOINIT, driftjitter_cons_t, weaponPrefChange), + CVAR_INIT ("driftmode4", "Classic", CV_SAVE|CV_CALL|CV_NOINIT, driftjitter_cons_t, weaponPrefChange) +}; + static CV_PossibleValue_t zerotoone_cons_t[] = {{0, "MIN"}, {FRACUNIT, "MAX"}, {0, NULL}}; consvar_t cv_deadzonex[MAXSPLITSCREENPLAYERS] = { CVAR_INIT ("xdeadzone", "0.25", CV_FLOAT|CV_SAVE, zerotoone_cons_t, NULL), diff --git a/src/g_game.h b/src/g_game.h index 64c04f360..69391f24f 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -80,6 +80,7 @@ extern consvar_t cv_invertmouse; extern consvar_t cv_kickstartaccel[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_shrinkme[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_jitterlegacy[MAXSPLITSCREENPLAYERS]; +extern consvar_t cv_driftmode[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_deadzonex[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_deadzoney[MAXSPLITSCREENPLAYERS]; diff --git a/src/k_kart.c b/src/k_kart.c index 596e2a0f4..5c6f9a97a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7573,7 +7573,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->flamecamtime -= 1; } - if (!cv_kartdrift_operationorder.value) + if (player->driftmode != DRIFTMODE_INSTANT) { if (cmd->buttons & BT_DRIFT) { @@ -9372,7 +9372,7 @@ static void K_KartDrift(player_t *player, boolean onground) } // drift-turn snapshot experiment disabled, drop the snapshot and use the turning value from this tick - if (!cv_kartdrift_snapshot.value) + if (player->driftmode != DRIFTMODE_SNAPSHOT) { player->driftturnsnapshot = player->cmd.turning; } diff --git a/src/p_saveg.c b/src/p_saveg.c index 841d60887..b2343b002 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -606,6 +606,7 @@ static void P_NetSyncPlayers(savebuffer_t *save) SYNC(players[i].justbumped); SYNCBOOLEAN(players[i].noclip); + SYNC(players[i].driftmode); SYNC(players[i].drift); SYNC(players[i].driftturnsnapshot); SYNC(players[i].driftlock);