Exemplo n.º 1
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);
        }
Exemplo n.º 2
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();
        }
Exemplo n.º 3
0
        public override void Open(HSDReader Reader)
        {
            List <byte> data = new List <byte>();
            byte        cmd  = Reader.ReadByte();

            while (cmd != 0)
            {
                int size = MeleeScript.GetCommandSize(cmd);
                data.Add(cmd);
                data.AddRange(Reader.ReadBytes(size - 1));
                cmd = Reader.ReadByte();
            }
            Data = data.ToArray();
        }
Exemplo n.º 4
0
        public bool Read(HSDReader Reader, HSD_AttributeGroup Attributes)
        {
            PrimitiveType = (GXPrimitiveType)Reader.ReadByte();
            if (PrimitiveType == 0)
            {
                return(false);
            }
            Count   = Reader.ReadUInt16();
            Indices = new GXIndexGroup[Count];
            for (int j = 0; j < Count; j++)
            {
                GXIndexGroup g = new GXIndexGroup();
                g.Indices = new ushort[Attributes.Attributes.Count];
                int i = 0;
                Indices[j] = g;
                foreach (GXVertexBuffer att in Attributes.Attributes)
                {
                    switch (att.AttributeType)
                    {
                    case GXAttribType.GX_DIRECT:
                        if (att.Name == GXAttribName.GX_VA_CLR0)
                        {
                            g.Clr0 = ReadGXClr(Reader, (int)att.CompType);
                        }
                        else if (att.Name == GXAttribName.GX_VA_CLR1)
                        {
                            g.Clr1 = ReadGXClr(Reader, (int)att.CompType);
                        }
                        else
                        {
                            g.Indices[i] = Reader.ReadByte();
                        }
                        break;

                    case GXAttribType.GX_INDEX8:
                        g.Indices[i] = Reader.ReadByte();
                        break;

                    case GXAttribType.GX_INDEX16:
                        g.Indices[i] = Reader.ReadUInt16();
                        break;
                    }
                    i++;
                }
            }
            return(true);
        }
Exemplo n.º 5
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);
                }
            }
        }
Exemplo n.º 6
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);
            }
        }
Exemplo n.º 7
0
        private static byte[] ReadGXClr(HSDReader Reader, int CompType)
        {
            byte[] clr = new byte[] { 1, 1, 1, 1 };
            int    b;

            switch (CompType)
            {
            case 0:     // GX_RGB565
                b      = Reader.ReadUInt16();
                clr[0] = (byte)((((b >> 11) & 0x1F) << 3) | (((b >> 11) & 0x1F) >> 2));
                clr[1] = (byte)((((b >> 5) & 0x3F) << 2) | (((b >> 5) & 0x3F) >> 4));
                clr[2] = (byte)((((b) & 0x1F) << 3) | (((b) & 0x1F) >> 2));
                break;

            case 1:     // GX_RGB888
                clr[0] = Reader.ReadByte();
                clr[1] = Reader.ReadByte();
                clr[2] = Reader.ReadByte();
                break;

            case 2:     // GX_RGBX888
                clr[0] = Reader.ReadByte();
                clr[1] = Reader.ReadByte();
                clr[2] = Reader.ReadByte();
                Reader.ReadByte();
                break;

            case 3:     // GX_RGBA4
                b      = Reader.ReadUInt16();
                clr[0] = (byte)((((b >> 12) & 0xF) << 4) | ((b >> 12) & 0xF));
                clr[1] = (byte)((((b >> 8) & 0xF) << 4) | ((b >> 8) & 0xF));
                clr[2] = (byte)((((b >> 4) & 0xF) << 4) | ((b >> 4) & 0xF));
                clr[3] = (byte)((((b) & 0xF) << 4) | ((b) & 0xF));
                break;

            case 4:     // GX_RGBA6
                b      = (Reader.ReadByte() << 16) | (Reader.ReadByte() << 8) | (Reader.ReadByte());
                clr[0] = (byte)((((b >> 18) & 0x3F) << 2) | (((b >> 18) & 0x3F) >> 4));
                clr[1] = (byte)((((b >> 12) & 0x3F) << 2) | (((b >> 12) & 0x3F) >> 4));
                clr[2] = (byte)((((b >> 6) & 0x3F) << 2) | (((b >> 6) & 0x3F) >> 4));
                clr[3] = (byte)((((b) & 0x3F) << 2) | (((b) & 0x3F) >> 4));
                break;

            case 5:     // GX_RGBX888
                clr[0] = Reader.ReadByte();
                clr[1] = Reader.ReadByte();
                clr[2] = Reader.ReadByte();
                clr[3] = Reader.ReadByte();
                break;

            default:
                throw new Exception("Unknown Color Type");
            }

            return(clr);
        }