visual fixes

This commit is contained in:
rei-2 committed 2025-08-14 19:08:19 -04:00
1 parent f246c3dbbe
commit cb14f8aac6
8 files changed
+179 -139

No files matched your search

@@ -8,7 +8,7 @@
#include "../AutoAirblast/AutoAirblast.h"
//#define SPLASH_DEBUG1 // normal splash visualization
//#define SPLASH_DEBUG2 // obstructed splash visualization
#define SPLASH_DEBUG2 // obstructed splash visualization
//#define SPLASH_DEBUG3 // simple splash visualization
//#define SPLASH_DEBUG4 // points visualization
//#define SPLASH_DEBUG5 // trace visualization
+1 -1
View File
@@ -97,7 +97,7 @@ void CChams::Store(CTFPlayer* pLocal)
continue;
if (pGroup->m_tChams()
&& SDK::IsOnScreen(pEntity, !pEntity->IsProjectile()))
&& SDK::IsOnScreen(pEntity, pEntity->IsBaseCombatWeapon() || pEntity->IsWearable()))
m_vEntities.emplace_back(pEntity, pGroup->m_tChams);
if (pEntity->IsPlayer() && pEntity != pLocal && pGroup->m_bBacktrack && !pGroup->m_vBacktrackChams.empty()
+5 -1
View File
@@ -603,6 +603,10 @@ static inline void StoreProjectile(CBaseEntity* pProjectile, CTFPlayer* pLocal,
static inline void StoreObjective(CBaseEntity* pObjective, CTFPlayer* pLocal, Group_t* pGroup, std::unordered_map<CBaseEntity*, EntityCache_t>& mCache)
{
auto pOwner = pObjective->m_hOwnerEntity()->As<CTFPlayer>();
if (pOwner == pLocal)
return;
EntityCache_t& tCache = mCache[pObjective];
tCache.m_flAlpha = pGroup->m_tColor.a / 255.f;
tCache.m_tColor = F::Groups.GetColor(pObjective, pGroup);
@@ -734,7 +738,7 @@ void CESP::Store(CTFPlayer* pLocal)
else if (pEntity->IsProjectile())
StoreProjectile(pEntity, pLocal, pGroup, m_mEntityCache);
else if (pEntity->GetClassID() == ETFClassID::CCaptureFlag)
StoreProjectile(pEntity, pLocal, pGroup, m_mEntityCache);
StoreObjective(pEntity, pLocal, pGroup, m_mEntityCache);
else
StoreMisc(pEntity, pLocal, pGroup, m_mEntityCache);
}
+1 -2
View File
@@ -15,7 +15,6 @@ void CGlow::SetupBegin(IMatRenderContext* pRenderContext)
I::RenderView->SetColorModulation(1.f, 1.f, 1.f);
I::ModelRender->ForcedMaterialOverride(m_pMatGlowColor);
pRenderContext->ClearBuffers(false, false, false);
pRenderContext->SetStencilEnable(true);
pRenderContext->SetStencilCompareFunction(STENCILCOMPARISONFUNCTION_ALWAYS);
pRenderContext->SetStencilPassOperation(STENCILOPERATION_REPLACE);
@@ -121,7 +120,7 @@ void CGlow::Store(CTFPlayer* pLocal)
Color_t tColor = F::Groups.GetColor(pEntity, pGroup);
if (pGroup->m_tGlow()
&& SDK::IsOnScreen(pEntity, !pEntity->IsProjectile()))
&& SDK::IsOnScreen(pEntity, pEntity->IsBaseCombatWeapon() || pEntity->IsWearable()))
m_mEntities[pGroup->m_tGlow].emplace_back(pEntity, tColor);
if (pEntity->IsPlayer() && pEntity != pLocal && pGroup->m_bBacktrack && pGroup->m_tBacktrackGlow()
@@ -700,4 +700,37 @@ public:
virtual void OverrideColorWriteEnable(bool bOverrideEnable, bool bColorWriteEnable) = 0;
virtual void ClearBuffersObeyStencilEx(bool bClearColor, bool bClearAlpha, bool bClearDepth) = 0;
virtual void AsyncCreateTextureFromRenderTarget(ITexture* pSrcRt, const char* pDstName, ImageFormat dstFmt, bool bGenMips, int nAdditionalCreationFlags, IAsyncTextureOperationReceiver* pRecipient, void* pExtraArgs) = 0;
};
struct ShaderStencilState_t
{
bool m_bEnable;
StencilOperation_t m_FailOp;
StencilOperation_t m_ZFailOp;
StencilOperation_t m_PassOp;
StencilComparisonFunction_t m_CompareFunc;
int m_nReferenceValue;
uint32 m_nTestMask;
uint32 m_nWriteMask;
ShaderStencilState_t()
{
m_bEnable = false;
m_PassOp = m_FailOp = m_ZFailOp = STENCILOPERATION_KEEP;
m_CompareFunc = STENCILCOMPARISONFUNCTION_ALWAYS;
m_nReferenceValue = 0;
m_nTestMask = m_nWriteMask = 0xFFFFFFFF;
}
void SetStencilState(IMatRenderContext* const pRenderContext) const
{
pRenderContext->SetStencilEnable(m_bEnable);
pRenderContext->SetStencilFailOperation(m_FailOp);
pRenderContext->SetStencilZFailOperation(m_ZFailOp);
pRenderContext->SetStencilPassOperation(m_PassOp);
pRenderContext->SetStencilCompareFunction(m_CompareFunc);
pRenderContext->SetStencilReferenceValue(m_nReferenceValue);
pRenderContext->SetStencilTestMask(m_nTestMask);
pRenderContext->SetStencilWriteMask(m_nWriteMask);
}
};
@@ -134,6 +134,144 @@ public:
return ent;
}
inline bool IsPlayer()
{
return GetClassID() == ETFClassID::CTFPlayer;
}
inline bool IsBuilding()
{
switch (GetClassID())
{
case ETFClassID::CObjectDispenser:
case ETFClassID::CObjectSentrygun:
case ETFClassID::CObjectTeleporter:
return true;
}
return false;
}
inline bool IsSentrygun()
{
return GetClassID() == ETFClassID::CObjectSentrygun;
}
inline bool IsDispenser()
{
return GetClassID() == ETFClassID::CObjectDispenser;
}
inline bool IsTeleporter()
{
return GetClassID() == ETFClassID::CObjectTeleporter;
}
inline bool IsProjectile()
{
switch (GetClassID())
{
case ETFClassID::CBaseProjectile:
case ETFClassID::CBaseGrenade:
case ETFClassID::CTFWeaponBaseGrenadeProj:
case ETFClassID::CTFWeaponBaseMerasmusGrenade:
case ETFClassID::CTFGrenadePipebombProjectile:
case ETFClassID::CTFStunBall:
case ETFClassID::CTFBall_Ornament:
case ETFClassID::CTFProjectile_Jar:
case ETFClassID::CTFProjectile_Cleaver:
case ETFClassID::CTFProjectile_JarGas:
case ETFClassID::CTFProjectile_JarMilk:
case ETFClassID::CTFProjectile_SpellBats:
case ETFClassID::CTFProjectile_SpellKartBats:
case ETFClassID::CTFProjectile_SpellMeteorShower:
case ETFClassID::CTFProjectile_SpellMirv:
case ETFClassID::CTFProjectile_SpellPumpkin:
case ETFClassID::CTFProjectile_SpellSpawnBoss:
case ETFClassID::CTFProjectile_SpellSpawnHorde:
case ETFClassID::CTFProjectile_SpellSpawnZombie:
case ETFClassID::CTFProjectile_SpellTransposeTeleport:
case ETFClassID::CTFProjectile_Throwable:
case ETFClassID::CTFProjectile_ThrowableBreadMonster:
case ETFClassID::CTFProjectile_ThrowableBrick:
case ETFClassID::CTFProjectile_ThrowableRepel:
case ETFClassID::CTFBaseRocket:
case ETFClassID::CTFFlameRocket:
case ETFClassID::CTFProjectile_Arrow:
case ETFClassID::CTFProjectile_GrapplingHook:
case ETFClassID::CTFProjectile_HealingBolt:
case ETFClassID::CTFProjectile_Rocket:
case ETFClassID::CTFProjectile_BallOfFire:
case ETFClassID::CTFProjectile_MechanicalArmOrb:
case ETFClassID::CTFProjectile_SentryRocket:
case ETFClassID::CTFProjectile_SpellFireball:
case ETFClassID::CTFProjectile_SpellLightningOrb:
case ETFClassID::CTFProjectile_SpellKartOrb:
case ETFClassID::CTFProjectile_EnergyBall:
case ETFClassID::CTFProjectile_Flare:
case ETFClassID::CTFBaseProjectile:
case ETFClassID::CTFProjectile_EnergyRing:
//case ETFClassID::CTFProjectile_Syringe:
return true;
}
return false;
}
inline bool IsPickup()
{
switch (GetClassID())
{
case ETFClassID::CBaseAnimating:
return I::ModelInfoClient->GetModelName(GetModel())[24] != 'h';
case ETFClassID::CTFAmmoPack:
return true;
}
return false;
}
inline bool IsNPC()
{
switch (GetClassID())
{
case ETFClassID::CTFBaseBoss:
case ETFClassID::CTFTankBoss:
case ETFClassID::CMerasmus:
case ETFClassID::CEyeballBoss:
case ETFClassID::CHeadlessHatman:
case ETFClassID::CZombie:
return true;
}
return false;
}
inline bool IsBomb()
{
switch (GetClassID())
{
case ETFClassID::CTFPumpkinBomb:
case ETFClassID::CTFGenericBomb:
return true;
}
return false;
}
inline bool IsWearable()
{
switch (GetClassID())
{
case ETFClassID::CTFWearable:
case ETFClassID::CTFPowerupBottle:
case ETFClassID::CTFWearableCampaignItem:
case ETFClassID::CTFWearableDemoShield:
case ETFClassID::CTFWeaponPDAExpansion_Dispenser:
case ETFClassID::CTFWeaponPDAExpansion_Teleporter:
case ETFClassID::CTFWearableLevelableItem:
case ETFClassID::CTFWearableRazorback:
case ETFClassID::CTFWearableRobotArm:
case ETFClassID::CTFWearableVM:
case ETFClassID::CTFWearableItem:
return true;
}
return false;
}
//VIRTUAL(IsPlayer, bool, 132, this);
VIRTUAL(IsBaseCombatCharacter, bool, 133, this);
//VIRTUAL(IsNPC, bool, 135, this);
VIRTUAL(IsNextBot, bool, 136, this);
VIRTUAL(IsBaseObject, bool, 137, this);
VIRTUAL(IsBaseCombatWeapon, bool, 138, this);
VIRTUAL(IsCombatItem, bool, 140, this);
VIRTUAL(EyePosition, Vec3, 142, this);
VIRTUAL(EyeAngles, Vec3&, 143, this);
VIRTUAL(UpdateVisibility, void, 91, this);
@@ -16,135 +16,5 @@ public:
virtual CMouthInfo* GetMouth(void) = 0;
virtual bool GetSoundSpatialization(SpatializationInfo_t& info) = 0;
inline bool IsPlayer()
{
return GetClassID() == ETFClassID::CTFPlayer;
}
inline bool IsSentrygun()
{
return GetClassID() == ETFClassID::CObjectSentrygun;
}
inline bool IsDispenser()
{
return GetClassID() == ETFClassID::CObjectDispenser;
}
inline bool IsTeleporter()
{
return GetClassID() == ETFClassID::CObjectTeleporter;
}
inline bool IsBaseCombatWeapon()
{
return GetClassID() == ETFClassID::CBaseCombatWeapon;
}
inline bool IsWearable()
{
return GetClassID() == ETFClassID::CTFWearable;
}
inline bool IsBuilding()
{
switch (GetClassID())
{
case ETFClassID::CObjectDispenser:
case ETFClassID::CObjectSentrygun:
case ETFClassID::CObjectTeleporter:
return true;
}
return false;
}
inline bool IsProjectile()
{
switch (GetClassID())
{
case ETFClassID::CBaseProjectile:
case ETFClassID::CBaseGrenade:
case ETFClassID::CTFWeaponBaseGrenadeProj:
case ETFClassID::CTFWeaponBaseMerasmusGrenade:
case ETFClassID::CTFGrenadePipebombProjectile:
case ETFClassID::CTFStunBall:
case ETFClassID::CTFBall_Ornament:
case ETFClassID::CTFProjectile_Jar:
case ETFClassID::CTFProjectile_Cleaver:
case ETFClassID::CTFProjectile_JarGas:
case ETFClassID::CTFProjectile_JarMilk:
case ETFClassID::CTFProjectile_SpellBats:
case ETFClassID::CTFProjectile_SpellKartBats:
case ETFClassID::CTFProjectile_SpellMeteorShower:
case ETFClassID::CTFProjectile_SpellMirv:
case ETFClassID::CTFProjectile_SpellPumpkin:
case ETFClassID::CTFProjectile_SpellSpawnBoss:
case ETFClassID::CTFProjectile_SpellSpawnHorde:
case ETFClassID::CTFProjectile_SpellSpawnZombie:
case ETFClassID::CTFProjectile_SpellTransposeTeleport:
case ETFClassID::CTFProjectile_Throwable:
case ETFClassID::CTFProjectile_ThrowableBreadMonster:
case ETFClassID::CTFProjectile_ThrowableBrick:
case ETFClassID::CTFProjectile_ThrowableRepel:
case ETFClassID::CTFBaseRocket:
case ETFClassID::CTFFlameRocket:
case ETFClassID::CTFProjectile_Arrow:
case ETFClassID::CTFProjectile_GrapplingHook:
case ETFClassID::CTFProjectile_HealingBolt:
case ETFClassID::CTFProjectile_Rocket:
case ETFClassID::CTFProjectile_BallOfFire:
case ETFClassID::CTFProjectile_MechanicalArmOrb:
case ETFClassID::CTFProjectile_SentryRocket:
case ETFClassID::CTFProjectile_SpellFireball:
case ETFClassID::CTFProjectile_SpellLightningOrb:
case ETFClassID::CTFProjectile_SpellKartOrb:
case ETFClassID::CTFProjectile_EnergyBall:
case ETFClassID::CTFProjectile_Flare:
case ETFClassID::CTFBaseProjectile:
case ETFClassID::CTFProjectile_EnergyRing:
//case ETFClassID::CTFProjectile_Syringe:
return true;
}
return false;
}
inline bool IsPickup()
{
switch (GetClassID())
{
case ETFClassID::CBaseAnimating:
return I::ModelInfoClient->GetModelName(GetModel())[24] != 'h';
case ETFClassID::CTFAmmoPack:
return true;
}
return false;
}
inline bool IsNPC()
{
switch (GetClassID())
{
case ETFClassID::CTFBaseBoss:
case ETFClassID::CTFTankBoss:
case ETFClassID::CMerasmus:
case ETFClassID::CEyeballBoss:
case ETFClassID::CHeadlessHatman:
case ETFClassID::CZombie:
return true;
}
return false;
}
inline bool IsBomb()
{
switch (GetClassID())
{
case ETFClassID::CTFPumpkinBomb:
case ETFClassID::CTFGenericBomb:
return true;
}
return false;
}
template <typename T> inline T* As() { return reinterpret_cast<T*>(this); }
};
@@ -321,10 +321,6 @@ void CEntities::ManualNetwork(const StartSoundParams_t& params)
if (!pEntity || !pEntity->IsDormant() || !pEntity->IsPlayer() && !pEntity->IsBuilding())
return;
bool bPlayer = pEntity->IsPlayer();
bool bBuilding = pEntity->IsBuilding();
bool bNPC = pEntity->IsNPC();
float flDuration = 0.f;
switch (pEntity->GetClassID())
{