diff --git a/Amalgam/src/Features/Aimbot/AimbotHitscan/AimbotHitscan.cpp b/Amalgam/src/Features/Aimbot/AimbotHitscan/AimbotHitscan.cpp index 4b1a6195..bfea40bf 100644 --- a/Amalgam/src/Features/Aimbot/AimbotHitscan/AimbotHitscan.cpp +++ b/Amalgam/src/Features/Aimbot/AimbotHitscan/AimbotHitscan.cpp @@ -843,14 +843,14 @@ void CAimbotHitscan::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pC { if (Vars::Visuals::Bullet::BulletTracer.Value) { - G::BulletsStorage.clear(); - G::BulletsStorage.push_back({ {pLocal->GetShootPos(), target.m_vPos}, I::GlobalVars->curtime + 5.f, Vars::Colors::BulletTracer.Value, true }); + G::LineStorage.clear(); + G::LineStorage.push_back({ {pLocal->GetShootPos(), target.m_vPos}, I::GlobalVars->curtime + 5.f, Vars::Colors::BulletTracer.Value, true }); } if (Vars::Visuals::Hitbox::ShowHitboxes.Value) { - G::BoxesStorage.clear(); + G::BoxStorage.clear(); auto vBoxes = F::Visuals.GetHitboxes(target.m_Tick.BoneMatrix.aBones, target.m_pEntity->As()); - G::BoxesStorage.insert(G::BoxesStorage.end(), vBoxes.begin(), vBoxes.end()); + G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end()); } } } diff --git a/Amalgam/src/Features/Aimbot/AimbotMelee/AimbotMelee.cpp b/Amalgam/src/Features/Aimbot/AimbotMelee/AimbotMelee.cpp index 863fb21c..77270975 100644 --- a/Amalgam/src/Features/Aimbot/AimbotMelee/AimbotMelee.cpp +++ b/Amalgam/src/Features/Aimbot/AimbotMelee/AimbotMelee.cpp @@ -194,10 +194,10 @@ void CAimbotMelee::SimulatePlayers(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, st } else { - G::LinesStorage.clear(); - G::LinesStorage.push_back({ localStorage.PredictionLines, I::GlobalVars->curtime + 5.f, Vars::Colors::ProjectileColor.Value }); + G::PathStorage.clear(); + G::PathStorage.push_back({ localStorage.PredictionLines, I::GlobalVars->curtime + 5.f, Vars::Colors::ProjectileColor.Value }); for (auto& target : targets) - G::LinesStorage.push_back({ targetStorage[target.m_pEntity].PredictionLines, I::GlobalVars->curtime + 5.f, Vars::Colors::PredictionColor.Value }); + G::PathStorage.push_back({ targetStorage[target.m_pEntity].PredictionLines, I::GlobalVars->curtime + 5.f, Vars::Colors::PredictionColor.Value }); } } @@ -517,14 +517,14 @@ void CAimbotMelee::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd if (Vars::Visuals::Bullet::BulletTracer.Value) { - G::BulletsStorage.clear(); - G::BulletsStorage.push_back({ {vEyePos, target.m_vPos}, I::GlobalVars->curtime + 5.f, Vars::Colors::BulletTracer.Value, true }); + G::LineStorage.clear(); + G::LineStorage.push_back({ {vEyePos, target.m_vPos}, I::GlobalVars->curtime + 5.f, Vars::Colors::BulletTracer.Value, true }); } if (Vars::Visuals::Hitbox::ShowHitboxes.Value) { - G::BoxesStorage.clear(); + G::BoxStorage.clear(); auto vBoxes = F::Visuals.GetHitboxes(target.m_Tick.BoneMatrix.aBones, target.m_pEntity->As()); - G::BoxesStorage.insert(G::BoxesStorage.end(), vBoxes.begin(), vBoxes.end()); + G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end()); } } if (Vars::Visuals::Simulation::SwingLines.Value && pCmd->buttons & IN_ATTACK && pWeapon->m_flSmackTime() < 0.f) @@ -532,9 +532,9 @@ void CAimbotMelee::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd const bool bAlwaysDraw = !Vars::Aimbot::General::AutoShoot.Value || Vars::Debug::Info.Value; if (!bAlwaysDraw) { - G::LinesStorage.clear(); - G::LinesStorage.push_back({ simLines[pLocal], I::GlobalVars->curtime + 5.f, Vars::Colors::ProjectileColor.Value }); - G::LinesStorage.push_back({ simLines[target.m_pEntity], I::GlobalVars->curtime + 5.f, Vars::Colors::PredictionColor.Value }); + G::PathStorage.clear(); + G::PathStorage.push_back({ simLines[pLocal], I::GlobalVars->curtime + 5.f, Vars::Colors::ProjectileColor.Value }); + G::PathStorage.push_back({ simLines[target.m_pEntity], I::GlobalVars->curtime + 5.f, Vars::Colors::PredictionColor.Value }); } } diff --git a/Amalgam/src/Features/Aimbot/AimbotProjectile/AimbotProjectile.cpp b/Amalgam/src/Features/Aimbot/AimbotProjectile/AimbotProjectile.cpp index 227ffd04..636d4d82 100644 --- a/Amalgam/src/Features/Aimbot/AimbotProjectile/AimbotProjectile.cpp +++ b/Amalgam/src/Features/Aimbot/AimbotProjectile/AimbotProjectile.cpp @@ -593,8 +593,8 @@ bool CAimbotProjectile::TestAngle(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, Tar Vec3 vForward = vOld - vNew; vForward.Normalize(); const Vec3 vPos = trace.endpos + vForward * 16 + vOriginal - target.m_vPos; - //G::BulletsStorage.clear(); - //G::BulletsStorage.push_back({ {pLocal->GetShootPos(), vPos}, I::GlobalVars->curtime + 5.f, Vars::Colors::PredictionColor.Value }); + //G::LineStorage.clear(); + //G::LineStorage.push_back({ {pLocal->GetShootPos(), vPos}, I::GlobalVars->curtime + 5.f, Vars::Colors::PredictionColor.Value }); float closestDist; int closestId = -1; for (int i = 0; i < pSet->numhitboxes; ++i) @@ -968,24 +968,24 @@ bool CAimbotProjectile::RunMain(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser { if (Vars::Visuals::Simulation::Enabled.Value) { - G::LinesStorage.clear(); - G::LinesStorage.push_back({ vMoveLines, Vars::Visuals::Simulation::Timed.Value ? -int(vMoveLines.size()) : I::GlobalVars->curtime + 5.f, /*pWeapon->IsInReload() ? Color_t(0, 0, 0, 255) :*/ Vars::Colors::PredictionColor.Value}); + G::PathStorage.clear(); + G::PathStorage.push_back({ vMoveLines, Vars::Visuals::Simulation::Timed.Value ? -int(vMoveLines.size()) : I::GlobalVars->curtime + 5.f, /*pWeapon->IsInReload() ? Color_t(0, 0, 0, 255) :*/ Vars::Colors::PredictionColor.Value}); if (G::IsAttacking) - G::LinesStorage.push_back({ vProjLines, Vars::Visuals::Simulation::Timed.Value ? -int(vProjLines.size()) - TIME_TO_TICKS(F::Backtrack.GetReal()) : I::GlobalVars->curtime + 5.f, pWeapon->IsInReload() ? Color_t(0, 0, 0, 255) : Vars::Colors::ProjectileColor.Value }); + G::PathStorage.push_back({ vProjLines, Vars::Visuals::Simulation::Timed.Value ? -int(vProjLines.size()) - TIME_TO_TICKS(F::Backtrack.GetReal()) : I::GlobalVars->curtime + 5.f, pWeapon->IsInReload() ? Color_t(0, 0, 0, 255) : Vars::Colors::ProjectileColor.Value }); } if (Vars::Visuals::Hitbox::ShowHitboxes.Value) { - G::BoxesStorage.clear(); - //G::BoxesStorage.insert(G::BoxesStorage.end(), vBoxes.begin(), vBoxes.end()); + G::BoxStorage.clear(); + //G::BoxStorage.insert(G::BoxStorage.end(), vBoxes.begin(), vBoxes.end()); for (auto& tBox : vBoxes) { if (pWeapon->IsInReload()) tBox.m_colorEdge.r = tBox.m_colorFace.r = tBox.m_colorEdge.g = tBox.m_colorFace.g = tBox.m_colorEdge.b = tBox.m_colorFace.b = 0; - G::BoxesStorage.push_back(tBox); + G::BoxStorage.push_back(tBox); } } //if (Vars::Visuals::Simulation::Enabled.Value || Vars::Visuals::Hitbox::ShowHitboxes.Value) - // G::BulletsStorage.clear(); + // G::LineStorage.clear(); } if (!pWeapon->IsInReload()) diff --git a/Amalgam/src/Features/Aimbot/AutoRocketJump/AutoRocketJump.cpp b/Amalgam/src/Features/Aimbot/AutoRocketJump/AutoRocketJump.cpp index 16026813..2a6c374c 100644 --- a/Amalgam/src/Features/Aimbot/AutoRocketJump/AutoRocketJump.cpp +++ b/Amalgam/src/Features/Aimbot/AutoRocketJump/AutoRocketJump.cpp @@ -101,10 +101,10 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p SDK::Output("Auto jump", std::format("Ticks to hit: {} ({})", iDelay, n).c_str(), { 255, 0, 0, 255 }, Vars::Debug::Logging.Value); if (Vars::Debug::Info.Value) { - G::BulletsStorage.clear(); G::BoxesStorage.clear(); - G::BulletsStorage.push_back({ { vOriginal, trace.endpos }, I::GlobalVars->curtime + 5.f, {}, true}); + G::LineStorage.clear(); G::BoxStorage.clear(); + G::LineStorage.push_back({ { vOriginal, trace.endpos }, I::GlobalVars->curtime + 5.f, {}, true}); Vec3 angles; Math::VectorAngles(trace.plane.normal, angles); - G::BoxesStorage.push_back({ trace.endpos, { -1.f, -1.f, -1.f }, { 1.f, 1.f, 1.f }, angles, I::GlobalVars->curtime + 5.f, {}, { 0, 0, 0, 0 }, true }); + G::BoxStorage.push_back({ trace.endpos, { -1.f, -1.f, -1.f }, { 1.f, 1.f, 1.f }, angles, I::GlobalVars->curtime + 5.f, {}, { 0, 0, 0, 0 }, true }); } } diff --git a/Amalgam/src/Features/ImGui/Menu/Menu.cpp b/Amalgam/src/Features/ImGui/Menu/Menu.cpp index 1ca28292..7c365333 100644 --- a/Amalgam/src/Features/ImGui/Menu/Menu.cpp +++ b/Amalgam/src/Features/ImGui/Menu/Menu.cpp @@ -1278,6 +1278,8 @@ void CMenu::MenuSettings() FToggle("Debug logging", Vars::Debug::Logging, FToggle_Middle); FToggle("Show server hitboxes", Vars::Debug::ServerHitbox); HelpMarker("Only localhost servers"); FToggle("Anti aim lines", Vars::Debug::AntiAimLines, FToggle_Middle); + FToggle("Visualize traces", Vars::Debug::VisualizeTraces); + FToggle("Visualize trace hits", Vars::Debug::VisualizeTraceHits, FToggle_Middle); } EndSection(); if (Section("Extra")) { diff --git a/Amalgam/src/Features/Misc/Misc.cpp b/Amalgam/src/Features/Misc/Misc.cpp index 40258b74..3adda6ac 100644 --- a/Amalgam/src/Features/Misc/Misc.cpp +++ b/Amalgam/src/Features/Misc/Misc.cpp @@ -479,9 +479,9 @@ void CMisc::Event(IGameEvent* pEvent, uint32_t uHash) F::Backtrack.flWishInterp = 0.f; [[fallthrough]]; case FNV1A::Hash32Const("teamplay_round_start"): - G::BulletsStorage.clear(); - G::BoxesStorage.clear(); - G::LinesStorage.clear(); + G::LineStorage.clear(); + G::BoxStorage.clear(); + G::PathStorage.clear(); } } diff --git a/Amalgam/src/Features/Simulation/MovementSimulation/MovementSimulation.cpp b/Amalgam/src/Features/Simulation/MovementSimulation/MovementSimulation.cpp index c95f7023..691fa389 100644 --- a/Amalgam/src/Features/Simulation/MovementSimulation/MovementSimulation.cpp +++ b/Amalgam/src/Features/Simulation/MovementSimulation/MovementSimulation.cpp @@ -382,7 +382,7 @@ void CMovementSimulation::Store() */ } - //G::BulletsStorage.push_back({ { tRecord.m_vOrigin, tRecord.m_vOrigin + tRecord.m_vDirection }, I::GlobalVars->curtime + 0.5f, bSet ? Color_t(SDK::RandomInt(200, 255), SDK::RandomInt(200, 255), SDK::RandomInt(200, 255), 255) : Color_t(0, 0, 0, 255) }); + //G::LineStorage.push_back({ { tRecord.m_vOrigin, tRecord.m_vOrigin + tRecord.m_vDirection }, I::GlobalVars->curtime + 0.5f, bSet ? Color_t(SDK::RandomInt(200, 255), SDK::RandomInt(200, 255), SDK::RandomInt(200, 255), 255) : Color_t(0, 0, 0, 255) }); } @@ -419,7 +419,7 @@ void CMovementSimulation::Store() bool CMovementSimulation::Initialize(CBaseEntity* pEntity, PlayerStorage& playerStorageOut, bool useHitchance, bool cancelStrafe) { - G::BulletsStorage.clear(); + G::LineStorage.clear(); if (!pEntity || !pEntity->IsPlayer() || !pEntity->As()->IsAlive()) { playerStorageOut.m_bInitFailed = playerStorageOut.m_bFailed = true; @@ -695,7 +695,7 @@ void CMovementSimulation::RunTick(PlayerStorage& playerStorage, bool bLine) Vec3 v1 = playerStorage.m_MoveData.m_vecAbsOrigin; Vec3 v2 = v1 + (vMove.IsZero() ? Vec3(0, 0, 1) : Math::RotatePoint(vMove.GetNorm(), {}, { 0, playerStorage.m_MoveData.m_vecViewAngles.y, 0 })) * Vars::Visuals::Simulation::SeparatorLength.Value; - G::BulletsStorage.push_back({ { v1, v2 }, I::GlobalVars->curtime + 5.f, Color_t(SDK::RandomInt(0, 255), SDK::RandomInt(0, 255), SDK::RandomInt(0, 255), 255) }); + G::LineStorage.push_back({ { v1, v2 }, I::GlobalVars->curtime + 5.f, Color_t(SDK::RandomInt(0, 255), SDK::RandomInt(0, 255), SDK::RandomInt(0, 255), 255) }); } */ diff --git a/Amalgam/src/Features/Visuals/Visuals.cpp b/Amalgam/src/Features/Visuals/Visuals.cpp index 66bbd9eb..689f917e 100644 --- a/Amalgam/src/Features/Visuals/Visuals.cpp +++ b/Amalgam/src/Features/Visuals/Visuals.cpp @@ -307,8 +307,8 @@ void CVisuals::ProjectileTrace(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, const } else if (Vars::Visuals::Simulation::TrajectoryOnShot.Value) { - G::LinesStorage.clear(); - G::LinesStorage.push_back({ projInfo.PredictionLines, -float(projInfo.PredictionLines.size()) - TIME_TO_TICKS(F::Backtrack.GetReal()), Vars::Colors::ProjectileColor.Value }); + G::PathStorage.clear(); + G::PathStorage.push_back({ projInfo.PredictionLines, -float(projInfo.PredictionLines.size()) - TIME_TO_TICKS(F::Backtrack.GetReal()), Vars::Colors::ProjectileColor.Value }); if (pNormal) { @@ -316,12 +316,12 @@ void CVisuals::ProjectileTrace(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, const const Vec3 vSize = { 1.f, flSize, flSize }; Vec3 vAngles; Math::VectorAngles(*pNormal, vAngles); - G::BoxesStorage.clear(); - G::BoxesStorage.push_back({ trace.endpos, vSize * -1, vSize, vAngles, I::GlobalVars->curtime + TICKS_TO_TIME(projInfo.PredictionLines.size()) + F::Backtrack.GetReal(), Vars::Colors::ProjectileColor.Value, { 0, 0, 0, 0 } }); + G::BoxStorage.clear(); + G::BoxStorage.push_back({ trace.endpos, vSize * -1, vSize, vAngles, I::GlobalVars->curtime + TICKS_TO_TIME(projInfo.PredictionLines.size()) + F::Backtrack.GetReal(), Vars::Colors::ProjectileColor.Value, { 0, 0, 0, 0 } }); } if (!vPoints.empty()) - G::LinesStorage.push_back({ vPoints, I::GlobalVars->curtime + TICKS_TO_TIME(projInfo.PredictionLines.size()) + F::Backtrack.GetReal(), Vars::Colors::ProjectileColor.Value }); + G::PathStorage.push_back({ vPoints, I::GlobalVars->curtime + TICKS_TO_TIME(projInfo.PredictionLines.size()) + F::Backtrack.GetReal(), Vars::Colors::ProjectileColor.Value }); } } @@ -521,7 +521,7 @@ std::vector CVisuals::GetHitboxes(matrix3x4 aBones[MAXSTUDIOBONES], CBa void CVisuals::DrawBulletLines() { - for (auto& Line : G::BulletsStorage) + for (auto& Line : G::LineStorage) { if (Line.m_flTime < I::GlobalVars->curtime) continue; @@ -571,7 +571,7 @@ void CVisuals::DrawSimLine(std::deque& Line, Color_t Color, int iStyle, bo void CVisuals::DrawSimLines() { - for (auto& Line : G::LinesStorage) + for (auto& Line : G::PathStorage) { if (Line.m_flTime >= 0.f && Line.m_flTime < I::GlobalVars->curtime) continue; @@ -582,7 +582,7 @@ void CVisuals::DrawSimLines() void CVisuals::DrawBoxes() { - for (auto& Box : G::BoxesStorage) + for (auto& Box : G::BoxStorage) { if (Box.m_flTime < I::GlobalVars->curtime) continue; @@ -592,19 +592,19 @@ void CVisuals::DrawBoxes() void CVisuals::RevealBulletLines() { - for (auto& Line : G::BulletsStorage) + for (auto& Line : G::LineStorage) Line.m_flTime = I::GlobalVars->curtime + 60.f; } void CVisuals::RevealSimLines() { - for (auto& PredictionLine : G::LinesStorage) + for (auto& PredictionLine : G::PathStorage) PredictionLine.m_flTime = I::GlobalVars->curtime + 60.f; } void CVisuals::RevealBoxes() { - for (auto& Box : G::BoxesStorage) + for (auto& Box : G::BoxStorage) Box.m_flTime = I::GlobalVars->curtime + 60.f; } diff --git a/Amalgam/src/Hooks/CBaseEntity_FireBullets.cpp b/Amalgam/src/Hooks/CBaseEntity_FireBullets.cpp index 905f35b3..df649f67 100644 --- a/Amalgam/src/Hooks/CBaseEntity_FireBullets.cpp +++ b/Amalgam/src/Hooks/CBaseEntity_FireBullets.cpp @@ -47,7 +47,7 @@ MAKE_HOOK(CBaseEntity_FireBullets, S::CBaseEntity_FireBullets(), void, __fastcal else if (uHash == FNV1A::Hash32Const("Line")) { bool bClear = false; - for (auto& Line : G::BulletsStorage) + for (auto& Line : G::LineStorage) { if (I::GlobalVars->curtime - (Line.m_flTime - 5.f) > 0) { @@ -56,9 +56,9 @@ MAKE_HOOK(CBaseEntity_FireBullets, S::CBaseEntity_FireBullets(), void, __fastcal } } if (bClear) - G::BulletsStorage.clear(); + G::LineStorage.clear(); - G::BulletsStorage.push_back({ {trace.startpos, trace.endpos}, I::GlobalVars->curtime + 5.f, Vars::Colors::BulletTracer.Value, true }); + G::LineStorage.push_back({ {trace.startpos, trace.endpos}, I::GlobalVars->curtime + 5.f, Vars::Colors::BulletTracer.Value, true }); } else if (uHash == FNV1A::Hash32Const("Beam")) { diff --git a/Amalgam/src/Hooks/CL_Move.cpp b/Amalgam/src/Hooks/CL_Move.cpp index af3a2f61..7b91a30c 100644 --- a/Amalgam/src/Hooks/CL_Move.cpp +++ b/Amalgam/src/Hooks/CL_Move.cpp @@ -29,7 +29,7 @@ MAKE_HOOK(CL_Move, S::CL_Move(), void, __fastcall, F::NoSpreadHitscan.AskForPlayerPerf(); - for (auto& Line : G::LinesStorage) + for (auto& Line : G::PathStorage) { if (Line.m_flTime < 0.f) Line.m_flTime = std::min(Line.m_flTime + 1.f, 0.f); diff --git a/Amalgam/src/SDK/Globals.h b/Amalgam/src/SDK/Globals.h index 54116b21..a0111bb0 100644 --- a/Amalgam/src/SDK/Globals.h +++ b/Amalgam/src/SDK/Globals.h @@ -86,9 +86,9 @@ namespace G inline std::unordered_map> VelocityMap = {}; - inline std::vector BulletsStorage = {}; - inline std::vector LinesStorage = {}; - inline std::vector BoxesStorage = {}; + inline std::vector LineStorage = {}; + inline std::vector PathStorage = {}; + inline std::vector BoxStorage = {}; inline int* RandomSeed() { diff --git a/Amalgam/src/SDK/SDK.cpp b/Amalgam/src/SDK/SDK.cpp index 2bae7d04..abb657d9 100644 --- a/Amalgam/src/SDK/SDK.cpp +++ b/Amalgam/src/SDK/SDK.cpp @@ -253,6 +253,9 @@ void SDK::Trace(const Vec3& vecStart, const Vec3& vecEnd, unsigned int nMask, IT Ray_t ray; ray.Init(vecStart, vecEnd); I::EngineTrace->TraceRay(ray, nMask, pFilter, pTrace); + + if (Vars::Debug::VisualizeTraces.Value) + G::LineStorage.push_back({ { vecStart, Vars::Debug::VisualizeTraceHits.Value ? pTrace->endpos : vecEnd }, I::GlobalVars->curtime + 0.015f }); } void SDK::TraceHull(const Vec3& vecStart, const Vec3& vecEnd, const Vec3& vecHullMin, const Vec3& vecHullMax, unsigned int nMask, ITraceFilter* pFilter, CGameTrace* pTrace) @@ -260,6 +263,16 @@ void SDK::TraceHull(const Vec3& vecStart, const Vec3& vecEnd, const Vec3& vecHul Ray_t ray; ray.Init(vecStart, vecEnd, vecHullMin, vecHullMax); I::EngineTrace->TraceRay(ray, nMask, pFilter, pTrace); + + if (Vars::Debug::VisualizeTraces.Value) + { + G::LineStorage.push_back({ { vecStart, Vars::Debug::VisualizeTraceHits.Value ? pTrace->endpos : vecEnd }, I::GlobalVars->curtime + 0.015f }); + if (!(vecHullMax - vecHullMin).IsZero()) + { + G::BoxStorage.push_back({ vecStart, vecHullMin, vecHullMax, {}, I::GlobalVars->curtime + 0.015f, {}, { 0, 0, 0, 0 } }); + G::BoxStorage.push_back({ Vars::Debug::VisualizeTraceHits.Value ? pTrace->endpos : vecEnd, vecHullMin, vecHullMax, {}, I::GlobalVars->curtime + 0.015f, {}, { 0, 0, 0, 0 } }); + } + } } bool SDK::VisPos(CBaseEntity* pSkip, const CBaseEntity* pEntity, const Vec3& from, const Vec3& to, unsigned int nMask) diff --git a/Amalgam/src/SDK/Vars.h b/Amalgam/src/SDK/Vars.h index d18b1053..54af7cae 100644 --- a/Amalgam/src/SDK/Vars.h +++ b/Amalgam/src/SDK/Vars.h @@ -747,5 +747,7 @@ namespace Vars CVar(Logging, false, NOSAVE) CVar(ServerHitbox, false, NOSAVE) CVar(AntiAimLines, false) + CVar(VisualizeTraces, false, NOSAVE) + CVar(VisualizeTraceHits, false, NOSAVE) NAMESPACE_END(Debug) } \ No newline at end of file