48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""MAP-Chunk eines Level-WADs ausgeben.
|
|
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()
|