Edit subtitles and menu text
This commit is contained in:
@@ -16,7 +16,7 @@ import hashlib
|
||||
import os
|
||||
import random
|
||||
|
||||
from .. import banks, classify
|
||||
from .. import banks, classify, subtitles
|
||||
from ..catalog import (Catalog, available_archives, bank_sounds, hash_names, head_owners, is_shipped, load_characters,
|
||||
scan_archive)
|
||||
from ..inject import read_target
|
||||
@@ -102,7 +102,9 @@ def check_banks(rep, game, rows, locations, characters, quick=False, sample=40,
|
||||
pk = [f for f in files if f.lower().endswith(".upk")]
|
||||
rnd = random.Random(1)
|
||||
files = [f for f in files if f.startswith("SFX/")] + sorted(rnd.sample(pk, min(sample, len(pk))))
|
||||
sc = banks.scan(game.cooked, progress, files=files)
|
||||
col = subtitles.Collector()
|
||||
sc = banks.scan(game.cooked, progress, files=files, visit=col)
|
||||
check_subtitles(rep, game, col, set(files), quick)
|
||||
owners = head_owners(game, sc)
|
||||
index = collections.defaultdict(set)
|
||||
for m, ls in locations.items():
|
||||
@@ -135,6 +137,44 @@ def check_banks(rep, game, rows, locations, characters, quick=False, sample=40,
|
||||
rep.add(banks.ARCHIVE, "copies", "%08X" % m, "prefetch head without a speech line")
|
||||
|
||||
|
||||
def check_subtitles(rep, game, col, files, quick):
|
||||
"""Subtitle copies found in the scanned packages vs SUB_locations + the SUB_<LANG>.csv texts."""
|
||||
from ..catalog import _shipped_index, catalog_dir
|
||||
loc_path = os.path.join(catalog_dir(), subtitles.LOCATIONS)
|
||||
if not os.path.exists(loc_path) or not is_shipped(game, banks.ARCHIVE):
|
||||
return
|
||||
index = collections.defaultdict(set)
|
||||
for k, ls in subtitles.read_locations(loc_path).items():
|
||||
for l in ls:
|
||||
if l.file in files:
|
||||
index[k].add((l.file, l.pos, l.size))
|
||||
found, texts = collections.defaultdict(set), {}
|
||||
for speech, copies in col.dialogues.items():
|
||||
for rel, d in copies:
|
||||
for f in d.fields:
|
||||
k = subtitles.key(f.lang, speech, f.index)
|
||||
found[k].add((rel, f.pos, f.size))
|
||||
texts[k] = f.text
|
||||
for k in sorted(set(found) | set(index)):
|
||||
if found.get(k, set()) != index.get(k, set()):
|
||||
rep.add("SUB", "copies", k, "index %d, game %d" % (len(index.get(k, ())), len(found.get(k, ()))))
|
||||
langs = sorted(_shipped_index().get("SUB", {}).get("lines", {}))
|
||||
for lang in langs:
|
||||
p = os.path.join(catalog_dir(), "SUB_%s.csv" % lang)
|
||||
rows = subtitles.read_texts(p, lang)
|
||||
rep.checked["SUB_" + lang] += len(rows)
|
||||
seen = set()
|
||||
for s in rows:
|
||||
k = subtitles.key(lang, s.speech, s.line)
|
||||
if k in seen:
|
||||
rep.add("SUB", "duplicate", k)
|
||||
seen.add(k)
|
||||
if k in texts and texts[k] != s.text:
|
||||
rep.add("SUB", "text", k, "catalog %r, game %r" % (s.text[:40], texts[k][:40]))
|
||||
if s.sound and not s.sound.startswith(lang + ":") and not s.sound.startswith("INT:"):
|
||||
rep.add("SUB", "language", k, "linked to %s" % s.sound)
|
||||
|
||||
|
||||
def run(game, archives=None, quick=False, log=print, progress=None):
|
||||
"""Check the given archives (default: all). Returns a Report."""
|
||||
rep = Report()
|
||||
|
||||
Reference in New Issue
Block a user