public cache_file_resource_layout_table(CacheBase Cache, int Offset)
        {
            EndianReader Reader = Cache.Reader;

            Reader.SeekTo(Offset);

            #region Shared Cache Block
            Reader.SeekTo(Offset + 12);
            int iCount  = Reader.ReadInt32();
            int iOffset = Reader.ReadInt32() - Cache.Magic;
            for (int i = 0; i < iCount; i++)
            {
                SharedCaches.Add(new SharedCache(Cache, iOffset + 264 * i));
            }
            #endregion

            #region Page Block
            Reader.SeekTo(Offset + 24);
            iCount  = Reader.ReadInt32();
            iOffset = Reader.ReadInt32() - Cache.Magic;
            for (int i = 0; i < iCount; i++)
            {
                Pages.Add(new Page(Cache, iOffset + 88 * i));
            }
            #endregion

            #region SoundRawChunk Block
            Reader.SeekTo(Offset + 36);
            iCount  = Reader.ReadInt32();
            iOffset = Reader.ReadInt32() - Cache.Magic;
            for (int i = 0; i < iCount; i++)
            {
                SoundRawChunks.Add(new SoundRawChunk(Cache, iOffset + 16 * i));
            }
            #endregion

            #region RawLocation Block
            Reader.SeekTo(Offset + 48);
            iCount  = Reader.ReadInt32();
            iOffset = Reader.ReadInt32() - Cache.Magic;
            for (int i = 0; i < iCount; i++)
            {
                Segments.Add(new Segment(Cache, iOffset + 16 * i));
            }
            #endregion
        }
        public cache_file_resource_layout_table(CacheBase Cache, int Address)
        {
            EndianReader Reader = Cache.Reader;

            Reader.SeekTo(Address);

            #region Shared Cache Block
            Reader.SeekTo(Address + 12);
            int iCount  = Reader.ReadInt32();
            int iOffset = Reader.ReadInt32() - Cache.Magic;
            for (int i = 0; i < iCount; i++)
            {
                SharedCaches.Add(new SharedCache(Cache, iOffset + 264 * i));
            }
            #endregion

            #region Page Block
            Reader.SeekTo(Address + 24);
            iCount  = Reader.ReadInt32();
            iOffset = Reader.ReadInt32() - Cache.Magic;
            for (int i = 0; i < iCount; i++)
            {
                Pages.Add(new Page(Cache, iOffset + 88 * i));
            }
            #endregion

            #region Segment Block
            Reader.SeekTo(Address + 48);
            iCount  = Reader.ReadInt32();
            iOffset = Reader.ReadInt32() - Cache.Magic;
            for (int i = 0; i < iCount; i++)
            {
                Segments.Add(new Segment(Cache, iOffset + 24 * i));
            }
            #endregion
        }