diff --git a/OpenRA.Mods.Cnc/ImportTiberianDawnLegacyMapCommand.cs b/OpenRA.Mods.Cnc/ImportTiberianDawnLegacyMapCommand.cs index dd9e04576e..522a9a9488 100644 --- a/OpenRA.Mods.Cnc/ImportTiberianDawnLegacyMapCommand.cs +++ b/OpenRA.Mods.Cnc/ImportTiberianDawnLegacyMapCommand.cs @@ -154,10 +154,22 @@ namespace OpenRA.Mods.Cnc.UtilityCommands public override void ReadPacks(IniFile file, string filename) { - using (var s = ModData.DefaultFileSystem.Open(filename.Substring(0, filename.Length - 4) + ".bin")) + using (var s = File.OpenRead(filename.Substring(0, filename.Length - 4) + ".bin")) UnpackTileData(s); ReadOverlay(file); } + + public override void SaveWaypoint(int waypointNumber, ActorReference waypointReference) + { + var waypointName = "waypoint" + waypointNumber; + if (waypointNumber == 25) + waypointName = "DefaultFlareLocation"; + else if (waypointNumber == 26) + waypointName = "DefaultCameraPosition"; + else if (waypointNumber == 27) + waypointName = "DefaultChinookTarget"; + Map.ActorDefinitions.Add(new MiniYamlNode(waypointName, waypointReference.Save())); + } } } diff --git a/OpenRA.Mods.Common/UtilityCommands/ImportLegacyMapCommand.cs b/OpenRA.Mods.Common/UtilityCommands/ImportLegacyMapCommand.cs index 241c8bf152..87bb41bf72 100644 --- a/OpenRA.Mods.Common/UtilityCommands/ImportLegacyMapCommand.cs +++ b/OpenRA.Mods.Common/UtilityCommands/ImportLegacyMapCommand.cs @@ -35,6 +35,7 @@ namespace OpenRA.Mods.Common.UtilityCommands public Map Map; public List Players = new List(); public MapPlayers MapPlayers; + bool singlePlayer; int spawnCount; public bool ValidateArguments(string[] args) @@ -51,10 +52,15 @@ namespace OpenRA.Mods.Common.UtilityCommands Game.ModData = modData; var filename = args[1]; - using (var stream = modData.DefaultFileSystem.Open(filename)) + using (var stream = File.OpenRead(filename)) { var file = new IniFile(stream); var basic = file.GetSection("Basic"); + + var player = basic.GetValue("Player", string.Empty); + if (!string.IsNullOrEmpty(player)) + singlePlayer = !player.StartsWith("Multi"); + var mapSection = file.GetSection("Map"); var format = GetMapFormatVersion(basic); @@ -252,7 +258,7 @@ namespace OpenRA.Mods.Common.UtilityCommands // Add waypoint actors foreach (var kv in wps) { - if (kv.First <= 7) + if (!singlePlayer && kv.First <= 7) { var ar = new ActorReference("mpspawn") { @@ -271,11 +277,17 @@ namespace OpenRA.Mods.Common.UtilityCommands new OwnerInit("Neutral") }; - Map.ActorDefinitions.Add(new MiniYamlNode("waypoint" + kv.First, ar.Save())); + SaveWaypoint(kv.First, ar); } } } + public virtual void SaveWaypoint(int waypointNumber, ActorReference waypointReference) + { + var waypointName = "waypoint" + waypointNumber; + Map.ActorDefinitions.Add(new MiniYamlNode(waypointName, waypointReference.Save())); + } + void LoadSmudges(IniFile file, string section) { var scorches = new List(); diff --git a/OpenRA.Mods.RA/ImportRedAlertLegacyMapCommand.cs b/OpenRA.Mods.RA/ImportRedAlertLegacyMapCommand.cs index b37e785996..d360d765d8 100644 --- a/OpenRA.Mods.RA/ImportRedAlertLegacyMapCommand.cs +++ b/OpenRA.Mods.RA/ImportRedAlertLegacyMapCommand.cs @@ -239,5 +239,13 @@ namespace OpenRA.Mods.RA.UtilityCommands base.ReadActors(file); LoadActors(file, "SHIPS", Players, MapSize, Map); } + + public override void SaveWaypoint(int waypointNumber, ActorReference waypointReference) + { + var waypointName = "waypoint" + waypointNumber; + if (waypointNumber == 98) + waypointName = "DefaultCameraPosition"; + Map.ActorDefinitions.Add(new MiniYamlNode(waypointName, waypointReference.Save())); + } } }