diff --git a/NetMFAPatcher/GUI/FrameViewer.cs b/NetMFAPatcher/GUI/FrameViewer.cs index 087bb75..1ecef8e 100644 --- a/NetMFAPatcher/GUI/FrameViewer.cs +++ b/NetMFAPatcher/GUI/FrameViewer.cs @@ -25,7 +25,7 @@ namespace DotNetCTFDumper.GUI InitializeComponent(); this.Width = frame.Width; this.Height = frame.Height; - this.BackColor = frame.Background; + this.BackColor = Color.Black; this.Text = "Frame Viewer: "+frame.Name; images = imgs; contextMenuStrip1.ItemClicked+= new ToolStripItemClickedEventHandler(MenuItemSelected); diff --git a/NetMFAPatcher/GUI/HexViewForm.cs b/NetMFAPatcher/GUI/HexViewForm.cs index eae2daf..3609dc3 100644 --- a/NetMFAPatcher/GUI/HexViewForm.cs +++ b/NetMFAPatcher/GUI/HexViewForm.cs @@ -11,9 +11,7 @@ namespace DotNetCTFDumper.GUI { public byte[] parsedData; public byte[] rawData; - private ByteViewer _viewer; - - + public HexViewForm(byte[] parsedData, byte[] rawData,Color color) { InitializeComponent(); @@ -74,7 +72,7 @@ namespace DotNetCTFDumper.GUI private void hexBox1_Click(object sender, EventArgs e) { - Console.WriteLine("Semen"); + } } diff --git a/NetMFAPatcher/MMFParser/EXE/Loaders/Banks/ImageBank.cs b/NetMFAPatcher/MMFParser/EXE/Loaders/Banks/ImageBank.cs index 4a7b673..074d725 100644 --- a/NetMFAPatcher/MMFParser/EXE/Loaders/Banks/ImageBank.cs +++ b/NetMFAPatcher/MMFParser/EXE/Loaders/Banks/ImageBank.cs @@ -12,9 +12,10 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks { public class ImageBank : ChunkLoader { - public bool SaveImages = true; + public bool SaveImages = false; public Dictionary Images = new Dictionary(); public uint NumberOfItems; + public bool PreloadOnly=true; public ImageBank(ByteReader reader) : base(reader) { @@ -45,6 +46,16 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks Settings.DumpImages = cache; } + public void Preload() + { + + } + + public void LoadByHandle(int handle) + { + Images[handle].Load(); + } + public event MainForm.SaveHandler OnImageSaved; @@ -55,25 +66,26 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks public override void Read() { if (!Settings.DoMFA) Reader.Seek(0); //Reset the reader to avoid bugs when dumping more than once - Images = new Dictionary(); + var tempImages = new Dictionary(); NumberOfItems = Reader.ReadUInt32(); Console.WriteLine($"Found {NumberOfItems} images"); + - if (!Settings.DumpImages) return; + //if (!Settings.DumpImages) return; for (int i = 0; i < NumberOfItems; i++) { if (MainForm.BreakImages) { - MainForm.BreakImages = false; + break; } var item = new ImageItem(Reader); - item.Read(); - Images.Add(item.Handle, item); + item.Read(!PreloadOnly); + tempImages.Add(item.Handle, item); if (SaveImages) item.Save($"{Settings.ImagePath}\\" + item.Handle.ToString() + ".png"); OnImageSaved?.Invoke(i,(int) NumberOfItems); @@ -85,6 +97,10 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks //images[item.handle] = item; } + + if (!MainForm.BreakImages) Images = tempImages; + MainForm.BreakImages = false; + Console.WriteLine("Len:"+Images.Keys.Count); } } @@ -128,11 +144,19 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks public int Debug2 = 1; private Bitmap _bitmap; + public void Read(bool load) + { + Handle = Reader.ReadInt32() - 1; + Position = (int) Reader.Tell(); + if (load) Load(); + else Preload(); + + } public override void Read() { Handle = Reader.ReadInt32() - 1; Position = (int) Reader.Tell(); - Load(); + Preload(); } public override void Print(bool ext) @@ -144,6 +168,24 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks throw new NotImplementedException(); } + public void Preload() + { + _bitmap = null; + Reader.Seek(Position); + ByteReader imageReader; + + // imageReader = Debug ? Reader : Decompressor.DecompressAsReader(Reader, out var a); + imageReader = Debug ? Reader : Decompressor.DecompressAsReader(Reader, out var a); + long start = imageReader.Tell(); + + _checksum = imageReader.ReadInt32(); + _references = imageReader.ReadInt32(); + Size = (int) imageReader.ReadUInt32(); + imageReader.Seek(start+Size); + + } + + public void Load() { _bitmap = null; @@ -255,6 +297,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks { get { + if (_colorArray==null) Load(); if (_bitmap == null) { _bitmap = new Bitmap(_width, _height, PixelFormat.Format32bppArgb); diff --git a/NetMFAPatcher/MMFParser/EXE/Loaders/ObjectInfo.cs b/NetMFAPatcher/MMFParser/EXE/Loaders/ObjectInfo.cs index cadec03..b82d39c 100644 --- a/NetMFAPatcher/MMFParser/EXE/Loaders/ObjectInfo.cs +++ b/NetMFAPatcher/MMFParser/EXE/Loaders/ObjectInfo.cs @@ -105,7 +105,14 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders anims.AnimationDict.TryGetValue(0, out Animation anim); anim.DirectionDict.TryGetValue(0, out AnimationDirection direction); - var firstFrameHandle = direction.Frames[0]; + + var firstFrameHandle = direction.Frames[0]; + + if (images.Images[firstFrameHandle].Bitmap == null) + { + Console.WriteLine("Preloading "+firstFrameHandle); + images.LoadByHandle(firstFrameHandle); + } bmp = images.Images[firstFrameHandle]; } diff --git a/NetMFAPatcher/Utils/Backend.cs b/NetMFAPatcher/Utils/Backend.cs index 8eb5987..78d2040 100644 --- a/NetMFAPatcher/Utils/Backend.cs +++ b/NetMFAPatcher/Utils/Backend.cs @@ -28,7 +28,11 @@ namespace DotNetCTFDumper.Utils { if (Instance.GameData.GameChunks.GetChunk() == null) return; form.SetImageElements(true); - worker.DoWork += (senderA, eA) => { Instance.GameData.GameChunks.GetChunk().Read(load,save); }; + worker.DoWork += (senderA, eA) => + { + Instance.GameData.GameChunks.GetChunk().PreloadOnly = false; + Instance.GameData.GameChunks.GetChunk().Read(load,save); + }; worker.RunWorkerCompleted += (senderA, eA) => { form.SetImageElements(false);