diff --git a/NetMFAPatcher/GUI/MainForm.cs b/NetMFAPatcher/GUI/MainForm.cs index b3dab37..390838d 100644 --- a/NetMFAPatcher/GUI/MainForm.cs +++ b/NetMFAPatcher/GUI/MainForm.cs @@ -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() != null) diff --git a/NetMFAPatcher/GUI/PackDataForm.Designer.cs b/NetMFAPatcher/GUI/PackDataForm.Designer.cs index af1d778..95ab9b3 100644 --- a/NetMFAPatcher/GUI/PackDataForm.Designer.cs +++ b/NetMFAPatcher/GUI/PackDataForm.Designer.cs @@ -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"; // diff --git a/NetMFAPatcher/MMFParser/EXE/ChunkList.cs b/NetMFAPatcher/MMFParser/EXE/ChunkList.cs index 658f7fc..dc7c0cf 100644 --- a/NetMFAPatcher/MMFParser/EXE/ChunkList.cs +++ b/NetMFAPatcher/MMFParser/EXE/ChunkList.cs @@ -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); diff --git a/NetMFAPatcher/MMFParser/EXE/Loaders/Frame.cs b/NetMFAPatcher/MMFParser/EXE/Loaders/Frame.cs index 49aea1f..83fb0eb 100644 --- a/NetMFAPatcher/MMFParser/EXE/Loaders/Frame.cs +++ b/NetMFAPatcher/MMFParser/EXE/Loaders/Frame.cs @@ -284,9 +284,10 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders { get { + if (Exe.Instance.GameData.GameChunks.GetChunk() == null) return null; return Exe.Instance.GameData.GameChunks.GetChunk().FromHandle(ObjectInfo); } - } + } public override void Print(bool ext) { @@ -345,11 +346,28 @@ 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) diff --git a/NetMFAPatcher/MMFParser/EXE/Loaders/Transition.cs b/NetMFAPatcher/MMFParser/EXE/Loaders/Transition.cs index 59d41bb..a24654f 100644 --- a/NetMFAPatcher/MMFParser/EXE/Loaders/Transition.cs +++ b/NetMFAPatcher/MMFParser/EXE/Loaders/Transition.cs @@ -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(); diff --git a/NetMFAPatcher/MMFParser/MFA/Loaders/Layer.cs b/NetMFAPatcher/MMFParser/MFA/Loaders/Layer.cs index d32a58f..3c05d8f 100644 --- a/NetMFAPatcher/MMFParser/MFA/Loaders/Layer.cs +++ b/NetMFAPatcher/MMFParser/MFA/Loaders/Layer.cs @@ -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"]); + diff --git a/NetMFAPatcher/MMFParser/MFA/MFA.cs b/NetMFAPatcher/MMFParser/MFA/MFA.cs index 87bfdd6..54c5e69 100644 --- a/NetMFAPatcher/MMFParser/MFA/MFA.cs +++ b/NetMFAPatcher/MMFParser/MFA/MFA.cs @@ -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; } diff --git a/NetMFAPatcher/MMFParser/Translation/PAME2MFA.cs b/NetMFAPatcher/MMFParser/Translation/PAME2MFA.cs index 5ddd49c..e9a181d 100644 --- a/NetMFAPatcher/MMFParser/Translation/PAME2MFA.cs +++ b/NetMFAPatcher/MMFParser/Translation/PAME2MFA.cs @@ -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,19 +88,16 @@ 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; mfaFrame.Background = gameFrame.Background; 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; + + //TODO:Flags + 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(); - var layer = new Layer(null) + + foreach (EXE.Loaders.Layer gameLayer in gameFrame.Layers.Items) { - Name = "New Layer", - - - }; - layer.Flags["Visible"] = true; - mfaFrame.Layers.Add(layer); - + 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"] - /*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; + }, + 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; diff --git a/NetMFAPatcher/Utils/Helper.cs b/NetMFAPatcher/Utils/Helper.cs index a572988..ee10c85 100644 --- a/NetMFAPatcher/Utils/Helper.cs +++ b/NetMFAPatcher/Utils/Helper.cs @@ -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) {