You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
6.2 KiB
C#
182 lines
6.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using NetMFAPatcher.MMFParser.Data;
|
|
using NetMFAPatcher.Utils;
|
|
|
|
namespace NetMFAPatcher.MMFParser.ChunkLoaders.Objects
|
|
{
|
|
public class ObjectCommon:ChunkLoader
|
|
{
|
|
private short _valuesOffset;
|
|
private short _stringsOffset;
|
|
private int _fadeinOffset;
|
|
private int _fadeoutOffset;
|
|
private ushort _movementsOffset;
|
|
private short _animationsOffset;
|
|
private short _systemObjectOffset;
|
|
private short _counterOffset;
|
|
private short _extensionOffset;
|
|
public Animations Animations;
|
|
private long _end;
|
|
|
|
|
|
public ObjectCommon(ByteIO reader) : base(reader)
|
|
{
|
|
}
|
|
|
|
public ObjectCommon(ChunkList.Chunk chunk) : base(chunk)
|
|
{
|
|
}
|
|
|
|
public override void Read()
|
|
{
|
|
|
|
var currentPosition = Reader.Tell();
|
|
var size = Reader.ReadInt32();
|
|
var newobj = Settings.Build > 284;
|
|
var newobj2 = true;
|
|
if (newobj&&newobj2)
|
|
{
|
|
_animationsOffset = (short) Reader.ReadUInt16();
|
|
_movementsOffset = Reader.ReadUInt16();
|
|
var Version = Reader.ReadInt16();
|
|
Reader.ReadBytes(2);
|
|
var extensionOffset = Reader.ReadUInt16();
|
|
var counterOffset = Reader.ReadUInt16();
|
|
var flags = Reader.ReadUInt32();
|
|
|
|
var end = Reader.Tell() + 16;
|
|
|
|
var qualifiers = new List<short>();
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
var qualifier = Reader.ReadInt16();
|
|
if (qualifier == -1) break;
|
|
qualifiers.Add(qualifier);
|
|
}
|
|
|
|
Reader.Seek(end);
|
|
|
|
var systemObjectOffset = Reader.ReadInt16();
|
|
_valuesOffset = Reader.ReadInt16();
|
|
_stringsOffset = Reader.ReadInt16();
|
|
var newFlags = Reader.ReadUInt16();
|
|
var preferences = Reader.ReadFourCc();
|
|
var backColor = Reader.ReadColor();
|
|
var fadeinOffset = Reader.ReadInt32();
|
|
var fadeoutOffset = Reader.ReadInt32();
|
|
|
|
}
|
|
else if (newobj)
|
|
{
|
|
_counterOffset = Reader.ReadInt16();
|
|
var version = Reader.ReadInt16();
|
|
Reader.ReadBytes(2);
|
|
_movementsOffset = (ushort) Reader.ReadInt16();
|
|
_extensionOffset = Reader.ReadInt16();
|
|
_animationsOffset = Reader.ReadInt16();
|
|
var flags = Reader.ReadUInt32();
|
|
var end = Reader.Tell() + 16;
|
|
var qualifiers = new List<short>();
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
var qualifier = Reader.ReadInt16();
|
|
if (qualifier == -1) break;
|
|
qualifiers.Add(qualifier);
|
|
}
|
|
|
|
Reader.Seek(end);
|
|
|
|
_valuesOffset = Reader.ReadInt16();
|
|
_stringsOffset = Reader.ReadInt16();
|
|
var newFlags = Reader.ReadUInt16();
|
|
var preferences = Reader.ReadFourCc();
|
|
var backColor = Reader.ReadColor();
|
|
_fadeinOffset = Reader.ReadInt32();
|
|
_fadeoutOffset = Reader.ReadInt32();
|
|
}
|
|
else
|
|
{
|
|
_movementsOffset = Reader.ReadUInt16();
|
|
_animationsOffset = Reader.ReadInt16();
|
|
var version = Reader.ReadInt16();
|
|
_counterOffset = Reader.ReadInt16();
|
|
_systemObjectOffset = Reader.ReadInt16();
|
|
Reader.ReadBytes(2);
|
|
var flags = Reader.ReadUInt32();
|
|
|
|
_end = Reader.Tell() + 16;
|
|
|
|
var qualifiers = new List<short>();
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
var qualifier = Reader.ReadInt16();
|
|
if (qualifier == -1) break;
|
|
qualifiers.Add(qualifier);
|
|
}
|
|
|
|
Reader.Seek(_end);
|
|
|
|
_extensionOffset = Reader.ReadInt16();
|
|
|
|
_valuesOffset = Reader.ReadInt16();
|
|
_stringsOffset = Reader.ReadInt16();
|
|
var newFlags = Reader.ReadUInt16();
|
|
var preferences = Reader.ReadUInt16();
|
|
var identifier = Reader.ReadFourCc();
|
|
var backColor = Reader.ReadColor();
|
|
_fadeinOffset = Reader.ReadInt32();
|
|
_fadeoutOffset = Reader.ReadInt32();
|
|
}
|
|
|
|
if (_movementsOffset != 0)
|
|
{
|
|
//Reader.Seek(currentPosition+_movementsOffset);
|
|
//var movements = new Movements(Reader);
|
|
//movements.Read();
|
|
}
|
|
Console.WriteLine("Movements done");
|
|
if (_valuesOffset != 0)
|
|
{
|
|
Reader.Seek(currentPosition+_valuesOffset);
|
|
var values = new AlterableValues(Reader);
|
|
values.Read();
|
|
}
|
|
Console.WriteLine("Values done");
|
|
if (_stringsOffset != 0)
|
|
{
|
|
Reader.Seek(currentPosition+_stringsOffset);
|
|
var strings = new AlterableStrings(Reader);
|
|
strings.Read();
|
|
}
|
|
Console.WriteLine("Strings done");
|
|
if (_animationsOffset != 0)
|
|
{
|
|
Reader.Seek(currentPosition+_stringsOffset);
|
|
Animations = new Animations(Reader);
|
|
|
|
Animations.Read();
|
|
}
|
|
Console.WriteLine("Animations done");
|
|
Console.WriteLine("SysObjOff: "+_systemObjectOffset);
|
|
Console.WriteLine("ExtOff: "+_extensionOffset);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
public override void Print(bool ext)
|
|
{
|
|
throw new System.NotImplementedException();
|
|
}
|
|
|
|
public override string[] GetReadableData()
|
|
{
|
|
throw new System.NotImplementedException();
|
|
}
|
|
}
|
|
} |