Cave Story (Doukutsu Monogatari) via NXEngine для различных платформ

Cave Story (или в оригинале — Dōkutsu Monogatari), является одной из самых известных бесплатных японских Indie-игр. Весь игровой контент, включая музыкальные композиции и код, был создан лишь одним человеком — Daisuke «Pixel» Amaya. Pixel в течении пяти лет трудился над своей игрой, уделяя ей как можно больше свободного времени. Именно благодаря знакомству с Cave Story многие начинающие Game Developer’ы вдохновились на создание собственных Indie-проектов. После своего первого релиза для PC, который состоялся в 2004 году, игра медленно завоёвывала популярность геймеров в японском интернете, а после её перевода на английский язык — стремительным темпом распространилась по всему миру. В целом, Cave Story получила достаточно положительные отзывы критиков за свой увлекательный геймплей и интересный сюжет. Несколько лет спустя, в ноябре 2011-го года, в сервисе цифровой дистрибуции Steam вышло переиздание игры, названное Cave Story+, содержащее незначительные отличия от оригинальной версии.



Скриншоты из русской версии Cave Story, запущенной с помощью NXEngine на устройстве Ritmix RZX-50; локации «Хранилище Яиц» и «Грасстаун»

Cave Story представляет собой 2D-платформер с элементами RPG, выполненный в антураже старых классических игр, в частности, разработчик вдохновлялся таким проектом, как Metroid. После проявления интереса к игре со стороны публики Cave Story была портирована на наиболее популярные платформы. Поскольку исходный код игры закрыт, Cave Story удалось перенести лишь на ограниченное количество игровых устройств. К счастью, нашлась энтузиастка, которая полностью переписала движок игры на C++ (изначально он был написан на C) и выпустила код под лицензией GNU GPL Version 3. Свой проект Caitlin «rogueeve» Shaw назвала NXEngine. Благодаря этому движку, практически полностью совместимому с оригинальным, в Cave Story можно поиграть на самых разных платформах и устройствах.

Но, к сожалению, не всё так гладко и NXEngine всё ещё нуждается в «доработке напильником». Например, на Dingoo A320 невозможно играть со включенной музыкой из-за возникающих «подтормаживаний» в игре. Caitlin Shaw хотела полностью сохранить совместимость с оригинальными DATA-файлами Cave Story, поэтому музыка в нём генерируется процедурно, создавая большую нагрузку на CPU. Центральный процессор Dingoo A320 не справляется с такой нагрузкой, отсюда и возникают «подтормаживания», сильно мешающие игровому процессу. Одна из моих модификаций исходного кода NXEngine позволяет использовать библиотеку SDL_mixer, добавляя в игру возможность воспроизведения трекерной музыкой из внешних файлов, вместо ресурсоёмкой процедуры генерации. Кроме того, NXEngine не мог отобразить русские буквы из русифицированных DATA-файлов, но с моим небольшим исправлением это стало возможным. Теперь геймеры, не слишком хорошо знающие английский язык, смогут всецело насладиться сюжетными диалогами. Помимо этого, в движок была добавлена возможность работы с широкоформатными дисплеями с разрешением 480×272, что позволило запускать Cave Story на Ritmix RZX-50 в полноэкранном режиме. Для удобства внесения изменений в NXEngine была произведена некоторая адаптация исходного кода к интегрированной среде разработки — Qt Creator.

Содержание:

1. Обзор ключевых элементов игры
2. Основные клавиши управления
3. Информация для разработчиков
3.1. Windows
3.2. Linux
3.3. Dingux/OpenDingux/MotoMAGX/EZX
3.4. Ресурсы
4. Центр загрузки
5. Обратная связь

1. Обзор ключевых элементов игры

Запустив Cave Story, вы можете посмотреть небольшую кат-сцену, с которой и начинается завязка сюжетной линии. Подобные заставки ещё не раз будут встречаться вам на протяжении всей игры. Прокрутить диалог можно нажав на клавишу прыжка. Итак, главный герой игры появляется в первой локации, которая называется «Начальная точка» и где можно попробовать повзаимодействовать с внутриигровыми предметами — аптечкой и дискетой. Клавиша «Вниз» отвечает за использование. Таким образом, подойдя к аптечке и нажав «Вниз» можно пополнить здоровье, а подойдя к вращающейся дискете — сохраниться. Поднявшись вверх к двери вы попадёте в первую пещеру, наполненную различными врагами и кроваво-красными шипами, к которым нельзя прикасаться. С помощью баночек с сердечком (одна из которых лежит в этой локации) можно «прокачивать» здоровье героя, тем самым повышая шанс на выживание в трудных схватках с противниками. Такие баночки очень хорошо запрятаны в труднодоступных уголках уровней, придётся напрячься, чтобы достать их оттуда. Не стоит пренебрегать ими, так как Cave Story достаточно хардкорная игра и её прохождение без должных бонусов может сильно затянуться.



NXEngine в дистрибутиве Linux Mint 15 KDE; локация «Первая пещера»

Как только вы найдёте в сундучке ваше первое оружие — пистолет «Полярная Звезда», возвращайтесь назад, к начальной точке. Кстати, в таких сундучках можно найти очень много полезных вещей и пополнить свой инвентарь. Вы можете заметить, что после убийства врагов из них выпадают различные бонусы, например, оранжевые кристаллики или сердечки. С помощью кристалликов можно «прокачать» оружие, увеличив скорострельность и сделав сильнее наносимый врагам урон. Однако, следует помнить, что если враги нанесут урон вам, уровень оружия может понизиться и оно вновь станет слабым.



Cave Story, запущенный с помощью NXEngine на устройстве Motorola ZN5, под управлением операционной системы MotoMAGX; локации «Руины», «Лабиринт М» и «Внешняя стена»

Поднявшись обратно наверх, разбейте выстрелом блоки и дверь, а затем выходите из пещеру наружу, в локацию «Деревня Мимига», в которой вас ждёт увлекательная квестовая составляющая этой игры. Вообще в Cave Story смешивается несколько игровых жанров, что и делает эту игру интересной для большой аудитории геймеров. Каждый находит в ней что-то приятное и наиболее ценное для себя. Мне, к примеру, понравился уровень «Лабиринт М», который нужно проходить вместе с одним из персонажей игры.



Cave Story в операционной системе MS Windows 8.1; локация «Деревня Мимига»

На этом я заканчиваю ваш процесс освоения в игровом мире. Вы уже достаточно самостоятельны и сможете сами разобраться в управлении и механике игры. Кстати, в Cave Story имеется целых три различных концовки — две «хороших» и одна «плохая». Решения, которые вы принимали на протяжении всего игрового процесса, могут оказать сильное влияние на то, как вы завершите Cave Story. Поэтому играйте очень внимательно! Если всё же у вас возникли непреодолимые трудности, вы можете почитать большой гайд по прохождению Cave Story здесь. Но первый раз лучше всего пройти эту замечательную игру без подглядывания в различные мануалы, чтобы получить наиболее полные впечатления от Cave Story.

<< Перейти к содержанию

2. Основные клавиши управления

Windows/Linux

  • Движение — ←↑↓→;
  • Прыжок — Z;
  • Огонь — X;
  • Предыдущее оружие — A;
  • Следующее оружие — S;
  • Инвентарь — Q;
  • Карта — W;
  • Выход — ESC;
  • Опции — F3.

Dingux/OpenDingux

  • Движение — D-Pad;
  • Прыжок — A;
  • Огонь — B;
  • Предыдущее оружие — X;
  • Следующее оружие — Y;
  • Инвентарь — R;
  • Карта — START;
  • Выход — SELECT;
  • Опции — L.

MotoMAGX

  • Движение — D-Pad;
  • Прыжок — Громкость ‘+’;
  • Огонь — Центр джойстика;
  • Предыдущее оружие — 0;
  • Следующее оружие — 8;
  • Инвентарь — 2;
  • Карта — 5;
  • Выход — Кнопка камеры;
  • Опции — #.

EZX

  • Движение — D-Pad;
  • Прыжок — Громкость ‘+’;
  • Огонь — Громкость ‘-‘;
  • Предыдущее оружие — ModKey + Громкость ‘-‘;
  • Следующее оружие — ModKey + Громкость ‘+’;
  • Инвентарь — Центр джойстика;
  • Карта — ModKey + Центр джойстика;
  • Выход — Кнопка камеры;
  • Опции — ModKey + Кнопка камеры.

Примечание: Клавиша ModKey на Motorola A1200 находится между кнопками регулировки громкости, а на Motorola ROKR E6 под красной трубкой.

<< Перейти к содержанию

3. Информация для разработчиков

Если вы хотите собрать NXEngine из исходников, то немного информации об кросс-платформенной компиляции этого движка, вы можете найти здесь. Существует несколько вариантов сборки:

  1. Через Makefile;
  2. С помощью Qt Creator.

Опишу некоторые нюансы, касающиеся построения проекта из исходного кода для различных операционных систем.

<< Перейти к содержанию

3.1. Windows

Для сборки необходим MinGW и установленные библиотеки SDL, SDL_ttf и SDL_mixer (опционально). Посмотреть подробнее про сборку SDL-библиотек для MinGW можно тут. После компиляции необходимых библиотек и их установки в тулчейн можно приступать к построению NXEngine.

Для получения исходного кода рекомендуется воспользоваться утилитой Git. Ссылку на GitHub-репозиторий, в котором доступен исходный код движка, можно найти ниже, в этом разделе. После получения исходников переходим в директорию с ними и выполняем команду:

mingw32-make -f Makefile.mingw32

После выполнения которой в директории с исходным кодом появится исполняемый файл «nx.exe».

Для сборки проекта с помощью Qt Creator необходимо установить в тулчейн MinGW SDL-библиотеки, затем открыть файл «nx.pro» и начать построение проекта.

<< Перейти к содержанию

3.2. Linux

Перед компиляцией проекта устанавливаем следующие пакеты, содержащие библиотеки и заголовочные файлы:

sudo apt-get install libsdl1.2-dev libsdl-mixer1.2-dev libsdl-image1.2-dev libsdl-ttf2.0-dev

После установки необходимых библиотек в систему, получаем исходники и начинаем построение NXEngine с помощью файла «Makefile.linux»:

make -f Makefile.linux

Или с помощью Qt Creator. Затем собранный исполняемый файл «nx» необходимо поместить в директорию с DATA-файлами игры.

3.2.1. Разрешение зависимостей

Чтобы исполняемый бинарник «nx» не зависел от некоторых системных библиотек, которые могут отсутствовать в одних дистрибутивах GNU/Linux и присутствовать в других, его необходимо собрать в так называемой LSB-системе (Linux Standard Base), следуя инструкциям из этого поста.

Лично я советую собирать NXEngine и другие проекты, в основе которых лежит SDL, в GNU/Linux дистрибутиве CentOS 5.10:



Собранный NXEngine в операционной системе CentOS 5.10, 32-bit

Следует отметить, что так как библиотеки SDL и SDL_ttf не входят в состав LSB, их необходимо собрать отдельно и установить вручную в дистрибутив. Процедура компиляции и установки довольно тривиальна: следует загрузить исходники с официального сайта www.libsdl.org и выполнить их построение с помощью команды:

./configure && make -j4 && sudo make install

После выполнения которой необходимые библиотеки и заголовочные файлы будут установлены в каталог «/usr/local/*». Так как мультимедийные SDL-библиотеки отсутствуют во многих дистрибутивах, я рекомендую использовать статическую линковку с ними. После сборки в LSB-совместимой системе и статической линковки, мы получаем исполняемый файл с минимальным набором зависимостей, который, теоретически, должен работать практически в любом популярном дистрибутиве:

Помимо этого, при компиляции приложений в LSB-системе, будет отсутствовать ошибка связанная с GLIBC/GLIBCXX, что позволит приложению запуститься на любых дистрибутивах, выпущенных позже 2006-го года:

<< Перейти к содержанию

3.3. Dingux/OpenDingux/MotoMAGX/EZX

При установленных и настроенных тулчейнах для этих платформ сборка NXEngine отличается лишь переключением тулкитов в Qt Creator’е по способу, описанному здесь. Также NXEngine можно скомпилировать с помощью файлов «Makefile.dingux», «Makefile.ezx» или «Makefile.motomagx», если у вас не установлен Qt Creator.



Пакет для Dingux/OpenDingux представляет собой обычный ZIP-архив, содержащий DATA-файлы игры и исполняемый файл «nx.dge». MGX-пакет для MotoMAGX по своей сути тоже является обычным ZIP или 7Z-архивом, в котором содержится каталог с необходимыми для запуска программы файлами. Файл «NXEngine.cfg» содержит необходимую установочную информацию, а файл «run.sh» является скриптом, определяющим некоторые переменные и пути до необходимых для запуска приложения библиотек. PKG-пакет для платформы EZX представляет собой TAR.GZ-архив со специальным DESKTOP-файлом, описывающим установку. Подробнее изучить структуру пакетов для этих платформ можно скачав из этого раздела необходимые файлы и открыв их в любом архиваторе, к примеру, в 7-zip.

<< Перейти к содержанию

3.4. Ресурсы

3.4.1. Предопределённые макросы

Некоторые из предопределённых макросов могут использовать уникальные DATA-файлы, не входящие в обычную поставку Cave Story или NXEngine. Так, например, если вы будете использовать макрос _480X272, то в каталог «data/» следует поместить файлы «bkFog480fix.pbm» и «bkMoon480fix.pbm», которые являются фиксами фонов для широкоформатных дисплеев. Найти эти файлы и их исходники в виде «*.psd»-файлов можно в репозитории на GitHub’е. При использовании макроса _SDL_MIXER музыка не генерируется приложением, а просто проигрывается из трекерных файлов. Поэтому в корневой каталог NXEngine следует поместить папку «xm/», содержащую трекерную музыку в формате «*.xm». Скачать архив с директорией «xm/» можно здесь. Благодаря использованию этого макроса снижается нагрузка на процессор, позволяя NXEngine работать на слабых устройствах. Используя макрос _L10N_CP1251 вместе с _320X240 или _480X272, не забудьте поместить файл «DroidSansMono.ttf» в корневой каталог с игрой. Благодаря шрифту Droid Sans Mono русские буквы при разрешении 320×240 или 480×272 не выглядят слишком маленькими и отлично читаются.

Макрос

Платформа

A320
RZX-50
LIN 32/64
WIN
MAGX
EZX
ENG
RUS
ENG
RUS
ENG
RUS
ENG
RUS
ENG
RUS
ENG
RUS
_480X272
Off
Off
On
On
Off
Off
Off
Off
Off
Off
Off
Off
_320X240
On
On
Off
Off
Off
Off
Off
Off
On
On
On
On
_DINGUX
On
On
On
On
Off
Off
Off
Off
Off
Off
Off
Off
_MOTOMAGX
Off
Off
Off
Off
Off
Off
Off
Off
On
On
Off
Off
_SDL_MIXER
On
On
On
On
Off
Off
Off
Off
On
On
On
On
_DEBUG
Off
Off
Off
Off
Off
Off
Off
Off
Off
Off
Off
Off
_L10N_CP1251
Off
On
Off
On
Off
On
Off
On
Off
On
Off
On
_MOTOEZX
Off
Off
Off
Off
Off
Off
Off
Off
Off
Off
On
On

Таблица предопределённых макросов и их использование в проекте NXEngine

Помимо этого, будет полезно прочитать файл «nx.pro», в котором тоже описывается назначение каждого макроса.

3.4.2. Локализация

Для включения русской локализации нужно расскоментировать в Makefile строчку, содержащую «-D_L10N_CP1251» или изменить строку #20 в файле «nx.pro»:

на

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

3.4.3. DATA-файлы

После компиляции NXEngine, создастся исполняемый файл, которому нужны DATA-файлы для корректной работы. Их можно взять, «распотрошив» готовые к запуску архивы с движком и игрой, которые можно скачать ниже. В соответствии с описанием, данном в этом разделе, поместите необходимые для работы приложения файлы в корневой каталог NXEngine.

<< Перейти к содержанию

4. Центр загрузки

Загрузить последние версии NXEngine, собранные из исходного кода для различных платформ и операционных систем, можно в таблице размещённой ниже. Архивы представляют собой готовые Bundle-версии движка с уже установленной игрой Cave Story, которые следует лишь распаковать или установить, а затем запустить.

Иконка

Платформа

Версия

Загрузка
Русская версия
Русская версия
English Version
English Version
Dingoo A320; OpenDingux|Dingux
Dingoo A320
(OpenDingux/Dingux)
v. 1.0.0.4 | Rev 4
A320-NXEngine-RUS-1.0.0.4-Rev-4.zip
A320-NXEngine-1.0.0.4-Rev-4.zip
Ritmix RZX-50; OpenDingux|Dingux
Ritmix RZX-50
(OpenDingux/Dingux)
v. 1.0.0.4 | Rev 4
RZX50-NXEngine-RUS-1.0.0.4-Rev-4.zip
RZX50-NXEngine-1.0.0.4-Rev-4.zip
Linux 32-bit; x86, i386; All distributions
Linux 32-bit
(x86, i386; All distributions)
v. 1.0.0.4 | Rev 4
LIN32-NXEngine-RUS-1.0.0.4-Rev-4.tar.gz
LIN32-NXEngine-1.0.0.4-Rev-4.tar.gz
Linux 64-bit; x86_64, amd64; All distributions
Linux 64-bit
(x86_64, amd64; All distributions)
v. 1.0.0.4 | Rev 4
LIN64-NXEngine-RUS-1.0.0.4-Rev-4.tar.gz
LIN64-NXEngine-1.0.0.4-Rev-4.tar.gz
Windows 32-bit; Windows 98, XP, Vista, 7, 8, 8.1
Windows 32-bit
(Windows 98, XP, Vista, 7, 8, 8.1)
v. 1.0.0.4 | Rev 4
WIN32-NXEngine-RUS-1.0.0.4-Rev-4.zip
WIN32-NXEngine-1.0.0.4-Rev-4.zip
Motorola ZN5, E8, EM30, Z6 etc.; MotoMAGX
Motorola ZN5, E8, EM30, Z6 etc.
(MotoMAGX)
v. 1.0.0.4 | Rev 4
MAGX-NXEngine-RUS-1.0.0.4-Rev-4.mgx
MAGX-NXEngine-1.0.0.4-Rev-4.mgx
Motorola E2, E6, A1200 etc.; EZX
Motorola E2, E6, A1200 etc.
(EZX)
v. 1.0.0.4 | Rev 4
EZX-NXEngine-RUS-1.0.0.4-Rev-4.pkg
EZX-NXEngine-1.0.0.4-Rev-4.pkg
Haiku 32-bit; x86
Haiku 32-bit
(x86)
v. 1.0.0.4 | Rev 4
HAIKU32-NXEngine-1.0.0.4-Rev-4.hpkg
Haiku 64-bit; x86_64
Haiku 64-bit
(x86_64)
v. 1.0.0.4 | Rev 4
HAIKU64-NXEngine-1.0.0.4-Rev-4.hpkg
Source Code; All Platforms
Source Code
(All Platforms)
v. 1.0.0.4 | Rev 4
Source Code; All Platforms

Готовые пакеты, предназначенные для запуска на конечной системе, спасибо за хостинг www.cavestory.org, зеркало файлов на Yandex.Disk

<< Перейти к содержанию

5. Обратная связь

Если вы собрали NXEngine из исходного кода, расположенного в моём репозитории на GitHub’е, добавив, например, поддержку какого-нибудь Handheld-устройства, или просто форкнули NXEngine, исправив ошибки или нарастив функционал — обязательно напишите мне, я обновлю эту страницу или добавлю ссылки для загрузки в таблицу.

Update 20-DEC-2016: В центр загрузки добавлены пакеты для смартфонов Motorola на платформе EZX, которые я собрал ещё в феврале прошлого года, специально для подаренного мне ROKR E6. Поскольку для разработки под платформу EZX используется старый кросс-компилятор GCC 3.3.6, возникли некоторые осложнения с выравниванием размеров структур. К сожалению, протестировать полностью Cave Story на этом устройстве мне не удалось из-за нехватки свободного времени, но до локации «Грасстаун» я смог дойти.



Запущенная русская версия игры Cave Story на движке NXEngine на смартфоне Motorola ROKR E6; платформа EZX

Все изменения для платформы EZX опубликованы в репозитории на GitHub, ссылку на который можно увидеть в предыдущем разделе. В раздел, посвящённый управлению в этой статье, добавлена соответствующая информация.

Update 22-DEC-2016: Администрация фанатского сайта www.cavestory.org заметила мой проект переноса NXEngine на различные платформы и любезно разместила установочные пакеты на своих серверах. Этот сайт содержит множество информации о Cave Story и обязателен к посещению каждым поклонником этой игры. Огромное спасибо andwhyisit и SkyeWelse за ваше внимание!

Установочные пакеты на всякий случай залиты ещё и на Yandex.Disk, играйте с удовольствием!

Update 22-FEB-2017: Со мной связался Ola Andersson и попросил скомпилировать ванильный NXEngine версии 1.0.0.6 для MS Windows 32-bit, я выполнил его просьбу и пакет был добавлен как на сайт Cave Story, так и в папку NXEngine на Yandex.Disk. По сути это просто обновление английской версии NXEngine до актуального состояния.

Кроме того, хочу посоветовать к использованию на современных системах форк NXEngine-evo от iSage, поскольку он имеет ряд исправленных ошибок и поддерживает популярные широкоформатные разрешения. Скачать готовые к запуску пакеты для основных настольных операционных систем можно в его репозитории.

Update 14-DEC-2018: Мной был подготовлен порт движка NXEngine для операционной системы Haiku. Подробнее почитать о процессе портирования можно в этой статье.



Запущенная русская версия игры Cave Story на движке NXEngine в операционной системе Haiku

Создатели сайта www.cavestory.org любезно добавили готовые HPKG-пакеты для Haiku OS к себе на сайт, в раздел загрузок.

<< Перейти к содержанию

Dev, Dingux, EZX, MotoMAGX

Комментарии: 7

  1. Встреча с шипами просто потрясающая. Кстати, рекомендую — Hotline Miami и Droid Assault, потрясающие игрушки в 8 битном стиле.

  2. Пара поправок:
    1) Pixel сам никогда не портировал свой движок ни на какие платформы. Портировали энтузиасты на условиях: а) написать прототип самостоятельно б) получить после этого исходники и никому их не давать.

    2) Кейтлин (автор nxengine) — она.

  3. Доброго !
    Спасибо за ваш труд, я вышел на эту статью пытаясь установить порт Cave Story на RetroPie.
    Как я понял там используется NxEngine из основной ветки, которая русские ресурсы не поддерживает.
    Вопрос — почему вы держите отдельный репозиторий, не получится добавить ваши патчи в основную ветку ?

    1. Доброго дня!
      Я не задавался целью протолкнуть свои патчи в основную ветку NXEngine, некоторые из них сделаны в спешке и имеют весьма посредственное качество, так как делал я их в основном для себя. Для того, чтобы протолкнуть что-то в апстрим, требуется провести работу по их причёсыванию, у меня на это нет времени и желания. Тем более у моего знакомого вышел проект под названием NXEngine-evo, который осовременивает эту игру, добавляет привычное меню и нормальные переводы на другие языки. Попробуйте этот проект. Удачи!

    2. Здравствуйте. Павел, подскажите пожалуйста как вы установили русскую версию Cave Story на RetroPie?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *