Version 3.2.0: fast lists with loading spinners, names from the game files, INT docs and screenshots, cleanup
This commit is contained in:
@@ -77,7 +77,7 @@ tables): high risk for little gain, not done.
|
||||
ackit wrote.
|
||||
- **Prefetch heads:** 396 speech lines (about 79 per language) have their first bytes copied into banks; a
|
||||
replacement of such a line rewrites those heads too, otherwise the start would play the old line.
|
||||
- **Names:** the hash list names none of these media. Names come from Wwise events whose names are in the
|
||||
- **Names:** no list names these media. Names come from Wwise events whose names are in the
|
||||
packages' name and export tables (FNV-1 of the name = event ID), following event -> action -> containers ->
|
||||
sounds (6,456 sounds); the rest are numbered per bank. Categories use the bank name. A localized speech line
|
||||
has the same name in every language (its line, section 5).
|
||||
@@ -111,6 +111,9 @@ copy per voice language) is filtered the same way, so the sound list never mixes
|
||||
## 5. Catalog
|
||||
- Shipped CSVs per archive (names, categories, characters, original size + checksum) make loading instant and
|
||||
enable change detection; any other build is scanned at runtime (header reads only, cached).
|
||||
- Names come from the game files only: a WAD entry or stream pack is named after its soundbank in the game's
|
||||
`CookedBanks.txt` (entry ID = FNV-1 of the bank name; this gives exactly the names of the community hash list
|
||||
the toolkit used to ship, which was removed), speech lines after their events (below).
|
||||
- Verified speakers come only from the user's lists; name-based character inference is kept in a separate field.
|
||||
- Voice lines are identified by the game's own data, not by names or positions (`docs/formats/banks.md`,
|
||||
*Lines*): the recordings that are sources of the same Wwise Sound objects are one line, with exactly one
|
||||
@@ -159,8 +162,13 @@ copy per voice language) is filtered the same way, so the sound list never mixes
|
||||
- Background: the wallpaper sits only behind the filter panel, scaled to the panel height so its left part fills
|
||||
the panel, under a light veil. Settings -> Background toggles it and sets its strength (default 10 %).
|
||||
- Loading feedback stays where the work is, never modal: a spinner inside the waveform being loaded (sound or
|
||||
replacement file, decoded off the GUI thread), next to the Apply/Revert buttons while encoding/writing, and in
|
||||
the status bar for game loading and bulk changes.
|
||||
replacement file, decoded off the GUI thread), next to the Apply/Revert buttons while encoding/writing, over
|
||||
a list while it loads (the sound list at start and on a language change, the subtitles / menu text of a
|
||||
language, read off the GUI thread), and in the status bar for game loading and bulk changes.
|
||||
- Lists filter and sort in Python, not with Qt's QSortFilterProxyModel (`app/models.py: RowView`): the view
|
||||
computes the visible rows in one pass and one sort over cached keys (~10-20 ms for 21,000 sounds; the Qt
|
||||
proxy called back into Python for every comparison: up to 1.5 s per sort or widened filter). Rows a filter
|
||||
shows again keep their sorted place; selection and the current row survive every change.
|
||||
All filter selectors (including Character) are plain, non-editable drop-downs so they look and behave alike.
|
||||
|
||||
## 8. Verification
|
||||
|
||||
Reference in New Issue
Block a user