Merge pull request #4394 from Mailaender/legacy-map-import
Moved the LegacyMapImport into Utility
This commit is contained in:
24
OpenRA.Editor/Form1.Designer.cs
generated
24
OpenRA.Editor/Form1.Designer.cs
generated
@@ -85,8 +85,6 @@ namespace OpenRA.Editor
|
||||
this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.redAlertMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.miniMapExport = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.miniMapToPng = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.fullMapRenderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
@@ -582,7 +580,6 @@ namespace OpenRA.Editor
|
||||
this.saveToolStripMenuItem,
|
||||
this.saveAsToolStripMenuItem,
|
||||
this.toolStripSeparator2,
|
||||
this.toolStripMenuItem1,
|
||||
this.miniMapExport,
|
||||
this.toolStripSeparator3,
|
||||
this.exitToolStripMenuItem});
|
||||
@@ -639,25 +636,6 @@ namespace OpenRA.Editor
|
||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(120, 6);
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.redAlertMapToolStripMenuItem});
|
||||
this.toolStripMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem1.Image")));
|
||||
this.toolStripMenuItem1.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(123, 22);
|
||||
this.toolStripMenuItem1.Text = "&Import";
|
||||
//
|
||||
// cCRedAlertMapToolStripMenuItem
|
||||
//
|
||||
this.redAlertMapToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("cCRedAlertMapToolStripMenuItem.Image")));
|
||||
this.redAlertMapToolStripMenuItem.Name = "cCRedAlertMapToolStripMenuItem";
|
||||
this.redAlertMapToolStripMenuItem.Size = new System.Drawing.Size(188, 22);
|
||||
this.redAlertMapToolStripMenuItem.Text = "&Legacy Map Format...";
|
||||
this.redAlertMapToolStripMenuItem.ToolTipText = "Import an original C&C / Red Alert and convert it to the .oramap format.";
|
||||
this.redAlertMapToolStripMenuItem.Click += new System.EventHandler(this.ImportLegacyMapClicked);
|
||||
//
|
||||
// mnuExport
|
||||
//
|
||||
this.miniMapExport.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
@@ -1097,8 +1075,6 @@ namespace OpenRA.Editor
|
||||
private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem redAlertMapToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem miniMapExport;
|
||||
private System.Windows.Forms.ToolStripMenuItem miniMapToPng;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||
|
||||
@@ -402,6 +402,7 @@ namespace OpenRA.Editor
|
||||
|
||||
map.Players.Clear();
|
||||
map.MakeDefaultPlayers();
|
||||
map.FixOpenAreas();
|
||||
|
||||
NewMap(map);
|
||||
}
|
||||
@@ -437,37 +438,6 @@ namespace OpenRA.Editor
|
||||
Close();
|
||||
}
|
||||
|
||||
void ImportLegacyMapClicked(object sender, EventArgs e)
|
||||
{
|
||||
using (var ofd = new OpenFileDialog { RestoreDirectory = true,
|
||||
Filter = "Legacy maps (*.ini;*.mpr)|*.ini;*.mpr" })
|
||||
if (DialogResult.OK == ofd.ShowDialog())
|
||||
{
|
||||
/* massive hack: we should be able to call NewMap() with the imported Map object,
|
||||
* but something's not right internally in it, unless loaded via the real maploader */
|
||||
|
||||
var savePath = Path.Combine(Path.GetTempPath(), "OpenRA.Import");
|
||||
Directory.CreateDirectory(savePath);
|
||||
|
||||
var errors = new List<string>();
|
||||
|
||||
var map = LegacyMapImporter.Import(ofd.FileName, a => errors.Add(a));
|
||||
|
||||
if (errors.Count > 0)
|
||||
using (var eld = new ErrorListDialog(errors))
|
||||
eld.ShowDialog();
|
||||
|
||||
map.MakeDefaultPlayers();
|
||||
|
||||
map.Save(savePath);
|
||||
LoadMap(savePath);
|
||||
loadedMapName = null; /* editor needs to think this hasnt been saved */
|
||||
|
||||
Directory.Delete(savePath, true);
|
||||
MakeDirty();
|
||||
}
|
||||
}
|
||||
|
||||
void OnFormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (!dirty) return;
|
||||
@@ -515,18 +485,7 @@ namespace OpenRA.Editor
|
||||
void FixOpenAreas(object sender, EventArgs e)
|
||||
{
|
||||
dirty = true;
|
||||
var r = new Random();
|
||||
|
||||
for (var j = surface1.Map.Bounds.Top; j < surface1.Map.Bounds.Bottom; j++)
|
||||
for (var i = surface1.Map.Bounds.Left; i < surface1.Map.Bounds.Right; i++)
|
||||
{
|
||||
var tr = surface1.Map.MapTiles.Value[i, j];
|
||||
if (tr.Type == 0xff || tr.Type == 0xffff || tr.Type == 1 || tr.Type == 2)
|
||||
tr.Index = (byte)r.Next(0, surface1.TileSetRenderer.Data(tr.Type).Count);
|
||||
|
||||
surface1.Map.MapTiles.Value[i, j] = tr;
|
||||
}
|
||||
|
||||
surface1.Map.FixOpenAreas();
|
||||
surface1.Chunks.Clear();
|
||||
surface1.Invalidate();
|
||||
}
|
||||
|
||||
@@ -96,7 +96,6 @@
|
||||
<DependentUpon>Form1.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="ITool.cs" />
|
||||
<Compile Include="LegacyMapImporter.cs" />
|
||||
<Compile Include="MapSelect.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace OpenRA
|
||||
// Yaml map data
|
||||
public string Uid { get; private set; }
|
||||
public int MapFormat;
|
||||
public bool Selectable;
|
||||
public bool Selectable = true;
|
||||
public bool UseAsShellmap;
|
||||
public string RequiresMod;
|
||||
|
||||
@@ -474,5 +474,24 @@ namespace OpenRA
|
||||
Enemies = Players.Where(p => p.Value.Playable).Select(p => p.Key).ToArray()
|
||||
});
|
||||
}
|
||||
|
||||
public void FixOpenAreas()
|
||||
{
|
||||
var r = new Random();
|
||||
var tileset = OpenRA.Rules.TileSets[Tileset];
|
||||
|
||||
for (var j = Bounds.Top; j < Bounds.Bottom; j++)
|
||||
{
|
||||
for (var i = Bounds.Left; i < Bounds.Right; i++)
|
||||
{
|
||||
var tr = MapTiles.Value[i, j];
|
||||
var template = tileset.Templates[tr.Type];
|
||||
if (!template.PickAny)
|
||||
continue;
|
||||
tr.Index = (byte)r.Next(0, template.Tiles.Count);
|
||||
MapTiles.Value[i, j] = tr;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -331,5 +331,21 @@ namespace OpenRA.Utility
|
||||
Game.modData = new ModData(mod);
|
||||
new Map(map, mod);
|
||||
}
|
||||
|
||||
[Desc("MOD", "FILENAME", "Convert a legacy INI/MPR map to the OpenRA format.")]
|
||||
public static void ImportLegacyMap(string[] args)
|
||||
{
|
||||
var mod = args[1];
|
||||
var filename = args[2];
|
||||
Game.modData = new ModData(mod);
|
||||
Rules.LoadRules(Game.modData.Manifest, new Map());
|
||||
var map = LegacyMapImporter.Import(filename, e => Console.WriteLine(e));
|
||||
map.RequiresMod = mod;
|
||||
map.MakeDefaultPlayers();
|
||||
map.FixOpenAreas();
|
||||
var dest = map.Title + ".oramap";
|
||||
map.Save(dest);
|
||||
Console.WriteLine(dest + " saved.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
||||
* 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. For more information,
|
||||
@@ -18,7 +18,7 @@ using System.Text;
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Editor
|
||||
namespace OpenRA.Utility
|
||||
{
|
||||
public class LegacyMapImporter
|
||||
{
|
||||
@@ -133,7 +133,7 @@ namespace OpenRA.Editor
|
||||
var height = int.Parse(mapSection.GetValue("Height", "0"));
|
||||
mapSize = (legacyMapFormat == IniMapFormat.RedAlert) ? 128 : 64;
|
||||
|
||||
map.Title = basic.GetValue("Name", "(null)");
|
||||
map.Title = basic.GetValue("Name", Path.GetFileNameWithoutExtension(iniFile));
|
||||
map.Author = "Westwood Studios";
|
||||
map.Tileset = Truncate(mapSection.GetValue("Theater", "TEMPERAT"), 8);
|
||||
map.MapSize.X = mapSize;
|
||||
@@ -464,13 +464,15 @@ namespace OpenRA.Editor
|
||||
var neutral = new[] { "Neutral" };
|
||||
foreach (var s in file.GetSection(section, true))
|
||||
{
|
||||
Console.WriteLine(s.Key);
|
||||
switch (s.Key)
|
||||
{
|
||||
case "Allies":
|
||||
pr.Allies = s.Value.Split(',').Intersect(players).Except(neutral).ToArray();
|
||||
pr.Enemies = s.Value.Split(',').SymmetricDifference(players).Except(neutral).ToArray();
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
Console.WriteLine("Ignoring unknown {0}={1} for player {2}", s.Key, s.Value, pr.Name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
<Compile Include="Command.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="UpgradeRules.cs" />
|
||||
<Compile Include="LegacyMapImporter.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace OpenRA.Utility
|
||||
{ "--map-upgrade-v5", Command.UpgradeV5Map },
|
||||
{ "--upgrade-map", UpgradeRules.UpgradeMap },
|
||||
{ "--upgrade-mod", UpgradeRules.UpgradeMod },
|
||||
{ "--map-import", Command.ImportLegacyMap }
|
||||
};
|
||||
|
||||
static void Main(string[] args)
|
||||
|
||||
@@ -60,6 +60,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@65535:
|
||||
Id: 65535
|
||||
Image: clear1
|
||||
@@ -67,6 +82,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@0:
|
||||
Id: 0
|
||||
Image: clear1
|
||||
@@ -74,6 +104,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@1:
|
||||
Id: 1
|
||||
Image: w1
|
||||
|
||||
@@ -60,6 +60,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@65535:
|
||||
Id: 65535
|
||||
Image: clear1
|
||||
@@ -67,6 +82,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@0:
|
||||
Id: 0
|
||||
Image: clear1
|
||||
@@ -74,6 +104,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@1:
|
||||
Id: 1
|
||||
Image: w1
|
||||
|
||||
@@ -60,6 +60,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@65535:
|
||||
Id: 65535
|
||||
Image: clear1
|
||||
@@ -67,6 +82,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@0:
|
||||
Id: 0
|
||||
Image: clear1
|
||||
@@ -74,6 +104,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@1:
|
||||
Id: 1
|
||||
Image: w1
|
||||
|
||||
@@ -60,6 +60,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@65535:
|
||||
Id: 65535
|
||||
Image: clear1
|
||||
@@ -67,6 +82,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@0:
|
||||
Id: 0
|
||||
Image: clear1
|
||||
@@ -74,6 +104,21 @@ Templates:
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
2: Clear
|
||||
3: Clear
|
||||
4: Clear
|
||||
5: Clear
|
||||
6: Clear
|
||||
7: Clear
|
||||
8: Clear
|
||||
9: Clear
|
||||
10: Clear
|
||||
11: Clear
|
||||
12: Clear
|
||||
13: Clear
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@1:
|
||||
Id: 1
|
||||
Image: w1
|
||||
|
||||
@@ -64,7 +64,7 @@ Templates:
|
||||
Image: BLOXBASE
|
||||
Frames: 0
|
||||
Size: 1,1
|
||||
PickAny: False
|
||||
PickAny: True # TODO: add more Frames and Tiles here
|
||||
Tiles:
|
||||
0: Sand
|
||||
Template@1:
|
||||
@@ -108,7 +108,7 @@ Templates:
|
||||
Image: BLOXBASE
|
||||
Frames: 16,17,36,37
|
||||
Size: 2,2
|
||||
Category: Dune
|
||||
Category: Dune
|
||||
PickAny: False
|
||||
Tiles:
|
||||
0: Sand
|
||||
@@ -120,7 +120,7 @@ Templates:
|
||||
Image: BLOXBASE
|
||||
Frames: 18,19,38,39
|
||||
Size: 2,2
|
||||
Category: Dune
|
||||
Category: Dune
|
||||
PickAny: False
|
||||
Tiles:
|
||||
0: Dune
|
||||
@@ -132,7 +132,7 @@ Templates:
|
||||
Image: BLOXBASE
|
||||
Frames: 58,59,78,79
|
||||
Size: 2,2
|
||||
Category: Dune
|
||||
Category: Dune
|
||||
PickAny: False
|
||||
Tiles:
|
||||
1: Dune
|
||||
|
||||
@@ -75,6 +75,7 @@ Templates:
|
||||
Image: clear1
|
||||
Size: 1,1
|
||||
Category: Terrain
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
@@ -97,6 +98,7 @@ Templates:
|
||||
Image: clear1
|
||||
Size: 1,1
|
||||
Category: Terrain
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
@@ -115,14 +117,14 @@ Templates:
|
||||
14: Clear
|
||||
15: Clear
|
||||
Template@256:
|
||||
Id: 256
|
||||
Id: 256
|
||||
Image: w1
|
||||
Size: 1,1
|
||||
Category: Terrain
|
||||
Tiles:
|
||||
0: Water
|
||||
Template@257:
|
||||
Id: 257
|
||||
Id: 257
|
||||
Image: sh17
|
||||
Size: 2,2
|
||||
Category: Terrain
|
||||
@@ -132,7 +134,7 @@ Templates:
|
||||
2: Water
|
||||
3: Water
|
||||
Template@258:
|
||||
Id: 258
|
||||
Id: 258
|
||||
Image: sh18
|
||||
Size: 2,2
|
||||
Category: Terrain
|
||||
|
||||
@@ -56,6 +56,7 @@ Templates:
|
||||
Id: 255
|
||||
Image: clear1
|
||||
Size: 1,1
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
@@ -76,6 +77,7 @@ Templates:
|
||||
Template@65535:
|
||||
Id: 65535
|
||||
Image: clear1
|
||||
PickAny: True
|
||||
Size: 1,1
|
||||
Tiles:
|
||||
0: Clear
|
||||
|
||||
@@ -58,6 +58,7 @@ Templates:
|
||||
Image: clear1
|
||||
Size: 1,1
|
||||
Category: Terrain
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
@@ -80,6 +81,7 @@ Templates:
|
||||
Image: clear1
|
||||
Size: 1,1
|
||||
Category: Terrain
|
||||
PickAny: True
|
||||
Tiles:
|
||||
0: Clear
|
||||
1: Clear
|
||||
|
||||
Reference in New Issue
Block a user