internal Point(Table table, int index, AssetLoader loader) : base(table, index) { BinaryReader reader = loader.Reader; long start = reader.BaseStream.Position; loader.Expect(HeaderLength); loader.ExpectZeroes(4, 1); // Probably type, always zero. loader.Expect(index); // Zero-based index of the row with this type. Subtype = reader.ReadInt32(); Position = new Vector3f(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); Rotation = Angle3.Degrees(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); int unknown1Offset = reader.ReadInt32(); // Offset to Unknown1 from start of row. int unknown2Offset = reader.ReadInt32(); // Offset to Unknown2 from start of row (Unknown1Offset + 4). int unknown3Offset = reader.ReadInt32(); // Offset to Unknown3 from start of row, or 0 if none (Unknown2Offset + 4). int unknown4Offset = reader.ReadInt32(); // Offset to Unknown3 from start of row (Unknown2Offset + 4 or Unknown3Offset + 12). loader.ExpectZeroes(4, 1); Name = reader.ReadStringz(EncodingShiftJis); reader.BaseStream.Position = start + unknown1Offset; loader.ExpectZeroes(4, 2); // Unknown1 and Unknown2 if (unknown3Offset != 0) { Unknowns.ReadSingles(reader, 3); } Unknowns.ReadInt32s(reader, 1); // -1 or values like 1002000 for events. var errors = loader.Errors; }
internal ModelBone(FolderAsset folder, int index, AssetLoader loader) : base(folder, index, loader) { var reader = loader.Reader; Position = reader.ReadVector3f(); Name = reader.ReadStringzAtUInt32(Encoding); Angle = Angle3.Radians(reader.ReadVector3f()); parentIndex = reader.ReadInt16(); firstChildIndex = reader.ReadInt16(); Scale = reader.ReadVector3f(); nextSiblingIndex = reader.ReadInt16(); previousSiblingIndex = reader.ReadInt16(); var min = reader.ReadVector3f(); Unknowns.ReadInt32s(reader, 1); // 0 or 1 var max = reader.ReadVector3f(); Bounds = new Box3f(min, max); reader.RequireZeroes(4 * 13); }
internal Part(Table table, int index, AssetLoader loader, int next) : base(table, index) { BinaryReader reader = loader.Reader; long start = reader.BaseStream.Position; loader.Expect(HeaderLength); Type = (ModelType)reader.ReadInt32(); Unknowns.ReadInt32s(reader, 1); Index = reader.ReadInt32(); int pathOffset = reader.ReadInt32(); Position = reader.ReadVector3f(); Rotation = Angle3.Degrees(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); Scale = reader.ReadVector3f(); Unknowns.ReadInt32s(reader, 8); int offset1 = reader.ReadInt32(); int offset2 = reader.ReadInt32(); if (offset1 + 0x18 != offset2) { loader.AddError(start, "Offset2 is not correct."); } loader.ExpectZeroes(4, 1); Name = reader.ReadStringz(EncodingShiftJis); Path = reader.ReadStringz(EncodingShiftJis); loader.Position = start + offset1; Unknowns.ReadInt32s(reader, 6, "Offset1s"); if (loader.Position > next || (next - loader.Position) / 4 > 64) { } Unknowns.ReadInt32s(reader, (int)(next - loader.Position) / 4, "Offset2s"); }