2.5 KiB
2.5 KiB
CLAUDE.md
Batman: Arkham City (PC) audio toolkit + editor. Read NOTES.md first (status, next steps, environment).
- Layout:
ackit/library + CLI (python -m ackit -h),app/PySide6 editor,tests/pytest,data/catalog/CSVs (+ user's original lists indata/catalog/source/, never edit them),docs/,tools/build scripts. - Dev env:
.venv(Python 3.14,pip install -e .[app,dev,verify]). Run tests with.venv/Scripts/python -m pytest -q. - Writing game files goes through
ackit.workspace.Workspaceonly (originals store, atomic writes, conflict checks). Speech/ambience: in place, never larger than the original WEM; music packs: any size (docs/formats/wad.md). In-memory sounds (archive BANK, loose.bnk+.upkpackages): in place into every copy; a bank file is always rebuilt from the store's original copy + the applied replacements (docs/formats/banks.md,upk.md). Texts go throughWorkspace.texts(subtitles in packages, in place and NUL-padded; menu.intfiles). - Never use Steam "verify integrity". Keep game files original after tests (
ackit status,ackit revert --all). - Real-game checks:
ackit verify(offline),ackit verify --catalog [--quick](catalog vs game files),ackit verify --ingame [--banks | --texts](Windows; needs Steam running and logged in, WinDbg; ~1.5 min; reverts and checks byte-identity itself). - Rebuild catalogs only from original game files:
python tools/build_catalog.py(~5 min, scans all packages; stops if a sound differs from the current catalog). Voice lines are identified by the game's Wwise Sound objects (ackit/lines.py, columnline; one recording per language), never by WAD position or name: positions differ per language (docs/decisions.md5,docs/formats/banks.mdLines). - Figures in the docs are checked, not copied: after changing data, code or docs run
python tools/check_docs.py(--scan: also the bank survey and the catalog check's facts, ~10 min;--wems: every WEM rebuilt, ~10 min); add a claim there for every new figure. - Real-game write round trips:
python tools/e2e_features.py,python tools/e2e_editor.py(they revert in afinallyblock; still checkackit statusafter any interrupted run). - Shell: git at
C:\Program Files\Git\cmd(prepend to PATH). Write Python with the Write/Edit tools; avoid PowerShell here-strings and heredoc string surgery with backslash escapes (they produced NUL bytes before). - The speaker loopback can contain other apps' audio (voice chat): never save raw captures.