Net fuzzing

This commit is contained in:
AJ Martinez 2023-09-01 16:58:30 -07:00
parent fa13e7d5bf
commit 3031dccfa2
3 changed files with 27 additions and 11 deletions

View file

@ -838,7 +838,7 @@ consvar_t cv_palettenum = PlayerCheat("palettenum", "0").values(CV_Unsigned).onc
extern CV_PossibleValue_t renderhitbox_cons_t[];
consvar_t cv_renderhitbox = PlayerCheat("renderhitbox", "Off").values(renderhitbox_cons_t).description("Show hitboxes around objects");
consvar_t cv_fuzz = PlayerCheat("fuzz", "Off").on_off().description("Human players spam random inputs, get random items");
consvar_t cv_fuzz = OnlineCheat("fuzz", "Off").on_off().description("Human players spam random inputs, get random items");
//
// Dummy variables used solely in the menu system.

View file

@ -5050,6 +5050,27 @@ static char NodeToSplitPlayer(int node, int split)
return -1;
}
static void FuzzTiccmd(ticcmd_t* target)
{
extern consvar_t cv_fuzz;
if (cv_fuzz.value)
{
target->forwardmove = P_RandomRange(PR_FUZZ, -MAXPLMOVE, MAXPLMOVE);
target->turning = P_RandomRange(PR_FUZZ, -KART_FULLTURN, KART_FULLTURN);
target->throwdir = P_RandomRange(PR_FUZZ, -KART_FULLTURN, KART_FULLTURN);
target->buttons = P_RandomRange(PR_FUZZ, 0, 255);
// Make fuzzed players more likely to do impactful things
if (P_RandomRange(PR_FUZZ, 0, 500))
{
target->buttons |= BT_ACCELERATE;
target->buttons &= ~BT_LOOKBACK;
target->buttons &= ~BT_RESPAWN;
target->buttons &= ~BT_BRAKE;
}
}
}
/** Handles a packet received from a node that is in game
*
* \param node The packet sender
@ -5181,6 +5202,8 @@ static void HandlePacketFromPlayer(SINT8 node)
&& (maketic - firstticstosend < BACKUPTICS))
faketic++;
FuzzTiccmd(&netbuffer->u.clientpak.cmd);
// Copy ticcmd
G_MoveTiccmd(&netcmds[faketic%BACKUPTICS][netconsole], &netbuffer->u.clientpak.cmd, 1);
@ -5194,6 +5217,7 @@ static void HandlePacketFromPlayer(SINT8 node)
|| (netbuffer->packettype == PT_CLIENT4CMD || netbuffer->packettype == PT_CLIENT4MIS))
&& (nodetoplayer2[node] >= 0))
{
FuzzTiccmd(&netbuffer->u.client2pak.cmd2);
G_MoveTiccmd(&netcmds[faketic%BACKUPTICS][(UINT8)nodetoplayer2[node]],
&netbuffer->u.client2pak.cmd2, 1);
@ -5205,6 +5229,7 @@ static void HandlePacketFromPlayer(SINT8 node)
|| (netbuffer->packettype == PT_CLIENT4CMD || netbuffer->packettype == PT_CLIENT4MIS))
&& (nodetoplayer3[node] >= 0))
{
FuzzTiccmd(&netbuffer->u.client3pak.cmd3);
G_MoveTiccmd(&netcmds[faketic%BACKUPTICS][(UINT8)nodetoplayer3[node]],
&netbuffer->u.client3pak.cmd3, 1);
@ -5215,6 +5240,7 @@ static void HandlePacketFromPlayer(SINT8 node)
if ((netbuffer->packettype == PT_CLIENT4CMD || netbuffer->packettype == PT_CLIENT4MIS)
&& (nodetoplayer4[node] >= 0))
{
FuzzTiccmd(&netbuffer->u.client4pak.cmd4);
G_MoveTiccmd(&netcmds[faketic%BACKUPTICS][(UINT8)nodetoplayer4[node]],
&netbuffer->u.client4pak.cmd4, 1);

View file

@ -39,8 +39,6 @@
#include "tables.h"
#include "m_random.h" // monkey input
extern "C" consvar_t cv_fuzz;
namespace
{
@ -146,14 +144,6 @@ class TiccmdBuilder
cmd->turning = clamp(cmd->turning, KART_FULLTURN);
cmd->throwdir = clamp(cmd->throwdir, KART_FULLTURN);
if (cv_fuzz.value)
{
cmd->forwardmove = P_RandomRange(PR_FUZZ, -MAXPLMOVE, MAXPLMOVE);
cmd->turning = P_RandomRange(PR_FUZZ, -KART_FULLTURN, KART_FULLTURN);
cmd->throwdir = P_RandomRange(PR_FUZZ, -KART_FULLTURN, KART_FULLTURN);
cmd->buttons = P_RandomRange(PR_FUZZ, 0, 255);
}
// Send leveltime when this tic was generated to the server for control lag calculations.
// Only do this when in a level. Also do this after the hook, so that it can't overwrite this.
cmd->latency = (leveltime & TICCMD_LATENCYMASK);