Add 2.5+ detection,ignoring images for 2.5+

master
1987kostya
parent aec50d9a2b
commit b839afddb1

@ -22,10 +22,19 @@ namespace DotNetCTFDumper.MMFParser.EXE
Chunk chunk = new Chunk(Chunks.Count, this);
chunk.Verbose = Verbose;
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);
if (chunk.Id == 8750) chunk.BuildKey();
if (chunk.Id == 8788) Settings.twofiveplus = true;
if (reader.Tell() >= reader.Size()) break;
if (chunk.Id == 32639) break; //LAST chunkID

@ -17,7 +17,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks
public bool SaveImages = false;
public Dictionary<int, ImageItem> Images = new Dictionary<int, ImageItem>();
public uint NumberOfItems;
public bool PreloadOnly=false;
public bool PreloadOnly=true;
public ImageBank(ByteReader reader) : base(reader)
{
@ -70,6 +70,7 @@ 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
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);
else imageReader = Reader;
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();
}
//return;
if(Settings.twofiveplus) imageReader.Skip(4);
_checksum = imageReader.ReadInt32();
_references = imageReader.ReadInt32();
Size = (int) imageReader.ReadUInt32();
imageReader.Seek(start+Size);
imageReader.Seek(start+ _checksum);//to prevent bugs
}
@ -229,7 +255,7 @@ 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}");
if(Settings.twofiveplus)Logger.Log($"Loading image {Handle.ToString(),4} Size: {_width,4}x{_height,4}");
byte[] imageData;
Flags["LZX"] = false;
if (Flags["LZX"])
@ -274,7 +300,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks
}
case 8:
{
//imageReader.Seek(start+Size);
imageReader.Seek(start+Size);
return;
(_colorArray, bytesRead) = ImageHelper.Read32(imageData, _width, _height);
break;
@ -311,7 +337,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders.Banks
try
{
Logger.Log("Trying to save image");
if(Settings.twofiveplus) Logger.Log("Trying to save image");
Bitmap.Save(filename);
}
catch

Loading…
Cancel
Save