Version 3.2.2: in-memory replacements fill their slots exactly (padded ones played as silence)
This commit is contained in:
@@ -65,8 +65,11 @@ tables): high risk for little gain, not done.
|
||||
- **Model:** one catalog row per Wwise media ID (archive `BANK`, target = media ID), not per bank: the same
|
||||
media is stored in up to dozens of bank copies (banks are cooked into every package that uses them), and the
|
||||
game may load any of them. A replacement is written into **every** copy (`BANK_locations.csv.gz`).
|
||||
- **In place:** each copy keeps its size (zero-padded, like WAD speech); DIDX/HIRC offsets and the package
|
||||
layout never change, so nothing else in the engine data has to be rewritten.
|
||||
- **In place:** each copy keeps its size; DIDX/HIRC offsets and the package layout never change, so nothing
|
||||
else in the engine data has to be rewritten. Unlike WAD speech, an in-memory copy is never zero-padded:
|
||||
the replacement fills its slot exactly with a label list chunk (the game plays a padded in-memory WEM as
|
||||
silence; `docs/formats/banks.md`). Shrinking the declared sizes (DIDX and every Sound object's in-memory
|
||||
size) would also work, but needs every HIRC source of the media in every bank copy located and rewritten.
|
||||
- **Packages:** ackit reads the LZO packages itself (pure Python, ~47 MB/s, block-level access) and writes
|
||||
only the changed 128 KiB blocks, stored as a single LZO literal run (valid LZO1X without matches), then
|
||||
fixes the chunk table. No compressor and no external tool are needed; untouched blocks stay byte-identical.
|
||||
|
||||
Reference in New Issue
Block a user