/* Copyright(c) 2015 Neodymium Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ //shamelessly stolen and mangled using SharpDX; using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CodeWalker.GameFiles { [TypeConverter(typeof(ExpandableObjectConverter))] public class FragType : ResourceFileBase { public override long BlockLength { get { return 304; } } // structure data public uint Unknown_10h { get; set; } // 0x00000000 public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 public float Unknown_20h { get; set; } public float Unknown_24h { get; set; } public float Unknown_28h { get; set; } public float Unknown_2Ch { get; set; } public ulong DrawablePointer { get; set; } public ulong Unknown_28h_Pointer { get; set; } public ulong Unknown_30h_Pointer { get; set; } public uint Count0 { get; set; } public uint Unknown_4Ch { get; set; } //pointer? public uint Unknown_50h { get; set; } // 0x00000000 public uint Unknown_54h { get; set; } // 0x00000000 public ulong NamePointer { get; set; } public ResourcePointerList64 Clothes { get; set; } public uint Unknown_70h { get; set; } // 0x00000000 public uint Unknown_74h { get; set; } // 0x00000000 public uint Unknown_78h { get; set; } // 0x00000000 public uint Unknown_7Ch { get; set; } // 0x00000000 public uint Unknown_80h { get; set; } // 0x00000000 public uint Unknown_84h { get; set; } // 0x00000000 public uint Unknown_88h { get; set; } // 0x00000000 public uint Unknown_8Ch { get; set; } // 0x00000000 public uint Unknown_90h { get; set; } // 0x00000000 public uint Unknown_94h { get; set; } // 0x00000000 public uint Unknown_98h { get; set; } // 0x00000000 public uint Unknown_9Ch { get; set; } // 0x00000000 public uint Unknown_A0h { get; set; } // 0x00000000 public uint Unknown_A4h { get; set; } // 0x00000000 public ulong Unknown_A8h_Pointer { get; set; } public uint Unknown_B0h { get; set; } // 0x00000000 public uint Unknown_B4h { get; set; } // 0x00000000 public uint Unknown_B8h { get; set; } public uint Unknown_BCh { get; set; } public uint Unknown_C0h { get; set; } public uint Unknown_C4h { get; set; } public uint Unknown_C8h { get; set; }//pointer? public float Unknown_CCh { get; set; } public float Unknown_D0h { get; set; } public float Unknown_D4h { get; set; } public byte Unknown_D8h { get; set; } public byte Count3 { get; set; } public ushort Unknown_DAh { get; set; } public uint Unknown_DCh { get; set; } // 0x00000000 public ulong Unknown_E0h_Pointer { get; set; } public uint Unknown_E8h { get; set; } // 0x00000000 public uint Unknown_ECh { get; set; } // 0x00000000 public ulong PhysicsLODGroupPointer { get; set; } public ulong Drawable2Pointer { get; set; } public uint Unknown_100h { get; set; } // 0x00000000 public uint Unknown_104h { get; set; } // 0x00000000 public uint Unknown_108h { get; set; } // 0x00000000 public uint Unknown_10Ch { get; set; } // 0x00000000 //public ResourceSimpleList64 LightAttributes { get; set; } public ResourceSimpleList64Ptr LightAttributesPtr { get; set; } public LightAttributes_s[] LightAttributes { get; set; } public ulong Unknown_120h_Pointer { get; set; } public uint Unknown_128h { get; set; } // 0x00000000 public uint Unknown_12Ch { get; set; } // 0x00000000 // reference data public FragDrawable Drawable { get; set; } public ResourcePointerArray64 Unknown_28h_Data { get; set; } public ResourcePointerArray64 Unknown_30h_Data { get; set; } public string Name { get; set; } public FragUnknown_F_004 Unknown_A8h_Data { get; set; } public ResourcePointerArray64 Unknown_E0h_Data { get; set; } public FragPhysicsLODGroup PhysicsLODGroup { get; set; } public FragDrawable Drawable2 { get; set; } public FragUnknown_F_003 Unknown_120h_Data { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { base.Read(reader, parameters); // read structure data this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); this.Unknown_20h = reader.ReadSingle(); this.Unknown_24h = reader.ReadSingle(); this.Unknown_28h = reader.ReadSingle(); this.Unknown_2Ch = reader.ReadSingle(); this.DrawablePointer = reader.ReadUInt64(); this.Unknown_28h_Pointer = reader.ReadUInt64(); this.Unknown_30h_Pointer = reader.ReadUInt64(); this.Count0 = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.NamePointer = reader.ReadUInt64(); this.Clothes = reader.ReadBlock>(); this.Unknown_70h = reader.ReadUInt32(); this.Unknown_74h = reader.ReadUInt32(); this.Unknown_78h = reader.ReadUInt32(); this.Unknown_7Ch = reader.ReadUInt32(); this.Unknown_80h = reader.ReadUInt32(); this.Unknown_84h = reader.ReadUInt32(); this.Unknown_88h = reader.ReadUInt32(); this.Unknown_8Ch = reader.ReadUInt32(); this.Unknown_90h = reader.ReadUInt32(); this.Unknown_94h = reader.ReadUInt32(); this.Unknown_98h = reader.ReadUInt32(); this.Unknown_9Ch = reader.ReadUInt32(); this.Unknown_A0h = reader.ReadUInt32(); this.Unknown_A4h = reader.ReadUInt32(); this.Unknown_A8h_Pointer = reader.ReadUInt64(); this.Unknown_B0h = reader.ReadUInt32(); this.Unknown_B4h = reader.ReadUInt32(); this.Unknown_B8h = reader.ReadUInt32(); this.Unknown_BCh = reader.ReadUInt32(); this.Unknown_C0h = reader.ReadUInt32(); this.Unknown_C4h = reader.ReadUInt32(); this.Unknown_C8h = reader.ReadUInt32(); this.Unknown_CCh = reader.ReadSingle(); this.Unknown_D0h = reader.ReadSingle(); this.Unknown_D4h = reader.ReadSingle(); this.Unknown_D8h = reader.ReadByte(); this.Count3 = reader.ReadByte(); this.Unknown_DAh = reader.ReadUInt16(); this.Unknown_DCh = reader.ReadUInt32(); this.Unknown_E0h_Pointer = reader.ReadUInt64(); this.Unknown_E8h = reader.ReadUInt32(); this.Unknown_ECh = reader.ReadUInt32(); this.PhysicsLODGroupPointer = reader.ReadUInt64(); this.Drawable2Pointer = reader.ReadUInt64(); this.Unknown_100h = reader.ReadUInt32(); this.Unknown_104h = reader.ReadUInt32(); this.Unknown_108h = reader.ReadUInt32(); this.Unknown_10Ch = reader.ReadUInt32(); //this.LightAttributes = reader.ReadBlock>(); this.LightAttributesPtr = reader.ReadStruct(); this.LightAttributes = reader.ReadStructsAt(LightAttributesPtr.EntriesPointer, LightAttributesPtr.EntriesCount); this.Unknown_120h_Pointer = reader.ReadUInt64(); this.Unknown_128h = reader.ReadUInt32(); this.Unknown_12Ch = reader.ReadUInt32(); // read reference data this.Drawable = reader.ReadBlockAt( this.DrawablePointer // offset ); if (this.Drawable != null) { this.Drawable.OwnerFragment = this; } this.Unknown_28h_Data = reader.ReadBlockAt>( this.Unknown_28h_Pointer, // offset this.Count0 ); if ((this.Unknown_28h_Data != null) && (this.Unknown_28h_Data.data_items != null)) { for (int i = 0; i < this.Unknown_28h_Data.data_items.Length; i++) { var drwbl = Unknown_28h_Data.data_items[i]; if (drwbl != null) { drwbl.OwnerFragment = this; } } } this.Unknown_30h_Data = reader.ReadBlockAt>( this.Unknown_30h_Pointer, // offset this.Count0 ); this.Name = reader.ReadStringAt(//BlockAt( this.NamePointer // offset ); this.Unknown_A8h_Data = reader.ReadBlockAt( this.Unknown_A8h_Pointer // offset ); this.Unknown_E0h_Data = reader.ReadBlockAt>( this.Unknown_E0h_Pointer, // offset this.Count3 ); this.PhysicsLODGroup = reader.ReadBlockAt( this.PhysicsLODGroupPointer // offset ); this.Drawable2 = reader.ReadBlockAt( this.Drawable2Pointer // offset ); if (this.Drawable2 != null) { this.Drawable2.OwnerFragment = this; } this.Unknown_120h_Data = reader.ReadBlockAt( this.Unknown_120h_Pointer // offset ); //for vehicle wheels, the shaderGroup in the model seems to be missing, but have to use the main drawable's shaders. if ((Drawable != null) && (PhysicsLODGroup != null) && (PhysicsLODGroup.PhysicsLOD1 != null)) { var pl1 = PhysicsLODGroup.PhysicsLOD1; if ((pl1.Children != null) && (pl1.Children.data_items != null)) { for (int i = 0; i < pl1.Children.data_items.Length; i++) { var pch = pl1.Children.data_items[i]; if ((pch.Drawable1 != null)) { pch.Drawable1.AssignGeometryShaders(Drawable.ShaderGroup); } } } } } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { base.Write(writer, parameters); // update structure data this.DrawablePointer = (ulong)(this.Drawable != null ? this.Drawable.FilePosition : 0); this.Unknown_28h_Pointer = (ulong)(this.Unknown_28h_Data != null ? this.Unknown_28h_Data.FilePosition : 0); this.Unknown_30h_Pointer = (ulong)(this.Unknown_30h_Data != null ? this.Unknown_30h_Data.FilePosition : 0); //this.cc00 = (uint)(this.pxxxxx_0data != null ? this.pxxxxx_0data.Count : 0); ////this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO: fix!!! //this.cnt1 = (ushort)(this.pxxxxx_2data != null ? this.pxxxxx_2data.Count : 0); this.Unknown_A8h_Pointer = (ulong)(this.Unknown_A8h_Data != null ? this.Unknown_A8h_Data.FilePosition : 0); //this.anotherCount = (byte)(this.pxxxxx_3data != null ? this.pxxxxx_3data.Count : 0); this.Unknown_E0h_Pointer = (ulong)(this.Unknown_E0h_Data != null ? this.Unknown_E0h_Data.FilePosition : 0); this.PhysicsLODGroupPointer = (ulong)(this.PhysicsLODGroup != null ? this.PhysicsLODGroup.FilePosition : 0); this.Drawable2Pointer = (ulong)(this.Drawable2 != null ? this.Drawable2.FilePosition : 0); //this.cntxx51a = (ushort)(this.pxxxxx_5data != null ? this.pxxxxx_5data.Count : 0); this.Unknown_120h_Pointer = (ulong)(this.Unknown_120h_Data != null ? this.Unknown_120h_Data.FilePosition : 0); // write structure data writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.DrawablePointer); writer.Write(this.Unknown_28h_Pointer); writer.Write(this.Unknown_30h_Pointer); writer.Write(this.Count0); writer.Write(this.Unknown_4Ch); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.NamePointer); writer.WriteBlock(this.Clothes); writer.Write(this.Unknown_70h); writer.Write(this.Unknown_74h); writer.Write(this.Unknown_78h); writer.Write(this.Unknown_7Ch); writer.Write(this.Unknown_80h); writer.Write(this.Unknown_84h); writer.Write(this.Unknown_88h); writer.Write(this.Unknown_8Ch); writer.Write(this.Unknown_90h); writer.Write(this.Unknown_94h); writer.Write(this.Unknown_98h); writer.Write(this.Unknown_9Ch); writer.Write(this.Unknown_A0h); writer.Write(this.Unknown_A4h); writer.Write(this.Unknown_A8h_Pointer); writer.Write(this.Unknown_B0h); writer.Write(this.Unknown_B4h); writer.Write(this.Unknown_B8h); writer.Write(this.Unknown_BCh); writer.Write(this.Unknown_C0h); writer.Write(this.Unknown_C4h); writer.Write(this.Unknown_C8h); writer.Write(this.Unknown_CCh); writer.Write(this.Unknown_D0h); writer.Write(this.Unknown_D4h); writer.Write(this.Unknown_D8h); writer.Write(this.Count3); writer.Write(this.Unknown_DAh); writer.Write(this.Unknown_DCh); writer.Write(this.Unknown_E0h_Pointer); writer.Write(this.Unknown_E8h); writer.Write(this.Unknown_ECh); writer.Write(this.PhysicsLODGroupPointer); writer.Write(this.Drawable2Pointer); writer.Write(this.Unknown_100h); writer.Write(this.Unknown_104h); writer.Write(this.Unknown_108h); writer.Write(this.Unknown_10Ch); //writer.WriteBlock(this.LightAttributes); //TODO: fix! writer.Write(this.Unknown_120h_Pointer); writer.Write(this.Unknown_128h); writer.Write(this.Unknown_12Ch); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(base.GetReferences()); if (Drawable != null) list.Add(Drawable); if (Unknown_28h_Data != null) list.Add(Unknown_28h_Data); if (Unknown_30h_Data != null) list.Add(Unknown_30h_Data); //if (Name != null) list.Add(Name); //TODO: fix! if (Unknown_A8h_Data != null) list.Add(Unknown_A8h_Data); if (Unknown_E0h_Data != null) list.Add(Unknown_E0h_Data); if (PhysicsLODGroup != null) list.Add(PhysicsLODGroup); if (Drawable2 != null) list.Add(Drawable2); if (Unknown_120h_Data != null) list.Add(Unknown_120h_Data); return list.ToArray(); } public override Tuple[] GetParts() { return new Tuple[] { new Tuple(0x60, Clothes), //new Tuple(0x110, LightAttributes) //TODO: fix! }; } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragCloth : ResourceSystemBlock { public override long BlockLength { get { return 128; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public ulong InstanceTuningPointer { get; set; } public ulong DrawablePointer { get; set; } public uint Unknown_20h { get; set; } // 0x00000000 public uint Unknown_24h { get; set; } // 0x00000000 public ulong ControllerPointer { get; set; } public uint Unknown_30h { get; set; } // 0x00000000 public uint Unknown_34h { get; set; } // 0x00000000 public uint Unknown_38h { get; set; } // 0x00000000 public uint Unknown_3Ch { get; set; } // 0x00000000 public uint Unknown_40h { get; set; } // 0x00000000 public uint Unknown_44h { get; set; } // 0x00000000 public uint Unknown_48h { get; set; } // 0x00000000 public uint Unknown_4Ch { get; set; } // 0x00000000 public uint Unknown_50h { get; set; } // 0x00000000 public uint Unknown_54h { get; set; } // 0x00000000 public uint Unknown_58h { get; set; } // 0x00000000 public uint Unknown_5Ch { get; set; } // 0x00000000 public ulong pxxxxx_2 { get; set; } public ushort cntxx51a { get; set; } public ushort cntxx51b { get; set; } public uint Unknown_6Ch { get; set; } // 0x00000000 public uint Unknown_70h { get; set; } // 0x00000000 public uint Unknown_74h { get; set; } // 0x00000000 public uint Unknown_78h { get; set; } public uint Unknown_7Ch { get; set; } // 0x00000000 // reference data public FragClothInstanceTuning InstanceTuning { get; set; } public FragDrawable Drawable { get; set; } public FragClothController Controller { get; set; } public uint[] pxxxxx_2data { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.InstanceTuningPointer = reader.ReadUInt64(); this.DrawablePointer = reader.ReadUInt64(); this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.ControllerPointer = reader.ReadUInt64(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); this.Unknown_40h = reader.ReadUInt32(); this.Unknown_44h = reader.ReadUInt32(); this.Unknown_48h = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); this.pxxxxx_2 = reader.ReadUInt64(); this.cntxx51a = reader.ReadUInt16(); this.cntxx51b = reader.ReadUInt16(); this.Unknown_6Ch = reader.ReadUInt32(); this.Unknown_70h = reader.ReadUInt32(); this.Unknown_74h = reader.ReadUInt32(); this.Unknown_78h = reader.ReadUInt32(); this.Unknown_7Ch = reader.ReadUInt32(); // read reference data this.InstanceTuning = reader.ReadBlockAt( this.InstanceTuningPointer // offset ); this.Drawable = reader.ReadBlockAt( this.DrawablePointer // offset ); if (this.Drawable != null) { this.Drawable.OwnerFragmentCloth = this; } this.Controller = reader.ReadBlockAt( this.ControllerPointer // offset ); //this.pxxxxx_2data = reader.ReadBlockAt>( // this.pxxxxx_2, // offset // this.cntxx51a //); this.pxxxxx_2data = reader.ReadUintsAt(this.pxxxxx_2, this.cntxx51a); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data this.InstanceTuningPointer = (ulong)(this.InstanceTuning != null ? this.InstanceTuning.FilePosition : 0); this.DrawablePointer = (ulong)(this.Drawable != null ? this.Drawable.FilePosition : 0); this.ControllerPointer = (ulong)(this.Controller != null ? this.Controller.FilePosition : 0); //this.pxxxxx_2 = (ulong)(this.pxxxxx_2data != null ? this.pxxxxx_2data.Position : 0); //TODO: fix //this.cntxx51a = (ushort)(this.pxxxxx_2data != null ? this.pxxxxx_2data.Count : 0); // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.InstanceTuningPointer); writer.Write(this.DrawablePointer); writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.ControllerPointer); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.Write(this.Unknown_40h); writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); writer.Write(this.pxxxxx_2); writer.Write(this.cntxx51a); writer.Write(this.cntxx51b); writer.Write(this.Unknown_6Ch); writer.Write(this.Unknown_70h); writer.Write(this.Unknown_74h); writer.Write(this.Unknown_78h); writer.Write(this.Unknown_7Ch); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(); if (InstanceTuning != null) list.Add(InstanceTuning); if (Drawable != null) list.Add(Drawable); if (Controller != null) list.Add(Controller); //if (pxxxxx_2data != null) list.Add(pxxxxx_2data); //TODO: fix return list.ToArray(); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragClothInstanceTuning : ResourceSystemBlock { public override long BlockLength { get { return 64; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } // float public uint Unknown_14h { get; set; } public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 public uint Unknown_20h { get; set; } public uint Unknown_24h { get; set; } public uint Unknown_28h { get; set; } // float public uint Unknown_2Ch { get; set; } public uint Unknown_30h { get; set; } // no float public uint Unknown_34h { get; set; } // float public uint Unknown_38h { get; set; } public uint Unknown_3Ch { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragClothController : ResourceSystemBlock { public override long BlockLength { get { return 128; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public ulong BridgeSimGfxPointer { get; set; } // pointer public ulong MorphControllerPointer { get; set; } // pointer public ulong VerletCloth1Pointer { get; set; } // pointer public ulong VerletCloth2Pointer { get; set; } // pointer public ulong VerletCloth3Pointer { get; set; } // pointer public uint Unknown_38h { get; set; } // 0x00000000 public uint Unknown_3Ch { get; set; } // 0x00000000 public uint Unknown_40h { get; set; } // 0x00000000 public uint Unknown_44h { get; set; } // 0x00000000 public uint Unknown_48h { get; set; } // 0x00000000 public uint Unknown_4Ch { get; set; } // 0x00000000 public uint Unknown_50h { get; set; } // 0x00000003 public uint Unknown_54h { get; set; } // 0x00000000 public uint Unknown_58h { get; set; } // no float public uint Unknown_5Ch { get; set; } // no float public uint Unknown_60h { get; set; } // no float public uint Unknown_64h { get; set; } // no float public uint Unknown_68h { get; set; } // no float public uint Unknown_6Ch { get; set; } // no float public uint Unknown_70h { get; set; } // no float public uint Unknown_74h { get; set; } // 0x00000000 public uint Unknown_78h { get; set; } // 0x00000000 public uint Unknown_7Ch { get; set; } // 0x00000000 // reference data public FragClothBridgeSimGfx BridgeSimGfx { get; set; } public FragClothMorphController MorphController { get; set; } public FragClothVerletCloth VerletCloth1 { get; set; } public FragClothVerletCloth VerletCloth2 { get; set; } public FragClothVerletCloth VerletCloth3 { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.BridgeSimGfxPointer = reader.ReadUInt64(); this.MorphControllerPointer = reader.ReadUInt64(); this.VerletCloth1Pointer = reader.ReadUInt64(); this.VerletCloth2Pointer = reader.ReadUInt64(); this.VerletCloth3Pointer = reader.ReadUInt64(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); this.Unknown_40h = reader.ReadUInt32(); this.Unknown_44h = reader.ReadUInt32(); this.Unknown_48h = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); this.Unknown_60h = reader.ReadUInt32(); this.Unknown_64h = reader.ReadUInt32(); this.Unknown_68h = reader.ReadUInt32(); this.Unknown_6Ch = reader.ReadUInt32(); this.Unknown_70h = reader.ReadUInt32(); this.Unknown_74h = reader.ReadUInt32(); this.Unknown_78h = reader.ReadUInt32(); this.Unknown_7Ch = reader.ReadUInt32(); // read reference data this.BridgeSimGfx = reader.ReadBlockAt( this.BridgeSimGfxPointer // offset ); this.MorphController = reader.ReadBlockAt( this.MorphControllerPointer // offset ); this.VerletCloth1 = reader.ReadBlockAt( this.VerletCloth1Pointer // offset ); this.VerletCloth2 = reader.ReadBlockAt( this.VerletCloth2Pointer // offset ); this.VerletCloth3 = reader.ReadBlockAt( this.VerletCloth3Pointer // offset ); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data this.BridgeSimGfxPointer = (ulong)(this.BridgeSimGfx != null ? this.BridgeSimGfx.FilePosition : 0); this.MorphControllerPointer = (ulong)(this.MorphController != null ? this.MorphController.FilePosition : 0); this.VerletCloth1Pointer = (ulong)(this.VerletCloth1 != null ? this.VerletCloth1.FilePosition : 0); this.VerletCloth2Pointer = (ulong)(this.VerletCloth2 != null ? this.VerletCloth2.FilePosition : 0); this.VerletCloth3Pointer = (ulong)(this.VerletCloth3 != null ? this.VerletCloth3.FilePosition : 0); // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.BridgeSimGfxPointer); writer.Write(this.MorphControllerPointer); writer.Write(this.VerletCloth1Pointer); writer.Write(this.VerletCloth2Pointer); writer.Write(this.VerletCloth3Pointer); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.Write(this.Unknown_40h); writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); writer.Write(this.Unknown_60h); writer.Write(this.Unknown_64h); writer.Write(this.Unknown_68h); writer.Write(this.Unknown_6Ch); writer.Write(this.Unknown_70h); writer.Write(this.Unknown_74h); writer.Write(this.Unknown_78h); writer.Write(this.Unknown_7Ch); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(); if (BridgeSimGfx != null) list.Add(BridgeSimGfx); if (MorphController != null) list.Add(MorphController); if (VerletCloth1 != null) list.Add(VerletCloth1); if (VerletCloth2 != null) list.Add(VerletCloth2); if (VerletCloth3 != null) list.Add(VerletCloth3); return list.ToArray(); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragClothBridgeSimGfx : ResourceSystemBlock { public override long BlockLength { get { return 320; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } public uint Unknown_14h { get; set; } public uint Unknown_18h { get; set; } public uint Unknown_1Ch { get; set; } // 0x00000000 //public ResourceSimpleList64 Unknown_20h { get; set; } //public ResourceSimpleList64 Unknown_30h { get; set; } //public ResourceSimpleList64 Unknown_40h { get; set; } public ResourceSimpleList64Ptr Unknown_20hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_30hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_40hPtr { get; set; } public float[] Unknown_20h { get; set; } public float[] Unknown_30h { get; set; } public float[] Unknown_40h { get; set; } public uint Unknown_50h { get; set; } // 0x00000000 public uint Unknown_54h { get; set; } // 0x00000000 public uint Unknown_58h { get; set; } // 0x00000000 public uint Unknown_5Ch { get; set; } // 0x00000000 //public ResourceSimpleList64 Unknown_60h { get; set; } //public ResourceSimpleList64 Unknown_70h { get; set; } //public ResourceSimpleList64 Unknown_80h { get; set; } public ResourceSimpleList64Ptr Unknown_60hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_70hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_80hPtr { get; set; } public float[] Unknown_60h { get; set; } public uint[] Unknown_70h { get; set; } public uint[] Unknown_80h { get; set; } public uint Unknown_90h { get; set; } // 0x00000000 public uint Unknown_94h { get; set; } // 0x00000000 public uint Unknown_98h { get; set; } // 0x00000000 public uint Unknown_9Ch { get; set; } // 0x00000000 //public ResourceSimpleList64 Unknown_A0h { get; set; } //public ResourceSimpleList64 Unknown_B0h { get; set; } //public ResourceSimpleList64 Unknown_C0h { get; set; } public ResourceSimpleList64Ptr Unknown_A0hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_B0hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_C0hPtr { get; set; } public float[] Unknown_A0h { get; set; } public uint[] Unknown_B0h { get; set; } public uint[] Unknown_C0h { get; set; } public uint Unknown_D0h { get; set; } // 0x00000000 public uint Unknown_D4h { get; set; } // 0x00000000 public uint Unknown_D8h { get; set; } // 0x00000000 public uint Unknown_DCh { get; set; } // 0x00000000 //public ResourceSimpleList64 Unknown_E0h { get; set; } //public ResourceSimpleList64 Unknown_F0h { get; set; } //public ResourceSimpleList64 Unknown_100h { get; set; } public ResourceSimpleList64Ptr Unknown_E0hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_F0hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_100hPtr { get; set; } public ushort[] Unknown_E0h { get; set; } public ushort[] Unknown_F0h { get; set; } public ushort[] Unknown_100h { get; set; } public uint Unknown_110h { get; set; } // 0x00000000 public uint Unknown_114h { get; set; } // 0x00000000 public uint Unknown_118h { get; set; } // 0x00000000 public uint Unknown_11Ch { get; set; } // 0x00000000 public uint Unknown_120h { get; set; } // 0x00000000 public uint Unknown_124h { get; set; } // 0x00000000 //public ResourceSimpleList64 Unknown_128h { get; set; } public ResourceSimpleList64Ptr Unknown_128hPtr { get; set; } public uint[] Unknown_128h { get; set; } public uint Unknown_138h { get; set; } // 0x00000000 public uint Unknown_13Ch { get; set; } // 0x00000000 /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); this.Unknown_20hPtr = reader.ReadStruct(); this.Unknown_30hPtr = reader.ReadStruct(); this.Unknown_40hPtr = reader.ReadStruct(); this.Unknown_20h = reader.ReadFloatsAt(Unknown_20hPtr.EntriesPointer, Unknown_20hPtr.EntriesCount); this.Unknown_30h = reader.ReadFloatsAt(Unknown_30hPtr.EntriesPointer, Unknown_30hPtr.EntriesCount); this.Unknown_40h = reader.ReadFloatsAt(Unknown_40hPtr.EntriesPointer, Unknown_40hPtr.EntriesCount); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); this.Unknown_60hPtr = reader.ReadStruct(); this.Unknown_70hPtr = reader.ReadStruct(); this.Unknown_80hPtr = reader.ReadStruct(); this.Unknown_60h = reader.ReadFloatsAt(Unknown_60hPtr.EntriesPointer, Unknown_60hPtr.EntriesCount); this.Unknown_70h = reader.ReadUintsAt(Unknown_70hPtr.EntriesPointer, Unknown_70hPtr.EntriesCount); this.Unknown_80h = reader.ReadUintsAt(Unknown_80hPtr.EntriesPointer, Unknown_80hPtr.EntriesCount); this.Unknown_90h = reader.ReadUInt32(); this.Unknown_94h = reader.ReadUInt32(); this.Unknown_98h = reader.ReadUInt32(); this.Unknown_9Ch = reader.ReadUInt32(); this.Unknown_A0hPtr = reader.ReadStruct(); this.Unknown_B0hPtr = reader.ReadStruct(); this.Unknown_C0hPtr = reader.ReadStruct(); this.Unknown_A0h = reader.ReadFloatsAt(Unknown_A0hPtr.EntriesPointer, Unknown_A0hPtr.EntriesCount); this.Unknown_B0h = reader.ReadUintsAt(Unknown_B0hPtr.EntriesPointer, Unknown_B0hPtr.EntriesCount); this.Unknown_C0h = reader.ReadUintsAt(Unknown_C0hPtr.EntriesPointer, Unknown_C0hPtr.EntriesCount); this.Unknown_D0h = reader.ReadUInt32(); this.Unknown_D4h = reader.ReadUInt32(); this.Unknown_D8h = reader.ReadUInt32(); this.Unknown_DCh = reader.ReadUInt32(); this.Unknown_E0hPtr = reader.ReadStruct(); this.Unknown_F0hPtr = reader.ReadStruct(); this.Unknown_100hPtr = reader.ReadStruct(); this.Unknown_E0h = reader.ReadUshortsAt(Unknown_E0hPtr.EntriesPointer, Unknown_E0hPtr.EntriesCount); this.Unknown_F0h = reader.ReadUshortsAt(Unknown_F0hPtr.EntriesPointer, Unknown_F0hPtr.EntriesCount); this.Unknown_100h = reader.ReadUshortsAt(Unknown_100hPtr.EntriesPointer, Unknown_100hPtr.EntriesCount); this.Unknown_110h = reader.ReadUInt32(); this.Unknown_114h = reader.ReadUInt32(); this.Unknown_118h = reader.ReadUInt32(); this.Unknown_11Ch = reader.ReadUInt32(); this.Unknown_120h = reader.ReadUInt32(); this.Unknown_124h = reader.ReadUInt32(); this.Unknown_128hPtr = reader.ReadStruct(); this.Unknown_128h = reader.ReadUintsAt(Unknown_128hPtr.EntriesPointer, Unknown_128hPtr.EntriesCount); this.Unknown_138h = reader.ReadUInt32(); this.Unknown_13Ch = reader.ReadUInt32(); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); //writer.WriteBlock(this.Unknown_20h); //TODO: fix! //writer.WriteBlock(this.Unknown_30h); //writer.WriteBlock(this.Unknown_40h); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); //writer.WriteBlock(this.Unknown_60h); //writer.WriteBlock(this.Unknown_70h); //writer.WriteBlock(this.Unknown_80h); writer.Write(this.Unknown_90h); writer.Write(this.Unknown_94h); writer.Write(this.Unknown_98h); writer.Write(this.Unknown_9Ch); //writer.WriteBlock(this.Unknown_A0h); //writer.WriteBlock(this.Unknown_B0h); //writer.WriteBlock(this.Unknown_C0h); writer.Write(this.Unknown_D0h); writer.Write(this.Unknown_D4h); writer.Write(this.Unknown_D8h); writer.Write(this.Unknown_DCh); //writer.WriteBlock(this.Unknown_E0h); //writer.WriteBlock(this.Unknown_F0h); //writer.WriteBlock(this.Unknown_100h); writer.Write(this.Unknown_110h); writer.Write(this.Unknown_114h); writer.Write(this.Unknown_118h); writer.Write(this.Unknown_11Ch); writer.Write(this.Unknown_120h); writer.Write(this.Unknown_124h); //writer.WriteBlock(this.Unknown_128h); writer.Write(this.Unknown_138h); writer.Write(this.Unknown_13Ch); } public override Tuple[] GetParts() { return new Tuple[] { //new Tuple(0x20, Unknown_20h), //TODO: fix! //new Tuple(0x30, Unknown_30h), //new Tuple(0x40, Unknown_40h), //new Tuple(0x60, Unknown_60h), //new Tuple(0x70, Unknown_70h), //new Tuple(0x80, Unknown_80h), //new Tuple(0xA0, Unknown_A0h), //new Tuple(0xB0, Unknown_B0h), //new Tuple(0xC0, Unknown_C0h), //new Tuple(0xE0, Unknown_E0h), //new Tuple(0xF0, Unknown_F0h), //new Tuple(0x100, Unknown_100h), //new Tuple(0x128, Unknown_128h) }; } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragClothMorphController : ResourceSystemBlock { public override long BlockLength { get { return 64; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } // 0x00000000 public uint Unknown_14h { get; set; } // 0x00000000 public ulong Unknown_18h_Pointer { get; set; } public ulong Unknown_20h_Pointer { get; set; } public ulong Unknown_28h_Pointer { get; set; } public uint Unknown_30h { get; set; } // 0x00000000 public uint Unknown_34h { get; set; } // 0x00000000 public uint Unknown_38h { get; set; } // 0x00000000 public uint Unknown_3Ch { get; set; } // 0x00000000 // reference data public FragClothUnknown_F_007 Unknown_18h_Data { get; set; } public FragClothUnknown_F_007 Unknown_20h_Data { get; set; } public FragClothUnknown_F_007 Unknown_28h_Data { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h_Pointer = reader.ReadUInt64(); this.Unknown_20h_Pointer = reader.ReadUInt64(); this.Unknown_28h_Pointer = reader.ReadUInt64(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); // read reference data this.Unknown_18h_Data = reader.ReadBlockAt( this.Unknown_18h_Pointer // offset ); this.Unknown_20h_Data = reader.ReadBlockAt( this.Unknown_20h_Pointer // offset ); this.Unknown_28h_Data = reader.ReadBlockAt( this.Unknown_28h_Pointer // offset ); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data this.Unknown_18h_Pointer = (ulong)(this.Unknown_18h_Data != null ? this.Unknown_18h_Data.FilePosition : 0); this.Unknown_20h_Pointer = (ulong)(this.Unknown_20h_Data != null ? this.Unknown_20h_Data.FilePosition : 0); this.Unknown_28h_Pointer = (ulong)(this.Unknown_28h_Data != null ? this.Unknown_28h_Data.FilePosition : 0); // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h_Pointer); writer.Write(this.Unknown_20h_Pointer); writer.Write(this.Unknown_28h_Pointer); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(); if (Unknown_18h_Data != null) list.Add(Unknown_18h_Data); if (Unknown_20h_Data != null) list.Add(Unknown_20h_Data); if (Unknown_28h_Data != null) list.Add(Unknown_28h_Data); return list.ToArray(); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragClothUnknown_F_007 : ResourceSystemBlock { public override long BlockLength { get { return 400; } } // structure data public uint Unknown_00h { get; set; } // 0x00000000 public uint Unknown_04h { get; set; } // 0x00000000 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } // 0x00000000 public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 public uint Unknown_20h { get; set; } // 0x00000000 public uint Unknown_24h { get; set; } // 0x00000000 public uint Unknown_28h { get; set; } // 0x00000000 public uint Unknown_2Ch { get; set; } // 0x00000000 public uint Unknown_30h { get; set; } // 0x00000000 public uint Unknown_34h { get; set; } // 0x00000000 public uint Unknown_38h { get; set; } // 0x00000000 public uint Unknown_3Ch { get; set; } // 0x00000000 public uint Unknown_40h { get; set; } // 0x00000000 public uint Unknown_44h { get; set; } // 0x00000000 public uint Unknown_48h { get; set; } // 0x00000000 public uint Unknown_4Ch { get; set; } // 0x00000000 //public ResourceSimpleList64 Unknown_50h { get; set; } //public ResourceSimpleList64 Unknown_60h { get; set; } //public ResourceSimpleList64 Unknown_70h { get; set; } //public ResourceSimpleList64 Unknown_80h { get; set; } //public ResourceSimpleList64 Unknown_90h { get; set; } //public ResourceSimpleList64 Unknown_A0h { get; set; } //public ResourceSimpleList64 Unknown_B0h { get; set; } //public ResourceSimpleList64 Unknown_C0h { get; set; } //public ResourceSimpleList64 Unknown_D0h { get; set; } //public ResourceSimpleList64 Unknown_E0h { get; set; } public ResourceSimpleList64Ptr Unknown_50hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_60hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_70hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_80hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_90hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_A0hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_B0hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_C0hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_D0hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_E0hPtr { get; set; } public Vector4[] Unknown_50h { get; set; } public ushort[] Unknown_60h { get; set; } public ushort[] Unknown_70h { get; set; } public ushort[] Unknown_80h { get; set; } public ushort[] Unknown_90h { get; set; } public Vector4[] Unknown_A0h { get; set; } public ushort[] Unknown_B0h { get; set; } public ushort[] Unknown_C0h { get; set; } public ushort[] Unknown_D0h { get; set; } public ushort[] Unknown_E0h { get; set; } public uint Unknown_F0h { get; set; } // 0x00000000 public uint Unknown_F4h { get; set; } // 0x00000000 public uint Unknown_F8h { get; set; } // 0x00000000 public uint Unknown_FCh { get; set; } // 0x00000000 public uint Unknown_100h { get; set; } // 0x00000000 public uint Unknown_104h { get; set; } // 0x00000000 public uint Unknown_108h { get; set; } // 0x00000000 public uint Unknown_10Ch { get; set; } // 0x00000000 public uint Unknown_110h { get; set; } // 0x00000000 public uint Unknown_114h { get; set; } // 0x00000000 public uint Unknown_118h { get; set; } // 0x00000000 public uint Unknown_11Ch { get; set; } // 0x00000000 public uint Unknown_120h { get; set; } // 0x00000000 public uint Unknown_124h { get; set; } // 0x00000000 public uint Unknown_128h { get; set; } // 0x00000000 public uint Unknown_12Ch { get; set; } // 0x00000000 public uint Unknown_130h { get; set; } // 0x00000000 public uint Unknown_134h { get; set; } // 0x00000000 public uint Unknown_138h { get; set; } // 0x00000000 public uint Unknown_13Ch { get; set; } // 0x00000000 public uint Unknown_140h { get; set; } // 0x00000000 public uint Unknown_144h { get; set; } // 0x00000000 public uint Unknown_148h { get; set; } // 0x00000000 public uint Unknown_14Ch { get; set; } // 0x00000000 //public ResourceSimpleList64 Unknown_150h { get; set; } //public ResourceSimpleList64 Unknown_160h { get; set; } public ResourceSimpleList64Ptr Unknown_150hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_160hPtr { get; set; } public ushort[] Unknown_150h { get; set; } public ushort[] Unknown_160h { get; set; } public uint Unknown_170h { get; set; } // 0x00000000 public uint Unknown_174h { get; set; } // 0x00000000 public uint Unknown_178h { get; set; } // 0x00000000 public uint Unknown_17Ch { get; set; } // 0x00000000 public uint Unknown_180h { get; set; } public uint Unknown_184h { get; set; } // 0x00000000 public uint Unknown_188h { get; set; } // 0x00000000 public uint Unknown_18Ch { get; set; } // 0x00000000 /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.Unknown_00h = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); this.Unknown_40h = reader.ReadUInt32(); this.Unknown_44h = reader.ReadUInt32(); this.Unknown_48h = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); //this.Unknown_50h = reader.ReadBlock>(); //this.Unknown_60h = reader.ReadBlock>(); //this.Unknown_70h = reader.ReadBlock>(); //this.Unknown_80h = reader.ReadBlock>(); //this.Unknown_90h = reader.ReadBlock>(); //this.Unknown_A0h = reader.ReadBlock>(); //this.Unknown_B0h = reader.ReadBlock>(); //this.Unknown_C0h = reader.ReadBlock>(); //this.Unknown_D0h = reader.ReadBlock>(); //this.Unknown_E0h = reader.ReadBlock>(); this.Unknown_50hPtr = reader.ReadStruct(); this.Unknown_60hPtr = reader.ReadStruct(); this.Unknown_70hPtr = reader.ReadStruct(); this.Unknown_80hPtr = reader.ReadStruct(); this.Unknown_90hPtr = reader.ReadStruct(); this.Unknown_A0hPtr = reader.ReadStruct(); this.Unknown_B0hPtr = reader.ReadStruct(); this.Unknown_C0hPtr = reader.ReadStruct(); this.Unknown_D0hPtr = reader.ReadStruct(); this.Unknown_E0hPtr = reader.ReadStruct(); this.Unknown_50h = reader.ReadStructsAt(Unknown_50hPtr.EntriesPointer, Unknown_50hPtr.EntriesCount); this.Unknown_60h = reader.ReadUshortsAt(Unknown_60hPtr.EntriesPointer, Unknown_60hPtr.EntriesCount); this.Unknown_70h = reader.ReadUshortsAt(Unknown_70hPtr.EntriesPointer, Unknown_70hPtr.EntriesCount); this.Unknown_80h = reader.ReadUshortsAt(Unknown_80hPtr.EntriesPointer, Unknown_80hPtr.EntriesCount); this.Unknown_90h = reader.ReadUshortsAt(Unknown_90hPtr.EntriesPointer, Unknown_90hPtr.EntriesCount); this.Unknown_A0h = reader.ReadStructsAt(Unknown_A0hPtr.EntriesPointer, Unknown_A0hPtr.EntriesCount); this.Unknown_B0h = reader.ReadUshortsAt(Unknown_B0hPtr.EntriesPointer, Unknown_B0hPtr.EntriesCount); this.Unknown_C0h = reader.ReadUshortsAt(Unknown_C0hPtr.EntriesPointer, Unknown_C0hPtr.EntriesCount); this.Unknown_D0h = reader.ReadUshortsAt(Unknown_D0hPtr.EntriesPointer, Unknown_D0hPtr.EntriesCount); this.Unknown_E0h = reader.ReadUshortsAt(Unknown_E0hPtr.EntriesPointer, Unknown_E0hPtr.EntriesCount); this.Unknown_F0h = reader.ReadUInt32(); this.Unknown_F4h = reader.ReadUInt32(); this.Unknown_F8h = reader.ReadUInt32(); this.Unknown_FCh = reader.ReadUInt32(); this.Unknown_100h = reader.ReadUInt32(); this.Unknown_104h = reader.ReadUInt32(); this.Unknown_108h = reader.ReadUInt32(); this.Unknown_10Ch = reader.ReadUInt32(); this.Unknown_110h = reader.ReadUInt32(); this.Unknown_114h = reader.ReadUInt32(); this.Unknown_118h = reader.ReadUInt32(); this.Unknown_11Ch = reader.ReadUInt32(); this.Unknown_120h = reader.ReadUInt32(); this.Unknown_124h = reader.ReadUInt32(); this.Unknown_128h = reader.ReadUInt32(); this.Unknown_12Ch = reader.ReadUInt32(); this.Unknown_130h = reader.ReadUInt32(); this.Unknown_134h = reader.ReadUInt32(); this.Unknown_138h = reader.ReadUInt32(); this.Unknown_13Ch = reader.ReadUInt32(); this.Unknown_140h = reader.ReadUInt32(); this.Unknown_144h = reader.ReadUInt32(); this.Unknown_148h = reader.ReadUInt32(); this.Unknown_14Ch = reader.ReadUInt32(); //this.Unknown_150h = reader.ReadBlock>(); //this.Unknown_160h = reader.ReadBlock>(); this.Unknown_150hPtr = reader.ReadStruct(); this.Unknown_160hPtr = reader.ReadStruct(); this.Unknown_150h = reader.ReadUshortsAt(Unknown_150hPtr.EntriesPointer, Unknown_150hPtr.EntriesCount); this.Unknown_160h = reader.ReadUshortsAt(Unknown_160hPtr.EntriesPointer, Unknown_160hPtr.EntriesCount); this.Unknown_170h = reader.ReadUInt32(); this.Unknown_174h = reader.ReadUInt32(); this.Unknown_178h = reader.ReadUInt32(); this.Unknown_17Ch = reader.ReadUInt32(); this.Unknown_180h = reader.ReadUInt32(); this.Unknown_184h = reader.ReadUInt32(); this.Unknown_188h = reader.ReadUInt32(); this.Unknown_18Ch = reader.ReadUInt32(); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.Unknown_00h); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.Write(this.Unknown_40h); writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); //writer.WriteBlock(this.Unknown_50h); //TODO: fix this! //writer.WriteBlock(this.Unknown_60h); //writer.WriteBlock(this.Unknown_70h); //writer.WriteBlock(this.Unknown_80h); //writer.WriteBlock(this.Unknown_90h); //writer.WriteBlock(this.Unknown_A0h); //writer.WriteBlock(this.Unknown_B0h); //writer.WriteBlock(this.Unknown_C0h); //writer.WriteBlock(this.Unknown_D0h); //writer.WriteBlock(this.Unknown_E0h); writer.Write(this.Unknown_F0h); writer.Write(this.Unknown_F4h); writer.Write(this.Unknown_F8h); writer.Write(this.Unknown_FCh); writer.Write(this.Unknown_100h); writer.Write(this.Unknown_104h); writer.Write(this.Unknown_108h); writer.Write(this.Unknown_10Ch); writer.Write(this.Unknown_110h); writer.Write(this.Unknown_114h); writer.Write(this.Unknown_118h); writer.Write(this.Unknown_11Ch); writer.Write(this.Unknown_120h); writer.Write(this.Unknown_124h); writer.Write(this.Unknown_128h); writer.Write(this.Unknown_12Ch); writer.Write(this.Unknown_130h); writer.Write(this.Unknown_134h); writer.Write(this.Unknown_138h); writer.Write(this.Unknown_13Ch); writer.Write(this.Unknown_140h); writer.Write(this.Unknown_144h); writer.Write(this.Unknown_148h); writer.Write(this.Unknown_14Ch); //writer.WriteBlock(this.Unknown_150h); //TODO: fix //writer.WriteBlock(this.Unknown_160h); writer.Write(this.Unknown_170h); writer.Write(this.Unknown_174h); writer.Write(this.Unknown_178h); writer.Write(this.Unknown_17Ch); writer.Write(this.Unknown_180h); writer.Write(this.Unknown_184h); writer.Write(this.Unknown_188h); writer.Write(this.Unknown_18Ch); } public override Tuple[] GetParts() { return new Tuple[] { //new Tuple(0x50, Unknown_50h), //TODO: fix this //new Tuple(0x60, Unknown_60h), //new Tuple(0x70, Unknown_70h), //new Tuple(0x80, Unknown_80h), //new Tuple(0x90, Unknown_90h), //new Tuple(0xA0, Unknown_A0h), //new Tuple(0xB0, Unknown_B0h), //new Tuple(0xC0, Unknown_C0h), //new Tuple(0xD0, Unknown_D0h), //new Tuple(0xE0, Unknown_E0h), //new Tuple(0x150, Unknown_150h), //new Tuple(0x160, Unknown_160h) }; } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragClothVerletCloth : ResourceSystemBlock { public override long BlockLength { get { return 384; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } // 0x00000000 public uint Unknown_14h { get; set; } // 0x00000000 public ulong BoundsPointer { get; set; } public uint Unknown_20h { get; set; } // 0x00000000 public uint Unknown_24h { get; set; } // 0x00000000 public uint Unknown_28h { get; set; } // 0x00000000 public uint Unknown_2Ch { get; set; } // 0x00000000 public uint Unknown_30h { get; set; } public uint Unknown_34h { get; set; } public uint Unknown_38h { get; set; } public uint Unknown_3Ch { get; set; } public uint Unknown_40h { get; set; } public uint Unknown_44h { get; set; } public uint Unknown_48h { get; set; } public uint Unknown_4Ch { get; set; } public uint Unknown_50h { get; set; } public uint Unknown_54h { get; set; } // 0x00000001 public uint Unknown_58h { get; set; } // 0x00000000 public uint Unknown_5Ch { get; set; } // 0x00000000 public uint Unknown_60h { get; set; } // 0x00000000 public uint Unknown_64h { get; set; } // 0x00000000 public uint Unknown_68h { get; set; } // 0x00000000 public uint Unknown_6Ch { get; set; } // 0x00000000 public ResourceSimpleList64Ptr Unknown_70hPtr { get; set; } public Vector4[] Unknown_70h { get; set; } //public uint Unknown_70h { get; set; } // 0x00000000 //public uint Unknown_74h { get; set; } // 0x00000000 //public uint Unknown_78h { get; set; } // 0x00000000 //public uint Unknown_7Ch { get; set; } // 0x00000000 //public ResourceSimpleList64 Unknown_80h { get; set; } public ResourceSimpleList64Ptr Unknown_80hPtr { get; set; } public Vector4[] Unknown_80h { get; set; } public uint Unknown_90h { get; set; } // 0x00000000 public uint Unknown_94h { get; set; } // 0x00000000 public uint Unknown_98h { get; set; } // 0x00000000 public uint Unknown_9Ch { get; set; } // 0x00000000 public uint Unknown_A0h { get; set; } // 0x00000000 public uint Unknown_A4h { get; set; } // 0x00000000 public uint Unknown_A8h { get; set; } public uint Unknown_ACh { get; set; } public uint Unknown_B0h { get; set; } // 0x00000000 public uint Unknown_B4h { get; set; } // 0x00000000 public uint Unknown_B8h { get; set; } // 0x00000000 public uint Unknown_BCh { get; set; } // 0x00000000 public uint Unknown_C0h { get; set; } // 0x00000000 public uint Unknown_C4h { get; set; } // 0x00000000 public uint Unknown_C8h { get; set; } // 0x00000000 public uint Unknown_CCh { get; set; } // 0x00000000 public uint Unknown_D0h { get; set; } // 0x00000000 public uint Unknown_D4h { get; set; } // 0x00000000 public uint Unknown_D8h { get; set; } // 0x00000000 public uint Unknown_DCh { get; set; } // 0x00000000 public uint Unknown_E0h { get; set; } // 0x00000000 public uint Unknown_E4h { get; set; } // 0x00000000 public uint Unknown_E8h { get; set; } public uint Unknown_ECh { get; set; } public uint Unknown_F0h { get; set; } public uint Unknown_F4h { get; set; } // 0x00000000 public uint Unknown_F8h { get; set; } public uint Unknown_FCh { get; set; } // 0x00000000 //public ResourceSimpleList64 Unknown_100h { get; set; } //public ResourceSimpleList64 Unknown_110h { get; set; } public ResourceSimpleList64Ptr Unknown_100hPtr { get; set; } public ResourceSimpleList64Ptr Unknown_110hPtr { get; set; } public Vector4[] Unknown_100h { get; set; } public Vector4[] Unknown_110h { get; set; } public uint Unknown_120h { get; set; } // 0x00000000 public uint Unknown_124h { get; set; } // 0x00000000 public uint Unknown_128h { get; set; } // 0x00000000 public uint Unknown_12Ch { get; set; } // 0x00000000 public ulong BehaviorPointer { get; set; } public uint Unknown_138h { get; set; } // 0x00100000 public uint Unknown_13Ch { get; set; } // 0x00000000 public ulong Unknown_140h_Pointer { get; set; } public uint Unknown_148h { get; set; } public uint Unknown_14Ch { get; set; } // 0x00000000 public uint Unknown_150h { get; set; } // 0x00000000 public uint Unknown_154h { get; set; } // 0x00000000 public uint Unknown_158h { get; set; } public uint Unknown_15Ch { get; set; } // 0x00000000 public uint Unknown_160h { get; set; } // 0x00000000 public uint Unknown_164h { get; set; } // 0x00000000 public uint Unknown_168h { get; set; } // 0x00000000 public uint Unknown_16Ch { get; set; } // 0x00000000 public uint Unknown_170h { get; set; } // 0x00000000 public uint Unknown_174h { get; set; } // 0x00000000 public uint Unknown_178h { get; set; } // 0x00000000 public uint Unknown_17Ch { get; set; } // 0x00000000 // reference data public Bounds Bounds { get; set; } public FragClothVerletBehavior Behavior { get; set; } public FragClothUnknown_F_023 Unknown_140h_Data { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.BoundsPointer = reader.ReadUInt64(); this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); this.Unknown_40h = reader.ReadUInt32(); this.Unknown_44h = reader.ReadUInt32(); this.Unknown_48h = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); this.Unknown_60h = reader.ReadUInt32(); this.Unknown_64h = reader.ReadUInt32(); this.Unknown_68h = reader.ReadUInt32(); this.Unknown_6Ch = reader.ReadUInt32(); this.Unknown_70hPtr = reader.ReadStruct(); this.Unknown_70h = reader.ReadStructsAt(Unknown_70hPtr.EntriesPointer, Unknown_70hPtr.EntriesCount); //this.Unknown_70h = reader.ReadUInt32(); //this.Unknown_74h = reader.ReadUInt32(); //this.Unknown_78h = reader.ReadUInt32(); //this.Unknown_7Ch = reader.ReadUInt32(); //this.Unknown_80h = reader.ReadBlock>(); this.Unknown_80hPtr = reader.ReadStruct(); this.Unknown_80h = reader.ReadStructsAt(Unknown_80hPtr.EntriesPointer, Unknown_80hPtr.EntriesCount); this.Unknown_90h = reader.ReadUInt32(); this.Unknown_94h = reader.ReadUInt32(); this.Unknown_98h = reader.ReadUInt32(); this.Unknown_9Ch = reader.ReadUInt32(); this.Unknown_A0h = reader.ReadUInt32(); this.Unknown_A4h = reader.ReadUInt32(); this.Unknown_A8h = reader.ReadUInt32(); this.Unknown_ACh = reader.ReadUInt32(); this.Unknown_B0h = reader.ReadUInt32(); this.Unknown_B4h = reader.ReadUInt32(); this.Unknown_B8h = reader.ReadUInt32(); this.Unknown_BCh = reader.ReadUInt32(); this.Unknown_C0h = reader.ReadUInt32(); this.Unknown_C4h = reader.ReadUInt32(); this.Unknown_C8h = reader.ReadUInt32(); this.Unknown_CCh = reader.ReadUInt32(); this.Unknown_D0h = reader.ReadUInt32(); this.Unknown_D4h = reader.ReadUInt32(); this.Unknown_D8h = reader.ReadUInt32(); this.Unknown_DCh = reader.ReadUInt32(); this.Unknown_E0h = reader.ReadUInt32(); this.Unknown_E4h = reader.ReadUInt32(); this.Unknown_E8h = reader.ReadUInt32(); this.Unknown_ECh = reader.ReadUInt32(); this.Unknown_F0h = reader.ReadUInt32(); this.Unknown_F4h = reader.ReadUInt32(); this.Unknown_F8h = reader.ReadUInt32(); this.Unknown_FCh = reader.ReadUInt32(); //this.Unknown_100h = reader.ReadBlock>(); //this.Unknown_110h = reader.ReadBlock>(); this.Unknown_100hPtr = reader.ReadStruct(); this.Unknown_110hPtr = reader.ReadStruct(); this.Unknown_100h = reader.ReadStructsAt(Unknown_100hPtr.EntriesPointer, Unknown_100hPtr.EntriesCount); this.Unknown_110h = reader.ReadStructsAt(Unknown_110hPtr.EntriesPointer, Unknown_110hPtr.EntriesCount); this.Unknown_120h = reader.ReadUInt32(); this.Unknown_124h = reader.ReadUInt32(); this.Unknown_128h = reader.ReadUInt32(); this.Unknown_12Ch = reader.ReadUInt32(); this.BehaviorPointer = reader.ReadUInt64(); this.Unknown_138h = reader.ReadUInt32(); this.Unknown_13Ch = reader.ReadUInt32(); this.Unknown_140h_Pointer = reader.ReadUInt64(); this.Unknown_148h = reader.ReadUInt32(); this.Unknown_14Ch = reader.ReadUInt32(); this.Unknown_150h = reader.ReadUInt32(); this.Unknown_154h = reader.ReadUInt32(); this.Unknown_158h = reader.ReadUInt32(); this.Unknown_15Ch = reader.ReadUInt32(); this.Unknown_160h = reader.ReadUInt32(); this.Unknown_164h = reader.ReadUInt32(); this.Unknown_168h = reader.ReadUInt32(); this.Unknown_16Ch = reader.ReadUInt32(); this.Unknown_170h = reader.ReadUInt32(); this.Unknown_174h = reader.ReadUInt32(); this.Unknown_178h = reader.ReadUInt32(); this.Unknown_17Ch = reader.ReadUInt32(); // read reference data this.Bounds = reader.ReadBlockAt( this.BoundsPointer // offset ); this.Behavior = reader.ReadBlockAt( this.BehaviorPointer // offset ); this.Unknown_140h_Data = reader.ReadBlockAt( this.Unknown_140h_Pointer // offset ); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data this.BoundsPointer = (ulong)(this.Bounds != null ? this.Bounds.FilePosition : 0); this.BehaviorPointer = (ulong)(this.Behavior != null ? this.Behavior.FilePosition : 0); this.Unknown_140h_Pointer = (ulong)(this.Unknown_140h_Data != null ? this.Unknown_140h_Data.FilePosition : 0); // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.BoundsPointer); writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.Write(this.Unknown_40h); writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); writer.Write(this.Unknown_60h); writer.Write(this.Unknown_64h); writer.Write(this.Unknown_68h); writer.Write(this.Unknown_6Ch); //writer.Write(this.Unknown_70h); //writer.Write(this.Unknown_74h); //writer.Write(this.Unknown_78h); //writer.Write(this.Unknown_7Ch); //writer.WriteBlock(this.Unknown_80h); //TODO: fix writer.Write(this.Unknown_90h); writer.Write(this.Unknown_94h); writer.Write(this.Unknown_98h); writer.Write(this.Unknown_9Ch); writer.Write(this.Unknown_A0h); writer.Write(this.Unknown_A4h); writer.Write(this.Unknown_A8h); writer.Write(this.Unknown_ACh); writer.Write(this.Unknown_B0h); writer.Write(this.Unknown_B4h); writer.Write(this.Unknown_B8h); writer.Write(this.Unknown_BCh); writer.Write(this.Unknown_C0h); writer.Write(this.Unknown_C4h); writer.Write(this.Unknown_C8h); writer.Write(this.Unknown_CCh); writer.Write(this.Unknown_D0h); writer.Write(this.Unknown_D4h); writer.Write(this.Unknown_D8h); writer.Write(this.Unknown_DCh); writer.Write(this.Unknown_E0h); writer.Write(this.Unknown_E4h); writer.Write(this.Unknown_E8h); writer.Write(this.Unknown_ECh); writer.Write(this.Unknown_F0h); writer.Write(this.Unknown_F4h); writer.Write(this.Unknown_F8h); writer.Write(this.Unknown_FCh); //writer.WriteBlock(this.Unknown_100h); //TODO: fix //writer.WriteBlock(this.Unknown_110h); writer.Write(this.Unknown_120h); writer.Write(this.Unknown_124h); writer.Write(this.Unknown_128h); writer.Write(this.Unknown_12Ch); writer.Write(this.BehaviorPointer); writer.Write(this.Unknown_138h); writer.Write(this.Unknown_13Ch); writer.Write(this.Unknown_140h_Pointer); writer.Write(this.Unknown_148h); writer.Write(this.Unknown_14Ch); writer.Write(this.Unknown_150h); writer.Write(this.Unknown_154h); writer.Write(this.Unknown_158h); writer.Write(this.Unknown_15Ch); writer.Write(this.Unknown_160h); writer.Write(this.Unknown_164h); writer.Write(this.Unknown_168h); writer.Write(this.Unknown_16Ch); writer.Write(this.Unknown_170h); writer.Write(this.Unknown_174h); writer.Write(this.Unknown_178h); writer.Write(this.Unknown_17Ch); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(); if (Bounds != null) list.Add(Bounds); if (Behavior != null) list.Add(Behavior); if (Unknown_140h_Data != null) list.Add(Unknown_140h_Data); return list.ToArray(); } public override Tuple[] GetParts() { return new Tuple[] { //new Tuple(0x80, Unknown_80h), //TODO: fix //new Tuple(0x100, Unknown_100h), //new Tuple(0x110, Unknown_110h) }; } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragClothVerletBehavior : ResourceSystemBlock { public override long BlockLength { get { return 64; } } // structure data public uint Unknown_00h { get; set; } // 0x00000000 public uint Unknown_04h { get; set; } // 0x00000000 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } // 0x00000000 public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 public uint Unknown_20h { get; set; } // 0x00000000 public uint Unknown_24h { get; set; } // 0x00000000 public uint Unknown_28h { get; set; } // 0x00000000 public uint Unknown_2Ch { get; set; } // 0x00000000 public uint Unknown_30h { get; set; } // 0x00000000 public uint Unknown_34h { get; set; } // 0x00000000 public uint Unknown_38h { get; set; } // 0x00000000 public uint Unknown_3Ch { get; set; } // 0x00000000 /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.Unknown_00h = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.Unknown_00h); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragClothUnknown_F_023 : ResourceSystemBlock { public override long BlockLength { get { return 16; } } // structure data public uint Unknown_0h { get; set; } // 0x00000000 public uint Unknown_4h { get; set; } // 0x00000000 public uint Unknown_8h { get; set; } // 0x00000000 public uint Unknown_Ch { get; set; } // 0x00000000 /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.Unknown_0h = reader.ReadUInt32(); this.Unknown_4h = reader.ReadUInt32(); this.Unknown_8h = reader.ReadUInt32(); this.Unknown_Ch = reader.ReadUInt32(); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.Unknown_0h); writer.Write(this.Unknown_4h); writer.Write(this.Unknown_8h); writer.Write(this.Unknown_Ch); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragDrawable : DrawableBase { public override long BlockLength { get { return 336; } } // structure data public uint Unknown_0A8h { get; set; } public uint Unknown_0ACh { get; set; } public Matrix Unknown_0B0h { get; set; } public ulong BoundPointer { get; set; } public ulong Unknown_0F8h_Pointer { get; set; } public ushort Count1 { get; set; } public ushort Count2 { get; set; } public uint Unknown_104h { get; set; } // 0x00000000 public ulong Unknown_108h_Pointer { get; set; } public ushort Count3 { get; set; } public ushort Count4 { get; set; } public uint Unknown_114h { get; set; } // 0x00000000 public uint Unknown_118h { get; set; } // 0x00000000 public uint Unknown_11Ch { get; set; } // 0x00000000 public uint Unknown_120h { get; set; } // 0x00000000 public uint Unknown_124h { get; set; } // 0x00000000 public uint Unknown_128h { get; set; } // 0x00000000 public uint Unknown_12Ch { get; set; } // 0x00000000 public ulong NamePointer { get; set; } public uint Unknown_138h { get; set; } // 0x00000000 public uint Unknown_13Ch { get; set; } // 0x00000000 public uint Unknown_140h { get; set; } // 0x00000000 public uint Unknown_144h { get; set; } // 0x00000000 public uint Unknown_148h { get; set; } // 0x00000000 public uint Unknown_14Ch { get; set; } // 0x00000000 // reference data public Bounds Bound { get; set; } //public ResourceSimpleArray Unknown_F8h_Data { get; set; } public ulong[] Unknown_F8h_Data { get; set; } //public ResourceSimpleArray Unknown_108h_Data { get; set; } public Matrix[] Unknown_108h_Data { get; set; } public string Name { get; set; } public FragType OwnerFragment { get; set; } //for handy use public FragCloth OwnerFragmentCloth { get; set; } public FragPhysTypeChild OwnerFragmentPhys { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { base.Read(reader, parameters); // read structure data this.Unknown_0A8h = reader.ReadUInt32(); this.Unknown_0ACh = reader.ReadUInt32(); this.Unknown_0B0h = reader.ReadStruct(); this.BoundPointer = reader.ReadUInt64(); this.Unknown_0F8h_Pointer = reader.ReadUInt64(); this.Count1 = reader.ReadUInt16(); this.Count2 = reader.ReadUInt16(); this.Unknown_104h = reader.ReadUInt32(); this.Unknown_108h_Pointer = reader.ReadUInt64(); this.Count3 = reader.ReadUInt16(); this.Count4 = reader.ReadUInt16(); this.Unknown_114h = reader.ReadUInt32(); this.Unknown_118h = reader.ReadUInt32(); this.Unknown_11Ch = reader.ReadUInt32(); this.Unknown_120h = reader.ReadUInt32(); this.Unknown_124h = reader.ReadUInt32(); this.Unknown_128h = reader.ReadUInt32(); this.Unknown_12Ch = reader.ReadUInt32(); this.NamePointer = reader.ReadUInt64(); this.Unknown_138h = reader.ReadUInt32(); this.Unknown_13Ch = reader.ReadUInt32(); this.Unknown_140h = reader.ReadUInt32(); this.Unknown_144h = reader.ReadUInt32(); this.Unknown_148h = reader.ReadUInt32(); this.Unknown_14Ch = reader.ReadUInt32(); // read reference data this.Bound = reader.ReadBlockAt( this.BoundPointer // offset ); //this.Unknown_F8h_Data = reader.ReadBlockAt>( // this.Unknown_F8h_Pointer, // offset // this.Count1 //); this.Unknown_F8h_Data = reader.ReadUlongsAt(this.Unknown_0F8h_Pointer, this.Count1); //this.Unknown_108h_Data = reader.ReadBlockAt>( // this.Unknown_108h_Pointer, // offset // this.Count2 //); this.Unknown_108h_Data = reader.ReadStructsAt(this.Unknown_108h_Pointer, this.Count2); this.Name = reader.ReadStringAt(//BlockAt( this.NamePointer // offset ); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { base.Write(writer, parameters); // update structure data this.BoundPointer = (ulong)(this.Bound != null ? this.Bound.FilePosition : 0); //this.Unknown_F8h_Pointer = (ulong)(this.Unknown_F8h_Data != null ? this.Unknown_F8h_Data.Position : 0); //TODO: fix //this.c1qqq = (ushort)(this.pxx2data != null ? this.pxx2data.Count : 0); //this.c2qqq = (ushort)(this.pxx3data != null ? this.pxx3data.Count : 0); //this.Unknown_108h_Pointer = (ulong)(this.Unknown_108h_Data != null ? this.Unknown_108h_Data.Position : 0); //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO: fix // write structure data writer.Write(this.Unknown_0A8h); writer.Write(this.Unknown_0ACh); //writer.WriteBlock(this.Unknown_0B0h); //TODO: fix! writer.Write(this.BoundPointer); writer.Write(this.Unknown_0F8h_Pointer); writer.Write(this.Count1); writer.Write(this.Count2); writer.Write(this.Unknown_104h); writer.Write(this.Unknown_108h_Pointer); writer.Write(this.Count3); writer.Write(this.Count4); writer.Write(this.Unknown_114h); writer.Write(this.Unknown_118h); writer.Write(this.Unknown_11Ch); writer.Write(this.Unknown_120h); writer.Write(this.Unknown_124h); writer.Write(this.Unknown_128h); writer.Write(this.Unknown_12Ch); writer.Write(this.NamePointer); writer.Write(this.Unknown_138h); writer.Write(this.Unknown_13Ch); writer.Write(this.Unknown_140h); writer.Write(this.Unknown_144h); writer.Write(this.Unknown_148h); writer.Write(this.Unknown_14Ch); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(base.GetReferences()); if (Bound != null) list.Add(Bound); //if (Unknown_F8h_Data != null) list.Add(Unknown_F8h_Data); //TODO: fix //if (Unknown_108h_Data != null) list.Add(Unknown_108h_Data); //if (Name != null) list.Add(Name); //TODO: fix return list.ToArray(); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragUnknown_F_004 : ResourceSystemBlock { public override long BlockLength { get { return 32 + Data.Length; } } // structure data public uint Unknown_00h { get; set; } // 0x00000000 public uint Unknown_04h { get; set; } // 0x00000000 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public byte cnt1 { get; set; } public byte cnt2 { get; set; } public ushort Unknown_12h { get; set; } public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 public Matrix3_s[] Data { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.Unknown_00h = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.cnt1 = reader.ReadByte(); this.cnt2 = reader.ReadByte(); this.Unknown_12h = reader.ReadUInt16(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); //this.Data = reader.ReadBlock>( // cnt1 // ); this.Data = reader.ReadStructsAt((ulong)reader.Position, cnt1); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.Unknown_00h); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.cnt1); writer.Write(this.cnt2); writer.Write(this.Unknown_12h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); //writer.WriteBlock(this.Data); //TODO: fix } public override Tuple[] GetParts() { return new Tuple[] { //new Tuple(32, Data) //TODO: FIX }; } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragUnknown_F_006 : ResourceSystemBlock { public override long BlockLength { get { return 112; } } // structure data public uint Unknown_00h { get; set; } public uint Unknown_04h { get; set; } public uint Unknown_08h { get; set; } public uint Unknown_0Ch { get; set; } // 0x7F800001 public uint Unknown_10h { get; set; } public uint Unknown_14h { get; set; } public uint Unknown_18h { get; set; } public uint Unknown_1Ch { get; set; } // 0x7F800001 public uint Unknown_20h { get; set; } public uint Unknown_24h { get; set; } public uint Unknown_28h { get; set; } public uint Unknown_2Ch { get; set; } // 0x7F800001 public uint Unknown_30h { get; set; } public uint Unknown_34h { get; set; } public uint Unknown_38h { get; set; } public uint Unknown_3Ch { get; set; } public uint Unknown_40h { get; set; } // 0x000000D9 public uint Unknown_44h { get; set; } // 0x0500002C public uint Unknown_48h { get; set; } // 0x55996996 looks like vertex types public uint Unknown_4Ch { get; set; } // 0x76555555 public uint Unknown_50h { get; set; } public uint Unknown_54h { get; set; } public uint Unknown_58h { get; set; } public uint Unknown_5Ch { get; set; } public uint Unknown_60h { get; set; } public uint Unknown_64h { get; set; } public uint Unknown_68h { get; set; } public uint Unknown_6Ch { get; set; } // 0x7F800001 /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.Unknown_00h = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); this.Unknown_40h = reader.ReadUInt32(); this.Unknown_44h = reader.ReadUInt32(); this.Unknown_48h = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); this.Unknown_60h = reader.ReadUInt32(); this.Unknown_64h = reader.ReadUInt32(); this.Unknown_68h = reader.ReadUInt32(); this.Unknown_6Ch = reader.ReadUInt32(); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.Unknown_00h); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.Write(this.Unknown_40h); writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); writer.Write(this.Unknown_60h); writer.Write(this.Unknown_64h); writer.Write(this.Unknown_68h); writer.Write(this.Unknown_6Ch); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragUnknown_F_003 : ResourceSystemBlock { public override long BlockLength { get { return 16 + Data.Length; } } // structure data public uint Unknown_0h { get; set; } // 0x56475748 public uint Unknown_4h { get; set; } public uint cnt1 { get; set; } public uint Unknown_Ch { get; set; } //public ResourceSimpleArray Data { get; set; } public byte[] Data { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.Unknown_0h = reader.ReadUInt32(); this.Unknown_4h = reader.ReadUInt32(); this.cnt1 = reader.ReadUInt32(); this.Unknown_Ch = reader.ReadUInt32(); //this.Data = reader.ReadBlock>( // cnt1 - 16 // ); this.Data = reader.ReadBytesAt((ulong)this.FilePosition, cnt1 - 16); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.Unknown_0h); writer.Write(this.Unknown_4h); writer.Write(this.cnt1); writer.Write(this.Unknown_Ch); //writer.WriteBlock(this.Data); //TODO: FIX!! } public override Tuple[] GetParts() { return new Tuple[] { //new Tuple(16, Data) }; } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysicsLODGroup : ResourceSystemBlock { public override long BlockLength { get { return 48; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public ulong PhysicsLOD1Pointer { get; set; } public ulong PhysicsLOD2Pointer { get; set; } public ulong PhysicsLOD3Pointer { get; set; } public uint Unknown_28h { get; set; } // 0x00000000 public uint Unknown_2Ch { get; set; } // 0x00000000 // reference data public FragPhysicsLOD PhysicsLOD1 { get; set; } public FragPhysicsLOD PhysicsLOD2 { get; set; } public FragPhysicsLOD PhysicsLOD3 { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.PhysicsLOD1Pointer = reader.ReadUInt64(); this.PhysicsLOD2Pointer = reader.ReadUInt64(); this.PhysicsLOD3Pointer = reader.ReadUInt64(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); // read reference data this.PhysicsLOD1 = reader.ReadBlockAt( this.PhysicsLOD1Pointer // offset ); this.PhysicsLOD2 = reader.ReadBlockAt( this.PhysicsLOD2Pointer // offset ); this.PhysicsLOD3 = reader.ReadBlockAt( this.PhysicsLOD3Pointer // offset ); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data this.PhysicsLOD1Pointer = (ulong)(this.PhysicsLOD1 != null ? this.PhysicsLOD1.FilePosition : 0); this.PhysicsLOD2Pointer = (ulong)(this.PhysicsLOD2 != null ? this.PhysicsLOD2.FilePosition : 0); this.PhysicsLOD3Pointer = (ulong)(this.PhysicsLOD3 != null ? this.PhysicsLOD3.FilePosition : 0); // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.PhysicsLOD1Pointer); writer.Write(this.PhysicsLOD2Pointer); writer.Write(this.PhysicsLOD3Pointer); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(); if (PhysicsLOD1 != null) list.Add(PhysicsLOD1); if (PhysicsLOD2 != null) list.Add(PhysicsLOD2); if (PhysicsLOD3 != null) list.Add(PhysicsLOD3); return list.ToArray(); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysicsLOD : ResourceSystemBlock { public override long BlockLength { get { return 304; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } // 0x00000000 public uint Unknown_14h { get; set; } public uint Unknown_18h { get; set; } public uint Unknown_1Ch { get; set; } public ulong ArticulatedBodyTypePointer { get; set; } public ulong Unknown_28h_Pointer { get; set; } public Vector4 Unknown_30h { get; set; } public Vector4 Unknown_40h { get; set; } public Vector4 Unknown_50h { get; set; } public Vector4 Unknown_60h { get; set; } public Vector4 Unknown_70h { get; set; } public Vector4 Unknown_80h { get; set; } public Vector4 Unknown_90h { get; set; } public Vector4 Unknown_A0h { get; set; } public Vector4 Unknown_B0h { get; set; } public ulong GroupNamesPointer { get; set; } public ulong GroupsPointer { get; set; } public ulong ChildrenPointer { get; set; } public ulong Archetype1Pointer { get; set; } public ulong Archetype2Pointer { get; set; } public ulong BoundPointer { get; set; } public ulong InertiaTensorsPointer { get; set; } public ulong Unknown_F8h_Pointer { get; set; } public ulong FragTransformsPointer { get; set; } public ulong Unknown_108h_Pointer { get; set; } public ulong Unknown_110h_Pointer { get; set; } public byte Count1 { get; set; } public byte Count2 { get; set; } public byte GroupsCount { get; set; } public byte Unknown_11Bh { get; set; } public byte Unknown_11Ch { get; set; } public byte ChildrenCount { get; set; } public byte Count3 { get; set; } public byte Unknown_11Fh { get; set; } // 0x00 public uint Unknown_120h { get; set; } // 0x00000000 public uint Unknown_124h { get; set; } // 0x00000000 public uint Unknown_128h { get; set; } // 0x00000000 public uint Unknown_12Ch { get; set; } // 0x00000000 // reference data public FragPhysArticulatedBodyType ArticulatedBodyType { get; set; } public uint[] Unknown_28h_Data { get; set; } public ResourcePointerArray64_s GroupNames { get; set; } public ResourcePointerArray64_s Groups { get; set; } public ResourcePointerArray64 Children { get; set; } public FragPhysArchetype Archetype1 { get; set; } public FragPhysArchetype Archetype2 { get; set; } public Bounds Bound { get; set; } public Vector4[] InertiaTensors { get; set; } public Vector4[] Unknown_F8h_Data { get; set; } public FragPhysUnknown_F_002 FragTransforms { get; set; } public byte[] Unknown_108h_Data { get; set; } public byte[] Unknown_110h_Data { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); this.ArticulatedBodyTypePointer = reader.ReadUInt64(); this.Unknown_28h_Pointer = reader.ReadUInt64(); this.Unknown_30h = reader.ReadStruct(); this.Unknown_40h = reader.ReadStruct(); this.Unknown_50h = reader.ReadStruct(); this.Unknown_60h = reader.ReadStruct(); this.Unknown_70h = reader.ReadStruct(); this.Unknown_80h = reader.ReadStruct(); this.Unknown_90h = reader.ReadStruct(); this.Unknown_A0h = reader.ReadStruct(); this.Unknown_B0h = reader.ReadStruct(); this.GroupNamesPointer = reader.ReadUInt64(); this.GroupsPointer = reader.ReadUInt64(); this.ChildrenPointer = reader.ReadUInt64(); this.Archetype1Pointer = reader.ReadUInt64(); this.Archetype2Pointer = reader.ReadUInt64(); this.BoundPointer = reader.ReadUInt64(); this.InertiaTensorsPointer = reader.ReadUInt64(); this.Unknown_F8h_Pointer = reader.ReadUInt64(); this.FragTransformsPointer = reader.ReadUInt64(); this.Unknown_108h_Pointer = reader.ReadUInt64(); this.Unknown_110h_Pointer = reader.ReadUInt64(); this.Count1 = reader.ReadByte(); this.Count2 = reader.ReadByte(); this.GroupsCount = reader.ReadByte(); this.Unknown_11Bh = reader.ReadByte(); this.Unknown_11Ch = reader.ReadByte(); this.ChildrenCount = reader.ReadByte(); this.Count3 = reader.ReadByte(); this.Unknown_11Fh = reader.ReadByte(); this.Unknown_120h = reader.ReadUInt32(); this.Unknown_124h = reader.ReadUInt32(); this.Unknown_128h = reader.ReadUInt32(); this.Unknown_12Ch = reader.ReadUInt32(); // read reference data this.ArticulatedBodyType = reader.ReadBlockAt( this.ArticulatedBodyTypePointer // offset ); //this.Unknown_28h_Data = reader.ReadBlockAt>( // this.Unknown_28h_Pointer, // offset // this.ChildrenCount //); this.Unknown_28h_Data = reader.ReadUintsAt(this.Unknown_28h_Pointer, this.ChildrenCount); this.GroupNames = reader.ReadBlockAt>( this.GroupNamesPointer, // offset this.GroupsCount ); this.Groups = reader.ReadBlockAt>( this.GroupsPointer, // offset this.GroupsCount ); this.Children = reader.ReadBlockAt>( this.ChildrenPointer, // offset this.ChildrenCount ); this.Archetype1 = reader.ReadBlockAt( this.Archetype1Pointer // offset ); this.Archetype2 = reader.ReadBlockAt( this.Archetype2Pointer // offset ); this.Bound = reader.ReadBlockAt( this.BoundPointer // offset ); //this.Unknown_F0h_Data = reader.ReadBlockAt>( // this.Unknown_F0h_Pointer, // offset // this.ChildrenCount //); //this.Unknown_F8h_Data = reader.ReadBlockAt>( // this.Unknown_F8h_Pointer, // offset // this.ChildrenCount //); this.InertiaTensors = reader.ReadStructsAt(this.InertiaTensorsPointer, this.ChildrenCount); this.Unknown_F8h_Data = reader.ReadStructsAt(this.Unknown_F8h_Pointer, this.ChildrenCount); this.FragTransforms = reader.ReadBlockAt( this.FragTransformsPointer // offset ); //this.Unknown_108h_Data = reader.ReadBlockAt>( // this.Unknown_108h_Pointer, // offset // this.Count1 //); //this.Unknown_110h_Data = reader.ReadBlockAt>( // this.Unknown_110h_Pointer, // offset // this.Count2 //); this.Unknown_108h_Data = reader.ReadBytesAt(this.Unknown_108h_Pointer, this.Count1); this.Unknown_110h_Data = reader.ReadBytesAt(this.Unknown_110h_Pointer, this.Count2); if ((Children != null) && (Children.data_items != null)) { for (int i = 0; i < Children.data_items.Length; i++) { var child = Children.data_items[i]; var gi = child.GroupIndex; child.OwnerFragPhysLod = this; child.OwnerFragPhysIndex = i; if ((Groups?.data_items != null) && (gi < Groups.data_items.Length)) { var group = Groups.data_items[gi]; var str = group.Name.ToString().ToLowerInvariant(); JenkIndex.Ensure(str); child.GroupNameHash = JenkHash.GenHash(str); } } } } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data this.ArticulatedBodyTypePointer = (ulong)(this.ArticulatedBodyType != null ? this.ArticulatedBodyType.FilePosition : 0); //this.Unknown_28h_Pointer = (ulong)(this.Unknown_28h_Data != null ? this.Unknown_28h_Data.Position : 0); //TODO: fix this.GroupNamesPointer = (ulong)(this.GroupNames != null ? this.GroupNames.FilePosition : 0); this.GroupsPointer = (ulong)(this.Groups != null ? this.Groups.FilePosition : 0); this.ChildrenPointer = (ulong)(this.Children != null ? this.Children.FilePosition : 0); this.Archetype1Pointer = (ulong)(this.Archetype1 != null ? this.Archetype1.FilePosition : 0); this.Archetype2Pointer = (ulong)(this.Archetype2 != null ? this.Archetype2.FilePosition : 0); this.BoundPointer = (ulong)(this.Bound != null ? this.Bound.FilePosition : 0); //this.Unknown_F0h_Pointer = (ulong)(this.Unknown_F0h_Data != null ? this.Unknown_F0h_Data.Position : 0); //this.Unknown_F8h_Pointer = (ulong)(this.Unknown_F8h_Data != null ? this.Unknown_F8h_Data.Position : 0); this.FragTransformsPointer = (ulong)(this.FragTransforms != null ? this.FragTransforms.FilePosition : 0); //this.Unknown_108h_Pointer = (ulong)(this.Unknown_108h_Data != null ? this.Unknown_108h_Data.Position : 0); //this.Unknown_110h_Pointer = (ulong)(this.Unknown_110h_Data != null ? this.Unknown_110h_Data.Position : 0); //this.vvv1 = (byte)(this.pxxxxx_2data != null ? this.pxxxxx_2data.Count : 0); //this.vvv2 = (byte)(this.pxxxxx_3data != null ? this.pxxxxx_3data.Count : 0); //this.GroupsCount = (byte)(this.Groups != null ? this.Groups.Count : 0); //this.ChildrenCount = (byte)(this.p1data != null ? this.p1data.Count : 0); // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); writer.Write(this.ArticulatedBodyTypePointer); writer.Write(this.Unknown_28h_Pointer); //writer.WriteBlock(this.Unknown_30h); //TODO: fix this! //writer.WriteBlock(this.Unknown_40h); //writer.WriteBlock(this.Unknown_50h); //writer.WriteBlock(this.Unknown_60h); //writer.WriteBlock(this.Unknown_70h); //writer.WriteBlock(this.Unknown_80h); //writer.WriteBlock(this.Unknown_90h); //writer.WriteBlock(this.Unknown_A0h); //writer.WriteBlock(this.Unknown_B0h); writer.Write(this.GroupNamesPointer); writer.Write(this.GroupsPointer); writer.Write(this.ChildrenPointer); writer.Write(this.Archetype1Pointer); writer.Write(this.Archetype2Pointer); writer.Write(this.BoundPointer); writer.Write(this.InertiaTensorsPointer); writer.Write(this.Unknown_F8h_Pointer); writer.Write(this.FragTransformsPointer); writer.Write(this.Unknown_108h_Pointer); writer.Write(this.Unknown_110h_Pointer); writer.Write(this.Count1); writer.Write(this.Count2); writer.Write(this.GroupsCount); writer.Write(this.Unknown_11Bh); writer.Write(this.Unknown_11Ch); writer.Write(this.ChildrenCount); writer.Write(this.Count3); writer.Write(this.Unknown_11Fh); writer.Write(this.Unknown_120h); writer.Write(this.Unknown_124h); writer.Write(this.Unknown_128h); writer.Write(this.Unknown_12Ch); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(); if (ArticulatedBodyType != null) list.Add(ArticulatedBodyType); //if (Unknown_28h_Data != null) list.Add(Unknown_28h_Data); //TODO: fix if (Groups != null) list.Add(Groups); if (Children != null) list.Add(Children); if (Archetype1 != null) list.Add(Archetype1); if (Archetype2 != null) list.Add(Archetype2); if (Bound != null) list.Add(Bound); //if (Unknown_F0h_Data != null) list.Add(Unknown_F0h_Data); //if (Unknown_F8h_Data != null) list.Add(Unknown_F8h_Data); if (FragTransforms != null) list.Add(FragTransforms); //if (Unknown_108h_Data != null) list.Add(Unknown_108h_Data); //if (Unknown_110h_Data != null) list.Add(Unknown_110h_Data); if (GroupNames != null) list.Add(GroupNames); return list.ToArray(); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysArticulatedBodyType : ResourceSystemBlock { public override long BlockLength { get { return 176; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } public uint Unknown_14h { get; set; } public uint Unknown_18h { get; set; } public uint Unknown_1Ch { get; set; } public uint Unknown_20h { get; set; } public uint Unknown_24h { get; set; } public uint Unknown_28h { get; set; } public uint Unknown_2Ch { get; set; } public uint Unknown_30h { get; set; } public uint Unknown_34h { get; set; } public uint Unknown_38h { get; set; } public uint Unknown_3Ch { get; set; } public uint Unknown_40h { get; set; } public uint Unknown_44h { get; set; } public uint Unknown_48h { get; set; } public uint Unknown_4Ch { get; set; } public uint Unknown_50h { get; set; } public uint Unknown_54h { get; set; } public uint Unknown_58h { get; set; } public uint Unknown_5Ch { get; set; } public uint Unknown_60h { get; set; } public uint Unknown_64h { get; set; } public uint Unknown_68h { get; set; } public uint Unknown_6Ch { get; set; } public uint Unknown_70h { get; set; } public uint Unknown_74h { get; set; } public ulong JointTypesPointer { get; set; } public ulong p2 { get; set; } public byte c1 { get; set; } public byte JointTypesCount { get; set; } public ushort Unknown_8Ah { get; set; } public uint Unknown_8Ch { get; set; } public uint Unknown_90h { get; set; } public uint Unknown_94h { get; set; } public uint Unknown_98h { get; set; } public uint Unknown_9Ch { get; set; } public uint Unknown_A0h { get; set; } public uint Unknown_A4h { get; set; } public uint Unknown_A8h { get; set; } public uint Unknown_ACh { get; set; } // reference data public ResourcePointerArray64 JointTypes { get; set; } public Vector4[] p2data { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); this.Unknown_40h = reader.ReadUInt32(); this.Unknown_44h = reader.ReadUInt32(); this.Unknown_48h = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); this.Unknown_60h = reader.ReadUInt32(); this.Unknown_64h = reader.ReadUInt32(); this.Unknown_68h = reader.ReadUInt32(); this.Unknown_6Ch = reader.ReadUInt32(); this.Unknown_70h = reader.ReadUInt32(); this.Unknown_74h = reader.ReadUInt32(); this.JointTypesPointer = reader.ReadUInt64(); this.p2 = reader.ReadUInt64(); this.c1 = reader.ReadByte(); this.JointTypesCount = reader.ReadByte(); this.Unknown_8Ah = reader.ReadUInt16(); this.Unknown_8Ch = reader.ReadUInt32(); this.Unknown_90h = reader.ReadUInt32(); this.Unknown_94h = reader.ReadUInt32(); this.Unknown_98h = reader.ReadUInt32(); this.Unknown_9Ch = reader.ReadUInt32(); this.Unknown_A0h = reader.ReadUInt32(); this.Unknown_A4h = reader.ReadUInt32(); this.Unknown_A8h = reader.ReadUInt32(); this.Unknown_ACh = reader.ReadUInt32(); // read reference data this.JointTypes = reader.ReadBlockAt>( this.JointTypesPointer, // offset this.JointTypesCount ); //this.p2data = reader.ReadBlockAt>( // this.p2, // offset // this.c1 //); this.p2data = reader.ReadStructsAt(this.p2, this.c1); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data this.JointTypesPointer = (ulong)(this.JointTypes != null ? this.JointTypes.FilePosition : 0); //this.p2 = (ulong)(this.p2data != null ? this.p2data.Position : 0); //TODO:fix ////this.c1 = (byte)(this.p2data != null ? this.p2data.Count : 0); ////this.c2 = (byte)(this.p1data != null ? this.p1data.Count : 0); // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.Write(this.Unknown_40h); writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); writer.Write(this.Unknown_60h); writer.Write(this.Unknown_64h); writer.Write(this.Unknown_68h); writer.Write(this.Unknown_6Ch); writer.Write(this.Unknown_70h); writer.Write(this.Unknown_74h); writer.Write(this.JointTypesPointer); writer.Write(this.p2); writer.Write(this.c1); writer.Write(this.JointTypesCount); writer.Write(this.Unknown_8Ah); writer.Write(this.Unknown_8Ch); writer.Write(this.Unknown_90h); writer.Write(this.Unknown_94h); writer.Write(this.Unknown_98h); writer.Write(this.Unknown_9Ch); writer.Write(this.Unknown_A0h); writer.Write(this.Unknown_A4h); writer.Write(this.Unknown_A8h); writer.Write(this.Unknown_ACh); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(); if (JointTypes != null) list.Add(JointTypes); //if (p2data != null) list.Add(p2data); //TODO: fix return list.ToArray(); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysJointType : ResourceSystemBlock, IResourceXXSystemBlock { public override long BlockLength { get { return 32; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } // 0x00000000 public byte Unknown_14h { get; set; } // 0x3F533333 public byte Type { get; set; } public ushort Unknown_16h { get; set; } public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadByte(); this.Type = reader.ReadByte(); this.Unknown_16h = reader.ReadUInt16(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Type); writer.Write(this.Unknown_16h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); } public IResourceSystemBlock GetType(ResourceDataReader reader, params object[] parameters) { reader.Position += 21; var type = reader.ReadByte(); reader.Position -= 22; switch (type) { case 0: return new FragPhysJoint1DofType(); case 1: return new FragPhysJoint3DofType(); default: return null;// throw new Exception("Unknown type"); } } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysJoint1DofType : FragPhysJointType { public override long BlockLength { get { return 176; } } // structure data public uint Unknown_20h { get; set; } public uint Unknown_24h { get; set; } public uint Unknown_28h { get; set; } public uint Unknown_2Ch { get; set; } public uint Unknown_30h { get; set; } public uint Unknown_34h { get; set; } public uint Unknown_38h { get; set; } public uint Unknown_3Ch { get; set; } public uint Unknown_40h { get; set; } public uint Unknown_44h { get; set; } public uint Unknown_48h { get; set; } public uint Unknown_4Ch { get; set; } public uint Unknown_50h { get; set; } public uint Unknown_54h { get; set; } public uint Unknown_58h { get; set; } public uint Unknown_5Ch { get; set; } public uint Unknown_60h { get; set; } public uint Unknown_64h { get; set; } public uint Unknown_68h { get; set; } public uint Unknown_6Ch { get; set; } public uint Unknown_70h { get; set; } public uint Unknown_74h { get; set; } public uint Unknown_78h { get; set; } public uint Unknown_7Ch { get; set; } public uint Unknown_80h { get; set; } public uint Unknown_84h { get; set; } public uint Unknown_88h { get; set; } public uint Unknown_8Ch { get; set; } public uint Unknown_90h { get; set; } public uint Unknown_94h { get; set; } public uint Unknown_98h { get; set; } public uint Unknown_9Ch { get; set; } public uint Unknown_A0h { get; set; } public uint Unknown_A4h { get; set; } public uint Unknown_A8h { get; set; } // 0x4CBEBC20 public uint Unknown_ACh { get; set; } // 0xCCBEBC20 /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { base.Read(reader, parameters); // read structure data this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); this.Unknown_40h = reader.ReadUInt32(); this.Unknown_44h = reader.ReadUInt32(); this.Unknown_48h = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); this.Unknown_60h = reader.ReadUInt32(); this.Unknown_64h = reader.ReadUInt32(); this.Unknown_68h = reader.ReadUInt32(); this.Unknown_6Ch = reader.ReadUInt32(); this.Unknown_70h = reader.ReadUInt32(); this.Unknown_74h = reader.ReadUInt32(); this.Unknown_78h = reader.ReadUInt32(); this.Unknown_7Ch = reader.ReadUInt32(); this.Unknown_80h = reader.ReadUInt32(); this.Unknown_84h = reader.ReadUInt32(); this.Unknown_88h = reader.ReadUInt32(); this.Unknown_8Ch = reader.ReadUInt32(); this.Unknown_90h = reader.ReadUInt32(); this.Unknown_94h = reader.ReadUInt32(); this.Unknown_98h = reader.ReadUInt32(); this.Unknown_9Ch = reader.ReadUInt32(); this.Unknown_A0h = reader.ReadUInt32(); this.Unknown_A4h = reader.ReadUInt32(); this.Unknown_A8h = reader.ReadUInt32(); this.Unknown_ACh = reader.ReadUInt32(); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { base.Write(writer, parameters); // write structure data writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.Write(this.Unknown_40h); writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); writer.Write(this.Unknown_60h); writer.Write(this.Unknown_64h); writer.Write(this.Unknown_68h); writer.Write(this.Unknown_6Ch); writer.Write(this.Unknown_70h); writer.Write(this.Unknown_74h); writer.Write(this.Unknown_78h); writer.Write(this.Unknown_7Ch); writer.Write(this.Unknown_80h); writer.Write(this.Unknown_84h); writer.Write(this.Unknown_88h); writer.Write(this.Unknown_8Ch); writer.Write(this.Unknown_90h); writer.Write(this.Unknown_94h); writer.Write(this.Unknown_98h); writer.Write(this.Unknown_9Ch); writer.Write(this.Unknown_A0h); writer.Write(this.Unknown_A4h); writer.Write(this.Unknown_A8h); writer.Write(this.Unknown_ACh); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysJoint3DofType : FragPhysJointType { public override long BlockLength { get { return 240; } } // structure data public uint Unknown_20h { get; set; } public uint Unknown_24h { get; set; } public uint Unknown_28h { get; set; } public uint Unknown_2Ch { get; set; } public uint Unknown_30h { get; set; } public uint Unknown_34h { get; set; } public uint Unknown_38h { get; set; } public uint Unknown_3Ch { get; set; } public uint Unknown_40h { get; set; } public uint Unknown_44h { get; set; } public uint Unknown_48h { get; set; } public uint Unknown_4Ch { get; set; } public uint Unknown_50h { get; set; } public uint Unknown_54h { get; set; } public uint Unknown_58h { get; set; } public uint Unknown_5Ch { get; set; } public uint Unknown_60h { get; set; } public uint Unknown_64h { get; set; } public uint Unknown_68h { get; set; } public uint Unknown_6Ch { get; set; } public uint Unknown_70h { get; set; } public uint Unknown_74h { get; set; } public uint Unknown_78h { get; set; } public uint Unknown_7Ch { get; set; } public uint Unknown_80h { get; set; } public uint Unknown_84h { get; set; } public uint Unknown_88h { get; set; } public uint Unknown_8Ch { get; set; } public uint Unknown_90h { get; set; } public uint Unknown_94h { get; set; } public uint Unknown_98h { get; set; } public uint Unknown_9Ch { get; set; } public uint Unknown_A0h { get; set; } public uint Unknown_A4h { get; set; } public uint Unknown_A8h { get; set; } public uint Unknown_ACh { get; set; } // 0x00000000 public uint Unknown_B0h { get; set; } // 0x00000000 public uint Unknown_B4h { get; set; } // 0x00000000 public uint Unknown_B8h { get; set; } // 0x00000000 public uint Unknown_BCh { get; set; } // 0x00000000 public uint Unknown_C0h { get; set; } // 0x4CBEBC20 public uint Unknown_C4h { get; set; } // 0x4CBEBC20 public uint Unknown_C8h { get; set; } // 0x4CBEBC20 public uint Unknown_CCh { get; set; } // 0x4CBEBC20 public uint Unknown_D0h { get; set; } // 0xCCBEBC20 public uint Unknown_D4h { get; set; } // 0xCCBEBC20 public uint Unknown_D8h { get; set; } // 0xCCBEBC20 public uint Unknown_DCh { get; set; } // 0xCCBEBC20 public uint Unknown_E0h { get; set; } // 0x00000000 public uint Unknown_E4h { get; set; } // 0x00000000 public uint Unknown_E8h { get; set; } // 0x00000000 public uint Unknown_ECh { get; set; } // 0x00000000 /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { base.Read(reader, parameters); // read structure data this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); this.Unknown_40h = reader.ReadUInt32(); this.Unknown_44h = reader.ReadUInt32(); this.Unknown_48h = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); this.Unknown_60h = reader.ReadUInt32(); this.Unknown_64h = reader.ReadUInt32(); this.Unknown_68h = reader.ReadUInt32(); this.Unknown_6Ch = reader.ReadUInt32(); this.Unknown_70h = reader.ReadUInt32(); this.Unknown_74h = reader.ReadUInt32(); this.Unknown_78h = reader.ReadUInt32(); this.Unknown_7Ch = reader.ReadUInt32(); this.Unknown_80h = reader.ReadUInt32(); this.Unknown_84h = reader.ReadUInt32(); this.Unknown_88h = reader.ReadUInt32(); this.Unknown_8Ch = reader.ReadUInt32(); this.Unknown_90h = reader.ReadUInt32(); this.Unknown_94h = reader.ReadUInt32(); this.Unknown_98h = reader.ReadUInt32(); this.Unknown_9Ch = reader.ReadUInt32(); this.Unknown_A0h = reader.ReadUInt32(); this.Unknown_A4h = reader.ReadUInt32(); this.Unknown_A8h = reader.ReadUInt32(); this.Unknown_ACh = reader.ReadUInt32(); this.Unknown_B0h = reader.ReadUInt32(); this.Unknown_B4h = reader.ReadUInt32(); this.Unknown_B8h = reader.ReadUInt32(); this.Unknown_BCh = reader.ReadUInt32(); this.Unknown_C0h = reader.ReadUInt32(); this.Unknown_C4h = reader.ReadUInt32(); this.Unknown_C8h = reader.ReadUInt32(); this.Unknown_CCh = reader.ReadUInt32(); this.Unknown_D0h = reader.ReadUInt32(); this.Unknown_D4h = reader.ReadUInt32(); this.Unknown_D8h = reader.ReadUInt32(); this.Unknown_DCh = reader.ReadUInt32(); this.Unknown_E0h = reader.ReadUInt32(); this.Unknown_E4h = reader.ReadUInt32(); this.Unknown_E8h = reader.ReadUInt32(); this.Unknown_ECh = reader.ReadUInt32(); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { base.Write(writer, parameters); // write structure data writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.Write(this.Unknown_40h); writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); writer.Write(this.Unknown_60h); writer.Write(this.Unknown_64h); writer.Write(this.Unknown_68h); writer.Write(this.Unknown_6Ch); writer.Write(this.Unknown_70h); writer.Write(this.Unknown_74h); writer.Write(this.Unknown_78h); writer.Write(this.Unknown_7Ch); writer.Write(this.Unknown_80h); writer.Write(this.Unknown_84h); writer.Write(this.Unknown_88h); writer.Write(this.Unknown_8Ch); writer.Write(this.Unknown_90h); writer.Write(this.Unknown_94h); writer.Write(this.Unknown_98h); writer.Write(this.Unknown_9Ch); writer.Write(this.Unknown_A0h); writer.Write(this.Unknown_A4h); writer.Write(this.Unknown_A8h); writer.Write(this.Unknown_ACh); writer.Write(this.Unknown_B0h); writer.Write(this.Unknown_B4h); writer.Write(this.Unknown_B8h); writer.Write(this.Unknown_BCh); writer.Write(this.Unknown_C0h); writer.Write(this.Unknown_C4h); writer.Write(this.Unknown_C8h); writer.Write(this.Unknown_CCh); writer.Write(this.Unknown_D0h); writer.Write(this.Unknown_D4h); writer.Write(this.Unknown_D8h); writer.Write(this.Unknown_DCh); writer.Write(this.Unknown_E0h); writer.Write(this.Unknown_E4h); writer.Write(this.Unknown_E8h); writer.Write(this.Unknown_ECh); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysUnknown_F_002 : ResourceSystemBlock { public override long BlockLength { get { return 32 + Data.Length; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint cnt { get; set; } public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 //public ResourceSimpleArray Data { get; set; } public Matrix[] Data { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.cnt = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); //this.Data = reader.ReadBlock>( // cnt // ); this.Data = reader.ReadStructsAt((ulong)reader.Position, cnt); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.cnt); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); //writer.WriteBlock(this.Data); //TODO: fix } public override Tuple[] GetParts() { return new Tuple[] { //new Tuple(32, Data) //TODO: fix }; } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysArchetype : ResourceSystemBlock { public override long BlockLength { get { return 224; } } // structure data public float Unknown_00h { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } // 0x00000002 public uint Unknown_14h { get; set; } // 0x00000000 public ulong NamePointer { get; set; } public ulong BoundPointer { get; set; } public uint Unknown_28h { get; set; } // 0x00000001 public uint Unknown_2Ch { get; set; } // 0xFFFFFFFF public uint Unknown_30h { get; set; } // 0x00010000 public uint Unknown_34h { get; set; } // 0x00000000 public uint Unknown_38h { get; set; } // 0x00000000 public uint Unknown_3Ch { get; set; } // 0x00000000 public float Unknown_40h { get; set; } public float Unknown_44h { get; set; } public float Unknown_48h { get; set; } // 1.0f public float Unknown_4Ch { get; set; } // 150.0f public float Unknown_50h { get; set; } // 6.2831855f = 2*pi public float Unknown_54h { get; set; } // 1.0f public uint Unknown_58h { get; set; } // 0x00000000 public uint Unknown_5Ch { get; set; } // 0x00000000 public Vector4 Unknown_60h { get; set; } public Vector4 Unknown_70h { get; set; } public Vector4 Unknown_80h { get; set; } // 0.0 0.0 0.0 NaN public Vector4 Unknown_90h { get; set; } // 0.0 0.0 0.0 NaN public Vector4 Unknown_A0h { get; set; } // 0.0 0.0 0.0 NaN public Vector4 Unknown_B0h { get; set; } // 0.0 0.0 0.0 NaN public Vector4 Unknown_C0h { get; set; } // 0.0 0.0 0.0 NaN public Vector4 Unknown_D0h { get; set; } // 0.0 0.0 0.0 NaN // reference data public string Name { get; set; } public Bounds Bound { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.Unknown_00h = reader.ReadSingle(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.NamePointer = reader.ReadUInt64(); this.BoundPointer = reader.ReadUInt64(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); this.Unknown_40h = reader.ReadSingle(); this.Unknown_44h = reader.ReadSingle(); this.Unknown_48h = reader.ReadSingle(); this.Unknown_4Ch = reader.ReadSingle(); this.Unknown_50h = reader.ReadSingle(); this.Unknown_54h = reader.ReadSingle(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); this.Unknown_60h = reader.ReadStruct(); this.Unknown_70h = reader.ReadStruct(); this.Unknown_80h = reader.ReadStruct(); this.Unknown_90h = reader.ReadStruct(); this.Unknown_A0h = reader.ReadStruct(); this.Unknown_B0h = reader.ReadStruct(); this.Unknown_C0h = reader.ReadStruct(); this.Unknown_D0h = reader.ReadStruct(); // read reference data this.Name = reader.ReadStringAt(//BlockAt( this.NamePointer // offset ); this.Bound = reader.ReadBlockAt( this.BoundPointer // offset ); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO:fix this.BoundPointer = (ulong)(this.Bound != null ? this.Bound.FilePosition : 0); // write structure data writer.Write(this.Unknown_00h); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.NamePointer); writer.Write(this.BoundPointer); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.Write(this.Unknown_40h); writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); //writer.WriteBlock(this.Unknown_60h); //TODO: fix! //writer.WriteBlock(this.Unknown_70h); //writer.WriteBlock(this.Unknown_80h); //writer.WriteBlock(this.Unknown_90h); //writer.WriteBlock(this.Unknown_A0h); //writer.WriteBlock(this.Unknown_B0h); //writer.WriteBlock(this.Unknown_C0h); //writer.WriteBlock(this.Unknown_D0h); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(); //if (Name != null) list.Add(Name); //TODO: fix! if (Bound != null) list.Add(Bound); return list.ToArray(); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysTypeChild : ResourceSystemBlock { public override long BlockLength { get { return 256; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public float Unknown_08h { get; set; } public float Unknown_0Ch { get; set; } public ushort GroupIndex { get; set; } public ushort BoneTag { get; set; } public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 public uint Unknown_20h { get; set; } // 0x00000000 public uint Unknown_24h { get; set; } // 0x00000000 public uint Unknown_28h { get; set; } // 0x00000000 public uint Unknown_2Ch { get; set; } // 0x00000000 public uint Unknown_30h { get; set; } // 0x00000000 public uint Unknown_34h { get; set; } // 0x00000000 public uint Unknown_38h { get; set; } // 0x00000000 public uint Unknown_3Ch { get; set; } // 0x00000000 public uint Unknown_40h { get; set; } // 0x00000000 public uint Unknown_44h { get; set; } // 0x00000000 public uint Unknown_48h { get; set; } // 0x00000000 public uint Unknown_4Ch { get; set; } // 0x00000000 public uint Unknown_50h { get; set; } // 0x00000000 public uint Unknown_54h { get; set; } // 0x00000000 public uint Unknown_58h { get; set; } // 0x00000000 public uint Unknown_5Ch { get; set; } // 0x00000000 public uint Unknown_60h { get; set; } // 0x00000000 public uint Unknown_64h { get; set; } // 0x00000000 public uint Unknown_68h { get; set; } // 0x00000000 public uint Unknown_6Ch { get; set; } // 0x00000000 public uint Unknown_70h { get; set; } // 0x00000000 public uint Unknown_74h { get; set; } // 0x00000000 public uint Unknown_78h { get; set; } // 0x00000000 public uint Unknown_7Ch { get; set; } // 0x00000000 public uint Unknown_80h { get; set; } // 0x00000000 public uint Unknown_84h { get; set; } // 0x00000000 public uint Unknown_88h { get; set; } // 0x00000000 public uint Unknown_8Ch { get; set; } // 0x00000000 public uint Unknown_90h { get; set; } // 0x00000000 public uint Unknown_94h { get; set; } // 0x00000000 public uint Unknown_98h { get; set; } // 0x00000000 public uint Unknown_9Ch { get; set; } // 0x00000000 public ulong Drawable1Pointer { get; set; } public ulong Drawable2Pointer { get; set; } public ulong EvtSetPointer { get; set; } public uint Unknown_B8h { get; set; } // 0x00000000 public uint Unknown_BCh { get; set; } // 0x00000000 public uint Unknown_C0h { get; set; } // 0x00000000 public uint Unknown_C4h { get; set; } // 0x00000000 public uint Unknown_C8h { get; set; } // 0x00000000 public uint Unknown_CCh { get; set; } // 0x00000000 public uint Unknown_D0h { get; set; } // 0x00000000 public uint Unknown_D4h { get; set; } // 0x00000000 public uint Unknown_D8h { get; set; } // 0x00000000 public uint Unknown_DCh { get; set; } // 0x00000000 public uint Unknown_E0h { get; set; } // 0x00000000 public uint Unknown_E4h { get; set; } // 0x00000000 public uint Unknown_E8h { get; set; } // 0x00000000 public uint Unknown_ECh { get; set; } // 0x00000000 public uint Unknown_F0h { get; set; } // 0x00000000 public uint Unknown_F4h { get; set; } // 0x00000000 public uint Unknown_F8h { get; set; } // 0x00000000 public uint Unknown_FCh { get; set; } // 0x00000000 // reference data public FragDrawable Drawable1 { get; set; } public FragDrawable Drawable2 { get; set; } public FragPhysEvtSet EvtSet { get; set; } public FragPhysicsLOD OwnerFragPhysLod { get; set; } public int OwnerFragPhysIndex { get; set; } public MetaHash GroupNameHash { get; set; } /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadSingle(); this.Unknown_0Ch = reader.ReadSingle(); this.GroupIndex = reader.ReadUInt16(); this.BoneTag = reader.ReadUInt16(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); this.Unknown_30h = reader.ReadUInt32(); this.Unknown_34h = reader.ReadUInt32(); this.Unknown_38h = reader.ReadUInt32(); this.Unknown_3Ch = reader.ReadUInt32(); this.Unknown_40h = reader.ReadUInt32(); this.Unknown_44h = reader.ReadUInt32(); this.Unknown_48h = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); this.Unknown_60h = reader.ReadUInt32(); this.Unknown_64h = reader.ReadUInt32(); this.Unknown_68h = reader.ReadUInt32(); this.Unknown_6Ch = reader.ReadUInt32(); this.Unknown_70h = reader.ReadUInt32(); this.Unknown_74h = reader.ReadUInt32(); this.Unknown_78h = reader.ReadUInt32(); this.Unknown_7Ch = reader.ReadUInt32(); this.Unknown_80h = reader.ReadUInt32(); this.Unknown_84h = reader.ReadUInt32(); this.Unknown_88h = reader.ReadUInt32(); this.Unknown_8Ch = reader.ReadUInt32(); this.Unknown_90h = reader.ReadUInt32(); this.Unknown_94h = reader.ReadUInt32(); this.Unknown_98h = reader.ReadUInt32(); this.Unknown_9Ch = reader.ReadUInt32(); this.Drawable1Pointer = reader.ReadUInt64(); this.Drawable2Pointer = reader.ReadUInt64(); this.EvtSetPointer = reader.ReadUInt64(); this.Unknown_B8h = reader.ReadUInt32(); this.Unknown_BCh = reader.ReadUInt32(); this.Unknown_C0h = reader.ReadUInt32(); this.Unknown_C4h = reader.ReadUInt32(); this.Unknown_C8h = reader.ReadUInt32(); this.Unknown_CCh = reader.ReadUInt32(); this.Unknown_D0h = reader.ReadUInt32(); this.Unknown_D4h = reader.ReadUInt32(); this.Unknown_D8h = reader.ReadUInt32(); this.Unknown_DCh = reader.ReadUInt32(); this.Unknown_E0h = reader.ReadUInt32(); this.Unknown_E4h = reader.ReadUInt32(); this.Unknown_E8h = reader.ReadUInt32(); this.Unknown_ECh = reader.ReadUInt32(); this.Unknown_F0h = reader.ReadUInt32(); this.Unknown_F4h = reader.ReadUInt32(); this.Unknown_F8h = reader.ReadUInt32(); this.Unknown_FCh = reader.ReadUInt32(); // read reference data this.Drawable1 = reader.ReadBlockAt( this.Drawable1Pointer // offset ); this.Drawable2 = reader.ReadBlockAt( this.Drawable2Pointer // offset ); this.EvtSet = reader.ReadBlockAt( this.EvtSetPointer // offset ); if (this.Drawable1 != null) { this.Drawable1.OwnerFragmentPhys = this; } if (this.Drawable2 != null) { this.Drawable2.OwnerFragmentPhys = this; } } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data this.Drawable1Pointer = (ulong)(this.Drawable1 != null ? this.Drawable1.FilePosition : 0); this.Drawable2Pointer = (ulong)(this.Drawable2 != null ? this.Drawable2.FilePosition : 0); this.EvtSetPointer = (ulong)(this.EvtSet != null ? this.EvtSet.FilePosition : 0); // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.GroupIndex); writer.Write(this.BoneTag); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); writer.Write(this.Unknown_30h); writer.Write(this.Unknown_34h); writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.Write(this.Unknown_40h); writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); writer.Write(this.Unknown_60h); writer.Write(this.Unknown_64h); writer.Write(this.Unknown_68h); writer.Write(this.Unknown_6Ch); writer.Write(this.Unknown_70h); writer.Write(this.Unknown_74h); writer.Write(this.Unknown_78h); writer.Write(this.Unknown_7Ch); writer.Write(this.Unknown_80h); writer.Write(this.Unknown_84h); writer.Write(this.Unknown_88h); writer.Write(this.Unknown_8Ch); writer.Write(this.Unknown_90h); writer.Write(this.Unknown_94h); writer.Write(this.Unknown_98h); writer.Write(this.Unknown_9Ch); writer.Write(this.Drawable1Pointer); writer.Write(this.Drawable2Pointer); writer.Write(this.EvtSetPointer); writer.Write(this.Unknown_B8h); writer.Write(this.Unknown_BCh); writer.Write(this.Unknown_C0h); writer.Write(this.Unknown_C4h); writer.Write(this.Unknown_C8h); writer.Write(this.Unknown_CCh); writer.Write(this.Unknown_D0h); writer.Write(this.Unknown_D4h); writer.Write(this.Unknown_D8h); writer.Write(this.Unknown_DCh); writer.Write(this.Unknown_E0h); writer.Write(this.Unknown_E4h); writer.Write(this.Unknown_E8h); writer.Write(this.Unknown_ECh); writer.Write(this.Unknown_F0h); writer.Write(this.Unknown_F4h); writer.Write(this.Unknown_F8h); writer.Write(this.Unknown_FCh); } /// /// Returns a list of data blocks which are referenced by this block. /// public override IResourceBlock[] GetReferences() { var list = new List(); if (Drawable1 != null) list.Add(Drawable1); if (Drawable2 != null) list.Add(Drawable2); if (EvtSet != null) list.Add(EvtSet); return list.ToArray(); } public override string ToString() { return GroupNameHash.ToString(); } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysEvtSet : ResourceSystemBlock { public override long BlockLength { get { return 48; } } // structure data public uint VFT { get; set; } public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 public uint Unknown_10h { get; set; } // 0x00000000 public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 public uint Unknown_20h { get; set; } // 0x00000000 public uint Unknown_24h { get; set; } // 0x00000000 public uint Unknown_28h { get; set; } // 0x00000000 public uint Unknown_2Ch { get; set; } // 0x00000000 /// /// Reads the data-block from a stream. /// public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data this.VFT = reader.ReadUInt32(); this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); this.Unknown_20h = reader.ReadUInt32(); this.Unknown_24h = reader.ReadUInt32(); this.Unknown_28h = reader.ReadUInt32(); this.Unknown_2Ch = reader.ReadUInt32(); } /// /// Writes the data-block to a stream. /// public override void Write(ResourceDataWriter writer, params object[] parameters) { // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); writer.Write(this.Unknown_20h); writer.Write(this.Unknown_24h); writer.Write(this.Unknown_28h); writer.Write(this.Unknown_2Ch); } } [TypeConverter(typeof(ExpandableObjectConverter))] public struct FragPhysTypeGroup_s { // structure data public float Unknown_00h { get; set; } // 0x00000000 public float Unknown_04h { get; set; } // 0x00000000 public float Unknown_08h { get; set; } // 0x00000000 public float Unknown_0Ch { get; set; } // 0x00000000 public float Unknown_10h { get; set; } public float Unknown_14h { get; set; } public float Unknown_18h { get; set; } public float Unknown_1Ch { get; set; } public float Unknown_20h { get; set; } public float Unknown_24h { get; set; } public float Unknown_28h { get; set; } public float Unknown_2Ch { get; set; } public float Unknown_30h { get; set; } public float Unknown_34h { get; set; } public float Unknown_38h { get; set; } public float Unknown_3Ch { get; set; } public float Unknown_40h { get; set; } public float Unknown_44h { get; set; } public float Unknown_48h { get; set; } // 0x00000000 public byte Unknown_4Cha { get; set; } public byte Unknown_4Chb { get; set; } public byte Unknown_4Chc { get; set; } public byte Unknown_4Chd { get; set; } //public uint Unknown_4Ch { get; set; } public byte Unknown_50ha { get; set; } public byte Unknown_50hb { get; set; }//0xFF public ushort Unknown_50hc { get; set; }//0 //public uint Unknown_50h { get; set; } public float Unknown_54h { get; set; } public float Unknown_58h { get; set; } public float Unknown_5Ch { get; set; } public float Unknown_60h { get; set; } public float Unknown_64h { get; set; } public float Unknown_68h { get; set; } public float Unknown_6Ch { get; set; } public float Unknown_70h { get; set; } public float Unknown_74h { get; set; } public float Unknown_78h { get; set; } public float Unknown_7Ch { get; set; } // 0x00000000 public FragPhysNameStruct_s Name { get; set; } public float Unknown_A0h { get; set; } // 0x00000000 public float Unknown_A4h { get; set; } // 0x00000000 public float Unknown_A8h { get; set; } public float Unknown_ACh { get; set; } // 0x00000000 public override string ToString() { return Name.ToString(); } } [TypeConverter(typeof(ExpandableObjectConverter))] public struct FragPhysNameStruct_s { // structure data public uint Unknown_00h { get; set; } public uint Unknown_04h { get; set; } public uint Unknown_08h { get; set; } public uint Unknown_0Ch { get; set; } public uint Unknown_10h { get; set; } public uint Unknown_14h { get; set; } public uint Unknown_18h { get; set; } public uint Unknown_1Ch { get; set; } public override string ToString() { UintStringBuilder usb = new UintStringBuilder(); usb.Add(Unknown_00h); usb.Add(Unknown_04h); usb.Add(Unknown_08h); usb.Add(Unknown_0Ch); usb.Add(Unknown_10h); usb.Add(Unknown_14h); usb.Add(Unknown_18h); usb.Add(Unknown_1Ch); return usb.ToString(); } } public class UintStringBuilder { public StringBuilder sb = new StringBuilder(); public void Add(uint u) { sb.Append((char)((u & 0x000000FF) >> 0)); sb.Append((char)((u & 0x0000FF00) >> 8)); sb.Append((char)((u & 0x00FF0000) >> 16)); sb.Append((char)((u & 0xFF000000) >> 24)); } public override string ToString() { return sb.ToString().Replace("\0", ""); } } }