diff --git a/CTFAK/MMFParser/EXE/ChunkList.cs b/CTFAK/MMFParser/EXE/ChunkList.cs index 77c0edc..5c48a6f 100644 --- a/CTFAK/MMFParser/EXE/ChunkList.cs +++ b/CTFAK/MMFParser/EXE/ChunkList.cs @@ -292,11 +292,13 @@ namespace CTFAK.MMFParser.EXE loader = new GlobalStrings(chunk); break; case 13117: - // loader = new Events(chunk); + loader = new Events(chunk); break; } loader?.Read(); + chunk.ChunkData = null; + chunk.RawData = null; return loader; } diff --git a/CTFAK/MMFParser/MFA/Loaders/ChunkList.cs b/CTFAK/MMFParser/MFA/Loaders/ChunkList.cs index 63a5235..a64ce3d 100644 --- a/CTFAK/MMFParser/MFA/Loaders/ChunkList.cs +++ b/CTFAK/MMFParser/MFA/Loaders/ChunkList.cs @@ -13,6 +13,37 @@ namespace CTFAK.MMFParser.MFA.Loaders public List Items = new List(); public bool Log=false; + public T GetChunk() where T : MFAChunkLoader + { + foreach (MFAChunk chunk in Items) + { + if (chunk.Loader.GetType() == typeof(T)) + { + return (T) chunk.Loader; + } + } + return null; + } + + public bool ContainsChunk() where T : MFAChunkLoader + { + foreach (MFAChunk chunk in Items) + { + if (chunk.Loader.GetType() == typeof(T)) + { + return true; + } + } + return false; + } + + public MFAChunk NewChunk() where T : MFAChunkLoader, new() + { + var newChunk = new MFAChunk(null); + newChunk.Id = 33; + newChunk.Loader = new T(); + return newChunk; + } public override void Write(ByteWriter Writer) { foreach (MFAChunk chunk in Items) @@ -20,8 +51,6 @@ namespace CTFAK.MMFParser.MFA.Loaders chunk.Write(Writer); } Writer.WriteInt8(0); - return; - } @@ -32,10 +61,10 @@ namespace CTFAK.MMFParser.MFA.Loaders public override void Read() { - var start = Reader.Tell(); + var start = base.Reader.Tell(); while(true) { - var newChunk = new MFAChunk(Reader); + var newChunk = new MFAChunk(base.Reader); newChunk.Read(); if(Log)Logger.Log("ChunkID: "+newChunk.Id); if(newChunk.Id==0) break; @@ -45,9 +74,9 @@ namespace CTFAK.MMFParser.MFA.Loaders } - var size = Reader.Tell() - start; - Reader.Seek(start); - Saved = Reader.ReadBytes((int) size); + var size = base.Reader.Tell() - start; + base.Reader.Seek(start); + Saved = base.Reader.ReadBytes((int) size); } @@ -118,6 +147,9 @@ namespace CTFAK.MMFParser.MFA.Loaders public int Right; public int Bottom; public FrameVirtualRect(ByteReader reader) : base(reader){} + + + public override void Read() { Left = Reader.ReadInt32(); @@ -133,7 +165,7 @@ namespace CTFAK.MMFParser.MFA.Loaders Writer.WriteInt32(Top); Writer.WriteInt32(Right); Writer.WriteInt32(Bottom); - + } } diff --git a/CTFAK/MMFParser/MFA/Loaders/Frame.cs b/CTFAK/MMFParser/MFA/Loaders/Frame.cs index 284cedb..fee8336 100644 --- a/CTFAK/MMFParser/MFA/Loaders/Frame.cs +++ b/CTFAK/MMFParser/MFA/Loaders/Frame.cs @@ -114,15 +114,7 @@ namespace CTFAK.MMFParser.MFA.Loaders Events.Write(Writer); - - for (int i = 0; i < Layers.Count-1; i++) - { - Writer.WriteUInt32(Layers[i].Unk1); - Writer.WriteUInt32(Layers[i].Unk2); - Writer.WriteUInt32(Layers[i].Unk3); - Logger.Log($"{Layers[i].Unk1}-{Layers[i].Unk2}-{Layers[i].Unk3}"); - } - + Chunks.Write(Writer); } @@ -207,12 +199,7 @@ namespace CTFAK.MMFParser.MFA.Loaders Events = new Events(Reader); Events.Read(); - for (int i=0;i(); + // newRectLoader.Right = frame.Width; + // newRectLoader.Bottom = frame.Height; + + newFrame.Background = frame.Background; newFrame.FadeIn = null; newFrame.FadeOut = null; - // newFrame.UnkString = " "; var mfaFlags = newFrame.Flags; var originalFlags = frame.Flags; + + mfaFlags["GrabDesktop"] = originalFlags["GrabDesktop"]; mfaFlags["KeepDisplay"] = originalFlags["KeepDisplay"]; @@ -152,12 +160,12 @@ namespace CTFAK.MMFParser.Translation newLayer.RGBCoeff = Color.FromArgb(255,0,0,255); newFrame.Layers.Add(newLayer); - break; + // break; // } - Message("Translating frame: " + newFrame.Name); + var newFrameItems = new List(); var newInstances = new List(); if (frame.Objects != null) @@ -181,7 +189,7 @@ namespace CTFAK.MMFParser.Translation newInstance.ParentType = (uint) instance.ParentType; newInstance.ItemHandle = (uint) (instance.ObjectInfo); newInstance.ParentHandle = (uint) instance.ParentHandle; - newInstance.Layer = 0;//(uint) (instance.Layer); + newInstance.Layer = (uint) (instance.Layer); newInstances.Add(newInstance); // Logger.Log($"{instance.FrameItem.Name} - {i}"); @@ -202,8 +210,8 @@ namespace CTFAK.MMFParser.Translation newFrame.Folders.Add(newFolder); } - - if (frame.Events != null) + + // if (frame.Events != null) { newFrame.Events = new Events((ByteReader) null); //MFA.MFA.emptyEvents; newFrame.Events.Items = new List(); @@ -261,12 +269,11 @@ namespace CTFAK.MMFParser.Translation } }*/ newFrame.Events.Items.Add(item); + } } } - - newFrame.Chunks = new ChunkList(null); mfa.Frames.Add(newFrame); diff --git a/CTFAK/Program.cs b/CTFAK/Program.cs index b217f33..97d65cc 100644 --- a/CTFAK/Program.cs +++ b/CTFAK/Program.cs @@ -48,21 +48,18 @@ namespace CTFAK Settings.UseGUI = true; + if (args.Length > 0) { - MyForm = new MainForm(Color.FromName(args[0])); - } - if (args.Length > 1) - { - if (args[1].EndsWith(".exe")) + if (args[0].EndsWith(".exe")) { - ReadFile(args[1],true,false,true); + ReadFile(args[0],true,false,true); MFAGenerator.BuildMFA(); Environment.Exit(0); } else { - var reader = new ByteReader(new FileStream(args[1],FileMode.Open)); + var reader = new ByteReader(new FileStream(args[0],FileMode.Open)); CleanData = new GameData(); CleanData.Read(reader); }