Imagebank hotfix

master
1987kostya 4 years ago
parent 6796997420
commit 228dc1083e

@ -609,7 +609,7 @@ namespace CTFAK.GUI
public void InitImages()
{
if (Settings.twofiveplus) return;
if (Settings.GameType == GameType.TwoFivePlus) return;
var bank = Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>();
var items = bank.Images.ToList();
var filtered = items.OrderBy(x => x.Value.Handle);

@ -19,7 +19,7 @@ namespace CTFAK.MMFParser.EXE
public void Read(ByteReader reader)
{
Chunks.Clear();
if (!Settings.Old)
if (Settings.GameType == GameType.Normal)
{
while (true)
{
@ -28,7 +28,7 @@ namespace CTFAK.MMFParser.EXE
chunk.Read(reader);
if (chunk.Id == 26214)
{
if(!Settings.twofiveplus) chunk.Loader = LoadModern(chunk);
if(Settings.GameType != GameType.TwoFivePlus) chunk.Loader = LoadModern(chunk);
}
else
{
@ -37,14 +37,14 @@ namespace CTFAK.MMFParser.EXE
Chunks.Add(chunk);
if (chunk.Id == 8750) chunk.BuildKey();
if (chunk.Id == 8788) Settings.twofiveplus = true;
if (chunk.Id == 8788) Settings.GameType = GameType.TwoFivePlus;
if (reader.Tell() >= reader.Size()) break;
if (chunk.Id == 32639) break; //LAST chunkID
}
}
else
else if(Settings.GameType == GameType.OnePointFive)
{
while (true)
{
@ -106,15 +106,14 @@ namespace CTFAK.MMFParser.EXE
ChunkData = Decryption.DecodeMode3(exeReader.ReadBytes(Size), Size,Id,out DecompressedSize);
break;
case ChunkFlags.Compressed:
if (!Settings.Old) ChunkData = Decompressor.Decompress(exeReader, out DecompressedSize);
else
if (Settings.GameType == GameType.OnePointFive)
{
var start = exeReader.Tell();
var decompSize = exeReader.ReadInt32();
var buff = exeReader.ReadBytes(Size);
ChunkData = Decompressor.decompressOld(buff, Size, decompSize);
ChunkData = Decompressor.DecompressOld(exeReader);
exeReader.Seek(start+Size);
}
else ChunkData = Decompressor.Decompress(exeReader, out DecompressedSize);
break;
case ChunkFlags.NotCompressed:
ChunkData = exeReader.ReadBytes(Size);

@ -62,13 +62,16 @@ namespace CTFAK.MMFParser.EXE
exeReader.Seek(possition);
var firstShort = exeReader.PeekUInt16();
Logger.Log("First Short: " + firstShort.ToString("X2"), true, ConsoleColor.Yellow);
if (firstShort == 0x7777) Settings.Old = false;
else if (firstShort == 0x222c) Settings.Old = true;
else
if (firstShort == 0x7777)
{
Settings.GameType = GameType.Normal;
}
else if (firstShort == 0x222c)
{
Logger.Log(firstShort.ToString("x8"));
Settings.GameType = GameType.OnePointFive;
}
if (!Settings.Old)
if (Settings.GameType == GameType.Normal)
{
PackData = new PackData();
Logger.Log("Found PackData header!\nReading PackData header.", true, ConsoleColor.Blue);

@ -61,7 +61,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
{
{
if (!Settings.Old) Size = Reader.ReadInt32();
if (Settings.GameType != GameType.OnePointFive) Size = Reader.ReadInt32();
Flags.flag=(uint) Reader.ReadInt16();
NewFlags.flag = (uint) Reader.ReadInt16();

@ -146,8 +146,8 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Handle = Reader.ReadInt32();
if (!Debug)
{
if (Settings.Build>291) Handle -= 1;
if (Program.CleanData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1;
if (Settings.Build>=289) Handle -= 1;
// if (Program.CleanData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1;
}
Position = (int) Reader.Tell();
@ -160,8 +160,8 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Handle = Reader.ReadInt32();
if (!Debug)
{
if (Settings.Build>291) Handle -= 1;
if (Exe.Instance.GameData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1;
if (Settings.Build>=289) Handle -= 1;
// if (Exe.Instance.GameData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1;
}
Position = (int) Reader.Tell();
@ -182,12 +182,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
_bitmap = null;
Reader.Seek(Position);
ByteReader imageReader;
if (!Settings.twofiveplus)
if (Settings.GameType != GameType.TwoFivePlus)
{
if (Settings.Old)
if (Settings.GameType == GameType.OnePointFive)
{
var decompSize = Reader.ReadInt32();
imageReader =new ByteReader(Decompressor.decompressOld(Reader.ReadBytes((int) Reader.Size()), (int) Reader.Size(), decompSize));
imageReader =new ByteReader(Decompressor.DecompressOldBlock(Reader.ReadBytes((int) Reader.Size()), (int) Reader.Size(), decompSize));
}
else
{
@ -199,8 +199,8 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
//return;
if (Settings.twofiveplus) imageReader.Skip(4);
if (Settings.Old)
if (Settings.GameType == GameType.TwoFivePlus) imageReader.Skip(4);
if (Settings.GameType == GameType.OnePointFive)
{
_checksum = imageReader.ReadInt16();
}
@ -220,12 +220,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
_bitmap = null;
Reader.Seek(Position);
ByteReader imageReader;
if (!Settings.twofiveplus)
if (Settings.GameType != GameType.TwoFivePlus)
{
if (Settings.Old)
if (Settings.GameType == GameType.OnePointFive)
{
var decompSize = Reader.ReadInt32();
imageReader =new ByteReader(Decompressor.decompressOld(Reader.ReadBytes((int) Reader.Size()), (int) Reader.Size(), decompSize));
imageReader =new ByteReader(Decompressor.DecompressOldBlock(Reader.ReadBytes((int) Reader.Size()), (int) Reader.Size(), decompSize));
}
else
{
@ -237,8 +237,8 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
//return;
if (Settings.twofiveplus) imageReader.Skip(4);
if (Settings.Old)
if (Settings.GameType == GameType.TwoFivePlus) imageReader.Skip(4);
if (Settings.GameType == GameType.OnePointFive)
{
_checksum = imageReader.ReadInt16();
}
@ -257,20 +257,20 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Flags.flag = imageReader.ReadByte();
if(!Settings.Old)imageReader.Skip(2);
if(Settings.GameType != GameType.OnePointFive)imageReader.Skip(2);
XHotspot = imageReader.ReadInt16();
YHotspot = imageReader.ReadInt16();
ActionX = imageReader.ReadInt16();
ActionY = imageReader.ReadInt16();
if(!Settings.Old)_transparent = imageReader.ReadColor();
if(Settings.GameType != GameType.OnePointFive)_transparent = imageReader.ReadColor();
// Logger.Log($"Loading image {Handle.ToString(),4} Size: {_width,4}x{_height,4}");
byte[] imageData;
if (Settings.twofiveplus) Flags["LZX"] = false;
if (Settings.GameType == GameType.TwoFivePlus) Flags["LZX"] = false;
if (Flags["LZX"])
{
uint decompressedSize = imageReader.ReadUInt32();
imageData = Decompressor.decompress_block(imageReader, (int) (imageReader.Size() - imageReader.Tell()),
imageData = Decompressor.DecompressBlock(imageReader, (int) (imageReader.Size() - imageReader.Tell()),
(int) decompressedSize);
}
else
@ -336,7 +336,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
}
}
}
if (!Settings.Old)
if (Settings.GameType != GameType.OnePointFive)
{
if (Settings.Build > 283) // No idea, but this is not working with old games
{
@ -363,7 +363,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
try
{
if(Settings.twofiveplus) Logger.Log("Trying to save image");
if(Settings.GameType == GameType.TwoFivePlus) Logger.Log("Trying to save image");
Bitmap.Save(filename);
}
catch

@ -134,14 +134,13 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
if (IsCompressed)
{
var size = Reader.ReadInt32();
soundData = new ByteReader(Decompressor.decompress_block(Reader, size, decompressedSize));
soundData = new ByteReader(Decompressor.DecompressBlock(Reader, size, decompressedSize));
}
else
{
soundData = new ByteReader(Reader.ReadBytes(decompressedSize));
}
Name = soundData.ReadWideString(nameLenght);
Logger.Log(Name);
Data = soundData.ReadBytes((int) soundData.Size());
if (Settings.DumpSounds)

@ -258,7 +258,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
{
var num = cond.Num;
if (num == -42) num = -27;
// if (Settings.Build >= 290)
if (Settings.Build >= 290)
{
if (num == -28||num == -29||num == -30||num == -31||num == -32||num == -33||num == -34||num == -35||num == -36||num == -37||num == -38||num == -39) num = -8;
}

@ -23,7 +23,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Name = Reader.ReadWideString();
Password = Reader.ReadInt32();
Password = Checksum.MakeGroupChecksum("pass", Name);
Logger.Log("Password: "+Password);
}
public override void Write(ByteWriter Writer)

@ -171,7 +171,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
public override void Read()
{
if (Settings.Old)
if (Settings.GameType == GameType.OnePointFive)
{
Width = Reader.ReadInt16();
Height = Reader.ReadInt16();
@ -255,7 +255,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
{
Handle = (ushort) Reader.ReadInt16();
ObjectInfo = (ushort) Reader.ReadInt16();
if (Settings.Old)
if (Settings.GameType == GameType.OnePointFive)
{
X = Reader.ReadInt16();
Y = Reader.ReadUInt16();

@ -38,7 +38,6 @@ namespace CTFAK.MMFParser.EXE.Loaders
_header = infoChunks.GetChunk<ObjectHeader>();
_name = infoChunks.GetChunk<ObjectName>();
_properties = infoChunks.GetChunk<ObjectProperties>();
_properties.ReadNew((int) ObjectType,this);
}
@ -47,6 +46,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
public ObjectProperties Properties => _properties;
public Constants.ObjectType ObjectType => (Constants.ObjectType) _header.ObjectType;
public int Flags => (int) _header.Flags;
public int Reserved => (int) _header.Reserved;
public int InkEffect => (int) _header.InkEffect;
public int InkEffectValue => (int) _header.InkEffectParameter;
public bool Transparent => ByteFlag.GetFlag((uint) InkEffect, 28);
@ -145,6 +145,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
public UInt32 Flags;
public UInt32 InkEffect;
public UInt32 InkEffectParameter;
public short Reserved;
public ObjectHeader(ByteReader reader) : base(reader){}
public ObjectHeader(Chunk chunk) : base(chunk){}
@ -156,7 +157,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
Handle = Reader.ReadInt16();
ObjectType = Reader.ReadInt16();
Flags = Reader.ReadUInt16();
Int16 reserved = Reader.ReadInt16();
Reserved = Reader.ReadInt16();
InkEffect = Reader.ReadByte();
InkEffectParameter = Reader.ReadByte();
}

@ -6,10 +6,8 @@ namespace CTFAK.MMFParser.EXE.Loaders
{
class ObjectNames : ChunkLoader//2.5+ trash
{
public override void Print(bool ext)
{
public override void Print(bool ext){}
}
public override string[] GetReadableData()
{

@ -37,7 +37,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
public override void Read()
{
if (Settings.Old)
if (Settings.GameType == GameType.OnePointFive)
{
Size = Reader.ReadInt32();
ObstacleType = (Obstacle) Reader.ReadInt16();
@ -150,7 +150,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
// else if(FillType==3)
// {
Image = Reader.ReadInt16();
Logger.Log("QuickbackdropIMG: "+Image);
// }
}

@ -170,7 +170,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
public override void Write(ByteWriter Writer)
{
Logger.Log("Writing mouse mov");
Writer.WriteInt16(X1);
Writer.WriteInt16(X2);
Writer.WriteInt16(Y1);

@ -88,6 +88,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
private ushort _zeroUnk;
public Text Text;
public Counter Counter;
public short[] _qualifiers=new short[8];
public ObjectCommon(ByteReader reader) : base(reader)
@ -104,7 +105,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
public override void Read()
{
if (Settings.Old)
if (Settings.GameType == GameType.OnePointFive)
{
var currentPosition = Reader.Tell();
var size = Reader.ReadInt16();
@ -152,14 +153,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
_extensionOffset = Reader.ReadUInt16();
_counterOffset = Reader.ReadUInt16();
Flags.flag = Reader.ReadUInt16();
Reader.Skip(2);
var end = Reader.Tell()+(8+1)*2;
List<Int16> qualifiers = new List<Int16>();
while(true)
for (int i = 0; i < 8; i++)
{
// break;
var value = Reader.ReadInt16();
if(value!=-1) qualifiers.Add(value);
else break;
_qualifiers[i]=value;
}
Reader.Seek(end);
_systemObjectOffset = Reader.ReadUInt16();

@ -23,7 +23,6 @@ namespace CTFAK.MMFParser.EXE.Loaders
public override void Read()
{
Logger.Log("dumpingIcon");
Reader.ReadBytes(Reader.ReadInt32() - 4);
List<byte> colorIndexes = new List<byte>();
for (int i = 0; i < 16 * 16; i++)

@ -26,8 +26,16 @@ namespace CTFAK.MMFParser.EXE
exeReader.Seek((int)(start + dataSize - 32));
var uheader = exeReader.ReadAscii(4);
Logger.Log("SUPERHEADER: "+uheader);
if(uheader=="PAMU")Settings.Unicode = true;
else if(uheader=="PAME")Settings.Unicode = false;
if (uheader == "PAMU")
{
Settings.GameType = GameType.Normal;
Settings.Unicode = true;
}
else if(uheader=="PAME")
{
Settings.GameType = GameType.MMFTwo;
Settings.Unicode = false;
}
exeReader.Seek(start + 16);
uint formatVersion = exeReader.ReadUInt32();

@ -104,7 +104,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
var size = Reader.ReadInt32();
Data = Reader.ReadBytes(size);
var dataReader = new ByteReader(Data);
switch (Id)
/*switch (Id)
{
case 33:
Loader = new FrameVirtualRect(dataReader);
@ -120,7 +120,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
// Logger.Log($"{Id} - {Data.GetHex()}");
break;
}
}*/
Loader?.Read();
@ -163,7 +163,6 @@ namespace CTFAK.MMFParser.MFA.Loaders
public override void Write(ByteWriter Writer)
{
Value = 255;
Writer.WriteInt32(Value);
}
}

@ -17,6 +17,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
public const string TimeListData = "EvEd";
public const string EditorPositionData = "EvTs";
public const string EditorLineData = "EvLs";
public const string UnknownEventData = "E2Ts";
public const string EventEnd ="!DNE";
public List<EventGroup> Items;
public ushort Version;
@ -172,13 +173,17 @@ namespace CTFAK.MMFParser.MFA.Loaders
EventLine = Reader.ReadUInt32();
EventLineY = Reader.ReadUInt32();
}
else if (name == UnknownEventData)
{
Reader.Skip(12);
}
else if (name == EventEnd)
{
// _cache = Reader.ReadBytes(122);
break;
}
else throw new NotImplementedException("Fuck Something is Broken");
else Logger.Log("UnknownGroup: "+name);//throw new NotImplementedException("Fuck Something is Broken: "+name);
}
}
@ -269,6 +274,11 @@ namespace CTFAK.MMFParser.MFA.Loaders
Writer.WriteUInt32(EventLine);
Writer.WriteUInt32(EventLineY);
}
Writer.WriteAscii(UnknownEventData);
Writer.WriteInt8(8);
Writer.Skip(9);
Writer.WriteInt16(0);
Writer.WriteAscii(EventEditorData);
// Writer.Skip(4+2*2+4*3);
Writer.WriteInt32(EditorDataUnk);

@ -1,5 +1,7 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using CTFAK.MMFParser.EXE;
using CTFAK.Utils;
@ -10,7 +12,7 @@ namespace CTFAK.MMFParser.MFA.Loaders.mfachunks
public int ObjectFlags;
public int NewObjectFlags;
public Color BackgroundColor;
List<short> _qualifiers = new List<short>();
public short[] Qualifiers = new short[8];
public ValueList Values;
public ValueList Strings;
public Movements Movements;
@ -18,15 +20,16 @@ namespace CTFAK.MMFParser.MFA.Loaders.mfachunks
public override void Write(ByteWriter Writer)
{
// if(Qualifiers==null) throw new NullReferenceException("QUALIFIERS NULL");
Writer.WriteInt32((int) ObjectFlags);
Writer.WriteInt32(NewObjectFlags);
Writer.WriteColor(BackgroundColor);
for (int i = 0; i < 9; i++)
for (int i = 0; i < 8; i++)
{
Writer.WriteInt16(-1);
Writer.WriteInt16(Qualifiers[i]);
}
Writer.WriteInt16(-1);
Values.Write(Writer);
Strings.Write(Writer);
Movements.Write(Writer);
@ -72,7 +75,7 @@ namespace CTFAK.MMFParser.MFA.Loaders.mfachunks
{
break;
}
_qualifiers.Add(value);
Qualifiers[i]=value;
}
Reader.Seek(end);

@ -89,6 +89,7 @@ namespace CTFAK.MMFParser.Translation
mfa.BuildType = 0;
mfa.BuildPath = game.TargetFilename;
mfa.CommandLine = "";
mfa.FrameRate = 60;
mfa.Aboutbox = game.AboutText?.Length > 0
? game?.AboutText
: "";
@ -325,10 +326,9 @@ namespace CTFAK.MMFParser.Translation
newItem.InkEffectParameter = item.InkEffectValue;
newItem.AntiAliasing = item.Antialias ? 1 : 0;
newItem.Flags = item.Flags;
// if(item.Flags!=0)Logger.Log($"{item.Name}-{item.Flags}");
newItem.IconHandle = 12;
newItem.Chunks = new ChunkList(null);
newItem.Chunks = MFA.MFA.defaultObjChunks;
if (item.ObjectType == 0)
{
@ -361,14 +361,16 @@ namespace CTFAK.MMFParser.Translation
{
var itemLoader = (ObjectCommon) item?.Properties?.Loader;
if (itemLoader == null) throw new NotImplementedException("Null loader");
Logger.Log("Translating Object: " + itemLoader.Parent.Name);
Logger.Log(("Translating Object: " + itemLoader.Parent.Name),false,ConsoleColor.Blue,false);
//CommonSection
var newObject = new ObjectLoader(null);
newObject.ObjectFlags = (int) (itemLoader.Flags.flag);
newObject.NewObjectFlags = (int) (itemLoader.NewFlags.flag);
newObject.BackgroundColor = itemLoader.BackColor;
//newLoader.Qualifiers;
newObject.Qualifiers = itemLoader._qualifiers;
newObject.Strings = ConvertStrings(itemLoader.Strings);
newObject.Values = ConvertValue(itemLoader.Values);
newObject.Movements = new MFA.Loaders.mfachunks.Movements(null);
@ -401,6 +403,7 @@ namespace CTFAK.MMFParser.Translation
active.Values = newObject.Values;
active.Movements = newObject.Movements;
active.Behaviours = newObject.Behaviours;
active.Qualifiers = newObject.Qualifiers;
}
@ -463,6 +466,8 @@ namespace CTFAK.MMFParser.Translation
newExt.Values = newObject.Values;
newExt.Movements = newObject.Movements;
newExt.Behaviours = newObject.Behaviours;
newExt.Qualifiers = newObject.Qualifiers;
}
var exts = Program.CleanData.GameChunks.GetChunk<Extensions>();
Extension ext = null;
@ -499,6 +504,8 @@ namespace CTFAK.MMFParser.Translation
newText.Values = newObject.Values;
newText.Movements = newObject.Movements;
newText.Behaviours = newObject.Behaviours;
newText.Qualifiers = newObject.Qualifiers;
}
if (text == null)
{
@ -542,6 +549,8 @@ namespace CTFAK.MMFParser.Translation
lives.Values = newObject.Values;
lives.Movements = newObject.Movements;
lives.Behaviours = newObject.Behaviours;
lives.Qualifiers = newObject.Qualifiers;
}
lives.Player = counter?.Player ?? 0;
lives.Images = counter?.Frames ?? new List<int>() {0};
@ -565,6 +574,8 @@ namespace CTFAK.MMFParser.Translation
newCount.Values = newObject.Values;
newCount.Movements = newObject.Movements;
newCount.Behaviours = newObject.Behaviours;
newCount.Qualifiers = newObject.Qualifiers;
}
if (itemLoader.Counter == null)
{

@ -100,7 +100,6 @@ namespace CTFAK
public static void ReadFile(string path, bool verbose = false, bool dumpImages = false, bool dumpSounds = true)
{
Settings.GamePath = path;
Logger.Log("DecryptionLibExist: "+File.Exists("x64\\Decrypter-x64.dll"));
PrepareFolders();
Settings.DumpImages = dumpImages;

@ -14,8 +14,7 @@ namespace CTFAK
public static bool DumpMusic;
public static bool SaveChunks;
public static bool Verbose;
public static bool Old;
public static bool twofiveplus = false;
public static GameType GameType;
public static string GamePath;
public static string GameName => Path.GetFileNameWithoutExtension(GamePath);
@ -135,4 +134,13 @@ namespace CTFAK
}
public enum GameType
{
Normal,
TwoFivePlus,
OnePointFive,
MMFTwo,
Android
}
}

@ -30,7 +30,6 @@ namespace CTFAK.Utils
v5+=1;
if (v5 > groupWords.Length) v5 = 0;
}
Logger.Log("GroupPass:"+v4);
return v4;
}

@ -13,13 +13,13 @@ namespace CTFAK.Utils
public static class Decompressor
{
[DllImport("TinflateDecompress.dll")]
public static extern int decompress(IntPtr source, int source_size, IntPtr output, int output_size);
public static extern int decompressOld(IntPtr source, int source_size, IntPtr output, int output_size);
public static byte[] Decompress(ByteReader exeReader, out int decompressed)
{
Int32 decompSize = exeReader.ReadInt32();
Int32 compSize = exeReader.ReadInt32();
decompressed = decompSize;
return decompress_block(exeReader, compSize, decompSize);
return DecompressBlock(exeReader, compSize, decompSize);
}
public static ByteReader DecompressAsReader(ByteReader exeReader, out int decompressed)
@ -28,7 +28,7 @@ namespace CTFAK.Utils
return new ByteReader(Decompress(exeReader, out decompressed));
}
public static byte[] decompress_block(ByteReader reader, int size, int decompSize)
public static byte[] DecompressBlock(ByteReader reader, int size, int decompSize)
{
ZLibDecompressOptions decompOpts = new ZLibDecompressOptions();
MemoryStream compressedStream = new MemoryStream(reader.ReadBytes(size));
@ -45,12 +45,22 @@ namespace CTFAK.Utils
return decompressedData;
}
public static byte[] decompressOld(byte[] buff,int size,int decompSize)
public static byte[] DecompressOld(ByteReader reader)
{
var start = reader.Tell();
var decompressedSize = reader.ReadInt32();
var compressedSize = reader.Size();
var buffer = reader.ReadBytes((int) compressedSize);
return DecompressOldBlock(buffer, (int) compressedSize, decompressedSize);
}
public static byte[] DecompressOldBlock(byte[] buff,int size,int decompSize)
{
var originalBuff = Marshal.AllocHGlobal(size);
Marshal.Copy(buff,0,originalBuff,buff.Length);
var outputBuff = Marshal.AllocHGlobal(decompSize);
decompress(originalBuff, size, outputBuff, decompSize);
decompressOld(originalBuff, size, outputBuff, decompSize);
Marshal.FreeHGlobal(originalBuff);
byte[] data = new byte[decompSize];
Marshal.Copy(outputBuff,data,0,decompSize);

@ -62,7 +62,7 @@ namespace CTFAK.Utils
{
uint compressedSize = data.ReadUInt32();
decompressed = (int) decompressedSize;
return Decompressor.decompress_block(data, (int) compressedSize, (int) decompressedSize);
return Decompressor.DecompressBlock(data, (int) compressedSize, (int) decompressedSize);
}
}

Loading…
Cancel
Save