Ejemplo n.º 1
0
        private byte readByte(Reader reader)
        {
            byte c = 0;

            if (decoder.fileState == PARSE_COMPLETE)
            {
                return(c);
            }

            byte b;

            if (decoder.position == decoder.bufferSize)
            {
                b = reader.ReadByte();
                decoder.bufferSize = (int)b;
                if (decoder.bufferSize == 0)
                {
                    decoder.fileState = PARSE_COMPLETE;
                    return(c);
                }
                decoder.buffer = reader.readBytes(decoder.bufferSize);
                b = decoder.buffer[0];
                decoder.position = 1;
            }
            else
            {
                b = decoder.buffer[decoder.position++];
            }
            return(b);
        }
Ejemplo n.º 2
0
        public void read(Reader reader)
        {
            if (!reader.readBytes(4).SequenceEqual(signature))
            {
                reader.Close();
                throw new Exception("Invalid Model v4 signature");
            }

            ushort vertCount = reader.ReadUInt16();

            textureUVs.Clear();
            for (int t = 0; t < vertCount; t++)
            {
                TextureUV uv = new TextureUV();
                uv.u = reader.ReadSingle();
                uv.v = reader.ReadSingle();
                textureUVs.Add(uv);
            }

            int indexCount = reader.ReadUInt16() * 3;

            indices.Clear();
            for (int i = 0; i < indexCount; ++i)
            {
                indices.Add(reader.ReadUInt16());
            }

            ushort frameCount = reader.ReadUInt16();

            frames.Clear();
            for (int f = 0; f < frameCount; ++f)
            {
                Frame frame = new Frame();
                for (int v = 0; v < vertCount; ++v)
                {
                    Vertex vert = new Vertex();
                    vert.x = reader.ReadSingle();
                    vert.y = reader.ReadSingle();
                    vert.z = reader.ReadSingle();

                    vert.nx = reader.ReadSingle();
                    vert.ny = reader.ReadSingle();
                    vert.nz = reader.ReadSingle();
                    frame.vertices.Add(vert);
                }
                frames.Add(frame);
            }

            reader.Close();
        }
Ejemplo n.º 3
0
        public void read(Reader reader, List <string> fileNames = null)
        {
            if (!reader.readBytes(6).SequenceEqual(signature))
            {
                reader.Close();
                throw new Exception("Invalid DataFile v4 signature");
            }

            ushort fileCount = reader.ReadUInt16();

            files.Clear();
            for (int i = 0; i < fileCount; i++)
            {
                files.Add(new FileInfo(reader, fileNames, i));
            }

            reader.Close();
        }
Ejemplo n.º 4
0
 public void read(Reader reader)
 {
     hash = reader.readBytes(16);
 }
Ejemplo n.º 5
0
            public void read(Reader reader, List <string> fileNames = null, int fileID = 0)
            {
                for (int y = 0; y < 16; y += 4)
                {
                    fileName.hash[y + 3] = reader.ReadByte();
                    fileName.hash[y + 2] = reader.ReadByte();
                    fileName.hash[y + 1] = reader.ReadByte();
                    fileName.hash[y + 0] = reader.ReadByte();
                }
                fileName.usingHash = true;

                var md5 = MD5.Create();

                fileName.name = (fileID + 1) + ".bin"; //Make a base name

                for (int i = 0; fileNames != null && i < fileNames.Count; i++)
                {
                    // RSDKv4 Hashes all Strings at Lower Case
                    string fp = fileNames[i].ToLower();

                    bool match = true;

                    for (int z = 0; z < 16; z++)
                    {
                        if (calculateMD5Hash(fp)[z] != fileName.hash[z])
                        {
                            match = false;
                            break;
                        }
                    }

                    if (match)
                    {
                        fileName = new NameIdentifier(fileNames[i]);
                        break;
                    }
                }

                uint fileOffset = reader.ReadUInt32();
                uint tmp        = reader.ReadUInt32();

                encrypted = (tmp & 0x80000000) != 0;
                uint fileSize = (tmp & 0x7FFFFFFF);

                long tmp2 = reader.BaseStream.Position;

                reader.BaseStream.Position = fileOffset;

                // Decrypt File if Encrypted
                if (encrypted && !fileName.usingHash)
                {
                    fileData = decrypt(reader.readBytes(fileSize), false);
                }
                else
                {
                    fileData = reader.readBytes(fileSize);
                }


                reader.BaseStream.Position = tmp2;

                extension = getExtensionFromData();

                if (fileName.usingHash)
                {
                    switch (extension)
                    {
                    case ExtensionTypes.GIF:
                        fileName.name = "Sprite" + (fileID + 1) + ".gif";
                        break;

                    case ExtensionTypes.MDL:
                        fileName.name = "Model" + (fileID + 1) + ".bin";
                        break;

                    case ExtensionTypes.OGG:
                        fileName.name = "Music" + (fileID + 1) + ".ogg";
                        break;

                    case ExtensionTypes.PNG:
                        fileName.name = "Image" + (fileID + 1) + ".png";
                        break;

                    case ExtensionTypes.WAV:
                        fileName.name = "SoundEffect" + (fileID + 1) + ".wav";
                        break;

                    case ExtensionTypes.UNKNOWN:
                        fileName.name = "UnknownFileType" + (fileID + 1) + ".bin";
                        break;
                    }
                }
                md5.Dispose();
            }
Ejemplo n.º 6
0
 public void read(Reader reader)
 {
     name = reader.ReadString();
     byte[] bytes = reader.readBytes(4);
     value = (bytes[3] << 24) + (bytes[2] << 16) + (bytes[1] << 8) + (bytes[0] << 0);
 }