Add 2.5+ detection,ignoring images for 2.5+

master
1987kostya 5 years ago
parent aec50d9a2b
commit b839afddb1

@ -22,10 +22,19 @@ namespace DotNetCTFDumper.MMFParser.EXE
Chunk chunk = new Chunk(Chunks.Count, this); Chunk chunk = new Chunk(Chunks.Count, this);
chunk.Verbose = Verbose; chunk.Verbose = Verbose;
chunk.Read(reader); chunk.Read(reader);
chunk.Loader = LoadChunk(chunk); if (chunk.Id == 26214)
{
if(!Settings.twofiveplus) chunk.Loader = LoadChunk(chunk);
}
else
{
chunk.Loader = LoadChunk(chunk);
}
Chunks.Add(chunk); Chunks.Add(chunk);
if (chunk.Id == 8750) chunk.BuildKey(); if (chunk.Id == 8750) chunk.BuildKey();
if (chunk.Id == 8788) Settings.twofiveplus = true; if (chunk.Id == 8788) Settings.twofiveplus = true;
if (reader.Tell() >= reader.Size()) break; if (reader.Tell() >= reader.Size()) break;
if (chunk.Id == 32639) break; //LAST chunkID if (chunk.Id == 32639) break; //LAST chunkID

@ -17,7 +17,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks
public bool SaveImages = false; public bool SaveImages = false;
public Dictionary<int, ImageItem> Images = new Dictionary<int, ImageItem>(); public Dictionary<int, ImageItem> Images = new Dictionary<int, ImageItem>();
public uint NumberOfItems; public uint NumberOfItems;
public bool PreloadOnly=false; public bool PreloadOnly=true;
public ImageBank(ByteReader reader) : base(reader) public ImageBank(ByteReader reader) : base(reader)
{ {
@ -70,6 +70,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks
public override void Read() public override void Read()
{ {
if (!Settings.DoMFA) 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
var tempImages = new Dictionary<int, ImageItem>(); var tempImages = new Dictionary<int, ImageItem>();
@ -184,14 +185,39 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks
imageReader = Debug ? Reader : Decompressor.DecompressAsReader(Reader, out var a); imageReader = Debug ? Reader : Decompressor.DecompressAsReader(Reader, out var a);
else imageReader = Reader; else imageReader = Reader;
long start = imageReader.Tell(); long start = imageReader.Tell();
if (Settings.twofiveplus)
{
var unk = imageReader.ReadBytes(4);
if (unk.GetHex(4) != "FF FF FF FF ")
{
Logger.Log(Reader.Tell().ToString());
Size = (int) BitConverter.ToUInt32(unk,0);
_references = imageReader.ReadInt32();
_checksum = (int) imageReader.ReadUInt32();
}
else
{
Size = (int) imageReader.ReadInt32();
_references = imageReader.ReadInt32();
_checksum = (int) imageReader.ReadUInt32();
}
Logger.Log("Size: "+Size);
Logger.Log("References: "+_references);
Logger.Log("Checksum: "+_checksum);
}
else
{
_checksum = imageReader.ReadInt32();
_references = imageReader.ReadInt32();
Size = (int) imageReader.ReadUInt32();
}
imageReader.Seek(start+ _checksum);//to prevent bugs
//return;
if(Settings.twofiveplus) imageReader.Skip(4);
_checksum = imageReader.ReadInt32();
_references = imageReader.ReadInt32();
Size = (int) imageReader.ReadUInt32();
imageReader.Seek(start+Size);
} }
@ -229,7 +255,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks
ActionX = imageReader.ReadInt16(); ActionX = imageReader.ReadInt16();
ActionY = imageReader.ReadInt16(); ActionY = imageReader.ReadInt16();
_transparent = imageReader.ReadBytes(4); _transparent = imageReader.ReadBytes(4);
Logger.Log($"Loading image {Handle.ToString(),4} Size: {_width,4}x{_height,4}"); if(Settings.twofiveplus)Logger.Log($"Loading image {Handle.ToString(),4} Size: {_width,4}x{_height,4}");
byte[] imageData; byte[] imageData;
Flags["LZX"] = false; Flags["LZX"] = false;
if (Flags["LZX"]) if (Flags["LZX"])
@ -274,7 +300,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks
} }
case 8: case 8:
{ {
//imageReader.Seek(start+Size); imageReader.Seek(start+Size);
return; return;
(_colorArray, bytesRead) = ImageHelper.Read32(imageData, _width, _height); (_colorArray, bytesRead) = ImageHelper.Read32(imageData, _width, _height);
break; break;
@ -311,7 +337,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks
try try
{ {
Logger.Log("Trying to save image"); if(Settings.twofiveplus) Logger.Log("Trying to save image");
Bitmap.Save(filename); Bitmap.Save(filename);
} }
catch catch

Loading…
Cancel
Save