From 0912aa3bd20ee5c04b941e4eb8084944a915738e Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Sun, 17 May 2026 21:46:36 +0100 Subject: [PATCH 1/2] init --- src/game/client/neo/c_neo_player.cpp | 18 +++++++++++++++--- src/game/client/neo/c_neo_player.h | 2 +- .../neo/weapons/weapon_neobasecombatweapon.cpp | 4 ++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/game/client/neo/c_neo_player.cpp b/src/game/client/neo/c_neo_player.cpp index c473a99797..7e95858fc1 100644 --- a/src/game/client/neo/c_neo_player.cpp +++ b/src/game/client/neo/c_neo_player.cpp @@ -688,12 +688,12 @@ int C_NEO_Player::DrawModel(int flags) bool inThermalVision = pTargetPlayer ? (pTargetPlayer->IsInVision() && pTargetPlayer->GetClass() == NEO_CLASS_SUPPORT) : false; int ret = 0; - if (!IsCloaked() || inThermalVision) + if (!m_bInThermOpticCamo || inThermalVision) { ret |= BaseClass::DrawModel(flags); } - if (IsCloaked() && !inThermalVision) + if (m_bInThermOpticCamo && !inThermalVision) { IMaterial* pass = materials->FindMaterial("models/player/toc", TEXTURE_GROUP_CLIENT_EFFECTS); modelrender->ForcedMaterialOverride(pass); @@ -701,7 +701,7 @@ int C_NEO_Player::DrawModel(int flags) modelrender->ForcedMaterialOverride(nullptr); } - else if (inThermalVision && !IsCloaked()) + else if (inThermalVision && !m_bInThermOpticCamo) { IMaterial* pass = materials->FindMaterial(NEO_THERMAL_MODEL_MATERIAL, TEXTURE_GROUP_MODEL); modelrender->ForcedMaterialOverride(pass); @@ -749,6 +749,18 @@ void C_NEO_Player::AddPoints(int score, bool bAllowNegativeScore, bool bIgnorePl //pl.frags = m_iFrags; NEO TODO (Adam) Is this actually used anywhere? should we include a xp field in CPlayerState? } +bool C_NEO_Player::IsCloaked() const +{ + auto pTargetPlayer = C_NEO_Player::GetVisionTargetNEOPlayer(); + if (!pTargetPlayer) + { + return m_bInThermOpticCamo; + } + + bool inThermalVision = pTargetPlayer->IsInVision() && pTargetPlayer->GetClass() == NEO_CLASS_SUPPORT; + return m_bInThermOpticCamo && !inThermalVision; +} + ShadowType_t C_NEO_Player::ShadowCastType( void ) { if (IsCloaked()) diff --git a/src/game/client/neo/c_neo_player.h b/src/game/client/neo/c_neo_player.h index b613f5ebf8..761c0fd2fe 100644 --- a/src/game/client/neo/c_neo_player.h +++ b/src/game/client/neo/c_neo_player.h @@ -162,7 +162,7 @@ class C_NEO_Player : public C_HL2MP_Player C_NEOPredictedViewModel *GetNEOViewModel() { return static_cast(GetViewModel()); } - bool IsCloaked() const { return m_bInThermOpticCamo; } + bool IsCloaked() const; float GetCloakFactor() const { return m_flTocFactor; } bool IsAirborne() const { return (!(GetFlags() & FL_ONGROUND)); } bool IsInVision() const { return m_bInVision; } diff --git a/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp b/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp index d9783b1b2c..2f2f99ed75 100644 --- a/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp +++ b/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp @@ -1293,7 +1293,7 @@ int CNEOBaseCombatWeapon::DrawModel(int flags) bool inThermalVision = pTargetPlayer->IsInVision() && pTargetPlayer->GetClass() == NEO_CLASS_SUPPORT; int ret = 0; - if (inThermalVision && (!pOwner || (pOwner && !pOwner->IsCloaked()))) + if (inThermalVision && (!pOwner || (pOwner && !pOwner->m_bInThermOpticCamo))) { IMaterial* pass = materials->FindMaterial("dev/thermal_weapon_model", TEXTURE_GROUP_MODEL); modelrender->ForcedMaterialOverride(pass); @@ -1302,7 +1302,7 @@ int CNEOBaseCombatWeapon::DrawModel(int flags) return ret; } - if ((pOwner && pOwner->IsCloaked()) && !inThermalVision) + if ((pOwner && pOwner->m_bInThermOpticCamo) && !inThermalVision) { IMaterial* pass = materials->FindMaterial("models/player/toc", TEXTURE_GROUP_CLIENT_EFFECTS); modelrender->ForcedMaterialOverride(pass); From b047e88ed6d43faafb487f524ff35fa8091179a0 Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Sun, 17 May 2026 21:52:56 +0100 Subject: [PATCH 2/2] don't cast shadows when cloaked in thermals? --- src/game/client/neo/c_neo_player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/client/neo/c_neo_player.cpp b/src/game/client/neo/c_neo_player.cpp index 7e95858fc1..8a6d513084 100644 --- a/src/game/client/neo/c_neo_player.cpp +++ b/src/game/client/neo/c_neo_player.cpp @@ -763,7 +763,7 @@ bool C_NEO_Player::IsCloaked() const ShadowType_t C_NEO_Player::ShadowCastType( void ) { - if (IsCloaked()) + if (m_bInThermOpticCamo) { return SHADOWS_NONE; }