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); }
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()); }
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); }
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); }
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); }