Fix broken images for R290+

master
1987kostya 4 years ago
parent b38d149d6f
commit 39ad8eed83

@ -17,7 +17,7 @@ namespace CTFAK.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)
{
@ -149,7 +149,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Handle = Reader.ReadInt32();
if (!Debug)
{
// if (Settings.Build>288) Handle -= 1;
if (Settings.Build>=290) Handle -= 1;
if (Program.CleanData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1;
}
@ -237,7 +237,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
//return;
if(Settings.twofiveplus) imageReader.Skip(4);
if (Settings.twofiveplus) imageReader.Skip(4);
_checksum = imageReader.ReadInt32();
_references = imageReader.ReadInt32();
Size = (int) imageReader.ReadUInt32();
@ -260,7 +260,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
_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.twofiveplus) Flags["LZX"] = false;
if (Flags["LZX"])
{
@ -330,16 +330,20 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
}
}
}
/*else if (_transparent != null)
if (Settings.Build > 283)
{
for (int i = 0; i < (_height * _width * 4)-3; i++)
if (_transparent != null)
{
if (_colorArray[i+1]==_transparent.R&&_colorArray[i+2]==_transparent.G&&_colorArray[i+3]==_transparent.B)
for (int i = 0; i < (_height * _width * 4) - 3; i++)
{
if (_colorArray[i + 1] == _transparent.R && _colorArray[i + 2] == _transparent.G &&
_colorArray[i + 3] == _transparent.B)
{
_colorArray[i] = _transparent.A;
}
}
}*/
}
}
return;
}

@ -22,6 +22,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Id = Reader.ReadUInt16();
Name = Reader.ReadWideString();
Password = Reader.ReadInt32();
Password = Checksum.MakeGroupChecksum("", Name);
Logger.Log("Password: "+Password);
}
@ -30,10 +31,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Writer.WriteUInt16(Flags);
Writer.WriteUInt16(Id);
Writer.WriteUnicode(Name,true);
if(true)
{
Password = Checksum.MakeGroupChecksum("", Name);
}
Writer.WriteInt32(Password);
}

@ -74,7 +74,10 @@ namespace CTFAK.MMFParser.EXE.Loaders
{
$"Name: {Name}",
$"Size: {Width}x{Height}",
$"Objects: {Objects.Count}"
$"Virtual Size: {VirtWidth}x{VirtHeight}",
$"MVTimer: {MovementTimer}",
$"Objects: {Objects.Count}",
};
}

@ -50,6 +50,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
public class Movement : ChunkLoader
{
public static int DataSize;
public int rootPos;
public short Player;
public short Type;
@ -70,7 +71,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
var nameOffset = Reader.ReadInt32();
var movementId = Reader.ReadInt32();
var newOffset = Reader.ReadInt32();
var dataSize = Reader.ReadInt32();
DataSize = Reader.ReadInt32();
Reader.Seek(rootPos+newOffset);
Player = Reader.ReadInt16();
Type = Reader.ReadInt16();
@ -94,6 +95,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
case 5:
Loader=new MovementPath(Reader);
break;
case 14:
Loader = new ExtensionsMovement(Reader);
break;
}
@ -427,4 +431,26 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
}
}
public class ExtensionsMovement:MovementLoader
{
public byte[] Data;
public ExtensionsMovement(ByteReader reader) : base(reader)
{
}
public ExtensionsMovement(ChunkList.Chunk chunk) : base(chunk)
{
}
public override void Read()
{
Data = Reader.ReadBytes(Movement.DataSize);
}
public override void Write(ByteWriter Writer)
{
Writer.WriteBytes(Data);
}
}
}

@ -13,7 +13,6 @@ namespace CTFAK.MMFParser.EXE.Loaders
{
Reader = new ByteReader(Chunk.ChunkData);
Value = Reader.ReadUniversal();
Print(true);
}
public override void Print(bool ext)

@ -24,7 +24,9 @@ namespace CTFAK.MMFParser.EXE
uint dataSize = exeReader.ReadUInt32();
exeReader.Seek((int)(start + dataSize - 32));
Logger.Log(exeReader.ReadAscii(4));
var uheader = exeReader.ReadAscii(4);
if(uheader=="PAMU")Settings.Unicode = true;
else if(uheader=="PAME")Settings.Unicode = false;
exeReader.Seek(start + 16);
uint formatVersion = exeReader.ReadUInt32();
@ -47,7 +49,7 @@ namespace CTFAK.MMFParser.EXE
}
header = exeReader.ReadFourCc();
Logger.Log(header.GetHex(4));
Logger.Log("PACK OFFSET: "+offset);
exeReader.Seek(offset);
for (int i = 0; i < count; i++)

@ -27,10 +27,10 @@ namespace CTFAK.Utils
foreach (char c in pass)
{
v4 += WrapSingleChar(groupWords[v5] + (c & 0xC3)) ^ 0xF3;
v5++;
v5+=1;
if (v5 > groupWords.Length) v5 = 0;
}
Logger.Log("GroupPass:"+v4);
return v4;
}

Loading…
Cancel
Save