Example #1
0
 public override void Open(HSDReader Reader)
 {
     for (int i = 0; i < Size; i++)
     {
         Elements[i] = Reader.ReadObject <T>(Reader.Position());
     }
 }
Example #2
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 #3
0
        public override void Open(HSDReader Reader)
        {
            base.Open(Reader);
            uint BaseOffset = Reader.Position();

            GroupsUnk2_1D = new HSD_Array <KAR_GrUnk2_1DModel>(Size);
            Reader.Seek(Offset);
            GroupsUnk2_1D.Open(Reader);

            Reader.Seek(BaseOffset);
        }
Example #4
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 #5
0
        public override void Open(HSDReader Reader)
        {
            base.Open(Reader);
            uint BaseOffset = Reader.Position();

            DOBJIndices.Clear();
            Reader.Seek(Offset);
            for (int i = 0; i < Size; i++)
            {
                DOBJIndices.Add(Reader.ReadUInt16());
            }

            Reader.Seek(BaseOffset);
        }
Example #6
0
        public override void Open(HSDReader Reader)
        {
            var off = Reader.ReadUInt32();

            while (off != 0)
            {
                var temp = Reader.Position();
                Reader.Seek(off);
                HSD_Light light = new HSD_Light();
                light.Open(Reader);
                Lights.Add(light);
                Reader.Seek(temp);
                off = Reader.ReadUInt32();
            }
        }
Example #7
0
        public override void Open(HSDReader Reader)
        {
            var start = Reader.Position();

            for (int i = 0; i < 4; i++)
            {
                Reader.Seek(start + (uint)(8 * i));
                KAR_GrCourseSplineTable table = new KAR_GrCourseSplineTable();
                if (table.Indices.Count == 0)
                {
                    break;
                }
                table.Open(Reader);
                Tables.Add(table);
            }
        }
Example #8
0
        public GXDisplayList(byte[] Buffer, HSD_AttributeGroup Group)
        {
            if (Buffer == null)
            {
                return;
            }
            HSDReader Reader = new HSDReader(new MemoryStream(Buffer));

            while (Reader.Position() < Buffer.Length)
            {
                GXPrimitiveGroup g = new GXPrimitiveGroup();
                if (!g.Read(Reader, Group))
                {
                    break;
                }
                Primitives.Add(g);
            }
            Reader.Close();
        }
Example #9
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 #10
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);
            }
        }
Example #11
0
        public List <FOBJKey> GetKeys(float FrameCount = -1)
        {
            List <FOBJKey> Keys  = new List <FOBJKey>();
            int            clock = 0;

            Reader.Seek(0);
            while (Reader.Position() < FOBJ.Data.Length)
            {
                int type = Reader.ExtendedByte();
                InterpolationType interpolation = (InterpolationType)((type) & 0x0F);
                int numOfKey = ((type >> 4)) + 1;
                if (interpolation == 0)
                {
                    break;
                }

                for (int i = 0; i < numOfKey; i++)
                {
                    double value = 0;
                    double tan   = 0;
                    int    time  = 0;
                    switch (interpolation)
                    {
                    case InterpolationType.Step:
                        value = ReadVal(Reader, FOBJ.ValueFormat, FOBJ.ValueScale);
                        time  = Reader.ExtendedByte();
                        break;

                    case InterpolationType.Linear:
                        value = ReadVal(Reader, FOBJ.ValueFormat, FOBJ.ValueScale);
                        time  = Reader.ExtendedByte();
                        break;

                    case InterpolationType.HermiteValue:
                        value = ReadVal(Reader, FOBJ.ValueFormat, FOBJ.ValueScale);
                        time  = Reader.ExtendedByte();
                        break;

                    case InterpolationType.Hermite:
                        value = ReadVal(Reader, FOBJ.ValueFormat, FOBJ.ValueScale);
                        tan   = ReadVal(Reader, FOBJ.TanFormat, FOBJ.TanScale);
                        time  = Reader.ExtendedByte();
                        break;

                    case InterpolationType.HermiteCurve:
                        tan = ReadVal(Reader, FOBJ.TanFormat, FOBJ.TanScale);
                        break;

                    case InterpolationType.Constant:
                        value = ReadVal(Reader, FOBJ.ValueFormat, FOBJ.ValueScale);
                        break;

                    default:
                        throw new Exception("Unknown Interpolation Type " + interpolation.ToString("X"));
                    }
                    //Console.WriteLine(clock + " " + value + " " + FOBJ.ValueFormat );

                    FOBJKey kf = new FOBJKey();
                    kf.InterpolationType = interpolation;
                    kf.Value             = (float)value;
                    kf.Frame             = clock;
                    kf.Tan = (float)tan;
                    Keys.Add(kf);
                    clock += time;
                }
            }
            return(Keys);
        }