Можливості
BF1LocalizationTool.GUI — WPF-редактор для створення й редагування локалізацій обох ігор. Читає й пише core.lvl напряму в пам’яті через власний UcfbReader/UcfbWriter — без сторонніх утиліт (QuickBMS, munge/unmunge). Автовизначення версії гри за шляхом до файлу та формату рядків (текстовий .txt чи бінарний Locl) — за фактичним вмістом чанка. Фільтри рядків за мовою, статусом перекладу й технічністю (Технічний / Перекладено / Без перекладу — взаємовиключні), і окремо — за вичиткою («Вичитано»: рядки з позначкою + або +/-, з лічильником); валідатор збереження технічних маркерів (%s %d %i %f %c %u, {btn...}, [X], переноси рядка) звіряє їх у обидва боки — маркер, якого немає в оригіналі, але є в перекладі, теж позначається як проблема — і жорстко відхиляє російські літери, що потрапили в переклад; налаштовуваний поріг “задовгого” перекладу (за замовчуванням 1,3× оригіналу + запас), відкалібрований на реальних випадках обрізання тексту в грі; автовизначення технічних рядків, які не потребують перекладу (URL, числа, ідентифікатори, назви клавіш, чит-коди, copyright); множинне виділення рядків (Ctrl/Shift+клік) і масове проставлення позначки вичитки (+, -, +/- або довільний текст) для всіх виділених одразу через контекстне меню; багаторядкове редагування перекладу (Shift+Enter додає перенос, Enter підтверджує клітинку) з маркером «↵» перед справжніми переносами в колонках «Оригінал» і «Переклад»; автозбереження прогресу, файлове логування; експорт/імпорт CSV для пакетного перекладу через зовнішні сервіси. Темна/світла тема.
Перенесення перекладу між іграми (BF1 ↔ BF2) — окрема функція, не частина звичайного редагування: кнопка «⇄ BF1↔BF2» переносить переклад між двома іграми за збігом англійського оригіналу (без урахування регістру й пробілів — BF1 зберігає текст ВЕЛИКИМИ літерами, BF2 звичайним), з автоматичним узгодженням регістру перенесеного рядка під цільову гру (використовує той самий механізм позначок вичитки й виділення, що описаний вище, — не дублює його). Перезаписуються лише рядки без позначки вичитки — уже вичитане донором не чіпається; рядки, де донор має кілька різних перекладів одного оригіналу, виводяться в окреме вікно вирішення конфліктів. Підсумок перенесення (змінено / без змін / пропущено вичитаних / без відповідника) показується перед записом.
BF1LocalizationTool.Diagnostic (консольний, розповсюджується лише як вихідний код) вирішує головне обмеження BF1: текстовий канал .txt (Latin1) сам по собі не підтримує кирилицю. Інструмент ін’єктує нові кириличні гліфи (реальні Unicode-коди, без таблиці-мапера) напряму в шрифтовий атлас core.lvl, не обрізаючи жодного англійського гліфа. Растеризація й метричні моделі гліфів — окремим модулем BF1LocalizationTool.FontGenerator.
Виправлення розкладки BF2 під широкий екран — окремий блок інструментарію (Bf2Widescreen), написаний тому, що збільшений під кирилицю шрифт зсуває елементи меню в грі, розрахованій лише на 800×600. Для цього написано власний інтерпретатор ігрових скриптів: кожне виправлення прив’язок елементів у shell.lvl обчислюється з реальної поведінки гри, а не підбирається наосліп, і перевіряється знімком екрана до й після. Меню Миттєвого бою (вибір мапи, режиму й ери) — найскладніше у грі, для нього загальне правило розкладки не сходиться до нуля дефектів, тож значення виміряні й задокументовані окремо. Файл ingame.lvl відповідає за ту саму верстку в меню паузи й лобі мережевої гри — ці екрани відкриваються лише в бою, тож не входять до автоматичного сканування головного меню й перевіряються окремо; сюди ж належить збільшення шрифтів BF2 приблизно в 1,5 раза (HEAD-поле шрифтового ресурсу) для читабельності кирилиці на сучасних екранах, точковий фікс зазору на екрані вибору бійця, зсунутого через той самий збільшений шрифт, і відступ переліку класів для найму від верху того самого екрана (за замовчуванням притиснутий впритул). Усі координати виміряні й підтверджені саме під 1920×1080 — гра сама не вміє коректно обробляти цю роздільність, тож для найкращого відображення у властивостях гри в Steam обов’язково прописати параметр запуску -resolution 1920 1080 (на інших роздільностях гра може працювати, але ідеальність розкладки меню не гарантується).
Фікс зникнення субтитрів вступних роликів кампанії BF2 — підтверджений баг оригінальної гри (відтворюється й без модифікацій) на будь-якій роздільності, відмінній від 4:3/5:4. Виправляється новим файлом d3d9.dll, що ставиться поруч з BattlefrontII.exe (стандартний порядок пошуку DLL у Windows перевіряє теку застосунку раніше за System32, тож це штатний спосіб, а не хак); якщо в теці вже була стороння d3d9.dll, перед перезаписом створюється її резервна копія (d3d9.dll.bf1backup). Походження файлу підтверджується не голослівно, а відтворюваною збіркою — GitHub Actions при кожному коміті перезбирає d3d9.dll з відкритого .cpp/.def-джерела в репозиторії й звіряє результат байт-у-байт із тим, що постачається гравцям:
Формат файлів
Гра зберігає ресурси в ієрархічних .lvl-контейнерах (ucfb, Pandemic Studios). Рядки локалізації лежать у core.lvl → localization → [мова] в одному з двох форматів: текстовий .txt (0xHASH текст, Latin1, обидві гри — без підтримки кирилиці) або бінарний Locl (hash + текст, UTF-16LE, лише BF2 — повна підтримка кирилиці з коробки). Увесь текст BF1 підтверджено лежить рівно у двох файлах (Data\_LVL_PC\core.lvl і аддон Tat3\...\core.lvl), шрифти — лише в першому; аддон Tat3 не має власних шрифтів і використовує атлас базової гри.
Вимоги
Windows 10/11, Star Wars: Battlefront (Classic 2004) і/або Battlefront II у Steam. Готові збірки (win-x64/win-x86) не потребують встановленого .NET; варіант generic потребує .NET 10 Desktop Runtime. Генерація кириличного core.lvl через BF1LocalizationTool.Diagnostic (лише з коду) додатково потребує .NET 10 SDK.
Завантаження
Актуальні релізи (готовий .zip з GUI-редактором) доступні на GitHub Releases. Реліз містить лише GUI; BF1LocalizationTool.Diagnostic збирається з коду окремо.
Безпека та прозорість
Вихідний код усіх компонентів повністю відкритий, уся логіка перетворень .lvl-файлів прозора — це дозволяє верифікувати мод на Nexus Mods. Репозиторій не містить видобутих файлів гри та жодних .ttf-файлів шрифтів (вони публічні на Google Fonts, посилання — у розділі подяк).
З версії 1.1.0 реліз (усі три варіанти — generic, win-x64, win-x86) збирається автоматично в GitHub Actions за тегом версії (попередні версії були зібрані й завантажені вручну); символи відлагодження (*.pdb) прибираються перед пакуванням, а опис релізу на GitHub формується з відповідного розділу цього changelog.
Для фіксу розкладки BF2 є ще один рівень прозорості: d3d9.dll завжди — без “тихого” варіанта збірки — пише докладний лог bf2_widescreen_fix.log поруч із собою, у режимі додавання; вимкнути запис не можна. Розмір обмежено 25 МБ, мережевих з’єднань DLL не встановлює (вихідний код підключає лише <windows.h>) — детальніше на сторінці локалізації BF2.
Пов’язані проєкти
Розроблено для Star Wars: Battlefront (Classic 2004) — Українська локалізація та Star Wars: Battlefront II (Classic, 2005) — Українська локалізація.
Подяки
- Спільнота Gametoast — документація форматів гри
- swbf-unmunge — початковий аналіз структури ucfb
- Sofia Sans Extra Condensed (Lettersoup — Botio Nikoltchev, Ani Petrova, SIL OFL) — шрифт для рендеру кириличних гліфів BF1
- Unbounded (Web3 Foundation / Studio Koto / NaN / Parity Technologies, SIL OFL) та Exo 2 (Natanael Gama, SIL OFL) — шрифти для рендеру кириличних гліфів BF2