private void Load(StructureValueCollection values)
 {
     Magic = (int)values.GetNumber("magic");
     ParentMagic = (int)values.GetNumber("parent magic");
     GrandparentMagic = (int)values.GetNumber("grandparent magic");
     Description = new StringID((int)values.GetNumberOrDefault("stringid", 0));
 }
        private HeaderOffsetConverter LoadHeaderOffsetConverter(StructureValueCollection values)
        {
            // Only apply a modifier if the original raw table offset wasn't zero
            StringOffsetMagic = (uint)HeaderSize;
            if (values.HasNumber("raw table offset") && values.GetNumber("raw table offset") > 0)
                StringOffsetMagic = values.GetNumberOrDefault("string offset magic", (uint)HeaderSize);

            return new HeaderOffsetConverter(this);
        }
 private IndexOffsetConverter LoadIndexOffsetConverter(StructureValueCollection values)
 {
     LocaleOffsetMask = values.GetNumberOrDefault("locale offset magic", 0);
     return new IndexOffsetConverter(this);
 }
        private void Load(StructureValueCollection values)
        {
            _addrConverter = LoadAddressConverter(values);
            _indexConverter = LoadIndexOffsetConverter(values);
            _stringOffsetConverter = LoadHeaderOffsetConverter(values);

            FileSize = values.GetNumber("file size");
            IndexHeaderLocation = new Pointer(values.GetNumber("index header address"), _addrConverter);
            MetaSize = values.GetNumber("virtual size");
            Type = (CacheFileType)values.GetNumber("type");

            StringIDCount = (int)values.GetNumber("string table count");
            StringIDTableSize = (int)values.GetNumber("string table size");
            StringIDIndexTableLocation = new Pointer(values.GetNumber("string index table offset"), _stringOffsetConverter);
            StringIDDataLocation = new Pointer(values.GetNumber("string table offset"), _stringOffsetConverter);

            InternalName = values.GetString("internal name");
            ScenarioName = values.GetString("scenario name");

            FileNameCount = (int)values.GetNumber("file table count");
            FileNameDataLocation = new Pointer(values.GetNumber("file table offset"), _stringOffsetConverter);
            FileNameTableSize = (int)values.GetNumber("file table size");
            FileNameIndexTableLocation = new Pointer(values.GetNumber("file index table offset"), _stringOffsetConverter);

            XDKVersion = (int)values.GetNumber("xdk version");
            Partitions = LoadPartitions(values.GetArray("partitions"));

            LocaleDataLocation = new Pointer(values.GetNumberOrDefault("locale data index offset", (uint)HeaderSize), _indexConverter);
            LocaleDataSize = (int)values.GetNumberOrDefault("locale data size", 0);
        }