Map converter saves to package
This commit is contained in:
@@ -7,21 +7,7 @@ namespace MapConverter
|
||||
{
|
||||
public static void Main (string[] args)
|
||||
{
|
||||
if (args.Length != 3)
|
||||
{
|
||||
Console.WriteLine("usage: MapConverter mod[,mod]* input-map.ini output-map.yaml");
|
||||
return;
|
||||
}
|
||||
|
||||
var mods = args[0].Split(',');
|
||||
var manifest = new Manifest(mods);
|
||||
|
||||
foreach (var folder in manifest.Folders) FileSystem.Mount(folder);
|
||||
foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg);
|
||||
|
||||
var converter = new MapConverter(args[1]);
|
||||
converter.Map.DebugContents();
|
||||
converter.Save(args[2]);
|
||||
new MapConverter(args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,8 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using OpenRA;
|
||||
using OpenRA.FileFormats;
|
||||
|
||||
@@ -40,7 +42,7 @@ namespace MapConverter
|
||||
"fpls", "wcrate", "scrate", "barb", "sbag",
|
||||
};
|
||||
|
||||
Dictionary< string, Pair<byte,byte> > overlayResourceMapping = new Dictionary<string, Pair<byte, byte>>()
|
||||
static Dictionary< string, Pair<byte,byte> > overlayResourceMapping = new Dictionary<string, Pair<byte, byte>>()
|
||||
{
|
||||
// RA Gems, Gold
|
||||
{ "gold01", new Pair<byte,byte>(1,0) },
|
||||
@@ -68,7 +70,7 @@ namespace MapConverter
|
||||
{ "ti12", new Pair<byte,byte>(1,11) },
|
||||
};
|
||||
|
||||
Dictionary<string, string> overlayActorMapping = new Dictionary<string,string>() {
|
||||
static Dictionary<string, string> overlayActorMapping = new Dictionary<string,string>() {
|
||||
// Fences
|
||||
{"sbag","sbag"},
|
||||
{"cycl","cycl"},
|
||||
@@ -92,11 +94,44 @@ namespace MapConverter
|
||||
|
||||
int MapSize;
|
||||
int ActorCount = 0;
|
||||
public Map Map = new Map();
|
||||
Map Map = new Map();
|
||||
Manifest manifest;
|
||||
|
||||
public MapConverter(string filename)
|
||||
public MapConverter(string[] args)
|
||||
{
|
||||
IniFile file = new IniFile(FileSystem.Open(filename));
|
||||
if (args.Length != 3)
|
||||
{
|
||||
Console.WriteLine("usage: MapConverter mod[,mod]* input-map.ini output-map.yaml");
|
||||
return;
|
||||
}
|
||||
|
||||
var mods = args[0].Split(',');
|
||||
manifest = new Manifest(mods);
|
||||
|
||||
foreach (var folder in manifest.Folders) FileSystem.Mount(folder);
|
||||
foreach (var pkg in manifest.Packages) FileSystem.Mount(pkg);
|
||||
|
||||
ConvertIniMap(args[1]);
|
||||
Map.DebugContents();
|
||||
Save(args[2]);
|
||||
}
|
||||
|
||||
|
||||
static Dictionary<Pair<string,string>,Pair<string,string> > fileMapping = new Dictionary<Pair<string,string>,Pair<string,string> >()
|
||||
{
|
||||
{Pair.New("ra","TEMPERAT"),Pair.New("tem","temperat.col")},
|
||||
{Pair.New("ra","SNOW"),Pair.New("sno","snow.col")},
|
||||
{Pair.New("ra","INTERIOR"),Pair.New("int","temperat.col")},
|
||||
{Pair.New("cnc","DESERT"),Pair.New("des","desert.col")},
|
||||
{Pair.New("cnc","TEMPERAT"),Pair.New("tem","temperat.col")},
|
||||
{Pair.New("cnc","WINTER"),Pair.New("win","winter.col")},
|
||||
};
|
||||
|
||||
TerrainColorSet terrainTypeColors;
|
||||
TileSet tileset;
|
||||
public void ConvertIniMap(string iniFile)
|
||||
{
|
||||
IniFile file = new IniFile(FileSystem.Open(iniFile));
|
||||
IniSection basic = file.GetSection("Basic");
|
||||
IniSection map = file.GetSection("Map");
|
||||
var INIFormat = int.Parse(basic.GetValue("NewINIFormat", "0"));
|
||||
@@ -119,12 +154,16 @@ namespace MapConverter
|
||||
UnpackRATileData(ReadPackedSection(file.GetSection("MapPack")));
|
||||
UnpackRAOverlayData(ReadPackedSection(file.GetSection("OverlayPack")));
|
||||
ReadRATrees(file);
|
||||
terrainTypeColors = new TerrainColorSet(fileMapping[Pair.New("ra",Map.Tileset)].Second);
|
||||
tileset = new TileSet("tileSet.til","templates.ini",fileMapping[Pair.New("ra",Map.Tileset)].First);
|
||||
}
|
||||
else // CNC
|
||||
{
|
||||
UnpackCncTileData(FileSystem.Open(filename.Substring(0,filename.Length-4)+".bin"));
|
||||
UnpackCncTileData(FileSystem.Open(iniFile.Substring(0,iniFile.Length-4)+".bin"));
|
||||
ReadCncOverlay(file);
|
||||
ReadCncTrees(file);
|
||||
ReadCncTrees(file);
|
||||
terrainTypeColors = new TerrainColorSet(fileMapping[Pair.New("cnc",Map.Tileset)].Second);
|
||||
tileset = new TileSet("tileSet.til","templates.ini",fileMapping[Pair.New("cnc",Map.Tileset)].First);
|
||||
}
|
||||
|
||||
LoadActors(file, "STRUCTURES");
|
||||
@@ -142,7 +181,7 @@ namespace MapConverter
|
||||
foreach (var kv in wp)
|
||||
Map.Waypoints.Add("spawn"+kv.First, kv.Second);
|
||||
}
|
||||
|
||||
|
||||
static MemoryStream ReadPackedSection(IniSection mapPackSection)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
@@ -324,8 +363,29 @@ namespace MapConverter
|
||||
return s.Length <= maxLength ? s : s.Substring(0,maxLength );
|
||||
}
|
||||
|
||||
public void SavePreviewImage(string filepath)
|
||||
{
|
||||
var xs = Map.TopLeft.X;
|
||||
var ys = Map.TopLeft.Y;
|
||||
|
||||
var bitmap = new Bitmap(Map.Width, Map.Height);
|
||||
for (var x = 0; x < Map.Width; x++)
|
||||
for (var y = 0; y < Map.Height; y++)
|
||||
bitmap.SetPixel(x, y, terrainTypeColors.ColorForTerrainType(tileset.GetTerrainType(Map.MapTiles[x+xs, y+ys])));
|
||||
|
||||
for (var x = 0; x < Map.Width; x++)
|
||||
for (var y = 0; y < Map.Height; y++)
|
||||
if (Map.MapResources[x+xs, y+ys].type > 0)
|
||||
bitmap.SetPixel(x, y, terrainTypeColors.ColorForTerrainType(TerrainType.Ore));
|
||||
|
||||
bitmap.Save(filepath,ImageFormat.Png);
|
||||
}
|
||||
|
||||
public void Save(string filepath)
|
||||
{
|
||||
Directory.CreateDirectory(filepath);
|
||||
SavePreviewImage(Path.Combine(filepath,"preview.png"));
|
||||
Map.UpdateUid();
|
||||
Map.Save(filepath);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,6 +101,13 @@ namespace OpenRA.FileFormats
|
||||
LoadBinaryData();
|
||||
}
|
||||
|
||||
public void UpdateUid()
|
||||
{
|
||||
// TODO: Do this properly.
|
||||
// Use a hash of the important data
|
||||
Random foo = new Random();
|
||||
Uid = foo.Next().ToString();
|
||||
}
|
||||
|
||||
public void Save(string filepath)
|
||||
{
|
||||
@@ -116,10 +123,9 @@ namespace OpenRA.FileFormats
|
||||
root.Add("Waypoints",MiniYaml.FromDictionary<string,int2>(Waypoints));
|
||||
|
||||
// TODO: Players
|
||||
|
||||
root.Add("Rules",new MiniYaml(null,Rules));
|
||||
SaveBinaryData(filepath+"map.bin");
|
||||
root.WriteToFile(filepath+"map.yaml");
|
||||
SaveBinaryData(Path.Combine(filepath,"map.bin"));
|
||||
root.WriteToFile(Path.Combine(filepath,"map.yaml"));
|
||||
}
|
||||
|
||||
static byte ReadByte( Stream s )
|
||||
|
||||
@@ -319,10 +319,9 @@ namespace OpenRA
|
||||
var y = r.Top + 50;
|
||||
|
||||
int maxListItems = ((r.Bottom - 60 - y ) / 20);
|
||||
|
||||
//for(int i = mapOffset; i < Math.Min(maxListItems + mapOffset, Game.AvailableMaps.Count()); i++, y += 20)
|
||||
|
||||
// TODO: Show the appropriate subset of data
|
||||
|
||||
// Don't bother showing a subset of the data
|
||||
// This will be fixed properly when we move the map list to widgets
|
||||
foreach (var kv in Game.AvailableMaps)
|
||||
{
|
||||
var map = kv.Value;
|
||||
@@ -352,21 +351,6 @@ namespace OpenRA
|
||||
DrawCentered("Spawnpoints: {0}".F(currentMap.PlayerCount),
|
||||
new int2(mapRect.Left + mapRect.Width / 2, y), Color.White);
|
||||
|
||||
/*
|
||||
y += 30;
|
||||
AddUiButton(new int2(mapRect.Left + mapRect.Width / 2, y), "^",
|
||||
_ =>
|
||||
{
|
||||
mapOffset = (mapOffset - 1 < 0) ? 0 : mapOffset - 1;
|
||||
});
|
||||
|
||||
y += 30;
|
||||
AddUiButton(new int2(mapRect.Left + mapRect.Width / 2, y), "\\/",
|
||||
_ =>
|
||||
{
|
||||
mapOffset = (mapOffset + 1 > mapList.Value.Count() - maxListItems) ? mapOffset : mapOffset + 1;
|
||||
});
|
||||
*/
|
||||
AddButton(r, _ => { });
|
||||
}
|
||||
bool PaletteAvailable(int index) { return Game.LobbyInfo.Clients.All(c => c.PaletteIndex != index); }
|
||||
|
||||
BIN
mods/cnc/maps/multimap/map.bin
Normal file
BIN
mods/cnc/maps/multimap/map.bin
Normal file
Binary file not shown.
60
mods/cnc/maps/multimap/map.yaml
Normal file
60
mods/cnc/maps/multimap/map.yaml
Normal file
@@ -0,0 +1,60 @@
|
||||
Uid: 305604695
|
||||
|
||||
MapFormat: 1
|
||||
|
||||
Title: Sand Trap
|
||||
|
||||
Author: Westwood Studios
|
||||
|
||||
PlayerCount: 8
|
||||
|
||||
Tileset: DESERT
|
||||
|
||||
MapSize: 64,64
|
||||
|
||||
TopLeft: 3,3
|
||||
|
||||
BottomRight: 60,61
|
||||
|
||||
Actors:
|
||||
Actor0: split3 Neutral 21,55
|
||||
Actor1: split3 Neutral 19,19
|
||||
Actor2: split3 Neutral 8,4
|
||||
Actor3: t18 Neutral 3,31
|
||||
Actor4: t18 Neutral 22,34
|
||||
Actor5: t18 Neutral 26,37
|
||||
Actor6: t08 Neutral 4,37
|
||||
Actor7: t08 Neutral 7,38
|
||||
Actor8: t08 Neutral 5,37
|
||||
Actor9: rock1 Neutral 29,14
|
||||
Actor10: rock1 Neutral 3,5
|
||||
Actor11: rock6 Neutral 44,5
|
||||
Actor12: t08 Neutral 53,42
|
||||
Actor13: t08 Neutral 54,17
|
||||
Actor14: t08 Neutral 53,55
|
||||
Actor15: t08 Neutral 37,32
|
||||
Actor16: t08 Neutral 39,33
|
||||
Actor17: t08 Neutral 38,32
|
||||
Actor18: t08 Neutral 46,31
|
||||
Actor19: rock1 Neutral 3,12
|
||||
Actor20: rock1 Neutral 38,30
|
||||
Actor21: t08 Neutral 27,35
|
||||
Actor22: split3 Neutral 7,43
|
||||
Actor23: split3 Neutral 19,39
|
||||
Actor24: split3 Neutral 44,53
|
||||
Actor25: split3 Neutral 44,13
|
||||
Actor26: split3 Neutral 41,33
|
||||
Actor27: split3 Neutral 41,3
|
||||
|
||||
Waypoints:
|
||||
spawn7: 20,5
|
||||
spawn6: 56,5
|
||||
spawn5: 52,35
|
||||
spawn4: 6,52
|
||||
spawn3: 25,58
|
||||
spawn2: 48,58
|
||||
spawn1: 33,16
|
||||
spawn0: 6,16
|
||||
|
||||
Rules:
|
||||
|
||||
BIN
mods/cnc/maps/multimap/preview.png
Normal file
BIN
mods/cnc/maps/multimap/preview.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 878 B |
Reference in New Issue
Block a user