diff --git a/Barotrauma/BarotraumaClient/Source/Map/Structure.cs b/Barotrauma/BarotraumaClient/Source/Map/Structure.cs index acdb62496..451929be8 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Structure.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Structure.cs @@ -148,14 +148,17 @@ namespace Barotrauma { float newCutoff = Math.Min((sections[i].damage / prefab.Health), 0.65f); - if (Math.Abs(newCutoff - Submarine.DamageEffectCutoff) > 0.01f) + if (Math.Abs(newCutoff - Submarine.DamageEffectCutoff) > 0.01f || color != Submarine.DamageEffectColor) { damageEffect.Parameters["aCutoff"].SetValue(newCutoff); damageEffect.Parameters["cCutoff"].SetValue(newCutoff * 1.2f); + damageEffect.Parameters["color"].SetValue(color.ToVector4()); + damageEffect.CurrentTechnique.Passes[0].Apply(); Submarine.DamageEffectCutoff = newCutoff; + Submarine.DamageEffectColor = color; } } diff --git a/Barotrauma/BarotraumaClient/Source/Map/Submarine.cs b/Barotrauma/BarotraumaClient/Source/Map/Submarine.cs index ffa0cacc5..24f89c20f 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Submarine.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Submarine.cs @@ -67,6 +67,7 @@ namespace Barotrauma } public static float DamageEffectCutoff; + public static Color DamageEffectColor; public static void DrawDamageable(SpriteBatch spriteBatch, Effect damageEffect, bool editing = false) { diff --git a/Barotrauma/BarotraumaShared/Content/damageshader.fx b/Barotrauma/BarotraumaShared/Content/damageshader.fx index 554df8415..41b3356e4 100644 --- a/Barotrauma/BarotraumaShared/Content/damageshader.fx +++ b/Barotrauma/BarotraumaShared/Content/damageshader.fx @@ -5,6 +5,7 @@ sampler TextureSampler : register (s0) = sampler_state { Texture = ; } Texture xStencil; sampler StencilSampler = sampler_state { Texture = ; }; +float4 color; float aCutoff; float aMultiplier; @@ -14,9 +15,9 @@ float cMultiplier; float4 main(float4 position : SV_Position, float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { - float4 c = tex2D(TextureSampler, texCoord); + float4 c = xTexture.Sample(TextureSampler, texCoord) * color; - float4 stencilColor = tex2D(StencilSampler, texCoord); + float4 stencilColor = xStencil.Sample(StencilSampler, texCoord); float aDiff = stencilColor.a - aCutoff; diff --git a/Barotrauma/BarotraumaShared/Content/damageshader.xnb b/Barotrauma/BarotraumaShared/Content/damageshader.xnb index ca70b20de..5d3aad9e7 100644 Binary files a/Barotrauma/BarotraumaShared/Content/damageshader.xnb and b/Barotrauma/BarotraumaShared/Content/damageshader.xnb differ diff --git a/Barotrauma/BarotraumaShared/Content/damageshader_opengl.xnb b/Barotrauma/BarotraumaShared/Content/damageshader_opengl.xnb index 49535dde0..9249f145f 100644 Binary files a/Barotrauma/BarotraumaShared/Content/damageshader_opengl.xnb and b/Barotrauma/BarotraumaShared/Content/damageshader_opengl.xnb differ