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);
        }
示例#2
0
        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();
        }
示例#3
0
        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);
                }
            }
        }