put d2k mod stuff into it's own branch
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||
* Copyright 2007-2012 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,
|
||||
@@ -104,6 +104,116 @@ namespace OpenRA.Utility
|
||||
}
|
||||
}
|
||||
|
||||
public static void ConvertR8ToPng(string[] args)
|
||||
{
|
||||
var srcImage = new R8Reader(File.OpenRead(args[1]));
|
||||
var shouldRemap = args.Contains("--transparent");
|
||||
var palette = Palette.Load(args[2], shouldRemap);
|
||||
var startFrame = int.Parse(args[3]);
|
||||
var endFrame = int.Parse(args[4]) + 1;
|
||||
var filename = args[5];
|
||||
var FrameCount = endFrame - startFrame;
|
||||
|
||||
var frame = srcImage[startFrame];
|
||||
var bitmap = new Bitmap(frame.FrameWidth * FrameCount, frame.FrameHeight, PixelFormat.Format8bppIndexed);
|
||||
bitmap.Palette = palette.AsSystemPalette();
|
||||
|
||||
int OffsetX = 0;
|
||||
int OffsetY = 0;
|
||||
|
||||
int x = 0;
|
||||
|
||||
if (args.Contains("--vehicle")) //complex resorting to RA/CnC compatible frame order
|
||||
{
|
||||
endFrame = endFrame - (FrameCount / 2);
|
||||
startFrame--;
|
||||
for (int f = endFrame; f > startFrame; f--)
|
||||
{
|
||||
frame = srcImage[f];
|
||||
|
||||
OffsetX = frame.FrameWidth/2 - frame.OffsetX;
|
||||
OffsetY = frame.FrameHeight/2 - frame.OffsetY;
|
||||
|
||||
Console.WriteLine("calculated OffsetX: {0}", OffsetX);
|
||||
Console.WriteLine("calculated OffsetY: {0}", OffsetY);
|
||||
|
||||
var data = bitmap.LockBits(new Rectangle(x+OffsetX, 0+OffsetY, frame.Width, frame.Height), ImageLockMode.WriteOnly,
|
||||
PixelFormat.Format8bppIndexed);
|
||||
|
||||
for (var i = 0; i < frame.Height; i++)
|
||||
Marshal.Copy(frame.Image, i * frame.Width,
|
||||
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Width);
|
||||
|
||||
bitmap.UnlockBits(data);
|
||||
|
||||
x += frame.FrameWidth;
|
||||
}
|
||||
endFrame = endFrame + (FrameCount / 2) - 1;
|
||||
startFrame = startFrame + (FrameCount / 2) + 1;
|
||||
for (int f = endFrame; f > startFrame; f--)
|
||||
{
|
||||
frame = srcImage[f];
|
||||
|
||||
OffsetX = frame.FrameWidth/2 - frame.OffsetX;
|
||||
OffsetY = frame.FrameHeight/2 - frame.OffsetY;
|
||||
|
||||
Console.WriteLine("calculated OffsetX: {0}", OffsetX);
|
||||
Console.WriteLine("calculated OffsetY: {0}", OffsetY);
|
||||
|
||||
var data = bitmap.LockBits(new Rectangle(x+OffsetX, 0+OffsetY, frame.Width, frame.Height), ImageLockMode.WriteOnly,
|
||||
PixelFormat.Format8bppIndexed);
|
||||
|
||||
for (var i = 0; i < frame.Height; i++)
|
||||
Marshal.Copy(frame.Image, i * frame.Width,
|
||||
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Width);
|
||||
|
||||
bitmap.UnlockBits(data);
|
||||
|
||||
x += frame.FrameWidth;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int f = startFrame; f < endFrame; f++)
|
||||
{
|
||||
frame = srcImage[f];
|
||||
|
||||
if (args.Contains("--infrantry"))
|
||||
{
|
||||
OffsetX = frame.FrameWidth/2 - frame.Width/2;
|
||||
OffsetY = frame.FrameHeight/2 - frame.Height/2;
|
||||
}
|
||||
else if (args.Contains("--projectile"))
|
||||
{
|
||||
OffsetX = frame.FrameWidth/2 - frame.OffsetX;
|
||||
OffsetY = frame.FrameHeight/2 - frame.OffsetY;
|
||||
}
|
||||
else if (args.Contains("--building"))
|
||||
{
|
||||
if (frame.OffsetX < 0) { frame.OffsetX = 0 - frame.OffsetX; }
|
||||
if (frame.OffsetY < 0) { frame.OffsetY = 0 - frame.OffsetY; }
|
||||
OffsetX = 0 + frame.OffsetX;
|
||||
OffsetY = frame.FrameHeight - frame.OffsetY;
|
||||
}
|
||||
Console.WriteLine("calculated OffsetX: {0}", OffsetX);
|
||||
Console.WriteLine("calculated OffsetY: {0}", OffsetY);
|
||||
|
||||
var data = bitmap.LockBits(new Rectangle(x+OffsetX, 0+OffsetY, frame.Width, frame.Height), ImageLockMode.WriteOnly,
|
||||
PixelFormat.Format8bppIndexed);
|
||||
|
||||
for (var i = 0; i < frame.Height; i++)
|
||||
Marshal.Copy(frame.Image, i * frame.Width,
|
||||
new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Width);
|
||||
|
||||
bitmap.UnlockBits(data);
|
||||
|
||||
x += frame.FrameWidth;
|
||||
}
|
||||
}
|
||||
bitmap.Save(filename+".png");
|
||||
Console.WriteLine(filename+".png saved");
|
||||
}
|
||||
|
||||
public static void ConvertTmpToPng(string[] args)
|
||||
{
|
||||
var mods = args[1].Split(',');
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||
* Copyright 2007-2012 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,
|
||||
@@ -27,6 +27,7 @@ namespace OpenRA.Utility
|
||||
{ "--extract", Command.ExtractFiles },
|
||||
{ "--tmp-png", Command.ConvertTmpToPng },
|
||||
{ "--remap", Command.RemapShp },
|
||||
{ "--r8", Command.ConvertR8ToPng },
|
||||
};
|
||||
|
||||
if (args.Length == 0) { PrintUsage(); return; }
|
||||
@@ -53,12 +54,14 @@ namespace OpenRA.Utility
|
||||
{
|
||||
Console.WriteLine("Usage: OpenRA.Utility.exe [OPTION] [ARGS]");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine(" --settings-value KEY Get value of KEY from settings.yaml");
|
||||
Console.WriteLine(" --shp PNGFILE FRAMEWIDTH Convert a PNG containing one or more frames to a SHP");
|
||||
Console.WriteLine(" --png SHPFILE PALETTE [--transparent] Convert a SHP to a PNG containing all of its frames, optionally setting up transparency");
|
||||
Console.WriteLine(" --extract MOD[,MOD]* FILES Extract files from mod packages");
|
||||
Console.WriteLine(" --tmp-png MOD[,MOD]* THEATER FILES Extract terrain tiles to PNG");
|
||||
Console.WriteLine(" --remap SRCMOD:PAL DESTMOD:PAL SRCSHP DESTSHP Remap SHPs to another palette");
|
||||
Console.WriteLine(" --settings-value KEY Get value of KEY from settings.yaml");
|
||||
Console.WriteLine(" --shp PNGFILE FRAMEWIDTH Convert a single PNG with multiple frames appended after another to a SHP");
|
||||
Console.WriteLine(" --png SHPFILE PALETTE [--transparent] Convert a SHP to a PNG containing all of its frames, optionally setting up transparency");
|
||||
Console.WriteLine(" --extract MOD[,MOD]* FILES Extract files from mod packages");
|
||||
Console.WriteLine(" --tmp-png MOD[,MOD]* THEATER FILES Extract terrain tiles to PNG");
|
||||
Console.WriteLine(" --remap SRCMOD:PAL DESTMOD:PAL SRCSHP DESTSHP Remap SHPs to another palette");
|
||||
Console.WriteLine(" --r8 R8FILE PALETTE STARTFRAME ENDFRAME FILENAME [--transparent] ");
|
||||
Console.WriteLine(" [--infrantry] [--vehicle] [--projectile] [--building] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as unit type for correct offset to append multiple frames to one PNG named by filename optionally setting up transparency");
|
||||
}
|
||||
|
||||
static string GetNamedArg(string[] args, string arg)
|
||||
|
||||
Reference in New Issue
Block a user