Beispiel #1
0
        public static CatalogFile Read(Stream input)
        {
            const Endian endian = Endian.Little;

            var magic1 = input.ReadValueU64(endian);
            var magic2 = input.ReadValueU64(endian);

            if (magic1 != Signature || magic2 != Signature)
            {
                throw new FormatException();
            }

            var instance = new CatalogFile();

            var chunkCount    = input.ReadValueU32(endian);
            var unknown2Count = input.ReadValueU32(endian);
            var unknown3Count = input.ReadValueU32(endian);
            var unknown1C     = input.ReadValueU32(endian);
            var unknown20     = input.ReadValueU32(endian);
            var unknown24     = input.ReadValueU32(endian);

            if (unknown2Count != 0 || unknown1C != 0 || unknown20 != 0 || unknown24 != 0)
            {
                throw new FormatException();
            }

            instance.ChunkEntries.Clear();

            for (int i = 0; i < chunkCount; i++)
            {
                var entry = new ChunkEntry();
                entry.SHA1      = new SHA1(input.ReadBytes(20));
                entry.Offset    = input.ReadValueU32(endian);
                entry.Size      = input.ReadValueU32(endian);
                entry.TailSize  = input.ReadValueU32(endian);
                entry.DataIndex = input.ReadValueU32(endian);
                instance.ChunkEntries.Add(entry);
            }

            for (int i = 0; i < unknown3Count; i++)
            {
                var entry = new Unknown3Entry();
                entry.Unknown0 = new SHA1(input.ReadBytes(20));
                entry.Unknown1 = input.ReadValueU32(endian);
                entry.Unknown2 = input.ReadValueU32(endian);
                entry.Unknown3 = input.ReadValueU32(endian);
                entry.Unknown4 = input.ReadValueU32(endian);
                entry.Unknown5 = input.ReadValueU32(endian);
                entry.Unknown6 = new SHA1(input.ReadBytes(20));
                entry.Unknown7 = new SHA1(input.ReadBytes(20));
                instance.Unknown3s.Add(entry);
            }

            if (input.Position != input.Length)
            {
                throw new FormatException();
            }

            return(instance);
        }
        public void aLoad(Stream fileStream)
        {
            base.Load(fileStream);
            var reader = new ExtendedBinaryReader(fileStream);
            var array  = Instructions[0].GetArgument <byte[]>(1);

            for (int i = 0; i < array.Length / 4; ++i)
            {
                int address = BitConverter.ToInt32(array, i * 4);
                SystemText.Add(reader.ReadStringElsewhere(address));
            }
            array = Instructions[1].GetArgument <byte[]>(1);
            for (int i = 0; i < array.Length / 0x6C; ++i)
            {
                int nameAddress = BitConverter.ToInt32(array, i * 0x6C);
                var entry       = new CGEntry();
                entry.Name          = reader.ReadStringElsewhere(nameAddress);
                entry.ID            = BitConverter.ToInt32(array, i * 0x6C + 0x0004);
                entry.CGID          = BitConverter.ToInt32(array, i * 0x6C + 0x0008);
                entry.CGID2         = BitConverter.ToInt32(array, i * 0x6C + 0x000C);
                entry.Unknown5      = BitConverter.ToUInt32(array, i * 0x6C + 0x0010);
                entry.Unknown6      = BitConverter.ToUInt16(array, i * 0x6C + 0x0014);
                entry.TextureWidth  = BitConverter.ToInt16(array, i * 0x6C + 0x0016);
                entry.TextureHeight = BitConverter.ToInt16(array, i * 0x6C + 0x0018);
                entry.Unknown7      = BitConverter.ToUInt16(array, i * 0x6C + 0x001A);
                entry.Unknown81     = array[i * 0x6C + 0x001C];
                entry.Unknown82     = array[i * 0x6C + 0x001D];
                entry.Unknown83     = array[i * 0x6C + 0x001E];
                entry.Page          = array[i * 0x6C + 0x001F];
                entry.FrameCount    = array[i * 0x6C + 0x0020];
                entry.GameID        = (GameID)array[i * 0x6C + 0x0021];
                entry.Unknown93     = array[i * 0x6C + 0x0022];
                entry.Unknown94     = array[i * 0x6C + 0x0023];
                entry.Unknown10     = BitConverter.ToUInt32(array, i * 0x6C + 0x0024);
                entry.Unknown11     = BitConverter.ToUInt32(array, i * 0x6C + 0x0028);
                entry.Unknown12     = BitConverter.ToUInt32(array, i * 0x6C + 0x002C);
                entry.Unknown13     = BitConverter.ToUInt32(array, i * 0x6C + 0x0030);
                entry.Unknown14     = BitConverter.ToUInt32(array, i * 0x6C + 0x0034);
                entry.Unknown15     = BitConverter.ToUInt32(array, i * 0x6C + 0x0038);
                entry.Unknown16     = BitConverter.ToUInt32(array, i * 0x6C + 0x003C);
                entry.Unknown17     = BitConverter.ToUInt32(array, i * 0x6C + 0x0040);
                entry.Unknown18     = BitConverter.ToUInt32(array, i * 0x6C + 0x0044);
                entry.Unknown19     = BitConverter.ToUInt32(array, i * 0x6C + 0x0048);
                entry.Unknown20     = BitConverter.ToUInt32(array, i * 0x6C + 0x004C);
                entry.Unknown21     = BitConverter.ToUInt32(array, i * 0x6C + 0x0050);
                entry.Unknown22     = BitConverter.ToUInt32(array, i * 0x6C + 0x0054);
                entry.Unknown23     = BitConverter.ToUInt32(array, i * 0x6C + 0x0058);
                entry.Unknown24     = BitConverter.ToUInt32(array, i * 0x6C + 0x005C);
                entry.Unknown25     = BitConverter.ToUInt32(array, i * 0x6C + 0x0060);
                entry.Unknown26     = BitConverter.ToUInt32(array, i * 0x6C + 0x0064);
                entry.Unknown27     = BitConverter.ToUInt32(array, i * 0x6C + 0x0068);
                CGs.Add(entry);
            }

            array = Instructions[2].GetArgument <byte[]>(1);
            for (int i = 0; i < array.Length / 0x10; ++i)
            {
                var entry = new MovieEntry();
                entry.FriendlyName = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x10 + 0));
                entry.FilePath     = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x10 + 4));
                entry.ID           = BitConverter.ToInt32(array, i * 0x10 + 8);
                entry.Unknown4     = array[i * 0x10 + 12];
                entry.GameID       = (GameID)array[i * 0x10 + 13];
                entry.Unknown5     = BitConverter.ToInt16(array, i * 0x10 + 14);
                Movies.Add(entry);
            }

            array = Instructions[3].GetArgument <byte[]>(1);
            for (int i = 0; i < array.Length / 0x10; ++i)
            {
                var entry = new MemoryEntry();
                entry.Name        = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x10 + 0));
                entry.Description = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x10 + 4));
                entry.ID          = BitConverter.ToInt32(array, i * 0x10 + 8);
                entry.GameID      = (GameID)array[i * 0x10 + 12];
                entry.Game        = (MemoryEntry.MemoryGame)array[i * 0x10 + 13];
                Memories.Add(entry);
            }

            array = Instructions[4].GetArgument <byte[]>(1);
            for (int i = 0; i < array.Length / 0x08; ++i)
            {
                var entry = new CharacterEntry();
                entry.FriendlyName = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x08 + 0));
                entry.ID           = BitConverter.ToInt32(array, i * 0x08 + 4);
                Characters.Add(entry);
            }
            array = Instructions[5].GetArgument <byte[]>(1);
            for (int i = 0; i < array.Length / 0x08; ++i)
            {
                var entry = new Unknown2Entry();
                entry.Unknown1 = BitConverter.ToInt32(array, i * 0x08 + 0);
                entry.Unknown2 = BitConverter.ToInt32(array, i * 0x08 + 4);
                Unknown2.Add(entry);
            }
            array = Instructions[6].GetArgument <byte[]>(1);
            for (int i = 0; i < array.Length / 0x06; ++i)
            {
                var entry = new Unknown3Entry();
                entry.ID       = BitConverter.ToInt16(array, i * 0x06 + 0);
                entry.Unknown2 = BitConverter.ToInt32(array, i * 0x06 + 2);
                Unknown3.Add(entry);
            }
            array = Instructions[7].GetArgument <byte[]>(1);
            for (int i = 0; i < array.Length / 0x10; ++i)
            {
                var entry = new VoiceEntry();
                entry.UnknownName  = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x10 + 0));
                entry.KnownName    = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x10 + 4));
                entry.PreferedName = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x10 + 8));
                entry.ID           = BitConverter.ToInt32(array, i * 0x10 + 12);
                Voices.Add(entry);
            }
            array = Instructions[8].GetArgument <byte[]>(1);
            for (int i = 0; i < array.Length / 0x06; ++i)
            {
                var entry = new Unknown4Entry();
                entry.Unknown1 = BitConverter.ToInt16(array, i * 0x06 + 0);
                entry.Unknown2 = BitConverter.ToInt32(array, i * 0x06 + 2);
                Unknown4.Add(entry);
            }
            array = Instructions[9].GetArgument <byte[]>(1);
            for (int i = 0; i < array.Length / 0x14; ++i)
            {
                var entry = new ArtBookPageEntry();
                entry.PagePathThumbnail = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x14 + 0));
                entry.PagePathData      = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x14 + 4));
                entry.Name   = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x14 + 8));
                entry.ID     = BitConverter.ToInt32(array, i * 0x14 + 12);
                entry.GameID = (GameID)BitConverter.ToInt16(array, i * 0x14 + 16);
                entry.Page   = BitConverter.ToInt16(array, i * 0x14 + 18);
                ArtBookPages.Add(entry);
            }
            array = Instructions[10].GetArgument <byte[]>(1);
            for (int i = 0; i < array.Length / 0x1C; ++i)
            {
                var entry = new DramaCDEntry();
                entry.FileName      = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x1C + 0));
                entry.FriendlyName  = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x1C + 4));
                entry.SourceAlbum   = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x1C + 8));
                entry.InternalName  = reader.ReadStringElsewhere(BitConverter.ToInt32(array, i * 0x1C + 12));
                entry.ID            = BitConverter.ToInt16(array, i * 0x1C + 16);
                entry.Game          = (GameID)BitConverter.ToInt16(array, i * 0x1C + 18);
                entry.Unknown7      = BitConverter.ToInt16(array, i * 0x1C + 20);
                entry.SourceTrackID = BitConverter.ToInt16(array, i * 0x1C + 22);
                entry.Unknown9      = BitConverter.ToInt16(array, i * 0x1C + 24);
                DramaCDs.Add(entry);
            }

            return;
        }