From 0fe645e8b94404af3695ccf064303deeed67a181 Mon Sep 17 00:00:00 2001 From: John FrostFox <john.frostfox@gmail.com> Date: Mon, 18 Oct 2021 16:16:11 +0300 Subject: [PATCH] New feature: "Predict missed tics" --- src/d_clisrv.c | 5 ++++- src/d_netcmd.c | 3 +++ src/d_netcmd.h | 1 + src/m_menu.c | 4 +++- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 10d484b16..875a308de 100755 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -5262,8 +5262,9 @@ void TryRunTics(tic_t realtics, tic_t entertic) } // The network/game is laggy, let's simulate one tic further and use previous controls + // hopefully the server won't miss our input else - if (canSimulate && !cl_redownloadinggamestate) + if (canSimulate && !cl_redownloadinggamestate && cv_simmisstics.value == 1) { // collect net condition data based on encoded tics, it's needed for calculating correct netcmds DetermineNetConditions(); @@ -5388,6 +5389,8 @@ int DetermineSimulationAmount() float numSimsMedian = netplus_median(MAXSIMULATIONS-1, numToSimulateHistorySorted); if (numSimsMedian <= 1) return 1; + if (numSimsMedian > numDesiredSimulateTics) + return numDesiredSimulateTics; return (int)numSimsMedian; } diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 76d145b7c..b5e2c9d6f 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -383,6 +383,8 @@ consvar_t cv_playerfullbright = { "playerfullbright", "Yes", 0, CV_YesNo, NULL, static CV_PossibleValue_t simulateTics_cons_t[] = { {0, "MIN"}, {MAXSIMULATIONS - 1, "MAX"}, {0, NULL} }; consvar_t cv_simulatetics = { "simtics", "MAX", 0, simulateTics_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL }; +consvar_t cv_simmisstics = { "simmisstics", "Yes", 0, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL }; + static CV_PossibleValue_t simulateculldistance_cons_t[] = { {0, "MIN"}, {10000, "MAX"}, {0, NULL} }; consvar_t cv_simulateculldistance = { "simcull", "MIN", 0, simulateculldistance_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL }; @@ -552,6 +554,7 @@ void D_RegisterServerCommands(void) CV_RegisterVar(&cv_simulate); CV_RegisterVar(&cv_simulatetics); + CV_RegisterVar(&cv_simmisstics); CV_RegisterVar(&cv_simulateculldistance); CV_RegisterVar(&cv_siminaccuracy); CV_RegisterVar(&cv_netdelay); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 7a35791c7..0465fdbbf 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -109,6 +109,7 @@ extern consvar_t cv_showping; extern consvar_t cv_simulate; extern consvar_t cv_simulatetics; +extern consvar_t cv_simmisstics; extern consvar_t cv_simulateculldistance; extern consvar_t cv_siminaccuracy; extern consvar_t cv_netdelay; diff --git a/src/m_menu.c b/src/m_menu.c index 20a18d3a7..bce6cc82a 100755 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1698,7 +1698,9 @@ static menuitem_t OP_NetPlusOptionsMenu[] = {IT_CVAR | IT_STRING, NULL, "Player jitter reduction tics", &cv_netsteadyplayers, 16}, //simsteadyplayers {IT_CVAR | IT_STRING, NULL, "Turn off ring toss prediction", &cv_netslingdelay, 21}, //simslingdelay {IT_CVAR | IT_STRING, NULL, "Objects prediction distance", &cv_simulateculldistance, 26}, //simcull - {IT_CVAR | IT_STRING, NULL, "Prediction inaccuracy (beta)", &cv_siminaccuracy, 31}, //siminaccuracy + // {IT_CVAR | IT_STRING, NULL, "Prediction inaccuracy (beta)", &cv_siminaccuracy, 31}, //siminaccuracy + {IT_CVAR | IT_STRING, NULL, "Predict missed tics", &cv_simmisstics, 31}, //siminaccuracy + // simmisstics {IT_HEADER, NULL, "Visuals", NULL, 41}, {IT_CVAR | IT_STRING, NULL, "Player trail lifetime", &cv_nettrails, 46}, //simtrails -- GitLab