From bb5212d2bb848c61fa0323429399504e83cb7f40 Mon Sep 17 00:00:00 2001 From: Scott_NZ Date: Thu, 6 Dec 2012 02:46:37 +1300 Subject: [PATCH] Fix classic SP maps failing to import into the editor --- OpenRA.Editor/Form1.cs | 4 +- OpenRA.Editor/LegacyMapImporter.cs | 61 +++++++++++++++++++++++++++--- OpenRA.Game/Map.cs | 17 ++++----- 3 files changed, 67 insertions(+), 15 deletions(-) diff --git a/OpenRA.Editor/Form1.cs b/OpenRA.Editor/Form1.cs index e27f263f66..fa8998cf2e 100755 --- a/OpenRA.Editor/Form1.cs +++ b/OpenRA.Editor/Form1.cs @@ -1,4 +1,4 @@ -#region Copyright & License Information +#region Copyright & License Information /* * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made @@ -397,6 +397,7 @@ namespace OpenRA.Editor map.ResizeCordon((int)nmd.cordonLeft.Value, (int)nmd.cordonTop.Value, (int)nmd.cordonRight.Value, (int)nmd.cordonBottom.Value); + map.Players.Clear(); map.MakeDefaultPlayers(); NewMap(map); @@ -526,6 +527,7 @@ namespace OpenRA.Editor void SetupDefaultPlayers(object sender, EventArgs e) { dirty = true; + surface1.Map.Players.Clear(); surface1.Map.MakeDefaultPlayers(); surface1.Chunks.Clear(); diff --git a/OpenRA.Editor/LegacyMapImporter.cs b/OpenRA.Editor/LegacyMapImporter.cs index 6b9510201a..ce4bafd357 100644 --- a/OpenRA.Editor/LegacyMapImporter.cs +++ b/OpenRA.Editor/LegacyMapImporter.cs @@ -162,7 +162,7 @@ namespace OpenRA.Editor LoadSmudges(file, "SMUDGE"); foreach (var p in Players) - LoadPlayer(file, p, (legacyMapFormat == IniMapFormat.RedAlert)); + LoadPlayer(file, p); var wps = file.GetSection("Waypoints") .Where(kv => int.Parse(kv.Value) > 0) @@ -412,10 +412,61 @@ namespace OpenRA.Editor } } - void LoadPlayer(IniFile file, string section, bool isRA) + void LoadPlayer(IniFile file, string section) { - var c = section == "BadGuy" ? "red" : - isRA ? "blue" : "gold"; + string c; + string race; + switch (section) + { + case "Spain": + c = "gold"; + race = "allies"; + break; + case "Greece": + c = "blue"; + race = "allies"; + break; + case "USSR": + c = "red"; + race = "soviet"; + break; + case "England": + c = "green"; + race = "allies"; + break; + case "Ukraine": + c = "orange"; + race = "soviet"; + break; + case "Germany": + c = "salmon"; + race = "allies"; + break; + case "France": + c = "teal"; + race = "allies"; + break; + case "Turkey": + c = "salmon"; + race = "allies"; + break; + case "GoodGuy": + c = "gold"; + race = "gdi"; + break; + case "BadGuy": + c = "red"; + race = "nod"; + break; + case "Neutral": + c = "neutral"; + race = "allies"; + break; + default: + c = "neutral"; + race = "allies"; + break; + } var color = namedColorMapping[c]; @@ -424,7 +475,7 @@ namespace OpenRA.Editor Name = section, OwnsWorld = section == "Neutral", NonCombatant = section == "Neutral", - Race = isRA ? (section == "BadGuy" ? "soviet" : "allies") : (section == "BadGuy" ? "nod" : "gdi"), + Race = race, ColorRamp = new ColorRamp( (byte)((color.First.GetHue() / 360.0f) * 255), (byte)(color.First.GetSaturation() * 255), diff --git a/OpenRA.Game/Map.cs b/OpenRA.Game/Map.cs index a38f2897cc..2d1cef6556 100644 --- a/OpenRA.Game/Map.cs +++ b/OpenRA.Game/Map.cs @@ -385,18 +385,17 @@ namespace OpenRA public void MakeDefaultPlayers() { - Players.Clear(); - var firstRace = OpenRA.Rules.Info["world"].Traits .WithInterface().First(c => c.Selectable).Race; - Players.Add("Neutral", new PlayerReference - { - Name = "Neutral", - Race = firstRace, - OwnsWorld = true, - NonCombatant = true - }); + if (!Players.ContainsKey("Neutral")) + Players.Add("Neutral", new PlayerReference + { + Name = "Neutral", + Race = firstRace, + OwnsWorld = true, + NonCombatant = true + }); var numSpawns = GetSpawnPoints().Length; for (var index = 0; index < numSpawns; index++)