feat: translate first four tutorial stages for in-game trial
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
"""Verify the bounded first tutorial translation against an original backup."""
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
from script_text import extract_display_literals, patch_display_calls
|
||||
|
||||
ORIGINAL_SHA256 = 'bd959758223b976ffac35b4ef7d94661f62060c1134316eddb559772d544e02c'
|
||||
|
||||
|
||||
def main():
|
||||
p = argparse.ArgumentParser(description=__doc__)
|
||||
p.add_argument('mode', choices=['baseline', 'modified', 'rollback'])
|
||||
p.add_argument('original', type=Path)
|
||||
p.add_argument('candidate', type=Path)
|
||||
args = p.parse_args()
|
||||
source, result = args.original.read_bytes(), args.candidate.read_bytes()
|
||||
assert hashlib.sha256(source).hexdigest() == ORIGINAL_SHA256, 'original hash mismatch'
|
||||
if args.mode in ('baseline', 'rollback'):
|
||||
assert result == source, 'original bytes not restored'
|
||||
assert extract_display_literals(result)[0].text == 'Tutorial'
|
||||
print(args.mode.upper() + ': original bytes and English tutorial restored; PASS')
|
||||
return
|
||||
mapping = json.loads(Path(__file__).with_name('tutorial_cn.json').read_text(encoding='utf-8'))
|
||||
assert result == patch_display_calls(source, mapping), 'build mismatch'
|
||||
before = extract_display_literals(source)
|
||||
after = extract_display_literals(result, encoding='gb2312')
|
||||
assert len(before) == len(after) == 55
|
||||
changed = []
|
||||
left = right = 0
|
||||
for i, (a, b) in enumerate(zip(before, after)):
|
||||
assert source[left:a.start] == result[right:b.start], 'non-display bytes changed'
|
||||
assert (a.call, a.argument) == (b.call, b.argument)
|
||||
if a.text != b.text:
|
||||
changed.append(i)
|
||||
assert b.text == mapping[a.text]
|
||||
else:
|
||||
assert source[a.start:a.end] == result[b.start:b.end]
|
||||
left, right = a.end, b.end
|
||||
assert source[left:] == result[right:], 'trailing bytes changed'
|
||||
assert changed == list(range(12)), changed
|
||||
print('MODIFIED: first 12 of 55 literals translated; all other bytes unchanged; PASS')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user