Example #1
0
        public override void Open(HSDReader Reader)
        {
            var boneTableOffset   = Reader.ReadUInt32();
            var matrixTableOffset = Reader.ReadUInt32();
            var count             = Reader.ReadUInt32();

            if (boneTableOffset != 0)
            {
                Reader.Seek(boneTableOffset);
                for (int i = 0; i < count; i++)
                {
                    BoneIDs.Add(Reader.ReadInt32());
                }
            }
            if (matrixTableOffset != 0)
            {
                Reader.Seek(matrixTableOffset);
                for (int i = 0; i < count; i++)
                {
                    HSD_Matrix3x3 mat = new HSD_Matrix3x3();
                    mat.Open(Reader);
                    Matrices.Add(mat);
                }
            }
        }
Example #2
0
        public override void Open(HSDReader Reader)
        {
            var offset = Reader.ReadUInt32();
            var count  = Reader.ReadInt32();

            if (offset == 0)
            {
                return;
            }

            Reader.Seek(offset);
            for (int i = 0; i < count; i++)
            {
                Indices.Add(Reader.ReadInt32());
            }
        }
Example #3
0
        public override void Open(HSDReader Reader)
        {
            Type = Reader.ReadInt16();
            int PathPointCount = Reader.ReadInt16();

            Tension = Reader.ReadSingle();
            uint PointTableOffset = Reader.ReadUInt32();

            TotalLength = Reader.ReadSingle();
            uint segmentLengthOffset = Reader.ReadUInt32();

            if (Reader.ReadInt32() != 0)                   // this is a pointer to a float array of length 5?
            {
                Console.WriteLine("Resave not supported"); //throw new NotSupportedException("Dat not supported");
            }
            Reader.Seek(PointTableOffset);
            for (int i = 0; i < PathPointCount; i++)
            {
                Points.Add(new GXVector3(Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle()));
            }

            Reader.Seek(segmentLengthOffset);
            for (int i = 0; i < PathPointCount; i++)
            {
                SegmentLengths.Add(Reader.ReadSingle());
            }
        }
Example #4
0
        public override void Open(HSDReader Reader)
        {
            var off1   = Reader.ReadUInt32();
            var count1 = Reader.ReadInt32();
            var count2 = Reader.ReadInt32();
            var count3 = Reader.ReadInt32();

            for (int i = 0; i < count1; i++)
            {
                Reader.Seek(off1 + (uint)(0x48 * i));
                var region = new KAR_GrFogRegion();
                region.Open(Reader);
                FogRegions.Add(region);
            }

            if (count2 != -1 || count3 != -1)
            {
                throw new NotSupportedException("Fog format not supported");
            }
        }
Example #5
0
        public override void Open(HSDReader Reader)
        {
            var dataoff         = Reader.ReadUInt32();
            var datacount       = Reader.ReadInt32();
            var datastaticoff   = Reader.ReadUInt32();
            var datastaticcount = Reader.ReadInt32();
            var datacommonoff   = Reader.ReadUInt32();
            var datacommoncount = Reader.ReadInt32();

            Reader.Seek(dataoff);
            for (int i = 0; i < datacount; i++)
            {
                var off  = Reader.ReadUInt32();
                var temp = Reader.Position();
                Reader.Seek(off);
                var v = new KAR_GrYakumonoData();
                v.Open(Reader);
                YakuData.Add(v);
                Reader.Seek(temp);
            }

            Reader.Seek(datastaticoff);
            for (int i = 0; i < datastaticcount; i++)
            {
                var off  = Reader.ReadUInt32();
                var temp = Reader.Position();
                Reader.Seek(off);
                var v = new KAR_GrYakumonoData();
                v.Open(Reader);
                YakuStaticData.Add(v);
                Reader.Seek(temp);
            }

            for (int i = 0; i < datacommoncount; i++)
            {
                Reader.Seek(datacommonoff + (uint)(i * 12));
                var com = new KAR_GrYakumonoCommonData();
                com.Open(Reader);
                YakuCommonData.Add(com);
            }
        }
Example #6
0
        public override void Open(HSDReader Reader)
        {
            Name          = (GXAttribName)Reader.ReadUInt32();
            AttributeType = (GXAttribType)Reader.ReadUInt32();
            CompCount     = (GXCompCnt)Reader.ReadInt32();
            CompType      = (GXCompType)Reader.ReadUInt32();

            Scale = Reader.ReadByte();
            Reader.ReadByte();//Padding
            Stride = Reader.ReadUInt16();
            Offset = Reader.ReadUInt32();
        }
Example #7
0
        //

        public override void Open(HSDReader Reader)
        {
            var modelGroupOffset = Reader.ReadUInt32();
            var modelGroupCount  = Reader.ReadInt32();
            var unk1GroupOffset  = Reader.ReadUInt32();
            var unk1GroupCount   = Reader.ReadInt32();
            var unk2GroupOffset  = Reader.ReadUInt32();
            var unk2GroupCount   = Reader.ReadInt32();
            var lightGroupOffset = Reader.ReadUInt32();
            var lightGroupCount  = Reader.ReadInt32();
            var unk4GroupOffset  = Reader.ReadUInt32();
            var unk4GroupCount   = Reader.ReadInt32();
            var unk5GroupOffset  = Reader.ReadUInt32();
            var unk5GroupCount   = Reader.ReadInt32();

            for (int i = 0; i < modelGroupCount; i++)
            {
                Reader.Seek(modelGroupOffset + (uint)(12 * i));
                SBM_GrMapModelGroup mg = new SBM_GrMapModelGroup();
                mg.Open(Reader);
                ModelGroups.Add(mg);
            }

            for (int i = 0; i < modelGroupCount; i++)
            {
                Reader.Seek(lightGroupOffset + (uint)(i * 8));
                SBM_GrMapLight mg = new SBM_GrMapLight();
                mg.Open(Reader);
                Lights.Add(mg);
            }
        }
Example #8
0
        public override void Open(HSDReader Reader)
        {
            var vertexOffset     = Reader.ReadUInt32();
            var vertexCount      = Reader.ReadInt32();
            var faceOffset       = Reader.ReadUInt32();
            var faceCount        = Reader.ReadInt32();
            var jointOffset      = Reader.ReadUInt32();
            var jointCount       = Reader.ReadInt32();
            var zonevertexOffset = Reader.ReadUInt32();
            var zonevertexCount  = Reader.ReadInt32();
            var zonefaceOffset   = Reader.ReadUInt32();
            var zonefaceCount    = Reader.ReadInt32();
            var zonejointOffset  = Reader.ReadUInt32();
            var zonejointCount   = Reader.ReadInt32();

            Reader.Seek(vertexOffset);
            for (int i = 0; i < vertexCount; i++)
            {
                Vertices.Add(new GXVector3(Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle()));
            }

            Reader.Seek(faceOffset);
            for (int i = 0; i < faceCount; i++)
            {
                KAR_CollisionTriangle tri = new KAR_CollisionTriangle();
                tri.Open(Reader);
                Faces.Add(tri);
            }

            Reader.Seek(jointOffset);
            for (int i = 0; i < jointCount; i++)
            {
                KAR_CollisionJoint joint = new KAR_CollisionJoint();
                joint.Open(Reader);
                Joints.Add(joint);
            }

            Reader.Seek(zonevertexOffset);
            for (int i = 0; i < zonevertexCount; i++)
            {
                ZoneVertices.Add(new GXVector3(Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle()));
            }

            Reader.Seek(zonefaceOffset);
            for (int i = 0; i < zonefaceCount; i++)
            {
                KAR_ZoneCollisionTriangle tri = new KAR_ZoneCollisionTriangle();
                tri.Open(Reader);
                ZoneFaces.Add(tri);
            }

            Reader.Seek(zonejointOffset);
            for (int i = 0; i < zonejointCount; i++)
            {
                KAR_ZoneCollisionJoint joint = new KAR_ZoneCollisionJoint();
                joint.Open(Reader);
                ZoneJoints.Add(joint);
            }
        }
Example #9
0
        public override void Open(HSDReader Reader)
        {
            var offset = Reader.ReadUInt32();
            var count  = Reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                Reader.Seek(offset + (uint)(i * 0x18));
                var spline = new KAR_GrSpline();
                spline.Open(Reader);
                Splines.Add(spline);
            }
        }
Example #10
0
        public override void Open(HSDReader Reader)
        {
            Type = Reader.ReadInt32();
            if (Type == -1)
            {
                MatAnimJoint = Reader.ReadObject <HSD_MatAnimJoint>(Reader.ReadUInt32());
            }
            else
            {
                Reader.ReadInt32(); // nothing
            }
            FrameCount = Reader.ReadSingle();
            uint TrackCountOffset = Reader.ReadUInt32();
            uint TrackOffset      = Reader.ReadUInt32();

            Reader.Seek(TrackCountOffset);
            List <byte> TrackCounts = new List <byte>();
            byte        TrackCount;

            while ((TrackCount = Reader.ReadByte()) != 0xFF)
            {
                TrackCounts.Add(TrackCount);
            }

            int track = 0;

            for (int i = 0; i < TrackCounts.Count; i++)
            {
                HSD_AnimNode Node = new HSD_AnimNode();
                Nodes.Add(Node);
                for (int j = 0; j < TrackCounts[i]; j++)
                {
                    Reader.Seek((uint)(TrackOffset + 0xC * track++));
                    HSD_Track t = new HSD_Track();
                    t.Open(Reader);
                    Node.Tracks.Add(t);
                }
            }
        }
Example #11
0
        public override void Open(HSDReader Reader)
        {
            var rootNodeOffset = Reader.ReadUInt32();
            var offset         = Reader.ReadUInt32();
            var count          = Reader.ReadInt32();

            RootNode = Reader.ReadObject <HSD_JOBJ>(rootNodeOffset);

            Reader.Seek(offset);
            for (int i = 0; i < count; i++)
            {
                SBM_GrMapModelTable table = new SBM_GrMapModelTable();
                table.Open(Reader);
                Tables.Add(table);
            }
        }
Example #12
0
        public override void Open(HSDReader Reader)
        {
            Vertices.Clear();
            Links.Clear();
            AreaTables.Clear();

            var vertexOffset = Reader.ReadUInt32();
            var vertexCount  = Reader.ReadInt32();
            var linkOffset   = Reader.ReadUInt32();
            var linkCount    = Reader.ReadInt32();

            Unknown1 = Reader.ReadInt32();
            Unknown2 = Reader.ReadInt32();
            Unknown3 = Reader.ReadInt16();
            Unknown4 = Reader.ReadInt16();
            Unknown5 = Reader.ReadInt16();
            Unknown6 = Reader.ReadInt16();
            Unknown7 = Reader.ReadInt32();
            var polyOffset = Reader.ReadUInt32();
            var polyCount  = Reader.ReadInt32();

            Unknown8 = Reader.ReadInt32();

            Reader.Seek(vertexOffset);
            for (int i = 0; i < vertexCount; i++)
            {
                var v = new SBM_GrCollVertex();
                v.Open(Reader);
                Vertices.Add(v);
            }
            Reader.Seek(linkOffset);
            for (int i = 0; i < linkCount; i++)
            {
                var v = new SBM_GrCollLink();
                v.Open(Reader);
                Links.Add(v);
            }
            Reader.Seek(polyOffset);
            for (int i = 0; i < polyCount; i++)
            {
                var v = new SBM_GrCollAreaTable();
                v.Open(Reader);
                AreaTables.Add(v);
            }
        }
Example #13
0
        public override void Open(HSDReader Reader)
        {
            if (Reader.ReadInt32() != 0)
            {
                throw new NotSupportedException("Yaku all not supported");
            }

            var off = Reader.ReadUInt32();

            while (off != 0)
            {
                var temp = Reader.Position();
                Reader.Seek(off);
                SBM_YakuAllNode node = new SBM_YakuAllNode();
                node.Open(Reader);
                Nodes.Add(node);
                Reader.Seek(temp);
                off = Reader.ReadUInt32();
            }
        }
Example #14
0
        public override void Open(HSDReader Reader)
        {
            var start = Reader.Position();
            var count = Reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                var off  = Reader.ReadUInt32();
                var temp = Reader.Position();

                Reader.Seek(start + off);
                SBM_GrMapSpriteSheet sheet = new SBM_GrMapSpriteSheet();
                sheet.Open(Reader, start);
                Sheets.Add(sheet);
                Reader.Seek(temp);
            }

            // there is sometimes padding with values in it
            // there is a 0xC section that has 0, 0x20, and some number
        }
Example #15
0
        public void Open(HSDReader Reader, uint offset)
        {
            var mipCount = Reader.ReadInt32();

            Format = Reader.ReadInt32();
            Flag   = Reader.ReadInt32();
            Width  = Reader.ReadInt32();
            Height = Reader.ReadInt32();
            Depth  = Reader.ReadInt32();

            uint[] mipOffsets = new uint[mipCount];
            for (int i = 0; i < mipCount; i++)
            {
                mipOffsets[i] = Reader.ReadUInt32();
            }
        }
Example #16
0
        public override void Open(HSDReader Reader)
        {
            var offset = Reader.ReadUInt32();
            var count  = Reader.ReadInt32();

            uint[] offsets = new uint[count];
            Reader.Seek(offset);
            for (int i = 0; i < count; i++)
            {
                offsets[i] = Reader.ReadUInt32();
            }

            for (int i = 0; i < count; i++)
            {
                if (offsets[i] == 0)
                {
                    continue;
                }
                Reader.Seek(offsets[i]);
                var path = new HSD_Spline();
                path.Open(Reader);
                Paths.Add(path);
            }
        }
Example #17
0
        public override void Open(HSDReader Reader)
        {
            var partitionPointer = Reader.ReadUInt32();
            var partitionCount   = Reader.ReadInt16();

            Reader.ReadInt16();

            {
                var temp = Reader.Position();
                Reader.Seek(partitionPointer);
                uint[] pointers = new uint[partitionCount];
                for (int i = 0; i < partitionCount; i++)
                {
                    pointers[i] = Reader.ReadUInt32();
                }
                for (int i = 0; i < partitionCount; i++)
                {
                    Reader.Seek(pointers[i]);
                    KAR_GrPartition p = new KAR_GrPartition();
                    p.Open(Reader);
                    Partitions.Add(p);
                }
                Reader.Seek(temp);
            }

            // now for a few sections
            // there are 5
            // 1 - collidable triangles
            // 2 - ? related to pads
            // 3 - ?
            // 4 - ?
            // 5 - ?
            // 32 Data Type
            // 32 pointer
            // 16 count
            // 16 padding

            {
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();

                var temp = Reader.Position();
                Reader.Seek(pointer);
                for (int i = 0; i < count; i++)
                {
                    CollidableTriangles.Add(Reader.ReadInt16());
                }
                Reader.Seek(temp);
            }

            { //TODO:
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();

                var temp = Reader.Position();
                Reader.Seek(pointer);
                for (int i = 0; i < count; i++)
                {
                    UnknownIndices.Add(Reader.ReadInt16());
                }
                Reader.Seek(temp);
            }

            { //TODO:
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();

                var temp = Reader.Position();
                Reader.Seek(pointer);
                for (int i = 0; i < count; i++)
                {
                    UnknownIndices2.Add(Reader.ReadInt16());
                }
                Reader.Seek(temp);
            }

            { //TODO:
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();
            }

            { //TODO:
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();
            }

            if (Reader.ReadInt32() != 0)
            {
                throw new NotSupportedException("Dat format not supported");
            }

            // one more bool section, usually all false?

            { //TODO:
                var dataType = Reader.ReadInt32();
                var pointer  = Reader.ReadUInt32();
                var count    = Reader.ReadInt16();
                Reader.ReadInt16();
                var temp = Reader.Position();

                Reader.Seek(pointer);
                // TODO: bit reader
                Reader.Seek(temp);
            }
        }