#!/usr/bin/env python3 """Table strat type x level (instance count) across all level WADs. strat_table.py wads_dir > table.md""" import glob import os import sys from collections import defaultdict sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) import strats # noqa: E402 wads = sorted(glob.glob(os.path.join(sys.argv[1], 't*.wad'))) tab = defaultdict(dict) avail = defaultdict(set) lv = [] for w in wads: name = os.path.basename(w)[:-4].lower() try: ch, wf, m, lo, types = strats.level_types(w) except KeyError: continue lv.append(name) for nm, ss in types.items(): tab[nm][name] = len(ss) for o, nm in strats.all_named(ch['STPC'], lo): avail[nm].add(name) short = [l[1:].replace('i0m', '/').replace('l', '').replace('m00', '/') for l in lv] print('| Type | Level (MAP instances) | Σ | in code of n levels |') print('|---|---|---|---|') for nm in sorted(tab, key=lambda k: (-len(tab[k]), k)): cells = ' '.join(f'{l[1:]}:{tab[nm][l]}' for l in lv if l in tab[nm]) base = nm.replace('(spawn)', '') print(f'| {nm} | {cells} | {sum(tab[nm].values())} | {len(avail.get(base, ()))} |') print() print('Only in code (never placed directly in MAP):', ', '.join(sorted(n for n in avail if n not in {k.replace("(spawn)", "") for k in tab})))