change how points are generated for rocket splash some

move player origin compression to macro
This commit is contained in:
rei-2
2026-02-22 03:30:29 -05:00
parent d2cfddcafc
commit f82af0a590
18 changed files with 248 additions and 227 deletions
+1 -1
View File
@@ -996,7 +996,7 @@
<ClCompile Include="src\Hooks\CTFWeaponBase_CanFireRandomCriticalShot.cpp" />
<ClCompile Include="src\Hooks\CTFPlayer_GetMinFOV.cpp" />
<ClCompile Include="src\Hooks\CWeaponMedigun_PrimaryAttack.cpp" />
<ClCompile Include="src\Hooks\IEngineTrace_SetTraceEntity.cpp" />
<ClCompile Include="src\Hooks\IEngineTrace_TraceRay.cpp" />
<ClCompile Include="src\Hooks\CNetChannel_SendDatagram.cpp" />
<ClCompile Include="src\Hooks\CNetChannel_SendNetMsg.cpp" />
<ClCompile Include="src\Hooks\COPRenderSprites_Render.cpp" />
+1 -1
View File
@@ -181,7 +181,7 @@
<ClCompile Include="src\Hooks\VGuiMenuBuilder_AddMenuItem.cpp" />
<ClCompile Include="src\Features\Output\Output.cpp" />
<ClCompile Include="src\Hooks\Cbuf_ExecuteCommand.cpp" />
<ClCompile Include="src\Hooks\IEngineTrace_SetTraceEntity.cpp" />
<ClCompile Include="src\Hooks\IEngineTrace_TraceRay.cpp" />
<ClCompile Include="src\Hooks\IMatSystemSurface_OnScreenSizeChanged.cpp" />
<ClCompile Include="src\SDK\Definitions\Main\CTFPlayer.cpp" />
<ClCompile Include="src\SDK\Definitions\Main\CBaseAnimating.cpp" />
@@ -243,7 +243,7 @@ bool CAimbotMelee::CanBackstab(CBaseEntity* pTarget, CTFPlayer* pLocal, Vec3 vEy
}
Vec3 vEyePos = m_vEyePos;
const float flCompDist = 0.0625f;
const float flCompDist = PLAYER_ORIGIN_COMPRESSION / 2;
const float flSqCompDist = 0.0884f;
if (auto pCmd = G::CurrentUserCmd;
@@ -364,8 +364,8 @@ int CAimbotMelee::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase* pW
Vec3 vRestoreMaxs = tTarget.m_pEntity->m_vecMaxs();
tTarget.m_pEntity->SetAbsOrigin(pRecord->m_vOrigin);
tTarget.m_pEntity->m_vecMins() = pRecord->m_vMins + 0.125f; // account for origin compression
tTarget.m_pEntity->m_vecMaxs() = pRecord->m_vMaxs - 0.125f;
tTarget.m_pEntity->m_vecMins() = pRecord->m_vMins + PLAYER_ORIGIN_COMPRESSION; // account for origin compression
tTarget.m_pEntity->m_vecMaxs() = pRecord->m_vMaxs - PLAYER_ORIGIN_COMPRESSION;
Vec3 vDiff = { 0, 0, std::clamp(m_vEyePos.z - pRecord->m_vOrigin.z, pRecord->m_vMins.z, pRecord->m_vMaxs.z) };
tTarget.m_vPos = pRecord->m_vOrigin + vDiff;
@@ -12,7 +12,7 @@
//#define SPLASH_DEBUG5 // trace count
#ifdef SPLASH_DEBUG5
static std::unordered_map<std::string, int> s_mTraceCount = {};
static std::map<std::string, int> s_mTraceCount = {};
#endif
static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
@@ -445,7 +445,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
{
SDK::TraceHull(vTargetEye, vPoint, tInfo.m_vHull * -1, tInfo.m_vHull, MASK_SOLID, &filter, &trace);
#ifdef SPLASH_DEBUG5
s_mTraceCount["Splash regular"]++;
s_mTraceCount["Splash out"]++;
#endif
if (checkPoint(trace, bErase, bNormal))
@@ -471,16 +471,15 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
size_t iOriginalSize = vPoints.size();
{
// necessary performance wise?
//if (bNormal = (tInfo.m_vLocalEye - vTargetEye).Dot(vTargetEye - vPoint) > 0.f)
if (bNormal = (tInfo.m_vLocalEye - vTargetEye).DotNormalized(vTargetEye - vPoint) > Vars::Aimbot::Projectile::Out2NormalCheck.Value)
float flNormal = (tInfo.m_vLocalEye - vTargetEye).DotNormalized(vTargetEye - vPoint);
if (bNormal = Vars::Aimbot::Projectile::Out2NormalMin.Value > flNormal || flNormal > Vars::Aimbot::Projectile::Out2NormalMax.Value)
goto breakOutExtra;
if (!(iOriginalType & PointTypeEnum::Out)) // don't do the same trace over again
{
SDK::Trace(vTargetEye, vPoint, MASK_SOLID, &filter, &trace);
#ifdef SPLASH_DEBUG5
s_mTraceCount["Splash rocket (2)"]++;
s_mTraceCount["Splash out 1"]++;
#endif
bNormal = !trace.m_pEnt || trace.fraction == 1.f;
#ifdef SPLASH_DEBUG2
@@ -490,13 +489,21 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
goto breakOutExtra;
}
filter.pSkip = trace.m_pEnt->GetClassID() != ETFClassID::CWorld || trace.hitbox ? trace.m_pEnt : nullptr; // make sure we get past entity or prop
SDK::Trace(trace.endpos - (vTargetEye - vPoint).Normalized(), vPoint, MASK_SOLID | CONTENTS_NOSTARTSOLID, &filter, &trace);
filter.pSkip = nullptr;
switch (trace.m_pEnt->GetClassID())
{ // make sure we get past entity or prop
case ETFClassID::CWorld:
if (trace.hitbox) filter.iTeam = trace.hitbox - 1;
filter.pSkip = nullptr;
break;
default:
filter.pSkip = trace.m_pEnt;
}
SDK::Trace(trace.endpos - (vTargetEye - vPoint).Normalized(), vPoint, MASK_SOLID | CONTENTS_NOSKIP, &filter, &trace);
filter.pSkip = nullptr, filter.iTeam = -1;
#ifdef SPLASH_DEBUG5
s_mTraceCount["Splash rocket (2, 2)"]++;
s_mTraceCount["Splash out 2"]++;
#endif
bNormal = trace.fraction == 1.f || trace.allsolid || (trace.startpos - trace.endpos).IsZero() || trace.surface.flags & (/*SURF_NODRAW |*/ SURF_SKY);
bNormal = trace.fraction == 1.f || !trace.fraction || trace.fraction == trace.fractionleftsolid || trace.allsolid || trace.surface.flags & (/*SURF_NODRAW |*/ SURF_SKY);
#ifdef SPLASH_DEBUG2
drawTrace(!bNormal, Vars::Colors::IndicatorTextBad.Value, trace);
#endif
@@ -507,7 +514,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
{
SDK::Trace(trace.endpos + trace.plane.normal, vTargetEye, MASK_SHOT, &filter, &trace);
#ifdef SPLASH_DEBUG5
s_mTraceCount["Splash rocket check (2)"]++;
s_mTraceCount["Splash out rocket check"]++;
#endif
#ifdef SPLASH_DEBUG2
drawTrace(trace.fraction >= 1.f, Vars::Colors::IndicatorTextMisc.Value, trace);
@@ -535,7 +542,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
{
SDK::Trace(vPoint, vTargetEye, MASK_SHOT, &filter, &trace);
#ifdef SPLASH_DEBUG5
s_mTraceCount["Splash grate check"]++;
s_mTraceCount["Splash in check"]++;
#endif
bNormal = trace.DidHit();
#ifdef SPLASH_DEBUG2
@@ -546,7 +553,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
SDK::TraceHull(vPoint, vTargetEye, tInfo.m_vHull * -1, tInfo.m_vHull, MASK_SOLID, &filter, &trace);
#ifdef SPLASH_DEBUG5
s_mTraceCount["Splash grate"]++;
s_mTraceCount["Splash in"]++;
#endif
checkPoint(trace, bErase, bNormal);
@@ -556,11 +563,11 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
}
else // currently experimental, there may be a more efficient way to do this?
{
SDK::Trace(vPoint, vTargetEye, MASK_SOLID | CONTENTS_NOSTARTSOLID, &filter, &trace);
SDK::Trace(vPoint, vTargetEye, MASK_SOLID | CONTENTS_NOSKIP, &filter, &trace);
#ifdef SPLASH_DEBUG5
s_mTraceCount["Splash rocket (1)"]++;
s_mTraceCount["Splash in 1"]++;
#endif
bNormal = trace.fraction == 1.f || trace.allsolid || trace.surface.flags & SURF_SKY;
bNormal = trace.fraction == 1.f || !trace.fraction || trace.allsolid || trace.surface.flags & SURF_SKY;
#ifdef SPLASH_DEBUG2
drawTrace(!bNormal, Vars::Colors::IndicatorMid.Value, trace);
#endif
@@ -570,11 +577,11 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
goto breakOut;
CGameTrace trace2 = {};
SDK::Trace(trace.endpos - (vPoint - vTargetEye).Normalized(), vTargetEye, MASK_SOLID | CONTENTS_NOSTARTSOLID, &filter, &trace2);
SDK::Trace(trace.endpos - (vPoint - vTargetEye).Normalized(), vTargetEye, MASK_SOLID | CONTENTS_NOSKIP, &filter, &trace2);
#ifdef SPLASH_DEBUG5
s_mTraceCount["Splash rocket (1, 2)"]++;
s_mTraceCount["Splash in 2"]++;
#endif
bNormal = trace2.fraction == 1.f || trace.allsolid || (trace2.startpos - trace2.endpos).IsZero() || trace2.surface.flags & (SURF_NODRAW | SURF_SKY);
bNormal = trace2.fraction == 1.f || !trace2.fraction || trace2.fraction == trace2.fractionleftsolid || trace2.allsolid || trace2.surface.flags & (SURF_NODRAW | SURF_SKY);
#ifdef SPLASH_DEBUG2
drawTrace(!bNormal, Vars::Colors::IndicatorBad.Value, trace2);
#endif
@@ -588,7 +595,7 @@ static inline void TracePoint(Vec3& vPoint, int& iType, Vec3& vTargetEye, Info_t
{
SDK::Trace(trace.endpos + trace.plane.normal, vTargetEye, MASK_SHOT, &filter, &trace);
#ifdef SPLASH_DEBUG5
s_mTraceCount["Splash rocket check (1)"]++;
s_mTraceCount["Splash in rocket check"]++;
#endif
#ifdef SPLASH_DEBUG2
drawTrace(!bNormal, Vars::Colors::IndicatorMisc.Value, trace);
@@ -1098,10 +1105,10 @@ bool CAimbotProjectile::TestAngle(const Vec3& vPoint, const Vec3& vAngles, int i
case TF_WEAPON_SHOTGUN_BUILDING_RESCUE:
case TF_WEAPON_SYRINGEGUN_MEDIC:
case TF_WEAPON_FLAME_BALL:
s_mTraceCount["Setup trace test"]++;
s_mTraceCount["Setup trace"]++;
}
}
s_mTraceCount["Trace init check test"]++;
s_mTraceCount["Trace init check"]++;
#endif
m_tProjInfo = {};
if (!F::ProjSim.GetInfo(pLocal, pWeapon, vAngles, m_tProjInfo, iFlags)
@@ -15,7 +15,7 @@ void CAutoDetonate::PredictPlayers(CTFPlayer* pLocal, float flLatency, bool bLoc
m_mRestore[pPlayer] = pPlayer->GetAbsOrigin();
pPlayer->SetAbsOrigin(SDK::PredictOrigin(pPlayer->m_vecOrigin(), pPlayer->m_vecVelocity(), flLatency, true, pPlayer->m_vecMins() + 0.125f, pPlayer->m_vecMaxs() - 0.125f, pPlayer->SolidMask()));
pPlayer->SetAbsOrigin(SDK::PredictOrigin(pPlayer->m_vecOrigin(), pPlayer->m_vecVelocity(), flLatency, true, pPlayer->m_vecMins() + PLAYER_ORIGIN_COMPRESSION, pPlayer->m_vecMaxs() - PLAYER_ORIGIN_COMPRESSION, pPlayer->SolidMask()));
}
}
@@ -82,9 +82,9 @@ Vec3 CAutoDetonate::GetOrigin(CBaseEntity* pProjectile, EntityEnum::EntityEnum i
bool CAutoDetonate::CheckEntity(CBaseEntity* pEntity, CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd, CBaseEntity* pProjectile, float flRadius, Vec3 vOrigin)
{
// CEntitySphereQuery actually does a box test so we need to make sure the distance is less than the radius first
Vec3 vPos; pEntity->m_Collision()->CalcNearestPoint(vOrigin, &vPos);
if (vOrigin.DistTo(vPos) > flRadius)
// CEntitySphereQuery actually does a box test so we need to make sure the distance is less than the radius first
Vec3 vPos; pEntity->m_Collision()->CalcNearestPoint(vOrigin, &vPos);
if (vOrigin.DistTo(vPos) > flRadius)
return false;
if (pEntity != pLocal
@@ -92,13 +92,13 @@ bool CAutoDetonate::CheckEntity(CBaseEntity* pEntity, CTFPlayer* pLocal, CTFWeap
: !SDK::VisPosWorld(pProjectile, pEntity, vOrigin, pEntity->GetAbsOrigin() + pEntity->As<CTFPlayer>()->m_vecViewOffset(), MASK_SHOT))
return false;
if (pCmd && pWeapon->GetWeaponID() == TF_WEAPON_PIPEBOMBLAUNCHER && pWeapon->As<CTFPipebombLauncher>()->GetDetonateType() == TF_DETONATE_MODE_DOT)
{
Vec3 vAngleTo = Math::CalcAngle(pLocal->GetShootPos(), vOrigin);
SDK::FixMovement(pCmd, vAngleTo);
pCmd->viewangles = vAngleTo;
G::PSilentAngles = true;
}
if (pCmd && pWeapon->GetWeaponID() == TF_WEAPON_PIPEBOMBLAUNCHER && pWeapon->As<CTFPipebombLauncher>()->GetDetonateType() == TF_DETONATE_MODE_DOT)
{
Vec3 vAngleTo = Math::CalcAngle(pLocal->GetShootPos(), vOrigin);
SDK::FixMovement(pCmd, vAngleTo);
pCmd->viewangles = vAngleTo;
G::PSilentAngles = true;
}
return true;
}
@@ -120,7 +120,7 @@ bool CAutoDetonate::CheckEntities(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUs
continue;
if (CheckEntity(pEntity, pLocal, pWeapon, pCmd, pProjectile, flRadius, vOrigin))
return true;
return true;
}
return false;
@@ -198,4 +198,4 @@ void CAutoDetonate::Run(CTFPlayer* pLocal, CUserCmd* pCmd)
if (Check(pLocal, pCmd, EntityEnum::LocalStickies, Vars::Aimbot::Projectile::AutoDetonateEnum::Stickies)
|| Check(pLocal, pCmd, EntityEnum::LocalFlares, Vars::Aimbot::Projectile::AutoDetonateEnum::Flares))
pCmd->buttons |= IN_ATTACK2;
}
}
@@ -16,8 +16,8 @@ void CEnginePrediction::AdjustPlayers(CBaseEntity* pLocal)
m_mRestore[pPlayer] = { pPlayer->GetAbsOrigin(), pPlayer->m_vecMins(), pPlayer->m_vecMaxs() };
pPlayer->SetAbsOrigin(pPlayer->m_vecOrigin());
pPlayer->m_vecMins() += 0.125f;
pPlayer->m_vecMaxs() -= 0.125f;
pPlayer->m_vecMins() += PLAYER_ORIGIN_COMPRESSION;
pPlayer->m_vecMaxs() -= PLAYER_ORIGIN_COMPRESSION;
}
}
void CEnginePrediction::RestorePlayers()
+1 -1
View File
@@ -488,7 +488,7 @@ int CMisc::AntiBackstab(CTFPlayer* pLocal, CUserCmd* pCmd, bool bSendPacket)
{
auto TargetIsBehind = [&]()
{
const float flCompDist = 0.0625f;
const float flCompDist = PLAYER_ORIGIN_COMPRESSION / 2;
const float flSqCompDist = 0.0884f;
Vec3 vToTarget = (pLocal->m_vecOrigin() - pTargetPos.first).To2D();
@@ -34,6 +34,67 @@ void CMovementSimulation::Reset(MoveStorage& tMoveStorage)
}
}
static inline void HandleMovement(CTFPlayer* pPlayer, MoveData* pLastRecord, MoveData& tCurRecord, std::deque<MoveData>& vRecords)
{
bool bLocal = pPlayer->entindex() == I::EngineClient->GetLocalPlayer();
if (pLastRecord)
{
/*
if (tRecord.m_iMode != pLastRecord->m_iMode)
{
pLastRecord = nullptr;
vRecords.clear();
}
else */
{ // does this eat up fps? i can't tell currently
CGameTrace trace = {};
CTraceFilterWorldAndPropsOnly filter = {};
SDK::TraceHull(pLastRecord->m_vOrigin, pLastRecord->m_vOrigin + pLastRecord->m_vVelocity * TICK_INTERVAL, pPlayer->m_vecMins() + PLAYER_ORIGIN_COMPRESSION, pPlayer->m_vecMaxs() - PLAYER_ORIGIN_COMPRESSION, pPlayer->SolidMask(), &filter, &trace);
if (trace.DidHit() && trace.plane.normal.z < 0.707f)
{
pLastRecord = nullptr;
vRecords.clear();
}
}
}
if (!pLastRecord)
return;
if (pPlayer->InCond(TF_COND_SHIELD_CHARGE))
{
s_tDummyCmd.forwardmove = 450.f;
s_tDummyCmd.sidemove = 0.f;
SDK::FixMovement(&s_tDummyCmd, bLocal ? F::EnginePrediction.m_vAngles : pPlayer->GetEyeAngles(), {});
tCurRecord.m_vDirection.x = s_tDummyCmd.forwardmove;
tCurRecord.m_vDirection.y = -s_tDummyCmd.sidemove;
return;
}
switch (tCurRecord.m_iMode)
{
case MoveEnum::Ground:
{
if (bLocal && Vars::Misc::Movement::Bunnyhop.Value && G::OriginalCmd.buttons & IN_JUMP)
{
float flMaxSpeed = SDK::MaxSpeed(pPlayer, true);
tCurRecord.m_vDirection = tCurRecord.m_vVelocity.Normalized2D() * flMaxSpeed;
}
break;
}
case MoveEnum::Air:
{
float flMaxSpeed = SDK::MaxSpeed(pPlayer, true);
tCurRecord.m_vDirection = tCurRecord.m_vVelocity.Normalized2D() * flMaxSpeed;
break;
}
case MoveEnum::Swim:
{
tCurRecord.m_vDirection *= 2;
}
}
}
void CMovementSimulation::Store()
{
for (auto pEntity : H::Entities.GetGroup(EntityEnum::PlayerAll))
@@ -58,7 +119,7 @@ void CMovementSimulation::Store()
vRecords.emplace_front(
vDirection,
pPlayer->m_flSimulationTime(),
pPlayer->IsSwimming() ? 2 : pPlayer->IsOnGround() ? 0 : 1,
pPlayer->IsSwimming() ? MoveEnum::Swim : pPlayer->IsOnGround() ? MoveEnum::Ground : MoveEnum::Air,
vVelocity,
vOrigin
);
@@ -66,45 +127,7 @@ void CMovementSimulation::Store()
if (vRecords.size() > 66)
vRecords.pop_back();
float flMaxSpeed = SDK::MaxSpeed(pPlayer);
if (pLastRecord)
{
/*
if (tRecord.m_iMode != pLastRecord->m_iMode)
vRecords.clear();
else // does this eat up fps? i can't tell currently
*/
{
CGameTrace trace = {};
CTraceFilterWorldAndPropsOnly filter = {};
SDK::TraceHull(pLastRecord->m_vOrigin, pLastRecord->m_vOrigin + pLastRecord->m_vVelocity * TICK_INTERVAL, pPlayer->m_vecMins() + 0.125f, pPlayer->m_vecMaxs() - 0.125f, pPlayer->SolidMask(), &filter, &trace);
if (trace.DidHit() && trace.plane.normal.z < 0.707f)
vRecords.clear();
}
}
if (pPlayer->InCond(TF_COND_SHIELD_CHARGE))
{
s_tDummyCmd.forwardmove = 450.f;
s_tDummyCmd.sidemove = 0.f;
SDK::FixMovement(&s_tDummyCmd, bLocal ? F::EnginePrediction.m_vAngles : pPlayer->GetEyeAngles(), {});
tCurRecord.m_vDirection.x = s_tDummyCmd.forwardmove;
tCurRecord.m_vDirection.y = -s_tDummyCmd.sidemove;
}
else
{
switch (tCurRecord.m_iMode)
{
case 0:
if (bLocal && Vars::Misc::Movement::Bunnyhop.Value && G::OriginalCmd.buttons & IN_JUMP)
tCurRecord.m_vDirection = vVelocity.Normalized2D() * flMaxSpeed;
break;
case 1:
tCurRecord.m_vDirection = vVelocity.Normalized2D() * flMaxSpeed;
break;
case 2:
tCurRecord.m_vDirection *= 2;
}
}
HandleMovement(pPlayer, pLastRecord, tCurRecord, vRecords);
}
for (auto pEntity : H::Entities.GetGroup(EntityEnum::PlayerAll))
@@ -165,7 +188,7 @@ bool CMovementSimulation::Initialize(CBaseEntity* pEntity, MoveStorage& tMoveSto
pPlayer->m_bInDuckJump() = false;
}
if (pPlayer != H::Entities.GetLocal())
if (pPlayer->entindex() != I::EngineClient->GetLocalPlayer())
{
pPlayer->m_vecBaseVelocity() = Vec3(); // residual basevelocity causes issues
if (pPlayer->IsOnGround())
@@ -341,7 +364,7 @@ static inline void VisualizeRecords(MoveData& tRecord1, MoveData& tRecord2, Colo
{
Vec3 vVelocity = tRecord1.m_vVelocity.Normalized2D() * 5;
vVelocity = Math::RotatePoint(vVelocity, {}, { 0, flYaw > 0 ? 90.f : -90.f, 0 });
if (Vars::Aimbot::Projectile::MovesimFrictionFlags.Value & Vars::Aimbot::Projectile::MovesimFrictionFlagsEnum::CalculateIncrease && tRecord1.m_iMode == 1)
if (Vars::Aimbot::Projectile::MovesimFrictionFlags.Value & Vars::Aimbot::Projectile::MovesimFrictionFlagsEnum::CalculateIncrease && tRecord1.m_iMode == MoveEnum::Air)
vVelocity /= GetFrictionScale(tRecord1.m_vVelocity.Length2D(), flYaw, tRecord1.m_vVelocity.z + GetGravity() * TICK_INTERVAL, 0.f, 56.f);
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(tRecord1.m_vOrigin, tRecord1.m_vOrigin + vVelocity), I::GlobalVars->curtime + 5.f, tColor);
}
@@ -355,7 +378,7 @@ static inline bool GetYawDifference(MoveData& tRecord1, MoveData& tRecord2, bool
const int iTicks = std::max(TIME_TO_TICKS(flTime1 - flTime2), 1);
*pYaw = Math::NormalizeAngle(flYaw1 - flYaw2);
if (flMaxSpeed && tRecord1.m_iMode != 1)
if (flMaxSpeed && tRecord1.m_iMode != MoveEnum::Air)
*pYaw *= std::clamp(tRecord1.m_vVelocity.Length2D() / flMaxSpeed, 0.f, 1.f);
if (Vars::Aimbot::Projectile::MovesimFrictionFlags.Value & Vars::Aimbot::Projectile::MovesimFrictionFlagsEnum::CalculateIncrease && tRecord1.m_iMode == 1)
*pYaw /= GetFrictionScale(tRecord1.m_vVelocity.Length2D(), *pYaw, tRecord1.m_vVelocity.z + GetGravity() * TICK_INTERVAL, 0.f, 56.f);
@@ -416,7 +439,7 @@ void CMovementSimulation::GetAverageYaw(MoveStorage& tMoveStorage, int iSamples)
continue;
}
bGround = tRecord1.m_iMode != 1;
bGround = tRecord1.m_iMode != MoveEnum::Air;
float flStraightFuzzyValue = bGround ? Vars::Aimbot::Projectile::GroundStraightFuzzyValue.Value : Vars::Aimbot::Projectile::AirStraightFuzzyValue.Value;
int iMaxChanges = bGround ? Vars::Aimbot::Projectile::GroundMaxChanges.Value : Vars::Aimbot::Projectile::AirMaxChanges.Value;
int iMaxChangeTime = bGround ? Vars::Aimbot::Projectile::GroundMaxChangeTime.Value : Vars::Aimbot::Projectile::AirMaxChangeTime.Value;
@@ -531,10 +554,10 @@ void CMovementSimulation::SetBounds(CTFPlayer* pPlayer)
{
if (auto pViewVectors = pGameRules->GetViewVectors())
{
pViewVectors->m_vHullMin = Vec3(-24, -24, 0) + 0.125f;
pViewVectors->m_vHullMax = Vec3(24, 24, 82) - 0.125f;
pViewVectors->m_vDuckHullMin = Vec3(-24, -24, 0) + 0.125f;
pViewVectors->m_vDuckHullMax = Vec3(24, 24, 62) - 0.125f;
pViewVectors->m_vHullMin = Vec3(-24, -24, 0) + PLAYER_ORIGIN_COMPRESSION;
pViewVectors->m_vHullMax = Vec3(24, 24, 82) - PLAYER_ORIGIN_COMPRESSION;
pViewVectors->m_vDuckHullMin = Vec3(-24, -24, 0) + PLAYER_ORIGIN_COMPRESSION;
pViewVectors->m_vDuckHullMax = Vec3(24, 24, 62) - PLAYER_ORIGIN_COMPRESSION;
}
}
}
@@ -2,6 +2,8 @@
#include "../../../SDK/SDK.h"
#include <functional>
Enum(Move, Ground, Air, Swim)
struct MoveStorage
{
CTFPlayer* m_pPlayer = nullptr;
@@ -20,7 +20,7 @@ public:
flGravityCorrection = (powf(flDeltaTicks, 2.f) - flDeltaTicks) / 2.f * sv_gravity->GetFloat() * powf(TICK_INTERVAL, 2);
}
float flDeltaValue = m_flNewAxisValue - m_flOldAxisValue;
float flTickVelocity = flDeltaValue + (flDeltaValue ? 0.0625f * sign(m_flNewAxisValue) : 0.f) - flGravityCorrection;
float flTickVelocity = flDeltaValue + (flDeltaValue ? PLAYER_ORIGIN_COMPRESSION / 2 * sign(m_flNewAxisValue) : 0.f) - flGravityCorrection;
return flTickVelocity / TICKS_TO_TIME(iDeltaTicks);
}
};
@@ -99,10 +99,10 @@ MAKE_HOOK(CBaseEntity_SetAbsVelocity, S::CBaseEntity_SetAbsVelocity(), void,
if (i == 2 && bGrounded)
break;
float flOldPos1 = tOldRecord.m_vecOrigin[i], flOldPos2 = flOldPos1 + 0.125f * sign(flOldPos1);
float flNewPos1 = tNewRecord.m_vecOrigin[i], flNewPos2 = flNewPos1 + 0.125f * sign(flNewPos1);
if (!flOldPos1) flOldPos1 = -0.125f, flOldPos2 = 0.125f;
if (!flNewPos1) flNewPos1 = -0.125f, flNewPos2 = 0.125f;
float flOldPos1 = tOldRecord.m_vecOrigin[i], flOldPos2 = flOldPos1 + PLAYER_ORIGIN_COMPRESSION * sign(flOldPos1);
float flNewPos1 = tNewRecord.m_vecOrigin[i], flNewPos2 = flNewPos1 + PLAYER_ORIGIN_COMPRESSION * sign(flNewPos1);
if (!flOldPos1) flOldPos1 = -PLAYER_ORIGIN_COMPRESSION, flOldPos2 = PLAYER_ORIGIN_COMPRESSION;
if (!flNewPos1) flNewPos1 = -PLAYER_ORIGIN_COMPRESSION, flNewPos2 = PLAYER_ORIGIN_COMPRESSION;
FloatRange_t flVelocityRange;
{
@@ -1,125 +0,0 @@
#include "../SDK/SDK.h"
MAKE_SIGNATURE(CM_BoxTrace, "engine.dll", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 41 56 48 83 EC ? 45 0F B6 F1", 0x0);
MAKE_SIGNATURE(CM_TraceToLeaf_True, "engine.dll", "48 8B C4 55 57 48 81 EC ? ? ? ? 48 8B B9 ? ? ? ? 48 8B E9 44 0F 29 40 ? 44 0F 28 C3 44 0F 29 48 ? 44 0F 28 CA 85 D2 0F 88 ? ? ? ? 3B 97 ? ? ? ? 0F 8D ? ? ? ? 48 63 89 ? ? ? ? 48 89 70 ? 4C 89 60 ? 4C 89 68 ? 44 8B AC 8D ? ? ? ? 4C 89 70 ? 45 33 F6 4C 89 78 ? 0F 29 78 ? 0F 57 FF 4C 63 FA 49 C1 E7 ? 4C 03 BF ? ? ? ? 48 89 58 ? 48 8B C1 48 C1 E0 ? 41 0F B7 77 ? 41 0F B7 57 ? 4C 8B A4 28 ? ? ? ? 03 D6 3B F2 0F 83 ? ? ? ? 8B C2 8B DE 48 89 84 24 ? ? ? ? 41 BA ? ? ? ? 48 85 DB 0F 88 ? ? ? ? 3B B7 ? ? ? ? 0F 8D ? ? ? ? 48 8B 87 ? ? ? ? 0F B7 0C 58 3B 8F ? ? ? ? 0F 8D ? ? ? ? 48 8B 87 ? ? ? ? 4C 8D 1C C8 45 39 2C 8C 0F 84 ? ? ? ? 45 89 2C 8C 41 8B 03 8B 8D ? ? ? ? 23 C1 0F 84 ? ? ? ? 3D ? ? ? ? 0F 85 ? ? ? ? 0F BA E1 ? 0F 83 ? ? ? ? 41 0F B7 4B ? 41 0F B7 43 ? 4C 8B 8D ? ? ? ? 66 41 3B CA 75 ? 41 3B 81 ? ? ? ? 0F 8D ? ? ? ? 48 8D 14 40 4D 8B C6 48 C1 E2 ? 48 83 C2 ? 49 03 91 ? ? ? ? 0F B7 0A 66 41 3B CA 75 ? 48 8D 05 ? ? ? ? EB ? 41 3B 89 ? ? ? ? 0F 8D ? ? ? ? 48 8B C1 48 C1 E0 ? 49 03 81 ? ? ? ? F6 40 ? ? 0F 85 ? ? ? ? 49 FF C0 48 83 C2 ? 49 83 F8 ? 7C ? EB ? 41 3B 41 ? 0F 8D ? ? ? ? 48 8B D0 45 8B C6 48 C1 E2 ? 44 8B D1 48 83 C2 ? 85 C9 74 ? 49 03 51 ? 66 90 0F B7 0A B8 ? ? ? ? 66 3B C8 75 ? 48 8D 05 ? ? ? ? EB ? 41 3B 89 ? ? ? ? 0F 8D ? ? ? ? 48 8B C1 48 C1 E0 ? 49 03 81 ? ? ? ? F6 40 ? ? 75 ? 41 FF C0 48 83 C2 ? 45 3B C2 7C ? 49 8B D3 48 8B CD E8 ? ? ? ? 0F 2E BD ? ? ? ? 0F 84 ? ? ? ? 41 BA ? ? ? ? FF C6 48 FF C3 48 3B 9C 24 ? ? ? ? 0F 8C ? ? ? ? 44 38 B5 ? ? ? ? 0F 85 ? ? ? ? 41 0F B7 57 ? 66 85 D2 0F 84 ? ? ? ? 48 63 8D ? ? ? ? 48 8B C1 0F 29 74 24", 0x0);
MAKE_SIGNATURE(CM_TraceToLeaf_False, "engine.dll", "48 8B C4 55 57 48 81 EC ? ? ? ? 48 8B B9 ? ? ? ? 48 8B E9 44 0F 29 40 ? 44 0F 28 C3 44 0F 29 48 ? 44 0F 28 CA 85 D2 0F 88 ? ? ? ? 3B 97 ? ? ? ? 0F 8D ? ? ? ? 48 63 89 ? ? ? ? 48 89 70 ? 4C 89 60 ? 4C 89 68 ? 44 8B AC 8D ? ? ? ? 4C 89 70 ? 45 33 F6 4C 89 78 ? 0F 29 78 ? 0F 57 FF 4C 63 FA 49 C1 E7 ? 4C 03 BF ? ? ? ? 48 89 58 ? 48 8B C1 48 C1 E0 ? 41 0F B7 77 ? 41 0F B7 57 ? 4C 8B A4 28 ? ? ? ? 03 D6 3B F2 0F 83 ? ? ? ? 8B C2 8B DE 48 89 84 24 ? ? ? ? 41 BA ? ? ? ? 48 85 DB 0F 88 ? ? ? ? 3B B7 ? ? ? ? 0F 8D ? ? ? ? 48 8B 87 ? ? ? ? 0F B7 0C 58 3B 8F ? ? ? ? 0F 8D ? ? ? ? 48 8B 87 ? ? ? ? 4C 8D 1C C8 45 39 2C 8C 0F 84 ? ? ? ? 45 89 2C 8C 41 8B 03 8B 8D ? ? ? ? 23 C1 0F 84 ? ? ? ? 3D ? ? ? ? 0F 85 ? ? ? ? 0F BA E1 ? 0F 83 ? ? ? ? 41 0F B7 4B ? 41 0F B7 43 ? 4C 8B 8D ? ? ? ? 66 41 3B CA 75 ? 41 3B 81 ? ? ? ? 0F 8D ? ? ? ? 48 8D 14 40 4D 8B C6 48 C1 E2 ? 48 83 C2 ? 49 03 91 ? ? ? ? 0F B7 0A 66 41 3B CA 75 ? 48 8D 05 ? ? ? ? EB ? 41 3B 89 ? ? ? ? 0F 8D ? ? ? ? 48 8B C1 48 C1 E0 ? 49 03 81 ? ? ? ? F6 40 ? ? 0F 85 ? ? ? ? 49 FF C0 48 83 C2 ? 49 83 F8 ? 7C ? EB ? 41 3B 41 ? 0F 8D ? ? ? ? 48 8B D0 45 8B C6 48 C1 E2 ? 44 8B D1 48 83 C2 ? 85 C9 74 ? 49 03 51 ? 66 90 0F B7 0A B8 ? ? ? ? 66 3B C8 75 ? 48 8D 05 ? ? ? ? EB ? 41 3B 89 ? ? ? ? 0F 8D ? ? ? ? 48 8B C1 48 C1 E0 ? 49 03 81 ? ? ? ? F6 40 ? ? 75 ? 41 FF C0 48 83 C2 ? 45 3B C2 7C ? 49 8B D3 48 8B CD E8 ? ? ? ? 0F 2E BD ? ? ? ? 0F 84 ? ? ? ? 41 BA ? ? ? ? FF C6 48 FF C3 48 3B 9C 24 ? ? ? ? 0F 8C ? ? ? ? 44 38 B5 ? ? ? ? 0F 85 ? ? ? ? 41 0F B7 57 ? 66 85 D2 0F 84 ? ? ? ? 48 63 8D ? ? ? ? 48 8B C1 0F 29 B4 24", 0x0);
MAKE_SIGNATURE(CM_ClipBoxToBrush_True, "engine.dll", "48 89 5C 24 ? 57 48 81 EC ? ? ? ? 44 0F B7 42", 0x0);
MAKE_SIGNATURE(CM_ClipBoxToBrush_False, "engine.dll", "48 8B C4 48 89 58 ? 57 48 81 EC ? ? ? ? 44 0F B7 42", 0x0);
MAKE_SIGNATURE(IEngineTrace_TraceRay_SetTraceEntity_Call, "engine.dll", "40 38 7E ? 0F 85", 0x0);
#define MAX_CHECK_COUNT_DEPTH 2
typedef uint32 TraceCounter_t;
typedef CUtlVector<TraceCounter_t> CTraceCounterVec;
struct TraceInfo_t
{
Vector m_start;
Vector m_end;
Vector m_mins;
Vector m_maxs;
Vector m_extents;
Vector m_delta;
Vector m_invDelta;
trace_t m_trace;
trace_t m_stabTrace;
int m_contents;
bool m_ispoint;
bool m_isswept;
void* m_pBSPData;
Vector m_DispStabDir;
int m_bDispHit;
bool m_bCheckPrimary;
int m_nCheckDepth;
TraceCounter_t m_Count[MAX_CHECK_COUNT_DEPTH];
CTraceCounterVec m_BrushCounters[MAX_CHECK_COUNT_DEPTH];
CTraceCounterVec m_DispCounters[MAX_CHECK_COUNT_DEPTH];
};
static int s_iOriginalMask = false;
static bool s_bOriginalStartSolid = false;
MAKE_HOOK(IEngineTrace_SetTraceEntity, U::Memory.GetVirtual(I::EngineTrace, 20), void,
void* rcx, ICollideable* pCollideable, trace_t* pTrace)
{
DEBUG_RETURN(IEngineTrace_SetTraceEntity, rcx, pCollideable, pTrace);
const auto dwRetAddr = uintptr_t(_ReturnAddress());
const auto dwDesired = S::IEngineTrace_TraceRay_SetTraceEntity_Call();
CALL_ORIGINAL(rcx, pCollideable, pTrace);
if (dwRetAddr && dwDesired && s_iOriginalMask & CONTENTS_NOSTARTSOLID)
pTrace->startsolid = false;
}
MAKE_HOOK(CM_BoxTrace, S::CM_BoxTrace(), void,
const Ray_t& ray, int headnode, int brushmask, bool computeEndpt, trace_t& tr)
{
DEBUG_RETURN(CM_BoxTrace, ray, headnode, brushmask, computeEndpt, tr);
CALL_ORIGINAL(ray, headnode, brushmask, computeEndpt, tr);
s_iOriginalMask = brushmask;
}
MAKE_HOOK(CM_TraceToLeaf_True, S::CM_TraceToLeaf_True(), void,
TraceInfo_t* pTraceInfo, int ndxLeaf, float startFrac, float endFrac)
{
DEBUG_RETURN(CM_TraceToLeaf_True, pTraceInfo, ndxLeaf, startFrac, endFrac);
if (pTraceInfo->m_contents & CONTENTS_NOSTARTSOLID)
{
s_bOriginalStartSolid = pTraceInfo->m_trace.startsolid;
pTraceInfo->m_trace.startsolid = false;
CALL_ORIGINAL(pTraceInfo, ndxLeaf, startFrac, endFrac);
pTraceInfo->m_trace.startsolid = s_bOriginalStartSolid;
return;
}
CALL_ORIGINAL(pTraceInfo, ndxLeaf, startFrac, endFrac);
}
MAKE_HOOK(CM_TraceToLeaf_False, S::CM_TraceToLeaf_False(), void,
TraceInfo_t* pTraceInfo, int ndxLeaf, float startFrac, float endFrac)
{
DEBUG_RETURN(CM_TraceToLeaf_False, pTraceInfo, ndxLeaf, startFrac, endFrac);
if (pTraceInfo->m_contents & CONTENTS_NOSTARTSOLID)
{
s_bOriginalStartSolid = pTraceInfo->m_trace.startsolid;
pTraceInfo->m_trace.startsolid = false;
CALL_ORIGINAL(pTraceInfo, ndxLeaf, startFrac, endFrac);
pTraceInfo->m_trace.startsolid = s_bOriginalStartSolid;
return;
}
CALL_ORIGINAL(pTraceInfo, ndxLeaf, startFrac, endFrac);
}
MAKE_HOOK(CM_ClipBoxToBrush_True, S::CM_ClipBoxToBrush_True(), void,
TraceInfo_t* pTraceInfo, void* brush)
{
DEBUG_RETURN(CM_ClipBoxToBrush_True, pTraceInfo, brush);
CALL_ORIGINAL(pTraceInfo, brush);
if (pTraceInfo->m_contents & CONTENTS_NOSTARTSOLID && pTraceInfo->m_trace.startsolid)
{
s_bOriginalStartSolid = true;
pTraceInfo->m_trace.startsolid = false;
}
}
MAKE_HOOK(CM_ClipBoxToBrush_False, S::CM_ClipBoxToBrush_False(), void,
TraceInfo_t* pTraceInfo, void* brush)
{
DEBUG_RETURN(CM_ClipBoxToBrush_False, pTraceInfo, brush);
CALL_ORIGINAL(pTraceInfo, brush);
if (pTraceInfo->m_contents & CONTENTS_NOSTARTSOLID && pTraceInfo->m_trace.startsolid)
{
s_bOriginalStartSolid = true;
pTraceInfo->m_trace.startsolid = false;
}
}
+107 -2
View File
@@ -1,12 +1,52 @@
#include "../SDK/SDK.h"
#ifdef DEBUG_TRACES
#include <optional>
MAKE_SIGNATURE(CM_BoxTrace, "engine.dll", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 41 56 48 83 EC ? 45 0F B6 F1", 0x0);
MAKE_SIGNATURE(CM_ClipBoxToBrush_True, "engine.dll", "48 89 5C 24 ? 57 48 81 EC ? ? ? ? 44 0F B7 42", 0x0);
MAKE_SIGNATURE(CM_ClipBoxToBrush_False, "engine.dll", "48 8B C4 48 89 58 ? 57 48 81 EC ? ? ? ? 44 0F B7 42", 0x0);
MAKE_SIGNATURE(CEngineTrace_ClipTraceToTrace, "engine.dll", "48 89 5C 24 ? 57 48 83 EC ? 80 7A ? ? 49 8B D8", 0x0);
#define MAX_CHECK_COUNT_DEPTH 2
typedef uint32 TraceCounter_t;
typedef CUtlVector<TraceCounter_t> CTraceCounterVec;
struct TraceInfo_t
{
Vector m_start;
Vector m_end;
Vector m_mins;
Vector m_maxs;
Vector m_extents;
Vector m_delta;
Vector m_invDelta;
trace_t m_trace;
trace_t m_stabTrace;
int m_contents;
bool m_ispoint;
bool m_isswept;
void* m_pBSPData;
Vector m_DispStabDir;
int m_bDispHit;
bool m_bCheckPrimary;
int m_nCheckDepth;
TraceCounter_t m_Count[MAX_CHECK_COUNT_DEPTH];
CTraceCounterVec m_BrushCounters[MAX_CHECK_COUNT_DEPTH];
CTraceCounterVec m_DispCounters[MAX_CHECK_COUNT_DEPTH];
};
static bool s_bNoSkip = false;
static std::optional<bool> s_bStartSolid = std::nullopt;
MAKE_HOOK(IEngineTrace_TraceRay, U::Memory.GetVirtual(I::EngineTrace, 4), void,
void* rcx, const Ray_t& ray, unsigned int fMask, ITraceFilter* pTraceFilter, trace_t* pTrace)
{
DEBUG_RETURN(IEngineTrace_TraceRay, rcx, ray, fMask, pTraceFilter, pTrace);
s_bNoSkip = fMask & CONTENTS_NOSKIP;
CALL_ORIGINAL(rcx, ray, fMask, pTraceFilter, pTrace);
#ifdef DEBUG_TRACES
if (Vars::Debug::VisualizeTraces.Value)
{
Vec3 vStart = ray.m_Start + ray.m_StartOffset;
@@ -18,5 +58,70 @@ MAKE_HOOK(IEngineTrace_TraceRay, U::Memory.GetVirtual(I::EngineTrace, 4), void,
G::BoxStorage.emplace_back(vEnd - ray.m_StartOffset, ray.m_Extents * -1, ray.m_Extents, Vec3(), I::GlobalVars->curtime + 0.015f, Color_t(0, 0, 255), Color_t(0, 0, 0, 0), bool(GetAsyncKeyState(VK_MENU) & 0x8000));
}
}
#endif
if (s_bStartSolid)
pTrace->startsolid = s_bStartSolid.value(), s_bStartSolid = std::nullopt;
s_bNoSkip = false;
}
#endif
MAKE_HOOK(CM_BoxTrace, S::CM_BoxTrace(), void,
const Ray_t& ray, int headnode, int brushmask, bool computeEndpt, trace_t& tr)
{
CALL_ORIGINAL(ray, headnode, brushmask, computeEndpt, tr);
if (s_bStartSolid)
tr.startsolid = s_bStartSolid.value(), s_bStartSolid = std::nullopt;
if (s_bNoSkip)
s_bStartSolid = tr.startsolid, tr.startsolid = false;
}
MAKE_HOOK(CM_ClipBoxToBrush_True, S::CM_ClipBoxToBrush_True(), void,
TraceInfo_t* pTraceInfo, void* brush)
{
DEBUG_RETURN(CM_ClipBoxToBrush_True, pTraceInfo, brush);
if (s_bStartSolid)
pTraceInfo->m_trace.startsolid = s_bStartSolid.value(), s_bStartSolid = std::nullopt;
CALL_ORIGINAL(pTraceInfo, brush);
if (s_bNoSkip)
{
s_bStartSolid = pTraceInfo->m_trace.startsolid, pTraceInfo->m_trace.startsolid = false;
if (!s_bStartSolid.value() && !pTraceInfo->m_trace.fractionleftsolid && pTraceInfo->m_trace.fraction != 1.f)
pTraceInfo->m_trace.fractionleftsolid = pTraceInfo->m_trace.fraction - FLT_EPSILON;
}
}
MAKE_HOOK(CM_ClipBoxToBrush_False, S::CM_ClipBoxToBrush_False(), void,
TraceInfo_t* pTraceInfo, void* brush)
{
DEBUG_RETURN(CM_ClipBoxToBrush_False, pTraceInfo, brush);
if (s_bStartSolid)
pTraceInfo->m_trace.startsolid = s_bStartSolid.value(), s_bStartSolid = std::nullopt;
CALL_ORIGINAL(pTraceInfo, brush);
if (s_bNoSkip)
{
s_bStartSolid = pTraceInfo->m_trace.startsolid, pTraceInfo->m_trace.startsolid = false;
if (!s_bStartSolid.value() && !pTraceInfo->m_trace.fractionleftsolid && pTraceInfo->m_trace.fraction != 1.f)
pTraceInfo->m_trace.fractionleftsolid = pTraceInfo->m_trace.fraction - FLT_EPSILON;
}
}
MAKE_HOOK(CEngineTrace_ClipTraceToTrace, S::CEngineTrace_ClipTraceToTrace(), bool,
void* rcx, trace_t& clipTrace, trace_t* pFinalTrace)
{
DEBUG_RETURN(CEngineTrace_ClipTraceToTrace, rcx, clipTrace, pFinalTrace);
if (s_bStartSolid)
pFinalTrace->startsolid = s_bStartSolid.value(), s_bStartSolid = std::nullopt;
if (s_bNoSkip && (!clipTrace.fraction || clipTrace.fraction < pFinalTrace->fractionleftsolid))
return false;
return CALL_ORIGINAL(rcx, clipTrace, pFinalTrace);
}
@@ -7,6 +7,11 @@ int CBaseEntity::GetIntermediateDataSize()
return std::max(GetPredDescMap()->packed_size, 4);
}
Vec3 CBaseEntity::GetOrigin(float flCompression)
{
return m_vecOrigin() + Vec3(flCompression / 2 * sign(m_vecOrigin().x), flCompression / 2 * sign(m_vecOrigin().y), flCompression / 2 * sign(m_vecOrigin().z));
}
Vec3 CBaseEntity::GetSize()
{
return m_vecMaxs() - m_vecMins();
@@ -291,6 +291,7 @@ public:
}
int GetIntermediateDataSize();
Vec3 GetOrigin(float flCompression);
Vec3 GetSize();
Vec3 GetOffset();
Vec3 GetCenter();
@@ -2,6 +2,8 @@
#include "CBasePlayer.h"
#include "CMultiPlayerAnimState.h"
#define PLAYER_ORIGIN_COMPRESSION 0.125f
MAKE_SIGNATURE(CTFPlayer_IsPlayerOnSteamFriendsList, "client.dll", "40 57 48 81 EC ? ? ? ? 48 8B FA E8", 0x0);
MAKE_SIGNATURE(TeamFortress_CalculateMaxSpeed, "client.dll", "88 54 24 ? 53 55", 0x0);
MAKE_SIGNATURE(CTFPlayer_UpdateClientSideAnimation, "client.dll", "48 89 5C 24 ? 57 48 83 EC ? 48 8B D9 E8 ? ? ? ? 48 8B F8 48 85 C0 74 ? 48 8B 00 48 8B CF FF 90 ? ? ? ? 84 C0 75 ? 33 FF 48 3B DF", 0x0);
+1 -1
View File
@@ -55,7 +55,7 @@
#define CONTENTS_TRANSLUCENT 0x10000000 // auto set if any surface has trans
#define CONTENTS_LADDER 0x20000000
#define CONTENTS_HITBOX 0x40000000 // use accurate hitboxes on trace
#define CONTENTS_NOSTARTSOLID 0x80000000 // don't skip entities or displacements when starting in solid
#define CONTENTS_NOSKIP 0x80000000 // don't skip entities or displacements when starting in solid
// NOTE: These are stored in a short in the engine now. Don't use more than 16 bits
@@ -114,7 +114,7 @@ bool CTraceFilterWorldAndPropsOnly::ShouldHitEntity(IHandleEntity* pServerEntity
if (!pServerEntity || pServerEntity == pSkip)
return false;
if (pServerEntity->GetRefEHandle().GetSerialNumber() == (1 << 15))
return I::ClientEntityList->GetClientEntity(0) != pSkip;
return pServerEntity->GetRefEHandle().GetEntryIndex() != iTeam; // just use team variable since cliententitylist can give us nullptrs for some props for whatever reason
auto pEntity = reinterpret_cast<CBaseEntity*>(pServerEntity);
if (iTeam == -1) iTeam = pSkip ? pSkip->m_iTeamNum() : 0;
+2 -1
View File
@@ -375,7 +375,8 @@ NAMESPACE_BEGIN(Vars)
VA_LIST("Regular", "Special light", "Special heavy"),
Regular, SpecialLight, SpecialHeavy);
CVar(SplashGrates, "Splash grates", true, NOSAVE | DEBUGVAR);
CVar(Out2NormalCheck, "Out2 normal check", 0.7f, NOSAVE | DEBUGVAR | SLIDER_CLAMP | SLIDER_PRECISION, -1.f, 1.f, 0.1f);
CVar(Out2NormalMin, "Out2 normal min", -0.7f, NOSAVE | DEBUGVAR | SLIDER_CLAMP | SLIDER_PRECISION, -1.f, 1.f, 0.1f);
CVar(Out2NormalMax, "Out2 normal max", 0.7f, NOSAVE | DEBUGVAR | SLIDER_CLAMP | SLIDER_PRECISION, -1.f, 1.f, 0.1f);
CVar(DeltaCount, "Delta count", 5, NOSAVE | DEBUGVAR, 1, 5);
CVarEnum(DeltaMode, "Delta mode", 0, NOSAVE | DEBUGVAR, nullptr,