From cb55039ec9f43d525fa47836aea9b56ad1ce7c7c Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 21 Oct 2023 23:50:16 +0100 Subject: [PATCH] Replace GlobalLightingPaletteEffect with a post-processing shader. --- .../Scripting/Global/LightingGlobal.cs | 22 ++-- .../GlobalLightingPaletteEffect.cs | 111 ------------------ .../PaletteEffects/TintPostProcessEffect.cs | 51 ++++++++ .../Rules/20230801/ReplacePaletteModifiers.cs | 4 +- glsl/postprocess_tint.frag | 30 +++++ mods/cnc/maps/desert-rats-cnc/rules.yaml | 2 +- mods/cnc/maps/gdi06/rules.yaml | 2 +- mods/ra/maps/a-nuclear-winter/rules.yaml | 2 +- mods/ra/maps/chernobyl/rules.yaml | 2 +- mods/ra/maps/desert-rats/rules.yaml | 2 +- mods/ra/maps/fort-lonestar/rules.yaml | 2 +- mods/ra/maps/infiltration/rules.yaml | 2 +- mods/ra/maps/ritual-circle.oramap | Bin 30981 -> 30977 bytes mods/ra/maps/shattered-mountain/rules.yaml | 2 +- mods/ra/maps/snow-town/rules.yaml | 2 +- 15 files changed, 103 insertions(+), 133 deletions(-) delete mode 100644 OpenRA.Mods.Common/Traits/PaletteEffects/GlobalLightingPaletteEffect.cs create mode 100644 OpenRA.Mods.Common/Traits/PaletteEffects/TintPostProcessEffect.cs create mode 100644 glsl/postprocess_tint.frag diff --git a/OpenRA.Mods.Common/Scripting/Global/LightingGlobal.cs b/OpenRA.Mods.Common/Scripting/Global/LightingGlobal.cs index 29dafb1916..d9bc2da36f 100644 --- a/OpenRA.Mods.Common/Scripting/Global/LightingGlobal.cs +++ b/OpenRA.Mods.Common/Scripting/Global/LightingGlobal.cs @@ -19,15 +19,13 @@ namespace OpenRA.Mods.Common.Scripting public class LightingGlobal : ScriptGlobal { readonly IEnumerable flashEffects; - readonly GlobalLightingPaletteEffect lighting; - readonly bool hasLighting; + readonly TintPostProcessEffect tintEffect; public LightingGlobal(ScriptContext context) : base(context) { flashEffects = context.World.WorldActor.TraitsImplementing(); - lighting = context.World.WorldActor.TraitOrDefault(); - hasLighting = lighting != null; + tintEffect = context.World.WorldActor.TraitOrDefault(); } [Desc("Controls the `" + nameof(FlashPostProcessEffect) + "` trait.")] @@ -40,26 +38,26 @@ namespace OpenRA.Mods.Common.Scripting public double Red { - get => hasLighting ? lighting.Red : 1d; - set { if (hasLighting) lighting.Red = (float)value; } + get => tintEffect?.Red ?? 1; + set { if (tintEffect != null) tintEffect.Red = (float)value; } } public double Green { - get => hasLighting ? lighting.Green : 1d; - set { if (hasLighting) lighting.Green = (float)value; } + get => tintEffect?.Green ?? 1; + set { if (tintEffect != null) tintEffect.Green = (float)value; } } public double Blue { - get => hasLighting ? lighting.Blue : 1d; - set { if (hasLighting) lighting.Blue = (float)value; } + get => tintEffect?.Blue ?? 1; + set { if (tintEffect != null) tintEffect.Blue = (float)value; } } public double Ambient { - get => hasLighting ? lighting.Ambient : 1d; - set { if (hasLighting) lighting.Ambient = (float)value; } + get => tintEffect?.Ambient ?? 1; + set { if (tintEffect != null) tintEffect.Ambient = (float)value; } } } } diff --git a/OpenRA.Mods.Common/Traits/PaletteEffects/GlobalLightingPaletteEffect.cs b/OpenRA.Mods.Common/Traits/PaletteEffects/GlobalLightingPaletteEffect.cs deleted file mode 100644 index fc9831d038..0000000000 --- a/OpenRA.Mods.Common/Traits/PaletteEffects/GlobalLightingPaletteEffect.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region Copyright & License Information -/* - * Copyright (c) The OpenRA Developers and Contributors - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; -using System.Linq; -using OpenRA.Graphics; -using OpenRA.Traits; - -namespace OpenRA.Mods.Common.Traits -{ - [Desc("Used for day/night effects.")] - [TraitLocation(SystemActors.World | SystemActors.EditorWorld)] - public class GlobalLightingPaletteEffectInfo : TraitInfo, ILobbyCustomRulesIgnore - { - [Desc("Do not modify graphics that use any palette in this list.")] - public readonly HashSet ExcludePalettes = new() { "cursor", "chrome", "colorpicker", "fog", "shroud", "alpha" }; - - [Desc("Do not modify graphics that start with these letters.")] - public readonly HashSet ExcludePalettePrefixes = new(); - - public readonly float Red = 1f; - public readonly float Green = 1f; - public readonly float Blue = 1f; - public readonly float Ambient = 1f; - - public override object Create(ActorInitializer init) { return new GlobalLightingPaletteEffect(this); } - } - - public class GlobalLightingPaletteEffect : IPaletteModifier - { - readonly GlobalLightingPaletteEffectInfo info; - - public float Red; - public float Green; - public float Blue; - public float Ambient; - - public GlobalLightingPaletteEffect(GlobalLightingPaletteEffectInfo info) - { - this.info = info; - - Red = info.Red; - Green = info.Green; - Blue = info.Blue; - Ambient = info.Ambient; - } - - public void AdjustPalette(IReadOnlyDictionary palettes) - { - // Calculate ambient color multipliers as integers for speed. To handle fractional ambiance, we'll increase - // the magnitude of the result by 8 bits. - var ar = (uint)((1 << 8) * Ambient * Red); - var ag = (uint)((1 << 8) * Ambient * Green); - var ab = (uint)((1 << 8) * Ambient * Blue); - - foreach (var kvp in palettes) - { - if (info.ExcludePalettes.Contains(kvp.Key)) - continue; - - if (info.ExcludePalettePrefixes.Any(kvp.Key.StartsWith)) - continue; - - var palette = kvp.Value; - - for (var x = 0; x < Palette.Size; x++) - { - /* Here is the reference code for the operation we are performing. - var from = palette.GetColor(x); - var r = (int)(from.R * Ambient * Red).Clamp(0, 255); - var g = (int)(from.G * Ambient * Green).Clamp(0, 255); - var b = (int)(from.B * Ambient * Blue).Clamp(0, 255); - palette.SetColor(x, Color.FromArgb(from.A, r, g, b)); - */ - - // PERF: Use integer arithmetic to avoid costly conversions to and from floating point values. - var from = palette[x]; - - // 1: Extract each color component and shift it to the lower bits, then multiply with ambiance. - // 2: Because the ambiance was increased by 8 bits, our result has been shifted 8 bits up. - // If the multiply overflowed we clamp the value, otherwise we mask out the fractional bits. - // 3: Finally, we shift the color component back to its correct place. We're already 8 bits higher - // than expected due to the multiply, so we don't have to shift as far to get back. - var r1 = ((from & 0x00FF0000) >> 16) * ar; - var r2 = r1 >= 0x0000FF00 ? 0x0000FF00 : r1 & 0x0000FF00; - var r3 = r2 << 8; - - var g1 = ((from & 0x0000FF00) >> 8) * ag; - var g2 = g1 >= 0x0000FF00 ? 0x0000FF00 : g1 & 0x0000FF00; - var g3 = g2 << 0; - - var b1 = ((from & 0x000000FF) >> 0) * ab; - var b2 = b1 >= 0x0000FF00 ? 0x0000FF00 : b1 & 0x0000FF00; - var b3 = b2 >> 8; - - // Combine all the adjusted components back together. - var a = from & 0xFF000000; - palette[x] = a | r3 | g3 | b3; - } - } - } - } -} diff --git a/OpenRA.Mods.Common/Traits/PaletteEffects/TintPostProcessEffect.cs b/OpenRA.Mods.Common/Traits/PaletteEffects/TintPostProcessEffect.cs new file mode 100644 index 0000000000..1b27d1f80d --- /dev/null +++ b/OpenRA.Mods.Common/Traits/PaletteEffects/TintPostProcessEffect.cs @@ -0,0 +1,51 @@ +#region Copyright & License Information +/* + * Copyright (c) The OpenRA Developers and Contributors + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. For more + * information, see COPYING. + */ +#endregion + +using OpenRA.Graphics; +using OpenRA.Traits; + +namespace OpenRA.Mods.Common.Traits +{ + [Desc("Used for day/night effects.")] + [TraitLocation(SystemActors.World | SystemActors.EditorWorld)] + public class TintPostProcessEffectInfo : TraitInfo, ILobbyCustomRulesIgnore + { + public readonly float Red = 1f; + public readonly float Green = 1f; + public readonly float Blue = 1f; + public readonly float Ambient = 1f; + + public override object Create(ActorInitializer init) { return new TintPostProcessEffect(this); } + } + + public class TintPostProcessEffect : RenderPostProcessPassBase + { + public float Red; + public float Green; + public float Blue; + public float Ambient; + + public TintPostProcessEffect(TintPostProcessEffectInfo info) + : base("tint", PostProcessPassType.AfterActors) + { + Red = info.Red; + Green = info.Green; + Blue = info.Blue; + Ambient = info.Ambient; + } + + protected override bool Enabled => true; + protected override void PrepareRender(WorldRenderer wr, IShader shader) + { + shader.SetVec("Tint", Ambient * Red, Ambient * Green, Ambient * Blue); + } + } +} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20230801/ReplacePaletteModifiers.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20230801/ReplacePaletteModifiers.cs index f23c878e79..fba6cc6b3d 100644 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20230801/ReplacePaletteModifiers.cs +++ b/OpenRA.Mods.Common/UpdateRules/Rules/20230801/ReplacePaletteModifiers.cs @@ -20,13 +20,15 @@ namespace OpenRA.Mods.Common.UpdateRules.Rules public override string Description => "MenuPaletteEffect is renamed to MenuPostProcessEffect\n" + "ChronoshiftPaletteEffect is renamed to ChronoshiftPostProcessEffect\n" + - "FlashPaletteEffect is renamed to FlashPostProcessEffect"; + "FlashPaletteEffect is renamed to FlashPostProcessEffect\n" + + "GlobalLightingPaletteEffect is renamed to TintPostProcessEffect"; public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNodeBuilder actorNode) { actorNode.RenameChildrenMatching("MenuPaletteEffect", "MenuPostProcessEffect"); actorNode.RenameChildrenMatching("ChronoshiftPaletteEffect", "ChronoshiftPostProcessEffect"); actorNode.RenameChildrenMatching("FlashPaletteEffect", "FlashPostProcessEffect"); + actorNode.RenameChildrenMatching("GlobalLightingPaletteEffect", "TintPostProcessEffect"); yield break; } diff --git a/glsl/postprocess_tint.frag b/glsl/postprocess_tint.frag new file mode 100644 index 0000000000..0bc0d96656 --- /dev/null +++ b/glsl/postprocess_tint.frag @@ -0,0 +1,30 @@ +#version {VERSION} +#ifdef GL_ES +precision mediump float; +#endif + +uniform vec3 Tint; +uniform sampler2D WorldTexture; + +#if __VERSION__ == 120 +uniform vec2 WorldTextureSize; +#else +out vec4 fragColor; +#endif + +void main() +{ +#if __VERSION__ == 120 + vec4 c = texture2D(WorldTexture, gl_FragCoord.xy / WorldTextureSize); +#else + vec4 c = texture(WorldTexture, gl_FragCoord.xy / textureSize(WorldTexture, 0)); +#endif + + c = vec4(min(c.r * Tint.r, 1.0), min(c.g * Tint.g, 1.0), min(c.b * Tint.b, 1.0), c.a); + + #if __VERSION__ == 120 + gl_FragColor = c; + #else + fragColor = c; + #endif +} diff --git a/mods/cnc/maps/desert-rats-cnc/rules.yaml b/mods/cnc/maps/desert-rats-cnc/rules.yaml index 90138dffcd..cc376d1fc2 100644 --- a/mods/cnc/maps/desert-rats-cnc/rules.yaml +++ b/mods/cnc/maps/desert-rats-cnc/rules.yaml @@ -1,5 +1,5 @@ World: - GlobalLightingPaletteEffect: + TintPostProcessEffect: Red: 1.1 Green: 0.95 Blue: 1.051 diff --git a/mods/cnc/maps/gdi06/rules.yaml b/mods/cnc/maps/gdi06/rules.yaml index 2ccae05d42..d4536b34a5 100644 --- a/mods/cnc/maps/gdi06/rules.yaml +++ b/mods/cnc/maps/gdi06/rules.yaml @@ -16,7 +16,7 @@ World: ParticleColors: 304074, 28386C, 202C60, 182C54 LineTailAlphaValue: 150 ParticleSize: 1, 1 - GlobalLightingPaletteEffect: + TintPostProcessEffect: Red: 0.75 Green: 0.85 Blue: 1.5 diff --git a/mods/ra/maps/a-nuclear-winter/rules.yaml b/mods/ra/maps/a-nuclear-winter/rules.yaml index 7eb2868642..2e2a22e74b 100644 --- a/mods/ra/maps/a-nuclear-winter/rules.yaml +++ b/mods/ra/maps/a-nuclear-winter/rules.yaml @@ -7,7 +7,7 @@ World: ScatterDirection: -1, 1 ParticleColors: ECECEC, E4E4E4, D0D0D0, BCBCBC LineTailAlphaValue: 0 - GlobalLightingPaletteEffect: + TintPostProcessEffect: Red: 0.88 Green: 0.93 Blue: 1.06 diff --git a/mods/ra/maps/chernobyl/rules.yaml b/mods/ra/maps/chernobyl/rules.yaml index f288694142..702d5c503d 100644 --- a/mods/ra/maps/chernobyl/rules.yaml +++ b/mods/ra/maps/chernobyl/rules.yaml @@ -1,5 +1,5 @@ World: - GlobalLightingPaletteEffect: + TintPostProcessEffect: Red: 1 Green: 0.90 Blue: 0.83 diff --git a/mods/ra/maps/desert-rats/rules.yaml b/mods/ra/maps/desert-rats/rules.yaml index 1e030c185e..777354a402 100644 --- a/mods/ra/maps/desert-rats/rules.yaml +++ b/mods/ra/maps/desert-rats/rules.yaml @@ -1,5 +1,5 @@ World: - GlobalLightingPaletteEffect: + TintPostProcessEffect: Red: 1.1 Green: 0.92 Blue: 1.051 diff --git a/mods/ra/maps/fort-lonestar/rules.yaml b/mods/ra/maps/fort-lonestar/rules.yaml index 304e04bc80..794fe6cc3d 100644 --- a/mods/ra/maps/fort-lonestar/rules.yaml +++ b/mods/ra/maps/fort-lonestar/rules.yaml @@ -17,7 +17,7 @@ World: ParticleColors: 304074, 28386C, 202C60, 182C54 LineTailAlphaValue: 150 ParticleSize: 1, 1 - GlobalLightingPaletteEffect: + TintPostProcessEffect: Red: 0.75 Green: 0.85 Blue: 1.5 diff --git a/mods/ra/maps/infiltration/rules.yaml b/mods/ra/maps/infiltration/rules.yaml index 3df3b68c6a..96cc63aba8 100644 --- a/mods/ra/maps/infiltration/rules.yaml +++ b/mods/ra/maps/infiltration/rules.yaml @@ -1,5 +1,5 @@ World: - GlobalLightingPaletteEffect@HAZE: + TintPostProcessEffect@HAZE: Red: 1 Green: 0.55 Blue: 0 diff --git a/mods/ra/maps/ritual-circle.oramap b/mods/ra/maps/ritual-circle.oramap index 9d7054e8dc7545f3668c9cb29a04bc6852cf61fa..3112cdd55efabcab7d123ce08d4d643bca7e3a68 100644 GIT binary patch delta 2355 zcmV-33C#9|@&SSJ0kEwOvuYRTV1EMy6aWAS2mn34Racg)pM{eM002EY000O8003=a za4vaaZEUSu+in|25`E@;1wUY5boIUY6i0FPCC(a(vHMKXV=osJ$KhoI@7HfN#qKI8 zL3pwd1c9Q&({(#lT~pn9zyA8;e0W@+R!g$Oa6kQe-X5mo`}xyqc~}p_$A9fd9qt){I3x5Ci-}c9U&W9bF z^YL(=>L=#?-Te5lKCSns{>vZNo6~mQua?vP%Wl2@^m`e1hiUqH6cJDF@%0w(_S56V zqW9#MuI`s-`BzQ*fo`n_gP>xpJh@A+;0;QFD4?|-FM_pH+VsFiBw z{NdvCVsU!S#qEp5?Q1UXUM%ijb8-J-asQf&hZl>7*IYclSUkSw;_1cW>Hk}Nc)K~x zmvq1UU{=d{yL)&_>FJitHSIHxQ7{~0dfB*tg zyaFNuC{6$g1Y~ywWPix5VJr<$ATN0V5Eg1b#?TN@taDHZ4)%Xs{Br;qc2sT%R}tYB zA}Im}Kt|9aVg>lyA_S2DM9@0r3b40CScND6A}F1#0UX6k*Z_svQB5z&4l$hyZ{Lm#5MY3DAj*7b~2BWPc=uAV`KP2eyDRI>K@E z9=FHijr8X3(6xX&2SRK|)BtV_-9|JPx&R``b#HMDKW{FZ*PlRKmKeH(Ajqn)yNu{{ zN!hMf!5}Q91;t;ek^uxY1c8X$Eb$gV6!uoj5$^ytmNJ$OfTGT6m>N$!6!ls`Tc-O6 zSP_kKRKfsaMSsTXVd`xKl7nnRmk_#JoFF%h`-o>XEt)Sg(}C2q@xek19~S zIhUH%g?}(We_FPfTRFiS!eI#RT$|YiiZumNc3`onT}DG>6hSRF3bt#G1%w=9 zQpXTT6AJw)*kDP>5Z@tKU;<-AH4pO3mktSFmUz=4SSoTuLr&x*m}fqAP)6y@Z0n!` zGskxjVMO4keC0bL*b%*e6FF49&K~lp?*szYSAS-9heX(KK}Kg-!EssBlproxdgeA{ z1Gmql6r`!pnQfuRSf>-)5~h}y(IL`-(KAad(u1*wds(wk2UbRrfHYvd8;ji$vb#?j zEfPMGT23}W8U-Z+i8qH%Is|f1z`04cJxd%kxNxy=$>gAb2d5AYR7-K!K_U12ED&TS z9e+U06yaS&z3lr|<`Sx#)K+Y8<&BKs2pe26WqLnG9&5<#D7&9Ww}0s}JX9nt`vBeW)Ek;IDbG{B~F0q0B?L!1_M+Es%8>QbabYNUmMgOQ*46fqnZU$M0ikpEOA1-oL}rGV1_RkhheP7cnlL|OiOk424I|# zBOj{MHv~g+ctv&ohRNxNc2p;Dm_7Z(fa(km^IM;7Q=P(L@lhCpFq{pdTf%t2Nq;9k zNEi<|7sS`eqjDssDWLWUcM`+{r_N_6K{Vi!s2~svIOCLJ5DC0G#-t2!z^n6E$^=T0 zXl4uABBaR<^q6ondoV5v0)^jstr!-4ozNMIzAf6x8I+468Iz)+CTU(%@N>L6T}r z0dqm=Mg~kdo88-F8NMO_D;BaKm{fJcdA>Ac0}g5>Lcn(jMrGU(N1W$P`9 ziE_Ktp~{KdJUSlk*J`W}=+w5~{IJmVwn~A{Q|NwM<(kOIAZf^mo1uYF9Q&Nx2Jk?T zx!GA02*r@;(F_(-O+z38h`2572i!J7chZeUAeYj;n($lf zCLYy03(9(|pqs1?Eo_9&1?XAt8xaE3L6~Ad!tTIl&CP^W0i!(!UCXQY;QOUgn;c|L z)KWZR4N)b*aDU!S^+?~Rp8oxjKk{+AKYf^wrw@mDGaZlbK7XDzr}~G*{q%`(Z)$;B zEdF+wCSJz8sZGUV@%`>R)pxlXw|M*bu$}5ZI?@{&{s)s!ctw-Scp8(gcnD8oX>L$U z0Rl4s6aWAS2mn34Racg)pM{eM002EY000O8000000000000000l5YS2ZDDXOd0}mA ZP)h{{000000{{a6pa1{>OLzbP007KpO3MHM delta 2336 zcmV+*3E%dC@&SeN0kEwOe=Wo=;g<*i07E(e00;m80BvD#E_q>XY^__{ZX-7meRh9^ zKA8$OcFSQ-DkQ-3|Y1g>vpPGU8Fy( zzI?ksJg(;Dg6uHdO~0Nthw1oX|7p26tcKy^X5LQA#ocB;t+tEXf6d{3I}O9z)BN-P zuw4AIdYq1L*8AN<{p5B!PQ1>)-~IIN?&C1<(m!qfU@%1*`Fj|?*`Icwj{J*}ze1_s z!|B~_>JiW))yLq>p9?uqiIBn;R8J}M1@@g-y?(*s{ zui^3DuhARxsHAR>U`1du>Lb{9Z~+#1Hx z00r`r7XV?QfA(Vx4FSbE2Zi8Z|K{S~1IVzWaznU^2-grv5ikHUf))`gz+V?3hy);l z)+twjy(YpcL;(;%>0}MyC^oxGupGVFlq-NNSz&DjT(jB=XRSj3Dvhj1RPw5J1VjSc zU>YC-05V*jN<$<-Co*2Fa0Zf*6oMcbsvOt?%IFBkf6;r~9FJGho4Z5T0`43Lu^mwZ zcyH)BqOs5g5J9eci(~lt{=9kp4a8-Mp-TvYtO~o!h+gNE?Rpgq!ctmL{Fy2lKu|*v zh{(+nZvjMMZ?zop4q#&`W9a}W>YRqD@x((>uNAaqx{rVr(I`hH3?NoytRAM`RvXFL(B6NK_fbIQ$e@dPQ(m_JhS1ABpFItelG2<%23ksbEc3aJ4lFTV#X4E zY&9`MY0g!&#Un?|yCb!n%~+)#soQ|{N=b}>BChtR0>ztisaahJ1N5h5i@B8(ydfNh zf8frwnO&e*Qy^sr7K_?tG(<)b)N-R>yXHte_AYgrEW_L)0{T5_&h7}x_e>F`B;)11TZbLS3`%FqfnhKrS7J7_zI4hnd13gJMt6n7mIa?j5KL1xkc)JzfHMbyi_Z)Gl_f4WI+ z#Rga2$Ow+G!4*@c_haO-hRlw#`+0QxmoCFYMbfgLsoU?dZG!8U&>0(GRdQ1A%*Y3L zkCg)BvAx2TQ8sgrbpS4DXG3L!byLnp%7ABnc2@_a3h-_uH9Qc8P#z0V6>v44J*NZ4 zf!b>Ja0ZM6lvUycs1ESPCuJ}|e`TO*Cc#8UXL?9Z*zk<%hAGV^Hb3*VLG3ZcCTKpY zSs+D(2ero%C&csl#cl#-_=0g5#%hemFj2;|RA+Ah#u+*Cp*np-FeHapROfG)oPKCW zbpnUk(@zYj&fqY=_1QMnDI69bg&_#T*&we`1;fYL9Ry zK|FBke1;N411^aQ0pE##tiBNg(1+_ zN;wPhAlH+(&@m3g1c5LO9susp=%`}?gdyIs6)3_W{_d!Rs;5Df3}234R=@AAM9Gh_ zCte*IqNvihh&nffP)xlj*9Zwm^?L;NeBlj2)wzxscE0q6!jxqmg)woJY2p8XDci6y zl2z1o;5pJ5MGAP7e>j%TTWl^!zTT(lz5^$NUR_qU-lCW&w@V$WoVd-S?4+NQ;oi%|_44EFyU@_G+1R_9= zs;R}sg2`zJG#Ji-i?C=GK`|PG-Nqs{>9!$*gEwiH&NIPlfA=DNRx@}Tk&BLJNGBS0 zsjeoC!axjQYx)4%M&yKu+tPl(Z6kCi-Dm`IDc!3Hzr}9iQN6REtj7wv$?DL;M(A9C zp7p*FAwV63DF!6$4t&F{_tU%cro*)wiY)x z-)v7)eV40=H*X);o2mZ0BfX*FPqUv6^IsgC&0000000000 z000000G|#30BvD#E_q>XY?FX^Dj{4K003=aa4uqLZcs}F1^@s600RI60H6Q>08e-T G0001HUp@{1 diff --git a/mods/ra/maps/shattered-mountain/rules.yaml b/mods/ra/maps/shattered-mountain/rules.yaml index fa53327a7f..f2f5e07787 100644 --- a/mods/ra/maps/shattered-mountain/rules.yaml +++ b/mods/ra/maps/shattered-mountain/rules.yaml @@ -7,7 +7,7 @@ World: ParticleDensityFactor: 8 ParticleColors: ECECEC, E4E4E4, D0D0D0, BCBCBC LineTailAlphaValue: 0 - GlobalLightingPaletteEffect: + TintPostProcessEffect: Red: 0.88 Green: 0.92 Blue: 1.06 diff --git a/mods/ra/maps/snow-town/rules.yaml b/mods/ra/maps/snow-town/rules.yaml index 0c568b5b2e..ce813387b1 100644 --- a/mods/ra/maps/snow-town/rules.yaml +++ b/mods/ra/maps/snow-town/rules.yaml @@ -5,7 +5,7 @@ World: UseSquares: true ParticleColors: ECECEC, E4E4E4, D0D0D0, BCBCBC LineTailAlphaValue: 0 - GlobalLightingPaletteEffect: + TintPostProcessEffect: Red: 0.9 Green: 0.9 Blue: 1.0