public RGSSADv3(BinaryReaderX br) { br.BaseStream.Position = 8; uint key = (uint)br.ReadInt32(); key *= 9; key += 3; while (true) { RGSSADFileEntry entry = new RGSSADFileEntry(); entry.Offset = decryptInt(br.ReadInt32(), key); entry.Size = decryptInt(br.ReadInt32(), key); entry.Key = (uint)decryptInt(br.ReadInt32(), key); int length = decryptInt(br.ReadInt32(), key); if (entry.Offset == 0) { break; } entry.Name = decryptFilename(br.ReadBytes(length), key); var tempPosition = br.BaseStream.Position; br.BaseStream.Position = entry.Offset; entry.Data = RGSSADSupport.decryptFileData(br.ReadBytes(entry.Size), entry.Key); br.BaseStream.Position = tempPosition; Entries.Add(entry); } }
public RGSSADv1(BinaryReaderX br) { // Key for the RGSSADv1 format initilized as a constant uint key = 0xDEADCAFE; br.BaseStream.Position = 8; while (true) { RGSSADFileEntry entry = new RGSSADFileEntry(); int length = decryptInt(br.ReadInt32(), ref key); entry.Name = decryptFilename(br.ReadBytes(length), ref key); entry.Size = decryptInt(br.ReadInt32(), ref key); entry.Offset = br.BaseStream.Position; entry.Key = key; entry.Data = RGSSADSupport.decryptFileData(br.ReadBytes(entry.Size), entry.Key); Entries.Add(entry); if (br.BaseStream.Position == br.BaseStream.Length) { break; } } }