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