Esempio n. 1
0
            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;
            }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
            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");
            }