Назад к портфолио
Русификаторы

Hard Time (PC, 2006)

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

Завершено
Hard Time (PC, 2006)

О проекте

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.

Открыть проект