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); }
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(); }
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(); }
public void read(Reader reader) { hash = reader.readBytes(16); }
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(); }
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); }