/// <exception cref="TextFormatNotSupportedException">Text-formatted GBX files are not supported.</exception> internal bool Read(GameBoxReader reader) { if (!reader.HasMagic(GameBox.Magic)) { Log.Write("GBX magic missing! Corrupted file or not a GBX file.", ConsoleColor.Red); return(false); } Log.Write("GBX recognized!", ConsoleColor.Green); Version = reader.ReadInt16(); Log.Write("- Version: " + Version.ToString()); if (Version >= 3) { ByteFormat = (GameBoxByteFormat)reader.ReadByte(); Log.Write("- Byte format: " + ByteFormat.ToString()); if (ByteFormat == GameBoxByteFormat.Text) { throw new TextFormatNotSupportedException(); } CompressionOfRefTable = (GameBoxCompression)reader.ReadByte(); Log.Write("- Ref. table compression: " + CompressionOfRefTable.ToString()); CompressionOfBody = (GameBoxCompression)reader.ReadByte(); Log.Write("- Body compression: " + CompressionOfBody.ToString()); if (Version >= 4) { UnknownByte = (char)reader.ReadByte(); Log.Write("- Unknown byte: " + UnknownByte.ToString()); } ID = CMwNod.Remap(reader.ReadUInt32()); Log.Write("- Class ID: 0x" + ID.Value.ToString("X8")); if (Version >= 6) { var userDataSize = reader.ReadInt32(); Log.Write($"- User data size: {(userDataSize / 1024f).ToString()} kB"); if (userDataSize > 0) { UserData = reader.ReadBytes(userDataSize); } } NumNodes = reader.ReadInt32(); Log.Write("- Number of nodes: " + NumNodes.ToString()); } Log.Write("Header completed!", ConsoleColor.Green); return(true); }
private void Read(GameBoxReader r) { if (!r.HasMagic("NadeoPak")) { throw new Exception("Not a pak file."); } Version = r.ReadInt32(); var headerIV = r.ReadUInt64(); using (blowfish = new BlowfishCBCStream(r.BaseStream, Key, headerIV)) using (var rr = new GameBoxReader(blowfish)) { ReadEncrypted(rr); } }