Edit subtitles and menu text

This commit is contained in:
2026-10-09 22:36:46 +02:00
parent 5d6c2447f7
commit ef68edbe45
40 changed files with 105877 additions and 1291 deletions

View File

@@ -155,23 +155,6 @@ class Scan:
self.issues = [] # (kind, detail)
def _package_names(pkg, start, data):
"""Name table of an uncompressed package."""
out = []
o = pkg.name_offset - start
for _ in range(pkg.name_count):
n = struct.unpack_from("<i", data, o)[0]
o += 4
if n > 0:
out.append(bytes(data[o:o + n - 1]).decode("latin-1"))
o += n
else:
out.append(bytes(data[o:o - 2 * n - 2]).decode("utf-16-le", "replace"))
o += -2 * n
o += 8
return out
def _bkpk_tables(data, packs):
"""BKPK tables (docs/formats/wad.md) embedded in a package: WAD entry -> media offsets/sizes."""
import re
@@ -187,8 +170,9 @@ def _bkpk_tables(data, packs):
packs[entry][mid] = (off, size)
def scan(cooked, progress=None, cooked_banks=None, files=None):
"""Scan every loose bank and package of the game (minutes), or only `files`. Returns a `Scan`."""
def scan(cooked, progress=None, cooked_banks=None, files=None, visit=None):
"""Scan every loose bank and package of the game (minutes), or only `files`. Returns a `Scan`.
`visit(rel, package, start, data)` is called for every package (other scans share the decompression)."""
sc = Scan()
files = bank_files(cooked) if files is None else files
if cooked_banks is None:
@@ -206,8 +190,12 @@ def scan(cooked, progress=None, cooked_banks=None, files=None):
sc.issues.append(("unreadable", "%s: %s" % (rel, e)))
continue
if isinstance(r, Package):
sc.names.update(_package_names(r, start, data))
names, _, exports = r.tables(data, start)
sc.names.update(names) # base names ...
sc.names.update(x.name for x in exports) # ... and numbered object names (Speech_X_04)
_bkpk_tables(data, sc.packs)
if visit:
visit(rel, r, start, data)
banks = list(find_banks(data))
else:
try: