From 99e50250cfa7292af0c4648e8e3fda81c35c0d10 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 18 Dec 2018 18:05:11 +0000 Subject: [PATCH 1/5] Move some sidemove/forwardmove checks to playsim code rather than have them happen in ticcmd generation. pGetPlayerControlDirection has to die since it was the only other usage of sidemove, and wasn't even relevant anymore anyways. --- src/g_game.c | 31 ++++++------------------------- src/lua_baselib.c | 11 ----------- src/m_cheat.c | 4 ++-- src/p_local.h | 1 - src/p_user.c | 40 ++++++++++++++++++---------------------- 5 files changed, 26 insertions(+), 61 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index ac8e27a3..78804ff2 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1347,11 +1347,13 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) { cmd->angleturn = (INT16)(cmd->angleturn - (angleturn[tspeed] * realtics)); cmd->driftturn = (INT16)(cmd->driftturn - (angleturn[tspeed] * realtics)); + side += sidemove[1]; } else if (turnleft && !(turnright)) { cmd->angleturn = (INT16)(cmd->angleturn + (angleturn[tspeed] * realtics)); cmd->driftturn = (INT16)(cmd->driftturn + (angleturn[tspeed] * realtics)); + side -= sidemove[1]; } if (analogjoystickmove && axis != 0) @@ -1359,6 +1361,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) // JOYAXISRANGE should be 1023 (divide by 1024) cmd->angleturn = (INT16)(cmd->angleturn - (((axis * angleturn[1]) >> 10) * realtics)); // ANALOG! cmd->driftturn = (INT16)(cmd->driftturn - (((axis * angleturn[1]) >> 10) * realtics)); + side += ((axis * sidemove[0]) >> 10); } // Specator mouse turning @@ -1368,20 +1371,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) cmd->driftturn = (INT16)(cmd->driftturn - ((mousex*(encoremode ? -1 : 1)*8) * realtics)); } - // Speed bump strafing - if (!demoplayback && ((player->pflags & PF_FORCESTRAFE) || (player->kartstuff[k_pogospring]))) - { - if (turnright) - side += sidemove[1]; - if (turnleft) - side -= sidemove[1]; - if (analogjoystickmove && axis != 0) - { - // JOYAXISRANGE is supposed to be 1023 (divide by 1024) - side += ((axis * sidemove[0]) >> 10); - } - } - if (player->spectator || objectplacing) // SRB2Kart: spectators need special controls { axis = JoyAxis(AXISMOVE, ssplayer); @@ -1514,7 +1503,8 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) mousex = mousey = mlooky = 0; - if (forward > MAXPLMOVE) + // moved to P_3DMovement + /*if (forward > MAXPLMOVE) forward = MAXPLMOVE; else if (forward < -MAXPLMOVE) forward = -MAXPLMOVE; @@ -1522,16 +1512,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) if (side > MAXPLMOVE) side = MAXPLMOVE; else if (side < -MAXPLMOVE) - side = -MAXPLMOVE; - - // No additional acceleration when moving forward/backward and strafing simultaneously. - // do this AFTER we cap to MAXPLMOVE so people can't find ways to cheese around this. - // SRB2Kart: We don't need this; we WANT bounce strafing to plain stack on top of normal movement. - /*if (!bouncestrafe && forward && side) - { - forward = FixedMul(forward, 3*FRACUNIT/4); - side = FixedMul(side, 3*FRACUNIT/4); - }*/ + side = -MAXPLMOVE;*/ if (forward || side) { diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 4d630d9e..16dc5b85 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -678,16 +678,6 @@ static int lib_pGetPlayerSpinHeight(lua_State *L) return 1; } -static int lib_pGetPlayerControlDirection(lua_State *L) -{ - player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); - //HUDSAFE - if (!player) - return LUA_ErrInvalid(L, "player_t"); - lua_pushinteger(L, P_GetPlayerControlDirection(player)); - return 1; -} - static int lib_pAddPlayerScore(lua_State *L) { player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); @@ -2540,7 +2530,6 @@ static luaL_Reg lib[] = { // p_user {"P_GetPlayerHeight",lib_pGetPlayerHeight}, {"P_GetPlayerSpinHeight",lib_pGetPlayerSpinHeight}, - {"P_GetPlayerControlDirection",lib_pGetPlayerControlDirection}, {"P_AddPlayerScore",lib_pAddPlayerScore}, {"P_PlayerInPain",lib_pPlayerInPain}, {"P_DoPlayerPain",lib_pDoPlayerPain}, diff --git a/src/m_cheat.c b/src/m_cheat.c index 9c53f901..38d8cc7a 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -1130,12 +1130,12 @@ void OP_ObjectplaceMovement(player_t *player) P_TeleportMove(player->mo, player->mo->x+player->mo->momx, player->mo->y+player->mo->momy, player->mo->z); player->mo->momx = player->mo->momy = 0; } - if (cmd->sidemove != 0) + /*if (cmd->sidemove != 0) -- was disabled in practice anyways, since sidemove was suppressed { P_Thrust(player->mo, player->mo->angle-ANGLE_90, (cmd->sidemove*FRACUNIT/MAXPLMOVE)*cv_speed.value); P_TeleportMove(player->mo, player->mo->x+player->mo->momx, player->mo->y+player->mo->momy, player->mo->z); player->mo->momx = player->mo->momy = 0; - } + }*/ if (player->mo->z > player->mo->ceilingz - player->mo->height) player->mo->z = player->mo->ceilingz - player->mo->height; diff --git a/src/p_local.h b/src/p_local.h index ddcfd75e..4884ffe2 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -131,7 +131,6 @@ extern fixed_t t_cam4_dist, t_cam4_height, t_cam4_rotate; fixed_t P_GetPlayerHeight(player_t *player); fixed_t P_GetPlayerSpinHeight(player_t *player); -INT32 P_GetPlayerControlDirection(player_t *player); void P_AddPlayerScore(player_t *player, UINT32 amount); void P_ResetCamera(player_t *player, camera_t *thiscam); boolean P_TryCameraMove(fixed_t x, fixed_t y, camera_t *thiscam); diff --git a/src/p_user.c b/src/p_user.c index 853ceaf0..90cbb2cb 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4509,7 +4509,7 @@ boolean P_AnalogMove(player_t *player) // 1 = pressing in the direction of movement // 2 = pressing in the opposite direction of movement // -INT32 P_GetPlayerControlDirection(player_t *player) +/*INT32 P_GetPlayerControlDirection(player_t *player) { ticcmd_t *cmd = &player->cmd; angle_t controllerdirection, controlplayerdirection; @@ -4584,7 +4584,7 @@ INT32 P_GetPlayerControlDirection(player_t *player) } // Control scheme for 2d levels. -/*static void P_2dMovement(player_t *player) +static void P_2dMovement(player_t *player) { ticcmd_t *cmd; INT32 topspeed, acceleration, thrustfactor; @@ -4794,24 +4794,20 @@ static void P_3dMovement(player_t *player) cmd->forwardmove = cmd->sidemove = 0; if (player->kartstuff[k_sneakertimer]) cmd->forwardmove = 50; - if (player->pflags & PF_GLIDING) - { - if (!player->skidtime) - player->pflags &= ~PF_GLIDING; - else if (player->exiting || mapreset) - { - player->pflags &= ~PF_GLIDING; - P_SetPlayerMobjState(player->mo, S_KART_WALK1); // SRB2kart - was S_PLAY_RUN1 - player->skidtime = 0; - } - } - if (player->pflags & PF_SPINNING && !(player->exiting || mapreset)) - { - player->pflags &= ~PF_SPINNING; - P_SetPlayerMobjState(player->mo, S_KART_STND1); // SRB2kart - was S_PLAY_STND - } } + if (cmd->forwardmove > MAXPLMOVE) + cmd->forwardmove = MAXPLMOVE; + else if (cmd->forwardmove < -MAXPLMOVE) + cmd->forwardmove = -MAXPLMOVE; + + if (!(player->pflags & PF_FORCESTRAFE) && !player->kartstuff[k_pogospring]) + cmd->sidemove = 0; + else if (cmd->sidemove > MAXPLMOVE) + cmd->sidemove = MAXPLMOVE; + else if (cmd->sidemove < -MAXPLMOVE) + cmd->sidemove = -MAXPLMOVE; + if (analogmove) { movepushangle = (cmd->angleturn<<16 /* not FRACBITS */); @@ -4819,9 +4815,7 @@ static void P_3dMovement(player_t *player) else { if (player->kartstuff[k_drift] != 0) - { movepushangle = player->mo->angle-(ANGLE_45/5)*player->kartstuff[k_drift]; - } else movepushangle = player->mo->angle; } @@ -5039,10 +5033,10 @@ static void P_SpectatorMovement(player_t *player) // Quake-style flying spectators :D player->mo->momz += FixedMul(cmd->forwardmove*(mapheaderinfo[gamemap-1]->mobj_scale), AIMINGTOSLOPE(player->aiming)); } - if (cmd->sidemove != 0) + /*if (cmd->sidemove != 0) -- was disabled in practice anyways, since sidemove was suppressed { P_Thrust(player->mo, player->mo->angle-ANGLE_90, cmd->sidemove*(mapheaderinfo[gamemap-1]->mobj_scale)); - } + }*/ } // @@ -7032,6 +7026,7 @@ static void P_MovePlayer(player_t *player) //ANALOG CONTROL// ////////////////// +#if 0 // This really looks like it should be moved to P_3dMovement. -Red if (P_AnalogMove(player) && (cmd->forwardmove != 0 || cmd->sidemove != 0) && !player->climbing && !twodlevel && !(player->mo->flags2 & MF2_TWOD)) @@ -7088,6 +7083,7 @@ static void P_MovePlayer(player_t *player) else if (player == &players[fourthdisplayplayer]) localangle4 = player->mo->angle; } +#endif /////////////////////////// //BOMB SHIELD ACTIVATION,// From 0aabcd25033c7c7580ec679b21b91e272cfb3537 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 18 Dec 2018 19:40:38 +0000 Subject: [PATCH 2/5] lj dm'd me so here's a second, more sensible crack at it --- src/d_clisrv.c | 46 ++++++++++++++++++++++++++++++++++++++++++++-- src/g_game.c | 5 ++--- src/p_user.c | 9 --------- 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index eafc1283..840c20e9 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -3973,10 +3973,10 @@ FILESTAMP || netcmds[maketic%BACKUPTICS][netconsole].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][netconsole].sidemove < -MAXPLMOVE) { XBOXSTATIC char buf[2]; - CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), netconsole); + CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); //D_Clearticcmd(k); - buf[0] = (char)netconsole; + buf[0] = (char)node; buf[1] = KICK_MSG_CON_FAIL; SendNetXCmd(XD_KICK, &buf, 2); break; @@ -3990,6 +3990,20 @@ FILESTAMP { G_MoveTiccmd(&netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]], &netbuffer->u.client2pak.cmd2, 1); + + // more "speed hacks" + if (netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].forwardmove < -MAXPLMOVE + || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].sidemove < -MAXPLMOVE) + { + XBOXSTATIC char buf[2]; + CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); + //D_Clearticcmd(k); + + buf[0] = (char)node; + buf[1] = KICK_MSG_CON_FAIL; + SendNetXCmd(XD_KICK, &buf, 2); + break; + } } if (((netbuffer->packettype == PT_CLIENT3CMD || netbuffer->packettype == PT_CLIENT3MIS) @@ -3998,6 +4012,20 @@ FILESTAMP { G_MoveTiccmd(&netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]], &netbuffer->u.client3pak.cmd3, 1); + + // more "speed hacks" + if (netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].forwardmove < -MAXPLMOVE + || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].sidemove < -MAXPLMOVE) + { + XBOXSTATIC char buf[2]; + CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); + //D_Clearticcmd(k); + + buf[0] = (char)node; + buf[1] = KICK_MSG_CON_FAIL; + SendNetXCmd(XD_KICK, &buf, 2); + break; + } } if ((netbuffer->packettype == PT_CLIENT4CMD || netbuffer->packettype == PT_CLIENT4MIS) @@ -4005,6 +4033,20 @@ FILESTAMP { G_MoveTiccmd(&netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]], &netbuffer->u.client4pak.cmd4, 1); + + // more "speed hacks" + if (netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].forwardmove < -MAXPLMOVE + || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].sidemove < -MAXPLMOVE) + { + XBOXSTATIC char buf[2]; + CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); + //D_Clearticcmd(k); + + buf[0] = (char)node; + buf[1] = KICK_MSG_CON_FAIL; + SendNetXCmd(XD_KICK, &buf, 2); + break; + } } // A delay before we check resynching diff --git a/src/g_game.c b/src/g_game.c index 78804ff2..f700554d 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1503,8 +1503,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) mousex = mousey = mlooky = 0; - // moved to P_3DMovement - /*if (forward > MAXPLMOVE) + if (forward > MAXPLMOVE) forward = MAXPLMOVE; else if (forward < -MAXPLMOVE) forward = -MAXPLMOVE; @@ -1512,7 +1511,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) if (side > MAXPLMOVE) side = MAXPLMOVE; else if (side < -MAXPLMOVE) - side = -MAXPLMOVE;*/ + side = -MAXPLMOVE; if (forward || side) { diff --git a/src/p_user.c b/src/p_user.c index 90cbb2cb..bf1b6566 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4796,17 +4796,8 @@ static void P_3dMovement(player_t *player) cmd->forwardmove = 50; } - if (cmd->forwardmove > MAXPLMOVE) - cmd->forwardmove = MAXPLMOVE; - else if (cmd->forwardmove < -MAXPLMOVE) - cmd->forwardmove = -MAXPLMOVE; - if (!(player->pflags & PF_FORCESTRAFE) && !player->kartstuff[k_pogospring]) cmd->sidemove = 0; - else if (cmd->sidemove > MAXPLMOVE) - cmd->sidemove = MAXPLMOVE; - else if (cmd->sidemove < -MAXPLMOVE) - cmd->sidemove = -MAXPLMOVE; if (analogmove) { From bab444e42cb16fe8c1e79dab908ba2f2cfe7015f Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 18 Dec 2018 20:13:11 +0000 Subject: [PATCH 3/5] woops, kicks are player-based, aren't they --- src/d_clisrv.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 840c20e9..c7ef8ec9 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -3976,7 +3976,7 @@ FILESTAMP CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); //D_Clearticcmd(k); - buf[0] = (char)node; + buf[0] = (char)netconsole; buf[1] = KICK_MSG_CON_FAIL; SendNetXCmd(XD_KICK, &buf, 2); break; @@ -3999,7 +3999,7 @@ FILESTAMP CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); //D_Clearticcmd(k); - buf[0] = (char)node; + buf[0] = (char)nodetoplayer2[node]; buf[1] = KICK_MSG_CON_FAIL; SendNetXCmd(XD_KICK, &buf, 2); break; @@ -4021,7 +4021,7 @@ FILESTAMP CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); //D_Clearticcmd(k); - buf[0] = (char)node; + buf[0] = (char)nodetoplayer3[node]; buf[1] = KICK_MSG_CON_FAIL; SendNetXCmd(XD_KICK, &buf, 2); break; @@ -4042,7 +4042,7 @@ FILESTAMP CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); //D_Clearticcmd(k); - buf[0] = (char)node; + buf[0] = (char)nodetoplayer4[node]; buf[1] = KICK_MSG_CON_FAIL; SendNetXCmd(XD_KICK, &buf, 2); break; From f2c98b3639491f8f4f121e069cd76bb5d10063d0 Mon Sep 17 00:00:00 2001 From: fickleheart Date: Tue, 15 Jan 2019 21:09:53 -0600 Subject: [PATCH 4/5] Add driftturn checks to other players' movement (Can we make this into a function or something?) --- src/d_clisrv.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index b6b17833..b4bf9f9c 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -4006,7 +4006,8 @@ FILESTAMP // more "speed hacks" if (netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].forwardmove < -MAXPLMOVE - || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].sidemove < -MAXPLMOVE) + || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].sidemove < -MAXPLMOVE || + netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].driftturn > KART_FULLTURN || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].driftturn < -KART_FULLTURN) { XBOXSTATIC char buf[2]; CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); @@ -4028,7 +4029,8 @@ FILESTAMP // more "speed hacks" if (netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].forwardmove < -MAXPLMOVE - || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].sidemove < -MAXPLMOVE) + || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].sidemove < -MAXPLMOVE || + netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].driftturn > KART_FULLTURN || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].driftturn < -KART_FULLTURN) { XBOXSTATIC char buf[2]; CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); @@ -4049,7 +4051,8 @@ FILESTAMP // more "speed hacks" if (netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].forwardmove < -MAXPLMOVE - || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].sidemove < -MAXPLMOVE) + || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].sidemove < -MAXPLMOVE || + netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].driftturn > KART_FULLTURN || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].driftturn < -KART_FULLTURN) { XBOXSTATIC char buf[2]; CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); From 86433d53cff303ed652be443b91ee8564bc9df0c Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 15 Jan 2019 22:34:41 -0500 Subject: [PATCH 5/5] Turn speed hack check into a function --- src/d_clisrv.c | 81 +++++++++++++++++++------------------------------- 1 file changed, 30 insertions(+), 51 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index b4bf9f9c..3dc641cd 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -3887,6 +3887,32 @@ static void HandlePacketFromAwayNode(SINT8 node) #undef SERVERONLY } +/** Checks ticcmd for "speed hacks" + * + * \param p Which player + * \return True if player is hacking + * \sa HandlePacketFromPlayer + * + */ +static boolean CheckForSpeedHacks(UINT8 p) +{ + if (netcmds[maketic%BACKUPTICS][p].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][p].forwardmove < -MAXPLMOVE + || netcmds[maketic%BACKUPTICS][p].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][p].sidemove < -MAXPLMOVE + || netcmds[maketic%BACKUPTICS][p].driftturn > KART_FULLTURN || netcmds[maketic%BACKUPTICS][p].driftturn < -KART_FULLTURN) + { + XBOXSTATIC char buf[2]; + CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), playernode[p]); + //D_Clearticcmd(k); + + buf[0] = (char)p; + buf[1] = KICK_MSG_CON_FAIL; + SendNetXCmd(XD_KICK, &buf, 2); + return true; + } + + return false; +} + /** Handles a packet received from a node that is in game * * \param node The packet sender @@ -3981,19 +4007,8 @@ FILESTAMP G_MoveTiccmd(&netcmds[maketic%BACKUPTICS][netconsole], &netbuffer->u.clientpak.cmd, 1); // Check ticcmd for "speed hacks" - if (netcmds[maketic%BACKUPTICS][netconsole].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][netconsole].forwardmove < -MAXPLMOVE - || netcmds[maketic%BACKUPTICS][netconsole].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][netconsole].sidemove < -MAXPLMOVE || - netcmds[maketic%BACKUPTICS][netconsole].driftturn > KART_FULLTURN || netcmds[maketic%BACKUPTICS][netconsole].driftturn < -KART_FULLTURN) - { - XBOXSTATIC char buf[2]; - CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); - //D_Clearticcmd(k); - - buf[0] = (char)netconsole; - buf[1] = KICK_MSG_CON_FAIL; - SendNetXCmd(XD_KICK, &buf, 2); + if (CheckForSpeedHacks((UINT8)netconsole)) break; - } // Splitscreen cmd if (((netbuffer->packettype == PT_CLIENT2CMD || netbuffer->packettype == PT_CLIENT2MIS) @@ -4004,20 +4019,8 @@ FILESTAMP G_MoveTiccmd(&netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]], &netbuffer->u.client2pak.cmd2, 1); - // more "speed hacks" - if (netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].forwardmove < -MAXPLMOVE - || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].sidemove < -MAXPLMOVE || - netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].driftturn > KART_FULLTURN || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer2[node]].driftturn < -KART_FULLTURN) - { - XBOXSTATIC char buf[2]; - CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); - //D_Clearticcmd(k); - - buf[0] = (char)nodetoplayer2[node]; - buf[1] = KICK_MSG_CON_FAIL; - SendNetXCmd(XD_KICK, &buf, 2); + if (CheckForSpeedHacks((UINT8)nodetoplayer2[node])) break; - } } if (((netbuffer->packettype == PT_CLIENT3CMD || netbuffer->packettype == PT_CLIENT3MIS) @@ -4027,20 +4030,8 @@ FILESTAMP G_MoveTiccmd(&netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]], &netbuffer->u.client3pak.cmd3, 1); - // more "speed hacks" - if (netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].forwardmove < -MAXPLMOVE - || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].sidemove < -MAXPLMOVE || - netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].driftturn > KART_FULLTURN || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer3[node]].driftturn < -KART_FULLTURN) - { - XBOXSTATIC char buf[2]; - CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); - //D_Clearticcmd(k); - - buf[0] = (char)nodetoplayer3[node]; - buf[1] = KICK_MSG_CON_FAIL; - SendNetXCmd(XD_KICK, &buf, 2); + if (CheckForSpeedHacks((UINT8)nodetoplayer3[node])) break; - } } if ((netbuffer->packettype == PT_CLIENT4CMD || netbuffer->packettype == PT_CLIENT4MIS) @@ -4049,20 +4040,8 @@ FILESTAMP G_MoveTiccmd(&netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]], &netbuffer->u.client4pak.cmd4, 1); - // more "speed hacks" - if (netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].forwardmove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].forwardmove < -MAXPLMOVE - || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].sidemove > MAXPLMOVE || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].sidemove < -MAXPLMOVE || - netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].driftturn > KART_FULLTURN || netcmds[maketic%BACKUPTICS][(UINT8)nodetoplayer4[node]].driftturn < -KART_FULLTURN) - { - XBOXSTATIC char buf[2]; - CONS_Alert(CONS_WARNING, M_GetText("Illegal movement value received from node %d\n"), node); - //D_Clearticcmd(k); - - buf[0] = (char)nodetoplayer4[node]; - buf[1] = KICK_MSG_CON_FAIL; - SendNetXCmd(XD_KICK, &buf, 2); + if (CheckForSpeedHacks((UINT8)nodetoplayer4[node])) break; - } } // A delay before we check resynching