def read_texture_names(self):
"""Iterate through all brush textures in the map."""
tex_data = self.get_lump(BSP_LUMPS.TEXDATA_STRING_DATA)
tex_table = self.get_lump(BSP_LUMPS.TEXDATA_STRING_TABLE)
# tex_table is an array of int offsets into tex_data. tex_data is a
# null-terminated block of strings.
table_offsets = struct.unpack(
# The number of ints + i, for the repetitions in the struct.
str(len(tex_table) // struct.calcsize('i')) + 'i',
tex_table,
)
for off in table_offsets:
# Look for the NULL at the end - strings are limited to 128 chars.
str_off = 0
for str_off in range(off, off + 128):
if tex_data[str_off] == 0:
yield tex_data[off: str_off].decode('ascii')
break
else:
# Reached the 128 char limit without finding a null.
raise ValueError('Bad string at', off, 'in BSP! ("{}")'.format(
tex_data[off:str_off]
))
评论列表
文章目录