diff --git a/OpenRA.Editor/Form1.cs b/OpenRA.Editor/Form1.cs index d3353199df..9029e94af2 100755 --- a/OpenRA.Editor/Form1.cs +++ b/OpenRA.Editor/Form1.cs @@ -42,7 +42,7 @@ namespace OpenRA.Editor tilePalette.ResumeLayout(); actorPalette.ResumeLayout(); resourcePalette.ResumeLayout(); - surface1.Bind(null, null, null); + surface1.Bind(null, null, null, null); pmMiniMap.Image = null; currentMod = toolStripComboBox1.SelectedItem as string; @@ -140,8 +140,14 @@ namespace OpenRA.Editor tileset.LoadTiles(); int[] ShadowIndex = { 3, 4 }; var palette = new Palette(FileSystem.Open(tileset.Palette), ShadowIndex); + /* PlayerPalette is only used in RA desert terrain + * TODO: use the palette as defined in YAML + * defaults are wrong for DESERT rocks, trees, walls and ore mine + */ + var playerPalette = tileset.PlayerPalette ?? tileset.Palette; + var PlayerPalette = new Palette(FileSystem.Open(playerPalette), ShadowIndex); - surface1.Bind(map, tileset, palette); + surface1.Bind(map, tileset, palette, PlayerPalette); // construct the palette of tiles var palettes = new[] { tilePalette, actorPalette, resourcePalette }; foreach (var p in palettes) { p.Visible = false; p.SuspendLayout(); } @@ -211,7 +217,7 @@ namespace OpenRA.Editor if (etf != null && etf.RequireTilesets != null && !etf.RequireTilesets.Contains(tileset.Id)) continue; - var template = RenderUtils.RenderActor(info, tileset, palette); + var template = RenderUtils.RenderActor(info, tileset, PlayerPalette); var ibox = new PictureBox { Image = template.Bitmap, @@ -242,7 +248,7 @@ namespace OpenRA.Editor { try { - var template = RenderUtils.RenderResourceType(a, tileset.Extensions, palette); + var template = RenderUtils.RenderResourceType(a, tileset.Extensions, PlayerPalette); var ibox = new PictureBox { Image = template.Bitmap, @@ -317,7 +323,7 @@ namespace OpenRA.Editor if ((int)rd.width.Value != surface1.Map.MapSize.X || (int)rd.height.Value != surface1.Map.MapSize.Y) { surface1.Map.Resize((int)rd.width.Value, (int)rd.height.Value); - surface1.Bind(surface1.Map, surface1.TileSet, surface1.Palette); // rebind it to invalidate all caches + surface1.Bind(surface1.Map, surface1.TileSet, surface1.Palette, surface1.PlayerPalette); // rebind it to invalidate all caches } surface1.Invalidate(); diff --git a/OpenRA.Editor/Surface.cs b/OpenRA.Editor/Surface.cs index c6e353d508..63a5113c39 100755 --- a/OpenRA.Editor/Surface.cs +++ b/OpenRA.Editor/Surface.cs @@ -26,6 +26,7 @@ namespace OpenRA.Editor public Map Map { get; private set; } public TileSet TileSet { get; private set; } public Palette Palette { get; private set; } + public Palette PlayerPalette { get; private set; } public int2 Offset; public int2 GetOffset() { return Offset; } @@ -55,11 +56,12 @@ namespace OpenRA.Editor public Keys GetModifiers() { return ModifierKeys; } - public void Bind(Map m, TileSet ts, Palette p) + public void Bind(Map m, TileSet ts, Palette p, Palette pp) { Map = m; TileSet = ts; Palette = p; + PlayerPalette = pp; PlayerPalettes = null; Chunks.Clear(); Tool = null; @@ -348,7 +350,7 @@ namespace OpenRA.Editor var pr = Map.Players[name]; var pcpi = Rules.Info["player"].Traits.Get(); var remap = new PlayerColorRemap(pcpi.RemapIndex, pr.ColorRamp); - return new Palette(Palette, remap).AsSystemPalette(); + return new Palette(PlayerPalette, remap).AsSystemPalette(); } Cache PlayerPalettes;