Version 3.1.0: voice lines linked across all languages from the game data
This commit is contained in:
@@ -73,6 +73,10 @@ class Workspace:
|
||||
return self.catalog.locations.get(int(target, 16), [])
|
||||
return self.catalog.heads.get(key, [])
|
||||
|
||||
def copies(self, s):
|
||||
"""Other places of the same recording in the WAD (written and reverted together with `s`)."""
|
||||
return self.catalog.copies.get(s.key, [])
|
||||
|
||||
def files(self, s):
|
||||
"""Absolute paths of the game files that writing `s` changes."""
|
||||
out = []
|
||||
@@ -80,7 +84,7 @@ class Workspace:
|
||||
out.append(self.wad_path(s))
|
||||
if s.is_pack_media:
|
||||
out.append(pack_bnk_path(self.wad_path(s), parse_target(s.target)[0]))
|
||||
out += sorted({self.bank_path(l.file) for l in self.locations(s)})
|
||||
out += sorted({self.bank_path(l.file) for x in [s] + self.copies(s) for l in self.locations(x)})
|
||||
return out
|
||||
|
||||
def current_bytes(self, s):
|
||||
@@ -286,7 +290,11 @@ class Workspace:
|
||||
self.sync_files(files, progress)
|
||||
|
||||
def apply(self, changes, force=False, progress=None):
|
||||
"""changes: [(sound, wem_bytes, meta dict)]. One atomic rewrite per WAD / bank file."""
|
||||
"""changes: [(sound, wem_bytes, meta dict)]. One atomic rewrite per WAD / bank file. A recording stored
|
||||
in two places of a WAD gets the same bytes in both (Workspace.copies)."""
|
||||
keys = {s.key for s, _, _ in changes}
|
||||
changes = list(changes) + [(c, data, meta) for s, data, meta in changes for c in self.copies(s)
|
||||
if c.key not in keys]
|
||||
conflicts = []
|
||||
for s, _, _ in changes:
|
||||
if self.state(s) in (CHANGED, FOREIGN):
|
||||
@@ -306,6 +314,8 @@ class Workspace:
|
||||
"""Put the stored originals back (sounds without a record are skipped). Returns reverted."""
|
||||
by_arch = defaultdict(list)
|
||||
done = []
|
||||
keys = {s.key for s in sounds}
|
||||
sounds = list(sounds) + [c for s in sounds for c in self.copies(s) if c.key not in keys]
|
||||
for s in sounds:
|
||||
orig = self.store.original(s.key)
|
||||
if orig is None:
|
||||
|
||||
Reference in New Issue
Block a user