Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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;
                }
            }
        }