← Щоденник розробки

Перейменували клас — і герой розучився стріляти

Готуючи експеримент з українською мовою, ми переклали назву класу: «следопыт» стало «слідопит». Ніщо не впало. Майстер далі вів партію, текст читався нормально. Просто герой перестав отримувати бонус за звичну зброю.

Помилки не було. Тесту, який би почервонів, — теж.

Ім’я було ключем

У збереженні в персонажа лежала не позначка класу, а його російська назва. Правила, які дивляться, яка зброя класу звична, брали цю назву й шукали у своїй таблиці. «следопыт» там був. «слідопит» — ні. Відповідності не знайшлося, таблиця повернула порожнє, а порожнє означало «обмежень немає» — і перевірка тихо перестала працювати.

Таких місць у коді було десять. Пошук предмета за назвою. Стан «важкий доспіх», який гра ставить сама й Майстрові ставити не дає. Причина кидка «обставини». Список слів, за яким гра розуміє, що Майстер говорить про групу людей, а не про одну особу. Усе це сходилося за російськими рядками.

Спільне в них одне: зламавшись, вони не скаржаться. Гра не падає й не видає помилки — вона далі гарно розповідає і при цьому перестає дотримуватися власних правил. Доспіх не рахується, клас не заважає надіти те, що мусив би заважати, натовп читається як одна особа. Це найгірший різновид поломки, бо назовні він виглядає як успіх.

Тому порядок робіт вийшов протилежний до очікуваного: спершу розвести механіку й мову, лише потім перекладати текст. Якщо зробити навпаки, вийде гра, яка переконливо говорить англійською і потихеньку не працює.

Розводили так: у кожного предмета з’явився латинський ідентифікатор, у кожного класу та стану — латинський ключ. Назва стала тим, чим і має бути, — способом це показати людині. Майстер так само читає й пише слова, але сходиться все за ключами, тому перекладений каталог і далі підкоряється своїм правилам.

Заразом перевірили старе рішення

П’ятьма днями раніше ми вирішили, що описи у схемі, за якою Майстер відповідає, мають бути російськими: з англійською схемою в російський текст лізли калькові звороти. З цього випливало, що кожна нова мова — це ще одна копія схеми й системного промпту, назавжди.

Вирішили переміряти, перш ніж платити цю ціну третій раз. Дванадцять живих прогонів, дві мови, дві моделі, різна частка англійської в інструкціях — і сліпа оцінка: спершу носій мови, окремо від нього друга модель.

Старе рішення не підтвердилося. Англійська схема з коротким блоком про мову дає нормальну російську й українську. Схоже, тоді допомогло не те, що описи переклали, а дві інші правки, які поїхали в тій самій зміні.

Тож дерево інструкцій тепер одне, англійське, а на мову пишеться блок приблизно на 1800 знаків — замість перекладеного промпту на 11 885 знаків і 13 554 знаків описів. Економія не в грошах: англійська схема довша у знаках і дешевша в токенах (36 015 знаків проти 35 277, але 15 393 токени проти 15 699). Про такі речі не можна судити з довжини тексту — тільки міряти.

А потім ми відкрили три мови, і тести цього не помітили

Далі чесна частина. Ми ввімкнули англійську й українську, 1249 тестів були зеленими, і першого ж дня знайшлося ось що.

Стартовий набір класу приїжджав на екран створення героя російською, а крамниця поруч — обраною мовою. Екран зводить одне з одним за назвою, тому не зійшлося ні разу: 17 рядків із 17 в англійській партії. Снаряження виглядало неодягненим, гроші — незайманими.

Придуманий Майстром шолом в англійській партії їхав у слот тулуба. Шолом визначався за списком російських слів, який на сервері давно став тримовним, а в браузері залишився російським.

Програвши бій, герой отримував шрам — і в англійській партії отримував його російською. Шрами не знімаються, тож це залишається у збереженні назавжди й потім повертається Майстрові як факт.

Окремо варта згадки перевірка, яка мусила все це зловити. Вона перелічувала поля, на які дивиться: заголовок, опис, назва класу, каталог. Поля, у якому була помилка, у переліку не було. Перевірка була зеленою, стоячи впритул до дефекту.

Що ми змінили у звичках

Не перевіряти за списком. Та сама перевірка тепер обходить усю відповідь і свариться на будь-який російський текст, крім кількох свідомо технічних полів; нове поле потрапляє під неї саме, без чиєїсь пам’яті. І ловити треба форму, а не алфавіт: російський список слів перевірка на кирилицю знайшла б, англійський — ні, тому тест тепер забороняє браузеру взагалі дивитися на назву предмета.

І найнудніше: заходити в гру й дивитися. З одинадцяти дефектів жодного не знайшов прогін тестів. Три знайшли живі партії, два — погляд на екран, де поруч виявилися три кампанії трьома мовами, решту — обхід коду парсером замість grep.

Український текст ми пишемо не як носії, і жодна перевірка цього не зловить: суржик збирається з літер, які є в обох алфавітах. Тому якість української в нас перевіряє людина, і так буде завжди. Якщо побачите невдале слово — напишіть, це саме той випадок, коли повідомлення від гравця цінніше за ще один тест.