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 += $"Build: {Exe.Instance.GameData.Build}\n";
toLog += $"Runtime Version: {Exe.Instance.GameData.RuntimeVersion}\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 += $"Unique FrameItems: {Exe.Instance.GameData.Frameitems.NumberOfItems}\n";
toLog += $"Number Of Images: {Exe.Instance.GameData.Images?.NumberOfItems}\n";
toLog += $"Number Of Sounds: {Exe.Instance.GameData.Sounds?.NumOfItems}\n";
toLog += $"Unique FrameItems: {Exe.Instance.GameData.Frameitems?.NumberOfItems}\n";
toLog += $"Frame Count: {Exe.Instance.GameData.Frames.Count}\n";
toLog += $"Chunks Count: {Exe.Instance.GameData.GameChunks.Chunks.Count}\n";
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.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.Location = new System.Drawing.Point(204, 105);
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.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.Location = new System.Drawing.Point(204, 148);
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.Location = new System.Drawing.Point(204, 14);
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.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)
{
Chunks.Remove(chunk);
return (T) chunk.Loader;
}
Chunks.Remove(chunk);
}
}
//Logger.Log($"ChunkLoader {typeof(T).Name} not found", true, ConsoleColor.Red);

@ -284,6 +284,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders
{
get
{
if (Exe.Instance.GameData.GameChunks.GetChunk<FrameItems>() == null) return null;
return Exe.Instance.GameData.GameChunks.GetChunk<FrameItems>().FromHandle(ObjectInfo);
}
}
@ -345,12 +346,29 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders
public class Layer : ChunkLoader
{
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 YCoeff;
public int NumberOfBackgrounds;
public int BackgroudIndex;
public Layer(ByteReader reader) : base(reader)
{
}
@ -361,13 +379,12 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders
public override void Read()
{
Flags = Reader.ReadUInt32();
Flags.flag = Reader.ReadUInt32();
XCoeff = Reader.ReadSingle();
YCoeff = Reader.ReadSingle();
NumberOfBackgrounds = Reader.ReadInt32();
BackgroudIndex = Reader.ReadInt32();
Name = Reader.ReadWideString();
Console.WriteLine(Name);
}
public override void Print(bool ext)

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

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

@ -241,7 +241,7 @@ namespace DotNetCTFDumper.MMFParser.MFA
}
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());
foreach (Frame frame in Frames)
@ -259,6 +259,7 @@ namespace DotNetCTFDumper.MMFParser.MFA
public override void Read()
{
Logger.Log($"MFA HEADER:{Reader.ReadAscii(4)}\n");
MfaBuild = Reader.ReadInt32();
Product = Reader.ReadInt32();
@ -402,6 +403,7 @@ namespace DotNetCTFDumper.MMFParser.MFA
Reader.Seek(nextOffset);
Chunks = new ChunkList(Reader);
Chunks.Read();
Reader.Dispose();
return;
}

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

@ -52,6 +52,15 @@ namespace DotNetCTFDumper.Utils
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)
{

Loading…
Cancel
Save