Skip to content

Переосмысление игры Hard Time 3D

Notifications You must be signed in to change notification settings

softbie/hardtime-rebirth

Repository files navigation

Hard Time 3D: Rebirth

image

Переосмысление и возраждение игры HardTime от MDickie

Игра разработана на движке Blitz3D с языком программирования BlitzBasic

Особенности

  • Ничего не вырезано, неперекодированно, игра полностью соответствует изначальной задумке автора, ничего не добавлено "от себя"
  • Добавлена поддержка мультиязычности (ru, eng)
  • Добавлено устранение проблем с производительностью на современных компьютерах (в будущих обновлениях)
  • Добавлена поддержка FHD разрешения
  • Добавлено переключение оконного режима
  • Изменение настроек дисплея теперь происходит непосредственно в самой игре, без необходимости перезапуска

Компиляция

  1. Склонировать репозиторий
  2. Поместить в папку с репозиторием ассеты игры (скачать игру на оф. сайте и переместить все папки - Characters, Data, и т.д)
  3. Скачать и установить Blitz3D
  4. (Опционально) Создать новую переменную среды blitzpath для компиляции из командной строки. blitzpath должен содержать путь до установленного Blitz3D (прим. C:\Program Files\Blitz3D). Так же, для удобства, вынести путь до директории с компилятором в переменную PATH (прим. C:\Program Files\Blitz3D\bin). Что бы проверить правильность настройки окружения для компиляции выполните команду blitzcc -h, должна будет отобразиться справка по компилятору
  5. Стартовой точкой игры является файл Gameplay.bb. Пример компиляции в режиме отладки: blitzcc -d Gameplay.bb

Особенности мультиязычности и перевода

Перевод игры выполняется с помощью написанного мною плагина, представленный в виде функции translate

Из за специфики языка BlitzBasic перевод выполнен в виде двумероного массива, содержащего строки с переводом вида:

array$(index, 0) = "Hello, #FIRST#"
array$(index, 1) = "Привет, #FIRST#"

Где index - номер переводимой строки, 0 - строка на английском, 1 - строка на русском

Сам перевод осуществляется непосредственно в исходных файлах, для перевода нужно подключить файл Translate.bb и использовать функцию translate.

;Пример работы

Include "translate_plugin/Translate.bb"

Print translate("Hello, #FIRST#", "Вася")

;result: Привет, Вася

Функция имеет четыре аргумента, первый - обязательный, содержит ключ для поиска строк, второй, третий и четвертый - необязательные и используются для подстановки по подстрокам #FIRST#, #SECOND#, #THIRD# соответственно.

Специфика русификации

Если заглянуть в файлы, которые содержат строки с переводом, в самом GitHub можно увидеть, что кириллица отображается в неправильной кодировке, из за чего редактировать и вносить вклад в "онлайн" режиме становится невозможным. К сожалению, это особенность движка или самой игры. HardTime не умеет работать с UTF кодировкой, если использовать ее, то кракозябры будут уже в самой игре. Поэтому файлы с переводами сохранены в Windows-1251.

Ввиду того, что этот ЯП не поддерживает ассоциативные и динамические массивы необходимо заранее объявлять длину массива. Это может быть очень не удобным, потому, что строки с переводами разбиты по файлам, из за этого добавление или удаление строк приведет к полному переписыванию всех индексов в остальных файлах.

Вспомогательный инструмент для перевода игры

Что бы избежать проблемы, описанной выше, я написал отдельную вспомогательную программу с использованием flutter, которая хранит все строки с переводом в sqlite базе данных и позволяет автоматически экспортировать строки в нужном формате.

image

Скачать ее можно по этой ссылке

Краткое руководство к программе: Программа представленна в виде окна, разделенного на две части (левая и правая). В левой части содержится список групп. Они нужны для логического разделения пар строк с переводом, что бы упростить процесс перевода. Эти группы в конечном итоге будут экспортированы в виде файлов. Внизу левой части находятся две кнопки:

  • Добавить - добавляет группу (рекомендую устанавливать названия групп на латинице без спец символов)
  • Экспорт - экспортирует все строки с переводом в файлы .bb, которые в свою очередь перемещаются полностью с заменой в папку ./translate_plugin в папке репозитория

В правой части отображаются строки с переводом. Этот блок становится активным только после выбора группы. Здесь в верхней части блока находятся такие элементы управления, как:

  • Поиск - ищет строки как в английской версии так и в русской, в рамках выбранной группы
  • Изменить - позволяет переименовать группу
  • Добавить - добавляет новую пару строк в группу
  • Удалить - полностью удаляет всю группу, включая все вложенные в нее строки

Ниже лежат все доступные строки с переводом. В левой части каждой отдельной строки находится текстовое поле, считающееся ключем или английской версией строки. В правой - перевод. Далее две кнопки: сохранить изменения и удалить пару.

Для того, что бы подтянуть актуальную базу данных, нужно:

  1. Скачать актуальную базу данных (за актуальностью базы можно следить здесь) - файл data.db
  2. Переместить ее в папку C:\Users\ИМЯ ПОЛЬЗОВАТЕЛЯ\Documents\databases
  3. Запустить программу

Если все сделать правильно, у вас должны будут появиться уже созданные группы.

Помогите разработке

Если вы нашли ошибку или у вас есть идея, как можно улучшить игру - вы можете оставить запрос через соответствующую форму. По другим вопросам можете написать мне на почту info@softbie.ru или Telegram