|
|
@ -8,9 +8,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
|
|
|
|
{
|
|
|
|
{
|
|
|
|
private ushort _valuesOffset;
|
|
|
|
private ushort _valuesOffset;
|
|
|
|
private ushort _stringsOffset;
|
|
|
|
private ushort _stringsOffset;
|
|
|
|
private byte[] Identifier;
|
|
|
|
private int Identifier;
|
|
|
|
private ushort _fadeinOffset;
|
|
|
|
private uint _fadeinOffset;
|
|
|
|
private ushort _fadeoutOffset;
|
|
|
|
private uint _fadeoutOffset;
|
|
|
|
private ushort _movementsOffset;
|
|
|
|
private ushort _movementsOffset;
|
|
|
|
private ushort _animationsOffset;
|
|
|
|
private ushort _animationsOffset;
|
|
|
|
private ushort _systemObjectOffset;
|
|
|
|
private ushort _systemObjectOffset;
|
|
|
@ -83,6 +83,8 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
|
|
|
|
public AlterableValues Values;
|
|
|
|
public AlterableValues Values;
|
|
|
|
public AlterableStrings Strings;
|
|
|
|
public AlterableStrings Strings;
|
|
|
|
public Movements Movements;
|
|
|
|
public Movements Movements;
|
|
|
|
|
|
|
|
private ushort _unk;
|
|
|
|
|
|
|
|
public Text Text;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public ObjectCommon(ByteReader reader) : base(reader)
|
|
|
|
public ObjectCommon(ByteReader reader) : base(reader)
|
|
|
@ -95,7 +97,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
|
|
|
|
public ObjectCommon(ChunkList.Chunk chunk) : base(chunk)
|
|
|
|
public ObjectCommon(ChunkList.Chunk chunk) : base(chunk)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public override void Read()
|
|
|
|
public override void Read()
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -107,115 +109,76 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
|
|
|
|
_animationsOffset = Reader.ReadUInt16();
|
|
|
|
_animationsOffset = Reader.ReadUInt16();
|
|
|
|
_movementsOffset = Reader.ReadUInt16();
|
|
|
|
_movementsOffset = Reader.ReadUInt16();
|
|
|
|
var version = Reader.ReadUInt16();
|
|
|
|
var version = Reader.ReadUInt16();
|
|
|
|
Reader.Skip(2); //TODO: Find out
|
|
|
|
_unk = Reader.ReadUInt16();
|
|
|
|
|
|
|
|
_extensionOffset = Reader.ReadUInt16();
|
|
|
|
_counterOffset = Reader.ReadUInt16();
|
|
|
|
_counterOffset = Reader.ReadUInt16();
|
|
|
|
|
|
|
|
Flags.flag = Reader.ReadUInt16();
|
|
|
|
|
|
|
|
_end = Reader.Tell() + (8+1) * 2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Reader.Seek(_end);
|
|
|
|
_systemObjectOffset = Reader.ReadUInt16();
|
|
|
|
_systemObjectOffset = Reader.ReadUInt16();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_valuesOffset = Reader.ReadUInt16();
|
|
|
|
|
|
|
|
_stringsOffset = Reader.ReadUInt16();
|
|
|
|
|
|
|
|
NewFlags.flag = Reader.ReadUInt16();
|
|
|
|
|
|
|
|
preferences.flag = Reader.ReadUInt16();
|
|
|
|
|
|
|
|
Identifier = Reader.ReadInt32();
|
|
|
|
|
|
|
|
BackColor = Reader.ReadColor();
|
|
|
|
|
|
|
|
_fadeinOffset = Reader.ReadUInt32();
|
|
|
|
|
|
|
|
_fadeoutOffset = Reader.ReadUInt32();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
_movementsOffset = Reader.ReadUInt16();
|
|
|
|
_movementsOffset = Reader.ReadUInt16();
|
|
|
|
_animationsOffset = Reader.ReadUInt16();
|
|
|
|
_animationsOffset = Reader.ReadUInt16();
|
|
|
|
var version = Reader.ReadUInt16();
|
|
|
|
var version = Reader.ReadUInt16();
|
|
|
|
|
|
|
|
//_unk = Reader.ReadUInt16();
|
|
|
|
|
|
|
|
_extensionOffset = Reader.ReadUInt16();
|
|
|
|
_counterOffset = Reader.ReadUInt16();
|
|
|
|
_counterOffset = Reader.ReadUInt16();
|
|
|
|
_systemObjectOffset = Reader.ReadUInt16();
|
|
|
|
Flags.flag = Reader.ReadUInt16();
|
|
|
|
}
|
|
|
|
_end = Reader.Tell() + (8+1) * 2;
|
|
|
|
|
|
|
|
|
|
|
|
Flags.flag = Reader.ReadUInt32();
|
|
|
|
Reader.Seek(_end);
|
|
|
|
var end = Reader.Tell() + 16;
|
|
|
|
|
|
|
|
//Ignoring qualifiers
|
|
|
|
|
|
|
|
Reader.Seek(end);
|
|
|
|
|
|
|
|
if (Settings.Build == 284)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
_systemObjectOffset = Reader.ReadUInt16();
|
|
|
|
_systemObjectOffset = Reader.ReadUInt16();
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
_extensionOffset = Reader.PeekUInt16();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_valuesOffset = Reader.ReadUInt16();
|
|
|
|
_valuesOffset = Reader.ReadUInt16();
|
|
|
|
_stringsOffset = Reader.ReadUInt16();
|
|
|
|
_stringsOffset = Reader.ReadUInt16();
|
|
|
|
NewFlags.flag = Reader.ReadUInt32();
|
|
|
|
NewFlags.flag = Reader.ReadUInt16();
|
|
|
|
preferences.flag = Reader.ReadUInt32();
|
|
|
|
preferences.flag = Reader.ReadUInt16();
|
|
|
|
Identifier = Reader.ReadBytes(4);
|
|
|
|
Identifier = Reader.ReadInt32();
|
|
|
|
BackColor = Reader.ReadColor();
|
|
|
|
BackColor = Reader.ReadColor();
|
|
|
|
_fadeinOffset = (ushort) Reader.ReadUInt32();
|
|
|
|
_fadeinOffset = Reader.ReadUInt32();
|
|
|
|
_fadeoutOffset = (ushort) Reader.ReadUInt32();
|
|
|
|
_fadeoutOffset = Reader.ReadUInt32();
|
|
|
|
|
|
|
|
|
|
|
|
if (_movementsOffset != 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Reader.Seek(currentPosition+_movementsOffset);
|
|
|
|
|
|
|
|
Movements = new Movements(Reader);
|
|
|
|
|
|
|
|
Movements.Read();
|
|
|
|
|
|
|
|
//Console.WriteLine("Movements done");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (_valuesOffset != 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Reader.Seek(currentPosition + _valuesOffset);
|
|
|
|
|
|
|
|
Values = new AlterableValues(Reader);
|
|
|
|
|
|
|
|
Values.Read();
|
|
|
|
|
|
|
|
// Console.WriteLine("Values done");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (_stringsOffset != 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Reader.Seek(currentPosition + _stringsOffset);
|
|
|
|
|
|
|
|
Strings = new AlterableStrings(Reader);
|
|
|
|
|
|
|
|
Strings.Read();
|
|
|
|
|
|
|
|
// Console.WriteLine("Strings done");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (_animationsOffset != 0&& Parent.ObjectType==2)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Reader.Seek(currentPosition + _animationsOffset);
|
|
|
|
|
|
|
|
Animations = new Animations(Reader);
|
|
|
|
|
|
|
|
Animations.Read();
|
|
|
|
|
|
|
|
// Console.WriteLine("Animations done");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*if (_counterOffset != 0)
|
|
|
|
if (_animationsOffset > 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Reader.Seek(currentPosition + _counterOffset);
|
|
|
|
Reader.Seek(currentPosition+_animationsOffset);
|
|
|
|
var counter = new Counter(Reader);
|
|
|
|
Animations=new Animations(Reader);
|
|
|
|
counter.Read();
|
|
|
|
Animations.Read();
|
|
|
|
Console.WriteLine("Counters done");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (_extensionOffset != 0)
|
|
|
|
if (_systemObjectOffset > 0)
|
|
|
|
{
|
|
|
|
|
|
|
|
var dataSize = Reader.ReadInt32() - 20;
|
|
|
|
|
|
|
|
ExtensionVersion = Reader.ReadInt32();
|
|
|
|
|
|
|
|
ExtensionId = Reader.ReadInt32();
|
|
|
|
|
|
|
|
ExtensionPrivate = Reader.ReadInt32();
|
|
|
|
|
|
|
|
if (dataSize != 0)
|
|
|
|
|
|
|
|
ExtensionData = Reader.ReadBytes(dataSize);
|
|
|
|
|
|
|
|
Console.WriteLine("Extensions Done");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (_systemObjectOffset != 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Logger.Log("Reading System Object: "+_systemObjectOffset);
|
|
|
|
|
|
|
|
Reader.Seek(currentPosition+_systemObjectOffset);
|
|
|
|
Reader.Seek(currentPosition+_systemObjectOffset);
|
|
|
|
if (Parent.ObjectType == ((int) Constants.ObjectType.Text) ||
|
|
|
|
if (Parent.ObjectType == 7) //Counter
|
|
|
|
Parent.ObjectType == ((int) Constants.ObjectType.Question))
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
//TODO; Text.read();
|
|
|
|
|
|
|
|
|
|
|
|
Counters=new Counters(Reader);
|
|
|
|
|
|
|
|
Counters.Read();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (Parent.ObjectType == ((int) Constants.ObjectType.Score) ||
|
|
|
|
else if(Parent.ObjectType==3)//Text
|
|
|
|
Parent.ObjectType == ((int) Constants.ObjectType.Lives)||
|
|
|
|
|
|
|
|
Parent.ObjectType == ((int) Constants.ObjectType.Counter))
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Logger.Log("Counter: "+Parent.Name);
|
|
|
|
|
|
|
|
Counters = new Counters(Reader);
|
|
|
|
Text = new Text(Reader);
|
|
|
|
Counters.Read();
|
|
|
|
Text.Read();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Logger.Log("anims: "+_animationsOffset);
|
|
|
|
// Logger.Log("anims: "+_animationsOffset);
|
|
|
|
// Logger.Log("fadeIn: "+_fadeinOffset);
|
|
|
|
// Logger.Log("fadeIn: "+_fadeinOffset);
|
|
|
|
// Logger.Log("fadeOut: "+_fadeoutOffset);
|
|
|
|
// Logger.Log("fadeOut: "+_fadeoutOffset);
|
|
|
|