From 2ff449da8a5d299c8f974e557c9eb35815d461c0 Mon Sep 17 00:00:00 2001 From: Ruddygreat Date: Tue, 4 Feb 2025 10:39:11 +0000 Subject: [PATCH 1/6] hopefully this works --- .../DisplacementMap/DisplacementMapSystem.cs | 14 ++++++++++++- .../_Impstation/Shaders/shaders.yml | 11 ++++++++++ .../Shaders/displacement_unshaded.swsl | 20 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/_Impstation/Shaders/displacement_unshaded.swsl diff --git a/Content.Client/DisplacementMap/DisplacementMapSystem.cs b/Content.Client/DisplacementMap/DisplacementMapSystem.cs index 6db164a09f09..5c93ca28d924 100644 --- a/Content.Client/DisplacementMap/DisplacementMapSystem.cs +++ b/Content.Client/DisplacementMap/DisplacementMapSystem.cs @@ -12,7 +12,19 @@ public sealed class DisplacementMapSystem : EntitySystem public bool TryAddDisplacement(DisplacementData data, SpriteComponent sprite, int index, string key, HashSet revealedLayers) { if (data.ShaderOverride != null) - sprite.LayerSetShader(index, data.ShaderOverride); + { + //imp edit start + //if the layer is unshaded, use the unshaded displacement shader + if (sprite[index] is SpriteComponent.Layer layer && layer.ShaderPrototype!.Equals("unshaded")) //little hack to force-check if something is using the unshaded "shader" (in quotes because this thing seems to not fucking exist????) + { + sprite.LayerSetShader(index, "DisplacedStencilDrawUnshaded"); + } + else //else, continue as normal + { + sprite.LayerSetShader(index, data.ShaderOverride); + } + //imp edit end + } var displacementKey = $"{key}-displacement"; if (!revealedLayers.Add(displacementKey)) diff --git a/Resources/Prototypes/_Impstation/Shaders/shaders.yml b/Resources/Prototypes/_Impstation/Shaders/shaders.yml index 77c32c7067bf..3075c13213b5 100644 --- a/Resources/Prototypes/_Impstation/Shaders/shaders.yml +++ b/Resources/Prototypes/_Impstation/Shaders/shaders.yml @@ -2,3 +2,14 @@ id: AccessibleFullStealth kind: source path: "/Textures/_Impstation/Shaders/accessible_full_stealth.swsl" + +- type: shader + id: DisplacedStencilDrawUnshaded + kind: source + path: "/Textures/_Impstation/Shaders/displacement_unshaded.swsl" + stencil: + ref: 1 + op: Keep + func: NotEqual + params: + displacementSize: 127 \ No newline at end of file diff --git a/Resources/Textures/_Impstation/Shaders/displacement_unshaded.swsl b/Resources/Textures/_Impstation/Shaders/displacement_unshaded.swsl new file mode 100644 index 000000000000..cc389b9a9bfd --- /dev/null +++ b/Resources/Textures/_Impstation/Shaders/displacement_unshaded.swsl @@ -0,0 +1,20 @@ +light_mode unshaded; + +uniform sampler2D displacementMap; +uniform highp float displacementSize; +uniform highp vec4 displacementUV; + +varying highp vec2 displacementUVOut; + +void vertex() { + displacementUVOut = mix(displacementUV.xy, displacementUV.zw, tCoord2); +} + +void fragment() { + highp vec4 displacementSample = texture2D(displacementMap, displacementUVOut); + highp vec2 displacementValue = (displacementSample.xy - vec2(128.0 / 255.0)) / (1.0 - 128.0 / 255.0); + COLOR = zTexture(UV + displacementValue * TEXTURE_PIXEL_SIZE * displacementSize * vec2(1.0, -1.0)); + COLOR.a *= displacementSample.a; +} + + From dfb73101b53d84726042152bbd185fb3a77e3418 Mon Sep 17 00:00:00 2001 From: Ruddygreat Date: Tue, 4 Feb 2025 13:54:22 +0000 Subject: [PATCH 2/6] minor cleanup --- Content.Client/DisplacementMap/DisplacementMapSystem.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Client/DisplacementMap/DisplacementMapSystem.cs b/Content.Client/DisplacementMap/DisplacementMapSystem.cs index 5c93ca28d924..8978c66a3790 100644 --- a/Content.Client/DisplacementMap/DisplacementMapSystem.cs +++ b/Content.Client/DisplacementMap/DisplacementMapSystem.cs @@ -14,8 +14,8 @@ public bool TryAddDisplacement(DisplacementData data, SpriteComponent sprite, in if (data.ShaderOverride != null) { //imp edit start - //if the layer is unshaded, use the unshaded displacement shader - if (sprite[index] is SpriteComponent.Layer layer && layer.ShaderPrototype!.Equals("unshaded")) //little hack to force-check if something is using the unshaded "shader" (in quotes because this thing seems to not fucking exist????) + //if the layer is unshaded by default, use the unshaded displacement shader + if (sprite[index] is SpriteComponent.Layer layer && layer.ShaderPrototype is "unshaded") //little hack to force-check if something is using the unshaded "shader" (in quotes because this thing seems to not fucking exist????) { sprite.LayerSetShader(index, "DisplacedStencilDrawUnshaded"); } From 42848c91c5b311f5a39cb60b8e4d70e97a461c05 Mon Sep 17 00:00:00 2001 From: Ruddygreat Date: Tue, 4 Feb 2025 14:05:07 +0000 Subject: [PATCH 3/6] minor cleanup because rider was annoying me --- Content.Client/DisplacementMap/DisplacementMapSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Client/DisplacementMap/DisplacementMapSystem.cs b/Content.Client/DisplacementMap/DisplacementMapSystem.cs index 8978c66a3790..68b0820111ad 100644 --- a/Content.Client/DisplacementMap/DisplacementMapSystem.cs +++ b/Content.Client/DisplacementMap/DisplacementMapSystem.cs @@ -15,7 +15,7 @@ public bool TryAddDisplacement(DisplacementData data, SpriteComponent sprite, in { //imp edit start //if the layer is unshaded by default, use the unshaded displacement shader - if (sprite[index] is SpriteComponent.Layer layer && layer.ShaderPrototype is "unshaded") //little hack to force-check if something is using the unshaded "shader" (in quotes because this thing seems to not fucking exist????) + if (sprite[index] is SpriteComponent.Layer { ShaderPrototype: "unshaded" }) //little hack to force-check if something is using the unshaded "shader" (in quotes because this thing seems to not fucking exist????) { sprite.LayerSetShader(index, "DisplacedStencilDrawUnshaded"); } From 7b40cac9d78ddc09a96f29d5ae455d8da530c014 Mon Sep 17 00:00:00 2001 From: Ruddygreat Date: Tue, 4 Feb 2025 14:17:01 +0000 Subject: [PATCH 4/6] I know there are better ways to duplicate a commit than just doing it twice but this gives me more time to think. And I don't know the good ways to do it. --- .../DisplacementMap/DisplacementMapSystem.cs | 13 +++++-------- Content.Shared/DisplacementMap/DisplacementData.cs | 3 +++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Content.Client/DisplacementMap/DisplacementMapSystem.cs b/Content.Client/DisplacementMap/DisplacementMapSystem.cs index 68b0820111ad..7173c44cf5d1 100644 --- a/Content.Client/DisplacementMap/DisplacementMapSystem.cs +++ b/Content.Client/DisplacementMap/DisplacementMapSystem.cs @@ -15,14 +15,11 @@ public bool TryAddDisplacement(DisplacementData data, SpriteComponent sprite, in { //imp edit start //if the layer is unshaded by default, use the unshaded displacement shader - if (sprite[index] is SpriteComponent.Layer { ShaderPrototype: "unshaded" }) //little hack to force-check if something is using the unshaded "shader" (in quotes because this thing seems to not fucking exist????) - { - sprite.LayerSetShader(index, "DisplacedStencilDrawUnshaded"); - } - else //else, continue as normal - { - sprite.LayerSetShader(index, data.ShaderOverride); - } + sprite.LayerSetShader(index, + sprite[index] is SpriteComponent.Layer { ShaderPrototype: "unshaded" } //little hack to force-check if something is using the unshaded "shader" (in quotes because this thing seems to not fucking exist????) + ? data.ShaderOverrideUnshaded + //else, continue as normal + : data.ShaderOverride); //imp edit end } diff --git a/Content.Shared/DisplacementMap/DisplacementData.cs b/Content.Shared/DisplacementMap/DisplacementData.cs index 7bd5b580e143..4a7dcf3c1f9e 100644 --- a/Content.Shared/DisplacementMap/DisplacementData.cs +++ b/Content.Shared/DisplacementMap/DisplacementData.cs @@ -11,4 +11,7 @@ public sealed partial class DisplacementData [DataField] public string? ShaderOverride = "DisplacedStencilDraw"; + + [DataField] + public string ShaderOverrideUnshaded = "DisplacedStencilDrawUnshaded"; } From df6feb1417be5a7e12dd672f7b852f19e19f92a2 Mon Sep 17 00:00:00 2001 From: Ruddygreat Date: Sun, 9 Feb 2025 12:26:42 +0000 Subject: [PATCH 5/6] minor cleanup --- Content.Client/DisplacementMap/DisplacementMapSystem.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Content.Client/DisplacementMap/DisplacementMapSystem.cs b/Content.Client/DisplacementMap/DisplacementMapSystem.cs index 7173c44cf5d1..05d10a9c6409 100644 --- a/Content.Client/DisplacementMap/DisplacementMapSystem.cs +++ b/Content.Client/DisplacementMap/DisplacementMapSystem.cs @@ -13,12 +13,10 @@ public bool TryAddDisplacement(DisplacementData data, SpriteComponent sprite, in { if (data.ShaderOverride != null) { - //imp edit start - //if the layer is unshaded by default, use the unshaded displacement shader + //imp edit start - replaced the simple shader replacement w/ a ternary that checks if the layer is unshaded before setting the shader sprite.LayerSetShader(index, - sprite[index] is SpriteComponent.Layer { ShaderPrototype: "unshaded" } //little hack to force-check if something is using the unshaded "shader" (in quotes because this thing seems to not fucking exist????) + sprite[index] is SpriteComponent.Layer { ShaderPrototype: "unshaded" } ? data.ShaderOverrideUnshaded - //else, continue as normal : data.ShaderOverride); //imp edit end } From 222b74e05bcf347ea7c81e9638d6e0709c08c3fe Mon Sep 17 00:00:00 2001 From: Dark Date: Mon, 10 Feb 2025 18:44:00 +0000 Subject: [PATCH 6/6] newline --- Resources/Prototypes/_Impstation/Shaders/shaders.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/_Impstation/Shaders/shaders.yml b/Resources/Prototypes/_Impstation/Shaders/shaders.yml index 3075c13213b5..5d230a19aba9 100644 --- a/Resources/Prototypes/_Impstation/Shaders/shaders.yml +++ b/Resources/Prototypes/_Impstation/Shaders/shaders.yml @@ -12,4 +12,4 @@ op: Keep func: NotEqual params: - displacementSize: 127 \ No newline at end of file + displacementSize: 127