private void LoadInteropData(StructureValueCollection headerValues)
        {
            // TODO: fix this shit for the h3beta
            SectionOffsetMasks = headerValues.GetArray("offset masks").Select(v => v.GetInteger("mask")).ToArray();
            Sections           = headerValues.GetArray("sections").Select(v => new ThirdGenInteropSection(v)).ToArray();

            DebugPointerConverter     = MakePointerConverter(ThirdGenInteropSectionType.Debug);
            ResourcePointerConverter  = MakePointerConverter(ThirdGenInteropSectionType.Resource);
            TagBufferPointerConverter = MakePointerConverter(ThirdGenInteropSectionType.Tag);
            LocalePointerConverter    = MakePointerConverter(ThirdGenInteropSectionType.Localization);
        }
示例#2
0
        private void Load(StructureValueCollection values, FileSegmenter segmenter)
        {
            segmenter.DefineSegment(0, HeaderSize, 1, SegmentResizeOrigin.Beginning);             // Define a segment for the header
            _eofSegment = segmenter.WrapEOF((int)values.GetInteger("file size"));

            Type = (CacheFileType)values.GetInteger("type");

            LoadInteropData(values);
            RawTable = CalculateRawTableSegment(segmenter);

            InternalName = values.GetString("internal name");
            ScenarioName = values.GetString("scenario name");
            XDKVersion   = (int)values.GetInteger("xdk version");

            FileSegment metaSegment = CalculateTagDataSegment(values, segmenter);

            if (metaSegment != null)
            {
                ulong virtualBase = values.GetInteger("virtual base address");
                MetaArea = new FileSegmentGroup(new MetaAddressConverter(metaSegment, (long)virtualBase));
                MetaArea.AddSegment(metaSegment);

                IndexHeaderLocation = SegmentPointer.FromPointer((long)values.GetInteger("index header address"), MetaArea);
                Partitions          = LoadPartitions(values.GetArray("partitions"));
            }
            else
            {
                Partitions = new Partition[0];
            }

            CalculateStringGroup(values, segmenter);

            Checksum = (uint)values.GetInteger("checksum");
        }
        /// <summary>
        ///     Loads the string list.
        /// </summary>
        /// <param name="reader">The stream to read from.</param>
        private void Load(IReader reader)
        {
            reader.SeekTo(Tag.MetaLocation.AsOffset());
            StructureValueCollection values = StructureReader.ReadStructure(reader, _layout);

            StructureValueCollection[] rangeValues = values.GetArray("language ranges");
            Ranges = rangeValues.Select(v => StringRange.Deserialize(v)).ToArray();
        }
        private List <ThirdGenLanguage> LoadLanguages(StructureValueCollection values, FileSegmenter segmenter,
                                                      EngineDescription buildInfo)
        {
            StructureValueCollection[] languageSet = values.GetArray("languages");

            IEnumerable <ThirdGenLanguage> result =
                languageSet.Select((l, i) => new ThirdGenLanguage((GameLanguage)i, l, segmenter, LocaleArea, buildInfo));

            return(result.ToList());
        }
        private List <SecondGenLanguage> LoadLanguages(StructureValueCollection values, FileSegmenter segmenter,
                                                       EngineDescription buildInfo)
        {
            StructureValueCollection[] languageSet = values.GetArray("languages");

            IEnumerable <SecondGenLanguage> result =
                languageSet.Select((l, i) => new SecondGenLanguage(LanguageRemaps.Keys.ElementAt(i), l, segmenter, LocaleArea, buildInfo));

            return(result.ToList());
        }
示例#6
0
        private void LoadInteropData(StructureValueCollection headerValues)
        {
            // TODO: fix this shit for the h3beta better
            if (headerValues.HasArray("offset masks") && headerValues.HasArray("sections"))
            {
                SectionOffsetMasks = headerValues.GetArray("offset masks").Select(v => (uint)v.GetInteger("mask")).ToArray();
                Sections           = headerValues.GetArray("sections").Select(v => new ThirdGenInteropSection(v)).ToArray();

                // H3 MCC currently doesn't store section data for campaign/shared, so it must be hacked together
                if (_expander.IsValid && (Type == CacheFileType.Shared || Type == CacheFileType.SinglePlayerShared))
                {
                    if (Sections[(int)ThirdGenInteropSectionType.Resource].Size == 0)
                    {
                        Sections[(int)ThirdGenInteropSectionType.Resource].VirtualAddress = (uint)HeaderSize;
                        Sections[(int)ThirdGenInteropSectionType.Resource].Size           = (uint)FileSize - (uint)HeaderSize;
                    }
                }
            }
            else             //else hack up our own sections
            {
                SectionOffsetMasks = new uint[] { 0, 0, 0, 0 };

                ThirdGenInteropSection debugSection = new ThirdGenInteropSection(
                    (uint)headerValues.GetInteger("string index table offset"),
                    (uint)(headerValues.GetInteger("file size") - headerValues.GetInteger("string index table offset")));
                ThirdGenInteropSection resourceSection = new ThirdGenInteropSection(0, 0);                 // this is between locales and tag, so if we had a locale size, this section could be calculated. Using 0's for now seems to work at least
                ThirdGenInteropSection tagSection      = new ThirdGenInteropSection(
                    (uint)headerValues.GetInteger("tag buffer offset"),
                    (uint)headerValues.GetInteger("virtual size"));
                ThirdGenInteropSection localeSection = new ThirdGenInteropSection(
                    (uint)HeaderSize,
                    (uint)headerValues.GetInteger("tag buffer offset"));                     //bs the size for now

                Sections = new ThirdGenInteropSection[] { debugSection, resourceSection, tagSection, localeSection };
            }

            DebugPointerConverter     = MakePointerConverter(ThirdGenInteropSectionType.Debug);
            ResourcePointerConverter  = MakePointerConverter(ThirdGenInteropSectionType.Resource);
            TagBufferPointerConverter = MakePointerConverter(ThirdGenInteropSectionType.Tag);
            LocalePointerConverter    = MakePointerConverter(ThirdGenInteropSectionType.Localization);
        }
示例#7
0
        private void LoadInteropData(StructureValueCollection headerValues)
        {
            // TODO: fix this shit for the h3beta
            SectionOffsetMasks = headerValues.GetArray("offset masks").Select(v => (uint)v.GetInteger("mask")).ToArray();
            Sections           = headerValues.GetArray("sections").Select(v => new ThirdGenInteropSection(v)).ToArray();

            // H3 MCC currently doesn't store section data for campaign/shared, so it must be hacked together
            if (_expander.IsValid && (Type == CacheFileType.Shared || Type == CacheFileType.SinglePlayerShared))
            {
                if (Sections[(int)ThirdGenInteropSectionType.Resource].Size == 0)
                {
                    Sections[(int)ThirdGenInteropSectionType.Resource].VirtualAddress = (uint)HeaderSize;
                    Sections[(int)ThirdGenInteropSectionType.Resource].Size           = (uint)FileSize - (uint)HeaderSize;
                }
            }

            DebugPointerConverter     = MakePointerConverter(ThirdGenInteropSectionType.Debug);
            ResourcePointerConverter  = MakePointerConverter(ThirdGenInteropSectionType.Resource);
            TagBufferPointerConverter = MakePointerConverter(ThirdGenInteropSectionType.Tag);
            LocalePointerConverter    = MakePointerConverter(ThirdGenInteropSectionType.Localization);
        }
示例#8
0
        private List <FourthGenLanguage> LoadLanguages(StructureValueCollection values, FileSegmenter segmenter,
                                                       EngineDescription buildInfo)
        {
            StructureValueCollection[] languageSet = values.GetArray("languages");

            List <FourthGenLanguage> list = new List <FourthGenLanguage>();

            for (int i = 0; i < languageSet.Length; i++)
            {
                list.Add(new FourthGenLanguage((GameLanguage)i, languageSet[i], segmenter, LocaleArea, buildInfo));
            }


            //IEnumerable<FourthGenLanguage> result = languageSet.Select((l, i) => new FourthGenLanguage((GameLanguage) i, l, segmenter, LocaleArea, buildInfo));
            //return result.ToList();
            return(list);
        }