Files
llamamod/tools/map_dump.py
T

48 lines
1.7 KiB
Python

#!/usr/bin/env python3
"""Dump the MAP chunk of a level WAD.
map_dump.py level.wad [--strats] [--tiles] [--lights] [--check]
"""
import os
import struct
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import wadtool # noqa: E402
import mapchunk as M # noqa: E402
FX = 4096.0
def load(path):
ch = dict((t.strip(), c) for t, c in wadtool.read(path))
wf = struct.unpack('<I', ch['WFPC'])[0]
vc = M.trak_vertcounts(ch['TRAK'])
return ch, wf, M.parse(ch['MAP'], wf, vc)
def main():
path = sys.argv[1]
ch, wf, m = load(path)
print(f'{os.path.basename(path)}: WFPC={wf:#010x} grid {m["W"]}x{m["H"]} tiles={len(m["tiles"])} '
f'params={len(m["list1"])} lights={len(m["lights"])} nodes={len(m["nodes"])} alts={len(m["alts"])} '
f'strats={len(m["strats"])} paths={len(m["paths"])} rest={len(m["rest"])}')
if '--tiles' in sys.argv:
for i, (t, t2, mdl) in enumerate(zip(m['tiles'], m['tiles2'], m['tilemodel'])):
print(f'T{i:4d} pos=({t[0]:6.1f},{t[1]:5.1f},{t[2]:6.1f}) rot={t[3]:4d} b={t[4]} alt={t[5]} '
f'model={mdl} t2={t2}')
if '--lights' in sys.argv:
for i, l in enumerate(m['lights']):
print('L', i, l)
if '--strats' in sys.argv:
for i, s in enumerate(m['strats']):
rx, ry, rz, x, y, z, code = s[:7]
n, pi = s[7], s[8]
prm = m['list1'][pi:pi + n] if pi >= 0 else []
print(f'S{i:3d} code@{code:#x} pos=({x / FX:7.2f},{y / FX:6.2f},{z / FX:7.2f}) '
f'rot=({rx},{ry},{rz}) params={[hex(p) for p in prm]} rest={s[9:]}')
if __name__ == '__main__':
main()