Skip to content

Commit

Permalink
Do not draw outline glow on scene objects which were made invisible b…
Browse files Browse the repository at this point in the history
…y the first-person view
  • Loading branch information
danielkrupinski committed Nov 30, 2024
1 parent 740c16f commit 2439d05
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 16 deletions.
5 changes: 5 additions & 0 deletions Source/CS2/Classes/CSceneObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ enum SceneObjectFlags {
SceneObjectFlag_IsDeleted = 0x20
};

enum ESceneObjectFlags : std::uint64_t {
SCENEOBJECTFLAG_PIPELINE_SPECIFIC_2 = (std::uint64_t{1} << 54)
};

struct SceneObjectAttributes {
struct FloatAttributes {};

Expand All @@ -19,6 +23,7 @@ struct CSceneObject {
using m_nObjectClass = std::uint8_t;
using flags = std::uint8_t;
using attributes = SceneObjectAttributes*;
using m_nRenderableFlags = std::uint64_t;
};

}
10 changes: 7 additions & 3 deletions Source/Entities/BaseEntity.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,13 @@ class BaseEntity {
void applyGlow(cs2::Color color, int glowRange = 0) const noexcept
{
renderComponent().sceneObjectUpdaters().forEachSceneObject([this, color, glowRange](auto&& sceneObject) {
auto&& glowSceneObject = hookContext.template make<GlowSceneObjects>().getGlowSceneObject(sceneObject);
glowSceneObject.apply(sceneObject, color, glowRange);
glowSceneObject.setGlowEntity(*this);
// this will still show glow for 1 frame when switching spectators as the flags aren't updated yet
// todo: do player glow in player scene object updater hook to fix it
if (!sceneObject.isCulledByFirstPersonView().valueOr(false)) {
auto&& glowSceneObject = hookContext.template make<GlowSceneObjects>().getGlowSceneObject(sceneObject);
glowSceneObject.apply(sceneObject, color, glowRange);
glowSceneObject.setGlowEntity(*this);
}
});
}

Expand Down
16 changes: 11 additions & 5 deletions Source/GameClasses/SceneObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,6 @@ class SceneObject {
return sceneObject;
}

[[nodiscard]] auto isDeleted() const noexcept
{
return (hookContext.sceneSystemPatternSearchResults().template get<OffsetToSceneObjectFlags>().toOptional() & cs2::SceneObjectFlag_IsDeleted).notEqual(0);
}

[[nodiscard]] auto objectClass() const noexcept
{
return hookContext.sceneSystemPatternSearchResults().template get<OffsetToSceneObjectClass>().of(sceneObject).toOptional();
Expand All @@ -41,7 +36,18 @@ class SceneObject {
return hookContext.template make<SceneObjectAttributes>(hookContext.sceneSystemPatternSearchResults().template get<OffsetToSceneObjectAttributes>().of(sceneObject).valueOr(nullptr));
}

[[nodiscard]] auto isCulledByFirstPersonView() const noexcept
{
// set when camera is inside the upper body e.g. when spectating in first person
return (renderableFlags() & cs2::SCENEOBJECTFLAG_PIPELINE_SPECIFIC_2).notEqual(0);
}

private:
[[nodiscard]] auto renderableFlags() const noexcept
{
return hookContext.sceneSystemPatternSearchResults().template get<OffsetToSceneObjectRenderableFlags>().of(sceneObject).toOptional();
}

HookContext& hookContext;
cs2::CSceneObject* sceneObject;
};
3 changes: 2 additions & 1 deletion Source/MemoryPatterns/Linux/SceneObjectPatternsLinux.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ struct SceneObjectPatterns {
return sceneSystemPatterns
.template addPattern<OffsetToSceneObjectFlags, CodePattern{"06 ? ? ? ? ? 0F 85 ? ? ? ? 41 F6 44 24 ?"}.add(16).read()>()
.template addPattern<OffsetToSceneObjectClass, CodePattern{"B6 46 ? 49 89 F4"}.add(2).read()>()
.template addPattern<OffsetToSceneObjectAttributes, CodePattern{"4C 89 A6 ? ? ? ?"}.add(3).read()>();
.template addPattern<OffsetToSceneObjectAttributes, CodePattern{"4C 89 A6 ? ? ? ?"}.add(3).read()>()
.template addPattern<OffsetToSceneObjectRenderableFlags, CodePattern{"? ? ? ? 48 21 D0 48 85"}.read()>();
}
};
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ using SceneObjectOffset = FieldOffset<cs2::CSceneObject, FieldType, OffsetType>;
STRONG_TYPE_ALIAS(OffsetToSceneObjectFlags, SceneObjectOffset<cs2::CSceneObject::flags, WIN64_LINUX(std::int32_t, std::int8_t)>);
STRONG_TYPE_ALIAS(OffsetToSceneObjectClass, SceneObjectOffset<cs2::CSceneObject::m_nObjectClass, WIN64_LINUX(std::int32_t, std::int8_t)>);
STRONG_TYPE_ALIAS(OffsetToSceneObjectAttributes, SceneObjectOffset<cs2::CSceneObject::attributes, std::int32_t>);
STRONG_TYPE_ALIAS(OffsetToSceneObjectRenderableFlags, SceneObjectOffset<cs2::CSceneObject::m_nRenderableFlags, std::int32_t>);
3 changes: 2 additions & 1 deletion Source/MemoryPatterns/Windows/SceneObjectPatternsWindows.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ struct SceneObjectPatterns {
return sceneSystemPatterns
.template addPattern<OffsetToSceneObjectFlags, CodePattern{"CC F6 83 ? ? ? ?"}.add(3).read()>()
.template addPattern<OffsetToSceneObjectClass, CodePattern{"B6 82 ? ? ? ? 33"}.add(2).read()>()
.template addPattern<OffsetToSceneObjectAttributes, CodePattern{"BA ? ? ? ? 00 48 8B EA 0F"}.add(1).read()>();
.template addPattern<OffsetToSceneObjectAttributes, CodePattern{"BA ? ? ? ? 00 48 8B EA 0F"}.add(1).read()>()
.template addPattern<OffsetToSceneObjectRenderableFlags, CodePattern{"75 ? 48 8B 83 ? ? ? ? 48 C1"}.add(5).read()>();
}
};
1 change: 1 addition & 0 deletions Source/Osiris.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,7 @@
<ClInclude Include="MemoryPatterns\Windows\PlayerControllerPatternsWindows.h" />
<ClInclude Include="MemoryPatterns\Windows\PlayerPawnPatternsWindows.h" />
<ClInclude Include="MemoryPatterns\Windows\RenderComponentPatternsWindows.h" />
<ClInclude Include="MemoryPatterns\Windows\SceneObjectPatternsWindows.h" />
<ClInclude Include="MemoryPatterns\Windows\SceneObjectUpdaterPatternsWindows.h" />
<ClInclude Include="MemoryPatterns\Windows\SceneSystemPatternsWindows.h" />
<ClInclude Include="MemoryPatterns\Windows\SdlPatternWindows.h" />
Expand Down
9 changes: 3 additions & 6 deletions Source/Osiris.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -785,12 +785,6 @@
<ClInclude Include="HookDependencies\HookDependencies.h">
<Filter>HookDependencies</Filter>
</ClInclude>
<ClInclude Include="HookDependencies\HookDependenciesMask.h">
<Filter>HookDependencies</Filter>
</ClInclude>
<ClInclude Include="HookDependencies\HookDependenciesBuilder.h">
<Filter>HookDependencies</Filter>
</ClInclude>
<ClInclude Include="CS2\Constants\TeamNumberConstants.h">
<Filter>CS2\Constants</Filter>
</ClInclude>
Expand Down Expand Up @@ -1688,6 +1682,9 @@
<ClInclude Include="Entities\WeaponServices.h">
<Filter>Entities</Filter>
</ClInclude>
<ClInclude Include="MemoryPatterns\Windows\SceneObjectPatternsWindows.h">
<Filter>MemoryPatterns\Windows</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="UI\Panorama\CreateGUI.js">
Expand Down

0 comments on commit 2439d05

Please sign in to comment.