Exemple #1
0
        private void ResolveTexNames()
        {
            foreach (var texture in _bsp.GetLump <TexDataLump>().Data)
            {
                var  name = new StringBuilder();
                char nextchar;
                var  stringtableoffset = _bsp.GetLump <TexDataStringTableLump>().Data[texture.StringTablePointer];
                do
                {
                    nextchar = Convert.ToChar(_bsp.GetLump <TexDataStringDataLump>().Data[stringtableoffset]);
                    name.Append(nextchar);
                    stringtableoffset++;
                } while (nextchar != '\0');

                texture.TexName = name.ToString();
            }
        }
Exemple #2
0
        private void ConstructTexDataLumps()
        {
            // TODO: this is shit
            // TODO: check obeys source limits
            List <string> texStrings = new();

            var texdata = _bsp.GetLump <TexDataLump>().Data;

            List <int> stringTable = new();
            var        stringData  = new char[256 * 1000];
            var        pos         = 0;

            // loop through every texture name
            foreach (var tex in texdata)
            {
                // at start of texture string, put its loc in stringtable
                stringTable.Add(pos);

                tex.StringTablePointer = pos;

                foreach (var c in tex.TexName)
                {
                    stringData[pos] = c;
                    pos++;
                }
                // string includes a null byte at end, right?
                // stringData[pos] = '\0';
                // pos++;
            }

            var finalArray = new byte[pos];

            for (var i = 0; i < pos; i++)
            {
                finalArray[i] = (byte)stringData[i];
            }

            _bsp.GetLump <TexDataStringDataLump>().Data  = finalArray;
            _bsp.GetLump <TexDataStringTableLump>().Data = stringTable;
        }