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 из исходников, то немного информации об кросс-платформенной компиляции этого движка, вы можете найти здесь. Существует несколько вариантов сборки:
- Через Makefile;
- С помощью 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-совместимой системе и статической линковки, мы получаем исполняемый файл с минимальным набором зависимостей, который, теоретически, должен работать практически в любом популярном дистрибутиве:
|
1 2 3 4 5 6 7 8 9 10 11 |
exl@exl-virtual-machine:~/Games/NXEngine-RUS > ldd nx linux-vdso.so.1 => (0x00007fff75ddb000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7bffa02000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7bff7e5000) libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f7bff52b000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7bff228000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7bfef23000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7bfed0c000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7bfe944000) /lib64/ld-linux-x86-64.so.2 (0x00007f7bffc25000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7bfe72d000) |
Помимо этого, при компиляции приложений в LSB-системе, будет отсутствовать ошибка связанная с GLIBC/GLIBCXX, что позволит приложению запуститься на любых дистрибутивах, выпущенных позже 2006-го года:
|
1 2 3 4 5 6 7 |
exl@exl-virtual-machine:~/Games/NXEngine-RUS > strings nx | grep GLIBC GLIBC_2.1 GLIBC_2.0 GLIBCXX_3.4 GLIBC_2.2 GLIBC_2.3 GLIBC_2.1.3 |
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 не выглядят слишком маленькими и отлично читаются.
Макрос |
Платформа |
|||||||||||
Таблица предопределённых макросов и их использование в проекте NXEngine
Помимо этого, будет полезно прочитать файл «nx.pro», в котором тоже описывается назначение каждого макроса.
3.4.2. Локализация
Для включения русской локализации нужно расскоментировать в Makefile строчку, содержащую «-D_L10N_CP1251» или изменить строку #20 в файле «nx.pro»:
|
1 |
CONFIG -= l10n_rus |
на
|
1 |
CONFIG += l10n_rus |
После чего необходимо полностью пересобрать NXEngine. Следует заметить, что для русской версии игры используются русифицированные DATA-файлы, выдернуть которые можно из русскоязычных пакетов в этом разделе.
3.4.3. DATA-файлы
После компиляции NXEngine, создастся исполняемый файл, которому нужны DATA-файлы для корректной работы. Их можно взять, «распотрошив» готовые к запуску архивы с движком и игрой, которые можно скачать ниже. В соответствии с описанием, данном в этом разделе, поместите необходимые для работы приложения файлы в корневой каталог NXEngine.
4. Центр загрузки
Загрузить последние версии NXEngine, собранные из исходного кода для различных платформ и операционных систем, можно в таблице размещённой ниже. Архивы представляют собой готовые Bundle-версии движка с уже установленной игрой Cave Story, которые следует лишь распаковать или установить, а затем запустить.
Готовые пакеты, предназначенные для запуска на конечной системе, спасибо за хостинг 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 к себе на сайт, в раздел загрузок.


















Встреча с шипами просто потрясающая. Кстати, рекомендую — Hotline Miami и Droid Assault, потрясающие игрушки в 8 битном стиле.
С шипами на первом уровне?
Спасибо за рекомендации, обязательно посмотрю эти игры.
Пара поправок:
1) Pixel сам никогда не портировал свой движок ни на какие платформы. Портировали энтузиасты на условиях: а) написать прототип самостоятельно б) получить после этого исходники и никому их не давать.
2) Кейтлин (автор nxengine) — она.
Большое спасибо. Поправил статью.
Доброго !
Спасибо за ваш труд, я вышел на эту статью пытаясь установить порт Cave Story на RetroPie.
Как я понял там используется NxEngine из основной ветки, которая русские ресурсы не поддерживает.
Вопрос — почему вы держите отдельный репозиторий, не получится добавить ваши патчи в основную ветку ?
Доброго дня!
Я не задавался целью протолкнуть свои патчи в основную ветку NXEngine, некоторые из них сделаны в спешке и имеют весьма посредственное качество, так как делал я их в основном для себя. Для того, чтобы протолкнуть что-то в апстрим, требуется провести работу по их причёсыванию, у меня на это нет времени и желания. Тем более у моего знакомого вышел проект под названием NXEngine-evo, который осовременивает эту игру, добавляет привычное меню и нормальные переводы на другие языки. Попробуйте этот проект. Удачи!
Здравствуйте. Павел, подскажите пожалуйста как вы установили русскую версию Cave Story на RetroPie?