public CANM(EndianBinaryReader er) { Signature = er.ReadString(Encoding.ASCII, 4); if (Signature != "CANM") throw new SignatureNotCorrectException(Signature, "CANM", er.BaseStream.Position); Revision = er.ReadUInt32(); NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); TargetAnimationGroupNameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); LoopMode = er.ReadUInt32(); FrameSize = er.ReadSingle(); NrMemberAnimations = er.ReadUInt32(); MemberAnimationDictOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); NrUserDataEntries = er.ReadUInt32(); UserDataOffset = er.ReadUInt32(); long curpos = er.BaseStream.Position; er.BaseStream.Position = NameOffset; Name = er.ReadStringNT(Encoding.ASCII); er.BaseStream.Position = TargetAnimationGroupNameOffset; TargetAnimationGroupName = er.ReadStringNT(Encoding.ASCII); er.BaseStream.Position = MemberAnimationDictOffset; MemberAnimationDictionary = new DICT(er); MemberAnimations = new MemberAnimationData[NrMemberAnimations]; for (int i = 0; i < NrMemberAnimations; i++) { er.BaseStream.Position = MemberAnimationDictionary[i].DataOffset; MemberAnimations[i] = new MemberAnimationData(er); } er.BaseStream.Position = curpos; }
public CANM(EndianBinaryReader er) { Signature = er.ReadString(Encoding.ASCII, 4); if (Signature != "CANM") { throw new SignatureNotCorrectException(Signature, "CANM", er.BaseStream.Position); } Revision = er.ReadUInt32(); NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); TargetAnimationGroupNameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); LoopMode = er.ReadUInt32(); FrameSize = er.ReadSingle(); NrMemberAnimations = er.ReadUInt32(); MemberAnimationDictOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); NrUserDataEntries = er.ReadUInt32(); UserDataOffset = er.ReadUInt32(); long curpos = er.BaseStream.Position; er.BaseStream.Position = NameOffset; Name = er.ReadStringNT(Encoding.ASCII); er.BaseStream.Position = TargetAnimationGroupNameOffset; TargetAnimationGroupName = er.ReadStringNT(Encoding.ASCII); er.BaseStream.Position = MemberAnimationDictOffset; MemberAnimationDictionary = new DICT(er); MemberAnimations = new MemberAnimationData[NrMemberAnimations]; for (int i = 0; i < NrMemberAnimations; i++) { er.BaseStream.Position = MemberAnimationDictionary[i].DataOffset; MemberAnimations[i] = new MemberAnimationData(er); } er.BaseStream.Position = curpos; }
public DATA(EndianBinaryReader er) { Signature = er.ReadString(Encoding.ASCII, 4); if (Signature != "DATA") { throw new SignatureNotCorrectException(Signature, "DATA", er.BaseStream.Position - 4); } SectionSize = er.ReadUInt32(); DictionaryEntries = new DictionaryInfo[16]; for (int i = 0; i < 16; i++) { DictionaryEntries[i] = new DictionaryInfo(er); } Dictionaries = new DICT[16]; for (int i = 0; i < 16; i++) { if (i == 15 && DictionaryEntries[i].NrItems == 0x54434944) { DictionaryEntries[i].NrItems = 0; DictionaryEntries[i].Offset = 0; } if (DictionaryEntries[i].Offset != 0) { long curpos = er.BaseStream.Position; er.BaseStream.Position = DictionaryEntries[i].Offset; Dictionaries[i] = new DICT(er); er.BaseStream.Position = curpos; } else { Dictionaries[i] = null; } } if (Dictionaries[0] != null) { Models = new CMDL[Dictionaries[0].Count]; for (int i = 0; i < Dictionaries[0].Count; i++) { long curpos = er.BaseStream.Position; er.BaseStream.Position = Dictionaries[0][i].DataOffset; Models[i] = new CMDL(er); er.BaseStream.Position = curpos; } } if (Dictionaries[1] != null) { Textures = new TXOB[Dictionaries[1].Count]; for (int i = 0; i < Dictionaries[1].Count; i++) { long curpos = er.BaseStream.Position; er.BaseStream.Position = Dictionaries[1][i].DataOffset; Textures[i] = TXOB.FromStream(er); //new TXOB(er); er.BaseStream.Position = curpos; } } if (Dictionaries[9] != null) { SkeletonAnimations = new CANM[Dictionaries[9].Count]; for (int i = 0; i < Dictionaries[9].Count; i++) { long curpos = er.BaseStream.Position; er.BaseStream.Position = Dictionaries[9][i].DataOffset; SkeletonAnimations[i] = new CANM(er); er.BaseStream.Position = curpos; } } if (Dictionaries[10] != null) { MaterialAnimations = new CANM[Dictionaries[10].Count]; for (int i = 0; i < Dictionaries[10].Count; i++) { long curpos = er.BaseStream.Position; er.BaseStream.Position = Dictionaries[10][i].DataOffset; MaterialAnimations[i] = new CANM(er); er.BaseStream.Position = curpos; } } if (Dictionaries[11] != null) { VisibilityAnimations = new CANM[Dictionaries[11].Count]; for (int i = 0; i < Dictionaries[11].Count; i++) { long curpos = er.BaseStream.Position; er.BaseStream.Position = Dictionaries[11][i].DataOffset; VisibilityAnimations[i] = new CANM(er); er.BaseStream.Position = curpos; } } }
public DATA() { Signature = "DATA"; DictionaryEntries = new DictionaryInfo[16]; Dictionaries = new DICT[16]; }
public CMDL(EndianBinaryReader er) { Type = er.ReadUInt32(); Signature = er.ReadString(Encoding.ASCII, 4); if (Signature != "CMDL") throw new SignatureNotCorrectException(Signature, "CMDL", er.BaseStream.Position); Revision = er.ReadUInt32(); NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); Unknown2 = er.ReadUInt32(); Unknown3 = er.ReadUInt32(); Flags = er.ReadUInt32(); IsBranchVisible = er.ReadUInt32() == 1; NrChildren = er.ReadUInt32(); Unknown7 = er.ReadUInt32(); NrAnimationGroupDescriptions = er.ReadUInt32(); AnimationGroupDescriptionsDictOffset =er.ReadUInt32(); if (AnimationGroupDescriptionsDictOffset != 0) AnimationGroupDescriptionsDictOffset += (UInt32)er.BaseStream.Position - 4; Scale = er.ReadVector3(); Rotation = er.ReadVector3(); Translation = er.ReadVector3(); LocalMatrix = er.ReadSingles(4 * 3); WorldMatrix = er.ReadSingles(4 * 3); NrMeshes = er.ReadUInt32(); MeshOffsetsOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); NrMaterials = er.ReadUInt32(); MaterialsDictOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); NrShapes = er.ReadUInt32(); ShapeOffsetsOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); NrMeshNodes = er.ReadUInt32(); MeshNodeVisibilitiesDictOffset = er.ReadUInt32(); if (MeshNodeVisibilitiesDictOffset != 0) MeshNodeVisibilitiesDictOffset += (UInt32)er.BaseStream.Position - 4; Unknown23 = er.ReadUInt32(); Unknown24 = er.ReadUInt32(); Unknown25 = er.ReadUInt32(); if ((Type & 0x80) != 0) SkeletonInfoSOBJOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); long curpos = er.BaseStream.Position; er.BaseStream.Position = NameOffset; Name = er.ReadStringNT(Encoding.ASCII); if (AnimationGroupDescriptionsDictOffset != 0) { er.BaseStream.Position = AnimationGroupDescriptionsDictOffset; AnimationInfoDict = new DICT(er); } er.BaseStream.Position = MeshOffsetsOffset; MeshOffsets = new UInt32[NrMeshes]; for (int i = 0; i < NrMeshes; i++) { MeshOffsets[i] = (UInt32)er.BaseStream.Position + er.ReadUInt32(); } er.BaseStream.Position = MaterialsDictOffset; MaterialsDict = new DICT(er); Materials = new MTOB[NrMaterials]; for (int i = 0; i < NrMaterials; i++) { er.BaseStream.Position = MaterialsDict[i].DataOffset; Materials[i] = new MTOB(er); } er.BaseStream.Position = ShapeOffsetsOffset; ShapeOffsets = new UInt32[NrShapes]; for (int i = 0; i < NrShapes; i++) { ShapeOffsets[i] = (UInt32)er.BaseStream.Position + er.ReadUInt32(); } if (MeshNodeVisibilitiesDictOffset != 0) { er.BaseStream.Position = MeshNodeVisibilitiesDictOffset; MeshNodeVisibilitiesDict = new DICT(er); } AnimationGroupDescriptions = new GraphicsAnimationGroup[NrAnimationGroupDescriptions]; for (int i = 0; i < NrAnimationGroupDescriptions; i++) { er.BaseStream.Position = AnimationInfoDict[i].DataOffset; AnimationGroupDescriptions[i] = new GraphicsAnimationGroup(er); } Meshes = new Mesh[NrMeshes]; for (int i = 0; i < NrMeshes; i++) { er.BaseStream.Position = MeshOffsets[i]; Meshes[i] = new Mesh(er); } Shapes = new SeparateDataShape[NrShapes]; for (int i = 0; i < NrShapes; i++) { er.BaseStream.Position = ShapeOffsets[i]; Shapes[i] = new SeparateDataShape(er); } MeshNodeVisibilities = new MeshNodeVisibilityCtr[NrMeshNodes]; for (int i = 0; i < NrMeshNodes; i++) { er.BaseStream.Position = MeshNodeVisibilitiesDict[i].DataOffset; MeshNodeVisibilities[i] = new MeshNodeVisibilityCtr(er); } if ((Type & 0x80) != 0) { er.BaseStream.Position = SkeletonInfoSOBJOffset; Skeleton = new SkeletonCtr(er); } er.BaseStream.Position = curpos; }
public GraphicsAnimationGroup(EndianBinaryReader er) { Type = er.ReadUInt32(); Flags = (GraphicsAnimGroupFlags)er.ReadUInt32(); NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); MemberType = (GraphicsMemberType)er.ReadUInt32(); NrMembers = er.ReadUInt32(); MemberInfoDICTOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); NrBlendOperations = er.ReadUInt32(); BlendOperationArrayOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); EvaluationTiming = (AnimGroupEvaluationTiming)er.ReadUInt32(); long curpos = er.BaseStream.Position; er.BaseStream.Position = NameOffset; Name = er.ReadStringNT(Encoding.ASCII); er.BaseStream.Position = MemberInfoDICTOffset; MemberInfoDICT = new DICT(er); er.BaseStream.Position = BlendOperationArrayOffset; BlendOperations = er.ReadUInt32s((int)NrBlendOperations); AnimationGroupMembers = new AnimationGroupMember[NrMembers]; for (int i = 0; i < NrMembers; i++) { er.BaseStream.Position = MemberInfoDICT[i].DataOffset; AnimationGroupMembers[i] = AnimationGroupMember.FromStream(er); } er.BaseStream.Position = curpos; }
public SkeletonCtr(EndianBinaryReader er) { Type = er.ReadUInt32(); Signature = er.ReadString(Encoding.ASCII, 4); if (Signature != "SOBJ") throw new SignatureNotCorrectException(Signature, "SOBJ", er.BaseStream.Position); Revision = er.ReadUInt32(); NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); Unknown2 = er.ReadUInt32(); Unknown3 = er.ReadUInt32(); NrBones = er.ReadUInt32(); BoneDictionaryOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); RootBoneOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32(); ScalingRule = (SkeletonScalingRule)er.ReadUInt32(); Flags = (SkeletonFlags)er.ReadUInt32(); long curpos = er.BaseStream.Position; er.BaseStream.Position = NameOffset; Name = er.ReadStringNT(Encoding.ASCII); er.BaseStream.Position = BoneDictionaryOffset; BoneDictionary = new DICT(er); Bones = new Bone[NrBones]; for (int i = 0; i < NrBones; i++) { er.BaseStream.Position = BoneDictionary[i].DataOffset; Bones[i] = new Bone(er); } er.BaseStream.Position = curpos; }