diff --git a/NetMFAPatcher/DotNetCTFDumper.csproj b/NetMFAPatcher/DotNetCTFDumper.csproj index 8bf9531..d772aa4 100644 --- a/NetMFAPatcher/DotNetCTFDumper.csproj +++ b/NetMFAPatcher/DotNetCTFDumper.csproj @@ -190,7 +190,9 @@ + + diff --git a/NetMFAPatcher/MMFParser/ChunkLoaders/Events/EventsParts.cs b/NetMFAPatcher/MMFParser/ChunkLoaders/Events/EventsParts.cs index 3256f8b..7ac0cb8 100644 --- a/NetMFAPatcher/MMFParser/ChunkLoaders/Events/EventsParts.cs +++ b/NetMFAPatcher/MMFParser/ChunkLoaders/Events/EventsParts.cs @@ -18,6 +18,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events public int ObjectInfoList; public List Items = new List(); public Condition(ByteReader reader) : base(reader) { } + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { throw new NotImplementedException(); @@ -65,6 +70,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events public int ObjectInfoList; public List Items = new List(); public Action(ByteReader reader) : base(reader) { } + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print( ) { throw new NotImplementedException(); @@ -106,6 +116,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events public Parameter(ByteReader reader) : base(reader) { } + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { throw new NotImplementedException(); diff --git a/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Expressions/Expression.cs b/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Expressions/Expression.cs index 221f7a6..a675546 100644 --- a/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Expressions/Expression.cs +++ b/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Expressions/Expression.cs @@ -11,6 +11,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events.Expressions public int ObjectInfo; public int ObjectInfoList; public Expression(ByteReader reader) : base(reader) { } + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { throw new NotImplementedException(); diff --git a/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Parameters/ParameterCommon.cs b/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Parameters/ParameterCommon.cs index 3154163..0e893c9 100644 --- a/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Parameters/ParameterCommon.cs +++ b/NetMFAPatcher/MMFParser/ChunkLoaders/Events/Parameters/ParameterCommon.cs @@ -9,6 +9,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Events.Parameters public ParameterCommon(ByteReader reader) : base(reader) { } + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { throw new NotImplementedException(); diff --git a/NetMFAPatcher/MMFParser/Data/DataLoader.cs b/NetMFAPatcher/MMFParser/Data/DataLoader.cs index 4b78599..36dac3c 100644 --- a/NetMFAPatcher/MMFParser/Data/DataLoader.cs +++ b/NetMFAPatcher/MMFParser/Data/DataLoader.cs @@ -20,7 +20,7 @@ namespace DotNetCTFDumper.MMFParser.Data } public abstract void Read(); - //public abstract void Write(); + public abstract void Write(ByteWriter Writer); public abstract void Print(); diff --git a/NetMFAPatcher/MMFParser/Data/MFA.cs b/NetMFAPatcher/MMFParser/Data/MFA.cs index adb2566..6dc038c 100644 --- a/NetMFAPatcher/MMFParser/Data/MFA.cs +++ b/NetMFAPatcher/MMFParser/Data/MFA.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Drawing; +using System.IO; using DotNetCTFDumper.MMFParser.ChunkLoaders; using DotNetCTFDumper.MMFParser.ChunkLoaders.Banks; using DotNetCTFDumper.MMFParser.MFALoaders; @@ -106,6 +107,8 @@ namespace DotNetCTFDumper.MMFParser.Data public List Frames; + + public override void Print() { //Logger.Log($"MFA Product:{product}"); @@ -113,113 +116,67 @@ namespace DotNetCTFDumper.MMFParser.Data //Logger.Log($"MFA Product:{buildVersion}"); } - public void Write(ByteWriter writer) + public override void Write(ByteWriter Writer) { - writer.WriteAscii("MFU2"); - writer.WriteInt32(MfaBuild); - writer.WriteInt32(Product); - writer.WriteInt32(BuildVersion); - writer.WriteInt32(LangId); - writer.AutoWriteUnicode(Name); - writer.AutoWriteUnicode(Description); - writer.AutoWriteUnicode(Path); - - writer.WriteUInt32((uint)Stamp.Length); - writer.WriteBytes(Stamp); - writer.WriteAscii(FontBankId); - Fonts.Write(writer); - writer.WriteAscii(SoundBankId); - Sounds.Write(writer); + Writer.WriteAscii("MFU2"); + Writer.WriteInt32(MfaBuild); + Writer.WriteInt32(Product); + Writer.WriteInt32(BuildVersion); + Writer.WriteInt32(LangId); + Writer.AutoWriteUnicode(Name); + Writer.AutoWriteUnicode(Description); + Writer.AutoWriteUnicode(Path); + + Writer.WriteUInt32((uint)Stamp.Length); + Writer.WriteBytes(Stamp); + Writer.WriteAscii(FontBankId); + Fonts.Write(Writer); + Writer.WriteAscii(SoundBankId); + Sounds.Write(Writer); - writer.WriteAscii(MusicBankId); - //music.Write();//cum cum cum cum cum cum cum cum - writer.WriteInt32(0);//someone is using musics lol? + Writer.WriteAscii(MusicBankId); + //music.Write(); + Writer.WriteInt32(0);//someone is using musics lol? //TODO: Do music - //I am not an asshole lol - writer.WriteAscii(ImageBankId); - Icons.Write(writer); - - writer.WriteAscii(ImageBankId); - Images.Write(writer); - writer.AutoWriteUnicode(Name); - writer.AutoWriteUnicode(Author); - writer.AutoWriteUnicode(Description); - writer.AutoWriteUnicode(Copyright); - writer.AutoWriteUnicode(Company); - writer.AutoWriteUnicode(Version); - writer.WriteInt32(WindowX); - writer.WriteInt32(WindowY); - writer.WriteColor(Color.White); - writer.WriteInt32((int) DisplayFlags.flag); - writer.WriteInt32((int) GraphicFlags.flag); - writer.WriteUInt32((uint) InitialScore); - writer.WriteUInt32((uint) InitialLifes); - writer.WriteInt32(FrameRate); - writer.WriteInt32(BuildType); - writer.AutoWriteUnicode(BuildPath); - writer.WriteInt32(0); - writer.AutoWriteUnicode(CommandLine); - writer.AutoWriteUnicode(Aboutbox); - writer.WriteInt32(0);//anaconda - writer.WriteInt32(0);//binary files are not supported because i am lazy asshole + Writer.WriteAscii(ImageBankId); + Icons.Write(Writer); - Controls.Write(writer); + Writer.WriteAscii(ImageBankId); + Images.Write(Writer); + - //Menu = null; //TODO:Menu + Writer.AutoWriteUnicode(Name); + Writer.AutoWriteUnicode(Author); + Writer.AutoWriteUnicode(Description); + Writer.AutoWriteUnicode(Copyright); + Writer.AutoWriteUnicode(Company); + Writer.AutoWriteUnicode(Version); + Writer.WriteInt32(WindowX); + Writer.WriteInt32(WindowY); + Writer.WriteColor(Color.White); + Writer.WriteInt32((int) DisplayFlags.flag); + Writer.WriteInt32((int) GraphicFlags.flag); + Writer.WriteUInt32((uint) InitialScore); + Writer.WriteUInt32((uint) InitialLifes); + Writer.WriteInt32(FrameRate); + Writer.WriteInt32(BuildType); + Writer.AutoWriteUnicode(BuildPath); + Writer.AutoWriteUnicode(CommandLine); + Writer.AutoWriteUnicode(Aboutbox); + Menu = null; //TODO:Menu if (Menu != null) { byte[] menuData = new byte[1]; //Menu.Generate; - writer.WriteInt32(menuData.Length); - writer.WriteBytes(menuData); + Writer.WriteInt32(menuData.Length); + Writer.WriteBytes(menuData); } else { - writer.WriteInt32(0); - } - return; - writer.WriteInt32(windowMenuIndex); - writer.WriteInt32(menuImages.Length); - foreach (var item in menuImages) - { - writer.WriteInt32(item); - } - - GlobalValues.Write(writer); - GlobalStrings.Write(writer); - writer.WriteInt32(GlobalEvents.Length); - writer.WriteBytes(GlobalEvents); - writer.WriteInt32(GraphicMode); - writer.WriteInt32(IconImages.Count); - foreach (var item in IconImages) - { - writer.WriteInt32(item); + Writer.WriteInt32(0); } - //Qualifiers - writer.WriteInt32(CustomQuals.Count); - foreach (var item in CustomQuals) - { - writer.AutoWriteUnicode(item.Item1); - writer.WriteInt32(item.Item2); - } - //Extensions - - foreach (var item in Extensions) - { - writer.WriteInt32(item.Item1); - writer.AutoWriteUnicode(item.Item2); - writer.AutoWriteUnicode(item.Item3); - writer.WriteInt32(item.Item4); - writer.WriteBytes(item.Item5); - - } - writer.WriteInt32(Frames.Count); - var startPosition = writer.Tell() + 4 * Frames.Count + 4; - //help - //how to implement write writer - @@ -234,6 +191,9 @@ namespace DotNetCTFDumper.MMFParser.Data + + + } public override void Read() diff --git a/NetMFAPatcher/MMFParser/Decompiling/MFAGenerator.cs b/NetMFAPatcher/MMFParser/Decompiling/MFAGenerator.cs index e4a3a7d..16d9452 100644 --- a/NetMFAPatcher/MMFParser/Decompiling/MFAGenerator.cs +++ b/NetMFAPatcher/MMFParser/Decompiling/MFAGenerator.cs @@ -6,7 +6,7 @@ namespace DotNetCTFDumper.MMFParser.Decompiling { public static class MFAGenerator { - public static readonly string TemplatePath = @"C:\Users\ivani\Desktop\CTFResearch\testreader.mfa"; + public static readonly string TemplatePath = @"C:\Users\ivani\Desktop\CTFResearch\testNoFrames.mfa"; public static void BuildMFA() { diff --git a/NetMFAPatcher/MMFParser/mfaloaders/FrameInstance.cs b/NetMFAPatcher/MMFParser/mfaloaders/FrameInstance.cs new file mode 100644 index 0000000..86b0971 --- /dev/null +++ b/NetMFAPatcher/MMFParser/mfaloaders/FrameInstance.cs @@ -0,0 +1,55 @@ +using DotNetCTFDumper.MMFParser.Data; +using DotNetCTFDumper.Utils; + +namespace DotNetCTFDumper.MMFParser.MFALoaders +{ + public class FrameInstance:DataLoader + { + public int X; + public int Y; + public uint Layer; + public int Handle; + public uint Flags; + public uint ParentType; + public uint ParentHandle; + public uint ItemHandle; + + public FrameInstance(ByteReader reader) : base(reader) + { + } + + public FrameInstance(Data.ChunkList.Chunk chunk) : base(chunk) + { + } + + public override void Read() + { + X = Reader.ReadInt32(); + Y = Reader.ReadInt32(); + Layer = Reader.ReadUInt32(); + Handle = Reader.ReadInt32(); + Flags = Reader.ReadUInt32(); + ParentType = Reader.ReadUInt32(); + ItemHandle = Reader.ReadUInt32(); + ParentHandle = Reader.ReadUInt32(); + } + + public override void Write(ByteWriter Writer) + { + Writer.WriteInt32(X); + Writer.WriteInt32(Y); + Writer.WriteUInt32(Layer); + Writer.WriteInt32(Handle); + Writer.WriteUInt32(Flags); + Writer.WriteUInt32(ParentType); + Writer.WriteUInt32(ItemHandle); + Writer.WriteUInt32(ParentHandle); + + } + + public override void Print() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/NetMFAPatcher/MMFParser/mfaloaders/ItemFolder.cs b/NetMFAPatcher/MMFParser/mfaloaders/ItemFolder.cs new file mode 100644 index 0000000..859a787 --- /dev/null +++ b/NetMFAPatcher/MMFParser/mfaloaders/ItemFolder.cs @@ -0,0 +1,66 @@ +using System.Collections.Generic; +using DotNetCTFDumper.MMFParser.Data; +using DotNetCTFDumper.Utils; + +namespace DotNetCTFDumper.MMFParser.MFALoaders +{ + public class ItemFolder:DataLoader + { + public List Items; + public string Name; + + public ItemFolder(ByteReader reader) : base(reader) + { + } + + public ItemFolder(Data.ChunkList.Chunk chunk) : base(chunk) + { + } + + public override void Read() + { + var value = Reader.ReadUInt32(); + if (value == 0x70000004) + { + Name = Helper.AutoReadUnicode(Reader); + Items = new List(); + var count = Reader.ReadUInt32(); + for (int i = 0; i < count; i++) + { + Items.Add(Reader.ReadUInt32()); + } + } + else + { + Name = ""; + Items = new List(); + } + + + } + + public override void Write(ByteWriter Writer) + { + if (Name.Length == 0) + { + Writer.WriteUInt32(0x70000005); + } + else + { + Writer.WriteUInt32(0x70000004); + Writer.AutoWriteUnicode(Name); + Writer.WriteInt32(Items.Count); + } + + foreach (var item in Items) + { + Writer.WriteUInt32(item); + } + } + + public override void Print() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/NetMFAPatcher/Utils/ByteWriter.cs b/NetMFAPatcher/Utils/ByteWriter.cs index 736ae80..3f27d38 100644 --- a/NetMFAPatcher/Utils/ByteWriter.cs +++ b/NetMFAPatcher/Utils/ByteWriter.cs @@ -65,7 +65,7 @@ namespace DotNetCTFDumper.Utils public void WriteUInt16(ushort value) => Write(value); public void WriteUInt32(uint value) => Write(value); public void WriteUInt64(ulong value) => Write(value); - + public void WriteSingle(float value) => Write(value); public void WriteBytes(byte[] value) => Write(value); diff --git a/NetMFAPatcher/Utils/Helper.cs b/NetMFAPatcher/Utils/Helper.cs index b680185..f1c52d3 100644 --- a/NetMFAPatcher/Utils/Helper.cs +++ b/NetMFAPatcher/Utils/Helper.cs @@ -63,10 +63,11 @@ namespace DotNetCTFDumper.Utils public static void AutoWriteUnicode(this ByteWriter writer, string value) { writer.WriteInt16((short) value.Length); - writer.Skip(2); + writer.Skip(1); + writer.WriteInt8(0x80); writer.WriteUnicode(value); } - + public static DataLoader LoadParameter(int code, ByteReader reader) { DataLoader item = null; diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs index 613cf15..63ed89f 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/ImageBank.cs @@ -47,7 +47,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Banks } public override void Read() { - Reader.Seek(0); //Reset the reader to avoid bugs when dumping more than once + if (!Settings.DoMFA)Reader.Seek(0);//Reset the reader to avoid bugs when dumping more than once Images = new Dictionary(); @@ -300,7 +300,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Banks chunk.WriteInt16((short) ActionY); chunk.WriteBytes(_transparent); - chunk.WriteBytes(rawImg); + chunk.WriteBytes(_colorArray); if(Flags["Alpha"])chunk.WriteBytes(rawAlpha); writer.WriteInt32(Handle); diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs index 1ea6efe..5745d36 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/MusicBank.cs @@ -35,7 +35,7 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Banks { //Someone is using this lol? //Actually,yes - Reader.Seek(0); + if (!Settings.DoMFA)Reader.Seek(0);//Reset the reader to avoid bugs when dumping more than once Items = new List(); NumOfItems = Reader.ReadInt32(); if (!Settings.DumpMusic) return; diff --git a/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs b/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs index 1f40731..0b1e892 100644 --- a/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs +++ b/NetMFAPatcher/mmfparser/chunkloaders/banks/SoundBank.cs @@ -37,8 +37,11 @@ namespace DotNetCTFDumper.MMFParser.ChunkLoaders.Banks public override void Read() { //Implementing for standalone-only because of my lazyness + if (!Settings.DoMFA)Reader.Seek(0);//Reset the reader to avoid bugs when dumping more than once + + + - Reader.Seek(0);//Reset the reader to avoid bugs when dumping more than once Items = new List(); NumOfItems = Reader.ReadInt32(); Logger.Log("Found " + NumOfItems + " sounds"); diff --git a/NetMFAPatcher/mmfparser/mfaloaders/ChunkList.cs b/NetMFAPatcher/mmfparser/mfaloaders/ChunkList.cs index 14762cc..be7516b 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/ChunkList.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/ChunkList.cs @@ -8,6 +8,12 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders class ChunkList : DataLoader//This is used for MFA reading/writing { List _items = new List(); + + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { throw new NotImplementedException(); @@ -20,7 +26,8 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders { var id = Reader.ReadByte(); if(id==0) break; - Console.WriteLine("ChunkFound:"+id); + var data = new ByteReader(Reader.ReadBytes((int) Reader.ReadUInt32())); + diff --git a/NetMFAPatcher/mmfparser/mfaloaders/Controls.cs b/NetMFAPatcher/mmfparser/mfaloaders/Controls.cs index 9c31a5f..de3e1b6 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/Controls.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/Controls.cs @@ -31,7 +31,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders } } - public void Write(ByteWriter writer) + public override void Write(ByteWriter writer) { writer.WriteInt32(Items.Count); foreach (var item in Items) @@ -85,7 +85,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders } } - public void Write(ByteWriter writer) + public override void Write(ByteWriter writer) { writer.WriteInt32(ControlType); writer.WriteUInt32(16); diff --git a/NetMFAPatcher/mmfparser/mfaloaders/Frame.cs b/NetMFAPatcher/mmfparser/mfaloaders/Frame.cs index f458288..49967d5 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/Frame.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/Frame.cs @@ -13,12 +13,70 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders public int SizeY; public Color Background; public int MaxObjects; + public List Items; + public int Handle; + public int LastViewedX; + public int LastViewedY; + public List Folders; + public List Instances; + public uint Flags; + public string Password; + public List Palette; + public int StampHandle; + public int ActiveLayer; + public List Layers; public Frame(ByteReader reader) : base(reader) { } + public override void Write(ByteWriter Writer) + { + Writer.WriteInt32(Handle); + Writer.AutoWriteUnicode(Name); + Writer.WriteInt32(SizeX); + Writer.WriteInt32(SizeY); + Writer.WriteColor(Background); + Writer.WriteUInt32(Flags); + Writer.WriteInt32(MaxObjects); + Writer.AutoWriteUnicode(Password); + Writer.WriteInt32(0); + Writer.WriteInt32(LastViewedX); + Writer.WriteInt32(LastViewedY); + Writer.WriteInt32(Palette.Count); + foreach (var item in Palette) + { + Writer.WriteColor(item); + } + Writer.WriteInt32(StampHandle); + Writer.WriteInt32(ActiveLayer); + Writer.WriteInt32(Layers.Count); + foreach (var layer in Layers) + { + layer.Write(Writer); + } + //TODO: Do transitions + Writer.WriteInt8(0); + foreach (var item in Items) + { + item.Write(Writer); + } + foreach (var item in Folders) + { + item.Write(Writer); + } + foreach (var item in Instances) + { + item.Write(Writer); + } + + + + + + } + public override void Print() { throw new NotImplementedException(); @@ -26,63 +84,68 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders public override void Read() { - var handle = Reader.ReadInt32(); + Handle = Reader.ReadInt32(); Name = Helper.AutoReadUnicode(Reader); Console.WriteLine(Name); SizeX = Reader.ReadInt32(); SizeY = Reader.ReadInt32(); - var background = Reader.ReadColor(); - var flags = Reader.ReadInt32(); + Background = Reader.ReadColor(); + Flags = Reader.ReadUInt32(); MaxObjects = Reader.ReadInt32(); - var password = Helper.AutoReadUnicode(Reader); + Password = Helper.AutoReadUnicode(Reader); Reader.Skip(4); - var lastViewedX = Reader.ReadInt32(); - var lastViewedY = Reader.ReadInt32(); + LastViewedX = Reader.ReadInt32(); + LastViewedY = Reader.ReadInt32(); var paletteNum = Reader.ReadInt32(); - List palette = new List(); + Palette = new List(); for (int i = 0; i < paletteNum; i++) { - palette.Add(Reader.ReadColor()); + Palette.Add(Reader.ReadColor()); } - var stampHandle = Reader.ReadInt32(); - var activeLayer = Reader.ReadInt32(); + StampHandle = Reader.ReadInt32(); + ActiveLayer = Reader.ReadInt32(); var layersCunt = Reader.ReadInt32(); - var layers = new List(); + Layers = new List(); for (int i = 0; i < layersCunt; i++) { var layer = new Layer(Reader); layer.Read(); - layers.Add(layer); + Layers.Add(layer); } //fadein //fadeout Reader.Skip(2); - var frameitems = new List(); + Items = new List(); var frameitemsCount = Reader.ReadInt32(); - for (int i = 0; i < frameitemsCount; i++) { var frameitem = new FrameItem(Reader); frameitem.Read(); - frameitems.Add(frameitem); + Items.Add(frameitem); Console.WriteLine("Frameitem:"+frameitem.Name); - //break; - } - - - - //ПРОЧИТАЙ ЭТО - //вжух и весь код для фрейма готов - //блин не сработало - //я задолбался, завтра доделаю - //короче я из будущего, тут надо с циклами аккуратно работать, надо создавать переменную для размера - //тип var frameCount = reader.ReadInt32(); - //for(int i=0;i(); + var folderCount = Reader.ReadInt32(); + for (int i = 0; i < frameitemsCount; i++) + { + var folder = new ItemFolder(Reader); + folder.Read(); + Folders.Add(folder); + } + + Instances = new List(); + var instancesCount = 0;//Reader.ReadInt32(); + for (int i = 0; i < instancesCount; i++) + { + var inst = new FrameInstance(Reader); + //inst.Read(); + Instances.Add(inst); + } + @@ -90,10 +153,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders } - public void Write(ByteWriter Writer) - { - - } + } diff --git a/NetMFAPatcher/mmfparser/mfaloaders/FrameItem.cs b/NetMFAPatcher/mmfparser/mfaloaders/FrameItem.cs index 42ed650..6872ed4 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/FrameItem.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/FrameItem.cs @@ -10,13 +10,25 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders public int ObjectType; public int Handle; public string Name; - public bool Transparent; + public int Transparent; public int InkEffect; public int InkEffectParameter; public int AntiAliasing; public int Flags; public int IconType; + public override void Write(ByteWriter Writer) + { + Writer.WriteInt32(this.ObjectType); + Writer.WriteInt32(Handle); + Writer.AutoWriteUnicode(Name); + Writer.WriteInt32(Transparent); + Writer.WriteInt32(InkEffect); + Writer.WriteInt32(InkEffectParameter); + + + } + public override void Print() { Console.WriteLine($"Name: {Name}"); @@ -27,7 +39,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders ObjectType = Reader.ReadInt32(); Handle = Reader.ReadInt32(); Name = Helper.AutoReadUnicode(Reader); - var transparent1 = Reader.ReadInt32(); + Transparent = Reader.ReadInt32(); InkEffect = Reader.ReadInt32(); InkEffectParameter = Reader.ReadInt32(); @@ -47,18 +59,15 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders chunks.Read(); if(ObjectType>=32)//extension base { - //swallow some cum + //TODO: Nonactives } else { - var loader = new Active(Reader); loader.Read(); - - } - Print(); + diff --git a/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs b/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs index ee72ecb..5deffaf 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/ImageBank.cs @@ -46,7 +46,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders var item = new ImageItem(Reader); item.Debug = true; item.Read(); - item.Save($"{Settings.ImagePath}\\{i}.png"); + //item.Save($"{Settings.ImagePath}\\{i}.png"); Items.Add(item.Handle,item); } @@ -55,7 +55,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders - public void Write(ByteWriter writer) + public override void Write(ByteWriter writer) { writer.WriteInt32(GraphicMode); writer.WriteInt16((short) PaletteVersion); @@ -64,10 +64,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders { writer.WriteColor(Palette[i]); } - writer.WriteInt32(Items.Count); + + writer.WriteInt32(0);//(Items.Count); foreach (var key in Items.Keys) { - Items[key].Write(writer); + //Items[key].Write(writer); } } public AgmiBank(ByteReader reader) : base(reader) diff --git a/NetMFAPatcher/mmfparser/mfaloaders/Layer.cs b/NetMFAPatcher/mmfparser/mfaloaders/Layer.cs index d1db328..cc6bee3 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/Layer.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/Layer.cs @@ -4,7 +4,7 @@ using DotNetCTFDumper.Utils; namespace DotNetCTFDumper.MMFParser.MFALoaders { - class Layer : DataLoader + public class Layer : DataLoader { public string Name="ERROR"; public float XCoefficient; @@ -12,6 +12,14 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders public int Flags; + public override void Write(ByteWriter Writer) + { + Helper.AutoWriteUnicode(Writer,Name); + Writer.WriteInt32(Flags); + Writer.WriteSingle(XCoefficient); + Writer.WriteSingle(YCoefficient); + } + public override void Print() { throw new NotImplementedException(); diff --git a/NetMFAPatcher/mmfparser/mfaloaders/ValueList.cs b/NetMFAPatcher/mmfparser/mfaloaders/ValueList.cs index ef8ad4a..497c40f 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/ValueList.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/ValueList.cs @@ -29,7 +29,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders } } - public void Write(ByteWriter Writer) + public override void Write(ByteWriter Writer) { Writer.WriteInt32(Items.Count); foreach (var item in Items) @@ -72,7 +72,7 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders } } - public void Write(ByteWriter Writer) + public override void Write(ByteWriter Writer) { Writer.AutoWriteUnicode(Name); if (Value is string) diff --git a/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/AnimationObject.cs b/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/AnimationObject.cs index 822ba14..d8b47d8 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/AnimationObject.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/AnimationObject.cs @@ -29,6 +29,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks class Animation : DataLoader { public string Name = "Animation-UNKNOWN"; + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { Logger.Log($" Found animation: {Name} "); @@ -54,6 +59,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks class AnimationDirection : DataLoader { public string Name = "Animation-UNKNOWN"; + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { throw new NotImplementedException(); diff --git a/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/Behaviours.cs b/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/Behaviours.cs index 1b0cefc..65a19b2 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/Behaviours.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/Behaviours.cs @@ -8,6 +8,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks class Behaviours : DataLoader { List _items = new List(); + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { throw new NotImplementedException(); @@ -29,6 +34,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks { public string Name = "ERROR"; public ByteReader Data; + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { throw new NotImplementedException(); diff --git a/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/Movements.cs b/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/Movements.cs index 5a5110d..8fcf5e9 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/Movements.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/Movements.cs @@ -8,6 +8,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks class Movements : DataLoader { public List Items = new List(); + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { throw new NotImplementedException(); @@ -32,6 +37,11 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks { public string Name="ERROR"; + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + public override void Print() { throw new NotImplementedException(); diff --git a/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/ObjectLoader.cs b/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/ObjectLoader.cs index 0c22e8f..8960aca 100644 --- a/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/ObjectLoader.cs +++ b/NetMFAPatcher/mmfparser/mfaloaders/mfachunks/ObjectLoader.cs @@ -15,7 +15,12 @@ namespace DotNetCTFDumper.MMFParser.MFALoaders.mfachunks public ValueList Strings; public Movements Movements; public Behaviours Behaviours; - + + public override void Write(ByteWriter Writer) + { + throw new System.NotImplementedException(); + } + public override void Print() { Logger.Log("Object Loader: ");