More null-checks,

support for 2.5+(no images and frameitems)
master
1987kostya 4 years ago
parent ae79efd09d
commit 8617712de7

@ -244,9 +244,9 @@ namespace DotNetCTFDumper.GUI
toLog += $"Product Version: {Exe.Instance.GameData.ProductVersion}\n"; toLog += $"Product Version: {Exe.Instance.GameData.ProductVersion}\n";
toLog += $"Build: {Exe.Instance.GameData.Build}\n"; toLog += $"Build: {Exe.Instance.GameData.Build}\n";
toLog += $"Runtime Version: {Exe.Instance.GameData.RuntimeVersion}\n"; toLog += $"Runtime Version: {Exe.Instance.GameData.RuntimeVersion}\n";
toLog += $"Number Of Images: {Exe.Instance.GameData.Images.NumberOfItems}\n"; toLog += $"Number Of Images: {Exe.Instance.GameData.Images?.NumberOfItems}\n";
toLog += $"Number Of Sounds: {(Exe.Instance.GameData.Sounds!= null ? Exe.Instance.GameData.Sounds.NumOfItems: 0)}\n"; toLog += $"Number Of Sounds: {Exe.Instance.GameData.Sounds?.NumOfItems}\n";
toLog += $"Unique FrameItems: {Exe.Instance.GameData.Frameitems.NumberOfItems}\n"; toLog += $"Unique FrameItems: {Exe.Instance.GameData.Frameitems?.NumberOfItems}\n";
toLog += $"Frame Count: {Exe.Instance.GameData.Frames.Count}\n"; toLog += $"Frame Count: {Exe.Instance.GameData.Frames.Count}\n";
toLog += $"Chunks Count: {Exe.Instance.GameData.GameChunks.Chunks.Count}\n"; toLog += $"Chunks Count: {Exe.Instance.GameData.GameChunks.Chunks.Count}\n";
if (Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>() != null) if (Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>() != null)

@ -58,7 +58,7 @@ namespace DotNetCTFDumper.GUI
// //
this.dumpButton.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (64)))), ((int) (((byte) (64)))), ((int) (((byte) (64))))); this.dumpButton.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (64)))), ((int) (((byte) (64)))), ((int) (((byte) (64)))));
this.dumpButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.dumpButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.dumpButton.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte) (204))); this.dumpButton.Font = new System.Drawing.Font("Courier New", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte) (204)));
this.dumpButton.ForeColor = System.Drawing.Color.FromArgb(((int) (((byte) (255)))), ((int) (((byte) (128)))), ((int) (((byte) (0))))); this.dumpButton.ForeColor = System.Drawing.Color.FromArgb(((int) (((byte) (255)))), ((int) (((byte) (128)))), ((int) (((byte) (0)))));
this.dumpButton.Location = new System.Drawing.Point(204, 105); this.dumpButton.Location = new System.Drawing.Point(204, 105);
this.dumpButton.Name = "dumpButton"; this.dumpButton.Name = "dumpButton";
@ -72,7 +72,7 @@ namespace DotNetCTFDumper.GUI
// //
this.dumpAllButton.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (64)))), ((int) (((byte) (64)))), ((int) (((byte) (64))))); this.dumpAllButton.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (64)))), ((int) (((byte) (64)))), ((int) (((byte) (64)))));
this.dumpAllButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.dumpAllButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.dumpAllButton.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte) (204))); this.dumpAllButton.Font = new System.Drawing.Font("Courier New", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte) (204)));
this.dumpAllButton.ForeColor = System.Drawing.Color.FromArgb(((int) (((byte) (255)))), ((int) (((byte) (128)))), ((int) (((byte) (0))))); this.dumpAllButton.ForeColor = System.Drawing.Color.FromArgb(((int) (((byte) (255)))), ((int) (((byte) (128)))), ((int) (((byte) (0)))));
this.dumpAllButton.Location = new System.Drawing.Point(204, 148); this.dumpAllButton.Location = new System.Drawing.Point(204, 148);
this.dumpAllButton.Name = "dumpAllButton"; this.dumpAllButton.Name = "dumpAllButton";
@ -88,7 +88,7 @@ namespace DotNetCTFDumper.GUI
this.infoLabel.ForeColor = System.Drawing.Color.FromArgb(((int) (((byte) (255)))), ((int) (((byte) (128)))), ((int) (((byte) (0))))); this.infoLabel.ForeColor = System.Drawing.Color.FromArgb(((int) (((byte) (255)))), ((int) (((byte) (128)))), ((int) (((byte) (0)))));
this.infoLabel.Location = new System.Drawing.Point(204, 14); this.infoLabel.Location = new System.Drawing.Point(204, 14);
this.infoLabel.Name = "infoLabel"; this.infoLabel.Name = "infoLabel";
this.infoLabel.Size = new System.Drawing.Size(142, 91); this.infoLabel.Size = new System.Drawing.Size(255, 91);
this.infoLabel.TabIndex = 3; this.infoLabel.TabIndex = 3;
this.infoLabel.Text = "Name: PackFile1.mvx\r\nSize: 5 MB\r\n"; this.infoLabel.Text = "Name: PackFile1.mvx\r\nSize: 5 MB\r\n";
// //

@ -310,10 +310,11 @@ namespace DotNetCTFDumper.MMFParser.EXE
{ {
if (chunk.Loader.GetType().Name == typeof(T).Name) if (chunk.Loader.GetType().Name == typeof(T).Name)
{ {
Chunks.Remove(chunk);
return (T) chunk.Loader; return (T) chunk.Loader;
} }
Chunks.Remove(chunk);
} }
} }
//Logger.Log($"ChunkLoader {typeof(T).Name} not found", true, ConsoleColor.Red); //Logger.Log($"ChunkLoader {typeof(T).Name} not found", true, ConsoleColor.Red);

@ -284,9 +284,10 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders
{ {
get get
{ {
if (Exe.Instance.GameData.GameChunks.GetChunk<FrameItems>() == null) return null;
return Exe.Instance.GameData.GameChunks.GetChunk<FrameItems>().FromHandle(ObjectInfo); return Exe.Instance.GameData.GameChunks.GetChunk<FrameItems>().FromHandle(ObjectInfo);
} }
} }
public override void Print(bool ext) public override void Print(bool ext)
{ {
@ -345,11 +346,28 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders
public class Layer : ChunkLoader public class Layer : ChunkLoader
{ {
public string Name; public string Name;
public uint Flags; public BitDict Flags = new BitDict(new string[]
{
"XCoefficient",
"YCoefficient",
"DoNotSaveBackground",
"",
"Visible",
"WrapHorizontally",
"WrapVertically",
"", "", "", "",
"", "", "", "", "",
"Redraw",
"ToHide",
"ToShow"
}
);
public float XCoeff; public float XCoeff;
public float YCoeff; public float YCoeff;
public int NumberOfBackgrounds; public int NumberOfBackgrounds;
public int BackgroudIndex; public int BackgroudIndex;
public Layer(ByteReader reader) : base(reader) public Layer(ByteReader reader) : base(reader)
{ {
@ -361,13 +379,12 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders
public override void Read() public override void Read()
{ {
Flags = Reader.ReadUInt32(); Flags.flag = Reader.ReadUInt32();
XCoeff = Reader.ReadSingle(); XCoeff = Reader.ReadSingle();
YCoeff = Reader.ReadSingle(); YCoeff = Reader.ReadSingle();
NumberOfBackgrounds = Reader.ReadInt32(); NumberOfBackgrounds = Reader.ReadInt32();
BackgroudIndex = Reader.ReadInt32(); BackgroudIndex = Reader.ReadInt32();
Name = Reader.ReadWideString(); Name = Reader.ReadWideString();
Console.WriteLine(Name);
} }
public override void Print(bool ext) public override void Print(bool ext)

@ -26,9 +26,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders
{ {
var currentPos = Reader.Tell(); var currentPos = Reader.Tell();
Module = Reader.ReadAscii(4); Module = Reader.ReadAscii(4);
Console.WriteLine("TransitionModule: "+Module);
Name = Reader.ReadAscii(4); Name = Reader.ReadAscii(4);
Console.WriteLine("TransitionModule: "+Name);
Duration = Reader.ReadInt32(); Duration = Reader.ReadInt32();
Flags = Reader.ReadInt32(); Flags = Reader.ReadInt32();
Color = Reader.ReadColor(); Color = Reader.ReadColor();

@ -39,11 +39,11 @@ namespace DotNetCTFDumper.MMFParser.MFA.Loaders
public override void Read() public override void Read()
{ {
Name = Helper.AutoReadUnicode(Reader); Name = Reader.AutoReadUnicode();
Flags.flag = (uint) Reader.ReadInt32(); Flags.flag = (uint) Reader.ReadInt32();
XCoefficient = Reader.ReadSingle(); XCoefficient = Reader.ReadSingle();
YCoefficient = Reader.ReadSingle(); YCoefficient = Reader.ReadSingle();
Console.WriteLine("LayerAss: "+Flags["Visible"]);

@ -241,7 +241,7 @@ namespace DotNetCTFDumper.MMFParser.MFA
} }
Writer.WriteInt32(Frames.Count); //frame Writer.WriteInt32(Frames.Count); //frame
var startPos = Reader.Tell() + 4 * Frames.Count + 4; var startPos = Writer.Tell() + 4 * Frames.Count + 4;
ByteWriter newWriter = new ByteWriter(new MemoryStream()); ByteWriter newWriter = new ByteWriter(new MemoryStream());
foreach (Frame frame in Frames) foreach (Frame frame in Frames)
@ -259,6 +259,7 @@ namespace DotNetCTFDumper.MMFParser.MFA
public override void Read() public override void Read()
{ {
Logger.Log($"MFA HEADER:{Reader.ReadAscii(4)}\n"); Logger.Log($"MFA HEADER:{Reader.ReadAscii(4)}\n");
MfaBuild = Reader.ReadInt32(); MfaBuild = Reader.ReadInt32();
Product = Reader.ReadInt32(); Product = Reader.ReadInt32();
@ -402,6 +403,7 @@ namespace DotNetCTFDumper.MMFParser.MFA
Reader.Seek(nextOffset); Reader.Seek(nextOffset);
Chunks = new ChunkList(Reader); Chunks = new ChunkList(Reader);
Chunks.Read(); Chunks.Read();
Reader.Dispose();
return; return;
} }

@ -36,8 +36,8 @@ namespace DotNetCTFDumper.MMFParser.Translation
mfa.Images.Items[key].Debug = true; mfa.Images.Items[key].Debug = true;
} }
*/ */
mfa.Author = game.Author!=null? game.Author:"Kostya"; mfa.Author = game.Author ?? "Kostya";
mfa.Copyright = game.Copyright; mfa.Copyright = game.Copyright ??"CTFAN Team";
mfa.Company = "CTFAN Team"; mfa.Company = "CTFAN Team";
mfa.Version = ""; mfa.Version = "";
//TODO:Binary Files //TODO:Binary Files
@ -74,7 +74,7 @@ namespace DotNetCTFDumper.MMFParser.Translation
{ {
var mfaTrans = new MFA.Loaders.Transition((ByteReader) null); var mfaTrans = new MFA.Loaders.Transition((ByteReader) null);
mfaTrans.Module = gameTrans.ModuleFile; mfaTrans.Module = gameTrans.ModuleFile;
mfaTrans.Name = "Transition"; mfaTrans.Name = gameTrans.Name.FirstCharToUpper();
mfaTrans.Id = gameTrans.Module; mfaTrans.Id = gameTrans.Module;
mfaTrans.TransitionId = gameTrans.Name; mfaTrans.TransitionId = gameTrans.Name;
mfaTrans.Flags = gameTrans.Flags; mfaTrans.Flags = gameTrans.Flags;
@ -88,19 +88,16 @@ namespace DotNetCTFDumper.MMFParser.Translation
public static MFA.Loaders.Frame ConvertFrame(EXE.Loaders.Frame gameFrame) public static MFA.Loaders.Frame ConvertFrame(EXE.Loaders.Frame gameFrame)
{ {
MFA.Loaders.Frame mfaFrame = new MFA.Loaders.Frame(null); MFA.Loaders.Frame mfaFrame = new MFA.Loaders.Frame(null);
TranslatingFrame.Invoke(gameFrame.Name); TranslatingFrame?.Invoke(gameFrame.Name);
//mfaFrame.Handle = game.Frames.IndexOf(gameFrame);
mfaFrame.Name = gameFrame.Name; mfaFrame.Name = gameFrame.Name;
mfaFrame.SizeX = gameFrame.Width; mfaFrame.SizeX = gameFrame.Width;
mfaFrame.SizeY = gameFrame.Height; mfaFrame.SizeY = gameFrame.Height;
mfaFrame.Background = gameFrame.Background; mfaFrame.Background = gameFrame.Background;
if (gameFrame.FadeIn != null)mfaFrame.FadeIn = ConvertTransition(gameFrame.FadeIn); if (gameFrame.FadeIn != null)mfaFrame.FadeIn = ConvertTransition(gameFrame.FadeIn);
if (gameFrame.FadeOut != null)mfaFrame.FadeOut = ConvertTransition(gameFrame.FadeOut); if (gameFrame.FadeOut != null)mfaFrame.FadeOut = ConvertTransition(gameFrame.FadeOut);
//TODO:Flags
mfaFrame.MaxObjects = gameFrame.Events?.MaxObjects ?? 10000;
//TODO: Flags
mfaFrame.MaxObjects = gameFrame.Events?.MaxObjects ?? 1337;
mfaFrame.Password = gameFrame?.Password ?? ""; mfaFrame.Password = gameFrame?.Password ?? "";
mfaFrame.LastViewedX = 320; mfaFrame.LastViewedX = 320;
mfaFrame.LastViewedY = 240; mfaFrame.LastViewedY = 240;
@ -108,26 +105,28 @@ namespace DotNetCTFDumper.MMFParser.Translation
mfaFrame.StampHandle = 12; mfaFrame.StampHandle = 12;
mfaFrame.ActiveLayer = 0; mfaFrame.ActiveLayer = 0;
mfaFrame.Layers = new List<Layer>(); mfaFrame.Layers = new List<Layer>();
var layer = new Layer(null)
foreach (EXE.Loaders.Layer gameLayer in gameFrame.Layers.Items)
{ {
Name = "New Layer", Layer mfaLayer = new Layer(null)
{
Name = gameLayer.Name,
}; Flags =
layer.Flags["Visible"] = true; {
mfaFrame.Layers.Add(layer); ["HideAtStart"] = gameLayer.Flags["ToHide"],
["Visible"] = true,
["NoBackground"] = gameLayer.Flags["DoNotSaveBackground"],
["WrapHorizontally"] = gameLayer.Flags["WrapHorizontally"],
["WrapVertically"] = gameLayer.Flags["WrapVertically"]
/*foreach (EXE.Loaders.Layer gameLayer in gameFrame.Layers.Items) },
{ XCoefficient = gameLayer.XCoeff,
Layer mfaLayer = new Layer(null); YCoefficient = gameLayer.YCoeff
mfaLayer.Name = gameLayer.Name; };
mfaLayer.Flags = (int) gameLayer.Flags;
//TODO: Flags
mfaLayer.XCoefficient = gameLayer.XCoeff;
mfaLayer.YCoefficient = gameLayer.YCoeff;
mfaFrame.Layers.Add(mfaLayer); mfaFrame.Layers.Add(mfaLayer);
}*/ break;
//TODO: Fix layers
}
mfaFrame.Events = MFA.MFA.emptyEvents; mfaFrame.Events = MFA.MFA.emptyEvents;
mfaFrame.Chunks = MFA.MFA.emptyFrameChunks; mfaFrame.Chunks = MFA.MFA.emptyFrameChunks;
return mfaFrame; return mfaFrame;

@ -52,6 +52,15 @@ namespace DotNetCTFDumper.Utils
return temp; return temp;
} }
public static string FirstCharToUpper(this string input)
{
switch (input)
{
case null: throw new ArgumentNullException(nameof(input));
case "": throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input));
default: return input.First().ToString().ToUpper() + input.Substring(1);
}
}
public static string AutoReadUnicode(this ByteReader reader) public static string AutoReadUnicode(this ByteReader reader)
{ {

Loading…
Cancel
Save