Files
gen1recomp/tools/gen_pmd_sprite_catalog.py
bryanthaboi dee935a4ea CLOSES #2430
2026-09-23 11:58:32 -04:00

29 lines
1.1 KiB
Python

"""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))