Hard Time (PC, 2006)
Русификация и модернизация культовой игры Hard Time 3D от MDickie. Проект включает полный перевод игры на русский язык, поддержку мультиязычности, улучшение графических настроек и разработку собственного инструмента для управления переводами.

О проекте
Hard Time 3D: Rebirth - мой проект по русификации и доработке оригинальной Hard Time от независимого разработчика MDickie. Изначально я хотел просто перевести игру на русский язык, но со временем проект вырос в более серьезную переработку с исправлением некоторых технических ограничений.
Игра написана на BlitzBasic и использует движок Blitz3D. Из-за возраста этих технологий пришлось разбираться не только с самим кодом, но и с особенностями работы текста, кодировками и поддержкой современных разрешений экрана.
История разработки
Впервые я задумался о русификации Hard Time еще в 2019 году. Тогда я пытался разобраться в исполняемом файле игры, но опыта для такой задачи не хватило, поэтому идею пришлось отложить.
В 2021 году мне удалось найти исходный код игры, и я вернулся к работе. Постепенно разобрался, как устроены игровые диалоги, где хранятся строки и каким образом текст выводится на экран. Тогда же удалось реализовать поддержку кириллицы.
После этого проект на какое-то время снова отошел на второй план. Вернулся я к нему в конце 2023 года, когда наконец закончил перевод и решил не ограничиваться одной русификацией. Так появилась Hard Time 3D: Rebirth.
Техническая часть
Одной из первых проблем стала кириллица. BlitzBasic не поддерживает UTF-8, поэтому для отображения русского текста пришлось использовать кодировку Windows-1251 и адаптировать работу со строками.
Чтобы не привязывать перевод напрямую к игровому коду, я написал собственную систему локализации на основе функции translate. Она позволяет получать строки для выбранного языка и подставлять в них динамические значения, например имена персонажей и другие данные из игры.
Отдельной проблемой оказалось хранение переводов. В BlitzBasic есть свои ограничения при работе с массивами, а вручную следить за индексами большого количества строк было неудобно. Поэтому я решил написать отдельный редактор переводов на Flutter с базой данных SQLite.
В нем можно редактировать строки, распределять их по группам, искать нужный текст и экспортировать готовые переводы в формат, который понимает BlitzBasic. Это заметно упростило работу, особенно когда количество переведенных строк стало расти.
Что удалось сделать
- Полностью перевести игровые диалоги, текст и интерфейс на русский язык.
- Перевести текстуры и названия игровых предметов.
- Добавить переключение между русским и английским языками.
- Реализовать поддержку Full HD.
- Добавить оконный и полноэкранный режимы.
- Сделать возможность менять настройки экрана без перезапуска игры.
- Написать собственную систему локализации с поддержкой динамических значений в строках.
- Создать редактор переводов на Flutter с использованием SQLite.
Результат
В итоге из идеи просто перевести старую игру получился отдельный проект с собственной системой локализации и рядом технических улучшений. При этом я постарался сохранить оригинальный игровой процесс и визуальный стиль Hard Time.
Больше всего времени ушло на изучение особенностей BlitzBasic, работу с игровыми диалогами и организацию переводов. Зато благодаря этому проекту я получил опыт работы с устаревшим кодом, лучше разобрался в устройстве игровых движков и написал собственный инструмент, который избавил меня от большого количества ручной работы.
Исходный код проекта и систему локализации я выложил в открытый репозиторий на GitHub.
Технологии: BlitzBasic, Blitz3D, Dart, Flutter, SQLite, Windows-1251.