protected virtual void Deserialize()
{
#if DEBUG
#if LOG_RECORDS
Console.WriteLine( "" );
#endif
Record( Name, this );
Record( "ExportSize", ExportTable.SerialSize );
#endif
// TODO: Corrigate version
if( Package.Version >= 322
#if MKKE
&& Package.Build != UnrealPackage.GameBuild.BuildName.MKKE
#endif
)
{
// TODO: Corrigate version. Fix component detection!
//if( _Buffer.Version > 400
// && HasObjectFlag( Flags.ObjectFlagsHO.PropertiesObject )
// && HasObjectFlag( Flags.ObjectFlagsHO.ArchetypeObject ) )
//{
// var componentClass = _Buffer.ReadObjectIndex();
// var componentName = _Buffer.ReadNameIndex();
//}
var netIndex = _Buffer.ReadObjectIndex();
Record( "netIndex", TryGetIndexObject( netIndex ) );
}
else
{
if( HasObjectFlag( Flags.ObjectFlagsLO.HasStack ) )
{
int node = _Buffer.ReadIndex();
Record( "node", GetIndexObject( node ) );
_Buffer.ReadIndex(); // stateNode
_Buffer.ReadUInt64(); // probeMask
_Buffer.ReadUInt32(); // latentAction
if( node != 0 )
{
_Buffer.ReadIndex(); // Offset
}
}
#if SWAT4
if( Package.Build == UnrealPackage.GameBuild.BuildName.Swat4 )
{
// 8 bytes: Value: 3
// 4 bytes: Value: 1
_Buffer.Skip( 12 );
}
#endif
#if BIOSHOCK
if( Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock )
{
_Buffer.Skip( 8 );
}
#endif
#if DEUSEXINVISIBLEWAR
if( Package.Build == UnrealPackage.GameBuild.BuildName.DeusEx_IW )
{
// var native private const int ObjectInternalPropertyHash[1]
_Buffer.Skip( 4 );
}
#endif
#if THIEFDEADLYSHADOWS
if( Package.Build == UnrealPackage.GameBuild.BuildName.Thief_DS )
{
// var native private const int ObjectInternalPropertyHash[1]
_Buffer.Skip( 4 );
}
#endif
}
if( !IsClassType( "Class" ) )
{
#if SWAT4
if( Package.Build != UnrealPackage.GameBuild.BuildName.Swat4 )
{
#endif
// REMINDER:Ends with a NameIndex referencing to "None"; 1/4/8 bytes
DeserializeProperties();
#if SWAT4
}
else
{
_Buffer.Skip( 1 );
}
#endif
}
#if UNREAL2
else if( Package.Build == UnrealPackage.GameBuild.BuildName.Unreal2 )
{
int count = _Buffer.ReadIndex();
for( int i = 0; i < count; ++ i )
{
_Buffer.ReadObjectIndex();
}
}
#endif
}