my workflow is beyond your understanding

This commit is contained in:
AJ Martinez 2022-01-20 03:39:00 -06:00 committed by SinnamonLat
parent 1d4a99b6a8
commit 3fcea2a37e
4 changed files with 23 additions and 11 deletions

View file

@ -510,6 +510,8 @@ static CV_PossibleValue_t perfstats_cons_t[] = {
{0, "Off"}, {1, "Rendering"}, {2, "Logic"}, {3, "ThinkFrame"}, {0, NULL}}; {0, "Off"}, {1, "Rendering"}, {2, "Logic"}, {3, "ThinkFrame"}, {0, NULL}};
consvar_t cv_perfstats = CVAR_INIT ("perfstats", "Off", 0, perfstats_cons_t, NULL); consvar_t cv_perfstats = CVAR_INIT ("perfstats", "Off", 0, perfstats_cons_t, NULL);
consvar_t cv_director = CVAR_INIT ("director", "Off", 0, CV_OnOff, NULL);
char timedemo_name[256]; char timedemo_name[256];
boolean timedemo_csv; boolean timedemo_csv;
char timedemo_csv_id[256]; char timedemo_csv_id[256];
@ -736,6 +738,8 @@ void D_RegisterServerCommands(void)
CV_RegisterVar(&cv_showping); CV_RegisterVar(&cv_showping);
CV_RegisterVar(&cv_showviewpointtext); CV_RegisterVar(&cv_showviewpointtext);
CV_RegisterVar(&cv_director);
CV_RegisterVar(&cv_dummyconsvar); CV_RegisterVar(&cv_dummyconsvar);
#ifdef USE_STUN #ifdef USE_STUN

View file

@ -113,6 +113,8 @@ extern consvar_t cv_sleep;
extern consvar_t cv_perfstats; extern consvar_t cv_perfstats;
extern consvar_t cv_director;
extern char timedemo_name[256]; extern char timedemo_name[256];
extern boolean timedemo_csv; extern boolean timedemo_csv;
extern char timedemo_csv_id[256]; extern char timedemo_csv_id[256];

View file

@ -12,13 +12,12 @@
#include "d_netcmd.h" #include "d_netcmd.h"
#include "p_local.h" #include "p_local.h"
#define SWITCHTIME TICRATE*5 #define SWITCHTIME TICRATE*5 // cooldown between unforced switches
#define DEBOUNCETIME TICRATE/6 #define BOREDOMTIME 3*TICRATE/2 // how long until players considered far apart?
#define BOREDOMTIME 3*TICRATE/2 #define TRANSFERTIME TICRATE // how long to delay reaction shots?
#define TRANSFERTIME TICRATE #define BREAKAWAYDIST 4000 // how *far* until players considered far apart?
#define BREAKAWAYDIST 4000 #define WALKBACKDIST 600 // how close should a trailing player be before we switch?
#define WALKBACKDIST 600 #define PINCHDIST 30000 // how close should the leader be to be considered "end of race"?
#define PINCHDIST 30000
void K_UpdateDirectorPositions(void); void K_UpdateDirectorPositions(void);
boolean K_CanSwitchDirector(void); boolean K_CanSwitchDirector(void);
@ -31,7 +30,7 @@ void K_DirectorForceSwitch(INT32 player, INT32 time);
INT32 cooldown = 0; // how long has it been since we last switched? INT32 cooldown = 0; // how long has it been since we last switched?
INT32 freeze = 0; // when nonzero, fixed switch pending, freeze logic! INT32 freeze = 0; // when nonzero, fixed switch pending, freeze logic!
INT32 attacker = 0; // who to switch to when freeze delay elapses INT32 attacker = 0; // who to switch to when freeze delay elapses
INT32 maxdist = 0; INT32 maxdist = 0; // how far is the closest player from finishing?
INT32 sortedplayers[MAXPLAYERS] = {0}; // position-1 goes in, player index comes out. INT32 sortedplayers[MAXPLAYERS] = {0}; // position-1 goes in, player index comes out.
INT32 gap[MAXPLAYERS] = {0}; // gap between a given position and their closest pursuer INT32 gap[MAXPLAYERS] = {0}; // gap between a given position and their closest pursuer
@ -74,7 +73,7 @@ boolean K_CanSwitchDirector(void) {
INT32 *displayplayerp = &displayplayers[0]; INT32 *displayplayerp = &displayplayers[0];
if (players[*displayplayerp].trickpanel > 0) if (players[*displayplayerp].trickpanel > 0)
return false; return false;
if (cooldown < SWITCHTIME); if (cooldown < SWITCHTIME)
return false; return false;
return true; return true;
} }
@ -111,20 +110,24 @@ void K_DrawDirectorDebugger(void) {
INT32 leader; INT32 leader;
INT32 follower; INT32 follower;
INT32 ytxt; INT32 ytxt;
if (!cv_kartdebugdirector.value) if (!cv_kartdebugdirector.value)
return; return;
V_DrawThinString(10, 0, V_70TRANS, va("PLACE")); V_DrawThinString(10, 0, V_70TRANS, va("PLACE"));
V_DrawThinString(40, 0, V_70TRANS, va("CONF?")); V_DrawThinString(40, 0, V_70TRANS, va("CONF?"));
V_DrawThinString(80, 0, V_70TRANS, va("GAP")); V_DrawThinString(80, 0, V_70TRANS, va("GAP"));
V_DrawThinString(120, 0, V_70TRANS, va("BORED")); V_DrawThinString(120, 0, V_70TRANS, va("BORED"));
V_DrawThinString(150, 0, V_70TRANS, va("COOLDOWN: %d", cooldown)); V_DrawThinString(150, 0, V_70TRANS, va("COOLDOWN: %d", cooldown));
V_DrawThinString(230, 0, V_70TRANS, va("MAXDIST: %d", maxdist)); V_DrawThinString(230, 0, V_70TRANS, va("MAXDIST: %d", maxdist));
for (playernum = 0; playernum < MAXPLAYERS-1; ++playernum) { for (playernum = 0; playernum < MAXPLAYERS-1; ++playernum) {
ytxt = 10*playernum+10; ytxt = 10*playernum+10;
leader = sortedplayers[playernum]; leader = sortedplayers[playernum];
follower = sortedplayers[playernum+1]; follower = sortedplayers[playernum+1];
if (leader == -1 || follower == -1) if (leader == -1 || follower == -1)
break; break;
V_DrawThinString(10, ytxt, V_70TRANS, va("%d", playernum)); V_DrawThinString(10, ytxt, V_70TRANS, va("%d", playernum));
V_DrawThinString(20, ytxt, V_70TRANS, va("%d", playernum+1)); V_DrawThinString(20, ytxt, V_70TRANS, va("%d", playernum+1));
if (players[leader].positiondelay) if (players[leader].positiondelay)
@ -143,6 +146,9 @@ void K_UpdateDirector(void) {
INT32 *displayplayerp = &displayplayers[0]; INT32 *displayplayerp = &displayplayers[0];
INT32 targetposition; INT32 targetposition;
if (!cv_director.value)
return;
K_UpdateDirectorPositions(); K_UpdateDirectorPositions();
cooldown++; cooldown++;
@ -180,7 +186,6 @@ void K_UpdateDirector(void) {
} }
} }
target = sortedplayers[targetposition+1]; target = sortedplayers[targetposition+1];
// if we're certain the back half of the pair is actually in this position, try to switch // if we're certain the back half of the pair is actually in this position, try to switch

View file

@ -3276,10 +3276,11 @@ static void K_RemoveGrowShrink(player_t *player)
void K_TumblePlayer(player_t *player, mobj_t *inflictor, mobj_t *source) void K_TumblePlayer(player_t *player, mobj_t *inflictor, mobj_t *source)
{ {
K_DirectorFollowAttack(player, inflictor, source);
fixed_t gravityadjust; fixed_t gravityadjust;
(void)source; (void)source;
K_DirectorFollowAttack(player, inflictor, source);
player->tumbleBounces = 1; player->tumbleBounces = 1;
if (player->tripWireState == TRIP_PASSED) if (player->tripWireState == TRIP_PASSED)