"""Regenerate sprite names and pose counts from the pmd-red decompilation. Usage: python3 tools/gen_pmd_sprite_catalog.py ../pmd-red No graphics or ROM bytes are copied into the generated catalog. """ import pathlib import re import sys root = pathlib.Path(sys.argv[1]) headers = {} for path in (root / "src/data/ax").glob("*.h"): source = path.read_text() symbol = re.search(r"const SiroArchive (gAx\w+)", source)[1] poses = re.search(r"\.poses = (\w+)", source)[1] body = re.search(r"const ax_pose \*const " + poses + r"\[\] = \{(.*?)\};", source, re.S)[1] headers[symbol] = len(re.findall(r"\w+", body)) rows = re.findall(r'\[MONSTER_(\w+) - 1\] = \{ "ax(\d+)", &(\w+),', (root / "src/monster_files_table.c").read_text()) assert len(rows) == 423 out = ["-- Generated by tools/gen_pmd_sprite_catalog.py from pmd-red src/data/ax.", "return {"] for name, number, symbol in rows: out.append(f' [{int(number)}] = {{ id = "{name.lower()}", poses = {headers[symbol]} }},') out.append("}\n") target = pathlib.Path("src/import/pmd/Catalog.lua") target.parent.mkdir(parents=True, exist_ok=True) target.write_text("\n".join(out))