From 411770e59092858573e748b4ab9b458b657aa708 Mon Sep 17 00:00:00 2001 From: 1987kostya Date: Sun, 27 Dec 2020 15:53:07 +0600 Subject: [PATCH] 2.5+ tests --- CTFAK/GUI/MainForm.cs | 5 +- CTFAK/MMFParser/EXE/ChunkList.cs | 1 + .../MMFParser/EXE/Loaders/Banks/ImageBank.cs | 60 ++++++++++++------- CTFAK/Program.cs | 20 ++----- CTFAK/Settings.cs | 5 +- CTFAK/Utils/Logger.cs | 1 + 6 files changed, 51 insertions(+), 41 deletions(-) diff --git a/CTFAK/GUI/MainForm.cs b/CTFAK/GUI/MainForm.cs index aae5713..da1e905 100644 --- a/CTFAK/GUI/MainForm.cs +++ b/CTFAK/GUI/MainForm.cs @@ -33,7 +33,7 @@ namespace DotNetCTFDumper.GUI public static bool BreakMusics; public static bool Loaded; public static Color ColorTheme = Color.FromArgb(223, 114, 38); - + public delegate void SaveHandler(int index, int all); public delegate void IncrementSortedProgressBar(int all); @@ -105,6 +105,7 @@ namespace DotNetCTFDumper.GUI }; KeyPreview = true; tabControl1.Selecting += tabControl1_Selecting; + tabControl1.TabPages.Remove(mfaTab); } @@ -116,7 +117,7 @@ namespace DotNetCTFDumper.GUI if (e.TabPage != mainTab) e.Cancel = true; } - _soundPlayer.Stop(); + //_soundPlayer.Stop(); } diff --git a/CTFAK/MMFParser/EXE/ChunkList.cs b/CTFAK/MMFParser/EXE/ChunkList.cs index ce75efc..d53646a 100644 --- a/CTFAK/MMFParser/EXE/ChunkList.cs +++ b/CTFAK/MMFParser/EXE/ChunkList.cs @@ -86,6 +86,7 @@ namespace DotNetCTFDumper.MMFParser.EXE ChunkData = exeReader.ReadBytes(Size); break; } + Save(); } diff --git a/CTFAK/MMFParser/EXE/Loaders/Banks/ImageBank.cs b/CTFAK/MMFParser/EXE/Loaders/Banks/ImageBank.cs index ac8c720..af974ce 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Banks/ImageBank.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Banks/ImageBank.cs @@ -4,18 +4,20 @@ using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Runtime.InteropServices; +using System.Windows.Forms; using DotNetCTFDumper.GUI; using DotNetCTFDumper.Utils; +using Joveler.Compression.ZLib; using static DotNetCTFDumper.MMFParser.EXE.ChunkList; namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks { public class ImageBank : ChunkLoader { - public bool SaveImages = false; + public bool SaveImages = true; public Dictionary Images = new Dictionary(); public uint NumberOfItems; - public bool PreloadOnly=true; + public bool PreloadOnly=false; public ImageBank(ByteReader reader) : base(reader) { @@ -153,7 +155,9 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks { Handle = Reader.ReadInt32() - 1; Position = (int) Reader.Tell(); + Logger.Log("ImageFound: "+Handle); if (load) Load(); + else Preload(); } @@ -178,6 +182,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks _bitmap = null; Reader.Seek(Position); ByteReader imageReader; + Console.WriteLine("Preloading Image"); if (Settings.twofiveplus) { @@ -185,7 +190,13 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks } // imageReader = Debug ? Reader : Decompressor.DecompressAsReader(Reader, out var a); + imageReader = Debug ? Reader : Decompressor.DecompressAsReader(Reader, out var a); + + //Directory.CreateDirectory("DUMP\\DEBUG"); + //File.WriteAllBytes($"DUMP\\DEBUG\\Img-{Handle}.imgb",imageReader.ReadBytes((int) imageReader.Size())); + + long start = imageReader.Tell(); _checksum = imageReader.ReadInt32(); @@ -201,15 +212,17 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks _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); + if (!Settings.twofiveplus) + imageReader = Debug ? Reader : Decompressor.DecompressAsReader(Reader, out var a); + else imageReader = Reader; long start = imageReader.Tell(); - + + + //return; + if(Settings.twofiveplus) imageReader.Skip(4); _checksum = imageReader.ReadInt32(); _references = imageReader.ReadInt32(); Size = (int) imageReader.ReadUInt32(); - if (Debug) { imageReader = new ByteReader(imageReader.ReadBytes(Size + 20)); @@ -218,6 +231,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks _width = imageReader.ReadInt16(); _height = imageReader.ReadInt16(); _graphicMode = imageReader.ReadByte(); //Graphic mode is always 4 for SL + Flags.flag = imageReader.ReadByte(); imageReader.Skip(2); @@ -226,10 +240,12 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks ActionX = imageReader.ReadInt16(); ActionY = imageReader.ReadInt16(); _transparent = imageReader.ReadBytes(4); - //Logger.Log($"Loading image {Handle.ToString(),4} Size: {_width,4}x{_height,4}"); + Logger.Log($"Loading image {Handle.ToString(),4} Size: {_width,4}x{_height,4}"); byte[] imageData; + Flags["LZX"] = false; if (Flags["LZX"]) { + uint decompressedSize = imageReader.ReadUInt32(); imageData = Decompressor.decompress_block(imageReader, (int) (imageReader.Size() - imageReader.Tell()), (int) decompressedSize); @@ -242,11 +258,14 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks int bytesRead = 0; rawImg = imageData; + if (Flags["RLE"] || Flags["RLEW"] || Flags["RLET"]) { + } else { + switch (_graphicMode) { case 4: @@ -264,6 +283,11 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks (_colorArray, bytesRead) = ImageHelper.ReadSixteen(imageData, _width, _height); break; } + default: + { + break; + } + } } @@ -281,18 +305,22 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks } } } + return; } public void Save(string filename) { + try { + Logger.Log("Trying to save image"); Bitmap.Save(filename); } catch { + Logger.Log("RIP"); using (var bmp = new Bitmap(_width, _height, PixelFormat.Format32bppArgb)) { BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, @@ -306,6 +334,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks bmp.UnlockBits(bmpData); bmp.Save(filename); + Logger.Log("Trying again"); } } @@ -338,20 +367,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks } } - // private byte[] GenerateImage() - // { - // Int32 pad = ImageHelper.GetPadding(_width, 3); - // byte[] points = new byte[(_width * _height + pad * _height)*3]; - // for (UInt32 y = 0; y < _height; y++) - // { - // for (UInt32 x = 0; x < _height; x++) - // { - // - // } - // } - // - // return points; - // } + public void Write(ByteWriter writer) diff --git a/CTFAK/Program.cs b/CTFAK/Program.cs index b4cf371..f3ec3d3 100644 --- a/CTFAK/Program.cs +++ b/CTFAK/Program.cs @@ -30,23 +30,11 @@ namespace DotNetCTFDumper var verbose = false; var dumpImages = true; var dumpSounds = true; - AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) => + /*AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) => { Logger.Log("ERROR: "); Logger.Log(eventArgs.Exception.ToString()); - /*ErrorLogBox error = null; - try - { - error = new ErrorLogBox(eventArgs.Exception); - } - finally - { - Application.Run(error); - }*/ - - - - }; + };*/ Settings.UseGUI = true; @@ -54,6 +42,10 @@ namespace DotNetCTFDumper { MyForm = new MainForm(Color.FromName(args[0])); } + if (args.Length > 1) + { + ReadFile(args[1],true,true,true); + } else if(args.Length==0) { MyForm = new MainForm(Color.FromArgb(223, 114, 38)); diff --git a/CTFAK/Settings.cs b/CTFAK/Settings.cs index 1f0cddd..940c80d 100644 --- a/CTFAK/Settings.cs +++ b/CTFAK/Settings.cs @@ -10,7 +10,7 @@ namespace DotNetCTFDumper public static bool SaveChunks; public static bool Verbose; public static bool Old; - public static bool twofiveplus; + public static bool twofiveplus=true; public static string GamePath; public static string GameName => Path.GetFileNameWithoutExtension(GamePath); @@ -21,8 +21,7 @@ namespace DotNetCTFDumper public static string ChunkPath=>$"{DumpPath}\\Chunks"; public static string ExtensionPath=>$"{DumpPath}\\Extensions"; - - + public static string AppName; public static string Copyright; public static string ProjectPath; diff --git a/CTFAK/Utils/Logger.cs b/CTFAK/Utils/Logger.cs index bbc1575..c02a89b 100644 --- a/CTFAK/Utils/Logger.cs +++ b/CTFAK/Utils/Logger.cs @@ -10,6 +10,7 @@ namespace DotNetCTFDumper.Utils static StreamWriter _writer; public static void Log(string text, bool logToScreen = true,ConsoleColor color = ConsoleColor.White, bool logToConsole=true) { + if (_writer == null) { File.Delete("NewLog.log");