Merge pull request #4394 from Mailaender/legacy-map-import

Moved the LegacyMapImport into Utility
This commit is contained in:
Paul Chote
2014-01-03 13:25:00 -08:00
16 changed files with 240 additions and 81 deletions

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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>

View File

@@ -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;
}
}
}
}
}

View File

@@ -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.");
}
}
}

View File

@@ -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;
}
}

View File

@@ -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">

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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