diff --git a/NetMFAPatcher/DotNetCTFDumper.csproj b/NetMFAPatcher/DotNetCTFDumper.csproj index 9e5fc72..b3ab08f 100644 --- a/NetMFAPatcher/DotNetCTFDumper.csproj +++ b/NetMFAPatcher/DotNetCTFDumper.csproj @@ -88,40 +88,41 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + diff --git a/NetMFAPatcher/MMFParser/ChunkLoaders/ObjectNames.cs b/NetMFAPatcher/MMFParser/ChunkLoaders/ObjectNames.cs new file mode 100644 index 0000000..6eda0d8 --- /dev/null +++ b/NetMFAPatcher/MMFParser/ChunkLoaders/ObjectNames.cs @@ -0,0 +1,34 @@ +using NetMFAPatcher.chunkloaders; +using NetMFAPatcher.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static NetMFAPatcher.MMFParser.Data.ChunkList; + +namespace NetMFAPatcher.mmfparser.chunkloaders +{ + class ObjectNames : ChunkLoader//Fucking trash + { + public override void Print(bool ext) + { + + } + + public override void Read() + { + var start = reader.Tell(); + var endpos = start + chunk.size; + while(true) + { + if (reader.Tell() >= endpos+4) break; + + Console.WriteLine(reader.ReadWideString()); + } + + } + public ObjectNames(ByteIO reader) : base(reader) { } + public ObjectNames(Chunk chunk) : base(chunk) { } + } +} diff --git a/NetMFAPatcher/mmfparser/ChunkList.cs b/NetMFAPatcher/MMFParser/Data/ChunkList.cs similarity index 75% rename from NetMFAPatcher/mmfparser/ChunkList.cs rename to NetMFAPatcher/MMFParser/Data/ChunkList.cs index 14414e1..0a7253a 100644 --- a/NetMFAPatcher/mmfparser/ChunkList.cs +++ b/NetMFAPatcher/MMFParser/Data/ChunkList.cs @@ -1,4 +1,5 @@ using NetMFAPatcher.chunkloaders; +using NetMFAPatcher.mmfparser.chunkloaders; using NetMFAPatcher.utils; using NetMFAPatcher.Utils; using System; @@ -6,12 +7,12 @@ using System.Collections.Generic; using System.IO; using static NetMFAPatcher.mmfparser.Constants; -namespace NetMFAPatcher.mmfparser +namespace NetMFAPatcher.MMFParser.Data { public class ChunkList { public List chunks = new List(); - public bool verbose = true; + public bool verbose = false; public void Read(ByteIO exeReader) { @@ -26,8 +27,17 @@ namespace NetMFAPatcher.mmfparser { if (chunk.loader.verbose) { - chunk.loader.Print(); + chunk.loader.Print(Program.LogAll); } + } + if (chunk.verbose) + { + chunk.Print(Program.LogAll); + if(Program.LogAll) Console.ReadKey(); + + + + } chunks.Add(chunk); @@ -35,15 +45,12 @@ namespace NetMFAPatcher.mmfparser { chunk.BuildKey(); } - if (chunk.id == 13108) - { - - } + if (chunk.id == 32639) break; //LAST chunkID } - Logger.Log(verbose ? $" Total Chunks Count: {chunks.Count}":"ChunkList Done", true, ConsoleColor.Blue); + //Logger.Log(verbose ? $" Total Chunks Count: {chunks.Count}":"ChunkList Done", true, ConsoleColor.Blue); } public class Chunk @@ -56,9 +63,9 @@ namespace NetMFAPatcher.mmfparser public ChunkLoader loader; public byte[] chunk_data; public ChunkFlags flag; - int size = 0; - int decompressed_size = 0; - bool verbose = true; + public int size = 0; + public int decompressed_size = 0; + public bool verbose = false; public Chunk(int Actualuid, ChunkList actual_chunk_list) { @@ -86,7 +93,6 @@ namespace NetMFAPatcher.mmfparser chunk_data = Decryption.DecodeChunk(exeReader.ReadBytes(size),size,54); break; case ChunkFlags.CompressedAndEncrypyed: - //exeReader.ReadBytes(size); chunk_data = Decryption.DecodeMode3(exeReader.ReadBytes(size), size,id, 54); break; case ChunkFlags.Compressed: @@ -103,12 +109,13 @@ namespace NetMFAPatcher.mmfparser string path = $"{Program.DumpPath}\\CHUNKS\\{name}.chunk"; File.WriteAllBytes(path, chunk_data); } - if(verbose) + int tempId=0; + int.TryParse(name,out tempId); + if(tempId==id) { - //Print(false); - + chunk_data.Log(true, "X2"); } - + } public void Print(bool extented) @@ -122,6 +129,7 @@ namespace NetMFAPatcher.mmfparser Logger.Log($" Size: {size} B", true, ConsoleColor.DarkCyan); Logger.Log($" Decompressed Size: {decompressed_size} B", true, ConsoleColor.DarkCyan); Logger.Log("---------------------------------------------", true, ConsoleColor.DarkCyan); + } else @@ -136,13 +144,28 @@ namespace NetMFAPatcher.mmfparser } public void BuildKey() { - string title = ""; + string title = "Five Nights at Candy's 3"; string copyright = ""; - string project = ""; - title = "Sister Location";//chunk_list.get_chunk().value; - copyright = "Scott Cawthon";//chunk_list.get_chunk().value; - project = @"C:\Users\Scott\Desktop\FNAF 5\FNaF 5-157.mfa";//chunk_list.get_chunk().value; - Decryption.MakeKey(title,copyright,project,54); + string project = @"C:\Users\Emil\Desktop\Five Nights at Candy's 3\Five Nights At Candy's 3.mfa"; + + var titleChunk = chunk_list.get_chunk(); + if (titleChunk != null) title = titleChunk.value; + + + + var copyrightChunk = chunk_list.get_chunk(); + if (copyrightChunk != null) copyright = copyrightChunk.value; + var projectChunk = chunk_list.get_chunk(); + if (projectChunk != null) project = projectChunk.value; + if (Program.game_data.product_build > 284) + { + Decryption.MakeKey(title, copyright, project, 54); + } + else + { + Decryption.MakeKey(project, title, copyright, 54); + } + Logger.Log("New Key!"); @@ -184,6 +207,9 @@ namespace NetMFAPatcher.mmfparser case 8752: loader = new AppDoc(chunk); break; + case 8745:// + loader = new FrameItems(chunk); + break; case 8757: loader = new AppIcon(chunk); break; @@ -205,12 +231,25 @@ namespace NetMFAPatcher.mmfparser case 13108: loader = new FrameHeader(chunk); break; + case 13112: + loader = new ObjectInstances(chunk); + break; case 26214: loader = new ImageBank(chunk); break; case 26216: loader = new SoundBank(chunk); break; + case 17477: + loader = new ObjectName(chunk); + break; + case 17476: + loader = new ObjectHeader(chunk); + break; + case 8788: + loader = new ObjectNames(chunk); + break; + } if (loader != null) @@ -236,5 +275,10 @@ namespace NetMFAPatcher.mmfparser return null; //I hope this wont happen } + public T get_loader(ChunkLoader loader) where T : ChunkLoader + { + + return (T)loader; + } } } \ No newline at end of file diff --git a/NetMFAPatcher/mmfparser/DataLoader.cs b/NetMFAPatcher/MMFParser/Data/DataLoader.cs similarity index 92% rename from NetMFAPatcher/mmfparser/DataLoader.cs rename to NetMFAPatcher/MMFParser/Data/DataLoader.cs index ebb81f4..3fbefd0 100644 --- a/NetMFAPatcher/mmfparser/DataLoader.cs +++ b/NetMFAPatcher/MMFParser/Data/DataLoader.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using static NetMFAPatcher.mmfparser.ChunkList; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace mmfparser { diff --git a/NetMFAPatcher/mmfparser/GameData.cs b/NetMFAPatcher/MMFParser/Data/GameData.cs similarity index 94% rename from NetMFAPatcher/mmfparser/GameData.cs rename to NetMFAPatcher/MMFParser/Data/GameData.cs index 1af5a1a..ccb4310 100644 --- a/NetMFAPatcher/mmfparser/GameData.cs +++ b/NetMFAPatcher/MMFParser/Data/GameData.cs @@ -1,4 +1,5 @@ using NetMFAPatcher.chunkloaders; +using NetMFAPatcher.mmfparser; using NetMFAPatcher.Utils; using System; using System.Collections.Generic; @@ -7,7 +8,7 @@ using System.Text; using System.Threading.Tasks; using static NetMFAPatcher.mmfparser.Constants; -namespace NetMFAPatcher.mmfparser +namespace NetMFAPatcher.MMFParser.Data { public class GameData { @@ -38,7 +39,7 @@ namespace NetMFAPatcher.mmfparser Print(); Logger.Log("Press any key to continue",true,ConsoleColor.Magenta); - Console.ReadKey(); + //Console.ReadKey(); gameChunks = new ChunkList(); gameChunks.Read(exeReader); diff --git a/NetMFAPatcher/mmfparser/MFA.cs b/NetMFAPatcher/MMFParser/Data/MFA.cs similarity index 95% rename from NetMFAPatcher/mmfparser/MFA.cs rename to NetMFAPatcher/MMFParser/Data/MFA.cs index 14b9495..ebeab39 100644 --- a/NetMFAPatcher/mmfparser/MFA.cs +++ b/NetMFAPatcher/MMFParser/Data/MFA.cs @@ -59,6 +59,7 @@ namespace NetMFAPatcher.mfa description = reader.ReadAscii(reader.ReadInt32()); path = reader.ReadAscii(reader.ReadInt32()); stamp = reader.ReadBytes(reader.ReadInt32()); + Console.WriteLine(path); @@ -85,9 +86,15 @@ namespace NetMFAPatcher.mfa } var music = new MusicBank(reader); music.Read(); - //Images&Icons are not implemented - reader.Seek(1191182);//hardcoded offset + //if (reader.ReadAscii(4) != "AGMI") + //{ + // throw new Exception("Invalid Icon Bank"); + //} + //var icons = new AGMIBank(reader); + //icons.Read(); + + reader.Seek(17710);//hardcoded offset reader.ReadInt32();//checkDefault author = reader.ReadAscii(reader.ReadInt32()); diff --git a/NetMFAPatcher/mmfparser/PackData.cs b/NetMFAPatcher/MMFParser/Data/PackData.cs similarity index 98% rename from NetMFAPatcher/mmfparser/PackData.cs rename to NetMFAPatcher/MMFParser/Data/PackData.cs index 811024f..b739492 100644 --- a/NetMFAPatcher/mmfparser/PackData.cs +++ b/NetMFAPatcher/MMFParser/Data/PackData.cs @@ -8,7 +8,7 @@ using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; -namespace NetMFAPatcher.mmfparser +namespace NetMFAPatcher.MMFParser.Data { public class PackData { diff --git a/NetMFAPatcher/Program.cs b/NetMFAPatcher/Program.cs index 083a91e..27a11c0 100644 --- a/NetMFAPatcher/Program.cs +++ b/NetMFAPatcher/Program.cs @@ -7,6 +7,7 @@ using System.Collections; using NetMFAPatcher.mfa; using NetMFAPatcher.utils; using System.Runtime.InteropServices; +using NetMFAPatcher.MMFParser.Data; namespace NetMFAPatcher { @@ -26,6 +27,8 @@ namespace NetMFAPatcher public static bool DumpSounds = false; public static bool verbose; + public static bool LogAll=false; + [STAThread] static void Main(string[] args) @@ -43,7 +46,7 @@ namespace NetMFAPatcher { - ByteIO mfaReader = new ByteIO(@"E:\DotNetCTF\Tests\mmftest.mfa", FileMode.Open); + ByteIO mfaReader = new ByteIO(@"E:\anaconda-mode3\Application.mfa", FileMode.Open); var mfa = new MFA(mfaReader); mfa.Read(); diff --git a/NetMFAPatcher/Utils/Decryption.cs b/NetMFAPatcher/Utils/Decryption.cs index 97faf19..c147269 100644 --- a/NetMFAPatcher/Utils/Decryption.cs +++ b/NetMFAPatcher/Utils/Decryption.cs @@ -11,40 +11,39 @@ namespace NetMFAPatcher.utils class Decryption { public static byte[] key; + public static string storedName; + public static string storedCopyright; + public static string storedPath; public static void MakeKey(string STitle, string SCopyright,string SProject, byte MagicChar) { + storedName = STitle; + storedCopyright = SCopyright; + storedPath = SProject; byte[] nameBytes = Encoding.ASCII.GetBytes(STitle); - var name = Marshal.AllocHGlobal(STitle.Length); + var name = Marshal.StringToHGlobalAnsi(STitle);//Marshal.AllocHGlobal(STitle.Length); Marshal.Copy(nameBytes, 0, name, STitle.Length); byte[] copyrightBytes = Encoding.ASCII.GetBytes(SCopyright); - var copyright = Marshal.AllocHGlobal(SCopyright.Length); + var copyright = Marshal.StringToHGlobalAnsi(SCopyright); Marshal.Copy(copyrightBytes, 0, copyright, SCopyright.Length); - byte[] filenameBytes = Encoding.ASCII.GetBytes(SProject); - var pathfilename = Marshal.AllocHGlobal(SProject.Length); + byte[] filenameBytes = Encoding.ASCII.GetBytes(SProject); + var pathfilename = Marshal.StringToHGlobalAnsi(SProject); Marshal.Copy(filenameBytes, 0, pathfilename, SProject.Length); var ptr = Decryption.make_key(name, copyright, pathfilename, MagicChar); byte[] Key = new byte[257]; - Marshal.Copy(ptr, Key, 0, 257); + Marshal.Copy(ptr, Key, 0, 256); Marshal.FreeHGlobal(name); Marshal.FreeHGlobal(copyright); Marshal.FreeHGlobal(pathfilename); key = Key; - //some hardcoded checks for SL + //key.Log(true, "X2"); - if (Console.ReadKey().Key==ConsoleKey.N) - { - if(key[73] == 0xB2) - { - return; - } - MakeKey("Sister Location", "Scott Cawthon", @"C:\Users\Scott\Desktop\FNAF 5\FNaF 5-157.mfa", 54); - } + } @@ -54,7 +53,10 @@ namespace NetMFAPatcher.utils var DecompressedSize = reader.ReadUInt32(); var chunkData = reader.ReadBytes((int)reader.Size()); - chunkData[0] ^= (byte)(((byte)ChunkID & 0xFF) ^ ((byte)ChunkID >> 0x8)); + if (ChunkID % 2 != 0) + { + chunkData[0] ^= (byte)(((byte)ChunkID & 0xFF) ^ ((byte)ChunkID >> 0x8)); + } var data = new ByteIO(DecodeChunk(chunkData,ChunkSize,MagicChar)); var compressed_size = data.ReadUInt32(); @@ -62,13 +64,11 @@ namespace NetMFAPatcher.utils } public static byte[] DecodeChunk(byte[] ChunkData, int ChunkSize,byte MagicChar) { - //Console.WriteLine("Decoding: "+ChunkData.Log(false,"X2")); IntPtr InputChunkPtr = Marshal.AllocHGlobal(ChunkSize); Marshal.Copy(ChunkData, 0, InputChunkPtr, ChunkSize-4); var OutputChunkPtr = decode_chunk(InputChunkPtr, ChunkSize, MagicChar); byte[] DecodedChunk = new byte[ChunkSize]; Marshal.Copy(OutputChunkPtr, DecodedChunk,0,ChunkSize); - //Console.WriteLine("Result: " + DecodedChunk.Log(false, "X2")); return DecodedChunk; diff --git a/NetMFAPatcher/Utils/Helper.cs b/NetMFAPatcher/Utils/Helper.cs index 289c844..e2d7930 100644 --- a/NetMFAPatcher/Utils/Helper.cs +++ b/NetMFAPatcher/Utils/Helper.cs @@ -1,4 +1,5 @@ -using System; +using NetMFAPatcher.chunkloaders; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -9,21 +10,7 @@ namespace NetMFAPatcher { static class Helper { - public static byte[] ToBytes(this string str) - { - return Encoding.ASCII.GetBytes(str); - - - } - public static int getPadding(int width, int pad=2) - { - int num = pad - width * 3 % pad; - if(num==pad) - { - num = 0; - } - return (int)Math.Ceiling((double)((float)num/3f)); - } + public static string CleanInput(string strIn) { try @@ -37,18 +24,7 @@ namespace NetMFAPatcher return String.Empty; } } - public static string GetString(this byte[] bytes) - { - string str = ""; - for (int i = 0; i < bytes.Length; i++) - { - str += Convert.ToChar(bytes[i]); - - } - return str; - - - } + public static string Log(this byte[] bytes, bool log = true, string format = "") { string Temp = String.Empty; @@ -76,6 +52,7 @@ namespace NetMFAPatcher } + } } diff --git a/NetMFAPatcher/Utils/ImageHelper.cs b/NetMFAPatcher/Utils/ImageHelper.cs index e379a09..6134a28 100644 --- a/NetMFAPatcher/Utils/ImageHelper.cs +++ b/NetMFAPatcher/Utils/ImageHelper.cs @@ -30,5 +30,14 @@ namespace NetMFAPatcher.utils return Color.FromArgb((int)b, (int)g, (int)r); } + public static int getPadding(int width, int pad = 2) + { + int num = pad - width * 3 % pad; + if (num == pad) + { + num = 0; + } + return (int)Math.Ceiling((double)((float)num / 3f)); + } } } diff --git a/NetMFAPatcher/mmfparser/Constants.cs b/NetMFAPatcher/mmfparser/Constants.cs index 6d951e8..6d43ebb 100644 --- a/NetMFAPatcher/mmfparser/Constants.cs +++ b/NetMFAPatcher/mmfparser/Constants.cs @@ -94,16 +94,6 @@ namespace NetMFAPatcher.mmfparser Sounds=26216, Musics=26217, Last=32639 - - - - - - - - - - } } } diff --git a/NetMFAPatcher/mmfparser/chunkloaders/AppHeader.cs b/NetMFAPatcher/mmfparser/chunkloaders/AppHeader.cs index 78c5ebf..e668787 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/AppHeader.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/AppHeader.cs @@ -5,6 +5,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using NetMFAPatcher.mmfparser; +using NetMFAPatcher.mmfparser.mfaloaders; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.chunkloaders { @@ -32,7 +34,7 @@ namespace NetMFAPatcher.chunkloaders initialLives = (int) (reader.ReadUInt32() ^ 0xffffffff); var controls = new Controls(reader); controls.Read(); - controls.Print(); + controls.Print(false); var borderColor = reader.ReadBytes(4); numberOfFrames = reader.ReadInt32(); @@ -40,7 +42,7 @@ namespace NetMFAPatcher.chunkloaders var windowsMenuIndex = reader.ReadSByte(); } - public override void Print() + public override void Print(bool ext) { Logger.Log($"ScreenRes: {windowWidth}x{windowHeight}", true, ConsoleColor.DarkMagenta); Logger.Log($"Score: {initialScore}, Lives: {initialLives}", true, ConsoleColor.DarkMagenta); @@ -53,7 +55,7 @@ namespace NetMFAPatcher.chunkloaders { } - public AppHeader(ChunkList.Chunk chunk) : base(chunk) + public AppHeader(Chunk chunk) : base(chunk) { } } @@ -82,7 +84,7 @@ namespace NetMFAPatcher.chunkloaders } } - public override void Print() + public override void Print(bool ext) { Logger.Log("Controls: ",true,ConsoleColor.Yellow); foreach (var item in items) diff --git a/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs b/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs index d0535e1..914f9c5 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/AppMenu.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.mmfparser.chunkloaders { @@ -16,12 +17,12 @@ namespace NetMFAPatcher.mmfparser.chunkloaders { } - public AppMenu(ChunkList.Chunk chunk) : base(chunk) + public AppMenu(Chunk chunk) : base(chunk) { } - public override void Print() + public override void Print(bool ext) { - throw new NotImplementedException(); + } public override void Read() @@ -87,10 +88,10 @@ namespace NetMFAPatcher.mmfparser.chunkloaders { } - public AppMenuItem(ChunkList.Chunk chunk) : base(chunk) + public AppMenuItem(Chunk chunk) : base(chunk) { } - public override void Print() + public override void Print(bool ext) { throw new NotImplementedException(); } diff --git a/NetMFAPatcher/mmfparser/chunkloaders/ChunkLoader.cs b/NetMFAPatcher/mmfparser/chunkloaders/ChunkLoader.cs index 7bf7478..31cca94 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/ChunkLoader.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/ChunkLoader.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using static NetMFAPatcher.mmfparser.ChunkList; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.chunkloaders { @@ -29,6 +29,6 @@ namespace NetMFAPatcher.chunkloaders public abstract void Read(); - public abstract void Print(); + public abstract void Print(bool ext); } } \ No newline at end of file diff --git a/NetMFAPatcher/mmfparser/chunkloaders/Frame.cs b/NetMFAPatcher/mmfparser/chunkloaders/Frame.cs index 1ecf0ce..507f7bc 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/Frame.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/Frame.cs @@ -1,4 +1,5 @@ using NetMFAPatcher.mmfparser; +using NetMFAPatcher.MMFParser.Data; using NetMFAPatcher.Utils; using System; using System.Collections.Generic; @@ -40,17 +41,19 @@ namespace NetMFAPatcher.chunkloaders public int height; public byte[] background; public int flags; + public int CountOfObjs; int top; int bottom; int left; int right; - public override void Print() + public override void Print(bool ext) { Logger.Log($"Frame: {name}", true, ConsoleColor.Green); Logger.Log($" Password: {(password!=null ? password : "None")}", true, ConsoleColor.Green); Logger.Log($" Size: {width}x{height}", true, ConsoleColor.Green); + Logger.Log($" Objects: {CountOfObjs}", true, ConsoleColor.Green); Logger.Log($"-------------------------", true, ConsoleColor.Green); } @@ -77,6 +80,12 @@ namespace NetMFAPatcher.chunkloaders height = header.height; background = header.background; flags = header.flags; + var objects = chunks.get_chunk(); + if(objects!=null) + { + CountOfObjs = objects.CountOfObjects; + + } @@ -85,9 +94,9 @@ namespace NetMFAPatcher.chunkloaders foreach (var item in chunks.chunks) { - Directory.CreateDirectory($"{Program.DumpPath}\\CHUNKS\\FRAMES\\{this.name}"); - string path = $"{Program.DumpPath}\\CHUNKS\\FRAMES\\{this.name}\\{chunk.name}.chunk"; - File.WriteAllBytes(path, item.chunk_data); + //Directory.CreateDirectory($"{Program.DumpPath}\\CHUNKS\\FRAMES\\{this.name}"); + //string path = $"{Program.DumpPath}\\CHUNKS\\FRAMES\\{this.name}\\{chunk.name}.chunk"; + //File.WriteAllBytes(path, item.chunk_data); } @@ -119,7 +128,7 @@ namespace NetMFAPatcher.chunkloaders { } - public override void Print() + public override void Print(bool ext) { } @@ -137,8 +146,9 @@ namespace NetMFAPatcher.chunkloaders } class ObjectInstances : ChunkLoader { - public int width; - public int height; + + public int CountOfObjects; + public List items = new List(); public ObjectInstances(ByteIO reader) : base(reader) { @@ -148,13 +158,22 @@ namespace NetMFAPatcher.chunkloaders { } - public override void Print() + public override void Print(bool ext) { } public override void Read() - { + { + return; + CountOfObjects = (int)reader.ReadUInt32(); + for (int i = 0; i < CountOfObjects; i++) + { + var item = new ObjectInstances(reader); + item.Read(); + items.Add(item); + } + diff --git a/NetMFAPatcher/mmfparser/chunkloaders/FrameItems.cs b/NetMFAPatcher/mmfparser/chunkloaders/FrameItems.cs index 67d10b6..d328ee2 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/FrameItems.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/FrameItems.cs @@ -5,21 +5,36 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.mmfparser.chunkloaders { class FrameItems : ChunkLoader { - public FrameItems(ChunkList.Chunk chunk) : base(chunk) { } + public Dictionary itemDict = new Dictionary(); + public List names = new List(); + public FrameItems(Chunk chunk) : base(chunk) { } public FrameItems(ByteIO reader) : base(reader) { } - public override void Print() + public override void Print(bool ext) { - + } public override void Read() { + Console.WriteLine("Reading FrameItems"); + var count = reader.ReadInt32(); + for (int i = 0; i < count; i++) + { + var item = new ObjectInfo(reader); + item.verbose = false; + item.Read(); + itemDict.Add(item.handle, item); + names.Add(item.name); + Logger.Log($"Found FrameItem: '{item.name}' with handle ({item.handle})", true, ConsoleColor.Magenta); + } + } } } diff --git a/NetMFAPatcher/mmfparser/chunkloaders/ObjectInfo.cs b/NetMFAPatcher/mmfparser/chunkloaders/ObjectInfo.cs index 3941eba..3582cc7 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/ObjectInfo.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/ObjectInfo.cs @@ -1,24 +1,106 @@ using NetMFAPatcher.chunkloaders; +using NetMFAPatcher.MMFParser.Data; +using NetMFAPatcher.utils; using NetMFAPatcher.Utils; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.mmfparser.chunkloaders { class ObjectInfo : ChunkLoader { - public ObjectInfo(ChunkList.Chunk chunk) : base(chunk) { } + public List chunks = new List(); + public int properties = 0; + public string name = "ERROR"; + public int handle; + public int objectType; + public int flags; + public bool transparent; + public bool antialias; + public int inkEffect; + public int inkEffectValue; + public int shaderId; + public int items; + public ObjectInfo(Chunk chunk) : base(chunk) { } public ObjectInfo(ByteIO reader) : base(reader) { } - public override void Print() + public override void Print(bool ext) { } public override void Read() { + var infoChunks = new ChunkList(); + infoChunks.verbose = false; + infoChunks.Read(reader); + + foreach (var chunk in infoChunks.chunks) + { + chunk.verbose = false; + var loader = chunk.loader; + if(loader is ObjectName) + { + var actualLoader = infoChunks.get_loader(loader); + name = actualLoader.value; + + } + else if(loader is ObjectHeader) + { + var actualLoader = infoChunks.get_loader(loader); + handle = actualLoader.handle; + objectType = actualLoader.objectType; + flags = actualLoader.flags; + var inkEffect = actualLoader.inkEffect; + transparent = ByteFlag.getFlag(inkEffect, 28); + antialias = ByteFlag.getFlag(inkEffect, 29); + + + } + + + + } + + } + } + class ObjectName : StringChunk + { + public ObjectName(ByteIO reader) : base(reader) + { + } + + public ObjectName(Chunk chunk) : base(chunk) + { + } + } + class ObjectHeader : ChunkLoader + { + public int handle; + public int objectType; + public int flags; + public int inkEffect; + public int inkEffectParameter; + public ObjectHeader(ByteIO reader) : base(reader) + { + } + + public ObjectHeader(Chunk chunk) : base(chunk) + { + } + + public override void Print(bool ext) + { + + } + + public override void Read() + { + handle = reader.ReadInt16(); + objectType = reader.ReadInt16(); + flags = reader.ReadUInt16(); + var reserved = reader.ReadInt16(); + inkEffect = (int)reader.ReadUInt32(); + inkEffectParameter = (int)reader.ReadUInt32(); } } diff --git a/NetMFAPatcher/mmfparser/chunkloaders/StringChunk.cs b/NetMFAPatcher/mmfparser/chunkloaders/StringChunk.cs index 2430dee..c92f726 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/StringChunk.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/StringChunk.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using NetMFAPatcher.mmfparser; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.chunkloaders { @@ -19,7 +20,7 @@ namespace NetMFAPatcher.chunkloaders value = reader.ReadWideString(); } - public override void Print() + public override void Print(bool ext) { //Logger.Log($"{chunk.name} contains: {value}\n",true,ConsoleColor.DarkCyan); } @@ -29,7 +30,7 @@ namespace NetMFAPatcher.chunkloaders { } - public StringChunk(ChunkList.Chunk chunk) : base(chunk) + public StringChunk(Chunk chunk) : base(chunk) { } } @@ -40,7 +41,7 @@ namespace NetMFAPatcher.chunkloaders { } - public AppName(ChunkList.Chunk chunk) : base(chunk) + public AppName(Chunk chunk) : base(chunk) { } } @@ -51,7 +52,7 @@ namespace NetMFAPatcher.chunkloaders { } - public AppAuthor(ChunkList.Chunk chunk) : base(chunk) + public AppAuthor(Chunk chunk) : base(chunk) { } } @@ -62,7 +63,7 @@ namespace NetMFAPatcher.chunkloaders { } - public ExtPath(ChunkList.Chunk chunk) : base(chunk) + public ExtPath(Chunk chunk) : base(chunk) { } } @@ -73,7 +74,7 @@ namespace NetMFAPatcher.chunkloaders { } - public EditorFilename(ChunkList.Chunk chunk) : base(chunk) + public EditorFilename(Chunk chunk) : base(chunk) { } } @@ -84,7 +85,7 @@ namespace NetMFAPatcher.chunkloaders { } - public TargetFilename(ChunkList.Chunk chunk) : base(chunk) + public TargetFilename(Chunk chunk) : base(chunk) { } } @@ -95,7 +96,7 @@ namespace NetMFAPatcher.chunkloaders { } - public AppDoc(ChunkList.Chunk chunk) : base(chunk) + public AppDoc(Chunk chunk) : base(chunk) { } } @@ -106,7 +107,7 @@ namespace NetMFAPatcher.chunkloaders { } - public AboutText(ChunkList.Chunk chunk) : base(chunk) + public AboutText(Chunk chunk) : base(chunk) { } } @@ -117,7 +118,7 @@ namespace NetMFAPatcher.chunkloaders { } - public Copyright(ChunkList.Chunk chunk) : base(chunk) + public Copyright(Chunk chunk) : base(chunk) { } } @@ -128,7 +129,7 @@ namespace NetMFAPatcher.chunkloaders { } - public DemoFilePath(ChunkList.Chunk chunk) : base(chunk) + public DemoFilePath(Chunk chunk) : base(chunk) { } } diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/DebugImageBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/DebugImageBank.cs index dc41151..69f3d0f 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/banks/DebugImageBank.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/DebugImageBank.cs @@ -10,6 +10,7 @@ using System.Linq; using System.Numerics; using System.Text; using System.Threading.Tasks; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.chunkloaders { @@ -20,10 +21,10 @@ namespace NetMFAPatcher.chunkloaders { } - public DebugImageBank(ChunkList.Chunk chunk) : base(chunk) + public DebugImageBank(Chunk chunk) : base(chunk) { } - public override void Print() + public override void Print(bool ext) { } @@ -113,7 +114,7 @@ namespace NetMFAPatcher.chunkloaders var colorSize = 3; Bitmap bitmap = new Bitmap((int)num2, (int)num3); Color[,] array = new Color[(int)num2, (int)num3]; - int num4 = Helper.getPadding((int)num2, 2); + int num4 = ImageHelper.getPadding((int)num2, 2); int num5 = 0; for (int i = 0; i < (int)num3; i++) { @@ -176,7 +177,7 @@ namespace NetMFAPatcher.chunkloaders - public override void Print() + public override void Print(bool ext) { } @@ -184,7 +185,7 @@ namespace NetMFAPatcher.chunkloaders { } - public DebugImageItem(ChunkList.Chunk chunk) : base(chunk) + public DebugImageItem(Chunk chunk) : base(chunk) { } diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/FontBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/FontBank.cs index ff06a91..0fb9acf 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/banks/FontBank.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/FontBank.cs @@ -6,13 +6,14 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.chunkloaders { class FontBank : ChunkLoader { int numberOfItems; - public override void Print() + public override void Print(bool ext) { Logger.Log($"FontCount:{numberOfItems.ToString()}"); } @@ -30,7 +31,7 @@ namespace NetMFAPatcher.chunkloaders { } - public FontBank(ChunkList.Chunk chunk) : base(chunk) + public FontBank(Chunk chunk) : base(chunk) { } } diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs index 385855d..bdc1b0f 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs @@ -10,6 +10,7 @@ using System.Linq; using System.Numerics; using System.Text; using System.Threading.Tasks; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.chunkloaders { @@ -20,10 +21,10 @@ namespace NetMFAPatcher.chunkloaders { } - public ImageBank(ChunkList.Chunk chunk) : base(chunk) + public ImageBank(Chunk chunk) : base(chunk) { } - public override void Print() + public override void Print(bool ext) { } @@ -205,7 +206,7 @@ namespace NetMFAPatcher.chunkloaders { Bitmap bitmap = new Bitmap((int)width, (int)height); Color[,] array = new Color[(int)width, (int)height]; - int num4 = Helper.getPadding((int)width, 2); + int num4 = ImageHelper.getPadding((int)width, 2); int num5 = 0; using (ByteIO binaryReader = image_data) { @@ -264,7 +265,7 @@ namespace NetMFAPatcher.chunkloaders - public override void Print() + public override void Print(bool ext) { } @@ -272,7 +273,7 @@ namespace NetMFAPatcher.chunkloaders { } - public ImageItem(ChunkList.Chunk chunk) : base(chunk) + public ImageItem(Chunk chunk) : base(chunk) { } } diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs index 2914d54..783e77d 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using NetMFAPatcher.mmfparser; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.chunkloaders { @@ -15,7 +16,7 @@ namespace NetMFAPatcher.chunkloaders public int references = 0; public List items; - public override void Print() + public override void Print(bool ext) { } @@ -36,7 +37,7 @@ namespace NetMFAPatcher.chunkloaders { } - public MusicBank(ChunkList.Chunk chunk) : base(chunk) + public MusicBank(Chunk chunk) : base(chunk) { } } @@ -47,7 +48,7 @@ namespace NetMFAPatcher.chunkloaders public string name = "ERROR"; public byte[] data; - public override void Print() + public override void Print(bool ext) { } @@ -59,7 +60,7 @@ namespace NetMFAPatcher.chunkloaders { } - public MusicFile(ChunkList.Chunk chunk) : base(chunk) + public MusicFile(Chunk chunk) : base(chunk) { } } diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs index 998b250..4c2242d 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using NetMFAPatcher.mmfparser; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.chunkloaders { @@ -16,7 +17,7 @@ namespace NetMFAPatcher.chunkloaders public List items; public bool isCompressed = true; - public override void Print() + public override void Print(bool ext) { } @@ -39,7 +40,7 @@ namespace NetMFAPatcher.chunkloaders { } - public SoundBank(ChunkList.Chunk chunk) : base(chunk) + public SoundBank(Chunk chunk) : base(chunk) { } } @@ -50,7 +51,7 @@ namespace NetMFAPatcher.chunkloaders public string name = "ERROR"; public byte[] data; - public override void Print() + public override void Print(bool ext) { } @@ -62,7 +63,7 @@ namespace NetMFAPatcher.chunkloaders { } - public SoundBase(ChunkList.Chunk chunk) : base(chunk) + public SoundBase(Chunk chunk) : base(chunk) { } } @@ -118,7 +119,7 @@ namespace NetMFAPatcher.chunkloaders { } - public SoundItem(ChunkList.Chunk chunk) : base(chunk) + public SoundItem(Chunk chunk) : base(chunk) { } } diff --git a/NetMFAPatcher/mmfparser/chunkloaders/yves.cs b/NetMFAPatcher/mmfparser/chunkloaders/yves.cs index 4240ee9..6dc736f 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/yves.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/yves.cs @@ -8,6 +8,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace NetMFAPatcher.chunkloaders { @@ -20,12 +21,13 @@ namespace NetMFAPatcher.chunkloaders { } - public AppIcon(ChunkList.Chunk chunk) : base(chunk) + public AppIcon(Chunk chunk) : base(chunk) { } public override void Read() { + return; Logger.Log("dumpingIcon"); reader.ReadBytes(reader.ReadInt32() - 4); List color_indexes = new List(); @@ -65,7 +67,7 @@ namespace NetMFAPatcher.chunkloaders } - public override void Print() + public override void Print(bool ext) { } diff --git a/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs b/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs index c4b9778..547e8d1 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using static NetMFAPatcher.MMFParser.Data.ChunkList; namespace mmfparser.mfaloaders { @@ -36,9 +37,12 @@ namespace mmfparser.mfaloaders Logger.Log($"Number of image items: {count.ToString()}"); for (int i = 0; i < count; i++) { + Console.WriteLine("READING IMAGE: " + reader.Tell()); var item = new ImageItem(reader); item.Read(); + + } @@ -48,7 +52,7 @@ namespace mmfparser.mfaloaders { } - public AGMIBank(ChunkList.Chunk chunk) : base(chunk) + public AGMIBank(Chunk chunk) : base(chunk) { } }