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);
            }
        }
Exemple #2
0
        public override void Open(HSDReader Reader)
        {
            uint DataOffset = Reader.ReadUInt32();

            Width  = Reader.ReadUInt16();
            Height = Reader.ReadUInt16();
            Format = (GXTexFmt)Reader.ReadUInt32();
            Mipmap = Reader.ReadUInt32();
            MinLOD = Reader.ReadSingle();
            MaxLOD = Reader.ReadSingle();

            Data = Reader.ReadBuffer(DataOffset, TPL.TextureByteSize((TPL_TextureFormat)Format, Width, Height));
        }
Exemple #3
0
        public override void Open(HSDReader Reader)
        {
            uint  Offset = Reader.ReadUInt32();
            float Weight = Reader.ReadSingle();

            JOBJs   = new List <HSD_JOBJ>();
            Weights = new List <float>();
            while (Offset != 0)
            {
                JOBJs.Add(Reader.ReadObject <HSD_JOBJ>(Offset));
                Weights.Add(Weight);
                Offset = Reader.ReadUInt32();
                Weight = Reader.ReadSingle();
            }
        }
Exemple #4
0
        private static float[] Read(HSDReader d, GXCompType type, int size)
        {
            switch (type)
            {
            case GXCompType.UInt16: size /= 2; break;

            case GXCompType.Int16: size /= 2; break;

            case GXCompType.Float: size /= 4; break;
            }

            float[] a = new float[size];

            switch (type)
            {
            case GXCompType.UInt8:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadByte();
                }
                break;

            case GXCompType.Int8:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadSByte();
                }
                break;

            case GXCompType.UInt16:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadUInt16();
                }
                break;

            case GXCompType.Int16:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadInt16();
                }
                break;

            case GXCompType.Float:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadSingle();
                }
                break;

            default:
                for (int i = 0; i < size; i++)
                {
                    a[i] = d.ReadByte();
                }
                break;
            }

            return(a);
        }
Exemple #5
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());
            }
        }
Exemple #6
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);
                }
            }
        }
Exemple #7
0
        private static double ReadVal(HSDReader d, GXAnimDataFormat Format, float Scale)
        {
            d.BigEndian = false;
            switch (Format)
            {
            case GXAnimDataFormat.Float:
                return(d.ReadSingle());

            case GXAnimDataFormat.Short:
                return(d.ReadInt16() / (double)Scale);

            case GXAnimDataFormat.UShort:
                return(d.ReadUInt16() / (double)Scale);

            case GXAnimDataFormat.SByte:
                return(d.ReadSByte() / (double)Scale);

            case GXAnimDataFormat.Byte:
                return(d.ReadByte() / (double)Scale);

            default:
                return(0);
            }
        }