private int[] ReadOffsets(FirstGenTagTable tags, int count) { var offsets = new int[count]; int i = 0; foreach (FirstGenTag tag in tags) { offsets[i] = tag.FileNameOffset.AsOffset(); i++; } return(offsets); }
private void Load(IReader reader) { _header = LoadHeader(reader, out uint mask); _tags = LoadTagTable(reader, mask); _fileNames = LoadFileNames(reader); _stringIDs = LoadStringIDs(reader); //header doesn't contain a scenario path, but later engines do so might as well grab it ITag scenario = _tags.GetGlobalTag(CharConstant.FromString("scnr")); _header.ScenarioName = _fileNames.GetTagName(scenario.Index); LoadScriptFiles(); }
private void Load(IReader reader, EngineDescription buildInfo, string buildString) { _header = LoadHeader(reader, buildInfo, buildString); _tags = LoadTagTable(reader, buildInfo); _fileNames = LoadFileNames(reader, buildInfo); // firstgen has no StringIDs _stringIDs = LoadStringIDs(reader, buildInfo); // hack to get scenario name reader.SeekTo(MetaArea.Offset); StructureValueCollection values = StructureReader.ReadStructure(reader, buildInfo.Layouts.GetLayout("meta header")); // TODO (Dragon): idk if we should mask this like this var scenarioIndex = (int)values.GetInteger("scenario datum index") & 0xFFFF; _header.ScenarioName = _fileNames.GetTagName(scenarioIndex); }
public FirstGenIndexedStringTable(IReader reader, FirstGenTagTable tags) : base() { int[] offsets = ReadOffsets(tags, tags.Count); // TODO (Dragon): this is kind of hacky now and uses the original reader // rather than a StringReader // Read each string reader.SeekTo(0); for (int i = 0; i < offsets.Length; i++) { if (offsets[i] == -1) { base.Add(null); } else { reader.SeekTo(offsets[i]); string name = reader.ReadAscii(); base.Add(name); } } }