From dd651530b77aaf87c9f5f6f03657030dbd5d1655 Mon Sep 17 00:00:00 2001 From: Lyncon Baez Date: Sat, 27 Sep 2025 19:44:52 -0300 Subject: [PATCH 1/3] Initial idea --- MiasmaColors/ColorUtils.cs | 125 +++++++++++++++++++++++++++++ MiasmaColors/MiasmaColorsModule.cs | 105 +++++++++++++++--------- 2 files changed, 193 insertions(+), 37 deletions(-) create mode 100644 MiasmaColors/ColorUtils.cs diff --git a/MiasmaColors/ColorUtils.cs b/MiasmaColors/ColorUtils.cs new file mode 100644 index 0000000..e15b1fb --- /dev/null +++ b/MiasmaColors/ColorUtils.cs @@ -0,0 +1,125 @@ +using System; +using Microsoft.Xna.Framework; + +namespace MiasmaColors; + +public struct HSV +{ + public float H; + public float S; + public float V; + + public HSV(float h, float s, float v) + { + H = h; + S = s; + V = v; + } +} + +public static class ColorUtils +{ + public static HSV ColorToHSV(Color color) + { + // Normalize RGB to [0,1] + float r = color.R / 255f; + float g = color.G / 255f; + float b = color.B / 255f; + + float max = Math.Max(r, Math.Max(g, b)); + float min = Math.Min(r, Math.Min(g, b)); + float delta = max - min; + + float h = 0f; + + if (delta > 0f) + { + if (max == r) + { + h = 60f * (((g - b) / delta) % 6f); + } + else if (max == g) + { + h = 60f * (((b - r) / delta) + 2f); + } + else // max == b + { + h = 60f * (((r - g) / delta) + 4f); + } + } + + if (h < 0f) h += 360f; + + float s = (max == 0f) ? 0f : (delta / max); + float v = max; + + return new HSV(h, s, v); + } + + public static Color HSVToColor(HSV hsv, byte alpha = 255) + { + float h = hsv.H; + float s = hsv.S; + float v = hsv.V; + + float c = v * s; // Chroma + float x = c * (1 - Math.Abs((h / 60f) % 2 - 1)); + float m = v - c; + + float r1 = 0f, g1 = 0f, b1 = 0f; + + if (h < 60) + { + r1 = c; + g1 = x; + b1 = 0; + } + else if (h < 120) + { + r1 = x; + g1 = c; + b1 = 0; + } + else if (h < 180) + { + r1 = 0; + g1 = c; + b1 = x; + } + else if (h < 240) + { + r1 = 0; + g1 = x; + b1 = c; + } + else if (h < 300) + { + r1 = x; + g1 = 0; + b1 = c; + } + else + { + r1 = c; + g1 = 0; + b1 = x; + } + + byte r = (byte)((r1 + m) * 255f); + byte g = (byte)((g1 + m) * 255f); + byte b = (byte)((b1 + m) * 255f); + + return new Color(r, g, b, alpha); + } + + public static void HueShift(ref HSV hsv, float amount) + { + hsv.H += amount; + + // Wrap around 0-360 + if (hsv.H < 0f) + hsv.H += 360f; + else if (hsv.H >= 360f) + hsv.H -= 360f; + } +} \ No newline at end of file diff --git a/MiasmaColors/MiasmaColorsModule.cs b/MiasmaColors/MiasmaColorsModule.cs index fe9ed3e..3bdd39c 100644 --- a/MiasmaColors/MiasmaColorsModule.cs +++ b/MiasmaColors/MiasmaColorsModule.cs @@ -1,66 +1,97 @@ using System; using System.Collections.Generic; +using System.Reflection; using FortRise; +using HarmonyLib; +using Microsoft.Extensions.Logging; using Microsoft.Xna.Framework; using Monocle; using TowerFall; namespace MiasmaColors; -public class MiasmaColorsModule : FortModule +public class MiasmaColorsModule : Mod { - public override void Load() - { - On.TowerFall.FloorMiasma.ctor += ApplyLightColorToMiasma; - } + public static MiasmaColorsModule Instance = null!; + + private static FieldInfo colorField; + private static FieldInfo lightField; - public override void Unload() + static MiasmaColorsModule() { - On.TowerFall.FloorMiasma.ctor -= ApplyLightColorToMiasma; + colorField = typeof(Miasma).GetField("Color", BindingFlags.NonPublic | BindingFlags.Static); + lightField = typeof(Miasma).GetField("Light", BindingFlags.NonPublic | BindingFlags.Static); } - private void ApplyLightColorToMiasma(On.TowerFall.FloorMiasma.orig_ctor orig, FloorMiasma self, Vector2 position, int width, int group) + public MiasmaColorsModule(IModContent content, IModuleContext context, ILogger logger) : base(content, context, logger) { - orig(self, position, width, group); - self.Add(new MiasmaColorComponent()); + Instance = this; + + OnLoad = HandleGameLoad; } -} -public class MiasmaColorComponent : Component -{ - public MiasmaColorComponent() : base(false, false) + private void HandleGameLoad(IModuleContext context) { + context.Events.OnLevelLoaded += HandleLevelLoaded; + context.Harmony.Patch(AccessTools.Method(typeof(LevelSystem), nameof(LevelSystem.Dispose)), postfix: new HarmonyMethod(DisposePostfix)); } - public override void EntityAdded() + private void HandleLevelLoaded(object sender, RoundLogic logic) { - base.EntityAdded(); + if (logic.CanMiasma) + { + var levelTag = ReadLevelTag(logic.Session.CurrentLevel.SceneTags); + if (string.IsNullOrEmpty(levelTag)) + return; - var levelTag = ReadLevelTag(Scene.SceneTags); - if (string.IsNullOrEmpty(levelTag)) - return; + float shiftAmount = GetHueShiftForLevel(levelTag); - (Entity as LevelEntity).LightColor = (levelTag switch - { - "Sacred Ground" => Calc.HexToColor("ffd29e"), - "Twilight Spire" => Calc.HexToColor("e39eff"), - "Backfire" => Calc.HexToColor("9ecdff"), - "Flight" => Calc.HexToColor("ff9620"), - "Mirage" => Calc.HexToColor("ffff60"), - "Thornwood" => Calc.HexToColor("72ff66"), - "Frostfang Keep" => Calc.HexToColor("26fff5"), - "King's Court" => Calc.HexToColor("ff0000"), - "Sunken City" => Calc.HexToColor("50ffb1"), - "Moonstone" => Calc.HexToColor("7275dd"), - "Towerforge" => Calc.HexToColor("FF2000"), - "Ascension" => Calc.HexToColor("f8ffff"), - "Gauntlet" => Calc.HexToColor("616a9e"), - "Gauntlet II" => Calc.HexToColor("fbfcfc"), - _ => Calc.HexToColor("9ED1FF") - }).Invert(); + Subtexture miasmaTexture = TFGame.Atlas["miasma/surface"]; + Color[] surfaceColors = new Color[miasmaTexture.Width * miasmaTexture.Height]; + miasmaTexture.Texture2D.GetData(0, miasmaTexture.Rect, surfaceColors, 0, surfaceColors.Length); + for (int i = 0; i < surfaceColors.Length; i++) + { + if (surfaceColors[i].A == 0) + continue; + + HSV hsvColor = ColorUtils.ColorToHSV(surfaceColors[i]); + ColorUtils.HueShift(ref hsvColor, shiftAmount); + surfaceColors[i] = ColorUtils.HSVToColor(hsvColor, surfaceColors[i].A); + } + miasmaTexture.Texture2D.SetData(0, miasmaTexture.Rect, surfaceColors, 0, surfaceColors.Length); + + colorField.SetValue(null,surfaceColors[0]); + // lightField.SetValue(null, color.Invert()); + } } + private static void DisposePostfix(LevelSystem __instance) + { + Instance.Logger.Log(LogLevel.Warning, "Disssposseeee"); + } + private float GetHueShiftForLevel(string levelTag) + { + return levelTag switch + { + "SacredGround" => 132.8f, + "TwilightSpire" => 27.4f, + "Backfire" => -81.2f, + "Flight" => 113f, + "Mirage" => 143.8f, + "Thornwood" => -128.4f, + "FrostfangKeep" => -96.6f, + "KingsCourt" => 80f, + "SunkenCity" => -125f, + "Moonstone" => -62f, + "TowerForge" => -92f, + "Ascension" => -95.5f, + "GauntletA" => -63.7f, + "GauntletB" => -95.5f, + _ => 0 + }; + } + private static string ReadLevelTag(List tag) { for (int i = 0; i < tag.Count; i++) From 550fe1c86d35b8ed0c33a9a6ea076d47e4930156 Mon Sep 17 00:00:00 2001 From: Lyncon Baez Date: Mon, 29 Sep 2025 23:53:50 -0300 Subject: [PATCH 2/3] Optimizations and enhancements --- ExampleNewMod/ExampleNewMod.csproj | 2 +- MiasmaColors/ColorUtils.cs | 7 +++ MiasmaColors/MiasmaColorsModule.cs | 93 ++++++++++++++++++------------ MiasmaColors/SubTextureModifier.cs | 44 ++++++++++++++ MiasmaColors/meta.json | 2 +- 5 files changed, 109 insertions(+), 39 deletions(-) create mode 100644 MiasmaColors/SubTextureModifier.cs diff --git a/ExampleNewMod/ExampleNewMod.csproj b/ExampleNewMod/ExampleNewMod.csproj index bf99f10..55dc13e 100644 --- a/ExampleNewMod/ExampleNewMod.csproj +++ b/ExampleNewMod/ExampleNewMod.csproj @@ -17,7 +17,7 @@ - + diff --git a/MiasmaColors/ColorUtils.cs b/MiasmaColors/ColorUtils.cs index e15b1fb..a534d8b 100644 --- a/MiasmaColors/ColorUtils.cs +++ b/MiasmaColors/ColorUtils.cs @@ -122,4 +122,11 @@ public static void HueShift(ref HSV hsv, float amount) else if (hsv.H >= 360f) hsv.H -= 360f; } + + public static Color HueShift(Color color, float amount) + { + HSV hsv = ColorToHSV(color); + HueShift(ref hsv, amount); + return HSVToColor(hsv, color.A); + } } \ No newline at end of file diff --git a/MiasmaColors/MiasmaColorsModule.cs b/MiasmaColors/MiasmaColorsModule.cs index 3bdd39c..9312a5a 100644 --- a/MiasmaColors/MiasmaColorsModule.cs +++ b/MiasmaColors/MiasmaColorsModule.cs @@ -5,7 +5,7 @@ using HarmonyLib; using Microsoft.Extensions.Logging; using Microsoft.Xna.Framework; -using Monocle; +using MonoMod.Utils; using TowerFall; namespace MiasmaColors; @@ -13,61 +13,76 @@ namespace MiasmaColors; public class MiasmaColorsModule : Mod { public static MiasmaColorsModule Instance = null!; - - private static FieldInfo colorField; - private static FieldInfo lightField; - static MiasmaColorsModule() - { - colorField = typeof(Miasma).GetField("Color", BindingFlags.NonPublic | BindingFlags.Static); - lightField = typeof(Miasma).GetField("Light", BindingFlags.NonPublic | BindingFlags.Static); - } + private DynamicData miasmaData; + private DynamicData bottomMiasmaData; + private Color originalColor; + private Color originalLightColor; + + private SubTextureModifier surfaceModifier; + private SubTextureModifier tentaclesModifier; + private SubTextureModifier tentaclesHModifier; + private SubTextureModifier floorModfier; + + private bool colorsUpdated = false; public MiasmaColorsModule(IModContent content, IModuleContext context, ILogger logger) : base(content, context, logger) { Instance = this; + + miasmaData = new DynamicData(typeof(Miasma)); + bottomMiasmaData = new DynamicData(typeof(BottomMiasma)); - OnLoad = HandleGameLoad; + originalColor = miasmaData.Get("Color"); + originalLightColor = miasmaData.Get("Light"); + + OnInitialize = HandleInitialize; } - private void HandleGameLoad(IModuleContext context) + private void HandleInitialize(IModuleContext context) { + floorModfier = new SubTextureModifier("quest/floorMiasma"); + surfaceModifier = new SubTextureModifier("miasma/surface"); + tentaclesModifier = new SubTextureModifier("miasma/tentacles"); + tentaclesHModifier = new SubTextureModifier("miasma/tentaclesH"); + context.Events.OnLevelLoaded += HandleLevelLoaded; - context.Harmony.Patch(AccessTools.Method(typeof(LevelSystem), nameof(LevelSystem.Dispose)), postfix: new HarmonyMethod(DisposePostfix)); + context.Harmony.Patch(AccessTools.Method(typeof(LevelSystem), nameof(LevelSystem.Dispose)), postfix: new HarmonyMethod(LevelSystemDisposePostfix)); } private void HandleLevelLoaded(object sender, RoundLogic logic) { - if (logic.CanMiasma) - { - var levelTag = ReadLevelTag(logic.Session.CurrentLevel.SceneTags); - if (string.IsNullOrEmpty(levelTag)) - return; - - float shiftAmount = GetHueShiftForLevel(levelTag); + if (!logic.CanMiasma || colorsUpdated) + return; + + var levelTag = ReadLevelTag(logic.Session.CurrentLevel.SceneTags); + if (string.IsNullOrEmpty(levelTag)) + return; - Subtexture miasmaTexture = TFGame.Atlas["miasma/surface"]; - Color[] surfaceColors = new Color[miasmaTexture.Width * miasmaTexture.Height]; - miasmaTexture.Texture2D.GetData(0, miasmaTexture.Rect, surfaceColors, 0, surfaceColors.Length); - for (int i = 0; i < surfaceColors.Length; i++) - { - if (surfaceColors[i].A == 0) - continue; + float shiftAmount = GetHueShiftForLevel(levelTag); + + surfaceModifier.ApplyHueShift(shiftAmount); + tentaclesModifier.ApplyHueShift(shiftAmount); + floorModfier.ApplyHueShift(shiftAmount); - HSV hsvColor = ColorUtils.ColorToHSV(surfaceColors[i]); - ColorUtils.HueShift(ref hsvColor, shiftAmount); - surfaceColors[i] = ColorUtils.HSVToColor(hsvColor, surfaceColors[i].A); - } - miasmaTexture.Texture2D.SetData(0, miasmaTexture.Rect, surfaceColors, 0, surfaceColors.Length); + Color newColor = ColorUtils.HueShift(originalColor, shiftAmount); + miasmaData.Set("Color", newColor); + bottomMiasmaData.Set("Color", newColor); - colorField.SetValue(null,surfaceColors[0]); - // lightField.SetValue(null, color.Invert()); - } + Color newLightColor = ColorUtils.HueShift(originalLightColor, shiftAmount); + miasmaData.Set("Light", newLightColor); + bottomMiasmaData.Set("Light", newLightColor); } - private static void DisposePostfix(LevelSystem __instance) + private static void LevelSystemDisposePostfix(LevelSystem __instance) { - Instance.Logger.Log(LogLevel.Warning, "Disssposseeee"); + if (!Instance.colorsUpdated) + return; + + Instance.surfaceModifier.Reset(); + Instance.floorModfier.Reset(); + Instance.tentaclesModifier.Reset(); + Instance.tentaclesHModifier.Reset(); } private float GetHueShiftForLevel(string levelTag) @@ -84,10 +99,14 @@ private float GetHueShiftForLevel(string levelTag) "KingsCourt" => 80f, "SunkenCity" => -125f, "Moonstone" => -62f, - "TowerForge" => -92f, + "TowerForge" => 69.1f, "Ascension" => -95.5f, "GauntletA" => -63.7f, "GauntletB" => -95.5f, + "TheAmaranth" => -152.6f, + "Dreadwood" => -180f, + "Darkfang" => -92.2f, + "Cataclysm" => 40.6f, _ => 0 }; } diff --git a/MiasmaColors/SubTextureModifier.cs b/MiasmaColors/SubTextureModifier.cs new file mode 100644 index 0000000..9c4041a --- /dev/null +++ b/MiasmaColors/SubTextureModifier.cs @@ -0,0 +1,44 @@ +using Microsoft.Xna.Framework; +using Monocle; +using TowerFall; + +namespace MiasmaColors; + +public class SubTextureModifier +{ + private string subtextureName; + + private Color[] originalColors; + private Subtexture texture; + + public SubTextureModifier(string subtextureName) + { + this.subtextureName = subtextureName; + texture = TFGame.Atlas[subtextureName]; + originalColors = new Color[texture.Width * texture.Height]; + TFGame.Atlas.Texture2D.GetData(0, texture.Rect, originalColors, 0, originalColors.Length); + } + + public void ApplyHueShift(float angle) + { + Color[] newColors = new Color[originalColors.Length]; + for (int i = 0; i < newColors.Length; i++) + { + if (originalColors[i].A == 0) + { + newColors[i] = originalColors[i]; + continue; + } + + HSV hsvColor = ColorUtils.ColorToHSV(originalColors[i]); + ColorUtils.HueShift(ref hsvColor, angle); + newColors[i] = ColorUtils.HSVToColor(hsvColor, originalColors[i].A); + } + TFGame.Atlas.Texture2D.SetData(0, texture.Rect, newColors, 0, newColors.Length); + } + + public void Reset() + { + TFGame.Atlas.Texture2D.SetData(0, texture.Rect, originalColors, 0, originalColors.Length); + } +} \ No newline at end of file diff --git a/MiasmaColors/meta.json b/MiasmaColors/meta.json index 26344d4..69ad46f 100644 --- a/MiasmaColors/meta.json +++ b/MiasmaColors/meta.json @@ -1,7 +1,7 @@ { "name": "Teuria.MiasmaColors", "version": "2.0.0", - "author": "Terria", + "author": "Terria, Lync", "description": "A mod that changes miasma colors in different level with different colors.", "dll": "MiasmaColors.dll", "dependencies": [ From 391c998644ec879d5e582bc97072bba5ef33b22d Mon Sep 17 00:00:00 2001 From: Lyncon Baez Date: Tue, 30 Sep 2025 00:13:11 -0300 Subject: [PATCH 3/3] Removing content folder --- .../atlas/quest/(floorMiasma)--Ascension.png | Bin 475 -> 0 bytes .../atlas/quest/(floorMiasma)--Ascension.tag | 1 - .../Atlas/atlas/quest/(floorMiasma)--Backfire.png | Bin 568 -> 0 bytes .../Atlas/atlas/quest/(floorMiasma)--Backfire.tag | 1 - .../Atlas/atlas/quest/(floorMiasma)--Flight.png | Bin 580 -> 0 bytes .../Atlas/atlas/quest/(floorMiasma)--Flight.tag | 1 - .../atlas/quest/(floorMiasma)--Frostfang Keep.png | Bin 593 -> 0 bytes .../atlas/quest/(floorMiasma)--Frostfang Keep.tag | 1 - .../atlas/quest/(floorMiasma)--Gauntlet II.png | Bin 594 -> 0 bytes .../atlas/quest/(floorMiasma)--Gauntlet II.tag | 1 - .../Atlas/atlas/quest/(floorMiasma)--Gauntlet.png | Bin 594 -> 0 bytes .../Atlas/atlas/quest/(floorMiasma)--Gauntlet.tag | 1 - .../atlas/quest/(floorMiasma)--King's Court.png | Bin 478 -> 0 bytes .../atlas/quest/(floorMiasma)--King's Court.tag | 1 - .../Atlas/atlas/quest/(floorMiasma)--Mirage.png | Bin 577 -> 0 bytes .../Atlas/atlas/quest/(floorMiasma)--Mirage.tag | 1 - .../atlas/quest/(floorMiasma)--Moonstone.png | Bin 606 -> 0 bytes .../atlas/quest/(floorMiasma)--Moonstone.tag | 1 - .../atlas/quest/(floorMiasma)--Sacred Ground.png | Bin 573 -> 0 bytes .../atlas/quest/(floorMiasma)--Sacred Ground.tag | 1 - .../atlas/quest/(floorMiasma)--Sunken City.png | Bin 595 -> 0 bytes .../atlas/quest/(floorMiasma)--Sunken City.tag | 1 - .../atlas/quest/(floorMiasma)--Thornwood.png | Bin 577 -> 0 bytes .../atlas/quest/(floorMiasma)--Thornwood.tag | 1 - .../atlas/quest/(floorMiasma)--Towerforge.png | Bin 571 -> 0 bytes .../atlas/quest/(floorMiasma)--Towerforge.tag | 1 - .../atlas/quest/(floorMiasma)--Twilight Spire.png | Bin 572 -> 0 bytes .../atlas/quest/(floorMiasma)--Twilight Spire.tag | 1 - 28 files changed, 14 deletions(-) delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Ascension.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Ascension.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Backfire.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Backfire.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Flight.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Flight.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Frostfang Keep.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Frostfang Keep.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Gauntlet II.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Gauntlet II.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Gauntlet.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Gauntlet.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--King's Court.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--King's Court.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Mirage.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Mirage.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Moonstone.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Moonstone.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sacred Ground.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sacred Ground.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sunken City.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sunken City.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Thornwood.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Thornwood.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Towerforge.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Towerforge.tag delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Twilight Spire.png delete mode 100644 MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Twilight Spire.tag diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Ascension.png b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Ascension.png deleted file mode 100644 index 1f8b63c00a57441148de550e732e406e9b34f0e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmV<10VMv3P)Px$l}SWFR9J=WS7FYBAPg;B%N=HhYiYt^*q!{>@5ca3fr8t&=@MRIrt53_s7ft> z1cNBrTby94ap?aQj;=bE9C*T3;#H}ly#&rJ#-@oSfs!bL2(IGaia|L(hAuj-O2rk? z#B+zpRVlbNDkq5#c@jA0Km$0TGDoW>@q*1ETHHB03jzRf1=6!tTxmrd;n}Ieo69yG zortJNWC9XiEqGxub^-v0XcvI{1Hdkf$9(P&pT{8Tj2Hy?TU!*xctM<92*;(*lbw8G z*nhJ;z^XWV!iN67`}-fR={e`cXT{|_dhmGEPvS-X<_#MW)H=BMBfJt{ikFo6_fXrg zFM&&o1L$i>U&jSSJv)i?lAQbk?VW`8Twwp51f3sxXD1+Bn8`_=Pt^h|Xp;k~I&8c9oh=~{A(UBu)wLp}M{P)Px$@<~KNR9J=WSUZk`Kn#7L+#=^dN;Q;F?kVO1)Ks|zMb1G=QbmgP7&*sm!5EC0 z4;yU)EAbivezxCO%oqm+a*zpQiMuj!+Fg)bXKbE0Brqf@ zZw+eW_K(Hj92+BbI(20-tcWL8MOZfEtE(Eoy3aqI7bzL zDxfm}w=2+SJQAlX#-oj5c{;O+FUJ}Fg}Y{b`@jlp<41{axJzRgg<`*SMJhx>CX%ID+ax%lyTwTYiin}qMc z-UK!+4p`QbK8_8F>N`njldQaf#!f;)=t~0P*-A)f$*FCHI>`qy>m(e!t27@LMmSu) z`X8?L#;Ule4Wq2jG(CPrZHr2`Y zxa7$3-FpSn6h}ij4MDXrL)+u6&J|eN&HsmuA`XS6_d%17Su7J{M>Yk-*@MZ9XnRQ21n2xuiyvu!iu*yWb$VK0000Px${z*hZR9J=WS37cpFc5uWJSkn}0CJPmzJO=k`Y1jD*GR)rXqn*x8Oo$F2XMs& zltNmu68bov#E=QEu|aQl-wL$L0tu-8s8Z`W4z0yF{CPuFnkc|-MKDl!#@f3%kAF;XNi{fjk zK)zG%E5~y<^+m^P2jH}Wkc}vOCtOtOT}uT^^4cLxBw-#3Ys5tn(HFpYG3UX@*A7sX zR46;(um#F4eS!~L(Cbu8h$OU5Cd3QzbN=i$|24!4 z_9C!oalmaY>ET$SDBX(_hh**pWIG87p)Uyl&b`?LPJ)}ZmFgsq#0K@n6viunK<~9{ z^I+OZfM7)zAD=gW9X|}~Ov3OT?p-s9WBXgBDYt8>VJPS4N04(ochO!h{GD-5*CJXS z?wjiT_IOLliCxFAQTiqU*{@X-MASV$!k(sgbv>Q369h}LIB}78~q$c9$e$Q5{Sn)5h#1VAGJ@^8&@JQg+ SX$#>10000Px%3rR#lR9J=WSFvuwKn#5sF;R)3;se6cAzN0qd`JEu;&Twc!&Fw3g`rFM0H#P~ zb%(=^F_*iPwj@>a7U1rk{cP@R8So%0h-WoKQnmRO)+1d5yELF#Cy)T zcrJd>9!K)$&{nVqfkBG{y0xT-V~C<6!2d}4en18Qo?nS(d)xm2TbGV2V^|#b#XbZ^ z`fugp>gyzr#7!rW&|Reu+;kGaUD4mnQ!jt97voGK@TEt1&rBjYzgC(;S@R7;Av-^U zkm0_I_HdyyBQx1|*1k2>vG^|cQ}1=Xr<1H8Dlanv4>{cGct(*OhKF-$M7Ba%Vx)*N z2jYb2xU%bA%1Txcbsn0s!j6q4tRv=LO?8){XmMx)TpXGJ^f=2xbx=3r`@Ux*MvVBE f7~%*z;vReer!g0&%Tp9R00000NkvXXu0mjf4d4_X diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Frostfang Keep.tag b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Frostfang Keep.tag deleted file mode 100644 index 9f91fef..0000000 --- a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Frostfang Keep.tag +++ /dev/null @@ -1 +0,0 @@ -level=Frostfang Keep diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Gauntlet II.png b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Gauntlet II.png deleted file mode 100644 index 1e88664979244ce87f472f846a2b6a2cd7a871a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmV-Y0Px%3`s;mR9J=WSHX>gFc2J2N^l3%kT(TT1o8t4$TJ1xnF8QJ6%@cHJmuB0$K# zK(;8=n&TN9Cgbre1qP`R+alCdXsv~Ug?Kzm-9+Yo7VAmGlqOmRD9Jf zajwKcl{#dy+tN)=CQ15wkZq$hL_0CkrsC1D4PPx%3`s;mR9J=WS22!*Fc2K9G&KAnA4r>uXYc@U7a{SMG<3jYk~S~MFKANaBwyiM zve_6za(98#F%k;c zRR<(_?A^gtbpS0VC5dDp-Pv}RDaj*qNq(CFTI9sj+L|K+oJalqmtI`8A+X)7J0n`h z-7~+JJSn!_tUFN(%JrlP$>SOnTk9COUOx<7$J5#H=f3NBI(J;(7#GjQ_vzhD^PfZC zfjtY%+8i)0CA}SUG^GIlCYgEz1psh7olR985M69z8v;$41!Ru$;uHpz{H%1i`ZCEo z@sLS4cqW+)Po3ypYH?fF8^44=uVXYE^6 z9ho1qK4st7b-F6j+9Y2E4HY>ybJV8AeX&Er@<`wrh#xWBM3Tp7!`d{ZZ69;26lrZ% zlPx$m`OxIR9J=WS5a=mFbE~N5SN;?Gg-=w^0gCrA2umqz)q(%u9_!Ram@psaS{iB z02v@h_8y099*56+oYix*9CX57;ss#w#A|4-8Jj1L1V*BYFPi?n7@R{fR?BGtSZGDE zTG$m?e1F2qMdB%sGGNw3ZL=zKwrUaYVZ)r$esESDqyU@1c2d;SjyT3ko5MukRur>J zrM-^vSTW7(iXObWYP}flC$DlRgq`JG+byH&)oo83=t?y_T6x+T2j%^gHh}N1GNx;j zM^_kYpq%CE=szE8p00?taSo4XR?6VjA7l<9^`OO{;aU73o-Fgb!Fyp(fvLp-j2%fY z$Bd%tS?oU~S3f}Is7qUO=9cke?lOUGaukBCljNlsJt3|Wc;<~h8%Do=d$y6UYmYN+ zPZFXhuRUvkMj UT$J>32LJ#707*qoM6N<$f^gB)&Hw-a diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--King's Court.tag b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--King's Court.tag deleted file mode 100644 index 3fd2f0b..0000000 --- a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--King's Court.tag +++ /dev/null @@ -1 +0,0 @@ -level=King's Court diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Mirage.png b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Mirage.png deleted file mode 100644 index 5eaadf609ffae342d7b47777a16fe00cbb3ab4d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)Px$`$ z%fK;#F;PS%QI~t|Q$8ezePli(rE0}18tvBgk`$>_t<>vBbmwB?ISxZVVspb4CFf#+ zT&L1kiZ|k1FFIb+1N#G%s#WGXk)mSnS}a(U*YtiO3v-ZJBPoiBt^mOcIrl!krU!L7 zp=yC*2UKnR1Q$E->y%B1EVRohBx=Ir1y$|9;e*1qO|Jv90Kv2K^4Ba}QI``=Ti|%p zhD{HgU-UIFjEfycJQ-Blh~SnZ{V_kqGf?#YHf-aJ`tscmoPg?d7?d zu)%4oM^XrnIisIn0DR6MFM+iu5%>=Gp`K)9`&+3gwQI3vDCOrzka9eC(q1myof)03 zMU*-`*44S?@t%|ux(*7oU7YEnxCx>zC)=%wQs;H-%)9?k5S4_g9o6=G(h5;Y(^BV_ zH#6oSHju2@wi7dL<^C{m_6LkQJFy@ZD)XjS{M_%^iWMvVC6?HNu6P7rVR&z|bUN!> P00000NkvXXu0mjf4ZZ-P diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Mirage.tag b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Mirage.tag deleted file mode 100644 index 37fc63c..0000000 --- a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Mirage.tag +++ /dev/null @@ -1 +0,0 @@ -level=Mirage diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Moonstone.png b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Moonstone.png deleted file mode 100644 index e805736d582ce453faa324a8cc170ab31fc33bd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmV-k0-^nhP)Px%7)eAyR9J=WS38cvFc5u?(op6A+aNj6gmk&WN_zt&PO;KT9D$o~9-s-bmL>;C zN$D-Zgo*KoWk1Pk^O}(O`OWjl_Ar14v!}K8jfXfi=Hl@0E>7f{Xq#XL3->-g=a5EZn{=!;f>y)>izE-4JXRY~?w8)o`OH%sLIeQx z!8FCke1S|+t`*{Oj!1HdB!`q4biKo|+K9*$;ii0h%@@qalQOgN$e4+UCUH|lG!1Z` zOWd{?DKpF$Tb&jwD0M(uth^^!sRL*`MJAC9%okhjGG+3}Tw1JJ4sCMcNtr>ZLu-KZ zXq-Q3;ju_^$ms+?2BjJTy#wfuvEOD;Ih{bA&JanCdC~->%+eU~nf6Mm@Exhv?HW8>NQK|MPa}~ z$F8PO)_l!SNatG+67Kub9xlwx@J#ldwJ&vbW_i5l%5lBB5K|YY6fi^6~z1(D>s+%JVq!?mcpnw}!5F;GJE$zbvS_ sF4kPsjrqR!*@zJ%{w0Rkf{u6uAL*2bc$6V)T>t<807*qoM6N<$g4Kr^`2YX_ diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Moonstone.tag b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Moonstone.tag deleted file mode 100644 index 96cc5ee..0000000 --- a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Moonstone.tag +++ /dev/null @@ -1 +0,0 @@ -level=Moonstone diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sacred Ground.png b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sacred Ground.png deleted file mode 100644 index 700fcae386db83ded0a628eccad04b5faba292e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmV-D0>b@?P)Px$_en%SR9J=WSiy0FFc4fZez}Ge!879q;E_61M206r5qh`|+<~7=YH$tyDi1g~ z&eF+o5<@2J2axveRzlqQ3@B(Tcx^t#p}81`kHFqN0vAdiGeWMniGH4twEFkZ}g@b%>uzJV_e7U&#`gVn#_ z&Vi0oCW$1#H^X>9)D4dobeML44*6)C_u@zZ=Z*9HIxO7y1|Dxm;BxK_a|^t@_Rqj{ z-#N^9JSewe!AB1FNBk6Tfbk#4X?ri{o|J+VAF~PZLj07!ahv}dVhMW{ShYCdzLNBG ztWi`3=pV__AJAAyNC^Fs05BU{OrQ)-WlO6h&&00SV@!-iEV}~$#N3mx!`rdHPa}~*HTkz*R*CR<>yC`a=diXUN7X%@SR+G*S^)&$?|wl%85Nk z1yUDBT@*Dzz8M-GQR+gD<-GidqOJOljxXq*w9;1ax20}Y-ln;>a-O<2-?*_(`^HUO z9RPF=r|WbyPFJ>o+yZd3H&oUzJZ}cYFMZB7Y}oKGvBnm3!z1_vf>EMGgcDki00000 LNkvXXu0mjf*LDTS diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sacred Ground.tag b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sacred Ground.tag deleted file mode 100644 index 9fa4417..0000000 --- a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sacred Ground.tag +++ /dev/null @@ -1 +0,0 @@ -level=Sacred Ground diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sunken City.png b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sunken City.png deleted file mode 100644 index 5ce9a67adffcccbdc89ae9adec7af09483823309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 zcmV-Z0<8UsP)Px%4M{{nR9J=WS231?FcAIW*>D5vbTqz5$t8Ag;d{_{6dMa}v3m(yeKvHdy@6%6 zfWaYz#C2D}_xP1EKQn)ZB*Oqc>^H`14{^vg#Np2eIMLuj*8)3WC~#2-5b7 z`vm$#?KcL;t$TgQ2j?_CBIlx_6m3R4a2AI}7Nx*?=dYYkJjH2H3#13OC~orwvYd8& zg?OBk#XuHAssuP(fua;q&j}ah+iSjH9-dT*n@7SdMC~FbswG+iI=mt0j%1`tfaBK4 zJcT}0ka_Ao!TMBzwo}w2l7QpZ42rUNBu?h(jY9{e;YpR$fk^=8;a1sB6|)!%WHDA) z0t(QmAXU=-2hg$c-*(UymN?^5C({I_%94%vQYEzy#^XM?NbzaD+X|j>sYL{E#--zM zXpM{K;)nfFCU1wK3wsinv^e0tmh^H=P*mMXe1~M@10(=In$qY~Rrf!jzL(ZJ(TZ#O z;ur#>-fN|{h`fcr-O5+9?yVn61YgyC0*@R6B>bDnlJg{tNo zhC+V+1tG_8`_=Pw*p=ax9Jy+Lo9amXJ^RzP-MLQ}G{tFD?Jy)&0?k@or^C>2&cRzD zzhamOnWxa%)?mF8P9FnF-9I$#H-@G*oiXujs)K4Kw!;;j4-G!q@q|dIom5Z!d^%^$ hm@xt-ID*c21V5`*it9jVpceoD002ovPDHLkV1hDF6L0_k diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sunken City.tag b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sunken City.tag deleted file mode 100644 index 068fb58..0000000 --- a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Sunken City.tag +++ /dev/null @@ -1 +0,0 @@ -level=Sunken City diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Thornwood.png b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Thornwood.png deleted file mode 100644 index 8985cf21e934f8f10934c3c1b3c71dd1251528e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)Px$`$Tt*Kl_(y=n-AX`)2D&#Ad3!eQ*Gz1EWzARRmd#je?Sy@A% zJ!!|O10w)j2D!Z!%QO+3%Hwh7d-eKV5$k|?9W+kp0l+yYB!- zGWpqe`hp#T8#2i1osO=8S6oKHrEtY%WH6-@6T1E#g4r(=OZ)j7USl|e{;t_lSzdhnP`MI1s P00000NkvXXu0mjf7x)at diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Thornwood.tag b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Thornwood.tag deleted file mode 100644 index c737f87..0000000 --- a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Thornwood.tag +++ /dev/null @@ -1 +0,0 @@ -level=Thornwood diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Towerforge.png b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Towerforge.png deleted file mode 100644 index 63f6c73a01dc219b3ba5563d028e7790fcfe2316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u4^P)Px$^+`lQR9J=WSiy0FFc4fAci;wS!NbQD7+RnKdPoJCNeO!R%S4JUPj0050ZT5H~s2E4d^h=0KH1%TV2JG0M0XZejNs$7CnI7eiTyG=9%A5 zcup|v_9iGLwc+oy>-Q;w*N|of9m{t-FUR7qo25-mf9Y4M4-nuF* z4r@=sa1ZyPo`iFL?P!Y4n)F#8i}NFh1)lrRUM_Cw>gK|?x;m*P_3@?Wpg`*4sEeW| zNM}RC<5U=5VAt;cL(%5fj*buLmSd&Op*N<~0Vo<}H#rz>?T6CTwdr1IP|a@C*wq0* zqj1^|OQQ!)Ti8w3tFqou*&*TQrdRyj>ukk}75@@TY(ZB%f-eQ)s{wV$*0lft002ov JPDHLkV1hH$2BH7} diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Towerforge.tag b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Towerforge.tag deleted file mode 100644 index 0035984..0000000 --- a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Towerforge.tag +++ /dev/null @@ -1 +0,0 @@ -level=Towerforge diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Twilight Spire.png b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Twilight Spire.png deleted file mode 100644 index 405db23c69a8a49137cb78013dbfeecdb8511916..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmV-C0>k}@P)Px$_DMuRR9J=WSi5n7AiOt3vQu1c?0jE%9Tf83LY#7 z=ErdoOS$MZro;!}38nzUKn4z@&+V5uw3p)W`zel28O97`z*68Iol1$9kld(m9ylj3 zC(2>;1ANrJ4_u)witN#;52$SBa^fitK?4BYkfQirE|7G}eU*5e zQ=vtL7PSE`IH5m@V+rECJQuX zc~qp$WP?wK(Q8R00Ry~GiIO}L*O-|{hn#q|34uuf=g~g@qz6|6ygxeNdJcxQ0p8xj zH88Iy3veC}%58XX;&6Y&FYyR!a{iXV>p750km6G|FdFfX7!{O+{f>&=^ zFFscin8iMmFnopk)J(!TzgC(`S<4MWB|krclH;|D_I4pN!!x;d*1k2>$@ch2$w^%& z1=18pQxpwB1H7lU$6H;@vD}ycP&kafG3}zaKT=j4Mt|4p7VQo5+Sw2U00ukv>A}uZ zU5zkSUU0gJx!?po*}*Qqp&p&$bu%h{?Q^zc$BuuAEsmf&p1~(MG_jeLm)G?G0000< KMNUMnLSTXdqW~8G diff --git a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Twilight Spire.tag b/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Twilight Spire.tag deleted file mode 100644 index c88f366..0000000 --- a/MiasmaColors/Content/Atlas/atlas/quest/(floorMiasma)--Twilight Spire.tag +++ /dev/null @@ -1 +0,0 @@ -level=Twilight Spire