Про проєкт
Текстовий українізатор для 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 гри все одно виглядає підозріло, тож походження цього конкретного файлу підтверджується не одними лише запевненнями:
При кожній зміні коду 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.