Star Wars: Battlefront II (Classic, 2005)

В роботіТекстова UAv1.01

Текстовий українізатор Star Wars: Battlefront II (Classic, 2005). Кирилицю намальовано напряму символами Unicode й підібрано під стиль оригінальних шрифтів гри, для читабельності шрифти збільшено. Технічна частина завершена: переклад, шрифти й розкладка інтерфейсу під широкий екран підтверджені в грі.

Плейліст4 відео

Про проєкт

Текстовий українізатор для Star Wars: Battlefront II (Classic, 2005) — другої частини класичної серії. Формат файлів спільний із першою частиною, тож інструментарій для тексту й шрифтів уже готовий і перевірений.

Статус: технічна частина повністю завершена — переклад, кирилиця в шрифтах і розкладка інтерфейсу під широкий екран підтверджені в грі. Поточна версія — 1.01.

👀 Пре-альфа, ще до будь-яких виправлень розкладки

Тест пре-альфи — до виправлень інтерфейсу. Знято до початку роботи над розкладкою під широкий екран, тому на записі помітні “наїжджання” елементів меню одне на одне.

Шрифти

Кирилицю намальовано заново, напряму символами Unicode — кожна літера отримала власне місце в шрифтовому атласі гри, а не запозичена з чужих мов і не “влаштована” поверх латиниці. Малюнок літер узято з двох шрифтів, підібраних за товщиною штриха й формою під стиль оригінальних шрифтів гри: Unbounded — для gamefont_large, gamefont_medium і gamefont_small, та Exo 2 — для найдрібніших gamefont_tiny/gamefont_super_tiny. Обидва поширюються за ліцензією SIL Open Font License.

Оригінальні шрифти Battlefront II дуже дрібні — гра розроблялась під роздільність 800×600. Пряме перенесення кирилиці такого ж розміру означало б ледь читабельний текст на сучасних екранах, тож шрифти додатково збільшено:

Шрифт гри Оригінальний розмір (px) Український розмір (px) Приріст
gamefont_large (заголовки) 21 32 +52%
gamefont_medium (основний текст меню) 18 27 +50%
gamefont_small (підписи, дрібний текст) 17 26 +53%
gamefont_tiny / gamefont_super_tiny (найдрібніший текст) 12 19 +58%

Коефіцієнт збільшення (приблизно ×1,5) підібраний емпірично — за результатом читабельності на сучасних екранах, а не виведений математично як оптимальний. Це не позначилось на якості: усі кириличні знаки перевірені в грі й мають правильні пропорції, просто сам коефіцієнт у майбутньому можна ще уточнити.

Чому потрібні ручні правки інтерфейсу

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

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

На відміну від першої частини, де довший за оригінал переклад підганяється посимвольно (розмір гліфа, кернінг, підбір шрифту), у Battlefront II додана довжина тексту найчастіше впирається не в сам текст, а в прив’язані елементи інтерфейсу — підкладку заголовка, сусідню кнопку, контейнер списку, — тож і виправляти доводиться саме розкладку цих елементів, а не тільки шрифт. Саме тому вичитка, хоч і проведена в файлах гри, остаточно підтверджується не одномоментно, а поступово — при повному проходженні гри наживо; якщо після релізу випливуть нові випадки обрізання тексту на екранах, або коли тягнеться інший рядок по “сенсу фрази”, які ще не траплялись під час тестування, вони підуть в технічне оновлення.

Що лишилося англійською (і чому)

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

  • окремі слова, пов’язані зі змінними чи клавішами, або такі, для яких неможливо достовірно визначити, в який саме момент вони виводяться на екран (наприклад, Delete, On, Off);
  • текст, «запечений» безпосередньо у відеоролики — вступний crawl, назви внутрішньоігрових журналів. Це не субтитри поверх відео, а частина самого файлу ролика, тож для заміни знадобилось би перекодовувати відео, а не редагувати рядок тексту.

Обсяг роботи

У грі 162 екрани меню. Автоматична перевірка — яка запускає скрипти самої гри й порівнює розкладку елементів до і після зміни роздільності — знайшла:

  • 15 екранів із дефектами розташування через зміну роздільності — 373 окремих випадки (228 накладень елементів одне на одне + 145 випадків, коли елемент випадає за межі своєї панелі);
  • окремий, ширший клас дефектів — заголовки й кнопки з підкладкою, розрахованою на старий, дрібний шрифт, задіяні щонайменше на 33 екранах.

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

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

  • зникнення субтитрів вступних роликів кампанії на будь-якій роздільності, відмінній від 4:3/5:4 — підтверджений баг оригінальної гри, відтворюється і на чистих, немодифікованих файлах;
  • зазор між підписом “Кількість бійців” і кнопкою “Відродження” на екрані вибору бійця, який довелось додати, бо збільшений кириличний шрифт наїжджав на кнопку;
  • відступ переліку класів для найму від верху екрана на тому самому екрані вибору бійця, за замовчуванням притиснутий впритул;
  • обрізання тексту кнопки “Перезапустити місію” в меню паузи та підказки “Голос. за вигнання” в лобі мережевої гри.

Рекомендована роздільність екрана

Виправлення розкладки побудоване й перевірене саме під 1920×1080: кожне значення координат елементів меню вимірювалось і підтверджувалось скріншотами на цій роздільності. Гра сама не вміє коректно обробляти цю роздільність, тож для найкращого відображення з новими шрифтами обов’язково зробіть наступне — у властивостях гри в бібліотеці Steam, у полі “Параметри запуску”, додайте:

-resolution 1920 1080

(На інших роздільностях гра може працювати, але ідеальність розкладки меню не гарантується.)

Особливості локалізації

  • Власне бачення: фанатська ініціатива, без узгоджень з офіційною чи іншими неофіційними локалізаціями Star Wars.
  • Спільна основа з першою частиною: формат файлів той самий, що й у Battlefront (2004), тож інструментарій для тексту й шрифтів уже готовий.
  • Підтвердження кожної правки: розкладка виправляється не “оптом”, а екран за екраном, зі знімком гри до і після — “майже правильно” не приймається.

Технічна частина

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

Походження d3d9.dll

Фікс субтитрів додає в теку гри новий файл — d3d9.dll, поруч із BattlefrontII.exe. Це не хак і не підміна системного файлу: Windows за стандартним порядком пошуку DLL спершу перевіряє теку самого застосунку і лише потім System32, тож файл поруч з .exe — штатний, задокументований спосіб для гри підвантажити свою власну DLL, а не обхід захисту ОС. Якщо в теці вже була стороння d3d9.dll (наприклад, від іншого моду), перед перезаписом створюється її резервна копія (d3d9.dll.bf1backup) — оригінал не губиться.

Будь-яка стороння .dll поруч з .exe гри все одно виглядає підозріло, тож походження цього конкретного файлу підтверджується не одними лише запевненнями:

Verify d3d9.dll build

При кожній зміні коду GitHub Actions самостійно, незалежно від автора, перезбирає d3d9.dll з відкритого .cpp/.def-джерела поруч у репозиторії й звіряє результат байт-у-байт із тим, що реально постачається гравцям (відтворювана збірка — визнаний спосіб довести, що бінарник відповідає видимому коду, а не підмінений). Компілятор Zig, яким усе збирається, теж завантажується з офіційного джерела й звіряється за SHA-256 перед використанням — ланцюжок довіри перевіряється з нуля.

Важливо чесно окреслити межі цього доказу: перевірка підтверджує лише відповідність бінарника відкритому коду поруч, а не аналізує сам код на шкідливість — це не “перевірка на віруси” і не гарантія “100% безпечно”. Реальна довіра тут складається з двох речей разом: сам код короткий і читабельний (d3d9_proxy.cpp можна переглянути самостійно) і збірка з нього відтворювана та публічно перевірена при кожному коміті — а не голослівне запевнення автора.

Прозорість: лог фіксу розкладки

Той самий d3d9.dll завжди — без “тихого” варіанта збірки — пише лог bf2_widescreen_fix.log поруч із собою, у теці з BattlefrontII.exe, у режимі додавання (append): дані попередніх запусків не стираються. Це єдиний спосіб діагностувати поведінку фіксу на нестандартному апаратному забезпеченні користувача, тож вимкнути запис не можна.

Розмір логу обмежено 25 МБ: по досягненні межі записується підсумковий рядок, і подальший запис у цьому сеансі призупиняється. Запас великий — найбільший зафіксований запуск усієї кампанії дав 5,49 МБ, тобто приблизно у 4,5 раза менше за межу. У лог потрапляють: статус ініціалізації (зокрема повний шлях до справжньої системної d3d9.dll, яку DLL завантажує), підтвердження прив’язки до пристрою рендеру, роздільність робочого столу (раз за сеанс) і рядки корекції масштабу для кожного елемента HUD.

DLL не встановлює жодних мережевих з’єднань — вихідний код підключає лише <windows.h>, без жодного мережевого API (це можна перевірити самостійно, прочитавши d3d9_proxy.cpp). Файл логу можна видалити в будь-який момент — на роботу самого фіксу це не впливає.

Історія оновлень

v1.01 — Актуальне оновлення

  • Виправлено накладання таймера й прапора команди одне на одне на одному з ігрових екранів.
  • Вирівняно центрування тексту там, де воно “гуляло” відносно елемента інтерфейсу.
  • Кілька точкових правок самого змісту перекладу.

v1.00 — Технічна частина завершена

  • Переклад, кирилиця в шрифтах і розкладка інтерфейсу під широкий екран підтверджені в грі — 162 екрани меню, 373 випадки накладань/виходу за межі панелі виправлено й підтверджено скріншотами.
  • Фікс зникнення субтитрів вступних роликів кампанії на будь-якій роздільності, відмінній від 4:3/5:4.