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.
235 lines
7.7 KiB
C#
235 lines
7.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using NetMFAPatcher.MMFParser.Data;
|
|
using NetMFAPatcher.Utils;
|
|
|
|
namespace NetMFAPatcher.MMFParser.ChunkLoaders.Objects
|
|
{
|
|
public class ObjectCommon : ChunkLoader
|
|
{
|
|
private short _valuesOffset;
|
|
private short _stringsOffset;
|
|
private byte[] Identifier;
|
|
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;
|
|
|
|
private BitDict preferences = new BitDict(new string[]
|
|
{
|
|
"Backsave",
|
|
"ScrollingIndependant",
|
|
"QuickDisplay",
|
|
"Sleep",
|
|
"LoadOnCall",
|
|
"Global",
|
|
"BackEffects",
|
|
"Kill",
|
|
"InkEffects",
|
|
"Transitions",
|
|
"FineCollisions",
|
|
"AppletProblems"
|
|
}
|
|
);
|
|
|
|
private BitDict flags = new BitDict(new string[]
|
|
{
|
|
"DisplayInFront",
|
|
"Background",
|
|
"Backsave",
|
|
"RunBeforeFadeIn",
|
|
"Movements",
|
|
"Animations",
|
|
"TabStop",
|
|
"WindowProc",
|
|
"Values",
|
|
"Sprites",
|
|
"InternalBacksave",
|
|
"ScrollingIndependant",
|
|
"QuickDisplay",
|
|
"NeverKill",
|
|
"NeverSleep",
|
|
"ManualSleep",
|
|
"Text",
|
|
"DoNotCreateAtStart",
|
|
"FakeSprite",
|
|
"FakeCollisions"
|
|
}
|
|
);
|
|
|
|
private BitDict new_flags = new BitDict(new string[]
|
|
{
|
|
"DoNotSaveBackground",
|
|
"SolidBackground",
|
|
"CollisionBox",
|
|
"VisibleAtStart",
|
|
"ObstacleSolid",
|
|
"ObstaclePlatform",
|
|
"AutomaticRotation"
|
|
}
|
|
);
|
|
|
|
|
|
public ObjectCommon(ByteReader reader) : base(reader)
|
|
{
|
|
}
|
|
|
|
public ObjectCommon(ChunkList.Chunk chunk) : base(chunk)
|
|
{
|
|
}
|
|
|
|
public override void Read()
|
|
{
|
|
long currentPosition = Reader.Tell();
|
|
int size = Reader.ReadInt32();
|
|
bool newobj = Settings.Build > 284;
|
|
if (newobj && true)
|
|
{
|
|
_animationsOffset = (short) Reader.ReadUInt16();
|
|
_movementsOffset = Reader.ReadUInt16();
|
|
short version = Reader.ReadInt16();
|
|
Reader.ReadBytes(2);
|
|
ushort extensionOffset = Reader.ReadUInt16();
|
|
ushort counterOffset = Reader.ReadUInt16();
|
|
flags.flag = Reader.ReadUInt32();
|
|
|
|
long end = Reader.Tell() + 16;
|
|
|
|
List<short> qualifiers = new List<short>();
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
short qualifier = Reader.ReadInt16();
|
|
if (qualifier == -1) break;
|
|
qualifiers.Add(qualifier);
|
|
}
|
|
|
|
Reader.Seek(end);
|
|
|
|
short systemObjectOffset = Reader.ReadInt16();
|
|
|
|
_valuesOffset = Reader.ReadInt16();
|
|
_stringsOffset = Reader.ReadInt16();
|
|
new_flags.flag = Reader.ReadUInt16();
|
|
preferences.flag = Reader.ReadUInt16();
|
|
Identifier = Reader.ReadFourCc();
|
|
Color backColor = Reader.ReadColor();
|
|
int fadeinOffset = Reader.ReadInt32();
|
|
int fadeoutOffset = Reader.ReadInt32();
|
|
}
|
|
else if (newobj)
|
|
{
|
|
_counterOffset = Reader.ReadInt16();
|
|
short version = Reader.ReadInt16();
|
|
Reader.ReadBytes(2);
|
|
_movementsOffset = (ushort) Reader.ReadInt16();
|
|
_extensionOffset = Reader.ReadInt16();
|
|
_animationsOffset = Reader.ReadInt16();
|
|
uint flags = Reader.ReadUInt32();
|
|
long end = Reader.Tell() + 16;
|
|
List<short> qualifiers = new List<short>();
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
short qualifier = Reader.ReadInt16();
|
|
if (qualifier == -1) break;
|
|
qualifiers.Add(qualifier);
|
|
}
|
|
|
|
Reader.Seek(end);
|
|
|
|
_valuesOffset = Reader.ReadInt16();
|
|
_stringsOffset = Reader.ReadInt16();
|
|
ushort newFlags = Reader.ReadUInt16();
|
|
byte[] preferences = Reader.ReadFourCc();
|
|
Color backColor = Reader.ReadColor();
|
|
_fadeinOffset = Reader.ReadInt32();
|
|
_fadeoutOffset = Reader.ReadInt32();
|
|
}
|
|
else
|
|
{
|
|
_movementsOffset = Reader.ReadUInt16();
|
|
_animationsOffset = Reader.ReadInt16();
|
|
short version = Reader.ReadInt16();
|
|
_counterOffset = Reader.ReadInt16();
|
|
_systemObjectOffset = Reader.ReadInt16();
|
|
Reader.ReadBytes(2);
|
|
flags.flag = Reader.ReadUInt32();
|
|
|
|
_end = Reader.Tell() + 16;
|
|
|
|
List<short> qualifiers = new List<short>();
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
short qualifier = Reader.ReadInt16();
|
|
if (qualifier == -1) break;
|
|
qualifiers.Add(qualifier);
|
|
}
|
|
|
|
Reader.Seek(_end);
|
|
|
|
_extensionOffset = Reader.ReadInt16();
|
|
|
|
_valuesOffset = Reader.ReadInt16();
|
|
_stringsOffset = Reader.ReadInt16();
|
|
new_flags.flag = Reader.ReadUInt16();
|
|
preferences.flag = Reader.ReadUInt16();
|
|
byte[] identifier = Reader.ReadFourCc();
|
|
Color 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);
|
|
AlterableValues values = new AlterableValues(Reader);
|
|
values.Read();
|
|
}
|
|
|
|
Console.WriteLine("Values done");
|
|
if (_stringsOffset != 0)
|
|
{
|
|
Reader.Seek(currentPosition + _stringsOffset);
|
|
AlterableStrings 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();
|
|
}
|
|
}
|
|
} |