From ce92d95bd1fd16732f81ef3385e072774f5ae520 Mon Sep 17 00:00:00 2001 From: Adrian Date: Thu, 18 Feb 2016 21:30:42 +0100 Subject: [PATCH 1/5] App: Bitmap adding, Library: fixes * Add commands to add and remove a pregame bitmap * Add command help texts * Calculate the palette length correctly in BitmapUtil * Add some expected values --- src/cmdapp/GenieEngineApp.csproj | 3 ++ src/cmdapp/src/AddBitmapCommand.cs | 48 +++++++++++++++++++ src/cmdapp/src/CompressCommand.cs | 10 +++- src/cmdapp/src/ConvertCommand.cs | 7 +-- src/cmdapp/src/DecompressCommand.cs | 11 ++++- src/cmdapp/src/DelBitmapCommand.cs | 43 +++++++++++++++++ src/cmdapp/src/FromJsonCommand.cs | 11 ++++- src/cmdapp/src/Program.cs | 4 +- src/cmdapp/src/ToJsonCommand.cs | 11 ++++- src/lib/AdrianKousz.GenieEngine/BitmapUtil.cs | 14 ++++-- src/lib/AdrianKousz.GenieEngine/Scenario.cs | 3 ++ .../ScnDefaultFactory.cs | 10 ++-- 12 files changed, 156 insertions(+), 19 deletions(-) create mode 100644 src/cmdapp/src/AddBitmapCommand.cs create mode 100644 src/cmdapp/src/DelBitmapCommand.cs diff --git a/src/cmdapp/GenieEngineApp.csproj b/src/cmdapp/GenieEngineApp.csproj index b07e203..e1b6083 100644 --- a/src/cmdapp/GenieEngineApp.csproj +++ b/src/cmdapp/GenieEngineApp.csproj @@ -40,6 +40,8 @@ + + @@ -65,6 +67,7 @@ ..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll + diff --git a/src/cmdapp/src/AddBitmapCommand.cs b/src/cmdapp/src/AddBitmapCommand.cs new file mode 100644 index 0000000..a779271 --- /dev/null +++ b/src/cmdapp/src/AddBitmapCommand.cs @@ -0,0 +1,48 @@ +using System.IO; +using System.Drawing; +using System.Drawing.Imaging; +using AdrianKousz.Util; + +namespace AdrianKousz.GenieEngine +{ + public class AddBitmapCommand : BaseCommand + { + override public void Run() + { + using (var input = File.OpenRead(args[0])) + using (var bmpstream = File.OpenRead(args[1])) + using (var output = File.OpenWrite(args[2])) + { + var scn = GenieFile.Deserialize(input); + var bmp = (Bitmap)Image.FromStream(bmpstream); + var cin = scn.Cinematics; + cin.BitmapWidth = bmp.Width; + cin.BitmapHeight = bmp.Height; + cin.BitmapUnknown = Scenario.ScnCinematics.ExpectedUnknownBitmapTrue; + cin.RawBitmap = bmp.ToRawBitmap(); + GenieFile.Serialize(scn, output); + } + } + + override public int GetArgumentCount() + { + return 3; + } + + override public string GetDescription() + { + return "Add a pregame bitmap"; + } + + override public string GetHelp() + { + return "Add a pregame bitmap to a scenario." + + "\nThe bitmap has to be indexed, otherwise, the game will probably crash." + + "\nAdditionally, a game-specific palette will be used to display the image." + + "\n" + + "\nParameters:" + + "\n " + ; + } + } +} diff --git a/src/cmdapp/src/CompressCommand.cs b/src/cmdapp/src/CompressCommand.cs index 86ea72f..fbf0462 100644 --- a/src/cmdapp/src/CompressCommand.cs +++ b/src/cmdapp/src/CompressCommand.cs @@ -1,5 +1,4 @@ using System.IO; -using System.IO.Compression; namespace AdrianKousz.GenieEngine { @@ -23,5 +22,14 @@ namespace AdrianKousz.GenieEngine { return "Recompress a decompressed scenario file"; } + + override public string GetHelp() + { + return "Recompress a previously decompressed scenario file." + + "\n" + + "\nParameters:" + + "\n " + ; + } } } diff --git a/src/cmdapp/src/ConvertCommand.cs b/src/cmdapp/src/ConvertCommand.cs index 69d3b64..a1e3fdd 100644 --- a/src/cmdapp/src/ConvertCommand.cs +++ b/src/cmdapp/src/ConvertCommand.cs @@ -22,8 +22,7 @@ namespace AdrianKousz.GenieEngine srcscn.RawRemaining = refscn.RawRemaining; srcscn.PlayerSettings.ForEach(x => { - x.FilenameAI = "RandomGame"; - x.FilenameCTY = x.FilenamePER = ""; + x.FilenameAI = x.FilenameCTY = x.FilenamePER = "RandomGame"; x.ScriptAI = x.ScriptCTY = x.ScriptPER = ""; }); @@ -48,7 +47,9 @@ namespace AdrianKousz.GenieEngine { return "Convert AOE1 scenario to AOE2" + "\n" - + "\nThe converter needs an existing AOE2 scenario to start with. Use the following arguments:" + + "\nThe converter needs an existing AOE2 scenario to start with." + + "\n" + + "\nParameters:" + "\n " ; } diff --git a/src/cmdapp/src/DecompressCommand.cs b/src/cmdapp/src/DecompressCommand.cs index 7ac8591..c21b301 100644 --- a/src/cmdapp/src/DecompressCommand.cs +++ b/src/cmdapp/src/DecompressCommand.cs @@ -20,7 +20,16 @@ namespace AdrianKousz.GenieEngine override public string GetDescription() { - return "Decompress a scenario file for hex editing"; + return "Decompress a scenario file"; + } + + override public string GetHelp() + { + return "Decompress a scenario file for hex editing." + + "\n" + + "\nParameters:" + + "\n " + ; } } } diff --git a/src/cmdapp/src/DelBitmapCommand.cs b/src/cmdapp/src/DelBitmapCommand.cs new file mode 100644 index 0000000..63e5f5c --- /dev/null +++ b/src/cmdapp/src/DelBitmapCommand.cs @@ -0,0 +1,43 @@ +using System.IO; +using System.Drawing; +using AdrianKousz.Util; + +namespace AdrianKousz.GenieEngine +{ + public class DelBitmapCommand : BaseCommand + { + override public void Run() + { + using (var input = File.OpenRead(args[0])) + using (var output = File.OpenWrite(args[1])) + { + var scn = GenieFile.Deserialize(input); + var cin = scn.Cinematics; + cin.BitmapWidth = 0; + cin.BitmapHeight = 0; + cin.BitmapUnknown = Scenario.ScnCinematics.ExpectedUnknownBitmapFalse; + cin.RawBitmap = new byte[0]; + GenieFile.Serialize(scn, output); + } + } + + override public int GetArgumentCount() + { + return 2; + } + + override public string GetDescription() + { + return "Remove the pregame bitmap"; + } + + override public string GetHelp() + { + return "Remove the pregame bitmap from a scenario." + + "\n" + + "\nParameters:" + + "\n " + ; + } + } +} diff --git a/src/cmdapp/src/FromJsonCommand.cs b/src/cmdapp/src/FromJsonCommand.cs index ef25d9f..7ad9ce8 100644 --- a/src/cmdapp/src/FromJsonCommand.cs +++ b/src/cmdapp/src/FromJsonCommand.cs @@ -25,7 +25,16 @@ namespace AdrianKousz.GenieEngine override public string GetDescription() { - return "Read a JSON file and save as scenario"; + return "Convert a JSON file to a scenario"; + } + + override public string GetHelp() + { + return "Read a Scenario structure formatted as JSON and save it as a Scenario." + + "\n" + + "\nParameters:" + + "\n " + ; } } } diff --git a/src/cmdapp/src/Program.cs b/src/cmdapp/src/Program.cs index 84af326..94b62a9 100644 --- a/src/cmdapp/src/Program.cs +++ b/src/cmdapp/src/Program.cs @@ -26,12 +26,14 @@ namespace AdrianKousz.GenieEngine { var result = new Dictionary>(); result.Add("convert", new ConvertCommand()); + result.Add("addbmp", new AddBitmapCommand()); + result.Add("delbmp", new DelBitmapCommand()); result.Add("compress", new CompressCommand()); result.Add("decompress", new DecompressCommand()); - result.Add("extract", new ExtractCommand()); result.Add("tojson", new ToJsonCommand()); result.Add("fromjson", new FromJsonCommand()); result.Add("dumpunits", new DumpunitsCommand()); + result.Add("extract", new ExtractCommand()); return result; } diff --git a/src/cmdapp/src/ToJsonCommand.cs b/src/cmdapp/src/ToJsonCommand.cs index 54faf2d..50805c7 100644 --- a/src/cmdapp/src/ToJsonCommand.cs +++ b/src/cmdapp/src/ToJsonCommand.cs @@ -25,7 +25,16 @@ namespace AdrianKousz.GenieEngine override public string GetDescription() { - return "Dump a scenario file to JSON"; + return "Convert a scenario to a JSON file"; + } + + override public string GetHelp() + { + return "Save a Scenario structure formatted as JSON." + + "\n" + + "\nParameters:" + + "\n " + ; } } } diff --git a/src/lib/AdrianKousz.GenieEngine/BitmapUtil.cs b/src/lib/AdrianKousz.GenieEngine/BitmapUtil.cs index a1dcdbb..b24b5f4 100644 --- a/src/lib/AdrianKousz.GenieEngine/BitmapUtil.cs +++ b/src/lib/AdrianKousz.GenieEngine/BitmapUtil.cs @@ -2,6 +2,7 @@ using System.IO; using System.Drawing; using System.Drawing.Imaging; +using AdrianKousz.Util; namespace AdrianKousz.GenieEngine { @@ -11,11 +12,11 @@ namespace AdrianKousz.GenieEngine { EnsureLittleEndian(); - var temp = new byte[40]; - input.Read(temp, 0, temp.Length); + var temp = input.ReadBytes(40); var dibHeaderLength = BitConverter.ToInt32(temp, 0); - var paletteLength = BitConverter.ToInt32(temp, 32) * 4; + var bitDepth = BitConverter.ToInt32(temp, 14); + var paletteLength = bitDepth > 8 ? 0 : (1 << bitDepth) * 4; var pixelArrayLength = BitConverter.ToInt32(temp, 20); var resultLength = dibHeaderLength + paletteLength + pixelArrayLength; @@ -37,7 +38,8 @@ namespace AdrianKousz.GenieEngine var bmpHeaderLength = 14; var dibHeaderLength = BitConverter.ToInt32(input, 0); - var paletteLength = BitConverter.ToInt32(input, 32) * 4; + var bitDepth = BitConverter.ToInt32(input, 14); + var paletteLength = bitDepth > 8 ? 0 : (1 << bitDepth) * 4; var pixelArrayOffsetOutput = bmpHeaderLength + dibHeaderLength + paletteLength; var resultLength = input.Length + bmpHeaderLength; @@ -61,10 +63,12 @@ namespace AdrianKousz.GenieEngine var bmpHeaderLength = 14; var tempstream = new MemoryStream(); input.Save(tempstream, ImageFormat.Bmp); + tempstream.Dispose(); var temp = tempstream.ToArray(); var dibHeaderLength = BitConverter.ToInt32(temp, 0 + bmpHeaderLength); - var paletteLength = BitConverter.ToInt32(temp, 32 + bmpHeaderLength) * 4; + var bitDepth = BitConverter.ToInt32(temp, 14 + bmpHeaderLength); + var paletteLength = bitDepth > 8 ? 0 : (1 << bitDepth) * 4; var pixelArrayOffsetInput = BitConverter.ToInt32(temp, 10); var pixelArrayLength = temp.Length - pixelArrayOffsetInput; var resultLength = dibHeaderLength + paletteLength + pixelArrayLength; diff --git a/src/lib/AdrianKousz.GenieEngine/Scenario.cs b/src/lib/AdrianKousz.GenieEngine/Scenario.cs index a801b51..ee1efef 100644 --- a/src/lib/AdrianKousz.GenieEngine/Scenario.cs +++ b/src/lib/AdrianKousz.GenieEngine/Scenario.cs @@ -98,6 +98,9 @@ namespace AdrianKousz.GenieEngine public class ScnCinematics { + public const Int16 ExpectedUnknownBitmapTrue = -1; + public const Int16 ExpectedUnknownBitmapFalse = 1; + public String FilenamePregame; public String FilenameVictory; public String FilenameLoss; diff --git a/src/lib/AdrianKousz.GenieEngine/ScnDefaultFactory.cs b/src/lib/AdrianKousz.GenieEngine/ScnDefaultFactory.cs index 8bea630..3fa4e47 100644 --- a/src/lib/AdrianKousz.GenieEngine/ScnDefaultFactory.cs +++ b/src/lib/AdrianKousz.GenieEngine/ScnDefaultFactory.cs @@ -50,12 +50,9 @@ namespace AdrianKousz.GenieEngine result.UnknownInfo = Scenario.ScnPlayerSettings.ExpectedUnknownInfo; result.UnknownResource = Scenario.ScnPlayerSettings.ExpectedUnknownResource; result.Name = "Player"; - result.FilenameAI = ""; - result.FilenameCTY = ""; - result.FilenamePER = ""; - result.ScriptAI = ""; - result.ScriptCTY = ""; - result.ScriptPER = ""; + result.NameStringID = -1; + result.FilenameAI = result.FilenameCTY = result.FilenamePER = "RandomGame"; + result.ScriptAI = result.ScriptCTY = result.ScriptPER = ""; result.AIType = 1; result.ResourceWood = 200; result.ResourceFood = 200; @@ -91,6 +88,7 @@ namespace AdrianKousz.GenieEngine result.FilenameVictory = ""; result.FilenameLoss = ""; result.FilenameBitmap = ""; + result.BitmapUnknown = Scenario.ScnCinematics.ExpectedUnknownBitmapFalse; result.RawBitmap = new byte[0]; return result; } From 35d80a65852f777221459f5062f39e9e483b9cd3 Mon Sep 17 00:00:00 2001 From: Adrian Date: Mon, 22 Feb 2016 16:41:47 +0100 Subject: [PATCH 2/5] Change SByte to Byte, change usage of utils API --- src/lib/AdrianKousz.GenieEngine/Scenario.cs | 20 +++++++++---------- .../ScnSerializerReader.cs | 12 +++++------ .../ScnSerializerWriter.cs | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/lib/AdrianKousz.GenieEngine/Scenario.cs b/src/lib/AdrianKousz.GenieEngine/Scenario.cs index ee1efef..3a9666b 100644 --- a/src/lib/AdrianKousz.GenieEngine/Scenario.cs +++ b/src/lib/AdrianKousz.GenieEngine/Scenario.cs @@ -14,7 +14,7 @@ namespace AdrianKousz.GenieEngine public const Int32 ExpectedUnknown1 = 2; public const Int32 ExpectedUnknown2 = 0; public const Int32 ExpectedUnknown3 = 1; - public const SByte ExpectedUnknown4 = 0; + public const Byte ExpectedUnknown4 = 0; public const Single ExpectedUnknown5 = -1; public String VersionString; @@ -43,7 +43,7 @@ namespace AdrianKousz.GenieEngine public Int32 Unknown1; public Int32 Unknown2; public Int32 Unknown3; - public SByte Unknown4; + public Byte Unknown4; public Single Unknown5; public class ScnPlayerSettings @@ -64,7 +64,7 @@ namespace AdrianKousz.GenieEngine public String ScriptAI; public String ScriptCTY; public String ScriptPER; - public SByte AIType; + public Byte AIType; public Int32 ResourceWood; public Int32 ResourceFood; @@ -151,13 +151,13 @@ namespace AdrianKousz.GenieEngine public struct Tile { - public const Int32 ExpectedUnknown = 0; + public const Byte ExpectedUnknown = 0; - public SByte Id; - public SByte Elevation; - public SByte Unknown; + public Byte Id; + public Byte Elevation; + public Byte Unknown; - public Tile(SByte id, SByte el, SByte un) + public Tile(Byte id, Byte el, Byte un) { Id = id; Elevation = el; @@ -169,7 +169,7 @@ namespace AdrianKousz.GenieEngine public class ScnUnit { public const Single ExpectedUnknown1 = 1; - public const SByte ExpectedUnknown2 = 2; + public const Byte ExpectedUnknown2 = 2; public Single PosX; public Single PosY; @@ -179,7 +179,7 @@ namespace AdrianKousz.GenieEngine public Int16 InitialFrame; public Int32 GarrisonnedInId; public Single Unknown1; - public SByte Unknown2; + public Byte Unknown2; } } } diff --git a/src/lib/AdrianKousz.GenieEngine/ScnSerializerReader.cs b/src/lib/AdrianKousz.GenieEngine/ScnSerializerReader.cs index be74a27..9d4d967 100644 --- a/src/lib/AdrianKousz.GenieEngine/ScnSerializerReader.cs +++ b/src/lib/AdrianKousz.GenieEngine/ScnSerializerReader.cs @@ -72,7 +72,7 @@ namespace AdrianKousz.GenieEngine }); result.Unknown3 = reader.ReadInt32(); - result.Unknown4 = reader.ReadSByte(); + result.Unknown4 = reader.ReadByte(); result.Unknown5 = reader.ReadSingle(); result.Filename = reader.ReadStringInt16(); @@ -139,7 +139,7 @@ namespace AdrianKousz.GenieEngine if (Version >= 1.18f) { result.PlayerSettings.ForEach(x => { - x.AIType = reader.ReadSByte(); + x.AIType = reader.ReadByte(); }); } @@ -217,7 +217,7 @@ namespace AdrianKousz.GenieEngine result.Map.SizeY = reader.ReadInt32(); result.Map.LinearTiles = new Scenario.ScnMap.Tile[result.Map.SizeX * result.Map.SizeY] - .Fill(() => new Scenario.ScnMap.Tile(reader.ReadSByte(), reader.ReadSByte(), reader.ReadSByte())); + .Fill(() => new Scenario.ScnMap.Tile(reader.ReadByte(), reader.ReadByte(), reader.ReadByte())); // ResourceCopies @@ -248,21 +248,21 @@ namespace AdrianKousz.GenieEngine result.Units.ForEach(x => { var count = reader.ReadInt32(); - x.Fill(() => { + x.Fill(count, () => { var unit = factory.MakeUnit(); unit.PosX = reader.ReadSingle(); unit.PosY = reader.ReadSingle(); unit.Unknown1 = reader.ReadSingle(); unit.Id = reader.ReadInt32(); unit.UnitId = reader.ReadInt16(); - unit.Unknown2 = reader.ReadSByte(); + unit.Unknown2 = reader.ReadByte(); unit.Rotation = reader.ReadSingle(); if (Version >= 1.18f) { unit.InitialFrame = reader.ReadInt16(); unit.GarrisonnedInId = reader.ReadInt32(); } return unit; - }, count); + }); }); // More Player Settings and Triggers diff --git a/src/lib/AdrianKousz.GenieEngine/ScnSerializerWriter.cs b/src/lib/AdrianKousz.GenieEngine/ScnSerializerWriter.cs index 011341d..082a0f3 100644 --- a/src/lib/AdrianKousz.GenieEngine/ScnSerializerWriter.cs +++ b/src/lib/AdrianKousz.GenieEngine/ScnSerializerWriter.cs @@ -43,7 +43,7 @@ namespace AdrianKousz.GenieEngine // PlayerSettings 1 value.PlayerSettings.ForEach(x => { - writer.WriteStringPadded(x.Name, 256); + writer.WriteZString(x.Name, 256); }); if (Version >= 1.18f) { From 48929d1fbf420e03c53b30c324244c5dea5f6555 Mon Sep 17 00:00:00 2001 From: Adrian Date: Mon, 22 Feb 2016 16:45:55 +0100 Subject: [PATCH 3/5] Full Campaign reading/writing support --- src/lib/AdrianKousz.GenieEngine/Campaign.cs | 20 ++++++ src/lib/AdrianKousz.GenieEngine/CpnReader.cs | 52 --------------- .../CpnSerializerReader.cs | 64 +++++++++++++++++++ .../CpnSerializerWriter.cs | 50 +++++++++++++++ src/lib/AdrianKousz.GenieEngine/GenieFile.cs | 36 ++++++++--- src/lib/GenieEngineLib.csproj | 4 +- 6 files changed, 163 insertions(+), 63 deletions(-) create mode 100644 src/lib/AdrianKousz.GenieEngine/Campaign.cs delete mode 100644 src/lib/AdrianKousz.GenieEngine/CpnReader.cs create mode 100644 src/lib/AdrianKousz.GenieEngine/CpnSerializerReader.cs create mode 100644 src/lib/AdrianKousz.GenieEngine/CpnSerializerWriter.cs diff --git a/src/lib/AdrianKousz.GenieEngine/Campaign.cs b/src/lib/AdrianKousz.GenieEngine/Campaign.cs new file mode 100644 index 0000000..6393031 --- /dev/null +++ b/src/lib/AdrianKousz.GenieEngine/Campaign.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; + +namespace AdrianKousz.GenieEngine +{ + public class Campaign + { + public String Version; + public String Name; + public IList Files; + + public class CpnFile + { + public String Name; + public String Filename; + public byte[] RawData; + public Scenario Data; + } + } +} diff --git a/src/lib/AdrianKousz.GenieEngine/CpnReader.cs b/src/lib/AdrianKousz.GenieEngine/CpnReader.cs deleted file mode 100644 index 4b96cee..0000000 --- a/src/lib/AdrianKousz.GenieEngine/CpnReader.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.IO; -using AdrianKousz.Util; - -namespace AdrianKousz.GenieEngine -{ - public class CpnReader - { - private static readonly string TAG = typeof(CpnReader).Name; - - private ExtendedBinaryReader reader; - - public CpnReader(Stream input) - { - reader = new ExtendedBinaryReader(input, Scenario.Encoding); - } - - public void ExtractFiles() - { - var version = reader.ReadString(4); - if (!version.Equals("1.00")) { - throw new System.NotSupportedException(version); - } - - var name = reader.ReadZString(256); - var count = reader.ReadInt32(); - Log.i(TAG, "Extract scenarios from \"{0}\"", name); - - var size = new int[count]; - var offset = new int[count]; - var scenname = new string[count]; - var filename = new string[count]; - - for (var i = 0; i < count; i++) { - size[i] = reader.ReadInt32(); - offset[i] = reader.ReadInt32(); - scenname[i] = reader.ReadZString(255); - filename[i] = reader.ReadZString(257); - } - - for (var i = 0; i < count; i++) { - Log.i(TAG, "Extract scenario {0} \"{1}\" to {2}", i, scenname[i], filename[i]); - - using (var file = File.OpenWrite(filename[i])) { - reader.BaseStream.Seek(offset[i], SeekOrigin.Begin); - var data = reader.ReadBytes(size[i]); - file.Write(data, 0, data.Length); - } - } - } - } -} - diff --git a/src/lib/AdrianKousz.GenieEngine/CpnSerializerReader.cs b/src/lib/AdrianKousz.GenieEngine/CpnSerializerReader.cs new file mode 100644 index 0000000..096e920 --- /dev/null +++ b/src/lib/AdrianKousz.GenieEngine/CpnSerializerReader.cs @@ -0,0 +1,64 @@ +using System; +using System.IO; +using AdrianKousz.Util; + +namespace AdrianKousz.GenieEngine +{ + internal class CpnSerializerReader + { + private static readonly string TAG = typeof(CpnSerializerReader).Name; + + public static CpnSerializerReader CreateDefault() + { + return new CpnSerializerReader(); + } + + private CpnSerializerReader() + { + } + + public Campaign ReadCampaign(ExtendedBinaryReader reader) + { + var number = 0; + var result = new Campaign(); + + result.Version = reader.ReadString(4); + if (!result.Version.Equals("1.00")) { + Log.w(TAG, "Continue reading unsupported version {0}", result.Version); + } + + result.Name = reader.ReadZString(256); + number = reader.ReadInt32(); + + result.Files = new PositionInfo() + .CreateList() + .Fill(number, () => { + return new PositionInfo { + Size = reader.ReadInt32(), + Offset = reader.ReadInt32(), + Name = reader.ReadZString(255), + Filename = reader.ReadZString(257), + }; + }) + .Map(x => { + var file = new Campaign.CpnFile(); + reader.BaseStream.Seek(x.Offset, SeekOrigin.Begin); + file.RawData = reader.ReadBytes(x.Size); + file.Name = x.Name; + file.Filename = x.Filename; + return file; + }) + .ToArray(); + + return result; + } + + private class PositionInfo + { + public int Size; + public int Offset; + public string Name; + public string Filename; + } + } +} diff --git a/src/lib/AdrianKousz.GenieEngine/CpnSerializerWriter.cs b/src/lib/AdrianKousz.GenieEngine/CpnSerializerWriter.cs new file mode 100644 index 0000000..b15b5e3 --- /dev/null +++ b/src/lib/AdrianKousz.GenieEngine/CpnSerializerWriter.cs @@ -0,0 +1,50 @@ +using System; +using AdrianKousz.Util; + +namespace AdrianKousz.GenieEngine +{ + internal class CpnSerializerWriter + { + private static readonly string TAG = typeof(CpnSerializerWriter).Name; + + public static CpnSerializerWriter CreateDefault() + { + return new CpnSerializerWriter(); + } + + private CpnSerializerWriter() + { + } + + public void Write(ExtendedBinaryWriter writer, Campaign value) + { + var number = 0; + + if (!value.Version.Equals("1.00")) { + Log.w(TAG, "Continue writing unsupported version {0}", value.Version); + } + + var headerSize = 8 + 256; + var listingSize = 8 + 255 + 257; + var listingLength = listingSize * value.Files.Count; + + number = headerSize + listingLength; + + writer.WriteStringRaw(value.Version); + writer.WriteZString(value.Name, 256); + writer.Write((Int32)value.Files.Count); + + value.Files.ForEach(x => { + writer.Write((Int32)x.RawData.Length); + writer.Write((Int32)number); + writer.WriteZString(x.Name, 255); + writer.WriteZString(x.Filename, 257); + number += x.RawData.Length; + }); + + value.Files.ForEach(x => { + writer.Write(x.RawData); + }); + } + } +} diff --git a/src/lib/AdrianKousz.GenieEngine/GenieFile.cs b/src/lib/AdrianKousz.GenieEngine/GenieFile.cs index 8d68a17..cb8a40e 100644 --- a/src/lib/AdrianKousz.GenieEngine/GenieFile.cs +++ b/src/lib/AdrianKousz.GenieEngine/GenieFile.cs @@ -21,13 +21,22 @@ namespace AdrianKousz.GenieEngine public static void Serialize(T value, Stream output) { - var scenarioValue = value as Scenario; - if (scenarioValue != null) { + var scnValue = value as Scenario; + if (scnValue != null) { var scnwriter = ScnSerializerWriter.CreateDefault(); - using (var stream = new NonDisposingStreamWrapper(output)) - using (var writer = GetWriter(stream)) + using (var writer = GetWriter(output)) { - scnwriter.Write(writer, scenarioValue); + scnwriter.Write(writer, scnValue); + return; + } + } + + var cpnValue = value as Campaign; + if (cpnValue != null) { + var cpnwriter = CpnSerializerWriter.CreateDefault(); + using (var writer = GetWriter(output)) + { + cpnwriter.Write(writer, cpnValue); return; } } @@ -61,13 +70,20 @@ namespace AdrianKousz.GenieEngine { if (type == typeof(Scenario)) { var scnreader = ScnSerializerReader.CreateDefault(); - using (var stream = new NonDisposingStreamWrapper(input)) - using (var reader = GetReader(stream)) + using (var reader = GetReader(input)) { return scnreader.ReadScenario(reader); } } + if (type == typeof(Campaign)) { + var cpnreader = CpnSerializerReader.CreateDefault(); + using (var reader = GetReader(input)) + { + return cpnreader.ReadCampaign(reader); + } + } + throw new System.ArgumentException("Unsupported Type"); } @@ -77,12 +93,12 @@ namespace AdrianKousz.GenieEngine public static ExtendedBinaryReader GetReader(Stream stream) { - return new ExtendedBinaryReader(stream, Scenario.Encoding); + return new ExtendedBinaryReader(new NonDisposingStreamWrapper(stream), Scenario.Encoding); } public static ExtendedBinaryWriter GetWriter(Stream stream) { - return new ExtendedBinaryWriter(stream, Scenario.Encoding); + return new ExtendedBinaryWriter(new NonDisposingStreamWrapper(stream), Scenario.Encoding); } public static void ScenarioCompression(Stream input, Stream output, bool decompress) @@ -98,7 +114,7 @@ namespace AdrianKousz.GenieEngine | buffer[5] << 8 | buffer[6] << 16 | buffer[7] << 24 - ; + ; buffer = input.ReadBytes(headerLength); output.Write(buffer); diff --git a/src/lib/GenieEngineLib.csproj b/src/lib/GenieEngineLib.csproj index ce8797e..a7f6110 100644 --- a/src/lib/GenieEngineLib.csproj +++ b/src/lib/GenieEngineLib.csproj @@ -33,7 +33,6 @@ - @@ -41,6 +40,9 @@ + + + From 9cc13f0e8d112d24083be566a9829aeee938c409 Mon Sep 17 00:00:00 2001 From: Adrian Date: Mon, 22 Feb 2016 17:02:44 +0100 Subject: [PATCH 4/5] Campaign support and bitmap to map conversion in application * Full Campaign reading/writing support * Convert bitmaps to maps * Command arguments reordering: input and output are always first * Adapt usage of utils API --- src/cmdapp/GenieEngineApp.csproj | 6 ++- src/cmdapp/src/AddBitmapCommand.cs | 6 +-- src/cmdapp/src/BitmapHelpers.cs | 73 ++++++++++++++++++++++++++++++ src/cmdapp/src/Bmp2MapCommand.cs | 51 +++++++++++++++++++++ src/cmdapp/src/ConvertCommand.cs | 8 ++-- src/cmdapp/src/CopymapConverter.cs | 44 ++++++++---------- src/cmdapp/src/DumpunitsCommand.cs | 7 +-- src/cmdapp/src/ExtractCommand.cs | 18 ++++++-- src/cmdapp/src/PackCommand.cs | 47 +++++++++++++++++++ src/cmdapp/src/Program.cs | 3 ++ 10 files changed, 222 insertions(+), 41 deletions(-) create mode 100644 src/cmdapp/src/BitmapHelpers.cs create mode 100644 src/cmdapp/src/Bmp2MapCommand.cs create mode 100644 src/cmdapp/src/PackCommand.cs diff --git a/src/cmdapp/GenieEngineApp.csproj b/src/cmdapp/GenieEngineApp.csproj index e1b6083..c09987b 100644 --- a/src/cmdapp/GenieEngineApp.csproj +++ b/src/cmdapp/GenieEngineApp.csproj @@ -19,15 +19,16 @@ 4 true x86 + true - full true ..\..\bin\Release prompt 4 true x86 + true @@ -42,6 +43,9 @@ + + + diff --git a/src/cmdapp/src/AddBitmapCommand.cs b/src/cmdapp/src/AddBitmapCommand.cs index a779271..c910fd9 100644 --- a/src/cmdapp/src/AddBitmapCommand.cs +++ b/src/cmdapp/src/AddBitmapCommand.cs @@ -10,8 +10,8 @@ namespace AdrianKousz.GenieEngine override public void Run() { using (var input = File.OpenRead(args[0])) - using (var bmpstream = File.OpenRead(args[1])) - using (var output = File.OpenWrite(args[2])) + using (var output = File.OpenWrite(args[1])) + using (var bmpstream = File.OpenRead(args[2])) { var scn = GenieFile.Deserialize(input); var bmp = (Bitmap)Image.FromStream(bmpstream); @@ -41,7 +41,7 @@ namespace AdrianKousz.GenieEngine + "\nAdditionally, a game-specific palette will be used to display the image." + "\n" + "\nParameters:" - + "\n " + + "\n " ; } } diff --git a/src/cmdapp/src/BitmapHelpers.cs b/src/cmdapp/src/BitmapHelpers.cs new file mode 100644 index 0000000..f4dc23a --- /dev/null +++ b/src/cmdapp/src/BitmapHelpers.cs @@ -0,0 +1,73 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using AdrianKousz.Util; + +namespace AdrianKousz.GenieEngine +{ + public static class BitmapHelpers + { + public static unsafe void FillMap(Scenario scn, Bitmap bmp, Bitmap bmp2) + { + using (var ubmp = new UnsafeBitmap(bmp)) + using (var ubmp2 = new UnsafeBitmap(bmp2)) + { + var factory = new ScnDefaultFactory(); + + Check(ubmp); + Check(ubmp2); + + var ptr = ubmp.Scan0; + var last = ptr + ubmp.Stride * ubmp.Height; + + var ptr2 = ubmp2.Scan0; + var last2 = ptr2 + ubmp2.Stride * ubmp2.Height; + + var map = factory.MakeMap(); + map.SizeX = ubmp.Width; + map.SizeY = ubmp.Height; + map.LinearTiles = new Scenario.ScnMap.Tile[map.SizeX * map.SizeY]; + + var gaiaunits = new List(); + + var treemapping = new short[256]; + treemapping[10] = 411; + treemapping[13] = 351; + treemapping[17] = 414; + treemapping[18] = 348; + treemapping[19] = 350; + treemapping[20] = 349; + + var i = 0; + while (ptr < last && ptr2 < last2) { + var treeid = treemapping[*ptr]; + if (treeid != 0) { + var unit = factory.MakeUnit(); + var posy = i / map.SizeX; + var posx = i - (posy * map.SizeX); + unit.UnitId = treeid; + unit.PosX = posx + 0.5f; + unit.PosY = posy + 0.5f; + unit.Rotation = (short)Util.Math.Rand(0, 13); + gaiaunits.Add(unit); + } + map.LinearTiles[i++] = new Scenario.ScnMap.Tile(*ptr++, (byte)(*ptr2++ / 37), 0); + } + + scn.Map = map; + scn.Units[0] = gaiaunits; + } + } + + private static void Check(UnsafeBitmap ubmp) + { + if (ubmp.PixelFormat != PixelFormat.Format8bppIndexed) + throw new ArgumentException("Unsupported PixelFormat"); + if (ubmp.Stride != ubmp.Width) + throw new NotImplementedException("bmpbit.Stride != bmpbit.Width"); + } + } +} + diff --git a/src/cmdapp/src/Bmp2MapCommand.cs b/src/cmdapp/src/Bmp2MapCommand.cs new file mode 100644 index 0000000..9946a28 --- /dev/null +++ b/src/cmdapp/src/Bmp2MapCommand.cs @@ -0,0 +1,51 @@ +using System; +using System.IO; +using System.Drawing; +using AdrianKousz.Util; + +namespace AdrianKousz.GenieEngine +{ + public class Bmp2MapCommand : BaseCommand + { + override public void Run() + { + using (var srcstream = File.OpenRead(args[0])) + using (var outstream = File.OpenWrite(args[1])) + using (var bmpstream = File.OpenRead(args[2])) + using (var bmp2stream = File.OpenRead(args[3])) + { + var bmp = (Bitmap)Image.FromStream(bmpstream); + var bmp2 = (Bitmap)Image.FromStream(bmp2stream); + + var scn = GenieFile.Deserialize(srcstream); + BitmapHelpers.FillMap(scn, bmp, bmp2); + GenieFile.Serialize(scn, outstream); + } + } + + override public int GetArgumentCount() + { + return 4; + } + + override public string GetDescription() + { + return "Generate a scenario map based on bitmaps"; + } + + override public string GetHelp() + { + return "Generate a scenario map based on bitmaps with automatic forest generation." + + "\n" + + "\nTwo bitmaps need to be specified: One terrain map and one elevation map." + + "\nBoth bitmaps need to be indexed or grayscale." + + "\nThe index/gray values of the first bitmap are translated directly to a terrain ID." + + "\nThe index/gray values of the second bitmap are divided by 37 to generate elevations 0-6." + + "\n" + + "\nParameters:" + + "\n " + ; + } + } +} + diff --git a/src/cmdapp/src/ConvertCommand.cs b/src/cmdapp/src/ConvertCommand.cs index a1e3fdd..723b9a4 100644 --- a/src/cmdapp/src/ConvertCommand.cs +++ b/src/cmdapp/src/ConvertCommand.cs @@ -8,9 +8,9 @@ namespace AdrianKousz.GenieEngine { override public void Run() { - using (var refstream = File.OpenRead(args[0])) - using (var srcstream = File.OpenRead(args[1])) - using (var outstream = File.OpenWrite(args[2])) + using (var srcstream = File.OpenRead(args[0])) + using (var outstream = File.OpenWrite(args[1])) + using (var refstream = File.OpenRead(args[2])) { var refscn = GenieFile.Deserialize(refstream); var srcscn = GenieFile.Deserialize(srcstream); @@ -50,7 +50,7 @@ namespace AdrianKousz.GenieEngine + "\nThe converter needs an existing AOE2 scenario to start with." + "\n" + "\nParameters:" - + "\n " + + "\n " ; } } diff --git a/src/cmdapp/src/CopymapConverter.cs b/src/cmdapp/src/CopymapConverter.cs index 2bd5d17..d2d74f3 100644 --- a/src/cmdapp/src/CopymapConverter.cs +++ b/src/cmdapp/src/CopymapConverter.cs @@ -26,9 +26,9 @@ namespace AdrianKousz.GenieEngine // Other Buildings 109, 68, 103, }; - units.ForEach((i, list) => { - list.ForEach((j, unit) => { - mapping.ForEach((k, buildingid) => { + units.ForEach(list => { + list.ForEach(unit => { + mapping.ForEach(buildingid => { if (unit.UnitId == buildingid) { unit.PosX -= 0.5f; unit.PosY -= 0.5f; @@ -43,7 +43,7 @@ namespace AdrianKousz.GenieEngine */ private List[] ChangeUnits_AOE1_AOE2(IList[] units) { - var array = new int[] { + var mapping = new short[] { // Resources 66, 66, 59, 59, @@ -139,22 +139,15 @@ namespace AdrianKousz.GenieEngine 114, 114, 121, 121, 129, 129, - }; - var mapping = new Dictionary(); - var ai = 0; - while (ai < array.Length) - mapping.Add((short)array[ai++], (short)array[ai++]); + }.ToDictionary(); - var result = new List[Scenario.NumPlayerSections].Fill(); - - units.ForEach((i, list) => { - list.ForEach((j, unit) => { - if (mapping.ContainsKey(unit.UnitId)) { - unit.UnitId = mapping[unit.UnitId]; - result[i].Add(unit); - } - }); - }); + var result = units.Map(list => { + return list + .Filter(unit => mapping.ContainsKey(unit.UnitId)) + .ForEach(unit => { + unit.UnitId = mapping[unit.UnitId]; + }).ToList(); + }).ToArray(); return result; } @@ -164,8 +157,8 @@ namespace AdrianKousz.GenieEngine */ private void ChangeTiles_AOE1_AOE2(IList[] units, Scenario.ScnMap map) { - units.ForEach((i, list) => { - list.ForEach((j, unit) => { + units.ForEach(list => { + list.ForEach(unit => { var posx = (int)(unit.PosX - 0.5); var posy = (int)(unit.PosY - 0.5); var linearpos = posy * map.SizeX + posx; @@ -203,12 +196,11 @@ namespace AdrianKousz.GenieEngine var treeids = new int[] { 411, 351, 414, 350, 348, 349, }; - units.ForEach((i, list) => { - list.ForEach((j, unit) => { - treeids.ForEach((k, treeid) => { + units.ForEach(list => { + list.ForEach(unit => { + treeids.ForEach(treeid => { if (unit.UnitId == treeid) { - unit.InitialFrame = (short)Util.Math.Rand(0, 13); // Whats the maximum? - unit.Rotation = unit.InitialFrame; + unit.Rotation = (short)Util.Math.Rand(0, 13); // Whats the maximum? } }); }); diff --git a/src/cmdapp/src/DumpunitsCommand.cs b/src/cmdapp/src/DumpunitsCommand.cs index a85101a..56eca5e 100644 --- a/src/cmdapp/src/DumpunitsCommand.cs +++ b/src/cmdapp/src/DumpunitsCommand.cs @@ -17,9 +17,10 @@ namespace AdrianKousz.GenieEngine Console.WriteLine("{0,-8} {1,-8} {2,-8} {3}", "ID", "UnitID", "TileID", "Position"); Console.WriteLine(); - scn.Units.ForEach((i, list) => { - Console.WriteLine("Units of player {0}:", i); - list.ForEach((j, unit) => { + var i = 0; + scn.Units.ForEach(list => { + Console.WriteLine("Units of player {0}:", i++); + list.ForEach(unit => { var tilex = (int)(unit.PosX - 0.5); var tiley = (int)(unit.PosY - 0.5); var tile = scn.Map.LinearTiles[tiley * scn.Map.SizeX + tilex]; diff --git a/src/cmdapp/src/ExtractCommand.cs b/src/cmdapp/src/ExtractCommand.cs index 7745852..514d895 100644 --- a/src/cmdapp/src/ExtractCommand.cs +++ b/src/cmdapp/src/ExtractCommand.cs @@ -1,4 +1,6 @@ +using System; using System.IO; +using AdrianKousz.Util; namespace AdrianKousz.GenieEngine { @@ -6,9 +8,17 @@ namespace AdrianKousz.GenieEngine { override public void Run() { - using (var file = File.OpenRead(args[0])) { - var reader = new CpnReader(file); - reader.ExtractFiles(); + using (var file = File.OpenRead(args[0])) + { + var cpn = GenieFile.Deserialize(file); + Console.WriteLine("Extracting \"{0}\"...", cpn.Name); + cpn.Files.ForEach(x => { + using (var outfile = File.OpenWrite(x.Filename)) + { + Console.WriteLine("Extracting \"{0}\" to \"{1}\"...", x.Name, x.Filename); + outfile.Write(x.RawData); + } + }); } } @@ -19,7 +29,7 @@ namespace AdrianKousz.GenieEngine override public string GetDescription() { - return "Extract scenarios from campaign file"; + return "Extract files from campaign file"; } } } diff --git a/src/cmdapp/src/PackCommand.cs b/src/cmdapp/src/PackCommand.cs new file mode 100644 index 0000000..57acae8 --- /dev/null +++ b/src/cmdapp/src/PackCommand.cs @@ -0,0 +1,47 @@ +using System.IO; +using System.Collections.Generic; +using AdrianKousz.Util; + +namespace AdrianKousz.GenieEngine +{ + public class PackCommand : BaseCommand + { + override public void Run() + { + var files = new List(); + for (var i = 2; i < args.Length; i++) { + var file = new Campaign.CpnFile(); + file.Filename = args[i]; + file.Name = Path.GetFileNameWithoutExtension(file.Filename); + using (var stream = File.OpenRead(file.Filename)) + using (var memorystream = new MemoryStream()) + { + stream.CopyTo(memorystream); + file.RawData = memorystream.ToArray(); + } + files.Add(file); + } + + var cpn = new Campaign(); + cpn.Files = files; + cpn.Name = args[1]; + cpn.Version = "1.00"; + + using (var file = File.OpenWrite(args[0])) + { + GenieFile.Serialize(cpn, file); + } + } + + override public int GetArgumentCount() + { + return 3; + } + + override public string GetDescription() + { + return "Pack files into a campaign file"; + } + } +} + diff --git a/src/cmdapp/src/Program.cs b/src/cmdapp/src/Program.cs index 94b62a9..346cafd 100644 --- a/src/cmdapp/src/Program.cs +++ b/src/cmdapp/src/Program.cs @@ -8,6 +8,7 @@ namespace AdrianKousz.GenieEngine public static void Main(string[] args) { System.Threading.Thread.CurrentThread.Name = "main"; + Log.SetUncaughtExceptionHandler(); if (System.Diagnostics.Debugger.IsAttached) { debug(); @@ -26,6 +27,7 @@ namespace AdrianKousz.GenieEngine { var result = new Dictionary>(); result.Add("convert", new ConvertCommand()); + result.Add("bmp2map", new Bmp2MapCommand()); result.Add("addbmp", new AddBitmapCommand()); result.Add("delbmp", new DelBitmapCommand()); result.Add("compress", new CompressCommand()); @@ -34,6 +36,7 @@ namespace AdrianKousz.GenieEngine result.Add("fromjson", new FromJsonCommand()); result.Add("dumpunits", new DumpunitsCommand()); result.Add("extract", new ExtractCommand()); + result.Add("pack", new PackCommand()); return result; } From d1593f38c5e1adaf466cd23a5d592b06d96f4235 Mon Sep 17 00:00:00 2001 From: Adrian Date: Mon, 22 Feb 2016 17:11:48 +0100 Subject: [PATCH 5/5] Update documentation --- README.md | 20 ++++++++++++++++---- doc/GeneratedMap.jpg | Bin 0 -> 82191 bytes 2 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 doc/GeneratedMap.jpg diff --git a/README.md b/README.md index 5117cad..6773b39 100644 --- a/README.md +++ b/README.md @@ -10,25 +10,37 @@ This includes the *Age of Empires* series and *Star Wars: Galactic Battlegrounds ## Features +* Create maps from bitmaps * Convert AOE1 Scenario to AOE2 Scenario * Convert a Scenario file to JSON and vice-versa * Decompress and recompress compressed Scenario part for hex editing * Dump unit information to easily gather Unit IDs -* Extract Scenario files from Campaign file +* Full Campaign file editing ## Planned Features -* Create maps from bitmaps * Trigger implementation * Full conversion between all Scenario versions (mapping of Unit IDs are needed for this, see Section Contributing) ## Examples +### Map Generation + +![Generated Map](doc/GeneratedMap.jpg) + +The above map is generated using: + + $ GenieEdit.exe bmp2map files/examples/aoe2x-Empty.scx Europe.scx /tmp/terrain.png /tmp/elevation.png + +The images are taken from [NASA's Blue Marble](http://visibleearth.nasa.gov/) imagery. + +### Scenario Conversion + [OpeningMoves-AOE2.scx](files/OpeningMoves-AOE2.scx) is a fully automated conversion of a Scenario file from the AOE1 demo version: - $ GenieEdit.exe convert files/examples/aoe2x-Empty.scx "files/examples/aoe1demo-Reigno_1-Opening Moves.scn" files/OpeningMoves-AOE2.scx + $ GenieEdit.exe convert "files/examples/aoe1demo-Reigno_1-Opening Moves.scn" files/OpeningMoves-AOE2.scx files/examples/aoe2x-Empty.scx (Stone are set to 100 to be able to build a town center from the beginning.) @@ -47,7 +59,7 @@ A unit dump looks like the following: # Library The namespace `AdrianKousz.GenieEngine` contains classes -to read, write, and manipulate Scenario files. +to read, write, and manipulate Scenario and Campaign files. `Scenario` contains all data structures related to a Scenario file. They are easily understandable. diff --git a/doc/GeneratedMap.jpg b/doc/GeneratedMap.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90e6c54ef9c9b15a315ebc816b0042d84ed9d8ac GIT binary patch literal 82191 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 l*p<5O$&v%wkAgeVPt)FBxy3Sj