Version 3.1.0: voice lines linked across all languages from the game data
This commit is contained in:
@@ -70,8 +70,8 @@ Conclusion: approach A works end-to-end in-game. Use >= 30 s probes for the intr
|
||||
expects WAVEFORMATEX order (FL FR FC LFE BL BR) is unverified (identical-channel probes were used).
|
||||
16. (2026-10-09) The WADs hold only streamed audio. About 15,800 more sounds (footsteps, foley, combat, weapons,
|
||||
UI, grunts) are in-memory WEMs inside soundbanks: 65 loose `SFX\*.bnk` (1,117) and 3,340 banks embedded in
|
||||
the `.upk` packages (15,641; many banks copied into several packages). None are in the catalog; the WAD
|
||||
side is complete. Inventory, layout and editing consequences: `docs/formats/banks.md`.
|
||||
the `.upk` packages (15,641; many banks copied into several packages). None were in the catalog then (they
|
||||
are now: archive BANK); the WAD side was complete. Inventory and layout: `docs/formats/banks.md`.
|
||||
17. (2026-10-09) Speech lines have **per-language media IDs**: every package carries one BKPK table per language
|
||||
for the same WAD entry. 396 lines (78-80 per language) have a prefetch head (first N bytes) in banks; each
|
||||
head equals the start of exactly one language's WEM.
|
||||
@@ -95,12 +95,25 @@ Conclusion: approach A works end-to-end in-game. Use >= 30 s probes for the intr
|
||||
Position names (NAME_i, wemscan) therefore mean different lines per language. Speech sounds are now named
|
||||
after their speech event (same in every language); the curated ITA lists are mapped through it. Independent
|
||||
check: the speaker field of the dialogue objects agrees with the mapped labels for 955 / 955 lines.
|
||||
(Superseded by 22: the identity of a line now comes from the Sound objects, for every recording.)
|
||||
21. (2026-10-10) In-memory speech banks are localized (language list + one bank per language in one AkBank
|
||||
export, checked on 215 banks against the WAD languages of their streamed lines); 41 more subtitles are
|
||||
RSubtitle objects linked through RSubtitleLookup (key = FNV-1 of the line name without `Speech_`). Subtitle
|
||||
coverage by category is uneven in the game itself: efforts 0 %, combat barks 11 %, cinematics 10 % (cutscene
|
||||
lines are mostly not reached by speech events and have no dialogue object), story/predator/open world ~90 %+.
|
||||
|
||||
22. (2026-10-10) **One recording per language, from the game data alone** (`docs/formats/banks.md`, *Lines*).
|
||||
The BKPK tables of a speech entry sit inside the localized AkBank export, one per declared language; they
|
||||
used to be merged by media ID, but 657 media IDs are used by several languages at different positions, so
|
||||
the last language read (ESN) overwrote the others (120-157 WEMs per language looked unreferenced). Kept per
|
||||
language: 10,816 / 10,816 WEMs matched in every language. Prefetch sources were left out of the Sound-object
|
||||
map, which hid the 396 prefetched lines (game-over taunts). Five recordings per language are stored twice
|
||||
(same media ID in two entries, identical bytes). Subtitle objects name events no package lists (FNV-1 of the
|
||||
name = event ID: Vicki Vale's radio reports, Hush tape reveal). Result: 12,434 lines with exactly one
|
||||
recording in each of the 5 languages, no conflict; independent checks: 54,055 / 54,055 WAD recordings are
|
||||
sources in a bank of their own language, 2,101 / 2,101 prefetch heads equal the start of their recording,
|
||||
every linked subtitle is on the same line in all 11 languages.
|
||||
|
||||
## Old path -> new path
|
||||
`scripts/harness.py` -> `ackit verify --ingame` (ackit/verify/ingame.py); `scripts/validate_builder.py` ->
|
||||
`ackit/verify/selfcheck.py` + tests/test_realgame.py; `ackit/gamefiles.py` -> `ackit/game.py` + `ackit/originals.py`;
|
||||
|
||||
Reference in New Issue
Block a user