add face splash

currently off by default, can be enabled in debug vars under projectile
points on faces currently generated completely randomly
injecting midgame and using face splash will freeze the game temporarily to cache faces
This commit is contained in:
rei-2
2026-03-14 17:45:35 -04:00
parent 07c7ab23f8
commit 0f3a2adeda
165 changed files with 9767 additions and 4274 deletions
+27 -6
View File
@@ -953,6 +953,7 @@
<ClCompile Include="src\Features\Visuals\OffscreenArrows\OffscreenArrows.cpp" />
<ClCompile Include="src\Features\Visuals\SpectatorList\SpectatorList.cpp" />
<ClCompile Include="src\Features\Visuals\Visuals.cpp" />
<ClCompile Include="src\Features\World\World.cpp" />
<ClCompile Include="src\Hooks\bf_read_ReadString.cpp" />
<ClCompile Include="src\Hooks\CAchievementMgr_CheckAchievementsEnabled.cpp" />
<ClCompile Include="src\Hooks\CAttributeManager_AttribHookValue.cpp" />
@@ -966,6 +967,7 @@
<ClCompile Include="src\Hooks\CBasePlayer_CalcObserverView.cpp" />
<ClCompile Include="src\Hooks\CHLTVCamera_CalcView.cpp" />
<ClCompile Include="src\Hooks\CInput_ValidateUserCmd.cpp" />
<ClCompile Include="src\Hooks\CModelLoader_Map_LoadModel.cpp" />
<ClCompile Include="src\Hooks\CTFPlayerShared_ShouldSuppressPrediction.cpp" />
<ClCompile Include="src\Hooks\CTFRocketLauncher_CheckReloadMisfire.cpp" />
<ClCompile Include="src\Hooks\CTFPlayer_FireBullet.cpp" />
@@ -996,7 +998,6 @@
<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_TraceRay.cpp" />
<ClCompile Include="src\Hooks\CNetChannel_SendDatagram.cpp" />
<ClCompile Include="src\Hooks\CNetChannel_SendNetMsg.cpp" />
<ClCompile Include="src\Hooks\COPRenderSprites_Render.cpp" />
@@ -1070,7 +1071,10 @@
<ClCompile Include="src\SDK\Definitions\Main\KeyValues.cpp" />
<ClCompile Include="src\SDK\Definitions\Main\MD5.cpp" />
<ClCompile Include="src\SDK\Definitions\Misc\bitbuf.cpp" />
<ClCompile Include="src\SDK\Definitions\Misc\CByteSwap.cpp" />
<ClCompile Include="src\SDK\Definitions\Misc\ChecksumCRC.cpp" />
<ClCompile Include="src\SDK\Definitions\Misc\CUtlBuffer.cpp" />
<ClCompile Include="src\SDK\Definitions\Misc\CUtlCharConversion.cpp" />
<ClCompile Include="src\SDK\Definitions\NullInterfaces.cpp" />
<ClCompile Include="src\SDK\Events\Events.cpp" />
<ClCompile Include="src\SDK\Helpers\Draw\Draw.cpp" />
@@ -1252,7 +1256,10 @@
<ClInclude Include="src\Features\Visuals\OffscreenArrows\OffscreenArrows.h" />
<ClInclude Include="src\Features\Visuals\SpectatorList\SpectatorList.h" />
<ClInclude Include="src\Features\Visuals\Visuals.h" />
<ClInclude Include="src\Features\World\World.h" />
<ClInclude Include="src\Hooks\Direct3DDevice9.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CCollisionBSPData.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CStaticPropMgr.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CTFGameRules.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CTFGCClientSystem.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CHLClient.h" />
@@ -1269,15 +1276,23 @@
<ClInclude Include="src\SDK\Definitions\Interfaces\IVModelRender.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\Prediction.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\ViewRenderBeams.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\WorldBrushData.h" />
<ClInclude Include="src\SDK\Definitions\Main\CBaseObject.h" />
<ClInclude Include="src\SDK\Definitions\Main\CBaseTrace.h" />
<ClInclude Include="src\SDK\Definitions\Main\CCaptureFlag.h" />
<ClInclude Include="src\SDK\Definitions\Main\CCollisionProperty.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CDispCollTree.h" />
<ClInclude Include="src\SDK\Definitions\Main\CEconEntity.h" />
<ClInclude Include="src\SDK\Definitions\Main\CEconWearable.h" />
<ClInclude Include="src\SDK\Definitions\Main\CEntitySphereQuery.h" />
<ClInclude Include="src\SDK\Definitions\Main\CGameTrace.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CHLTVCamera.h" />
<ClInclude Include="src\SDK\Definitions\Main\CMapLoadHelper.h" />
<ClInclude Include="src\SDK\Definitions\Main\CStaticProp.h" />
<ClInclude Include="src\SDK\Definitions\Main\ICollideable.h" />
<ClInclude Include="src\SDK\Definitions\Main\Ray.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CByteSwap.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CDiscardableArray.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CInterpolatedVar.h" />
<ClInclude Include="src\SDK\Definitions\Main\CModel.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\IEngineTrace.h" />
@@ -1291,15 +1306,21 @@
<ClInclude Include="src\SDK\Definitions\Misc\bitvec.h" />
<ClInclude Include="src\SDK\Definitions\Misc\BSPFlags.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\IMoveHelper.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CRangeValidatedArray.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlBuffer.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlCharConversion.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlIntrusiveList.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlMemory.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlObjectReference.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlString.h" />
<ClInclude Include="src\SDK\Definitions\Misc\dt_send.h" />
<ClInclude Include="src\SDK\Definitions\Main\IDispInfo.h" />
<ClInclude Include="src\SDK\Definitions\Misc\IMatchGroupDescription.h" />
<ClInclude Include="src\SDK\Definitions\Misc\IMDLCache.h" />
<ClInclude Include="src\SDK\Definitions\Misc\IPrediction.h" />
<ClInclude Include="src\SDK\Definitions\Misc\ISpatialPartition.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\ISpatialPartition.h" />
<ClInclude Include="src\SDK\Definitions\Misc\ServerClass.h" />
<ClInclude Include="src\SDK\Definitions\Misc\SmartPtr.h" />
<ClInclude Include="src\SDK\Definitions\Misc\UtlIntrusiveList.h" />
<ClInclude Include="src\SDK\Definitions\Misc\UtlObjectReference.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CSmartPtr.h" />
<ClInclude Include="src\SDK\Definitions\Misc\VCollide.h" />
<ClInclude Include="src\SDK\Definitions\Steam\ISteamAppList.h" />
<ClInclude Include="src\SDK\Definitions\Steam\ISteamApps.h" />
@@ -1403,7 +1424,7 @@
<ClInclude Include="src\SDK\Definitions\Main\ITexture.h" />
<ClInclude Include="src\SDK\Definitions\Main\KeyValues.h" />
<ClInclude Include="src\SDK\Definitions\Main\NetChannel.h" />
<ClInclude Include="src\SDK\Definitions\Main\UtlVector.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlVector.h" />
<ClInclude Include="src\SDK\Definitions\Misc\Activity.h" />
<ClInclude Include="src\SDK\Definitions\Misc\AnalogCode.h" />
<ClInclude Include="src\SDK\Definitions\Misc\BaseTypes.h" />
+27 -6
View File
@@ -181,7 +181,6 @@
<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_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" />
@@ -201,6 +200,11 @@
<ClCompile Include="src\Hooks\CTFPlayerShared_ShouldSuppressPrediction.cpp" />
<ClCompile Include="src\Hooks\CHLTVCamera_CalcView.cpp" />
<ClCompile Include="src\Hooks\CTFPlayer_InSameDisguisedTeam.cpp" />
<ClCompile Include="src\SDK\Definitions\Misc\CUtlBuffer.cpp" />
<ClCompile Include="src\SDK\Definitions\Misc\CUtlCharConversion.cpp" />
<ClCompile Include="src\SDK\Definitions\Misc\CByteSwap.cpp" />
<ClCompile Include="src\Features\World\World.cpp" />
<ClCompile Include="src\Hooks\CModelLoader_Map_LoadModel.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\Utils\UtlVector\UtlVector.h" />
@@ -265,7 +269,7 @@
<ClInclude Include="src\SDK\Definitions\Main\ITexture.h" />
<ClInclude Include="src\SDK\Definitions\Main\KeyValues.h" />
<ClInclude Include="src\SDK\Definitions\Main\NetChannel.h" />
<ClInclude Include="src\SDK\Definitions\Main\UtlVector.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlVector.h" />
<ClInclude Include="src\SDK\Definitions\Misc\Activity.h" />
<ClInclude Include="src\SDK\Definitions\Misc\AnalogCode.h" />
<ClInclude Include="src\SDK\Definitions\Misc\BaseTypes.h" />
@@ -435,7 +439,7 @@
<ClInclude Include="src\SDK\Definitions\Misc\BSPFlags.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\IMoveHelper.h" />
<ClInclude Include="src\SDK\Definitions\Misc\IPrediction.h" />
<ClInclude Include="src\SDK\Definitions\Misc\ISpatialPartition.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\ISpatialPartition.h" />
<ClInclude Include="src\SDK\Definitions\Misc\VCollide.h" />
<ClInclude Include="src\SDK\Helpers\Particles\Particles.h" />
<ClInclude Include="src\SDK\Helpers\TraceFilters\TraceFilters.h" />
@@ -452,10 +456,8 @@
<ClInclude Include="src\SDK\Definitions\Misc\dt_send.h" />
<ClInclude Include="src\SDK\Definitions\Misc\bitvec.h" />
<ClInclude Include="src\SDK\Definitions\Misc\ServerClass.h" />
<ClInclude Include="src\SDK\Definitions\Misc\SmartPtr.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CSmartPtr.h" />
<ClInclude Include="src\SDK\Definitions\Main\CParticleProperty.h" />
<ClInclude Include="src\SDK\Definitions\Misc\UtlObjectReference.h" />
<ClInclude Include="src\SDK\Definitions\Misc\UtlIntrusiveList.h" />
<ClInclude Include="src\SDK\Definitions\Main\CCaptureFlag.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\IPanel.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CTFGCClientSystem.h" />
@@ -587,6 +589,25 @@
<ClInclude Include="src\SDK\Definitions\Main\CPredictionCopy.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CHLTVCamera.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CThirdPersonManager.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CCollisionBSPData.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlCharConversion.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlIntrusiveList.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlMemory.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlObjectReference.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlBuffer.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CRangeValidatedArray.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CByteSwap.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CDiscardableArray.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CStaticPropMgr.h" />
<ClInclude Include="src\SDK\Definitions\Main\CStaticProp.h" />
<ClInclude Include="src\SDK\Definitions\Main\ICollideable.h" />
<ClInclude Include="src\SDK\Definitions\Main\CMapLoadHelper.h" />
<ClInclude Include="src\SDK\Definitions\Main\IDispInfo.h" />
<ClInclude Include="src\SDK\Definitions\Main\Ray.h" />
<ClInclude Include="src\SDK\Definitions\Misc\CUtlString.h" />
<ClInclude Include="src\Features\World\World.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\WorldBrushData.h" />
<ClInclude Include="src\SDK\Definitions\Interfaces\CDispCollTree.h" />
</ItemGroup>
<ItemGroup>
<None Include="cpp.hint" />
+8 -12
View File
@@ -30,27 +30,23 @@
void Hooks::name::Init() { Hook.Create(reinterpret_cast<void *>(address), Func); } \
type callconvo Hooks::name::Func(__VA_ARGS__)
#define CALL_ORIGINAL Hook.Original<FN>()
#define MAKE_INTERFACE_VERSION(type, name, dll, version) namespace I { inline type *name = nullptr; } \
#define MAKE_INTERFACE_VERSION(type, symbol, dll, version, ...) namespace I { inline type *symbol = nullptr; } \
namespace MAKE_INTERFACE_SCOPE \
{\
inline InterfaceInit_t name##InterfaceInit_t(reinterpret_cast<void **>(&I::name), dll, version, -1, 0); \
inline InterfaceInit_t symbol##InterfaceInit_t(reinterpret_cast<void**>(&I::symbol), dll, version, 0, __VA_ARGS__); \
}
#define MAKE_INTERFACE_SIGNATURE(type, name, dll, version, offset, deref) namespace I { inline type *name = nullptr; } \
#define MAKE_INTERFACE_EXPORT(type, symbol, dll, name, deref, ...) namespace I { inline type *symbol = nullptr; } \
namespace MAKE_INTERFACE_SCOPE \
{\
inline InterfaceInit_t name##InterfaceInit_t(reinterpret_cast<void **>(&I::name), dll, version, offset, deref); \
inline InterfaceInit_t symbol##InterfaceInit_t(reinterpret_cast<void**>(&I::symbol), dll, name, 1, 0, deref, __VA_ARGS__); \
}
#define MAKE_INTERFACE_NULL(type, name) namespace I { inline type *name = nullptr; }
#define MAKE_INTERFACE_VERSION_SEARCH(type, name, dll, version) namespace I { inline type *name = nullptr; } \
#define MAKE_INTERFACE_SIGNATURE(type, symbol, dll, signature, offset, deref, ...) namespace I { inline type *symbol = nullptr; } \
namespace MAKE_INTERFACE_SCOPE \
{\
inline InterfaceInit_t name##InterfaceInit_t(reinterpret_cast<void **>(&I::name), dll, version, -1, 0, true); \
}
#define MAKE_INTERFACE_SIGNATURE_SEARCH(type, name, dll, signature, offset, deref) namespace I { inline type *name = nullptr; } \
namespace MAKE_INTERFACE_SCOPE \
{\
inline InterfaceInit_t name##InterfaceInit_t(reinterpret_cast<void **>(&I::name), dll, signature, offset, deref, true); \
inline InterfaceInit_t symbol##InterfaceInit_t(reinterpret_cast<void**>(&I::symbol), dll, signature, 2, offset, deref, __VA_ARGS__); \
}
#define MAKE_INTERFACE_NULL(type, symbol) namespace I { inline type *symbol = nullptr; }
#define NETVAR(_name, type, table, name) inline type& _name() \
{ \
+1 -1
View File
@@ -90,7 +90,7 @@ void CAimbot::Draw(CTFPlayer* pLocal)
if (Vars::Aimbot::General::AimFOV.Value >= 90.f)
return;
float flRadius = tanf(DEG2RAD(Vars::Aimbot::General::AimFOV.Value)) / tanf(DEG2RAD(m_flFOV) / 2) * float(H::Draw.m_nScreenW) * (4.f / 6.f) / (16.f / 9.f);
float flRadius = tanf(DEG2RAD(Vars::Aimbot::General::AimFOV.Value)) / tanf(DEG2RAD(G::FOV) / 2) * float(H::Draw.m_nScreenW) * (4.f / 6.f) / (16.f / 9.f);
H::Draw.LineCircle(H::Draw.m_nScreenW / 2, H::Draw.m_nScreenH / 2, flRadius, 68, Vars::Colors::FOVCircle.Value);
}
-1
View File
@@ -19,7 +19,6 @@ public:
bool m_bRan = false;
bool m_bRunningSecondary = false;
float m_flFOV = 0.f;
DrawPath_t m_tPath = {};
};
@@ -41,16 +41,16 @@ void CAimbotGlobal::SortTargetsPost(std::vector<Target_t>& vTargets, int iMethod
{
case Vars::Aimbot::General::TargetSelectionEnum::Hybrid:
std::sort(vTargets.begin(), vTargets.end(), [&](const Target_t& a, const Target_t& b) -> bool
{
return a.m_flFOVTo < b.m_flFOVTo;
});
{
return a.m_flFOVTo < b.m_flFOVTo;
});
break;
}
std::sort(vTargets.begin(), vTargets.end(), [&](const Target_t& a, const Target_t& b) -> bool
{
return a.m_nPriority > b.m_nPriority;
});
{
return a.m_nPriority > b.m_nPriority;
});
}
// this won't prevent shooting bones outside of fov
@@ -1,10 +1,10 @@
#include "AimbotHitscan.h"
#include "../Aimbot.h"
#include "../../Resolver/Resolver.h"
#include "../../Ticks/Ticks.h"
#include "../../Visuals/Visuals.h"
#include "../../Resolver/Resolver.h"
#include "../../Simulation/MovementSimulation/MovementSimulation.h"
#include "../../Visuals/Visuals.h"
static inline std::vector<Target_t> GetTargets(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
{
@@ -191,7 +191,7 @@ int CAimbotHitscan::GetHitboxPriority(int nHitbox, CTFPlayer* pLocal, CTFWeaponB
{
auto pSniperRifle = pWeapon->As<CTFSniperRifle>();
int iDamage = std::ceil(std::max(pSniperRifle->m_flChargedDamage(), 50.f) * pSniperRifle->GetBodyshotMult(pPlayer));
int iDamage = ceilf(std::max(pSniperRifle->m_flChargedDamage(), 50.f) * pSniperRifle->GetBodyshotMult(pPlayer));
if (pPlayer->m_iHealth() <= iDamage)
bHeadshot = false;
break;
@@ -203,7 +203,7 @@ int CAimbotHitscan::GetHitboxPriority(int nHitbox, CTFPlayer* pLocal, CTFWeaponB
float flDistTo = pTarget->m_vecOrigin().DistTo(pLocal->m_vecOrigin());
float flMult = SDK::AttribHookValue(1, "mult_dmg", pWeapon);
int iDamage = std::ceil(Math::RemapVal(flDistTo, 90.f, 900.f, 60.f, 21.f) * flMult);
int iDamage = ceilf(Math::RemapVal(flDistTo, 90.f, 900.f, 60.f, 21.f) * flMult);
if (pPlayer->m_iHealth() <= iDamage)
bHeadshot = false;
}
@@ -281,13 +281,13 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
if (pDoubletapAngle && tTarget.m_iTargetType == TargetEnum::Player)
{
std::sort(vRecords.begin(), vRecords.end(), [&](const TickRecord* a, const TickRecord* b) -> bool
{
Vec3 vPosA = { a->m_aBones[iTargetBone][0][3], a->m_aBones[iTargetBone][1][3], a->m_aBones[iTargetBone][2][3] };
Vec3 vPosB = { a->m_aBones[iTargetBone][0][3], a->m_aBones[iTargetBone][1][3], a->m_aBones[iTargetBone][2][3] };
Vec3 vAnglesA = Math::CalcAngle(m_vEyePos, vPosA);
Vec3 vAnglesB = Math::CalcAngle(m_vEyePos, vPosB);
return pDoubletapAngle->DeltaAngle(vAnglesA).Length2D() < pDoubletapAngle->DeltaAngle(vAnglesB).Length2D();
});
{
Vec3 vPosA = { a->m_aBones[iTargetBone][0][3], a->m_aBones[iTargetBone][1][3], a->m_aBones[iTargetBone][2][3] };
Vec3 vPosB = { a->m_aBones[iTargetBone][0][3], a->m_aBones[iTargetBone][1][3], a->m_aBones[iTargetBone][2][3] };
Vec3 vAnglesA = Math::CalcAngle(m_vEyePos, vPosA);
Vec3 vAnglesB = Math::CalcAngle(m_vEyePos, vPosB);
return pDoubletapAngle->DeltaAngle(vAnglesA).Length2D() < pDoubletapAngle->DeltaAngle(vAnglesB).Length2D();
});
}
int iReturn = false;
@@ -365,9 +365,9 @@ int CAimbotHitscan::CanHit(Target_t& tTarget, CTFPlayer* pLocal, CTFWeaponBase*
vHitboxes.emplace_back(pBox, nHitbox, iPriority);
}
std::sort(vHitboxes.begin(), vHitboxes.end(), [&](const auto& a, const auto& b) -> bool
{
return std::get<2>(a) < std::get<2>(b);
});
{
return std::get<2>(a) < std::get<2>(b);
});
float flModelScale = tTarget.m_pEntity->As<CBaseAnimating>()->m_flModelScale();
float flBoneScale = Vars::Aimbot::Hitscan::BoneSizeMinimumScale.Value;
@@ -587,13 +587,13 @@ bool CAimbotHitscan::ShouldFire(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
auto pPlayer = tTarget.m_pEntity->As<CTFPlayer>();
if (tTarget.m_nAimedHitbox == HITBOX_HEAD && (pWeapon->GetWeaponID() != TF_WEAPON_SNIPERRIFLE_CLASSIC || pSniperRifle->m_flChargedDamage() == 150.f))
{
int iDamage = std::ceil(std::max(pSniperRifle->m_flChargedDamage(), 50.f) * pSniperRifle->GetHeadshotMult(pPlayer));
int iDamage = ceilf(std::max(pSniperRifle->m_flChargedDamage(), 50.f) * pSniperRifle->GetHeadshotMult(pPlayer));
if (pPlayer->m_iHealth() <= iDamage && (G::CanHeadshot || pLocal->IsCritBoosted()))
break;
}
else
{
int iDamage = std::ceil(std::max(pSniperRifle->m_flChargedDamage(), 50.f) * pSniperRifle->GetBodyshotMult(pPlayer));
int iDamage = ceilf(std::max(pSniperRifle->m_flChargedDamage(), 50.f) * pSniperRifle->GetBodyshotMult(pPlayer));
if (pPlayer->m_iHealth() <= iDamage)
break;
}
@@ -601,7 +601,7 @@ bool CAimbotHitscan::ShouldFire(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUser
else if (tTarget.m_pEntity->IsBuilding())
{
auto pBuilding = tTarget.m_pEntity->As<CBaseObject>();
int iDamage = std::ceil(std::max(pSniperRifle->m_flChargedDamage(), 50.f));
int iDamage = ceilf(std::max(pSniperRifle->m_flChargedDamage(), 50.f));
if (pBuilding->m_iHealth() <= iDamage)
break;
}
@@ -208,7 +208,7 @@ void CAimbotMelee::UpdateInfo(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCm
G::BoxStorage.clear();
G::PathStorage.clear();
for (auto& [_, vPath] : m_mPaths)
for (auto& vPath : m_mPaths | std::views::values)
{
if (Vars::Colors::PlayerPathIgnoreZ.Value.a)
G::PathStorage.emplace_back(vPath, I::GlobalVars->curtime + Vars::Visuals::Simulation::DrawDuration.Value, Vars::Colors::PlayerPathIgnoreZ.Value, Vars::Visuals::Simulation::PlayerPath.Value);
@@ -218,7 +218,7 @@ void CAimbotMelee::UpdateInfo(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCm
}
}
for (auto& [_, tMoveStorage] : mMoveStorage)
for (auto& tMoveStorage : mMoveStorage | std::views::values)
F::MoveSim.Restore(tMoveStorage);
}
@@ -278,34 +278,34 @@ bool CAimbotMelee::CanBackstab(CBaseEntity* pTarget, CTFPlayer* pLocal, Vec3 vEy
float flPosVsOwnerViewMinDot = 0.5f + flExtra;
float flViewAnglesMinDot = -0.3f + 0.0031f; // 0.00306795676297 ?
auto TestDots = [&](Vec3 vTargetAngles)
{
Vec3 vOwnerForward; Math::AngleVectors(vEyeAngles, &vOwnerForward);
vOwnerForward.Normalize2D();
auto fTestDots = [&](Vec3 vTargetAngles)
{
Vec3 vOwnerForward; Math::AngleVectors(vEyeAngles, &vOwnerForward);
vOwnerForward.Normalize2D();
Vec3 vTargetForward; Math::AngleVectors(vTargetAngles, &vTargetForward);
vTargetForward.Normalize2D();
Vec3 vTargetForward; Math::AngleVectors(vTargetAngles, &vTargetForward);
vTargetForward.Normalize2D();
const float flPosVsTargetViewDot = vToTarget.Dot(vTargetForward); // Behind?
const float flPosVsOwnerViewDot = vToTarget.Dot(vOwnerForward); // Facing?
const float flViewAnglesDot = vTargetForward.Dot(vOwnerForward); // Facestab?
const float flPosVsTargetViewDot = vToTarget.Dot(vTargetForward); // Behind?
const float flPosVsOwnerViewDot = vToTarget.Dot(vOwnerForward); // Facing?
const float flViewAnglesDot = vTargetForward.Dot(vOwnerForward); // Facestab?
return flPosVsTargetViewDot > flPosVsTargetViewMinDot && flPosVsOwnerViewDot > flPosVsOwnerViewMinDot && flViewAnglesDot > flViewAnglesMinDot;
};
return flPosVsTargetViewDot > flPosVsTargetViewMinDot && flPosVsOwnerViewDot > flPosVsOwnerViewMinDot && flViewAnglesDot > flViewAnglesMinDot;
};
Vec3 vTargetAngles = { 0.f, H::Entities.GetEyeAngles(pTarget->entindex()).y, 0.f };
if (!Vars::Aimbot::Melee::BackstabAccountPing.Value)
{
if (!TestDots(vTargetAngles))
if (!fTestDots(vTargetAngles))
return false;
}
else
{
if (Vars::Aimbot::Melee::BackstabDoubleTest.Value && !TestDots(vTargetAngles))
if (Vars::Aimbot::Melee::BackstabDoubleTest.Value && !fTestDots(vTargetAngles))
return false;
vTargetAngles.y += H::Entities.GetDeltaAngles(pTarget->entindex()).y;
if (!TestDots(vTargetAngles))
if (!fTestDots(vTargetAngles))
return false;
}
File diff suppressed because it is too large Load Diff
@@ -5,8 +5,8 @@
#include "../../Simulation/MovementSimulation/MovementSimulation.h"
#include "../../Simulation/ProjectileSimulation/ProjectileSimulation.h"
Enum(PointType, None = 0, Out = 1 << 0, In = 1 << 1, Out2 = 1 << 2, In2 = 1 << 3)
Enum(Calculated, Pending, Good, Time, Bad)
Enum(CalculateFlags, None = 0, TwoPass = 1 << 0, SetupClip = 1 << 1, AccountDrag = 1 << 2, Accuracy = TwoPass | SetupClip | AccountDrag)
Enum(CalculateResult, Pending, Good, Time, Bad)
struct Info_t
{
@@ -19,7 +19,6 @@ struct Info_t
Vec3 m_vTargetEye = {};
float m_flLatency = 0.f;
Vec3 m_vHull = {};
Vec3 m_vOffset = {};
Vec3 m_vAngFix = {};
@@ -30,8 +29,8 @@ struct Info_t
float m_flBoundingTime = 0.f;
float m_flOffsetTime = 0.f;
int m_iSplashCount = 0;
int m_iSplashMode = 0;
int m_iArmTime = 0;
float m_flNormalOffset = 0.f;
};
struct Solution_t
@@ -39,7 +38,7 @@ struct Solution_t
float m_flPitch = 0.f;
float m_flYaw = 0.f;
float m_flTime = 0.f;
int m_iCalculated = CalculatedEnum::Pending;
int m_iCalculated = CalculateResultEnum::Pending;
};
struct Point_t
{
@@ -69,11 +68,10 @@ class CAimbotProjectile
{
private:
std::unordered_map<int, Vec3> GetDirectPoints();
std::vector<Point_t> GetSplashPoints(Vec3 vOrigin, std::vector<std::pair<Vec3, int>>& vSpherePoints, int iSimTime);
void SetupSplashPoints(Vec3& vPos, std::vector<std::pair<Vec3, int>>& vSpherePoints, std::vector<Vec3>& vSimplePoints);
std::vector<Point_t> GetSplashPointsSimple(Vec3 vOrigin, std::vector<Vec3>& vSpherePoints, int iSimTime);
void SetupSplashPoints(Vec3& vOrigin, std::vector<Vec3>& vSplashPoints);
std::vector<Point_t> GetSplashPoints(Vec3 vOrigin, std::vector<Vec3>& vSplashPoints, int iSimTime);
void CalculateAngle(const Vec3& vLocalPos, const Vec3& vTargetPos, int iSimTime, Solution_t& tOut, bool bAccuracy = true, int iTolerance = -1);
void CalculateAngle(const Vec3& vLocalPos, const Vec3& vTargetPos, int iSimTime, Solution_t& tOut, int iFlags = CalculateFlagsEnum::Accuracy, int iTolerance = -1);
bool TestAngle(const Vec3& vPoint, const Vec3& vAngles, int iSimTime, bool bSplash, bool bSecondTest = false);
bool HandlePoint(const Vec3& vOrigin, int iSimTime, float flPitch, float flYaw, float flTime, const Vec3& vPoint, bool bSplash = false);
@@ -92,6 +90,7 @@ private:
Info_t m_tInfo = {};
MoveStorage m_tMoveStorage = {};
ProjectileInfo m_tProjInfo = {};
std::vector<Vec3> m_vSplashPoints = {};
bool m_bLastTickHeld = false;
@@ -295,16 +295,16 @@ void CAutoHeal::GetDangers(CTFPlayer* pTarget, bool bVaccinator, float& flBullet
bool bClassic = nWeaponID == TF_WEAPON_SNIPERRIFLE_CLASSIC;
bool bHeadshot = pWeapon->As<CTFSniperRifle>()->GetRifleType() != RIFLE_JARATE;
bool bPiss = SDK::AttribHookValue(0, "jarate_duration", pWeapon) > 0;
auto GetSniperDot = [](CBaseEntity* pEntity) -> CSniperDot*
auto fGetSniperDot = [](CBaseEntity* pEntity) -> CSniperDot*
{
for (auto pDot : H::Entities.GetGroup(EntityEnum::SniperDots))
{
for (auto pDot : H::Entities.GetGroup(EntityEnum::SniperDots))
{
if (pDot->m_hOwnerEntity().Get() == pEntity)
return pDot->As<CSniperDot>();
}
return nullptr;
};
if (CSniperDot* pPlayerDot = GetSniperDot(pEntity))
if (pDot->m_hOwnerEntity().Get() == pEntity)
return pDot->As<CSniperDot>();
}
return nullptr;
};
if (CSniperDot* pPlayerDot = fGetSniperDot(pEntity))
{
float flChargeTime = std::max(SDK::AttribHookValue(3.f, "mult_sniper_charge_per_sec", pWeapon), 1.5f);
flDamage = Math::RemapVal(TICKS_TO_TIME(I::ClientState->m_ClockDriftMgr.m_nServerTick) - pPlayerDot->m_flChargeStartTime() - 0.3f, 0.f, flChargeTime, 50.f, 150.f);
@@ -596,9 +596,9 @@ void CAutoHeal::AutoVaccinator(CTFPlayer* pLocal, CWeaponMedigun* pWeapon, CUser
for (auto pTarget : vTargets)
GetDangers(pTarget, true, vResistDangers[MEDIGUN_BULLET_RESIST].first, vResistDangers[MEDIGUN_BLAST_RESIST].first, vResistDangers[MEDIGUN_FIRE_RESIST].first);
std::sort(vResistDangers.begin(), vResistDangers.end(), [&](const std::pair<float, int>& a, const std::pair<float, int>& b) -> bool
{
return a.first > b.first;
});
{
return a.first > b.first;
});
int iTargetResist = vResistDangers.front().second;
float flTargetDanger = vResistDangers.front().first;
@@ -167,17 +167,17 @@ void CAutoRocketJump::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* p
if (!pLocal->IsOnGround() || pLocal->IsSwimming())
break;
auto WillHit = [](CTFPlayer* pLocal, const Vec3& vOrigin, const Vec3& vPoint)
{
const Vec3 vOriginal = pLocal->GetAbsOrigin();
pLocal->SetAbsOrigin(vOrigin);
Vec3 vPos; pLocal->m_Collision()->CalcNearestPoint(vPoint, &vPos);
pLocal->SetAbsOrigin(vOriginal);
auto fWillHit = [](CTFPlayer* pLocal, const Vec3& vOrigin, const Vec3& vPoint)
{
const Vec3 vOriginal = pLocal->GetAbsOrigin();
pLocal->SetAbsOrigin(vOrigin);
Vec3 vPos; pLocal->m_Collision()->CalcNearestPoint(vPoint, &vPos);
pLocal->SetAbsOrigin(vOriginal);
return vPoint.DistTo(vPos) < TF_ROCKET_RADIUS_FOR_RJS && SDK::VisPosWorld(pLocal, pLocal, vPoint, vOrigin + pLocal->m_vecViewOffset(), MASK_SHOT);
};
return vPoint.DistTo(vPos) < TF_ROCKET_RADIUS_FOR_RJS && SDK::VisPosWorld(pLocal, pLocal, vPoint, vOrigin + pLocal->m_vecViewOffset(), MASK_SHOT);
};
bWillHit = WillHit(pLocal, tMoveStorage.m_MoveData.m_vecAbsOrigin, trace.endpos + trace.plane.normal);
bWillHit = fWillHit(pLocal, tMoveStorage.m_MoveData.m_vecAbsOrigin, trace.endpos + trace.plane.normal);
if (bWillHit)
{
m_iDelay = n;
+43 -43
View File
@@ -180,23 +180,23 @@ std::vector<TickRecord*> CBacktrack::GetValidRecords(std::vector<TickRecord*>& v
{
if (bDistance)
std::sort(vReturn.begin(), vReturn.end(), [&](const TickRecord* a, const TickRecord* b) -> bool
{
if (Vars::Backtrack::PreferOnShot.Value && a->m_bOnShot != b->m_bOnShot)
return a->m_bOnShot > b->m_bOnShot;
{
if (Vars::Backtrack::PreferOnShot.Value && a->m_bOnShot != b->m_bOnShot)
return a->m_bOnShot > b->m_bOnShot;
return pLocal->m_vecOrigin().DistTo(a->m_vOrigin) < pLocal->m_vecOrigin().DistTo(b->m_vOrigin);
});
return pLocal->m_vecOrigin().DistTo(a->m_vOrigin) < pLocal->m_vecOrigin().DistTo(b->m_vOrigin);
});
else
{
std::sort(vReturn.begin(), vReturn.end(), [&](const TickRecord* a, const TickRecord* b) -> bool
{
if (Vars::Backtrack::PreferOnShot.Value && a->m_bOnShot != b->m_bOnShot)
return a->m_bOnShot > b->m_bOnShot;
{
if (Vars::Backtrack::PreferOnShot.Value && a->m_bOnShot != b->m_bOnShot)
return a->m_bOnShot > b->m_bOnShot;
const float flADelta = flCorrect - TICKS_TO_TIME(iServerTick - TIME_TO_TICKS(a->m_flSimTime + flTimeMod));
const float flBDelta = flCorrect - TICKS_TO_TIME(iServerTick - TIME_TO_TICKS(b->m_flSimTime + flTimeMod));
return fabsf(flADelta) < fabsf(flBDelta);
});
const float flADelta = flCorrect - TICKS_TO_TIME(iServerTick - TIME_TO_TICKS(a->m_flSimTime + flTimeMod));
const float flBDelta = flCorrect - TICKS_TO_TIME(iServerTick - TIME_TO_TICKS(b->m_flSimTime + flTimeMod));
return fabsf(flADelta) < fabsf(flBDelta);
});
}
}
@@ -352,41 +352,41 @@ void CBacktrack::AdjustPing(CNetChannel* pNetChan)
{
m_nOldInSequenceNr = pNetChan->m_nInSequenceNr, m_nOldInReliableState = pNetChan->m_nInReliableState;
auto Set = [&]()
auto fSet = [&]()
{
if (!Vars::Backtrack::Latency.Value)
return 0.f;
auto pLocal = H::Entities.GetLocal();
if (!pLocal || !pLocal->m_iClass())
return 0.f;
static auto host_timescale = H::ConVars.FindVar("host_timescale");
float flTimescale = host_timescale->GetFloat();
static float flStaticReal = 0.f;
float flFake = GetWishFake(), flReal = TICKS_TO_TIME(pLocal->m_nTickBase() - m_nOldTickBase);
flStaticReal += (flReal + 5 * TICK_INTERVAL - flStaticReal) * 0.1f;
int nInReliableState = pNetChan->m_nInReliableState, nInSequenceNr = pNetChan->m_nInSequenceNr; float flLatency = 0.f;
for (auto& cSequence : m_dSequences)
{
if (!Vars::Backtrack::Latency.Value)
return 0.f;
nInReliableState = cSequence.m_nInReliableState;
nInSequenceNr = cSequence.m_nSequenceNr;
flLatency = (I::GlobalVars->realtime - cSequence.m_flTime) * flTimescale - TICK_INTERVAL;
auto pLocal = H::Entities.GetLocal();
if (!pLocal || !pLocal->m_iClass())
return 0.f;
if (flLatency > flFake || m_nLastInSequenceNr >= cSequence.m_nSequenceNr || flLatency > m_flMaxUnlag - flStaticReal)
break;
}
if (flLatency > 1.f) // hacky failsafe
return 0.f;
static auto host_timescale = H::ConVars.FindVar("host_timescale");
float flTimescale = host_timescale->GetFloat();
pNetChan->m_nInReliableState = nInReliableState;
pNetChan->m_nInSequenceNr = nInSequenceNr;
return flLatency;
};
static float flStaticReal = 0.f;
float flFake = GetWishFake(), flReal = TICKS_TO_TIME(pLocal->m_nTickBase() - m_nOldTickBase);
flStaticReal += (flReal + 5 * TICK_INTERVAL - flStaticReal) * 0.1f;
int nInReliableState = pNetChan->m_nInReliableState, nInSequenceNr = pNetChan->m_nInSequenceNr; float flLatency = 0.f;
for (auto& cSequence : m_dSequences)
{
nInReliableState = cSequence.m_nInReliableState;
nInSequenceNr = cSequence.m_nSequenceNr;
flLatency = (I::GlobalVars->realtime - cSequence.m_flTime) * flTimescale - TICK_INTERVAL;
if (flLatency > flFake || m_nLastInSequenceNr >= cSequence.m_nSequenceNr || flLatency > m_flMaxUnlag - flStaticReal)
break;
}
if (flLatency > 1.f) // hacky failsafe
return 0.f;
pNetChan->m_nInReliableState = nInReliableState;
pNetChan->m_nInSequenceNr = nInSequenceNr;
return flLatency;
};
auto flLatency = Set();
auto flLatency = fSet();
m_nLastInSequenceNr = pNetChan->m_nInSequenceNr;
if (Vars::Backtrack::Latency.Value || m_flFakeLatency)
+40 -40
View File
@@ -304,49 +304,49 @@ void CBinds::RemoveBind(int iBind, bool bForce)
}
std::vector<int> vErases = {};
std::function<void(int)> searchBinds = [&](int iIndex)
std::function<void(int)> fSearchBinds = [&](int iIndex)
{
for (int iBind = 0; iBind < m_vBinds.size(); iBind++)
{
for (int iBind = 0; iBind < m_vBinds.size(); iBind++)
{
auto& tBind = m_vBinds[iBind];
if (iIndex == tBind.m_iParent && iIndex != iBind)
searchBinds(iBind);
}
vErases.push_back(iIndex);
};
auto removeBind = [&](int iIndex)
auto& tBind = m_vBinds[iBind];
if (iIndex == tBind.m_iParent && iIndex != iBind)
fSearchBinds(iBind);
}
vErases.push_back(iIndex);
};
auto fRemoveBind = [&](int iIndex)
{
if (iIndex < m_vBinds.size())
m_vBinds.erase(std::next(m_vBinds.begin(), iIndex));
for (auto& tBind : m_vBinds)
{
if (iIndex < m_vBinds.size())
m_vBinds.erase(std::next(m_vBinds.begin(), iIndex));
for (auto& tBind : m_vBinds)
{
if (tBind.m_iParent != DEFAULT_BIND && tBind.m_iParent > iIndex)
tBind.m_iParent--;
}
if (tBind.m_iParent != DEFAULT_BIND && tBind.m_iParent > iIndex)
tBind.m_iParent--;
}
for (auto& pBase : G::Vars)
{
Remove(bool, iIndex)
else Remove(int, iIndex)
else Remove(float, iIndex)
else Remove(IntRange_t, iIndex)
else Remove(FloatRange_t, iIndex)
else Remove(std::string, iIndex)
else Remove(VA_LIST(std::vector<std::pair<std::string, Color_t>>), iIndex)
else Remove(Color_t, iIndex)
else Remove(Gradient_t, iIndex)
else Remove(Vec3, iIndex)
else Remove(DragBox_t, iIndex)
else Remove(WindowBox_t, iIndex)
}
};
searchBinds(iBind);
std::sort(vErases.begin(), vErases.end(), [&](const int a, const int b) -> bool
for (auto& pBase : G::Vars)
{
return a > b;
});
Remove(bool, iIndex)
else Remove(int, iIndex)
else Remove(float, iIndex)
else Remove(IntRange_t, iIndex)
else Remove(FloatRange_t, iIndex)
else Remove(std::string, iIndex)
else Remove(VA_LIST(std::vector<std::pair<std::string, Color_t>>), iIndex)
else Remove(Color_t, iIndex)
else Remove(Gradient_t, iIndex)
else Remove(Vec3, iIndex)
else Remove(DragBox_t, iIndex)
else Remove(WindowBox_t, iIndex)
}
};
fSearchBinds(iBind);
std::sort(vErases.begin(), vErases.end(), [&](const int a, const int b) -> bool
{
return a > b;
});
for (auto iIndex : vErases)
removeBind(iIndex);
fRemoveBind(iIndex);
}
int CBinds::GetParent(int iBind)
@@ -417,8 +417,8 @@ void CBinds::Move(int i1, int i2)
else if (tBind.m_iParent == i2)
vBinds2.push_back(&tBind);
}
std::for_each(vBinds1.begin(), vBinds1.end(), [&](auto pBind) { pBind->m_iParent = i2; });
std::for_each(vBinds2.begin(), vBinds2.end(), [&](auto pBind) { pBind->m_iParent = i1; });
for (auto pBind : vBinds1) pBind->m_iParent = i2;
for (auto pBind : vBinds2) pBind->m_iParent = i1;
for (auto& pBase : G::Vars)
{
+1 -1
View File
@@ -2,7 +2,7 @@
#include "../../SDK/SDK.h"
#include <functional>
using CommandCallback = std::function<void(std::deque<const char*>&)>;
using CommandCallback = const std::function<void(std::deque<const char*>&)>;
class CCommands
{
+6 -6
View File
@@ -142,7 +142,7 @@ template <> void CConfigs::LoadJson(const boost::property_tree::ptree& t, const
if (auto tChild = t.get_child_optional(s))
{
v.clear();
for (auto& [_, tLayer] : *tChild)
for (auto& tLayer : *tChild | std::views::values)
{
if (auto o = tLayer.get_optional<std::string>("Material"))
{
@@ -160,7 +160,7 @@ template <> void CConfigs::LoadJson(const boost::property_tree::ptree& t, const
bool bValid = uHash != FNV1A::Hash32Const("None") && (uHash == FNV1A::Hash32Const("Original") || F::Materials.m_mMaterials.contains(uHash));
if (bValid)
{
int i = 0; for (auto& [s, _] : v)
int i = 0; for (auto& s : v | std::views::keys)
{
auto uHash2 = FNV1A::Hash32(s.c_str());
if (uHash == uHash2)
@@ -380,7 +380,7 @@ static inline void LoadMain(BaseVar*& pBase, boost::property_tree::ptree& tTree)
pVar->Map = { { DEFAULT_BIND, pVar->Default } };
if (auto tMap = tTree.get_child_optional(pVar->Name()))
{
for (auto& [sKey, _] : *tMap)
for (auto& sKey : *tMap | std::views::keys)
{
int iBind = std::stoi(sKey);
if (iBind == DEFAULT_BIND || F::Binds.m_vBinds.size() > iBind && !(pVar->m_iFlags & NOBIND))
@@ -520,7 +520,7 @@ bool CConfigs::LoadConfig(const std::string& sConfigName, bool bNotify)
if (auto tSub = tRead.get_child_optional("Binds"))
{
for (const auto& [_, tChild] : *tSub)
for (const auto& tChild : *tSub | std::views::values)
{
Bind_t tBind = {};
LoadJson(tChild, "Name", tBind.m_sName);
@@ -568,7 +568,7 @@ bool CConfigs::LoadConfig(const std::string& sConfigName, bool bNotify)
if (auto tSub = tRead.get_child_optional("Groups"))
{
for (auto& [_, tChild] : *tSub)
for (auto& tChild : *tSub | std::views::values)
{
Group_t tGroup = {};
LoadJson(tChild, "Name", tGroup.m_sName);
@@ -744,7 +744,7 @@ bool CConfigs::LoadVisual(const std::string& sConfigName, bool bNotify)
if (auto tSub = tRead.get_child_optional("Groups"))
{
for (auto& [_, tChild] : *tSub)
for (auto& tChild : *tSub | std::views::values)
{
Group_t tGroup = {};
LoadJson(tChild, "Name", tGroup.m_sName);
+19 -19
View File
@@ -380,31 +380,31 @@ void CCritHack::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd)
int CCritHack::PredictCmdNum(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd)
{
auto getCmdNum = [&](int iCommandNumber)
{
if (!pWeapon || !pLocal->IsAlive() || !I::EngineClient->IsInGame() || Vars::Misc::Game::AntiCheatCompatibility.Value
|| pLocal->IsCritBoosted() || pWeapon->m_flCritTime() > I::GlobalVars->curtime || !WeaponCanCrit(pWeapon))
return iCommandNumber;
UpdateInfo(pLocal, pWeapon);
if (pWeapon->IsRapidFire() && I::GlobalVars->curtime < pWeapon->m_flLastRapidFireCritCheckTime() + 1.f)
return iCommandNumber;
int iRequest = GetCritRequest(pCmd, pWeapon);
if (iRequest == CritRequestEnum::Any)
return iCommandNumber;
if (int iCommand = GetCritCommand(pWeapon, iCommandNumber, iRequest == CritRequestEnum::Crit))
return iCommand;
auto fGetCmdNum = [&](int iCommandNumber)
{
if (!pWeapon || !pLocal->IsAlive() || !I::EngineClient->IsInGame() || Vars::Misc::Game::AntiCheatCompatibility.Value
|| pLocal->IsCritBoosted() || pWeapon->m_flCritTime() > I::GlobalVars->curtime || !WeaponCanCrit(pWeapon))
return iCommandNumber;
};
UpdateInfo(pLocal, pWeapon);
if (pWeapon->IsRapidFire() && I::GlobalVars->curtime < pWeapon->m_flLastRapidFireCritCheckTime() + 1.f)
return iCommandNumber;
int iRequest = GetCritRequest(pCmd, pWeapon);
if (iRequest == CritRequestEnum::Any)
return iCommandNumber;
if (int iCommand = GetCritCommand(pWeapon, iCommandNumber, iRequest == CritRequestEnum::Crit))
return iCommand;
return iCommandNumber;
};
static int iCommandNumber = 0; // cache, don't constantly test
static int iStaticCommand = 0;
if (pCmd->command_number != iStaticCommand)
{
iCommandNumber = getCmdNum(pCmd->command_number);
iCommandNumber = fGetCmdNum(pCmd->command_number);
iStaticCommand = pCmd->command_number;
}
@@ -442,7 +442,7 @@ void CCritHack::Event(IGameEvent* pEvent, uint32_t uHash, CTFPlayer* pLocal)
int iOldHealth = (tHistory.m_mHistory.contains(iHealth) ? tHistory.m_mHistory[iHealth].m_iOldHealth : tHistory.m_iNewHealth) % 32768;
if (iHealth > iOldHealth)
{
for (auto& [_, tOldHealth] : tHistory.m_mHistory)
for (auto& tOldHealth : tHistory.m_mHistory | std::views::values)
{
int iOldHealth2 = tOldHealth.m_iOldHealth % 32768;
if (iOldHealth2 > iHealth)
+16 -16
View File
@@ -270,7 +270,7 @@ namespace ImGui
flInset += H::Draw.Scale(0.5f) - 0.5f - H::Draw.Scale();
pDrawList->AddRect({ vDrawPos.x + flInset, vDrawPos.y + flInset }, { vDrawPos.x - flInset + vSize.x, vDrawPos.y - flInset + vSize.y }, uBorder, H::Draw.Scale(4), ImDrawFlags_None, H::Draw.Scale());
}
inline void Divider(float flInset = H::Draw.Scale(), float flPrePadding = H::Draw.Scale(8), float flPostPadding = H::Draw.Scale(7), ImU32 uBorder = F::Render.Background2)
inline void Divider(float flPrePadding = H::Draw.Scale(8), float flPostPadding = H::Draw.Scale(7), float flInset = H::Draw.Scale(), ImU32 uBorder = F::Render.Background2)
{
ImVec2 vSize = GetWindowSize();
ImVec2 vDrawPos = GetDrawPos() + ImVec2(0, GetCursorPosY());
@@ -2161,22 +2161,22 @@ namespace ImGui
{
// material stuff
std::vector<Material_t> vMaterials;
for (auto& [_, mat] : F::Materials.m_mMaterials)
for (auto& tMaterial : F::Materials.m_mMaterials | std::views::values)
{
if (FNV1A::Hash32(mat.m_sName.c_str()) != FNV1A::Hash32Const("None"))
vMaterials.push_back(mat);
if (FNV1A::Hash32(tMaterial.m_sName.c_str()) != FNV1A::Hash32Const("None"))
vMaterials.push_back(tMaterial);
}
std::sort(vMaterials.begin(), vMaterials.end(), [&](const auto& a, const auto& b) -> bool
{
// keep locked materials higher
if (a.m_bLocked && !b.m_bLocked)
return true;
if (!a.m_bLocked && b.m_bLocked)
return false;
{
// keep locked materials higher
if (a.m_bLocked && !b.m_bLocked)
return true;
if (!a.m_bLocked && b.m_bLocked)
return false;
return a.m_sName < b.m_sName;
});
return a.m_sName < b.m_sName;
});
std::vector<std::string> vEntries = { "Original" };
for (auto& pair : vMaterials)
@@ -2465,15 +2465,15 @@ namespace ImGui
std::vector<int> vValues = {};
std::vector<std::string> vStrings = {}; // prevent dangling pointers
for (auto& [_iBind, _] : var.Map)
for (auto& _iBind : var.Map | std::views::keys)
{
if (_iBind != DEFAULT_BIND)
vValues.push_back(_iBind);
}
std::sort(vValues.begin(), vValues.end(), [&](const int a, const int b) -> bool
{
return a < b;
});
{
return a < b;
});
for (auto _iBind : vValues)
vStrings.push_back(std::format("{}## Bind{}", _iBind != DEFAULT_BIND && _iBind < F::Binds.m_vBinds.size() ? F::Binds.m_vBinds[_iBind].m_sName : sBind, _iBind));
for (auto& sEntry : vStrings)
File diff suppressed because it is too large Load Diff
+12 -12
View File
@@ -49,20 +49,20 @@ void CRender::LoadColors()
{
using namespace ImGui;
auto ColorToVec = [](Color_t tColor) -> ImColor
{
return { tColor.r / 255.f, tColor.g / 255.f, tColor.b / 255.f, tColor.a / 255.f };
};
auto fColorToVec = [](Color_t tColor) -> ImColor
{
return { tColor.r / 255.f, tColor.g / 255.f, tColor.b / 255.f, tColor.a / 255.f };
};
Accent = ColorToVec(Vars::Menu::Theme::Accent.Value);
Background0 = ColorToVec(Vars::Menu::Theme::Background.Value);
Background0p5 = ColorToVec(Vars::Menu::Theme::Background.Value.Lerp({ 127, 127, 127 }, 0.5f / 9, LerpEnum::NoAlpha));
Background1 = ColorToVec(Vars::Menu::Theme::Background.Value.Lerp({ 127, 127, 127 }, 1.f / 9, LerpEnum::NoAlpha));
Background1p5 = ColorToVec(Vars::Menu::Theme::Background.Value.Lerp({ 127, 127, 127 }, 1.5f / 9, LerpEnum::NoAlpha));
Accent = fColorToVec(Vars::Menu::Theme::Accent.Value);
Background0 = fColorToVec(Vars::Menu::Theme::Background.Value);
Background0p5 = fColorToVec(Vars::Menu::Theme::Background.Value.Lerp({ 127, 127, 127 }, 0.5f / 9, LerpEnum::NoAlpha));
Background1 = fColorToVec(Vars::Menu::Theme::Background.Value.Lerp({ 127, 127, 127 }, 1.f / 9, LerpEnum::NoAlpha));
Background1p5 = fColorToVec(Vars::Menu::Theme::Background.Value.Lerp({ 127, 127, 127 }, 1.5f / 9, LerpEnum::NoAlpha));
Background1p5L = { Background1p5.Value.x * 1.1f, Background1p5.Value.y * 1.1f, Background1p5.Value.z * 1.1f, Background1p5.Value.w };
Background2 = ColorToVec(Vars::Menu::Theme::Background.Value.Lerp({ 127, 127, 127 }, 2.f / 9, LerpEnum::NoAlpha));
Inactive = ColorToVec(Vars::Menu::Theme::Inactive.Value);
Active = ColorToVec(Vars::Menu::Theme::Active.Value);
Background2 = fColorToVec(Vars::Menu::Theme::Background.Value.Lerp({ 127, 127, 127 }, 2.f / 9, LerpEnum::NoAlpha));
Inactive = fColorToVec(Vars::Menu::Theme::Inactive.Value);
Active = fColorToVec(Vars::Menu::Theme::Active.Value);
ImVec4* colors = GetStyle().Colors;
colors[ImGuiCol_Border] = Background2;
+20 -20
View File
@@ -346,7 +346,7 @@ void CMisc::FastMovement(CTFPlayer* pLocal, CUserCmd* pCmd)
return;
Vec3 vMove = { pCmd->forwardmove, pCmd->sidemove, 0.f };
Vec3 vAngMoveReverse = Math::VectorAngles(vMove * -1.f);
Vec3 vAngMoveReverse = Math::VectorAngles(-vMove);
pCmd->forwardmove = -vMove.Length();
pCmd->sidemove = 0.f;
pCmd->viewangles.y = fmodf(pCmd->viewangles.y - vAngMoveReverse.y, 360.f);
@@ -463,9 +463,9 @@ int CMisc::AntiBackstab(CTFPlayer* pLocal, CUserCmd* pCmd, bool bSendPacket)
return 0;
std::sort(vTargets.begin(), vTargets.end(), [&](const auto& a, const auto& b) -> bool
{
return pLocal->GetCenter().DistTo(a.first) < pLocal->GetCenter().DistTo(b.first);
});
{
return pLocal->GetCenter().DistTo(a.first) < pLocal->GetCenter().DistTo(b.first);
});
auto& pTargetPos = vTargets.front();
switch (Vars::Misc::Automation::AntiBackstab.Value)
@@ -486,28 +486,28 @@ int CMisc::AntiBackstab(CTFPlayer* pLocal, CUserCmd* pCmd, bool bSendPacket)
// if the closest spy is a cheater, assume auto stab is being used, otherwise don't do anything if target is in front
if (!bCheater)
{
auto TargetIsBehind = [&]()
{
const float flCompDist = PLAYER_ORIGIN_COMPRESSION / 2;
const float flSqCompDist = 0.0884f;
auto fTargetIsBehind = [&]()
{
const float flCompDist = PLAYER_ORIGIN_COMPRESSION / 2;
const float flSqCompDist = 0.0884f;
Vec3 vToTarget = (pLocal->m_vecOrigin() - pTargetPos.first).To2D();
const float flDist = vToTarget.Normalize();
if (flDist < flSqCompDist)
return true;
Vec3 vToTarget = (pLocal->m_vecOrigin() - pTargetPos.first).To2D();
const float flDist = vToTarget.Normalize();
if (flDist < flSqCompDist)
return true;
const float flExtra = 2.f * flCompDist / flDist; // account for origin compression
float flPosVsTargetViewMinDot = 0.f - 0.0031f - flExtra;
const float flExtra = 2.f * flCompDist / flDist; // account for origin compression
float flPosVsTargetViewMinDot = 0.f - 0.0031f - flExtra;
Vec3 vTargetForward; Math::AngleVectors(pCmd->viewangles, &vTargetForward);
vTargetForward.Normalize2D();
Vec3 vTargetForward; Math::AngleVectors(pCmd->viewangles, &vTargetForward);
vTargetForward.Normalize2D();
const float flPosVsTargetViewDot = vToTarget.Dot(vTargetForward); // Behind?
const float flPosVsTargetViewDot = vToTarget.Dot(vTargetForward); // Behind?
return flPosVsTargetViewDot > flPosVsTargetViewMinDot;
};
return flPosVsTargetViewDot > flPosVsTargetViewMinDot;
};
if (!TargetIsBehind())
if (!fTargetIsBehind())
return 0;
}
@@ -92,7 +92,7 @@ void CFakeLag::Run(CTFPlayer* pLocal, CTFWeaponBase* pWeapon, CUserCmd* pCmd, bo
{
case Vars::Fakelag::FakelagEnum::Off: m_iGoal = 0; break;
case Vars::Fakelag::FakelagEnum::Plain: m_iGoal = Vars::Fakelag::PlainTicks.Value; break;
case Vars::Fakelag::FakelagEnum::Random: m_iGoal = SDK::StdRandomInt(Vars::Fakelag::RandomTicks.Value.Min, Vars::Fakelag::RandomTicks.Value.Max); break;
case Vars::Fakelag::FakelagEnum::Random: m_iGoal = SDK::RandomInt(Vars::Fakelag::RandomTicks.Value.Min, Vars::Fakelag::RandomTicks.Value.Max); break;
case Vars::Fakelag::FakelagEnum::Adaptive: m_iGoal = 22; break;
}
}
+1 -1
View File
@@ -138,7 +138,7 @@ void CPlayerlistCore::LoadPlayerlist()
for (auto& [sName, tChild] : *tSub)
{
uint32_t uAccountID = std::stoul(sName);
for (auto& [_, tTag] : tChild)
for (auto& tTag : tChild | std::views::values)
{
const std::string& sTag = tTag.data();
+6 -6
View File
@@ -279,13 +279,13 @@ PriorityLabel_t* CPlayerlistUtils::GetSignificantTag(uint32_t uAccountID, int iM
return nullptr;
std::sort(vTags.begin(), vTags.end(), [&](const PriorityLabel_t* a, const PriorityLabel_t* b) -> bool
{
// sort by priority if unequal
if (a->m_iPriority != b->m_iPriority)
return a->m_iPriority > b->m_iPriority;
{
// sort by priority if unequal
if (a->m_iPriority != b->m_iPriority)
return a->m_iPriority > b->m_iPriority;
return a->m_sName < b->m_sName;
});
return a->m_sName < b->m_sName;
});
return vTags.front();
}
PriorityLabel_t* CPlayerlistUtils::GetSignificantTag(int iIndex, int iMode)
+24 -24
View File
@@ -125,38 +125,38 @@ void CResolver::CreateMove()
if (!pResource)
return;
auto getPlayerClosestToFOV = [&]()
auto fGetPlayerClosestToFOV = [&]()
{
CTFPlayer* pClosest = nullptr;
float flMinFOV = 180.f;
const Vec3 vLocalPos = F::Ticks.GetShootPos();
const Vec3 vLocalAngles = I::EngineClient->GetViewAngles();
for (auto& pEntity : H::Entities.GetGroup(EntityEnum::PlayerAll))
{
CTFPlayer* pClosest = nullptr;
float flMinFOV = 180.f;
if (pEntity->entindex() == I::EngineClient->GetLocalPlayer())
continue;
const Vec3 vLocalPos = F::Ticks.GetShootPos();
const Vec3 vLocalAngles = I::EngineClient->GetViewAngles();
Vec3 vCurPos = pEntity->GetCenter();
Vec3 vCurAngleTo = Math::CalcAngle(vLocalPos, vCurPos);
float flCurFOVTo = Math::CalcFov(vLocalAngles, vCurAngleTo);
for (auto& pEntity : H::Entities.GetGroup(EntityEnum::PlayerAll))
if (flCurFOVTo < flMinFOV)
{
if (pEntity->entindex() == I::EngineClient->GetLocalPlayer())
continue;
Vec3 vCurPos = pEntity->GetCenter();
Vec3 vCurAngleTo = Math::CalcAngle(vLocalPos, vCurPos);
float flCurFOVTo = Math::CalcFov(vLocalAngles, vCurAngleTo);
if (flCurFOVTo < flMinFOV)
{
pClosest = pEntity->As<CTFPlayer>();
flMinFOV = flCurFOVTo;
}
pClosest = pEntity->As<CTFPlayer>();
flMinFOV = flCurFOVTo;
}
}
return pClosest;
};
return pClosest;
};
if (Vars::Resolver::CycleYaw.Value)
{
if (SDK::PlatFloatTime() > m_flLastYawCycle + 0.5f)
{
if (auto pTarget = getPlayerClosestToFOV())
if (auto pTarget = fGetPlayerClosestToFOV())
{
int iUserID = pResource->m_iUserID(pTarget->entindex());
auto& tData = m_mResolverData[iUserID];
@@ -178,7 +178,7 @@ void CResolver::CreateMove()
{
if (SDK::PlatFloatTime() > m_flLastPitchCycle + 0.5f)
{
if (auto pTarget = getPlayerClosestToFOV())
if (auto pTarget = fGetPlayerClosestToFOV())
{
int iUserID = pResource->m_iUserID(pTarget->entindex());
auto& tData = m_mResolverData[iUserID];
@@ -208,7 +208,7 @@ void CResolver::CreateMove()
{
if (SDK::PlatFloatTime() > m_flLastMinwalkCycle + 0.5f)
{
if (auto pTarget = getPlayerClosestToFOV())
if (auto pTarget = fGetPlayerClosestToFOV())
{
int iUserID = pResource->m_iUserID(pTarget->entindex());
auto& tData = m_mResolverData[iUserID];
@@ -230,7 +230,7 @@ void CResolver::CreateMove()
{
if (SDK::PlatFloatTime() > m_flLastViewCycle + 0.5f)
{
if (auto pTarget = getPlayerClosestToFOV())
if (auto pTarget = fGetPlayerClosestToFOV())
{
int iUserID = pResource->m_iUserID(pTarget->entindex());
auto& tData = m_mResolverData[iUserID];
@@ -579,7 +579,7 @@ void CMovementSimulation::RestoreBounds(CTFPlayer* pPlayer)
}
}
void CMovementSimulation::RunTick(MoveStorage& tMoveStorage, bool bPath, std::function<void(CMoveData&)>* pCallback)
void CMovementSimulation::RunTick(MoveStorage& tMoveStorage, bool bPath, RunTickCallback* pCallback)
{
if (tMoveStorage.m_bFailed || !tMoveStorage.m_pPlayer || !tMoveStorage.m_pPlayer->IsPlayer())
return;
@@ -649,7 +649,7 @@ void CMovementSimulation::RunTick(MoveStorage& tMoveStorage, bool bPath, std::fu
RestoreBounds(tMoveStorage.m_pPlayer);
}
void CMovementSimulation::RunTick(MoveStorage& tMoveStorage, bool bPath, std::function<void(CMoveData&)> fCallback)
void CMovementSimulation::RunTick(MoveStorage& tMoveStorage, bool bPath, RunTickCallback fCallback)
{
RunTick(tMoveStorage, bPath, &fCallback);
}
@@ -4,6 +4,8 @@
Enum(Move, Ground, Air, Swim)
using RunTickCallback = const std::function<void(CMoveData&)>;
struct MoveStorage
{
CTFPlayer* m_pPlayer = nullptr;
@@ -61,8 +63,8 @@ public:
bool Initialize(CBaseEntity* pEntity, MoveStorage& tMoveStorage, bool bHitchance = true, bool bStrafe = true);
bool SetDuck(MoveStorage& tMoveStorage, bool bDuck);
void RunTick(MoveStorage& tMoveStorage, bool bPath = true, std::function<void(CMoveData&)>* pCallback = nullptr);
void RunTick(MoveStorage& tMoveStorage, bool bPath, std::function<void(CMoveData&)> fCallback);
void RunTick(MoveStorage& tMoveStorage, bool bPath = true, RunTickCallback* pCallback = nullptr);
void RunTick(MoveStorage& tMoveStorage, bool bPath, RunTickCallback fCallback);
void Restore(MoveStorage& tMoveStorage);
float GetPredictedDelta(CBaseEntity* pEntity);
@@ -316,10 +316,9 @@ bool CProjectileSimulation::GetInfo(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon,
Vec3 vStart = bInterp ? pPlayer->GetEyePosition() : pPlayer->GetShootPos();
Vec3 vEnd = tProjInfo.m_vPos;
SDK::TraceHull(vStart, vEnd, tProjInfo.m_vHull * -1.f, tProjInfo.m_vHull, MASK_SOLID, &filter, &trace);
SDK::TraceHull(vStart, vEnd, -tProjInfo.m_vHull, tProjInfo.m_vHull, MASK_SOLID, &filter, &trace);
tProjInfo.m_vPos = trace.endpos;
return true;
return !trace.allsolid;
}
void CProjectileSimulation::GetInfo(CBaseEntity* pProjectile, ProjectileInfo& tProjInfo)
+13 -13
View File
@@ -180,23 +180,23 @@ void CChams::RenderBacktrack(const DrawModelState_t& pState, const ModelRenderIn
pRenderContext->DepthRange(0.f, m_iFlags & BacktrackEnum::IgnoreZ ? 0.2f : 1.f);
auto drawModel = [&](Vec3& vOrigin, const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo, matrix3x4* pBoneToWorld, float flBlend)
{
if (!SDK::IsOnScreen(pEntity, vOrigin))
return;
auto fDrawModel = [&](Vec3& vOrigin, const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo, matrix3x4* pBoneToWorld, float flBlend)
{
if (!SDK::IsOnScreen(pEntity, vOrigin))
return;
float flOriginalBlend = I::RenderView->GetBlend();
I::RenderView->SetBlend(flBlend * flOriginalBlend);
static auto IVModelRender_DrawModelExecute = U::Hooks.m_mHooks["IVModelRender_DrawModelExecute"];
IVModelRender_DrawModelExecute->Call<void>(I::ModelRender, pState, pInfo, pBoneToWorld);
I::RenderView->SetBlend(flOriginalBlend);
};
float flOriginalBlend = I::RenderView->GetBlend();
I::RenderView->SetBlend(flBlend * flOriginalBlend);
static auto IVModelRender_DrawModelExecute = U::Hooks.m_mHooks["IVModelRender_DrawModelExecute"];
IVModelRender_DrawModelExecute->Call<void>(I::ModelRender, pState, pInfo, pBoneToWorld);
I::RenderView->SetBlend(flOriginalBlend);
};
if (!bDrawLast && !bDrawFirst)
{
for (auto pRecord : vRecords)
{
if (float flBlend = Math::RemapVal(pEntity->GetAbsOrigin().DistTo(pRecord->m_vOrigin), 1.f, 24.f, 0.f, 1.f))
drawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
fDrawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
}
}
else
@@ -205,13 +205,13 @@ void CChams::RenderBacktrack(const DrawModelState_t& pState, const ModelRenderIn
{
auto pRecord = vRecords.back();
if (float flBlend = Math::RemapVal(pEntity->GetAbsOrigin().DistTo(pRecord->m_vOrigin), 1.f, 24.f, 0.f, 1.f))
drawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
fDrawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
}
if (bDrawFirst)
{
auto pRecord = vRecords.front();
if (float flBlend = Math::RemapVal(pEntity->GetAbsOrigin().DistTo(pRecord->m_vOrigin), 1.f, 24.f, 0.f, 1.f))
drawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
fDrawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
}
}
+37 -37
View File
@@ -87,13 +87,13 @@ static inline void StorePlayer(CTFPlayer* pPlayer, CTFPlayer* pLocal, Group_t* p
if (!vTags.empty())
{
std::sort(vTags.begin(), vTags.end(), [&](const auto a, const auto b) -> bool
{
// sort by priority if unequal
if (std::get<2>(a) != std::get<2>(b))
return std::get<2>(a) > std::get<2>(b);
{
// sort by priority if unequal
if (std::get<2>(a) != std::get<2>(b))
return std::get<2>(a) > std::get<2>(b);
return std::get<0>(a) < std::get<0>(b);
});
return std::get<0>(a) < std::get<0>(b);
});
for (auto& [sName, tColor, _] : vTags)
tCache.m_vText.emplace_back(ALIGN_TOPRIGHT, sName, tColor, tColor.IsColorDark() ? Color_t(255, 255, 255) : Color_t(0, 0, 0));
@@ -337,16 +337,16 @@ static inline void StorePlayer(CTFPlayer* pPlayer, CTFPlayer* pLocal, Group_t* p
}
else
{
auto GetSniperDot = [](CBaseEntity* pEntity) -> CSniperDot*
auto fGetSniperDot = [](CBaseEntity* pEntity) -> CSniperDot*
{
for (auto pDot : H::Entities.GetGroup(EntityEnum::SniperDots))
{
for (auto pDot : H::Entities.GetGroup(EntityEnum::SniperDots))
{
if (pDot->m_hOwnerEntity().Get() == pEntity)
return pDot->As<CSniperDot>();
}
return nullptr;
};
if (CSniperDot* pPlayerDot = GetSniperDot(pPlayer))
if (pDot->m_hOwnerEntity().Get() == pEntity)
return pDot->As<CSniperDot>();
}
return nullptr;
};
if (CSniperDot* pPlayerDot = fGetSniperDot(pPlayer))
{
float flChargeTime = std::max(SDK::AttribHookValue(3.f, "mult_sniper_charge_per_sec", pWeapon), 1.5f);
tCache.m_vText.emplace_back(ALIGN_TOPRIGHT, std::format("Charging {:.0f}%", Math::RemapVal(TICKS_TO_TIME(I::ClientState->m_ClockDriftMgr.m_nServerTick) - pPlayerDot->m_flChargeStartTime() - 0.3f, 0.f, flChargeTime, 0.f, 100.f)), Vars::Menu::Theme::Active.Value, Vars::Menu::Theme::Background.Value);
@@ -803,27 +803,27 @@ void CESP::DrawPlayers()
for (auto& [iMode, flPercent, tColor, tOverfill, bAdjust] : tCache.m_vBars)
{
auto drawBar = [&](int x, int y, int w, int h, EAlign eAlign = ALIGN_LEFT)
auto fDrawBar = [&](int x, int y, int w, int h, EAlign eAlign = ALIGN_LEFT)
{
if (flPercent > 1.f)
{
if (flPercent > 1.f)
{
H::Draw.FillRectPercent(x, y, w, h, 1.f, tColor, { 0, 0, 0, 255 }, eAlign, bAdjust);
H::Draw.FillRectPercent(x, y, w, h, flPercent - 1.f, tOverfill, { 0, 0, 0, 0 }, eAlign, bAdjust);
}
else
H::Draw.FillRectPercent(x, y, w, h, flPercent, tColor, { 0, 0, 0, 255 }, eAlign, bAdjust);
};
H::Draw.FillRectPercent(x, y, w, h, 1.f, tColor, { 0, 0, 0, 255 }, eAlign, bAdjust);
H::Draw.FillRectPercent(x, y, w, h, flPercent - 1.f, tOverfill, { 0, 0, 0, 0 }, eAlign, bAdjust);
}
else
H::Draw.FillRectPercent(x, y, w, h, flPercent, tColor, { 0, 0, 0, 255 }, eAlign, bAdjust);
};
int iSpace = H::Draw.Scale(4);
int iThickness = H::Draw.Scale(2, Scale_Round);
switch (iMode)
{
case ALIGN_LEFT:
drawBar(x - iSpace - iThickness - lOffset, y, iThickness, h, ALIGN_BOTTOM);
fDrawBar(x - iSpace - iThickness - lOffset, y, iThickness, h, ALIGN_BOTTOM);
lOffset += iSpace + iThickness;
break;
case ALIGN_BOTTOM:
drawBar(x, y + h + iSpace + bOffset, w, iThickness);
fDrawBar(x, y + h + iSpace + bOffset, w, iThickness);
bOffset += iSpace + iThickness;
break;
}
@@ -906,27 +906,27 @@ void CESP::DrawBuildings()
H::Draw.LineRectOutline(x, y, w, h, tCache.m_tColor, { 0, 0, 0, 255 });
for (auto& [iMode, flPercent, tColor, tOverfill, bAdjust] : tCache.m_vBars)
{
auto drawBar = [&](int x, int y, int w, int h, EAlign eAlign = ALIGN_LEFT)
auto fDrawBar = [&](int x, int y, int w, int h, EAlign eAlign = ALIGN_LEFT)
{
if (flPercent > 1.f)
{
if (flPercent > 1.f)
{
H::Draw.FillRectPercent(x, y, w, h, 1.f, tColor, { 0, 0, 0, 255 }, eAlign, bAdjust);
H::Draw.FillRectPercent(x, y, w, h, flPercent - 1.f, tOverfill, { 0, 0, 0, 0 }, eAlign, bAdjust);
}
else
H::Draw.FillRectPercent(x, y, w, h, flPercent, tColor, { 0, 0, 0, 255 }, eAlign, bAdjust);
};
H::Draw.FillRectPercent(x, y, w, h, 1.f, tColor, { 0, 0, 0, 255 }, eAlign, bAdjust);
H::Draw.FillRectPercent(x, y, w, h, flPercent - 1.f, tOverfill, { 0, 0, 0, 0 }, eAlign, bAdjust);
}
else
H::Draw.FillRectPercent(x, y, w, h, flPercent, tColor, { 0, 0, 0, 255 }, eAlign, bAdjust);
};
int iSpace = H::Draw.Scale(4);
int iThickness = H::Draw.Scale(2, Scale_Round);
switch (iMode)
{
case ALIGN_LEFT:
drawBar(x - iSpace - iThickness - lOffset, y, iThickness, h, ALIGN_BOTTOM);
fDrawBar(x - iSpace - iThickness - lOffset, y, iThickness, h, ALIGN_BOTTOM);
lOffset += iSpace + iThickness;
break;
case ALIGN_BOTTOM:
drawBar(x, y + h + iSpace + bOffset, w, iThickness);
fDrawBar(x, y + h + iSpace + bOffset, w, iThickness);
bOffset += iSpace + iThickness;
break;
}
+13 -13
View File
@@ -223,23 +223,23 @@ void CGlow::RenderBacktrack(const DrawModelState_t& pState, const ModelRenderInf
bool bDrawLast = m_iFlags & BacktrackEnum::Last;
bool bDrawFirst = m_iFlags & BacktrackEnum::First;
auto drawModel = [&](Vec3& vOrigin, const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo, matrix3x4* pBoneToWorld, float flBlend)
{
if (!SDK::IsOnScreen(pEntity, vOrigin))
return;
auto fDrawModel = [&](Vec3& vOrigin, const DrawModelState_t& pState, const ModelRenderInfo_t& pInfo, matrix3x4* pBoneToWorld, float flBlend)
{
if (!SDK::IsOnScreen(pEntity, vOrigin))
return;
//float flOriginalBlend = I::RenderView->GetBlend();
//I::RenderView->SetBlend(flBlend * flOriginalBlend);
static auto IVModelRender_DrawModelExecute = U::Hooks.m_mHooks["IVModelRender_DrawModelExecute"];
IVModelRender_DrawModelExecute->Call<void>(I::ModelRender, pState, pInfo, pBoneToWorld);
//I::RenderView->SetBlend(flOriginalBlend);
};
//float flOriginalBlend = I::RenderView->GetBlend();
//I::RenderView->SetBlend(flBlend * flOriginalBlend);
static auto IVModelRender_DrawModelExecute = U::Hooks.m_mHooks["IVModelRender_DrawModelExecute"];
IVModelRender_DrawModelExecute->Call<void>(I::ModelRender, pState, pInfo, pBoneToWorld);
//I::RenderView->SetBlend(flOriginalBlend);
};
if (!bDrawLast && !bDrawFirst)
{
for (auto pRecord : vRecords)
{
if (float flBlend = Math::RemapVal(pEntity->GetAbsOrigin().DistTo(pRecord->m_vOrigin), 1.f, 24.f, 0.f, 1.f))
drawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
fDrawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
}
}
else
@@ -248,13 +248,13 @@ void CGlow::RenderBacktrack(const DrawModelState_t& pState, const ModelRenderInf
{
auto pRecord = vRecords.back();
if (float flBlend = Math::RemapVal(pEntity->GetAbsOrigin().DistTo(pRecord->m_vOrigin), 1.f, 24.f, 0.f, 1.f))
drawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
fDrawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
}
if (bDrawFirst)
{
auto pRecord = vRecords.front();
if (float flBlend = Math::RemapVal(pEntity->GetAbsOrigin().DistTo(pRecord->m_vOrigin), 1.f, 24.f, 0.f, 1.f))
drawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
fDrawModel(pRecord->m_vOrigin, pState, pInfo, pRecord->m_aBones, flBlend);
}
}
}
@@ -179,7 +179,7 @@ void CMaterials::LoadMaterials()
StoreStruct(sName, sVMT);
}
// create materials
for (auto& [_, tMaterial] : m_mMaterials)
for (auto& tMaterial : m_mMaterials | std::views::values)
{
KeyValues* kv = new KeyValues(tMaterial.m_sName.c_str());
if (!kv->LoadFromBuffer(tMaterial.m_sName.c_str(), tMaterial.m_sVMT.c_str()))
@@ -234,7 +234,7 @@ void CMaterials::UnloadMaterials()
{
m_bLoaded = false;
for (auto& [_, tMaterial] : m_mMaterials)
for (auto& tMaterial : m_mMaterials | std::views::values)
Remove(tMaterial.m_pMaterial);
m_mMaterials.clear();
m_mMatList.clear();
@@ -365,28 +365,28 @@ void CMaterials::RemoveMaterial(const char* sName)
std::filesystem::remove(F::Configs.m_sMaterialsPath + sName + ".vmt");
auto removeFromVal = [&](std::vector<std::pair<std::string, Color_t>>& val)
auto fRemoveFromVal = [&](std::vector<std::pair<std::string, Color_t>>& val)
{
for (auto it = val.begin(); it != val.end();)
{
for (auto it = val.begin(); it != val.end();)
{
if (FNV1A::Hash32(it->first.c_str()) == uHash)
it = val.erase(it);
else
++it;
}
};
auto removeFromVar = [&](ConfigVar<std::vector<std::pair<std::string, Color_t>>>& var)
if (FNV1A::Hash32(it->first.c_str()) == uHash)
it = val.erase(it);
else
++it;
}
};
auto fRemoveFromVar = [&](ConfigVar<std::vector<std::pair<std::string, Color_t>>>& var)
{
for (auto& [iBind, vVal] : var.Map)
{
for (auto& [iBind, vVal] : var.Map)
{
removeFromVal(vVal);
}
};
fRemoveFromVal(vVal);
}
};
for (auto& tGroup : F::Groups.m_vGroups)
{
removeFromVal(tGroup.m_tChams.Visible);
removeFromVal(tGroup.m_tChams.Occluded);
removeFromVal(tGroup.m_vBacktrackChams);
fRemoveFromVal(tGroup.m_tChams.Visible);
fRemoveFromVal(tGroup.m_tChams.Occluded);
fRemoveFromVal(tGroup.m_vBacktrackChams);
}
}
+72 -9
View File
@@ -10,6 +10,7 @@
#include "../Players/PlayerUtils.h"
#include "../Spectate/Spectate.h"
#include "Groups/Groups.h"
#include "../World/World.h"
MAKE_SIGNATURE(UTIL_PlayerByIndex, "server.dll", "48 83 EC ? 8B D1 85 C9 7E ? 48 8B 05", 0x0);
MAKE_SIGNATURE(CBaseAnimating_DrawServerHitboxes, "server.dll", "44 88 44 24 ? 53 48 81 EC", 0x0);
@@ -81,7 +82,7 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
F::ProjSim.SetupTrace(filter, nMask, pWeapon, 0, bInterp);
Vec3* pNormal = nullptr;
SDK::TraceHull(F::ProjSim.GetOrigin(), F::ProjSim.GetOrigin(), tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
SDK::TraceHull(F::ProjSim.GetOrigin(), F::ProjSim.GetOrigin(), -tProjInfo.m_vHull, tProjInfo.m_vHull, nMask, &filter, &trace);
if (trace.startsolid)
return;
@@ -92,7 +93,7 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
F::ProjSim.RunTick(tProjInfo);
Vec3 New = F::ProjSim.GetOrigin();
SDK::TraceHull(Old, New, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
SDK::TraceHull(Old, New, -tProjInfo.m_vHull, tProjInfo.m_vHull, nMask, &filter, &trace);
F::ProjSim.SetupTrace(filter, nMask, pWeapon, n, bInterp);
if (trace.DidHit())
{
@@ -173,8 +174,8 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
const Vec3 vSize = { 1.f, flSize, flSize };
Vec3 vAngles = Math::VectorAngles(*pNormal);
H::Draw.RenderWireframeBox(trace.endpos, vSize * -1, vSize, vAngles, Vars::Colors::TrajectoryPathIgnoreZ.Value);
H::Draw.RenderWireframeBox(trace.endpos, vSize * -1, vSize, vAngles, Vars::Colors::TrajectoryPath.Value, true);
H::Draw.RenderWireframeBox(trace.endpos, -vSize, vSize, vAngles, Vars::Colors::TrajectoryPathIgnoreZ.Value);
H::Draw.RenderWireframeBox(trace.endpos, -vSize, vSize, vAngles, Vars::Colors::TrajectoryPath.Value, true);
}
if (flRadius)
@@ -210,9 +211,9 @@ void CVisuals::ProjectileTrace(CTFPlayer* pPlayer, CTFWeaponBase* pWeapon, const
Vec3 vAngles = Math::VectorAngles(*pNormal);
if (Vars::Colors::ShotPathIgnoreZ.Value.a)
G::BoxStorage.emplace_back(trace.endpos, vSize * -1, vSize, vAngles, I::GlobalVars->curtime + TICKS_TO_TIME(tProjInfo.m_vPath.size()) + F::Backtrack.GetReal(), Vars::Colors::ShotPathIgnoreZ.Value, Color_t(0, 0, 0, 0));
G::BoxStorage.emplace_back(trace.endpos, -vSize, vSize, vAngles, I::GlobalVars->curtime + TICKS_TO_TIME(tProjInfo.m_vPath.size()) + F::Backtrack.GetReal(), Vars::Colors::ShotPathIgnoreZ.Value, Color_t(0, 0, 0, 0));
if (Vars::Colors::ShotPath.Value.a)
G::BoxStorage.emplace_back(trace.endpos, vSize * -1, vSize, vAngles, I::GlobalVars->curtime + TICKS_TO_TIME(tProjInfo.m_vPath.size()) + F::Backtrack.GetReal(), Vars::Colors::ShotPath.Value, Color_t(0, 0, 0, 0), true);
G::BoxStorage.emplace_back(trace.endpos, -vSize, vSize, vAngles, I::GlobalVars->curtime + TICKS_TO_TIME(tProjInfo.m_vPath.size()) + F::Backtrack.GetReal(), Vars::Colors::ShotPath.Value, Color_t(0, 0, 0, 0), true);
}
if (flRadius)
@@ -519,6 +520,13 @@ void CVisuals::DrawEffects()
H::Draw.RenderWireframeSweptBox(tSwept.m_paOrigin.first, tSwept.m_paOrigin.second, tSwept.m_vMins, tSwept.m_vMaxs, tSwept.m_vAngles, tSwept.m_tColor, tSwept.m_bZBuffer);
}
for (auto& tTriangle : G::TriangleStorage)
{
if (tTriangle.m_flTime < I::GlobalVars->curtime)
continue;
H::Draw.RenderTriangle(tTriangle.m_aOrigin[0], tTriangle.m_aOrigin[1], tTriangle.m_aOrigin[2], tTriangle.m_tColor, tTriangle.m_bZBuffer);
}
if (auto& tPath = F::Aimbot.m_tPath; tPath.m_flTime)
{
H::Draw.RenderPath(tPath.m_vPath, Vars::Colors::RealPath.Value, true, tPath.m_iStyle, tPath.m_flTime);
@@ -689,7 +697,7 @@ void CVisuals::FOV(CTFPlayer* pLocal, CViewSetup* pView)
}
}
F::Aimbot.m_flFOV = pView->fov;
G::FOV = pView->fov;
if (pLocal->IsAlive())
{
pLocal->m_iFOV() = pView->fov;
@@ -829,6 +837,7 @@ void CVisuals::Event(IGameEvent* pEvent, uint32_t uHash)
G::PathStorage.clear();
G::SphereStorage.clear();
G::SweptStorage.clear();
G::TriangleStorage.clear();
}
}
}
@@ -917,7 +926,7 @@ void CVisuals::Store()
F::ProjSim.RunTick(tProjInfo);
Vec3 New = F::ProjSim.GetOrigin();
SDK::TraceHull(Old, New, tProjInfo.m_vHull * -1, tProjInfo.m_vHull, nMask, &filter, &trace);
SDK::TraceHull(Old, New, -tProjInfo.m_vHull, tProjInfo.m_vHull, nMask, &filter, &trace);
if (trace.DidHit())
{
tProjectile.m_vNormal = trace.plane.normal;
@@ -982,7 +991,7 @@ void CVisuals::Tick()
tPath.m_flTime = std::min(tPath.m_flTime + 1.f, 0.f);
}
for (auto& [_, tProjectile] : m_mProjectiles)
for (auto& tProjectile : m_mProjectiles | std::views::values)
{
if (tProjectile.m_flTime < 0.f)
tProjectile.m_flTime = std::min(tProjectile.m_flTime + 1.f, 0.f);
@@ -1116,6 +1125,20 @@ void CVisuals::RestoreWorldModulation()
ApplyModulation({ 255, 255, 255, 255 }, true);
}
#ifdef WORLD_DEBUG
class CEntityEnumerator : public IPartitionEnumerator
{
public:
IterationRetval_t EnumElement(IHandleEntity* pHandleEntity)
{
m_vEntities.push_back(pHandleEntity);
return ITERATION_CONTINUE;
}
std::vector<IHandleEntity*> m_vEntities = {};
};
#endif
void CVisuals::CreateMove(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
{
if (Vars::Visuals::Simulation::ShotPath.Value && G::Attacking == 1 && !F::Aimbot.m_bRan)
@@ -1159,4 +1182,44 @@ void CVisuals::CreateMove(CTFPlayer* pLocal, CTFWeaponBase* pWeapon)
r_aspectratio->SetValue(flNewRatio);
DrawHitboxes(2);
#ifdef WORLD_DEBUG
if (auto pLocal = H::Entities.GetLocal(); Vars::World::Faces.Value && pLocal && I::Input->CAM_IsThirdPerson())
{
//float flRadius = 146.f + pLocal->GetSize().Length() / 2;
//Vec3 vOrigin = pLocal->GetCenter();
//Vec3 vMins = vOrigin - flRadius;
//Vec3 vMaxs = vOrigin + flRadius;
Vec3 vOrigin = pLocal->m_vecOrigin();
Vec3 vMins = vOrigin + pLocal->m_vecMins();
Vec3 vMaxs = vOrigin + pLocal->m_vecMaxs();
G::LineStorage.clear(); G::BoxStorage.clear(); G::TriangleStorage.clear();
G::BoxStorage.emplace_back(Vec3(), vMins, vMaxs, Vec3(), I::GlobalVars->curtime + 60.f, Color_t(255, 255, 255), Color_t(0, 0, 0, 0), true);
//G::BoxStorage.emplace_back(pLocal->m_vecOrigin(), pLocal->m_vecMins(), pLocal->m_vecMaxs(), Vec3(), I::GlobalVars->curtime + 60.f, Color_t(255, 255, 255), Color_t(0, 0, 0, 0), true);
CTraceFilterWorldAndPropsOnly filter = {};
std::vector<Face_t> vFaces = F::World.GetFacesInAABB(vMins, vMaxs, MASK_SOLID, &filter, Vars::World::Faces.Value);
SDK::Output("Faces", std::format("{}", vFaces.size()).c_str(), {}, OUTPUT_CONSOLE);
if (Vars::World::Draw.Value)
{
for (auto& tFace : vFaces)
{
F::World.DrawFace(tFace, Vars::World::Draw.Value);
/*
for (int i = 0; ++i < tFace.m_vVertices.size() - 1;)
{
const Vec3& vVertex1 = tFace.m_vVertices[0], & vVertex2 = tFace.m_vVertices[i], & vVertex3 = tFace.m_vVertices[i + 1];
Vec3 vDir21 = vVertex2 - vVertex1, vDir31 = vVertex3 - vVertex1;
float flArea = vDir21.Cross(vDir31).Length() / 2;
SDK::Output("Area", std::format("{}", flArea).c_str());
}
*/
}
}
}
#endif
}
+536
View File
@@ -0,0 +1,536 @@
#include "../World/World.h"
#include <numeric>
class CEntityEnumerator : public IPartitionEnumerator
{
public:
IterationRetval_t EnumElement(IHandleEntity* pHandleEntity)
{
m_vEntities.push_back(pHandleEntity);
return ITERATION_CONTINUE;
}
std::vector<IHandleEntity*> m_vEntities = {};
};
void CWorld::SetVerticesValidCallback(VerticesValidCallback* pCallback)
{
m_pVerticesValidCallback = pCallback ? pCallback : &s_fVerticesValid;
}
void CWorld::SetBoundsValidCallback(BoundsValidCallback* pCallback)
{
m_pBoundsValidCallback = pCallback ? pCallback : &s_fBoundsValid;
}
void CWorld::SetNormalValidCallback(NormalValidCallback* pCallback)
{
m_pNormalValidCallback = pCallback ? pCallback : &s_fNormalValid;
}
bool CWorld::FaceValid(const std::vector<Vec3>& vVertices, const Vec3* pNormal, const Vec3* pMins, const Vec3* pMaxs)
{
if (!(*m_pVerticesValidCallback)(vVertices))
return false;
if (pMins && pMaxs && !(*m_pBoundsValidCallback)(vVertices, *pMins, *pMaxs))
return false;
if (pNormal && !(*m_pNormalValidCallback)(vVertices, *pNormal))
return false;
return true;
}
static CPhysConvex* s_aConvexes[1024];
static inline void GetFacesForConvex(CPhysConvex* pConvex, std::vector<Face_t>& vFaces, float flResize = 0.f, int8_t iType = FaceTypeEnum::None)
{
CPolyhedron* pPolyhedron = I::PhysicsCollision->PolyhedronFromConvex(pConvex, true);
if (!pPolyhedron)
return;
if (!flResize)
{
std::vector<std::pair<std::vector<int>, Vec3>> vTemp = {};
for (int iPolygon = 0; iPolygon < pPolyhedron->iPolygonCount; iPolygon++)
{
Polyhedron_IndexedPolygon_t* pPolygon = &pPolyhedron->pPolygons[iPolygon];
std::vector<int>* pVertices = nullptr;
for (auto& [vVertices, vNormal] : vTemp)
{
if (pPolygon->polyNormal.Dot(vNormal) > 1 - CALC_EPSILON)
{
pVertices = &vVertices;
break;
}
}
if (!pVertices)
{
vTemp.emplace_back(std::vector<int>(), pPolygon->polyNormal);
pVertices = &vTemp.back().first;
}
for (int iLineRef = 0; iLineRef < pPolygon->iIndexCount; iLineRef++)
{
Polyhedron_IndexedLineReference_t* pLineReference = &pPolyhedron->pIndices[pPolygon->iFirstIndex + iLineRef];
Polyhedron_IndexedLine_t* pLine = &pPolyhedron->pLines[pLineReference->iLineIndex];
int iVertex = pLine->iPointIndices[pLineReference->iEndPointIndex];
if (std::find(pVertices->begin(), pVertices->end(), iVertex) == pVertices->end())
pVertices->push_back(iVertex);
}
}
for (auto& [vIndices, vNormal] : vTemp)
{
if (vIndices.size() < 3)
continue;
std::vector<Vec3> vVertices = {};
for (auto& iVertex : vIndices)
vVertices.push_back(pPolyhedron->pVertices[iVertex]);
if (vVertices.size() > 3)
{
Vec3 vCenter = std::reduce(vVertices.begin(), vVertices.end()) / vVertices.size();
Vec3 vDir1 = (vVertices.front() - vCenter).Normalized();
Vec3 vDir2 = vDir1.Cross(vNormal);
std::sort(vVertices.begin(), vVertices.end(), [&](const Vec3& a, const Vec3& b) -> bool
{
return atan2f(vDir2.Dot(a - vCenter), vDir1.Dot(a - vCenter)) < atan2f(vDir2.Dot(b - vCenter), vDir1.Dot(b - vCenter));
});
}
vFaces.emplace_back(vVertices, vNormal, iType);
}
}
else
{ // rough approximation, not too sure why this is needed in the first place
std::vector<Plane_t> vPlanes = {}; vPlanes.reserve(pPolyhedron->iPolygonCount);
for (int iPolygon = 0; iPolygon < pPolyhedron->iPolygonCount; iPolygon++)
{
Polyhedron_IndexedPolygon_t* pPolygon = &pPolyhedron->pPolygons[iPolygon];
if (pPolygon->iIndexCount)
{
Polyhedron_IndexedLineReference_t* pLineReference = &pPolyhedron->pIndices[pPolygon->iFirstIndex];
Polyhedron_IndexedLine_t* pLine = &pPolyhedron->pLines[pLineReference->iLineIndex];
Vec3& vVertex = pPolyhedron->pVertices[pLine->iPointIndices[pLineReference->iEndPointIndex]];
vPlanes.emplace_back(pPolygon->polyNormal, pPolygon->polyNormal.Dot(vVertex + flResize * pPolygon->polyNormal));
}
}
if (CPhysConvex* pConvex2 = I::PhysicsCollision->ConvexFromPlanes(reinterpret_cast<float*>(vPlanes.data()), int(vPlanes.size()), 0.f))
{
GetFacesForConvex(pConvex2, vFaces);
I::PhysicsCollision->ConvexFree(pConvex2);
}
}
pPolyhedron->Release();
}
static inline void GetFacesForCollision(CPhysCollide* pCollision, std::vector<Face_t>& vFaces, float flResize = 0.f, int8_t iType = FaceTypeEnum::None)
{
int iConvexes = I::PhysicsCollision->GetConvexesUsedInCollideable(pCollision, s_aConvexes, sizeof(s_aConvexes) / sizeof(CPhysConvex*));
for (int iConvex = 0; iConvex < iConvexes; iConvex++)
GetFacesForConvex(s_aConvexes[iConvex], vFaces, flResize, iType);
/*
Vec3* pVertices; int iVertices = I::PhysicsCollision->CreateDebugMesh(pCollision, &pVertices); iVertices -= iVertices % 3;
for (int iVertex = 0; iVertex < iVertices; iVertex += 3)
{
std::vector<Vec3> vVertices = { pVertices[iVertex], pVertices[iVertex + 1], pVertices[iVertex + 2] };
Vec3 vNormal = (vVertices[0] - vVertices[2]).Cross(vVertices[0] - vVertices[1]).Normalized();
vFaces.emplace_back(vVertices, vNormal, iType);
}
I::PhysicsCollision->DestroyDebugMesh(iVertices, pVertices);
*/
}
void CWorld::Cache()
{
if (!m_iNeedsCache)
return;
CacheBoxBrushes();
CachePlaneBrushes();
CacheProps();
CacheEntities();
}
void CWorld::CacheBoxBrushes()
{
if (!(m_iNeedsCache & FaceTypeEnum::BoxBrush))
return;
SDK::Output(__FUNCTION__, "Cache start", {}, OUTPUT_DEBUG);
m_iNeedsCache &= ~FaceTypeEnum::BoxBrush;
for (int iBrush = 0; iBrush < I::BSPData->numbrushes; iBrush++)
{
cbrush_t* pBrush = &I::BSPData->map_brushes[iBrush];
if (!pBrush->IsBox())
continue;
cboxbrush_t* pBoxBrush = &I::BSPData->map_boxbrushes[pBrush->GetBox()];
Vec3 aVertices[8];
for (int i = 0; i != 8; i++)
{
aVertices[i].x = i & (1 << 0) ? pBoxBrush->maxs.x : pBoxBrush->mins.x;
aVertices[i].y = i & (1 << 1) ? pBoxBrush->maxs.y : pBoxBrush->mins.y;
aVertices[i].z = i & (1 << 2) ? pBoxBrush->maxs.z : pBoxBrush->mins.z;
}
Vec3 aNormals[6] = {
{ 1, 0, 0 },
{ -1, 0, 0 },
{ 0, 1, 0 },
{ 0, -1, 0 },
{ 0, 0, 1 },
{ 0, 0, -1 }
};
for (int i = 0; i < 6; i++)
{
if (I::BSPData->map_surfaces[pBoxBrush->surfaceIndex[i]].flags & SURF_SKY)
continue;
std::vector<Vec3> vVertices;
switch (i)
{
case 0: vVertices = { aVertices[1], aVertices[5], aVertices[7], aVertices[3] }; break;
case 1: vVertices = { aVertices[2], aVertices[6], aVertices[4], aVertices[0] }; break;
case 2: vVertices = { aVertices[3], aVertices[7], aVertices[6], aVertices[2] }; break;
case 3: vVertices = { aVertices[0], aVertices[4], aVertices[5], aVertices[1] }; break;
case 4: vVertices = { aVertices[6], aVertices[7], aVertices[5], aVertices[4] }; break;
case 5: vVertices = { aVertices[0], aVertices[1], aVertices[3], aVertices[2] }; break;
}
Vec3& vNormal = aNormals[i];
m_mFaceCache[pBrush].emplace_back(vVertices, vNormal, FaceTypeEnum::BoxBrush);
}
}
SDK::Output(__FUNCTION__, "Cache finish", {}, OUTPUT_DEBUG);
}
void CWorld::CachePlaneBrushes()
{
if (!(m_iNeedsCache & FaceTypeEnum::PlaneBrush))
return;
SDK::Output(__FUNCTION__, "Cache start", {}, OUTPUT_DEBUG);
m_iNeedsCache &= ~FaceTypeEnum::PlaneBrush;
for (int iBrush = 0; iBrush < I::BSPData->numbrushes; iBrush++)
{
cbrush_t* pBrush = &I::BSPData->map_brushes[iBrush];
if (pBrush->IsBox())
continue;
std::vector<Plane_t> vPlanes = {}; vPlanes.reserve(pBrush->numsides);
for (int iSide = 0; iSide != pBrush->numsides; iSide++)
{
cbrushside_t* pBrushSide = &I::BSPData->map_brushsides[pBrush->firstbrushside + iSide];
if (I::BSPData->map_surfaces[pBrushSide->surfaceIndex].flags & SURF_SKY)
continue;
cplane_t* pPlane = pBrushSide->plane;
vPlanes.emplace_back(pPlane->normal, pPlane->dist);
}
CPhysConvex* pConvex = I::PhysicsCollision->ConvexFromPlanes(reinterpret_cast<float*>(vPlanes.data()), int(vPlanes.size()), 0.f);
if (!pConvex)
continue;
GetFacesForConvex(pConvex, m_mFaceCache[pBrush], 0.f, FaceTypeEnum::PlaneBrush);
I::PhysicsCollision->ConvexFree(pConvex);
}
SDK::Output(__FUNCTION__, "Cache finish", {}, OUTPUT_DEBUG);
}
void CWorld::CacheProps()
{
if (!(m_iNeedsCache & FaceTypeEnum::Prop))
return;
SDK::Output(__FUNCTION__, "Cache start", {}, OUTPUT_DEBUG);
m_iNeedsCache &= ~FaceTypeEnum::Prop;
CUtlVector<ICollideable*> vProps; I::StaticPropMgr->GetAllStaticProps(&vProps);
for (int i = 0; i < vProps.Count(); i++)
{
vcollide_t* pCollide = I::ModelInfoClient->GetVCollide(vProps[i]->GetCollisionModel());
if (!pCollide || m_mFaceCache.contains(pCollide))
continue;
for (int iSolid = 0; iSolid < pCollide->solidCount; iSolid++)
{
CPhysCollide* pCollision = pCollide->solids[iSolid];
if (!pCollision)
continue;
GetFacesForCollision(pCollision, m_mFaceCache[pCollide], 0.f, FaceTypeEnum::Prop);
}
}
SDK::Output(__FUNCTION__, "Cache finish", {}, OUTPUT_DEBUG);
}
void CWorld::CacheEntities()
{
if (!(m_iNeedsCache & FaceTypeEnum::Entity))
return;
SDK::Output(__FUNCTION__, "Cache start", {}, OUTPUT_DEBUG);
m_iNeedsCache &= ~FaceTypeEnum::Entity;
for (int iCModel = 0; iCModel < I::BSPData->numcmodels; iCModel++)
{
cmodel_t* pCModel = &I::BSPData->map_cmodels[iCModel];
vcollide_t* pCollide = &pCModel->vcollisionData;
for (int iSolid = 0; iSolid < pCollide->solidCount; iSolid++)
{
CPhysCollide* pCollision = pCollide->solids[iSolid];
if (!pCollision)
continue;
GetFacesForCollision(pCollision, m_mFaceCache[pCollide], 0.5f, FaceTypeEnum::Entity);
}
}
SDK::Output(__FUNCTION__, "Cache finish", {}, OUTPUT_DEBUG);
}
void CWorld::Uncache()
{
if (m_iNeedsCache == FaceTypeEnum::Cache)
return;
m_mFaceCache.clear();
m_iNeedsCache = FaceTypeEnum::Cache;
}
void CWorld::UncacheBoxBrushes()
{
if (m_iNeedsCache & FaceTypeEnum::BoxBrush)
return;
for (auto& [pKey, vFaces] : m_mFaceCache)
{
if (vFaces.front().m_iType == FaceTypeEnum::BoxBrush)
m_mFaceCache.erase(pKey);
}
m_iNeedsCache |= FaceTypeEnum::BoxBrush;
}
void CWorld::UncachePlaneBrushes()
{
if (m_iNeedsCache & FaceTypeEnum::PlaneBrush)
return;
for (auto& [pKey, vFaces] : m_mFaceCache)
{
if (vFaces.front().m_iType == FaceTypeEnum::PlaneBrush)
m_mFaceCache.erase(pKey);
}
m_iNeedsCache |= FaceTypeEnum::PlaneBrush;
}
void CWorld::UncacheProps()
{
if (m_iNeedsCache & FaceTypeEnum::Prop)
return;
for (auto& [pKey, vFaces] : m_mFaceCache)
{
if (vFaces.front().m_iType == FaceTypeEnum::Prop)
m_mFaceCache.erase(pKey);
}
m_iNeedsCache |= FaceTypeEnum::Prop;
}
void CWorld::UncacheEntities()
{
if (m_iNeedsCache & FaceTypeEnum::Entity)
return;
for (auto& [pKey, vFaces] : m_mFaceCache)
{
if (vFaces.front().m_iType == FaceTypeEnum::Entity)
m_mFaceCache.erase(pKey);
}
m_iNeedsCache |= FaceTypeEnum::Entity;
}
std::vector<Face_t> CWorld::GetFacesInAABB(const Vec3& vMins, const Vec3& vMaxs, int iMask, ITraceFilter* pFilter, int iFlags)
{
Cache();
std::vector<Face_t> vFaces;
if (iFlags & (FaceTypeEnum::BoxBrush | FaceTypeEnum::PlaneBrush))
{
CUtlVector<int> vBrushes; I::EngineTrace->GetBrushesInAABB(vMins, vMaxs, &vBrushes, iMask);
for (int iBrush = 0; iBrush < vBrushes.Count(); iBrush++)
{
cbrush_t* pBrush = &I::BSPData->map_brushes[vBrushes[iBrush]];
if (!m_mFaceCache.contains(pBrush))
continue;
bool bBox = pBrush->IsBox();
if (!(iFlags & (bBox ? FaceTypeEnum::BoxBrush : FaceTypeEnum::PlaneBrush)))
continue;
auto& vCache = m_mFaceCache[pBrush];
if (bBox)
{
for (auto& tFace : vCache)
{
if (FaceValid(tFace.m_vVertices, &tFace.m_vNormal, &vMins, &vMaxs))
{
vFaces.push_back(tFace);
for (auto& vVertex : vFaces.back().m_vVertices)
vVertex = vVertex.Clamp(vMins, vMaxs);
}
}
}
else
{
for (auto& tFace : vCache)
{
if (FaceValid(tFace.m_vVertices, &tFace.m_vNormal, &vMins, &vMaxs))
vFaces.push_back(tFace);
}
}
}
}
if (iFlags & FaceTypeEnum::Displacement && *I::DispCollTrees)
{
for (int iDisplacement = 0; iDisplacement < *I::DispCollTreeCount; iDisplacement++)
{
CDispCollTree* pDispTree = &(*I::DispCollTrees)[iDisplacement];
if (!Math::IsBoxIntersectingBox(vMins, vMaxs, pDispTree->m_mins, pDispTree->m_maxs))
continue;
int iFaces = pDispTree->GetFaceCount();
for (int iFace = 0; iFace < iFaces; iFace++)
{
CDispCollTri* pTri = &pDispTree->m_aTris[iFace];
std::vector<Vec3> vVertices = { pDispTree->m_aVerts[pTri->GetVert(0)], pDispTree->m_aVerts[pTri->GetVert(1)], pDispTree->m_aVerts[pTri->GetVert(2)] };
if (FaceValid(vVertices, &pTri->m_vecNormal, &vMins, &vMaxs))
vFaces.emplace_back(vVertices, pTri->m_vecNormal, FaceTypeEnum::Displacement);
}
}
}
if (iFlags & (FaceTypeEnum::Entity | FaceTypeEnum::Prop))
{
CEntityEnumerator tEnumerator; I::SpatialPartition->EnumerateElementsInBox(I::EngineTrace->SpatialPartitionMask(), vMins, vMaxs, false, &tEnumerator);
for (auto pHandleEntity : tEnumerator.m_vEntities)
{
if (!pFilter->ShouldHitEntity(pHandleEntity, iMask))
continue;
bool bProp = I::StaticPropMgr->IsStaticProp(pHandleEntity);
if (!(iFlags & (bProp ? FaceTypeEnum::Prop : FaceTypeEnum::Entity)))
continue;
ICollideable* pCollideable = nullptr;
if (!I::StaticPropMgr->IsStaticProp(pHandleEntity))
{
CBaseEntity* pEntity = reinterpret_cast<CBaseEntity*>(pHandleEntity);
if (!pEntity->GetAbsVelocity().IsZero())
continue;
pCollideable = pEntity->GetCollideable();
}
else
pCollideable = I::StaticPropMgr->GetStaticProp(pHandleEntity);
if (!pCollideable || !pCollideable->IsSolid())
continue;
vcollide_t* pCollide = I::ModelInfoClient->GetVCollide(pCollideable->GetCollisionModel());
if (!m_mFaceCache.contains(pCollide))
continue;
auto& vCache = m_mFaceCache[pCollide];
for (auto& tFace : vCache)
{
std::vector<Vec3> vVertices = tFace.m_vVertices;
Vec3 vNormal = tFace.m_vNormal;
if (!pCollideable->GetCollisionAngles())
{
for (auto& vVertex : vVertices)
vVertex += pCollideable->GetCollisionOrigin();
}
else
{
for (auto& vVertex : vVertices)
vVertex = Math::VectorTransform(vVertex, pCollideable->CollisionToWorldTransform());
vNormal = (vVertices[0] - vVertices[2]).Cross(vVertices[0] - vVertices[1]).Normalized();
}
if (FaceValid(vVertices, &vNormal, &vMins, &vMaxs))
vFaces.emplace_back(vVertices, vNormal, tFace.m_iType);
}
}
}
return vFaces;
}
#ifdef WORLD_DEBUG
void CWorld::DrawFace(const Face_t& tFace, int iFlags)
{
if (iFlags & (DrawTypeEnum::Points | DrawTypeEnum::Edges))
{
for (int i = 0; i < tFace.m_vVertices.size(); i++)
{
const Vec3& vVertex1 = tFace.m_vVertices[i], &vVertex2 = tFace.m_vVertices[(i + 1) % tFace.m_vVertices.size()];
if (iFlags & DrawTypeEnum::Points)
G::BoxStorage.emplace_back(vVertex1, Vec3::Get(1), Vec3::Get(1), Vec3(0, 0, 0), I::GlobalVars->curtime + 60.f, Color_t(255, 0, 0), Color_t(0, 0, 0, 0), true);
if (iFlags & DrawTypeEnum::Edges)
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vVertex1, vVertex2), I::GlobalVars->curtime + 60.f, Color_t(255, 0, 0), true);
}
}
if (iFlags & DrawTypeEnum::Faces)
{
for (int i = 0; ++i < tFace.m_vVertices.size() - 1;)
{
const Vec3& vVertex1 = tFace.m_vVertices[0], &vVertex2 = tFace.m_vVertices[i], &vVertex3 = tFace.m_vVertices[i + 1];
G::TriangleStorage.emplace_back(std::array<Vec3, 3>({ vVertex1, vVertex2, vVertex3 }), I::GlobalVars->curtime + 60.f, Color_t(255, 0, 0, 50), true);
}
}
if (iFlags & DrawTypeEnum::Normals)
{
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(tFace.m_vVertices[0], tFace.m_vVertices[0] + tFace.m_vNormal * 10), I::GlobalVars->curtime + 60.f, Color_t(255, 255, 0), true);
G::BoxStorage.emplace_back(tFace.m_vVertices[0] + tFace.m_vNormal * 10, Vec3::Get(-1), Vec3::Get(1), Vec3(), I::GlobalVars->curtime + 60.f, Color_t(255, 255, 0), Color_t(0, 0, 0, 0), true);
}
}
#endif
+100
View File
@@ -0,0 +1,100 @@
#pragma once
#include "../../SDK/SDK.h"
#include <functional>
#define DIST_EPSILON 0.03125f
#define CALC_EPSILON 0.001f
//#define WORLD_DEBUG
Enum(FaceType, None = 0, BoxBrush = 1 << 0, PlaneBrush = 1 << 1, Displacement = 1 << 2, Prop = 1 << 3, Entity = 1 << 4, All = BoxBrush | PlaneBrush | Displacement | Prop | Entity, Cache = BoxBrush | PlaneBrush | Prop | Entity)
#ifdef WORLD_DEBUG
Enum(DrawType, Points = 1 << 0, Edges = 1 << 1, Faces = 1 << 2, Normals = 1 << 3)
namespace Vars {
NAMESPACE_BEGIN(World)
CVarValues(Faces, "Faces", 0b11111, NOSAVE | DEBUGVAR | DROPDOWN_MULTI, nullptr,
"BoxBrush", "PlaneBrush", "Displacement", "Prop", "Entity");
CVarValues(Draw, "Draw", 0b0110, NOSAVE | DEBUGVAR | DROPDOWN_MULTI, nullptr,
"Points", "Edges", "Faces", "Normals");
NAMESPACE_END(World)
}
#endif
using VerticesValidCallback = const std::function<bool(const std::vector<Vec3>&)>;
using BoundsValidCallback = const std::function<bool(const std::vector<Vec3>&, const Vec3&, const Vec3&)>;
using NormalValidCallback = const std::function<bool(const std::vector<Vec3>&, const Vec3&)>;
struct Plane_t
{
Vec3 m_vNormal;
float m_flDist;
};
struct Face_t
{
std::vector<Vec3> m_vVertices;
Vec3 m_vNormal;
int8_t m_iType;
};
static VerticesValidCallback s_fVerticesValid = [](const std::vector<Vec3>& vVertices)
{
return vVertices.size() >= 3;
};
static BoundsValidCallback s_fBoundsValid = [](const std::vector<Vec3>& vVertices, const Vec3& vMins, const Vec3& vMaxs)
{
Vec3 vVerticeMins = Vec3::GetMax(), vVerticeMaxs = Vec3::GetMin();
for (auto& vVertex : vVertices)
vVerticeMins = vVerticeMins.Min(vVertex), vVerticeMaxs = vVerticeMaxs.Max(vVertex);
return Math::IsBoxIntersectingBox(vVerticeMins, vVerticeMaxs, vMins, vMaxs);
};
static NormalValidCallback s_fNormalValid = [](const std::vector<Vec3>& vVertices, const Vec3& vNormal)
{
#ifdef WORLD_DEBUG
Vec3 vAngles = I::EngineClient->GetViewAngles();
Vec3 vForward; Math::AngleVectors(vAngles, &vForward);
return vForward.Dot(vNormal) < 0;
#else
return true;
#endif
};
class CWorld
{
private:
bool FaceValid(const std::vector<Vec3>& vVertices, const Vec3* pNormal, const Vec3* pMins = nullptr, const Vec3* pMaxs = nullptr);
VerticesValidCallback* m_pVerticesValidCallback = &s_fVerticesValid;
BoundsValidCallback* m_pBoundsValidCallback = &s_fBoundsValid;
NormalValidCallback* m_pNormalValidCallback = &s_fNormalValid;
int m_iNeedsCache = FaceTypeEnum::Cache;
std::unordered_map<void*, std::vector<Face_t>> m_mFaceCache = {};
public:
void Cache();
void CacheBoxBrushes();
void CachePlaneBrushes();
void CacheProps();
void CacheEntities();
void Uncache();
void UncacheBoxBrushes();
void UncachePlaneBrushes();
void UncacheProps();
void UncacheEntities();
std::vector<Face_t> GetFacesInAABB(const Vec3& vMins, const Vec3& vMaxs, int iMask = MASK_SOLID, ITraceFilter* pFilter = nullptr, int iFlags = FaceTypeEnum::All);
void SetVerticesValidCallback(VerticesValidCallback* pCallback = nullptr);
void SetBoundsValidCallback(BoundsValidCallback* pCallback = nullptr);
void SetNormalValidCallback(NormalValidCallback* pCallback = nullptr);
#ifdef WORLD_DEBUG
void DrawFace(const Face_t& tFace, int iFlags = DrawTypeEnum::Points | DrawTypeEnum::Edges | DrawTypeEnum::Faces | DrawTypeEnum::Normals);
#endif
};
ADD_FEATURE(CWorld, World);
@@ -0,0 +1,39 @@
#include "../SDK/SDK.h"
#include "../Features/World/World.h"
MAKE_SIGNATURE(CModelLoader_Map_LoadModel, "engine.dll", "48 8B C4 48 89 58 ? 48 89 50 ? 48 89 48 ? 55 56 57 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? FF 05", 0x0);
MAKE_SIGNATURE(CStaticPropMgr_LevelInit, "engine.dll", "40 57 48 81 EC ? ? ? ? 80 B9", 0x0);
MAKE_SIGNATURE(CM_FreeMap, "engine.dll", "48 8D 0D ? ? ? ? E9 ? ? ? ? CC CC CC CC 48 89 5C 24 ? 57 48 83 EC ? 45 33 C9", 0x0);
MAKE_HOOK(CModelLoader_Map_LoadModel, S::CModelLoader_Map_LoadModel(), void,
void* rcx, model_t* mod)
{
DEBUG_RETURN(CModelLoader_Map_LoadModel, rcx, mod);
CALL_ORIGINAL(rcx, mod);
F::World.CacheBoxBrushes();
F::World.CachePlaneBrushes();
F::World.CacheEntities();
}
MAKE_HOOK(CStaticPropMgr_LevelInit, S::CStaticPropMgr_LevelInit(), void,
void* rcx)
{
DEBUG_RETURN(CStaticPropMgr_LevelInit, rcx);
CALL_ORIGINAL(rcx);
F::World.CacheProps();
}
MAKE_HOOK(CM_FreeMap, S::CM_FreeMap(), void,
)
{
DEBUG_RETURN(CM_FreeMap);
CALL_ORIGINAL();
F::World.Uncache();
}
@@ -1,6 +1,6 @@
#include "../SDK/SDK.h"
#include "../SDK/Definitions/Misc/UtlObjectReference.h"
#include "../SDK/Definitions/Misc/CUtlObjectReference.h"
MAKE_SIGNATURE(COPRenderSprites_Render, "client.dll", "48 89 54 24 ? 55 53 57 41 55 41 56", 0x0);
MAKE_SIGNATURE(COPRenderSprites_RenderSpriteCard, "client.dll", "48 8B C4 48 89 58 ? 57 41 54", 0x0);
@@ -72,25 +72,25 @@ struct EmitSound_t
EmitSound_t(const CSoundParameters& src);
int m_nChannel;
int m_nChannel;
char const* m_pSoundName;
float m_flVolume;
int m_SoundLevel;
int m_nFlags;
int m_nPitch;
int m_nSpecialDSP;
float m_flVolume;
int m_SoundLevel;
int m_nFlags;
int m_nPitch;
int m_nSpecialDSP;
const Vector* m_pOrigin;
float m_flSoundTime; ///< NOT DURATION, but rather, some absolute time in the future until which this sound should be delayed
float m_flSoundTime; ///< NOT DURATION, but rather, some absolute time in the future until which this sound should be delayed
float* m_pflSoundDuration;
bool m_bEmitCloseCaption;
bool m_bWarnOnMissingCloseCaption;
bool m_bWarnOnDirectWaveReference;
int m_nSpeakerEntity;
mutable CUtlVector< Vector > m_UtlVecSoundOrigin; ///< Actual sound origin(s) (can be multiple if sound routed through speaker entity(ies) )
mutable short m_hSoundScriptHandle;
bool m_bEmitCloseCaption;
bool m_bWarnOnMissingCloseCaption;
bool m_bWarnOnDirectWaveReference;
int m_nSpeakerEntity;
mutable CUtlVector<Vector> m_UtlVecSoundOrigin; ///< Actual sound origin(s) (can be multiple if sound routed through speaker entity(ies) )
mutable short m_hSoundScriptHandle;
};
const static std::vector<const char*> s_vFootsteps = { "footstep", "flesh_impact_hard", "body_medium_impact_soft", "glass_sheet_step", "rubber_tire_impact_soft", "plastic_box_impact_soft", "plastic_barrel_impact_soft", "cardboard_box_impact_soft", "ceiling_tile_step" };
const static std::vector<const char*> s_vFootsteps = { "footstep", "flesh_impact_hard", "body_medium_impact_soft", "ceiling_tile_step", "glass_sheet_step", "rubber_tire_impact_soft", "plastic_box_impact_soft", "plastic_barrel_impact_soft", "cardboard_box_impact_soft", "glass_impact_soft" };
const static std::vector<const char*> s_vNoisemaker = { "items\\halloween", "items\\football_manager", "items\\japan_fundraiser", "items\\samurai\\tf_samurai_noisemaker", "items\\summer", "misc\\happy_birthday_tf", "misc\\jingle_bells" };
const static std::vector<const char*> s_vFryingPan = { "pan_" };
const static std::vector<const char*> s_vWater = { "ambient_mp3\\water\\water_splash", "slosh", "wade" };
@@ -102,29 +102,29 @@ static inline bool ShouldBlockSound(const char* pSound)
std::string sSound = pSound;
std::transform(sSound.begin(), sSound.end(), sSound.begin(), ::tolower);
auto CheckSound = [&](const std::vector<const char*>& vSounds, int iFlag = -1)
auto fCheckSound = [&](const std::vector<const char*>& vSounds, int iFlag = -1)
{
if (Vars::Misc::Sound::Block.Value & iFlag)
{
if (/*iFlag == -1 ||*/ Vars::Misc::Sound::Block.Value & iFlag)
for (auto& sNoise : vSounds)
{
for (auto& sNoise : vSounds)
{
if (sSound.find(sNoise) != std::string::npos)
return true;
}
if (sSound.find(sNoise) != std::string::npos)
return true;
}
return false;
};
}
return false;
};
if (CheckSound(s_vFootsteps, Vars::Misc::Sound::BlockEnum::Footsteps))
if (fCheckSound(s_vFootsteps, Vars::Misc::Sound::BlockEnum::Footsteps))
return true;
if (CheckSound(s_vNoisemaker, Vars::Misc::Sound::BlockEnum::Noisemaker))
if (fCheckSound(s_vNoisemaker, Vars::Misc::Sound::BlockEnum::Noisemaker))
return true;
if (CheckSound(s_vFryingPan, Vars::Misc::Sound::BlockEnum::FryingPan))
if (fCheckSound(s_vFryingPan, Vars::Misc::Sound::BlockEnum::FryingPan))
return true;
if (CheckSound(s_vWater, Vars::Misc::Sound::BlockEnum::Water))
if (fCheckSound(s_vWater, Vars::Misc::Sound::BlockEnum::Water))
return true;
return false;
@@ -2,42 +2,6 @@
MAKE_SIGNATURE(CStaticPropMgr_ComputePropOpacity, "engine.dll", "48 89 5C 24 ? 48 89 7C 24 ? 41 54 41 56 41 57 48 83 EC ? 48 8B 05", 0x0);
class CStaticProp
{
public:
byte pad[20];
Vector m_Origin;
QAngle m_Angles;
model_t* m_pModel;
SpatialPartitionHandle_t m_Partition;
ModelInstanceHandle_t m_ModelInstance;
unsigned char m_Alpha;
unsigned char m_nSolidType;
unsigned char m_Skin;
unsigned char m_Flags;
unsigned short m_FirstLeaf;
unsigned short m_LeafCount;
CBaseHandle m_EntHandle; // FIXME: Do I need client + server handles?
ClientRenderHandle_t m_RenderHandle;
unsigned short m_FadeIndex; // Index into the m_StaticPropFade dictionary
float m_flForcedFadeScale;
// bbox is the same for both GetBounds and GetRenderBounds since static props never move.
// GetRenderBounds is interpolated data, and GetBounds is last networked.
Vector m_RenderBBoxMin;
Vector m_RenderBBoxMax;
matrix3x4 m_ModelToWorld;
float m_flRadius;
Vector m_WorldRenderBBoxMin;
Vector m_WorldRenderBBoxMax;
// FIXME: This sucks. Need to store the lighting origin off
// because the time at which the static props are unserialized
// doesn't necessarily match the time at which we can initialize the light cache
Vector m_LightingOrigin;
};
MAKE_HOOK(CStaticPropMgr_ComputePropOpacity, S::CStaticPropMgr_ComputePropOpacity(), void,
void* rcx, CStaticProp* pProp)
{
+9 -9
View File
@@ -21,13 +21,13 @@ MAKE_HOOK(CTFPlayerShared_InCond, S::CTFPlayerShared_InCond(), bool,
const auto dwKart1 = S::CTFPlayer_CreateMove_InCondKart_Call();
const auto dwKart2 = S::CTFInput_ApplyMouse_InCond_Call();
auto GetOuter = [&rcx]() -> CBaseEntity*
{
static const auto iShared = U::NetVars.GetNetVar("CTFPlayer", "m_Shared");
static const auto iBombHeadStage = U::NetVars.GetNetVar("CTFPlayer", "m_nHalloweenBombHeadStage");
static const auto iOffset = iBombHeadStage - iShared + 0x4;
return *reinterpret_cast<CBaseEntity**>(uintptr_t(rcx) + iOffset);
};
auto fGetOuter = [&rcx]() -> CBaseEntity*
{
static const auto iShared = U::NetVars.GetNetVar("CTFPlayer", "m_Shared");
static const auto iBombHeadStage = U::NetVars.GetNetVar("CTFPlayer", "m_nHalloweenBombHeadStage");
static const auto iOffset = iBombHeadStage - iShared + 0x4;
return *reinterpret_cast<CBaseEntity**>(uintptr_t(rcx) + iOffset);
};
switch (nCond)
{
@@ -36,13 +36,13 @@ MAKE_HOOK(CTFPlayerShared_InCond, S::CTFPlayerShared_InCond(), bool,
return false;
break;
case TF_COND_DISGUISED:
if (Vars::Visuals::Removals::Disguises.Value && H::Entities.GetLocal() != GetOuter())
if (Vars::Visuals::Removals::Disguises.Value && H::Entities.GetLocal() != fGetOuter())
return false;
break;
case TF_COND_TAUNTING:
if (dwRetAddr == dwTaunt && Vars::Misc::Automation::TauntControl.Value)
return false;
if (Vars::Visuals::Removals::Taunts.Value && H::Entities.GetLocal() != GetOuter())
if (Vars::Visuals::Removals::Taunts.Value && H::Entities.GetLocal() != fGetOuter())
return false;
break;
case TF_COND_HALLOWEEN_KART:
+17
View File
@@ -1,6 +1,7 @@
#include "../SDK/SDK.h"
MAKE_SIGNATURE(CTFPlayer_GetMinFOV, "client.dll", "F3 0F 10 05 ? ? ? ? C3 CC CC CC CC CC CC CC 48 8B 81 ? ? ? ? 8B D2", 0x0);
MAKE_SIGNATURE(CBasePlayer_GetFOV, "client.dll", "40 53 48 83 EC ? 48 8B D9 0F 29 74 24 ? 48 8B 0D ? ? ? ? 48 8B 01", 0x0);
MAKE_HOOK(CTFPlayer_GetMinFOV, S::CTFPlayer_GetMinFOV(), float,
/*void* rcx*/)
@@ -8,4 +9,20 @@ MAKE_HOOK(CTFPlayer_GetMinFOV, S::CTFPlayer_GetMinFOV(), float,
DEBUG_RETURN(CTFPlayer_GetMinFOV, /*rcx*/);
return 0.f;
}
MAKE_HOOK(CBasePlayer_GetFOV, S::CBasePlayer_GetFOV(), float,
void* rcx)
{
DEBUG_RETURN(CTFPlayer_GetMinFOV, rcx);
auto pPlayer = reinterpret_cast<CBasePlayer*>(rcx);
if (pPlayer->entindex() != I::EngineClient->GetLocalPlayer())
return CALL_ORIGINAL(rcx);
int iOriginalFOV = pPlayer->m_iFOV();
pPlayer->m_iFOV() = ceilf(G::FOV);
float flReturn = CALL_ORIGINAL(rcx);
pPlayer->m_iFOV() = iOriginalFOV;
return ceilf(flReturn);
}
+2 -107
View File
@@ -1,50 +1,10 @@
#include "../SDK/SDK.h"
#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)
@@ -54,74 +14,9 @@ MAKE_HOOK(IEngineTrace_TraceRay, U::Memory.GetVirtual(I::EngineTrace, 4), void,
G::LineStorage.emplace_back(std::pair<Vec3, Vec3>(vStart, vEnd), I::GlobalVars->curtime + 0.015f, Color_t(0, 0, 255), bool(GetAsyncKeyState(VK_MENU) & 0x8000));
if (!ray.m_IsRay)
{
G::BoxStorage.emplace_back(ray.m_Start, 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));
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));
G::BoxStorage.emplace_back(ray.m_Start, -ray.m_Extents, 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));
G::BoxStorage.emplace_back(vEnd - ray.m_StartOffset, -ray.m_Extents, 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;
}
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);
}
@@ -10,21 +10,21 @@ MAKE_HOOK(IMaterialSystem_FindTexture, U::Memory.GetVirtual(I::MaterialSystem, 7
auto uHash = FNV1A::Hash32(Vars::Visuals::World::WorldTexture.Value.c_str());
if (uHash == FNV1A::Hash32Const("Flat"))
{
auto overrideTexture = [&]()
{
if (!pReturn || pReturn->IsTranslucent() || !pTextureName || !pTextureGroupName)
return;
auto fOverrideTexture = [&]()
{
if (!pReturn || pReturn->IsTranslucent() || !pTextureName || !pTextureGroupName)
return;
std::string_view sName = pTextureName;
std::string_view sGroup = pTextureGroupName;
if (!sGroup.starts_with(TEXTURE_GROUP_WORLD))
return;
std::string_view sName = pTextureName;
std::string_view sGroup = pTextureGroupName;
if (!sGroup.starts_with(TEXTURE_GROUP_WORLD))
return;
Vec3 vColor; pReturn->GetLowResColorSample(0.5f, 0.5f, &vColor.x);
Color_t tColor = { byte(vColor.x * 255), byte(vColor.y * 255), byte(vColor.z * 255), 255 };
pReturn = I::MaterialSystem->CreateTextureFromBits(1, 1, 1, IMAGE_FORMAT_RGBA8888, 4, &tColor.r);
};
overrideTexture();
Vec3 vColor; pReturn->GetLowResColorSample(0.5f, 0.5f, &vColor.x);
Color_t tColor = { byte(vColor.x * 255), byte(vColor.y * 255), byte(vColor.z * 255), 255 };
pReturn = I::MaterialSystem->CreateTextureFromBits(1, 1, 1, IMAGE_FORMAT_RGBA8888, 4, &tColor.r);
};
fOverrideTexture();
}
return pReturn;
+5 -1
View File
@@ -10,13 +10,16 @@
#include "Main/CBasePlayer.h"
#include "Main/CBaseProjectile.h"
#include "Main/CCaptureFlag.h"
#include "Main/CCollisionProperty.h"
#include "Main/CEconDefinition.h"
#include "Main/CEconEntity.h"
#include "Main/CEconWearable.h"
#include "Main/CEntitySphereQuery.h"
#include "Main/CGameTrace.h"
#include "Main/CMultiPlayerAnimState.h"
#include "Main/CPredictionCopy.h"
#include "Main/CSniperDot.h"
#include "Main/CStaticProp.h"
#include "Main/CTFPlayer.h"
#include "Main/CTFPlayerResource.h"
#include "Main/CTFWeaponBase.h"
@@ -34,4 +37,5 @@
#include "Main/ITexture.h"
#include "Main/KeyValues.h"
#include "Main/MD5.h"
#include "Main/PlayerStats.h"
#include "Main/PlayerStats.h"
#include "Main/Ray.h"
@@ -1215,11 +1215,6 @@ enum
class CBaseEntity;
struct CUtlString
{
char* m_pString;
};
struct FireBulletsInfo_t
{
int m_iShots;
+5
View File
@@ -4,9 +4,12 @@
#include "Interfaces/CClientModeShared.h"
#include "Interfaces/CClientState.h"
#include "Interfaces/CCollisionBSPData.h"
#include "Interfaces/CDispCollTree.h"
#include "Interfaces/CGlobalVarsBase.h"
#include "Interfaces/CHLClient.h"
#include "Interfaces/CHLTVCamera.h"
#include "Interfaces/CStaticPropMgr.h"
#include "Interfaces/CTFGameRules.h"
#include "Interfaces/CTFGCClientSystem.h"
#include "Interfaces/CThirdPersonManager.h"
@@ -26,6 +29,7 @@
#include "Interfaces/IMemAlloc.h"
#include "Interfaces/IMoveHelper.h"
#include "Interfaces/IPanel.h"
#include "Interfaces/ISpatialPartition.h"
#include "Interfaces/IStudioRender.h"
#include "Interfaces/IUniformRandomStream.h"
#include "Interfaces/IVEngineClient.h"
@@ -37,6 +41,7 @@
#include "Interfaces/SteamInterfaces.h"
#include "Interfaces/ViewRenderBeams.h"
#include "Interfaces/VPhysics.h"
#include "Interfaces/WorldBrushData.h"
#include <d3d9.h>
MAKE_INTERFACE_SIGNATURE(IDirect3DDevice9, DirectXDevice, "shaderapidx9.dll, shaderapivk.dll", "48 8B 0D ? ? ? ? 48 8B 01 FF 50 ? 8B F8", 0x0, 1)
@@ -1,12 +1,16 @@
#pragma once
#include "Interface.h"
#include "../Main/INetChannel.h"
#include "../Misc/ClientClass.h"
#include "../Misc/ServerClass.h"
#include "../Misc/CUtlVector.h"
#include "../Misc/CUtlString.h"
#include "../Definitions.h"
MAKE_SIGNATURE(CBaseClientState_SendStringCmd, "engine.dll", "48 81 EC ? ? ? ? 48 8B 49", 0x0);
#define MAX_OSPATH 260 // max length of a filesystem pathname
class INetChannel;
class IChangeFrameList;
class PackedEntity
@@ -0,0 +1,52 @@
#pragma once
#include "Interface.h"
#include "../Main/CModel.h"
#include "../Misc/CRangeValidatedArray.h"
#include "../Misc/CDiscardableArray.h"
#define MAX_QPATH 96
class CCollisionBSPData
{
public:
cnode_t* map_rootnode;
char map_name[MAX_QPATH];
static csurface_t nullsurface;
int numbrushsides;
CRangeValidatedArray<cbrushside_t> map_brushsides;
int numboxbrushes;
CRangeValidatedArray<cboxbrush_t> map_boxbrushes;
int numplanes;
CRangeValidatedArray<cplane_t> map_planes;
int numnodes;
CRangeValidatedArray<cnode_t> map_nodes;
int numleafs;
CRangeValidatedArray<cleaf_t> map_leafs;
int emptyleaf, solidleaf;
int numleafbrushes;
CRangeValidatedArray<unsigned short> map_leafbrushes;
int numcmodels;
CRangeValidatedArray<cmodel_t> map_cmodels;
int numbrushes;
CRangeValidatedArray<cbrush_t> map_brushes;
int numdisplist;
CRangeValidatedArray<unsigned short> map_dispList;
int numvisibility;
dvis_t* map_vis;
int numentitychars;
CDiscardableArray<char> map_entitystring;
int numareas;
CRangeValidatedArray<carea_t> map_areas;
int numareaportals;
CRangeValidatedArray<dareaportal_t> map_areaportals;
int numclusters;
char* map_nullname;
int numtextures;
char* map_texturenames;
CRangeValidatedArray<csurface_t> map_surfaces;
int floodvalid;
int numportalopen;
CRangeValidatedArray<bool> portalopen;
};
MAKE_INTERFACE_SIGNATURE(CCollisionBSPData, BSPData, "engine.dll", "48 8D 15 ? ? ? ? 4C 03 05", 0x0, 0);
@@ -0,0 +1,114 @@
#pragma once
#include "../Misc/CUtlVector.h"
#include "../Types.h"
typedef __m128 fltx4;
class __declspec(align(16)) FourVectors
{
public:
fltx4 x, y, z;
};
template<typename T>
class CDispVector : public CUtlVector<T, CUtlMemoryAligned<T, 16>>
{
};
class CDispCollTri
{
public:
inline void SetVert(int iPos, int iVert) { m_TriData[iPos].m_Index.uiVert = iVert; }
inline int GetVert(int iPos) const { return m_TriData[iPos].m_Index.uiVert; }
inline void SetMin(int iAxis, int iMin) { m_TriData[iAxis].m_Index.uiMin = iMin; }
inline int GetMin(int iAxis) const { return m_TriData[iAxis].m_Index.uiMin; }
inline void SetMax(int iAxis, int iMax) { m_TriData[iAxis].m_Index.uiMax = iMax; }
inline int GetMax(int iAxis) const { return m_TriData[iAxis].m_Index.uiMax; }
struct index_t
{
union
{
struct
{
unsigned short uiVert : 9;
unsigned short uiMin : 2;
unsigned short uiMax : 2;
} m_Index;
unsigned short m_IndexDummy;
};
};
index_t m_TriData[3];
unsigned short m_ucSignBits : 3;
unsigned short m_ucPlaneType : 3;
unsigned short m_uiFlags : 5;
Vector m_vecNormal;
float m_flDist;
};
class CDispCollNode
{
public:
FourVectors m_mins;
FourVectors m_maxs;
};
class CDispCollLeaf
{
public:
short m_tris[2];
};
#pragma pack(1)
class CDispCollTriCache
{
public:
unsigned short m_iCrossX[3];
unsigned short m_iCrossY[3];
unsigned short m_iCrossZ[3];
};
#pragma pack()
class CDispCollHelper
{
public:
float m_flStartFrac;
float m_flEndFrac;
Vector m_vecImpactNormal;
float m_flImpactDist;
};
class CDispCollTree
{
public:
inline int GetWidth(void) const { return ((1 << m_nPower) + 1); }
inline int GetHeight(void) const { return ((1 << m_nPower) + 1); }
inline int GetSize(void) const { return ((1 << m_nPower) + 1) * ((1 << m_nPower) + 1); }
inline int GetFaceCount(void) const { return ((1 << m_nPower) * (1 << m_nPower) * 2); }
byte pad0[8];
Vector m_mins;
int m_iCounter;
Vector m_maxs;
int m_nContents;
void* m_hCache;
int m_nPower;
int m_nFlags;
Vector m_vecSurfPoints[4];
Vector m_vecStabDir;
short m_nSurfaceProps[2];
CUtlVector<Vector> m_aVerts;
CDispVector<CDispCollTri> m_aTris;
CDispVector<CDispCollNode> m_nodes;
CDispVector<CDispCollLeaf> m_leaves;
CUtlVector<CDispCollTriCache> m_aTrisCache;
CUtlVector<Vector> m_aEdgePlanes;
CDispCollHelper m_Helper;
unsigned int m_nSize;
};
MAKE_INTERFACE_SIGNATURE(CDispCollTree*, DispCollTrees, "engine.dll", "48 89 05 ? ? ? ? E8 ? ? ? ? 48 8B D0", 0x0, 0, false);
MAKE_INTERFACE_SIGNATURE(int, DispCollTreeCount, "engine.dll", "44 89 35 ? ? ? ? E8", 0x0, 0, false);
@@ -1,31 +1,37 @@
#pragma once
#include "Interface.h"
#include "../Main/UtlVector.h"
#include "../Misc/BaseTypes.h"
#include "../Misc/bitbuf.h"
#include "../Misc/ButtonCode.h"
#include "../Misc/ChecksumCRC.h"
#include "../Misc/ClientClass.h"
#include "../Misc/bitbuf.h"
#include "../Misc/CUtlVector.h"
#include "../Misc/ButtonCode.h"
#include "../Misc/CViewSetup.h"
#include "../Misc/Datamap.h"
#include "../Misc/Modes.h"
#include "../Definitions.h"
#include <Windows.h>
struct vrect_t;
struct cmodel_t;
struct ScreenFade_t;
struct ScreenShake_t;
class CEngineSprite;
class CGlobalVarsBase;
class CEngineSprite;
class CSaveRestoreData;
struct datamap_t;
struct typedescription_t;
class CStandardRecvProxies;
class IFileList;
class CRenamedRecvTableInfo;
class CMouthInfo;
class IConVar;
struct vrect_t;
struct ScreenFade_t;
struct datamap_t;
struct typedescription_t;
enum ClientFrameStage_t
{
FRAME_UNDEFINED = -1,
FRAME_START,
FRAME_NET_UPDATE_START,
FRAME_NET_UPDATE_POSTDATAUPDATE_START,
FRAME_NET_UPDATE_POSTDATAUPDATE_END,
FRAME_NET_UPDATE_END,
FRAME_RENDER_START,
FRAME_RENDER_END
};
typedef struct _XUSER_DATA
{
@@ -62,18 +68,6 @@ typedef struct _XUSER_CONTEXT
DWORD dwValue;
} XUSER_CONTEXT, * PXUSER_CONTEXT;
enum ClientFrameStage_t
{
FRAME_UNDEFINED = -1,
FRAME_START,
FRAME_NET_UPDATE_START,
FRAME_NET_UPDATE_POSTDATAUPDATE_START,
FRAME_NET_UPDATE_POSTDATAUPDATE_END,
FRAME_NET_UPDATE_END,
FRAME_RENDER_START,
FRAME_RENDER_END
};
class IBaseClientDLL
{
public:
@@ -5,21 +5,21 @@
class CHLTVCamera : CGameEventListener
{
public:
int m_nCameraMode; // current camera mode
int m_iCameraMan; // camera man entindex or 0
Vector m_vCamOrigin; //current camera origin
QAngle m_aCamAngle; //current camera angle
int m_iTraget1; // first tracked target or 0
int m_iTraget2; // second tracked target or 0
float m_flFOV; // current FOV
float m_flOffset; // z-offset from target origin
float m_flDistance; // distance to traget origin+offset
float m_flLastDistance; // too smooth distance
float m_flTheta; // view angle horizontal
float m_flPhi; // view angle vertical
float m_flInertia; // camera inertia 0..100
int m_nCameraMode;
int m_iCameraMan;
Vector m_vCamOrigin;
QAngle m_aCamAngle;
int m_iTraget1;
int m_iTraget2;
float m_flFOV;
float m_flOffset;
float m_flDistance;
float m_flLastDistance;
float m_flTheta;
float m_flPhi;
float m_flInertia;
float m_flLastAngleUpdateTime;
bool m_bEntityPacketReceived; // true after a new packet was received
bool m_bEntityPacketReceived;
int m_nNumSpectators;
char m_szTitleText[64];
CUserCmd m_LastCmd;
@@ -0,0 +1,130 @@
#pragma once
#include "../Main/CStaticProp.h"
#include "../Main/CGameTrace.h"
#include "../Misc/CUtlVector.h"
class IPhysicsEnvironment;
class IVPhysicsKeyHandler;
typedef unsigned short MDLHandle_t;
typedef struct LightCacheHandle_t__* LightCacheHandle_t;
struct StaticPropLeafLump_t
{
unsigned short m_Leaf;
};
class IStaticPropMgrEngine
{
public:
virtual bool Init() = 0;
virtual void Shutdown() = 0;
virtual void LevelInit() = 0;
virtual void LevelInitClient() = 0;
virtual void LevelShutdownClient() = 0;
virtual void LevelShutdown() = 0;
virtual void RecomputeStaticLighting() = 0;
virtual bool IsPropInPVS(IHandleEntity* pHandleEntity, const byte* pVis) const = 0;
virtual ICollideable* GetStaticProp(IHandleEntity* pHandleEntity) = 0;
virtual LightCacheHandle_t GetLightCacheHandleForStaticProp(IHandleEntity* pHandleEntity) = 0;
virtual bool IsStaticProp(IHandleEntity* pHandleEntity) const = 0;
virtual bool IsStaticProp(CBaseHandle handle) const = 0;
virtual int GetStaticPropIndex(IHandleEntity* pHandleEntity) const = 0;
virtual bool PropHasBakedLightingDisabled(IHandleEntity* pHandleEntity) const = 0;
};
class IStaticPropMgr
{
public:
virtual void CreateVPhysicsRepresentations(IPhysicsEnvironment* physenv, IVPhysicsKeyHandler* pDefaults, void* pGameData) = 0;
virtual void TraceRayAgainstStaticProp(const Ray_t& ray, int staticPropIndex, trace_t& tr) = 0;
virtual bool IsStaticProp(IHandleEntity* pHandleEntity) const = 0;
virtual bool IsStaticProp(CBaseHandle handle) const = 0;
virtual ICollideable* GetStaticPropByIndex(int propIndex) = 0;
};
class IStaticPropMgrClient : public IStaticPropMgr
{
public:
virtual void ComputePropOpacity(const Vector & viewOrigin, float factor) = 0;
virtual void AddDecalToStaticProp(const Vector& rayStart, const Vector& rayEnd, int staticPropIndex, int decalIndex, bool doTrace, trace_t& tr) = 0;
virtual void AddShadowToStaticProp(unsigned short shadowHandle, IClientRenderable* pRenderable) = 0;
virtual void RemoveAllShadowsFromStaticProp(IClientRenderable* pRenderable) = 0;
virtual void GetStaticPropMaterialColorAndLighting(trace_t* pTrace, int staticPropIndex, Vector& lighting, Vector& matColor) = 0;
virtual void GetAllStaticProps(CUtlVector<ICollideable*>* pOutput) = 0;
virtual void GetAllStaticPropsInAABB(const Vector& vMins, const Vector& vMaxs, CUtlVector<ICollideable*>* pOutput) = 0;
virtual void GetAllStaticPropsInOBB(const Vector& ptOrigin, const Vector& vExtent1, const Vector& vExtent2, const Vector& vExtent3, CUtlVector<ICollideable*>* pOutput) = 0;
virtual void DrawStaticProps(IClientRenderable** pProps, int count, bool bShadowDepth, bool drawVCollideWireframe) = 0;
virtual void AddColorDecalToStaticProp(Vector const& rayStart, Vector const& rayEnd, int staticPropIndex, int decalIndex, bool doTrace, trace_t& tr, bool bUseColor, Color_t cColor) = 0;
};
class IStaticPropMgrServer : public IStaticPropMgr
{
public:
virtual void GetAllStaticProps(CUtlVector<ICollideable*>* pOutput) = 0;
virtual void GetAllStaticPropsInAABB(const Vector& vMins, const Vector& vMaxs, CUtlVector<ICollideable*>* pOutput) = 0;
virtual void GetAllStaticPropsInOBB(const Vector& ptOrigin, const Vector& vExtent1, const Vector& vExtent2, const Vector& vExtent3, CUtlVector<ICollideable*>* pOutput) = 0;
};
class CStaticPropMgr : public IStaticPropMgrEngine, public IStaticPropMgrClient, public IStaticPropMgrServer
{
public:
virtual ~CStaticPropMgr() = 0;
virtual bool Init() = 0;
virtual void Shutdown() = 0;
virtual void LevelInit() = 0;
virtual void LevelInitClient() = 0;
virtual void LevelShutdown() = 0;
virtual void LevelShutdownClient() = 0;
virtual bool IsPropInPVS(IHandleEntity* pHandleEntity, const byte* pVis) const = 0;
virtual ICollideable* GetStaticProp(IHandleEntity* pHandleEntity) = 0;
virtual void RecomputeStaticLighting() = 0;
virtual LightCacheHandle_t GetLightCacheHandleForStaticProp(IHandleEntity* pHandleEntity) = 0;
virtual bool IsStaticProp(IHandleEntity* pHandleEntity) const = 0;
virtual bool IsStaticProp(CBaseHandle handle) const = 0;
virtual int GetStaticPropIndex(IHandleEntity* pHandleEntity) const = 0;
virtual ICollideable* GetStaticPropByIndex(int propIndex) = 0;
virtual void ComputePropOpacity(const Vector& viewOrigin, float factor) = 0;
virtual void TraceRayAgainstStaticProp(const Ray_t& ray, int staticPropIndex, trace_t& tr) = 0;
virtual void AddDecalToStaticProp(Vector const& rayStart, Vector const& rayEnd, int staticPropIndex, int decalIndex, bool doTrace, trace_t& tr) = 0;
virtual void AddColorDecalToStaticProp(Vector const& rayStart, Vector const& rayEnd, int staticPropIndex, int decalIndex, bool doTrace, trace_t& tr, bool bUseColor, Color_t cColor) = 0;
virtual void AddShadowToStaticProp(unsigned short shadowHandle, IClientRenderable* pRenderable) = 0;
virtual void RemoveAllShadowsFromStaticProp(IClientRenderable* pRenderable) = 0;
virtual void GetStaticPropMaterialColorAndLighting(trace_t* pTrace, int staticPropIndex, Vector& lighting, Vector& matColor) = 0;
virtual void CreateVPhysicsRepresentations(IPhysicsEnvironment* physenv, IVPhysicsKeyHandler* pDefaults, void* pGameData) = 0;
virtual void GetAllStaticProps(CUtlVector<ICollideable*>* pOutput) = 0;
virtual void GetAllStaticPropsInAABB(const Vector& vMins, const Vector& vMaxs, CUtlVector<ICollideable*>* pOutput) = 0;
virtual void GetAllStaticPropsInOBB(const Vector& ptOrigin, const Vector& vExtent1, const Vector& vExtent2, const Vector& vExtent3, CUtlVector<ICollideable*>* pOutput) = 0;
virtual bool PropHasBakedLightingDisabled(IHandleEntity* pHandleEntity) const = 0;
struct StaticPropDict_t
{
model_t* m_pModel;
MDLHandle_t m_hMDL;
};
struct StaticPropFade_t
{
int m_Model;
union
{
float m_MinDistSq;
float m_MaxScreenWidth;
};
union
{
float m_MaxDistSq;
float m_MinScreenWidth;
};
float m_FalloffFactor;
};
CUtlVector <StaticPropDict_t> m_StaticPropDict;
CUtlVector <CStaticProp> m_StaticProps;
CUtlVector <StaticPropLeafLump_t> m_StaticPropLeaves;
CUtlVector <StaticPropFade_t> m_StaticPropFade;
bool m_bLevelInitialized;
bool m_bClientInitialized;
Vector m_vecLastViewOrigin;
float m_flLastViewFactor;
};
MAKE_INTERFACE_SIGNATURE(CStaticPropMgr, StaticPropMgr, "engine.dll", "48 8D 05 ? ? ? ? C3 CC CC CC CC CC CC CC CC 48 89 5C 24 ? 48 89 74 24 ? 57 48 81 EC ? ? ? ? 41 8B C0", 0x0, 0);
@@ -21,5 +21,4 @@ public:
float m_flUpLerpTime;
};
MAKE_INTERFACE_SIGNATURE(CThirdPersonManager, ThirdPersonManager, "client.dll", "48 8D 0D ? ? ? ? 0F 29 BC 24", 0x0, 0);
@@ -5,7 +5,6 @@
class ConCommandBase;
class ConCommand;
typedef int CVarDLLIdentifier_t;
class IConsoleDisplayFunc
@@ -1,16 +1,15 @@
#pragma once
#include "Interface.h"
#include "../Main/CBaseHandle.h"
#include "../Main/UtlVector.h"
#include "../Main/CModel.h"
#include "../Misc/CUtlVector.h"
#include "../Types.h"
class CGameTrace;
typedef CGameTrace trace_t;
class IHandleEntity;
class ICollideable;
class CTraceListData;
class CPhysCollide;
struct cplane_t;
typedef CGameTrace trace_t;
enum TraceType_t
{
@@ -20,6 +19,14 @@ enum TraceType_t
TRACE_EVERYTHING_FILTER_PROPS
};
enum
{
TRACE_STAT_COUNTER_TRACERAY = 0,
TRACE_STAT_COUNTER_POINTCONTENTS,
TRACE_STAT_COUNTER_ENUMERATE,
NUM_TRACE_STAT_COUNTER
};
class ITraceFilter
{
public:
@@ -36,8 +43,8 @@ public:
class IEngineTrace
{
public:
virtual int GetPointContents(const Vector& vecAbsPosition, IHandleEntity** ppEntity = NULL) = 0;
virtual int GetPointContents_Collideable(ICollideable* pCollide, const Vector& vecAbsPosition) = 0;
virtual int GetPointContents(const Vector& vecAbsPosition, IHandleEntity** ppEntity = NULL) = 0;
virtual int GetPointContents_Collideable(ICollideable* pCollide, const Vector& vecAbsPosition) = 0;
virtual void ClipRayToEntity(const Ray_t& ray, unsigned int fMask, IHandleEntity* pEnt, trace_t* pTrace) = 0;
virtual void ClipRayToCollideable(const Ray_t& ray, unsigned int fMask, ICollideable* pCollide, trace_t* pTrace) = 0;
virtual void TraceRay(const Ray_t& ray, unsigned int fMask, ITraceFilter* pTraceFilter, trace_t* pTrace) = 0;
@@ -56,4 +63,35 @@ public:
virtual int GetLeafContainingPoint(const Vector& ptTest) = 0;
};
MAKE_INTERFACE_VERSION(IEngineTrace, EngineTrace, "engine.dll", "EngineTraceClient003");
class CEngineTrace : public IEngineTrace
{
public:
virtual int GetPointContents(const Vector& vecAbsPosition, IHandleEntity** ppEntity = NULL) = 0;
virtual int GetPointContents_Collideable(ICollideable* pCollide, const Vector& vecAbsPosition) = 0;
virtual void ClipRayToEntity(const Ray_t& ray, unsigned int fMask, IHandleEntity* pEntity, trace_t* pTrace) = 0;
virtual void TraceRay(const Ray_t& ray, unsigned int fMask, ITraceFilter* pTraceFilter, trace_t* pTrace) = 0;
virtual void SetupLeafAndEntityListRay(const Ray_t& ray, CTraceListData& traceData) = 0;
virtual void SetupLeafAndEntityListBox(const Vector& vecBoxMin, const Vector& vecBoxMax, CTraceListData& traceData) = 0;
virtual void TraceRayAgainstLeafAndEntityList(const Ray_t& ray, CTraceListData& traceData, unsigned int fMask, ITraceFilter* pTraceFilter, trace_t* pTrace) = 0;
virtual void SweepCollideable(ICollideable* pCollide, const Vector& vecAbsStart, const Vector& vecAbsEnd, const QAngle& vecAngles, unsigned int fMask, ITraceFilter* pTraceFilter, trace_t* pTrace) = 0;
virtual void EnumerateEntities(const Ray_t& ray, bool triggers, IEntityEnumerator* pEnumerator) = 0;
virtual void EnumerateEntities(const Vector& vecAbsMins, const Vector& vecAbsMaxs, IEntityEnumerator* pEnumerator) = 0;
virtual void HandleEntityToCollideable(IHandleEntity* pHandleEntity, ICollideable** ppCollide, const char** ppDebugName) = 0;
virtual ICollideable* GetWorldCollideable() = 0;
virtual void ClipRayToCollideable(const Ray_t& ray, unsigned int fMask, ICollideable* pEntity, trace_t* pTrace) = 0;
virtual int GetStatByIndex(int index, bool bClear) = 0;
virtual void GetBrushesInAABB(const Vector& vMins, const Vector& vMaxs, CUtlVector<int>* pOutput, int iContentsMask = 0xFFFFFFFF) = 0;
virtual CPhysCollide* GetCollidableFromDisplacementsInAABB(const Vector& vMins, const Vector& vMaxs) = 0;
virtual bool GetBrushInfo(int iBrush, CUtlVector<Vector4D>* pPlanesOut, int* pContentsOut) = 0;
virtual bool PointOutsideWorld(const Vector& ptTest) = 0;
virtual int GetLeafContainingPoint(const Vector& ptTest) = 0;
virtual void SetTraceEntity(ICollideable* pCollideable, trace_t* pTrace) = 0;
virtual ICollideable* GetCollideable(IHandleEntity* pEntity) = 0;
virtual int SpatialPartitionMask() const = 0;
virtual int SpatialPartitionTriggerMask() const = 0;
int m_traceStatCounters[NUM_TRACE_STAT_COUNTER];
const matrix3x4* m_pRootMoveParent;
};
MAKE_INTERFACE_VERSION(CEngineTrace, EngineTrace, "engine.dll", "EngineTraceClient003");
@@ -2,13 +2,25 @@
#include "../Misc/IAppSystem.h"
#include "../Main/MD5.h"
class CUtlBuffer;
class CSysModule;
class IThreadPool;
class KeyValues;
class IAsyncFileFetch;
class IPureServerWhitelist;
class IFileList;
class CUnverifiedFileHash;
class CMemoryFileBacking;
struct FileAsyncRequest_t;
struct FileSystemStatistics;
struct FileHash_t;
struct FSAsyncControl_t__ { int unused; }; typedef struct FSAsyncControl_t__* FSAsyncControl_t;
struct FSAsyncFile_t__ { int unused; }; typedef struct FSAsyncFile_t__* FSAsyncFile_t;
typedef void* FileHandle_t;
typedef void* (*FSAllocFunc_t)(const char* pszFilename, unsigned nBytes);
typedef uint32_t PathTypeQuery_t;
typedef int FileFindHandle_t;
typedef void* FileNameHandle_t;
struct FSAsyncControl_t__ { int unused; }; typedef struct FSAsyncControl_t__* FSAsyncControl_t;
struct FSAsyncFile_t__ { int unused; }; typedef struct FSAsyncFile_t__* FSAsyncFile_t;
typedef int WaitForResourcesHandle_t;
typedef void (*FileSystemLoggingFunc_t)(const char* fileName, const char* accessType);
typedef void (*FSDirtyDiskReportFunc_t)();
@@ -20,22 +32,26 @@ enum FileSystemSeek_t
FILESYSTEM_SEEK_CURRENT = SEEK_CUR,
FILESYSTEM_SEEK_TAIL = SEEK_END,
};
enum FilesystemMountRetval_t
{
FILESYSTEM_MOUNT_OK = 0,
FILESYSTEM_MOUNT_FAILED,
};
enum SearchPathAdd_t
{
PATH_ADD_TO_HEAD,
PATH_ADD_TO_TAIL,
};
enum PathTypeFilter_t
{
FILTER_NONE = 0,
FILTER_CULLPACK = 1,
FILTER_CULLNONPACK = 2,
};
enum FSAsyncStatus_t
{
FSASYNC_ERR_NOT_MINE = -8,
@@ -52,6 +68,7 @@ enum FSAsyncStatus_t
FSASYNC_STATUS_ABORTED,
FSASYNC_STATUS_UNSERVICED,
};
enum FileWarningLevel_t
{
FILESYSTEM_WARNING = -1,
@@ -63,12 +80,14 @@ enum FileWarningLevel_t
FILESYSTEM_WARNING_REPORTALLACCESSES_READWRITE,
FILESYSTEM_WARNING_REPORTALLACCESSES_ASYNC,
};
enum DVDMode_t
{
DVDMODE_OFF = 0,
DVDMODE_STRICT = 1,
DVDMODE_DEV = 2,
};
enum EPureServerFileClass
{
ePureServerFileClass_Unknown = -1,
@@ -76,12 +95,14 @@ enum EPureServerFileClass
ePureServerFileClass_AnyTrusted,
ePureServerFileClass_CheckHash,
};
enum ECacheCRCType
{
k_eCacheCRCType_SingleFile,
k_eCacheCRCType_Directory,
k_eCacheCRCType_Directory_Recursive
};
enum EFileCRCStatus
{
k_eFileCRCStatus_CantOpenFile,
@@ -89,18 +110,6 @@ enum EFileCRCStatus
k_eFileCRCStatus_FileInVPK
};
struct FileAsyncRequest_t;
struct FileSystemStatistics;
struct FileHash_t;
class CUtlBuffer;
class CSysModule;
class IThreadPool;
class KeyValues;
class IAsyncFileFetch;
class IPureServerWhitelist;
class IFileList;
class CUnverifiedFileHash;
class CMemoryFileBacking;
typedef void (*FSAsyncCallbackFunc_t)(const FileAsyncRequest_t& request, int nBytesRead, FSAsyncStatus_t err);
class IBaseFileSystem
@@ -53,8 +53,6 @@ public:
virtual IGameEvent* UnserializeEvent(bf_read* buf) = 0;
};
MAKE_INTERFACE_VERSION(IGameEventManager2, GameEventManager, "engine.dll", "GAMEEVENTSMANAGER002");
class IGameEventListener
{
public:
@@ -77,4 +75,6 @@ public:
virtual bool FireEventClientOnly(KeyValues* event) = 0;
virtual bool SerializeKeyValues(KeyValues* event, bf_write* buf, CGameEvent* eventtype = nullptr) = 0;
virtual KeyValues* UnserializeKeyValue(bf_read* msg) = 0;
};
};
MAKE_INTERFACE_VERSION(IGameEventManager2, GameEventManager, "engine.dll", "GAMEEVENTSMANAGER002");
@@ -1,7 +1,9 @@
#pragma once
#include "IMoveHelper.h"
#include "../Main/CBaseHandle.h"
#include "../Types.h"
class CTFPlayer;
class CBasePlayer;
class CMoveData
{
@@ -33,8 +35,6 @@ public:
Vector m_vecAbsOrigin;
};
class CBasePlayer;
class IGameMovement
{
public:
@@ -1,5 +1,6 @@
#pragma once
#include "Interface.h"
#include "../Main/CUserCmd.h"
#include "../Misc/bitbuf.h"
#include "../Misc/IClientMode.h"
#include "../Misc/ChecksumCRC.h"
@@ -1,9 +1,9 @@
#pragma once
#include "Interface.h"
typedef int HKeySymbol;
class IBaseFileSystem;
class KeyValues;
typedef int HKeySymbol;
class IKeyValuesSystem
{
@@ -1,9 +1,8 @@
#pragma once
#include "Interface.h"
typedef unsigned long StringIndex_t;
class KeyValues;
typedef unsigned long StringIndex_t;
class ILocalize
{
@@ -9,7 +9,6 @@ class VMatrix;
class IMaterial;
class ITexture;
struct InputEvent_t;
typedef void (*GetMouseCallback_t)(int& x, int& y);
typedef void (*SetMouseCallback_t)(int x, int y);
typedef void (*PlaySoundFunc_t)(const char* pFileName);
@@ -14,27 +14,45 @@
#define OO_OVERBRIGHT ( 1.0f / 2.0f )
#define GAMMA 2.2f
#define TEXGAMMA 2.2f
#define ABSOLUTE_MINIMUM_DXLEVEL 80
#define MATERIAL_MORPH_DECAL ( (IMorph*)1 )
#define CREATERENDERTARGETFLAGS_HDR 0x00000001
#define CREATERENDERTARGETFLAGS_AUTOMIPMAP 0x00000002
#define CREATERENDERTARGETFLAGS_UNFILTERABLE_OK 0x00000004
#define CREATERENDERTARGETFLAGS_NOEDRAM 0x00000008
#define CREATERENDERTARGETFLAGS_TEMP 0x00000010
#define MAX_FB_TEXTURES 4
#define INVALID_OCCLUSION_QUERY_OBJECT_HANDLE ( (OcclusionQueryObjectHandle_t)0 )
class IMaterial;
class IMesh;
class IVertexBuffer;
class IIndexBuffer;
struct MaterialSystem_Config_t;
class ITexture;
class ITextureCompositor;
struct MaterialSystemHardwareIdentifier_t;
class KeyValues;
class IShader;
class IVertexTexture;
class IMorph;
class IMatRenderContext;
class ICallQueue;
struct MorphWeight_t;
class IFileList;
class IMaterialProxyFactory;
class ITexture;
class IMaterialSystemHardwareConfig;
class CShadowMgr;
struct MaterialSystem_Config_t;
struct MaterialSystemHardwareIdentifier_t;
struct MorphWeight_t;
typedef uint64 VertexFormat_t;
#define ABSOLUTE_MINIMUM_DXLEVEL 80
typedef void (*MaterialBufferReleaseFunc_t)();
typedef void (*MaterialBufferRestoreFunc_t)(int nChangeFlags);
typedef void (*ModeChangeCallbackFunc_t)(void);
typedef int VertexBufferHandle_t;
typedef unsigned short MaterialHandle_t;
typedef unsigned int MorphFormat_t;
using OcclusionQueryObjectHandle_t = void*;
using MaterialLock_t = void*;
enum ShaderParamType_t
{
@@ -71,9 +89,6 @@ enum MaterialMatrixMode_t
NUM_TEXTURE_TRANSFORMS = MATERIAL_TEXTURE7 - MATERIAL_TEXTURE0 + 1
};
const int NUM_MODEL_TRANSFORMS = 53;
const int MATERIAL_MODEL_MAX = MATERIAL_MODEL + NUM_MODEL_TRANSFORMS;
enum MaterialPrimitiveType_t
{
MATERIAL_POINTS = 0x0,
@@ -144,8 +159,6 @@ enum MaterialNonInteractiveMode_t
MATERIAL_NON_INTERACTIVE_MODE_COUNT
};
#define MATERIAL_MORPH_DECAL ( (IMorph*)1 )
enum MaterialThreadMode_t
{
MATERIAL_SINGLE_THREADED,
@@ -166,12 +179,6 @@ enum MaterialFindContext_t
MATERIAL_FINDCONTEXT_ISONAMODEL
};
#define CREATERENDERTARGETFLAGS_HDR 0x00000001
#define CREATERENDERTARGETFLAGS_AUTOMIPMAP 0x00000002
#define CREATERENDERTARGETFLAGS_UNFILTERABLE_OK 0x00000004
#define CREATERENDERTARGETFLAGS_NOEDRAM 0x00000008
#define CREATERENDERTARGETFLAGS_TEMP 0x00000010
enum StencilOperation_t
{
STENCILOPERATION_KEEP = 1,
@@ -207,8 +214,6 @@ enum MorphFormatFlags_t
MORPH_SIDE = 0x0010
};
typedef unsigned int MorphFormat_t;
enum StandardLightmap_t
{
MATERIAL_SYSTEM_LIGHTMAP_PAGE_WHITE = -1,
@@ -216,19 +221,59 @@ enum StandardLightmap_t
MATERIAL_SYSTEM_LIGHTMAP_PAGE_USER_DEFINED = -3
};
enum
{
MATERIAL_ADAPTER_NAME_LENGTH = 512
};
enum MaterialInitFlags_t
{
MATERIAL_INIT_ALLOCATE_FULLSCREEN_TEXTURE = 0x2,
MATERIAL_INIT_REFERENCE_RASTERIZER = 0x4
};
enum MaterialRenderTargetDepth_t
{
MATERIAL_RT_DEPTH_SHARED = 0x0,
MATERIAL_RT_DEPTH_SEPARATE = 0x1,
MATERIAL_RT_DEPTH_NONE = 0x2,
MATERIAL_RT_DEPTH_ONLY = 0x3
};
enum RestoreChangeFlags_t
{
MATERIAL_RESTORE_VERTEX_FORMAT_CHANGED = 0x1
};
enum RenderTargetSizeMode_t
{
RT_SIZE_NO_CHANGE = 0,
RT_SIZE_DEFAULT = 1,
RT_SIZE_PICMIP = 2,
RT_SIZE_HDR = 3,
RT_SIZE_FULL_FRAME_BUFFER = 4,
RT_SIZE_OFFSCREEN = 5,
RT_SIZE_FULL_FRAME_BUFFER_ROUNDED_UP = 6,
RT_SIZE_REPLAY_SCREENSHOT = 7,
RT_SIZE_LITERAL = 8,
RT_SIZE_LITERAL_PICMIP = 9
};
enum RenderBackend_t
{
RENDER_BACKEND_UNKNOWN,
RENDER_BACKEND_D3D9,
RENDER_BACKEND_TOGL,
RENDER_BACKEND_VULKAN,
RENDER_BACKEND_NULL,
};
struct MaterialSystem_SortInfo_t
{
IMaterial* material;
int lightmapPageID;
};
#define MAX_FB_TEXTURES 4
enum
{
MATERIAL_ADAPTER_NAME_LENGTH = 512
};
struct MaterialAdapterInfo_t
{
char m_pDriverName[MATERIAL_ADAPTER_NAME_LENGTH];
@@ -290,64 +335,8 @@ public:
virtual int GetRefCount() const = 0;
};
enum MaterialInitFlags_t
{
MATERIAL_INIT_ALLOCATE_FULLSCREEN_TEXTURE = 0x2,
MATERIAL_INIT_REFERENCE_RASTERIZER = 0x4
};
enum MaterialRenderTargetDepth_t
{
MATERIAL_RT_DEPTH_SHARED = 0x0,
MATERIAL_RT_DEPTH_SEPARATE = 0x1,
MATERIAL_RT_DEPTH_NONE = 0x2,
MATERIAL_RT_DEPTH_ONLY = 0x3
};
enum RestoreChangeFlags_t
{
MATERIAL_RESTORE_VERTEX_FORMAT_CHANGED = 0x1
};
enum RenderTargetSizeMode_t
{
RT_SIZE_NO_CHANGE = 0,
RT_SIZE_DEFAULT = 1,
RT_SIZE_PICMIP = 2,
RT_SIZE_HDR = 3,
RT_SIZE_FULL_FRAME_BUFFER = 4,
RT_SIZE_OFFSCREEN = 5,
RT_SIZE_FULL_FRAME_BUFFER_ROUNDED_UP = 6,
RT_SIZE_REPLAY_SCREENSHOT = 7,
RT_SIZE_LITERAL = 8,
RT_SIZE_LITERAL_PICMIP = 9
};
enum RenderBackend_t
{
RENDER_BACKEND_UNKNOWN,
RENDER_BACKEND_D3D9,
RENDER_BACKEND_TOGL,
RENDER_BACKEND_VULKAN,
RENDER_BACKEND_NULL,
};
typedef void (*MaterialBufferReleaseFunc_t)();
typedef void (*MaterialBufferRestoreFunc_t)(int nChangeFlags);
typedef void (*ModeChangeCallbackFunc_t)(void);
typedef int VertexBufferHandle_t;
typedef unsigned short MaterialHandle_t;
using OcclusionQueryObjectHandle_t = void*;
#define INVALID_OCCLUSION_QUERY_OBJECT_HANDLE ( (OcclusionQueryObjectHandle_t)0 )
class IMaterialProxyFactory;
class ITexture;
class IMaterialSystemHardwareConfig;
class CShadowMgr;
using MaterialLock_t = void*;
const int NUM_MODEL_TRANSFORMS = 53;
const int MATERIAL_MODEL_MAX = MATERIAL_MODEL + NUM_MODEL_TRANSFORMS;
class IMaterialSystem : public IAppSystem
{
@@ -489,8 +478,6 @@ public:
virtual void ResumeTextureStreaming() = 0;
};
MAKE_INTERFACE_VERSION(IMaterialSystem, MaterialSystem, "materialsystem.dll", "VMaterialSystem082");
class IMatRenderContext : public IRefCounted
{
public:
@@ -733,4 +720,6 @@ struct ShaderStencilState_t
pRenderContext->SetStencilTestMask(m_nTestMask);
pRenderContext->SetStencilWriteMask(m_nWriteMask);
}
};
};
MAKE_INTERFACE_VERSION(IMaterialSystem, MaterialSystem, "materialsystem.dll", "VMaterialSystem082");
@@ -2,8 +2,8 @@
#include "Interface.h"
#include "../Misc/BaseTypes.h"
typedef size_t(*MemAllocFailHandler_t)(size_t);
class IVirtualMemorySection;
typedef size_t(*MemAllocFailHandler_t)(size_t);
struct GenericMemoryStat_t
{
@@ -2,16 +2,13 @@
#include "Interface.h"
#include "../Main/CBaseHandle.h"
#include "../Definitions.h"
#include "../Types.h"
#define INVALID_ENTITY_HANDLE INVALID_EHANDLE_INDEX
class CGameTrace;
class IPhysicsSurfaceProps;
enum PLAYER_ANIM;
typedef CBaseHandle EntityHandle_t;
#define INVALID_ENTITY_HANDLE INVALID_EHANDLE_INDEX
class IMoveHelper
{
public:
@@ -1,24 +1,27 @@
#pragma once
#include "Interface.h"
#include "../Definitions.h"
#include "../Types.h"
struct Ray_t;
class IHandleEntity;
#define PARTITION_ALL_CLIENT_EDICTS (PARTITION_CLIENT_NON_STATIC_EDICTS | PARTITION_CLIENT_STATIC_PROPS | PARTITION_CLIENT_RESPONSIVE_EDICTS | PARTITION_CLIENT_SOLID_EDICTS)
#define PARTITION_CLIENT_GAME_EDICTS (PARTITION_ALL_CLIENT_EDICTS & ~PARTITION_CLIENT_STATIC_PROPS)
#define PARTITION_SERVER_GAME_EDICTS (PARTITION_ENGINE_SOLID_EDICTS|PARTITION_ENGINE_TRIGGER_EDICTS|PARTITION_ENGINE_NON_STATIC_EDICTS)
class IHandleEntity;
struct Ray_t;
typedef unsigned short SpatialPartitionHandle_t;
typedef int SpatialPartitionListMask_t;
typedef int SpatialTempHandle_t;
enum IterationRetval_t
{
ITERATION_CONTINUE = 0,
ITERATION_STOP
};
typedef unsigned short SpatialPartitionHandle_t;
typedef int SpatialPartitionListMask_t;
typedef int SpatialTempHandle_t;
enum
{
PARTITION_INVALID_HANDLE = (SpatialPartitionHandle_t)~0
};
class IPartitionEnumerator
{
@@ -34,11 +37,6 @@ public:
virtual void OnPostQuery(SpatialPartitionListMask_t listMask) = 0;
};
enum
{
PARTITION_INVALID_HANDLE = (SpatialPartitionHandle_t)~0
};
class ISpatialPartition
{
public:
@@ -103,4 +101,6 @@ public:
virtual void RenderObjectsAlongRay(const Ray_t& ray, float flTime) = 0;
virtual void ReportStats(const char* pFileName) = 0;
virtual void InstallQueryCallback(IPartitionQueryCallback* pCallback) = 0;
};
};
MAKE_INTERFACE_VERSION(ISpatialPartition, SpatialPartition, "engine.dll", "SpatialPartition001");
@@ -1,25 +1,72 @@
#pragma once
#include "IMaterialSystem.h"
#include "../Main/IMaterial.h"
#include "../Misc/IMDLCache.h"
#include "../Misc/Studio.h"
#include "../Main/UtlVector.h"
#include "../Misc/CUtlVector.h"
#include "../Types.h"
#define STUDIORENDER_DECAL_INVALID ( (StudioDecalHandle_t)0 )
#define VERTEX_TEXCOORD0_2D ( ( (uint64) 2 ) << ( TEX_COORD_SIZE_BIT + ( 3*0 ) ) )
#define MAX_DRAW_MODEL_INFO_MATERIALS 8
class IMaterialSystem;
class IMesh;
class IPooledVBAllocator;
struct studiohdr_t;
struct studiomeshdata_t;
struct LightDesc_t;
class IMaterial;
struct studiohwdata_t;
struct Ray_t;
class IMaterialSystem;
class IMesh;
struct vertexFileHeader_t;
struct FlashlightState_t;
struct FileHeader_t;
class IPooledVBAllocator;
typedef unsigned short MDLHandle_t;
typedef void (*StudioRender_Printf_t)(const char* fmt, ...);
using StudioDecalHandle_t = void*;
enum
{
ADDDECAL_TO_ALL_LODS = -1
};
enum
{
STUDIORENDER_DRAW_ENTIRE_MODEL = 0,
STUDIORENDER_DRAW_OPAQUE_ONLY = 0x01,
STUDIORENDER_DRAW_TRANSLUCENT_ONLY = 0x02,
STUDIORENDER_DRAW_GROUP_MASK = 0x03,
STUDIORENDER_DRAW_NO_FLEXES = 0x04,
STUDIORENDER_DRAW_STATIC_LIGHTING = 0x08,
STUDIORENDER_DRAW_ACCURATETIME = 0x10,
STUDIORENDER_DRAW_NO_SHADOWS = 0x20,
STUDIORENDER_DRAW_GET_PERF_STATS = 0x40,
STUDIORENDER_DRAW_WIREFRAME = 0x80,
STUDIORENDER_DRAW_ITEM_BLINK = 0x100,
STUDIORENDER_SHADOWDEPTHTEXTURE = 0x200,
STUDIORENDER_SSAODEPTHTEXTURE = 0x1000,
STUDIORENDER_GENERATE_STATS = 0x8000
};
enum MaterialVertexFormat_t
{
MATERIAL_VERTEX_FORMAT_MODEL_SKINNED = (VertexFormat_t)VERTEX_POSITION | VERTEX_COLOR | VERTEX_NORMAL | VERTEX_TEXCOORD0_2D | VERTEX_BONEWEIGHT(2) | VERTEX_BONE_INDEX | VERTEX_USERDATA_SIZE(4),
MATERIAL_VERTEX_FORMAT_MODEL_SKINNED_DX7 = (VertexFormat_t)VERTEX_POSITION | VERTEX_COLOR | VERTEX_NORMAL | VERTEX_TEXCOORD0_2D | VERTEX_BONEWEIGHT(2) | VERTEX_BONE_INDEX,
MATERIAL_VERTEX_FORMAT_MODEL = (VertexFormat_t)VERTEX_POSITION | VERTEX_COLOR | VERTEX_NORMAL | VERTEX_TEXCOORD0_2D | VERTEX_USERDATA_SIZE(4),
MATERIAL_VERTEX_FORMAT_MODEL_DX7 = (VertexFormat_t)VERTEX_POSITION | VERTEX_COLOR | VERTEX_NORMAL | VERTEX_TEXCOORD0_2D,
MATERIAL_VERTEX_FORMAT_COLOR = (VertexFormat_t)VERTEX_SPECULAR
};
enum OverrideType_t
{
OVERRIDE_NORMAL = 0,
OVERRIDE_BUILD_SHADOWS,
OVERRIDE_DEPTH_WRITE,
OVERRIDE_SSAO_DEPTH_WRITE
};
enum
{
USESHADOWLOD = -2
};
struct StudioRenderConfig_t
{
@@ -49,58 +96,6 @@ struct StudioRenderConfig_t
int m_nReserved[4];
};
using StudioDecalHandle_t = void*;
#define STUDIORENDER_DECAL_INVALID ( (StudioDecalHandle_t)0 )
enum
{
ADDDECAL_TO_ALL_LODS = -1
};
enum
{
STUDIORENDER_DRAW_ENTIRE_MODEL = 0,
STUDIORENDER_DRAW_OPAQUE_ONLY = 0x01,
STUDIORENDER_DRAW_TRANSLUCENT_ONLY = 0x02,
STUDIORENDER_DRAW_GROUP_MASK = 0x03,
STUDIORENDER_DRAW_NO_FLEXES = 0x04,
STUDIORENDER_DRAW_STATIC_LIGHTING = 0x08,
STUDIORENDER_DRAW_ACCURATETIME = 0x10,
STUDIORENDER_DRAW_NO_SHADOWS = 0x20,
STUDIORENDER_DRAW_GET_PERF_STATS = 0x40,
STUDIORENDER_DRAW_WIREFRAME = 0x80,
STUDIORENDER_DRAW_ITEM_BLINK = 0x100,
STUDIORENDER_SHADOWDEPTHTEXTURE = 0x200,
STUDIORENDER_SSAODEPTHTEXTURE = 0x1000,
STUDIORENDER_GENERATE_STATS = 0x8000
};
#define VERTEX_TEXCOORD0_2D ( ( (uint64) 2 ) << ( TEX_COORD_SIZE_BIT + ( 3*0 ) ) )
enum MaterialVertexFormat_t
{
MATERIAL_VERTEX_FORMAT_MODEL_SKINNED = (VertexFormat_t)VERTEX_POSITION | VERTEX_COLOR | VERTEX_NORMAL | VERTEX_TEXCOORD0_2D | VERTEX_BONEWEIGHT(2) | VERTEX_BONE_INDEX | VERTEX_USERDATA_SIZE(4),
MATERIAL_VERTEX_FORMAT_MODEL_SKINNED_DX7 = (VertexFormat_t)VERTEX_POSITION | VERTEX_COLOR | VERTEX_NORMAL | VERTEX_TEXCOORD0_2D | VERTEX_BONEWEIGHT(2) | VERTEX_BONE_INDEX,
MATERIAL_VERTEX_FORMAT_MODEL = (VertexFormat_t)VERTEX_POSITION | VERTEX_COLOR | VERTEX_NORMAL | VERTEX_TEXCOORD0_2D | VERTEX_USERDATA_SIZE(4),
MATERIAL_VERTEX_FORMAT_MODEL_DX7 = (VertexFormat_t)VERTEX_POSITION | VERTEX_COLOR | VERTEX_NORMAL | VERTEX_TEXCOORD0_2D,
MATERIAL_VERTEX_FORMAT_COLOR = (VertexFormat_t)VERTEX_SPECULAR
};
enum OverrideType_t
{
OVERRIDE_NORMAL = 0,
OVERRIDE_BUILD_SHADOWS,
OVERRIDE_DEPTH_WRITE,
OVERRIDE_SSAO_DEPTH_WRITE
};
enum
{
USESHADOWLOD = -2
};
#define MAX_DRAW_MODEL_INFO_MATERIALS 8
struct DrawModelResults_t
{
int m_ActualTriCount;
@@ -1,17 +1,11 @@
#pragma once
#include "Interface.h"
#include "../Main/UtlVector.h"
#include "../Misc/BaseTypes.h"
#include "../Misc/bitbuf.h"
#include "../Misc/ButtonCode.h"
#include "../Misc/ChecksumCRC.h"
#include "../Misc/ClientClass.h"
#include "../Misc/CViewSetup.h"
#include "../Misc/Datamap.h"
#include "../Misc/ButtonCode.h"
#include "../Misc/Modes.h"
#include "../Definitions.h"
struct model_t;
class CSentence;
class IMaterial;
class CAudioSource;
@@ -20,10 +14,18 @@ class ISpatialQuery;
class IMaterialSystem;
class CPhysCollide;
class INetChannelInfo;
struct client_textmessage_t;
class IAchievementMgr;
class CGamestatsData;
class KeyValues;
struct model_t;
struct client_textmessage_t;
enum SkyboxVisibility_t
{
SKYBOX_NOT_VISIBLE = 0,
SKYBOX_3DSKYBOX_VISIBLE,
SKYBOX_2DSKYBOX_VISIBLE,
};
typedef struct player_info_s
{
@@ -46,13 +48,6 @@ struct AudioState_t
bool m_bIsUnderwater;
};
enum SkyboxVisibility_t
{
SKYBOX_NOT_VISIBLE = 0,
SKYBOX_3DSKYBOX_VISIBLE,
SKYBOX_2DSKYBOX_VISIBLE,
};
struct OcclusionParams_t
{
float m_flMaxOccludeeArea;
@@ -4,19 +4,19 @@
class IMaterial;
class KeyValues;
struct vcollide_t;
struct model_t;
class CGameTrace;
struct cplane_t;
typedef CGameTrace trace_t;
struct studiohdr_t;
struct virtualmodel_t;
typedef unsigned char byte;
struct virtualterrainparams_t;
class CPhysCollide;
typedef unsigned short MDLHandle_t;
class CUtlBuffer;
class IClientRenderable;
struct vcollide_t;
struct model_t;
struct cplane_t;
struct studiohdr_t;
struct virtualmodel_t;
struct virtualterrainparams_t;
typedef CGameTrace trace_t;
typedef unsigned char byte;
typedef unsigned short MDLHandle_t;
class IModelLoadCallback
{
@@ -5,7 +5,13 @@
class IClientRenderable;
struct model_t;
using LightCacheHandle_t = void*;
typedef unsigned short ModelInstanceHandle_t;
typedef struct LightCacheHandle_t__* LightCacheHandle_t;
enum
{
MODEL_INSTANCE_INVALID = (ModelInstanceHandle_t)~0
};
struct DrawModelState_t
{
@@ -18,13 +24,6 @@ struct DrawModelState_t
int m_lod;
};
typedef unsigned short ModelInstanceHandle_t;
enum
{
MODEL_INSTANCE_INVALID = (ModelInstanceHandle_t)~0
};
struct ModelRenderInfo_t
{
Vector origin;
@@ -55,19 +54,7 @@ struct StaticPropRenderInfo_t
class IVModelRender
{
public:
virtual int DrawModel(int flags,
IClientRenderable* pRenderable,
ModelInstanceHandle_t instance,
int entity_index,
const model_t* model,
Vector const& origin,
QAngle const& angles,
int skin,
int body,
int hitboxset,
const matrix3x4* modelToWorld = NULL,
const matrix3x4* pLightingOffset = NULL) = 0;
virtual int DrawModel(int flags, IClientRenderable* pRenderable, ModelInstanceHandle_t instance, int entity_index, const model_t* model, Vector const& origin, QAngle const& angles, int skin, int body, int hitboxset, const matrix3x4* modelToWorld = NULL, const matrix3x4* pLightingOffset = NULL) = 0;
virtual void ForcedMaterialOverride(IMaterial* newMaterial, OverrideType_t nOverrideType = OVERRIDE_NORMAL) = 0;
virtual void SetViewTarget(const CStudioHdr* pStudioHdr, int nBodyIndex, const Vector& target) = 0;
virtual ModelInstanceHandle_t CreateInstance(IClientRenderable* pRenderable, LightCacheHandle_t* pCache = NULL) = 0;
@@ -5,6 +5,8 @@
#include "../Misc/VPlane.h"
#include "../Definitions.h"
#define MAX_VIS_LEAVES 32
class IClientRenderable;
class IClientEntity;
class CViewSetup;
@@ -54,7 +56,6 @@ enum ERenderDepthMode
};
typedef VPlane Frustum[FRUSTUM_NUMPLANES];
typedef unsigned short LeafIndex_t;
typedef short LeafFogVolume_t;
@@ -117,8 +118,6 @@ public:
virtual bool RenderBrushModelSurface(IClientEntity* pBaseEntity, IBrushSurface* pBrushSurface) = 0;
};
#define MAX_VIS_LEAVES 32
enum DrawBrushModelMode_t
{
DBM_DRAW_ALL = 0,
@@ -3,40 +3,32 @@
class CViewSetup;
class CBaseEntity;
struct vrect_t;
struct WriteReplayScreenshotParams_t;
class IReplayScreenshotSystem;
class ITexture;
class IMaterial;
struct vrect_t;
struct WriteReplayScreenshotParams_t;
enum DrawFlags_t
{
DF_RENDER_REFRACTION = 0x1,
DF_RENDER_REFLECTION = 0x2,
DF_CLIP_Z = 0x4,
DF_CLIP_BELOW = 0x8,
DF_RENDER_UNDERWATER = 0x10,
DF_RENDER_ABOVEWATER = 0x20,
DF_RENDER_WATER = 0x40,
DF_SSAO_DEPTH_PASS = 0x100,
DF_WATERHEIGHT = 0x200,
DF_DRAW_SSAO = 0x400,
DF_DRAWSKYBOX = 0x800,
DF_FUDGE_UP = 0x1000,
DF_DRAW_ENTITITES = 0x2000,
DF_UNUSED3 = 0x4000,
DF_UNUSED4 = 0x8000,
DF_UNUSED5 = 0x10000,
DF_SAVEGAMESCREENSHOT = 0x20000,
DF_CLIP_SKYBOX = 0x40000,
DF_SHADOW_DEPTH_MAP = 0x100000
};
@@ -46,7 +38,7 @@ enum ClearFlags_t
VIEW_CLEAR_DEPTH = 0x2,
VIEW_CLEAR_FULL_TARGET = 0x4,
VIEW_NO_DRAW = 0x8,
VIEW_CLEAR_OBEY_STENCIL = 0x10, // Draws a quad allowing stencil test to clear through portals
VIEW_CLEAR_OBEY_STENCIL = 0x10,
VIEW_CLEAR_STENCIL = 0x20,
};
@@ -58,86 +50,43 @@ enum RenderViewInfo_t
RENDERVIEW_SUPPRESSMONITORRENDERING = (1 << 2),
};
//-----------------------------------------------------------------------------
// Purpose: View setup and rendering
//-----------------------------------------------------------------------------
class IViewRender
{
public:
// SETUP
// Initialize view renderer
virtual void Init(void) = 0;
// Clear any systems between levels
virtual void LevelInit(void) = 0;
virtual void LevelShutdown(void) = 0;
// Shutdown
virtual void Shutdown(void) = 0;
// RENDERING
// Called right before simulation. It must setup the view model origins and angles here so
// the correct attachment points can be used during simulation.
virtual void OnRenderStart() = 0;
// Called to render the entire scene
virtual void Render(vrect_t* rect) = 0;
// Called to render just a particular setup ( for timerefresh and envmap creation )
virtual void RenderView(const CViewSetup& view, int nClearFlags, int whatToDraw) = 0;
// What are we currently rendering? Returns a combination of DF_ flags.
virtual void Init(void) = 0;
virtual void LevelInit(void) = 0;
virtual void LevelShutdown(void) = 0;
virtual void Shutdown(void) = 0;
virtual void OnRenderStart() = 0;
virtual void Render(vrect_t* rect) = 0;
virtual void RenderView(const CViewSetup& view, int nClearFlags, int whatToDraw) = 0;
virtual int GetDrawFlags() = 0;
// MISC
// Start and stop pitch drifting logic
virtual void StartPitchDrift(void) = 0;
virtual void StopPitchDrift(void) = 0;
// This can only be called during rendering (while within RenderView).
virtual void StartPitchDrift(void) = 0;
virtual void StopPitchDrift(void) = 0;
virtual void* GetFrustum() = 0;
virtual bool ShouldDrawBrushModels(void) = 0;
virtual bool ShouldDrawBrushModels(void) = 0;
virtual const CViewSetup* GetPlayerViewSetup(void) const = 0;
virtual const CViewSetup* GetViewSetup(void) const = 0;
virtual void DisableVis(void) = 0;
virtual int BuildWorldListsNumber() const = 0;
virtual void SetCheapWaterStartDistance(float flCheapWaterStartDistance) = 0;
virtual void SetCheapWaterEndDistance(float flCheapWaterEndDistance) = 0;
virtual void GetWaterLODParams(float& flCheapWaterStartDistance, float& flCheapWaterEndDistance) = 0;
virtual void DriftPitch(void) = 0;
virtual void SetScreenOverlayMaterial(IMaterial* pMaterial) = 0;
virtual void DisableVis(void) = 0;
virtual int BuildWorldListsNumber() const = 0;
virtual void SetCheapWaterStartDistance(float flCheapWaterStartDistance) = 0;
virtual void SetCheapWaterEndDistance(float flCheapWaterEndDistance) = 0;
virtual void GetWaterLODParams(float& flCheapWaterStartDistance, float& flCheapWaterEndDistance) = 0;
virtual void DriftPitch(void) = 0;
virtual void SetScreenOverlayMaterial(IMaterial* pMaterial) = 0;
virtual IMaterial* GetScreenOverlayMaterial() = 0;
virtual void WriteSaveGameScreenshot(const char* pFilename) = 0;
virtual void WriteSaveGameScreenshotOfSize(const char* pFilename, int width, int height, bool bCreatePowerOf2Padded = false, bool bWriteVTF = false) = 0;
virtual void WriteReplayScreenshot(WriteReplayScreenshotParams_t& params) = 0;
virtual void UpdateReplayScreenshotCache() = 0;
// Draws another rendering over the top of the screen
virtual void QueueOverlayRenderView(const CViewSetup& view, int nClearFlags, int whatToDraw) = 0;
// Returns znear and zfar
virtual float GetZNear() = 0;
virtual float GetZFar() = 0;
virtual void GetScreenFadeDistances(float* min, float* max) = 0;
virtual void WriteSaveGameScreenshot(const char* pFilename) = 0;
virtual void WriteSaveGameScreenshotOfSize(const char* pFilename, int width, int height, bool bCreatePowerOf2Padded = false, bool bWriteVTF = false) = 0;
virtual void WriteReplayScreenshot(WriteReplayScreenshotParams_t& params) = 0;
virtual void UpdateReplayScreenshotCache() = 0;
virtual void QueueOverlayRenderView(const CViewSetup& view, int nClearFlags, int whatToDraw) = 0;
virtual float GetZNear() = 0;
virtual float GetZFar() = 0;
virtual void GetScreenFadeDistances(float* min, float* max) = 0;
virtual CBaseEntity* GetCurrentlyDrawingEntity() = 0;
virtual void SetCurrentlyDrawingEntity(CBaseEntity* pEnt) = 0;
virtual bool UpdateShadowDepthTexture(ITexture* pRenderTarget, ITexture* pDepthTexture, const CViewSetup& shadowView) = 0;
virtual void FreezeFrame(float flFreezeTime) = 0;
virtual void SetCurrentlyDrawingEntity(CBaseEntity* pEnt) = 0;
virtual bool UpdateShadowDepthTexture(ITexture* pRenderTarget, ITexture* pDepthTexture, const CViewSetup& shadowView) = 0;
virtual void FreezeFrame(float flFreezeTime) = 0;
virtual IReplayScreenshotSystem* GetReplayScreenshotSystem() = 0;
};
@@ -1,12 +1,12 @@
#pragma once
#include "IMoveHelper.h"
#include "../Misc/IPrediction.h"
MAKE_SIGNATURE(CPrediction_RestoreEntityToPredictedFrame, "client.dll", "40 55 48 83 EC ? 8B EA", 0x0);
class CMoveData;
class CUserCmd;
class CBasePlayer;
class CUserCmd;
class CMoveData;
class IMoveHelper;
class CPrediction : public IPrediction
{
File diff suppressed because it is too large Load Diff
@@ -5,6 +5,28 @@
class CBaseEntity;
class CTraceFilter;
enum
{
FBEAM_STARTENTITY = 0x00000001,
FBEAM_ENDENTITY = 0x00000002,
FBEAM_FADEIN = 0x00000004,
FBEAM_FADEOUT = 0x00000008,
FBEAM_SINENOISE = 0x00000010,
FBEAM_SOLID = 0x00000020,
FBEAM_SHADEIN = 0x00000040,
FBEAM_SHADEOUT = 0x00000080,
FBEAM_ONLYNOISEONCE = 0x00000100,
FBEAM_NOTILE = 0x00000200,
FBEAM_USE_HITBOXES = 0x00000400,
FBEAM_STARTVISIBLE = 0x00000800,
FBEAM_ENDVISIBLE = 0x00001000,
FBEAM_ISACTIVE = 0x00002000,
FBEAM_FOREVER = 0x00004000,
FBEAM_HALOBEAM = 0x00008000,
FBEAM_REVERSED = 0x00010000,
NUM_BEAM_FLAGS = 17
};
struct BeamTrail_t
{
BeamTrail_t* next;
@@ -57,28 +79,6 @@ struct Beam_t
float m_flHDRColorScale;
};
enum
{
FBEAM_STARTENTITY = 0x00000001,
FBEAM_ENDENTITY = 0x00000002,
FBEAM_FADEIN = 0x00000004,
FBEAM_FADEOUT = 0x00000008,
FBEAM_SINENOISE = 0x00000010,
FBEAM_SOLID = 0x00000020,
FBEAM_SHADEIN = 0x00000040,
FBEAM_SHADEOUT = 0x00000080,
FBEAM_ONLYNOISEONCE = 0x00000100, // Only calculate our noise once
FBEAM_NOTILE = 0x00000200,
FBEAM_USE_HITBOXES = 0x00000400, // Attachment indices represent hitbox indices instead when this is set.
FBEAM_STARTVISIBLE = 0x00000800, // Has this client actually seen this beam's start entity yet?
FBEAM_ENDVISIBLE = 0x00001000, // Has this client actually seen this beam's end entity yet?
FBEAM_ISACTIVE = 0x00002000,
FBEAM_FOREVER = 0x00004000,
FBEAM_HALOBEAM = 0x00008000, // When drawing a beam with a halo, don't ignore the segments and endwidth
FBEAM_REVERSED = 0x00010000,
NUM_BEAM_FLAGS = 17 // KEEP THIS UPDATED!
};
struct BeamInfo_t
{
int m_nType;
@@ -131,16 +131,10 @@ public:
virtual void InitBeams(void) = 0;
virtual void ShutdownBeams(void) = 0;
virtual void ClearBeams(void) = 0;
// Updates the state of the temp ent beams
virtual void UpdateTempEntBeams() = 0;
virtual void DrawBeam(CBaseEntity* pbeam, CTraceFilter* pEntityBeamTraceFilter = NULL) = 0;
virtual void DrawBeam(Beam_t* pbeam) = 0;
virtual void KillDeadBeams(CBaseEntity* pEnt) = 0;
// New interfaces!
virtual Beam_t* CreateBeamEnts(BeamInfo_t& beamInfo) = 0;
virtual Beam_t* CreateBeamEntPoint(BeamInfo_t& beamInfo) = 0;
virtual Beam_t* CreateBeamPoints(BeamInfo_t& beamInfo) = 0;
@@ -148,11 +142,8 @@ public:
virtual Beam_t* CreateBeamRingPoint(BeamInfo_t& beamInfo) = 0;
virtual Beam_t* CreateBeamCirclePoints(BeamInfo_t& beamInfo) = 0;
virtual Beam_t* CreateBeamFollow(BeamInfo_t& beamInfo) = 0;
virtual void FreeBeam(Beam_t* pBeam) = 0;
virtual void UpdateBeamInfo(Beam_t* pBeam, BeamInfo_t& beamInfo) = 0;
// These will go away!
virtual void CreateBeamEnts(int startEnt, int endEnt, int modelIndex, int haloIndex, float haloScale,
float life, float width, float m_nEndWidth, float m_nFadeLength, float amplitude,
float brightness, float speed, int startFrame,
@@ -0,0 +1,5 @@
#pragma once
#include "Interface.h"
#include "../Main/CModel.h"
MAKE_INTERFACE_SIGNATURE(worldbrushdata_t, WorldBrushData, "engine.dll", "48 8D 05 ? ? ? ? 48 89 05 ? ? ? ? 48 8B 5C 24 ? 48 83 C4", 0x0, 0);
@@ -1,6 +1,7 @@
#pragma once
#include "CBaseEntity.h"
#include "../Misc/Studio.h"
class CStudioHdr;
MAKE_SIGNATURE(CBaseAnimating_FrameAdvance, "client.dll", "48 89 5C 24 ? 48 89 6C 24 ? 57 48 81 EC ? ? ? ? 44 0F 29 54 24", 0x0);
MAKE_SIGNATURE(CBaseAnimating_GetBonePosition, "client.dll", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 8B DA 49 8B F1", 0x0);
@@ -1,10 +1,8 @@
#pragma once
#include "CBaseHandle.h"
#include "IClientEntity.h"
#include "CCollisionProperty.h"
#include "CParticleProperty.h"
#include "../Main/UtlVector.h"
#include "../Misc/CInterpolatedVar.h"
#include "../Misc/CUtlVector.h"
#include "../Definitions.h"
#include "../../../Utils/Memory/Memory.h"
#include "../../../Utils/Signatures/Signatures.h"
@@ -29,6 +27,8 @@ typedef CHandle<CBaseEntity> EHANDLE;
#define MULTIPLAYER_BACKUP 90
class IInterpolatedVar;
class CCollisionProperty;
class CParticleProperty;
class VarMapEntry_t
{
@@ -241,4 +241,6 @@ template <class T>
T* CHandle<T>::operator ->() const
{
return Get();
}
}
typedef CBaseHandle EntityHandle_t;
@@ -1,7 +1,8 @@
#pragma once
#include "CBaseCombatCharacter.h"
#include "CEconWearable.h"
#include "CUserCmd.h"
class CUserCmd;
MAKE_SIGNATURE(CBasePlayer_GetAmmoCount, "client.dll", "48 89 5C 24 ? 57 48 83 EC ? 48 63 DA 48 8B F9 83 FB", 0x0);
+1 -10
View File
@@ -1,5 +1,5 @@
#pragma once
#include "../Types.h"
#include "CModel.h"
#define DISPSURF_FLAG_SURFACE (1<<0)
#define DISPSURF_FLAG_WALKABLE (1<<1)
@@ -7,15 +7,6 @@
#define DISPSURF_FLAG_SURFPROP1 (1<<3)
#define DISPSURF_FLAG_SURFPROP2 (1<<4)
struct cplane_t
{
Vector normal{};
float dist{};
byte type{};
byte signbits{};
byte pad[2]{};
};
#define CPLANE_NORMAL_X 0
#define CPLANE_NORMAL_Y 4
#define CPLANE_NORMAL_Z 8
@@ -1,37 +1,11 @@
#pragma once
#include "CGameTrace.h"
#include "../Types.h"
#include "ICollideable.h"
#include "../../../Utils/Signatures/Signatures.h"
MAKE_SIGNATURE(CCollisionProperty_SetCollisionBounds, "client.dll", "48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 41 56 48 81 EC ? ? ? ? F3 0F 10 0A", 0x0);
MAKE_SIGNATURE(CCollisionProperty_CalcNearestPoint, "client.dll", "48 89 5C 24 ? 57 48 83 EC ? 49 8B D8 48 8B F9 4C 8D 44 24", 0x0);
struct model_t;
class ICollideable
{
public:
virtual void* GetEntityHandle() = 0;
virtual const Vec3& OBBMinsPreScaled() const = 0;
virtual const Vec3& OBBMaxsPreScaled() const = 0;
virtual const Vec3& OBBMins() const = 0;
virtual const Vec3& OBBMaxs() const = 0;
virtual void WorldSpaceTriggerBounds(Vec3* pVecWorldMins, Vec3* pVecWorldMaxs) const = 0;
virtual bool TestCollision(const Ray_t& ray, unsigned int fContentsMask, CGameTrace& tr) = 0;
virtual bool TestHitboxes(const Ray_t& ray, unsigned int fContentsMask, CGameTrace& tr) = 0;
virtual int GetCollisionModelIndex() = 0;
virtual const model_t* GetCollisionModel() = 0;
virtual const Vec3& GetCollisionOrigin() const = 0;
virtual const Vec3& GetCollisionAngles() const = 0;
virtual const matrix3x4& CollisionToWorldTransform() const = 0;
virtual SolidType_t GetSolid() const = 0;
virtual int GetSolidFlags() const = 0;
virtual void* GetIClientUnknown() = 0;
virtual int GetCollisionGroup() const = 0;
virtual void WorldSpaceSurroundingBounds(Vec3* pVecMins, Vec3* pVecMaxs) = 0;
virtual bool ShouldTouchTrigger(int triggerSolidFlags) const = 0;
virtual const matrix3x4* GetRootParentToWorldTransform() const = 0;
};
typedef unsigned short SpatialPartitionHandle_t;
class CCollisionProperty : public ICollideable
{
@@ -1,7 +1,8 @@
#pragma once
#include "KeyValues.h"
#include "../Steam/SteamClientPublic.h"
class KeyValues;
class CEconNotification
{
public:
@@ -1,20 +1,23 @@
#pragma once
#include "../Definitions.h"
#include "CBaseEntity.h"
#define MAX_SPHERE_QUERY 512
#include "../../../Utils/Signatures/Signatures.h"
#pragma warning (push)
#pragma warning (disable : 26495)
MAKE_SIGNATURE(CEntitySphereQuery, "client.dll", "40 53 48 83 EC ? 48 8B D9 C7 44 24 ? ? ? ? ? 33 C9", 0x0);
//credits to KGB
#define MAX_SPHERE_QUERY 512
class CBaseEntity;
// credits to KGB
class CEntitySphereQuery
{
public:
CEntitySphereQuery(const Vec3& center, const float radius, const int flagMask = 0, const int partitionMask = PARTITION_CLIENT_NON_STATIC_EDICTS)
{
S::CEntitySphereQuery.Call<void>(this, std::ref(center), radius, flagMask, partitionMask);
S::CEntitySphereQuery.Call<CEntitySphereQuery*>(this, std::ref(center), radius, flagMask, partitionMask);
}
inline CBaseEntity* GetCurrentEntity()
@@ -30,4 +33,6 @@ public:
private:
int m_nListIndex, m_nListCount;
CBaseEntity* m_pList[MAX_SPHERE_QUERY];
};
};
#pragma warning (pop)
@@ -1,8 +1,5 @@
#pragma once
#include "CModel.h"
#include "UtlVector.h"
#include "IHandleEntity.h"
#include "../Misc/ISpatialPartition.h"
#include "CBaseTrace.h"
class CBaseEntity;
@@ -0,0 +1,120 @@
#pragma once
#include "../../../Utils/Signatures/Signatures.h"
#include <minwindef.h>
MAKE_SIGNATURE(CMapLoadHelper, "engine.dll", "40 53 56 41 56 41 57", 0x0);
MAKE_SIGNATURE(_CMapLoadHelper, "engine.dll", "40 53 48 83 EC ? 48 8B D9 48 8B 49 ? 48 85 C9 74 ? E8 ? ? ? ? 48 8B 53", 0x0);
MAKE_SIGNATURE(CMapLoadHelper_Init, "engine.dll", "48 89 5C 24 ? 57 48 83 EC ? 8B 05 ? ? ? ? 48 8B DA", 0x0);
MAKE_SIGNATURE(CMapLoadHelper_Shutdown, "engine.dll", "48 83 EC ? 8B 05 ? ? ? ? FF C8", 0x0);
#define HEADER_LUMPS 64
struct model_t;
using byte = unsigned char;
enum
{
LUMP_ENTITIES = 0,
LUMP_PLANES = 1,
LUMP_TEXDATA = 2,
LUMP_VERTEXES = 3,
LUMP_VISIBILITY = 4,
LUMP_NODES = 5,
LUMP_TEXINFO = 6,
LUMP_FACES = 7,
LUMP_LIGHTING = 8,
LUMP_OCCLUSION = 9,
LUMP_LEAFS = 10,
LUMP_FACEIDS = 11,
LUMP_EDGES = 12,
LUMP_SURFEDGES = 13,
LUMP_MODELS = 14,
LUMP_WORLDLIGHTS = 15,
LUMP_LEAFFACES = 16,
LUMP_LEAFBRUSHES = 17,
LUMP_BRUSHES = 18,
LUMP_BRUSHSIDES = 19,
LUMP_AREAS = 20,
LUMP_AREAPORTALS = 21,
LUMP_UNUSED0 = 22,
LUMP_UNUSED1 = 23,
LUMP_UNUSED2 = 24,
LUMP_UNUSED3 = 25,
LUMP_DISPINFO = 26,
LUMP_ORIGINALFACES = 27,
LUMP_PHYSDISP = 28,
LUMP_PHYSCOLLIDE = 29,
LUMP_VERTNORMALS = 30,
LUMP_VERTNORMALINDICES = 31,
LUMP_DISP_LIGHTMAP_ALPHAS = 32,
LUMP_DISP_VERTS = 33,
LUMP_DISP_LIGHTMAP_SAMPLE_POSITIONS = 34,
LUMP_GAME_LUMP = 35,
LUMP_LEAFWATERDATA = 36,
LUMP_PRIMITIVES = 37,
LUMP_PRIMVERTS = 38,
LUMP_PRIMINDICES = 39,
LUMP_PAKFILE = 40,
LUMP_CLIPPORTALVERTS = 41,
LUMP_CUBEMAPS = 42,
LUMP_TEXDATA_STRING_DATA = 43,
LUMP_TEXDATA_STRING_TABLE = 44,
LUMP_OVERLAYS = 45,
LUMP_LEAFMINDISTTOWATER = 46,
LUMP_FACE_MACRO_TEXTURE_INFO = 47,
LUMP_DISP_TRIS = 48,
LUMP_PHYSCOLLIDESURFACE = 49,
LUMP_WATEROVERLAYS = 50,
LUMP_LEAF_AMBIENT_INDEX_HDR = 51,
LUMP_LEAF_AMBIENT_INDEX = 52,
LUMP_LIGHTING_HDR = 53,
LUMP_WORLDLIGHTS_HDR = 54,
LUMP_LEAF_AMBIENT_LIGHTING_HDR = 55,
LUMP_LEAF_AMBIENT_LIGHTING = 56,
LUMP_XZIPPAKFILE = 57,
LUMP_FACES_HDR = 58,
LUMP_MAP_FLAGS = 59,
LUMP_OVERLAY_FADES = 60,
};
class CMapLoadHelper
{
public:
CMapLoadHelper(int lumpToLoad)
{
S::CMapLoadHelper.Call<CMapLoadHelper*>(this, lumpToLoad);
}
~CMapLoadHelper(void)
{
S::_CMapLoadHelper.Call<void>(this);
}
byte* LumpBase() { return m_pData; }
int LumpSize() { return m_nLumpSize; }
int LumpOffset() { return m_nLumpOffset; };
int LumpVersion() const { return m_nLumpVersion; };
//const char* GetMapName() { return s_szMapName; }
//char* GetLoadName();
//struct worldbrushdata_t* GetMap();
// Global setup/shutdown
static SIGNATURE_ARGS(Init, void, CMapLoadHelper, (model_t* pMapModel, const char* loadname), pMapModel, loadname);
static SIGNATURE(Shutdown, void, CMapLoadHelper);
//static void InitFromMemory(model_t* pMapModel, const void* pData, int nDataSize);
//static int GetRefCount();
//static void FreeLightingLump();
//static int LumpSize(int lumpId);
//static int LumpOffset(int lumpId);
//void LoadLumpElement(int nElemIndex, int nElemSize, void* pData);
//void LoadLumpData(int offset, int size, void* pData);
public:
int m_nLumpSize;
int m_nLumpOffset;
int m_nLumpVersion;
byte* m_pRawData;
byte* m_pData;
byte* m_pUncompressedData;
int m_nLumpID;
char m_szLumpFilename[MAX_PATH];
};
+504 -69
View File
@@ -1,97 +1,532 @@
#pragma once
#include "CBaseTrace.h"
#include "CBaseHandle.h"
#include "Ray.h"
#include "../Misc/BSPFlags.h"
#include "../Misc/VCollide.h"
struct edict_t;
struct model_t;
#include "../Misc/CUtlString.h"
#define AREA_SOLID 1
#define AREA_TRIGGERS 2
#define NUMSIDES_BOXBRUSH 0xFFFF
#define MAXLIGHTMAPS 4
struct cmodel_t
#define SURFDRAW_NOLIGHT 0x00000001
#define SURFDRAW_NODE 0x00000002
#define SURFDRAW_SKY 0x00000004
#define SURFDRAW_BUMPLIGHT 0x00000008
#define SURFDRAW_NODRAW 0x00000010
#define SURFDRAW_TRANS 0x00000020
#define SURFDRAW_PLANEBACK 0x00000040
#define SURFDRAW_DYNAMIC 0x00000080
#define SURFDRAW_TANGENTSPACE 0x00000100
#define SURFDRAW_NOCULL 0x00000200
#define SURFDRAW_HASLIGHTSYTLES 0x00000400
#define SURFDRAW_HAS_DISP 0x00000800
#define SURFDRAW_ALPHATEST 0x00001000
#define SURFDRAW_NOSHADOWS 0x00002000
#define SURFDRAW_NODECALS 0x00004000
#define SURFDRAW_HAS_PRIMS 0x00008000
#define SURFDRAW_WATERSURFACE 0x00010000
#define SURFDRAW_UNDERWATER 0x00020000
#define SURFDRAW_ABOVEWATER 0x00040000
#define SURFDRAW_HASDLIGHT 0x00080000
#define SURFDRAW_DLIGHTPASS 0x00100000
#define SURFDRAW_UNUSED2 0x00200000
#define SURFDRAW_VERTCOUNT_MASK 0xFF000000
#define SURFDRAW_SORTGROUP_MASK 0x00C00000
#define SURFDRAW_VERTCOUNT_SHIFT 24
#define SURFDRAW_SORTGROUP_SHIFT 22
class IMaterial;
class ITexture;
class CEngineSprite;
class IDispInfo;
struct cplane_t;
struct edict_t;
struct model_t;
typedef unsigned short WorldDecalHandle_t;
typedef unsigned short ShadowDecalHandle_t;
typedef unsigned short OverlayFragmentHandle_t;
typedef void* FileNameHandle_t;
typedef unsigned short MDLHandle_t;
typedef void* HDISPINFOARRAY;
typedef void*/*CCubeMap<LightShadowZBufferSample_t, SHADOW_ZBUF_RES>*/ lightzbuffer_t;
enum modtype_t
{
mod_bad = 0,
mod_brush,
mod_sprite,
mod_studio
};
enum emittype_t
{
emit_surface,
emit_point,
emit_spotlight,
emit_skylight,
emit_quakelight,
emit_skyambient,
};
struct ColorRGBExp32
{
byte r, g, b;
signed char exponent;
};
struct CompressedLightCube
{
ColorRGBExp32 m_Color[6];
};
struct darea_t
{
int numareaportals;
int firstareaportal;
};
struct dareaportal_t
{
unsigned short m_PortalKey;
unsigned short otherarea;
unsigned short m_FirstClipPortalVert;
unsigned short m_nClipPortalVerts;
int planenum;
};
struct dvis_t
{
int numclusters;
int bitofs[8][2];
};
struct doccluderdata_t
{
int flags;
int firstpoly;
int polycount;
Vector mins;
Vector maxs;
int area;
};
struct doccluderpolydata_t
{
int firstvertexindex;
int vertexcount;
int planenum;
};
struct dvertex_t
{
Vector point;
};
struct dedge_t
{
unsigned short v[2];
};
struct dface_t
{
unsigned short planenum;
byte side;
byte onNode;
int firstedge;
short numedges;
short texinfo;
//union
//{
short dispinfo;
short surfaceFogVolumeID;
//};
byte styles[MAXLIGHTMAPS];
int lightofs;
float area;
int m_LightmapTextureMinsInLuxels[2];
int m_LightmapTextureSizeInLuxels[2];
int origFace;
unsigned short m_NumPrims;
unsigned short firstPrimID;
unsigned int smoothingGroups;
};
struct dbrush_t
{
int firstside;
int numsides;
int contents;
};
struct dbrushside_t
{
unsigned short planenum;
short texinfo;
short dispinfo;
short bevel;
};
struct dworldlight_t
{
Vector mins, maxs;
Vector origin;
int headnode;
vcollide_t vcollisionData;
Vector intensity;
Vector normal;
int cluster;
emittype_t type;
int style;
float stopdot;
float stopdot2;
float exponent;
float radius;
float constant_attn;
float linear_attn;
float quadratic_attn;
int flags;
int texinfo;
int owner;
};
struct dleafambientindex_t
{
unsigned short ambientSampleCount;
unsigned short firstAmbientSample;
};
typedef dleafambientindex_t mleafambientindex_t;
struct dleafambientlighting_t
{
CompressedLightCube cube;
byte x;
byte y;
byte z;
byte pad;
};
typedef dleafambientlighting_t mleafambientlighting_t;
struct mnode_t
{
int contents;
int visframe;
mnode_t* parent;
short area;
short flags;
VectorAligned m_vecCenter;
VectorAligned m_vecHalfDiagonal;
cplane_t* plane;
mnode_t* children[2];
unsigned short firstsurface;
unsigned short numsurfaces;
};
struct mleaf_t
{
int contents;
int visframe;
mnode_t* parent;
short area;
short flags;
VectorAligned m_vecCenter;
VectorAligned m_vecHalfDiagonal;
short cluster;
short leafWaterDataID;
unsigned short firstmarksurface;
unsigned short nummarksurfaces;
short nummarknodesurfaces;
short unused;
unsigned short dispListStart;
unsigned short dispCount;
};
struct mleafwaterdata_t
{
float surfaceZ;
float minZ;
short surfaceTexInfoID;
short firstLeafIndex;
};
struct mvertex_t
{
Vector position;
};
struct msurface1_t
{
int textureMins[2];
short textureExtents[2];
struct
{
unsigned short numPrims;
unsigned short firstPrimID;
} prims;
};
#pragma pack(1)
struct msurface2_t
{
unsigned int flags;
//unsigned char vertCount;
//unsigned char sortGroup;
cplane_t* plane;
int firstvertindex;
WorldDecalHandle_t decals;
ShadowDecalHandle_t m_ShadowDecals;
OverlayFragmentHandle_t m_nFirstOverlayFragment;
short materialSortID;
unsigned short vertBufferIndex;
unsigned short m_bDynamicShadowsEnabled : 1;
unsigned short texinfo : 15;
IDispInfo* pDispInfo;
int visframe;
byte pad[24];
};
#pragma pack()
typedef msurface2_t* SurfaceHandle_t;
struct msurfacelighting_t
{
short m_LightmapMins[2];
short m_LightmapExtents[2];
short m_OffsetIntoLightmapPage[2];
int m_nLastComputedFrame;
int m_fDLightBits;
int m_nDLightFrame;
unsigned char m_nStyles[MAXLIGHTMAPS];
ColorRGBExp32* m_pSamples;
};
#pragma pack(1)
struct msurfacenormal_t
{
unsigned int firstvertnormal;
//unsigned short firstvertnormal;
//short fogVolumeID;
};
#pragma pack()
struct mtexinfo_t
{
Vector4D textureVecsTexelsPerWorldUnits[2];
Vector4D lightmapVecsLuxelsPerWorldUnits[2];
float luxelsPerWorldUnit;
float worldUnitsPerLuxel;
unsigned short flags;
unsigned short texinfoFlags;
IMaterial* material;
};
struct mprimitive_t
{
int type;
unsigned short firstIndex;
unsigned short indexCount;
unsigned short firstVert;
unsigned short vertCount;
};
struct mprimvert_t
{
Vector pos;
float texCoord[2];
float lightCoord[2];
};
struct mcubemapsample_t
{
Vector origin;
ITexture* pTexture;
unsigned char size;
};
struct cleaf_t
{
int contents;
short cluster;
short area : 9;
short flags : 7;
unsigned short firstleafbrush;
unsigned short numleafbrushes;
unsigned short dispListStart;
unsigned short dispCount;
};
struct carea_t
{
int numareaportals;
int firstareaportal;
int floodnum;
int floodvalid;
};
struct cplane_t
{
Vector normal{};
float dist{};
byte type{};
byte signbits{};
byte pad[2]{};
};
struct csurface_t
{
const char* name;
short surfaceProps;
unsigned short flags;
unsigned short flags;
};
class __declspec(align(16))VectorAligned : public Vec3
struct cnode_t
{
public:
inline VectorAligned(void) { };
inline VectorAligned(float x, float y, float z) {
Set(x, y, z);
}
explicit VectorAligned(const Vec3& othr) {
Set(othr.x, othr.y, othr.z);
}
VectorAligned& operator=(const Vec3& othr) {
Set(othr.x, othr.y, othr.z);
return *this;
}
float w = 0.0f;
cplane_t* plane;
int children[2];
};
struct Ray_t
struct cbrush_t
{
VectorAligned m_Start{};
VectorAligned m_Delta{};
VectorAligned m_StartOffset{};
VectorAligned m_Extents{};
bool m_IsRay{};
bool m_IsSwept{};
int contents;
unsigned short numsides;
unsigned short firstbrushside;
void Init(Vector const& start, Vector const& end)
inline int GetBox() const { return firstbrushside; }
inline void SetBox(int boxID)
{
m_Delta = end - start;
m_IsSwept = m_Delta.LengthSqr() != 0;
m_Extents.Set();
m_IsRay = true;
m_StartOffset.Set();
m_Start = start;
numsides = NUMSIDES_BOXBRUSH;
firstbrushside = boxID;
}
inline bool IsBox() const { return numsides == NUMSIDES_BOXBRUSH ? true : false; }
};
void Init(Vector const& start, Vector const& end, Vector const& mins, Vector const& maxs)
{
m_Delta = end - start;
m_IsSwept = m_Delta.LengthSqr() != 0;
m_Extents = maxs - mins;
m_Extents *= 0.5f;
m_IsRay = m_Extents.LengthSqr() == 0;
m_StartOffset = mins + maxs;
m_StartOffset *= 0.5f;
m_Start = start + m_StartOffset;
m_StartOffset *= -1.0f;
}
struct cboxbrush_t
{
VectorAligned mins;
VectorAligned maxs;
unsigned short surfaceIndex[6];
unsigned short pad2[2];
};
Vector InvDelta() const
struct cbrushside_t
{
cplane_t* plane;
unsigned short surfaceIndex;
unsigned short bBevel;
};
struct cmodel_t
{
Vector mins, maxs;
Vector origin;
int headnode;
vcollide_t vcollisionData;
};
struct worldbrushdata_t
{
int numsubmodels;
int numplanes;
cplane_t* planes;
int numleafs;
mleaf_t* leafs;
int numleafwaterdata;
mleafwaterdata_t* leafwaterdata;
int numvertexes;
mvertex_t* vertexes;
int numoccluders;
doccluderdata_t* occluders;
int numoccluderpolys;
doccluderpolydata_t* occluderpolys;
int numoccludervertindices;
int* occludervertindices;
int numvertnormalindices;
unsigned short* vertnormalindices;
int numvertnormals;
Vector* vertnormals;
int numnodes;
mnode_t* nodes;
unsigned short* m_LeafMinDistToWater;
int numtexinfo;
mtexinfo_t* texinfo;
int numtexdata;
csurface_t* texdata;
int numDispInfos;
HDISPINFOARRAY hDispInfos;
//int numOrigSurfaces;
//msurface_t *pOrigSurfaces;
int numsurfaces;
msurface1_t* surfaces1;
msurface2_t* surfaces2;
msurfacelighting_t* surfacelighting;
msurfacenormal_t* surfacenormals;
bool unloadedlightmaps;
int numvertindices;
unsigned short* vertindices;
int nummarksurfaces;
SurfaceHandle_t* marksurfaces;
ColorRGBExp32* lightdata;
int numworldlights;
dworldlight_t* worldlights;
lightzbuffer_t* shadowzbuffers;
int numprimitives;
mprimitive_t* primitives;
int numprimverts;
mprimvert_t* primverts;
int numprimindices;
unsigned short* primindices;
int m_nAreas;
darea_t* m_pAreas;
int m_nAreaPortals;
dareaportal_t* m_pAreaPortals;
int m_nClipPortalVerts;
Vector* m_pClipPortalVerts;
mcubemapsample_t* m_pCubemapSamples;
int m_nCubemapSamples;
int m_nDispInfoReferences;
unsigned short* m_pDispInfoReferences;
mleafambientindex_t* m_pLeafAmbient;
mleafambientlighting_t* m_pAmbientSamples;
#if 0
int numportals;
mportal_t* portals;
int numclusters;
mcluster_t* clusters;
int numportalverts;
unsigned short* portalverts;
int numclusterportals;
unsigned short* clusterportals;
#endif
};
struct brushdata_t
{
worldbrushdata_t* pShared;
int firstmodelsurface, nummodelsurfaces;
unsigned short renderHandle;
unsigned short firstnode;
};
struct spritedata_t
{
int numframes;
int width;
int height;
CEngineSprite* sprite;
};
struct model_t
{
FileNameHandle_t fnHandle;
CUtlString strName;
int nLoadFlags;
int nServerCount;
IMaterial** ppMaterials;
modtype_t type;
int flags;
Vector mins, maxs;
float radius;
union
{
Vector vecInvDelta;
for (int iAxis = 0; iAxis < 3; ++iAxis)
{
if (m_Delta[iAxis] != 0.0f)
{
vecInvDelta[iAxis] = 1.0f / m_Delta[iAxis];
}
else
{
vecInvDelta[iAxis] = 3.402823e+38f;
}
}
return vecInvDelta;
}
brushdata_t brush;
MDLHandle_t studio;
spritedata_t sprite;
};
};
@@ -1,8 +1,14 @@
#pragma once
#include "CBasePlayer.h"
#include "CBaseHandle.h"
#include "../Misc/Activity.h"
#include "../Misc/CUtlVector.h"
#include "../Misc/CRangeCheckedVar.h"
#include "../Misc/CInterpolatedVar.h"
#include "../Types.h"
class CBaseEntity;
class CBasePlayer;
class CStudioHdr;
class CAnimationLayer
{
@@ -1,5 +1,5 @@
#pragma once
#include "UtlVector.h"
#include "../Misc/CUtlVector.h"
class CBaseEntity;
struct ParticleEffectList_t;
@@ -1,7 +1,6 @@
#pragma once
#include "CBaseEntity.h"
#include "../Misc/IGameResources.h"
#include "../Misc/String.h"
#define PLAYER_UNCONNECTED_NAME "unconnected"
#define PLAYER_ERROR_NAME "ERRORNAME"
@@ -2,6 +2,9 @@
#include "../Misc/Datamap.h"
#include "../../../Utils/Signatures/Signatures.h"
#pragma warning (push)
#pragma warning (disable : 26495)
MAKE_SIGNATURE(CPredictionCopy_TransferData, "client.dll", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 41 56 48 83 EC ? 8B 3D", 0x0);
#define PC_DATA_PACKED true
@@ -78,4 +81,6 @@ public:
typedescription_t* m_pWatchField;
char const* m_pOperation;
};
};
#pragma warning (pop)
@@ -0,0 +1,108 @@
#pragma once
#include "IClientUnknown.h"
#include "IClientRenderable.h"
#include "ICollideable.h"
#include "CBaseHandle.h"
typedef unsigned short SpatialPartitionHandle_t;
class CStaticProp : public IClientUnknown, public IClientRenderable, public ICollideable
{
public:
virtual void SetRefEHandle(const CBaseHandle& handle) = 0;
virtual const CBaseHandle& GetRefEHandle() const = 0;
virtual IClientUnknown* GetIClientUnknown() = 0;
virtual ICollideable* GetCollideable() = 0;
virtual IClientNetworkable* GetClientNetworkable() = 0;
virtual IClientRenderable* GetClientRenderable() = 0;
virtual IClientEntity* GetIClientEntity() = 0;
virtual CBaseEntity* GetBaseEntity() = 0;
virtual IClientThinkable* GetClientThinkable() = 0;
virtual const Vector& OBBMinsPreScaled() const = 0;
virtual const Vector& OBBMaxsPreScaled() const = 0;
virtual const Vector& OBBMins() const = 0;
virtual const Vector& OBBMaxs() const = 0;
virtual bool TestCollision(const Ray_t& ray, unsigned int fContentsMask, trace_t& tr) = 0;
virtual bool TestHitboxes(const Ray_t& ray, unsigned int fContentsMask, trace_t& tr) = 0;
virtual int GetCollisionModelIndex() = 0;
virtual const model_t* GetCollisionModel() = 0;
virtual const Vector& GetCollisionOrigin() const = 0;
virtual const QAngle& GetCollisionAngles() const = 0;
virtual const matrix3x4& CollisionToWorldTransform() const = 0;
virtual SolidType_t GetSolid() const = 0;
virtual int GetSolidFlags() const = 0;
virtual IHandleEntity* GetEntityHandle() = 0;
virtual int GetCollisionGroup() const = 0;
virtual void WorldSpaceTriggerBounds(Vector* pVecWorldMins, Vector* pVecWorldMaxs) const = 0;
virtual void WorldSpaceSurroundingBounds(Vector* pVecWorldMins, Vector* pVecWorldMaxs) = 0;
virtual bool ShouldTouchTrigger(int triggerSolidFlags) const = 0;
virtual const matrix3x4* GetRootParentToWorldTransform() const = 0;
virtual int GetBody() = 0;
virtual int GetSkin() = 0;
virtual const Vector& GetRenderOrigin() = 0;
virtual const QAngle& GetRenderAngles() = 0;
virtual bool ShouldDraw() = 0;
virtual bool IsTransparent(void) = 0;
virtual bool IsTwoPass(void) = 0;
virtual void OnThreadedDrawSetup() = 0;
virtual const model_t* GetModel() = 0;
virtual int DrawModel(int flags) = 0;
virtual void ComputeFxBlend() = 0;
virtual int GetFxBlend() = 0;
virtual void GetColorModulation(float* color) = 0;
virtual bool LODTest() = 0;
virtual bool SetupBones(matrix3x4* pBoneToWorldOut, int nMaxBones, int boneMask, float currentTime) = 0;
virtual void SetupWeights(const matrix3x4* pBoneToWorld, int nFlexWeightCount, float* pFlexWeights, float* pFlexDelayedWeights) = 0;
virtual bool UsesFlexDelayedWeights() = 0;
virtual void DoAnimationEvents(void) = 0;
virtual IPVSNotify* GetPVSNotifyInterface() = 0;
virtual void GetRenderBounds(Vector& mins, Vector& maxs) = 0;
virtual void GetRenderBoundsWorldspace(Vector& mins, Vector& maxs) = 0;
virtual bool ShouldCacheRenderInfo() = 0;
virtual bool ShouldReceiveProjectedTextures(int flags) = 0;
virtual bool GetShadowCastDistance(float* pDist, ShadowType_t shadowType) const = 0;
virtual bool GetShadowCastDirection(Vector* pDirection, ShadowType_t shadowType) const = 0;
virtual bool UsesPowerOfTwoFrameBufferTexture() = 0;
virtual bool UsesFullFrameBufferTexture() = 0;
virtual ClientShadowHandle_t GetShadowHandle() = 0;
virtual ClientRenderHandle_t& RenderHandle() = 0;
virtual void RecordToolMessage() = 0;
virtual void GetShadowRenderBounds(Vector& mins, Vector& maxs, ShadowType_t shadowType) = 0;
virtual bool IsShadowDirty() = 0;
virtual void MarkShadowDirty(bool bDirty) = 0;
virtual IClientRenderable* GetShadowParent() = 0;
virtual IClientRenderable* FirstShadowChild() = 0;
virtual IClientRenderable* NextShadowPeer() = 0;
virtual ShadowType_t ShadowCastType() = 0;
virtual void CreateModelInstance() = 0;
virtual ModelInstanceHandle_t GetModelInstance() = 0;
virtual int LookupAttachment(const char* pAttachmentName) = 0;
virtual bool GetAttachment(int number, Vector& origin, QAngle& angles) = 0;
virtual bool GetAttachment(int number, matrix3x4& matrix) = 0;
virtual bool IgnoresZBuffer(void) const = 0;
virtual float* GetRenderClipPlane(void) = 0;
virtual const matrix3x4& RenderableToWorldTransform() = 0;
Vector m_Origin;
QAngle m_Angles;
model_t* m_pModel;
SpatialPartitionHandle_t m_Partition;
ModelInstanceHandle_t m_ModelInstance;
unsigned char m_Alpha;
unsigned char m_nSolidType;
unsigned char m_Skin;
unsigned char m_Flags;
unsigned short m_FirstLeaf;
unsigned short m_LeafCount;
CBaseHandle m_EntHandle;
ClientRenderHandle_t m_RenderHandle;
unsigned short m_FadeIndex;
float m_flForcedFadeScale;
Vector m_RenderBBoxMin;
Vector m_RenderBBoxMax;
matrix3x4 m_ModelToWorld;
float m_flRadius;
Vector m_WorldRenderBBoxMin;
Vector m_WorldRenderBBoxMax;
Vector m_LightingOrigin;
};
@@ -202,28 +202,28 @@ int CTFSniperRifle::GetRifleType()
float CTFSniperRifle::GetHeadshotMult(CTFPlayer* pTarget)
{
auto GetMainMult = [&]()
{
auto pOwner = m_hOwnerEntity()->As<CTFPlayer>();
if (pOwner && pOwner->IsCritBoosted())
return 3.f;
if (GetRifleType() == RIFLE_JARATE)
{
if (SDK::AttribHookValue(0, "jarate_duration", this) > 0)
return 1.36f;
if (pOwner && pOwner->IsMiniCritBoosted()
|| pTarget && (pTarget->InCond(TF_COND_URINE) || pTarget->InCond(TF_COND_MARKEDFORDEATH)))
return 1.36f;
return 1.f;
}
auto fGetMainMult = [&]()
{
auto pOwner = m_hOwnerEntity()->As<CTFPlayer>();
if (pOwner && pOwner->IsCritBoosted())
return 3.f;
};
float flMult = SDK::AttribHookValue(GetMainMult(), "mult_dmg", this);
if (GetRifleType() == RIFLE_JARATE)
{
if (SDK::AttribHookValue(0, "jarate_duration", this) > 0)
return 1.36f;
if (pOwner && pOwner->IsMiniCritBoosted()
|| pTarget && (pTarget->InCond(TF_COND_URINE) || pTarget->InCond(TF_COND_MARKEDFORDEATH)))
return 1.36f;
return 1.f;
}
return 3.f;
};
float flMult = SDK::AttribHookValue(fGetMainMult(), "mult_dmg", this);
if (m_flChargedDamage() == 150.f)
flMult = SDK::AttribHookValue(flMult, "sniper_full_charge_damage_bonus", this);
return flMult;
@@ -231,20 +231,20 @@ float CTFSniperRifle::GetHeadshotMult(CTFPlayer* pTarget)
float CTFSniperRifle::GetBodyshotMult(CTFPlayer* pTarget)
{
auto GetMainMult = [&]()
{
auto pOwner = m_hOwnerEntity()->As<CTFPlayer>();
if (pOwner && pOwner->IsCritBoosted())
return 3.f;
auto fGetMainMult = [&]()
{
auto pOwner = m_hOwnerEntity()->As<CTFPlayer>();
if (pOwner && pOwner->IsCritBoosted())
return 3.f;
if (pOwner && pOwner->IsMiniCritBoosted()
|| pTarget && (pTarget->InCond(TF_COND_URINE) || pTarget->InCond(TF_COND_MARKEDFORDEATH)))
return 1.36f;
if (pOwner && pOwner->IsMiniCritBoosted()
|| pTarget && (pTarget->InCond(TF_COND_URINE) || pTarget->InCond(TF_COND_MARKEDFORDEATH)))
return 1.36f;
return 1.f;
};
return 1.f;
};
float flMult = SDK::AttribHookValue(GetMainMult(), "mult_dmg", this);
float flMult = SDK::AttribHookValue(fGetMainMult(), "mult_dmg", this);
flMult = SDK::AttribHookValue(flMult, "bodyshot_damage_modify", this);
if (m_flChargedDamage() == 150.f)
flMult = SDK::AttribHookValue(flMult, "sniper_full_charge_damage_bonus", this);
@@ -1,8 +1,7 @@
#pragma once
#ifndef IACHIEVEMENTMGR_H
#define IACHIEVEMENTMGR_H
#ifdef _WIN32
#pragma once
#endif
class CBaseAchievement;
@@ -1,11 +1,9 @@
#pragma once
#include "IClientUnknown.h"
#include "../Misc/bitbuf.h"
#include "../Misc/ClientClass.h"
#include "../Misc/bitbuf.h"
#include "../Definitions.h"
class IClientEntity;
enum ShouldTransmitState_t
{
SHOULDTRANSMIT_START = 0,
@@ -42,9 +42,9 @@ public:
virtual ClientRenderHandle_t& RenderHandle() = 0;
virtual const model_t* GetModel() const = 0;
virtual int DrawModel(int flags) = 0;
virtual int GetBody() = 0;
virtual int GetBody() = 0;
virtual void ComputeFxBlend() = 0;
virtual int GetFxBlend(void) = 0;
virtual int GetFxBlend(void) = 0;
virtual void GetColorModulation(float* color) = 0;
virtual bool LODTest() = 0;
virtual bool SetupBones(matrix3x4* pBoneToWorldOut, int nMaxBones, int boneMask, float currentTime) = 0;
@@ -67,7 +67,7 @@ public:
virtual ModelInstanceHandle_t GetModelInstance() = 0;
virtual const matrix3x4& RenderableToWorldTransform() = 0;
virtual int LookupAttachment(const char* pAttachmentName) = 0;
virtual bool GetAttachment(int number, Vector& origin, QAngle& angles) = 0;
virtual bool GetAttachment(int number, Vector& origin, QAngle& angles) = 0;
virtual bool GetAttachment(int number, matrix3x4& matrix) = 0;
virtual float* GetRenderClipPlane(void) = 0;
virtual int GetSkin() = 0;
@@ -0,0 +1,37 @@
#pragma once
#include "CGameTrace.h"
#include "../Definitions.h"
class IHandleEntity;
class IClientUnknown;
struct model_t;
class ICollideable
{
public:
virtual IHandleEntity* GetEntityHandle() = 0;
virtual const Vector& OBBMinsPreScaled() const = 0;
virtual const Vector& OBBMaxsPreScaled() const = 0;
virtual const Vector& OBBMins() const = 0;
virtual const Vector& OBBMaxs() const = 0;
virtual void WorldSpaceTriggerBounds(Vector* pVecWorldMins, Vector* pVecWorldMaxs) const = 0;
virtual bool TestCollision(const Ray_t& ray, unsigned int fContentsMask, trace_t& tr) = 0;
virtual bool TestHitboxes(const Ray_t& ray, unsigned int fContentsMask, trace_t& tr) = 0;
virtual int GetCollisionModelIndex() = 0;
virtual const model_t* GetCollisionModel() = 0;
virtual const Vector& GetCollisionOrigin() const = 0;
virtual const QAngle& GetCollisionAngles() const = 0;
virtual const matrix3x4& CollisionToWorldTransform() const = 0;
virtual SolidType_t GetSolid() const = 0;
virtual int GetSolidFlags() const = 0;
virtual IClientUnknown* GetIClientUnknown() = 0;
virtual int GetCollisionGroup() const = 0;
virtual void WorldSpaceSurroundingBounds(Vector* pVecMins, Vector* pVecMaxs) = 0;
virtual bool ShouldTouchTrigger(int triggerSolidFlags) const = 0;
virtual const matrix3x4* GetRootParentToWorldTransform() const = 0;
inline bool IsSolid()
{
return GetSolid() != SOLID_NONE && !(GetSolidFlags() & FSOLID_NOT_SOLID);
}
};
@@ -0,0 +1,50 @@
#pragma once
#include "../Main/CModel.h"
class SurfInfo;
struct decal_t;
typedef unsigned short DispDecalHandle_t;
typedef unsigned short DispShadowHandle_t;
typedef unsigned short ShadowHandle_t;
class GetIntersectingSurfaces_Struct
{
public:
model_t* m_pModel;
const Vector* m_pCenter;
const byte* m_pCenterPVS;
float m_Radius;
bool m_bOnlyVisible;
SurfInfo* m_pInfos;
int m_nMaxInfos;
int m_nSetInfos;
};
struct RayDispOutput_t
{
short ndxVerts[4];
float u, v;
float dist;
};
class IDispInfo
{
public:
virtual ~IDispInfo() = 0;
virtual void GetIntersectingSurfaces(GetIntersectingSurfaces_Struct* pStruct) = 0;
virtual void RenderWireframeInLightmapPage(int pageId) = 0;
virtual void GetBoundingBox(Vector& bbMin, Vector& bbMax) = 0;
virtual void SetParent(SurfaceHandle_t surfID) = 0;
virtual SurfaceHandle_t GetParent() = 0;
virtual void AddDynamicLights(struct dlight_t* pLights, unsigned int lightMask) = 0;
virtual unsigned int ComputeDynamicLightMask(struct dlight_t* pLights) = 0;
virtual DispDecalHandle_t NotifyAddDecal(decal_t* pDecal, float flSize) = 0;
virtual void NotifyRemoveDecal(DispDecalHandle_t h) = 0;
virtual DispShadowHandle_t AddShadowDecal(ShadowHandle_t shadowHandle) = 0;
virtual void RemoveShadowDecal(DispShadowHandle_t handle) = 0;
virtual bool ComputeShadowFragments(DispShadowHandle_t h, int& vertexCount, int& indexCount) = 0;
virtual bool GetTag() = 0;
virtual void SetTag() = 0;
virtual bool TestRay(Ray_t const& ray, float start, float end, float& dist, Vector2D* lightmapUV, Vector2D* textureUV) = 0;
virtual void ComputeLightmapAndTextureCoordinate(RayDispOutput_t const& uv, Vector2D* luv, Vector2D* tuv) = 0;
};
+5 -6
View File
@@ -1,9 +1,4 @@
#pragma once
#include "../Interfaces/IMaterialSystem.h"
class IMaterialVar;
class ITexture;
class IMaterialProxy;
#define VERTEX_POSITION 0x0001
#define VERTEX_NORMAL 0x0002
@@ -25,11 +20,15 @@ class IMaterialProxy;
#define USER_DATA_SIZE_MASK ( 0x7 << USER_DATA_SIZE_BIT )
#define VERTEX_FORMAT_FIELD_MASK 0x0FF
#define VERTEX_FORMAT_UNKNOWN 0
#define VERTEX_BONEWEIGHT( _n ) ((_n) << VERTEX_BONE_WEIGHT_BIT)
#define VERTEX_USERDATA_SIZE( _n ) ((_n) << USER_DATA_SIZE_BIT)
#define VERTEX_TEXCOORD_MASK( _coord ) (( 0x7ULL ) << ( TEX_COORD_SIZE_BIT + 3 * (_coord) ))
class IMaterialVar;
class ITexture;
class IMaterialProxy;
typedef unsigned int MorphFormat_t;
enum VertexElement_t
{
VERTEX_ELEMENT_NONE = -1,
@@ -1,5 +1,6 @@
#pragma once
#include "NetChannel.h"
#include "INetworkSystem.h"
#include "INetChannelInfo.h"
#include "INetMessage.h"
@@ -60,8 +61,8 @@ public:
class CNetChannel : public INetChannel
{
public:
virtual ConnectionStatus_t GetConnectionState();
virtual const netadr_t& GetRemoteAddress(void) const;
virtual ConnectionStatus_t GetConnectionState() = 0;
virtual const netadr_t& GetRemoteAddress(void) const = 0;
ConnectionStatus_t m_ConnectionState;
int m_nOutSequenceNr;

Some files were not shown because too many files have changed in this diff Show More