Skip to content

Commit 39aab71

Browse files
committed
added cl_antiping_shadow
1 parent 5ff9426 commit 39aab71

File tree

3 files changed

+38
-5
lines changed

3 files changed

+38
-5
lines changed

src/engine/shared/config_variables.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ MACRO_CONFIG_INT(ClAntiPingWeapons, cl_antiping_weapons, 1, 0, 1, CFGFLAG_CLIENT
2424
MACRO_CONFIG_INT(ClAntiPingSmooth, cl_antiping_smooth, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Make the prediction of other player's movement smoother")
2525
MACRO_CONFIG_INT(ClAntiPingGunfire, cl_antiping_gunfire, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Predict gunfire and show predicted weapon physics (with cl_antiping_grenade 1 and cl_antiping_weapons 1)")
2626
MACRO_CONFIG_INT(ClAntiPingPreInput, cl_antiping_preinput, 1, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Predict other players using preinputs for more accurate input prediction")
27+
MACRO_CONFIG_INT(ClAntipingShadow, cl_antiping_shadow, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Show predicted shadow tee (0 = off, 1 = on)")
28+
MACRO_CONFIG_INT(ClAntipingShadowAlpha, cl_antiping_shadow_alpha, 75, 0, 100, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Alpha % of antiping ghost")
2729
MACRO_CONFIG_INT(ClPredictionMargin, cl_prediction_margin, 10, 1, 300, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Prediction margin in ms (adds latency, can reduce lag from ping jumps)")
2830
MACRO_CONFIG_INT(ClSubTickAiming, cl_sub_tick_aiming, 0, 0, 1, CFGFLAG_CLIENT | CFGFLAG_SAVE, "Send aiming data at sub-tick accuracy")
2931
#if defined(CONF_PLATFORM_ANDROID)

src/game/client/components/nameplates.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,15 @@ void CNamePlates::OnRender()
881881
// Only render name plates for active characters
882882
if(GameClient()->m_Snap.m_aCharacters[i].m_Active)
883883
{
884-
const vec2 RenderPos = GameClient()->m_aClients[i].m_RenderPos;
884+
vec2 RenderPos = GameClient()->m_aClients[i].m_RenderPos;
885+
886+
bool Local = GameClient()->m_Snap.m_LocalClientId == i;
887+
888+
if (!Local && g_Config.m_ClAntipingShadow)
889+
RenderPos = mix(
890+
vec2(GameClient()->m_Snap.m_aCharacters[i].m_Prev.m_X, GameClient()->m_Snap.m_aCharacters[i].m_Prev.m_Y),
891+
vec2(GameClient()->m_Snap.m_aCharacters[i].m_Cur.m_X, GameClient()->m_Snap.m_aCharacters[i].m_Cur.m_Y),
892+
Client()->IntraGameTick(g_Config.m_ClDummy));
885893
RenderNamePlateGame(RenderPos, pInfo, 1.0f);
886894
}
887895
}

src/game/client/components/players.cpp

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,11 @@ void CPlayers::RenderHook(
472472
if(ClientId >= 0)
473473
Intra = GameClient()->m_aClients[ClientId].m_IsPredicted ? Client()->PredIntraGameTick(g_Config.m_ClDummy) : Client()->IntraGameTick(g_Config.m_ClDummy);
474474

475+
bool Local = GameClient()->m_Snap.m_LocalClientId == ClientId;
476+
477+
if (!Local && g_Config.m_ClAntipingShadow)
478+
Intra = Client()->IntraGameTick(g_Config.m_ClDummy);
479+
475480
bool OtherTeam = GameClient()->IsOtherTeam(ClientId);
476481
float Alpha = (OtherTeam || ClientId < 0) ? g_Config.m_ClShowOthersAlpha / 100.0f : 1.0f;
477482
if(ClientId == -2) // ghost
@@ -480,7 +485,7 @@ void CPlayers::RenderHook(
480485
RenderInfo.m_Size = 64.0f;
481486

482487
vec2 Position;
483-
if(in_range(ClientId, MAX_CLIENTS - 1))
488+
if(in_range(ClientId, MAX_CLIENTS - 1) && !(!Local && g_Config.m_ClAntipingShadow))
484489
Position = GameClient()->m_aClients[ClientId].m_RenderPos;
485490
else
486491
Position = mix(vec2(Prev.m_X, Prev.m_Y), vec2(Player.m_X, Player.m_Y), Intra);
@@ -493,7 +498,7 @@ void CPlayers::RenderHook(
493498
vec2 Pos = Position;
494499
vec2 HookPos;
495500

496-
if(in_range(pPlayerChar->m_HookedPlayer, MAX_CLIENTS - 1))
501+
if(in_range(pPlayerChar->m_HookedPlayer, MAX_CLIENTS - 1) && !(GameClient()->m_Snap.m_LocalClientId != pPlayerChar->m_HookedPlayer && g_Config.m_ClAntipingShadow))
497502
HookPos = GameClient()->m_aClients[pPlayerChar->m_HookedPlayer].m_RenderPos;
498503
else
499504
HookPos = mix(vec2(Prev.m_HookX, Prev.m_HookY), vec2(Player.m_HookX, Player.m_HookY), Intra);
@@ -586,6 +591,14 @@ void CPlayers::RenderPlayer(
586591
Position = mix(vec2(Prev.m_X, Prev.m_Y), vec2(Player.m_X, Player.m_Y), Intra);
587592
vec2 Vel = mix(vec2(Prev.m_VelX / 256.0f, Prev.m_VelY / 256.0f), vec2(Player.m_VelX / 256.0f, Player.m_VelY / 256.0f), Intra);
588593

594+
vec2 Pred_Position = Position;
595+
596+
if (!Local && g_Config.m_ClAntipingShadow)
597+
Position = mix(
598+
vec2(GameClient()->m_Snap.m_aCharacters[ClientId].m_Prev.m_X, GameClient()->m_Snap.m_aCharacters[ClientId].m_Prev.m_Y),
599+
vec2(GameClient()->m_Snap.m_aCharacters[ClientId].m_Cur.m_X, GameClient()->m_Snap.m_aCharacters[ClientId].m_Cur.m_Y),
600+
Client()->IntraGameTick(g_Config.m_ClDummy));
601+
589602
GameClient()->m_Flow.Add(Position, Vel * 100.0f, 10.0f);
590603

591604
RenderInfo.m_GotAirJump = Player.m_Jumped & 2 ? false : true;
@@ -832,7 +845,13 @@ void CPlayers::RenderPlayer(
832845
RenderTools()->RenderTee(&State, &RenderInfo, Player.m_Emote, Direction, ShadowPosition, g_Config.m_ClUnpredictedShadowAlpha / 100.f); // render ghost
833846
}
834847

835-
RenderTools()->RenderTee(&State, &RenderInfo, Player.m_Emote, Direction, Position, Alpha);
848+
if(!Local && g_Config.m_ClAntipingShadow)
849+
{
850+
RenderTools()->RenderTee(&State, &RenderInfo, Player.m_Emote, Direction, Pred_Position, g_Config.m_ClAntipingShadowAlpha*0.01); // render ghost
851+
RenderTools()->RenderTee(&State, &RenderInfo, Player.m_Emote, Direction, Position, Alpha);
852+
}
853+
else
854+
RenderTools()->RenderTee(&State, &RenderInfo, Player.m_Emote, Direction, Position, Alpha);
836855

837856
float TeeAnimScale, TeeBaseSize;
838857
CRenderTools::GetRenderTeeAnimScaleAndBaseSize(&RenderInfo, TeeAnimScale, TeeBaseSize);
@@ -990,7 +1009,11 @@ void CPlayers::OnRender()
9901009
{
9911010
continue;
9921011
}
993-
RenderHook(&GameClient()->m_aClients[ClientId].m_RenderPrev, &GameClient()->m_aClients[ClientId].m_RenderCur, &aRenderInfo[ClientId], ClientId);
1012+
1013+
if (g_Config.m_ClAntipingShadow)
1014+
RenderHook(&GameClient()->m_Snap.m_aCharacters[ClientId].m_Prev, &GameClient()->m_Snap.m_aCharacters[ClientId].m_Cur, &aRenderInfo[ClientId], ClientId, Client()->IntraGameTick(g_Config.m_ClDummy));
1015+
else
1016+
RenderHook(&GameClient()->m_aClients[ClientId].m_RenderPrev, &GameClient()->m_aClients[ClientId].m_RenderCur, &aRenderInfo[ClientId], ClientId);
9941017
}
9951018
if(LocalClientId != -1 && IsPlayerInfoAvailable(LocalClientId))
9961019
{

0 commit comments

Comments
 (0)