From d5bddafd0ff77caf7049e0c7aea152c8a16c0b66 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 ac8e27a37..78804ff29 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 4d630d9e3..16dc5b85b 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 9c53f9011..38d8cc7a9 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 ddcfd75e8..4884ffe2e 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 853ceaf01..90cbb2cb9 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 28a87242f88bc8e624bff2bdf041f0abffdb115b 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 eafc12833..840c20e98 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 78804ff29..f700554d5 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 90cbb2cb9..bf1b65663 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 c32ef12082316ad0d8e03b3f540513fdb21cb422 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 840c20e98..c7ef8ec95 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 26a014dc11fc0f9bfd1bf1d5e4cff0f70c22330a 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 b6b17833d..b4bf9f9c9 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 cd312e73f5fb6ebd63147a8e71e40cac414930f0 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 b4bf9f9c9..3dc641cdd 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