Disengage - mobile jrpg

Разработка прототипа походовой мобильной jrpg с партией на движке Godot.

Disengage - mobile jrpg

Давно хотел потестировать мобильное направление в 3д и выбирая основу для первого проекта в этой области остановился на jrpg-жанре, в его классическом походовом варианте.

Для 2д-проекта на смартфон я бы скорее взял Solana2d (или как он там сейчас называется), где код пишется на Lua. Ну а для 3д как обычно использовал Godot, и естественно, никакой не 4-й версии, где поддержка андроида тоже появилась, а давно адаптированной к нему 3х в варианте с простым gles2 рендером. 4-ка - это про показать уровень графики, а не про запускаться на максимальном количестве устройств.

Помимо стандартного скачивания шаблонов экспорта под платформу, в случае с андроидом придется установить ещё и Android Studio. Собственно, в Linux Mint, где я собирал проект, с этим всё просто - достаточно поставить её из магазина приложений. Внутри студии правда потребуется кое-что настроить, докачать и создать файл ключей, но это не слишком сложно, плюс мне достаточно для одного проекта настроить это один раз (так как не собираюсь выкладывать получаемый в итоге apk файл в google play).

Далее уже внутри редактора Godot потребовалось поменять/отключить некоторые глобальные настройки (связанные в основном со светом, материалами), чтобы на телефоне графика отображалась без артефактов. Источники света можно было вобще убрать, но после тестов я пока остановился на включенном во время сражения directional light, который не даёт теней + один omni light с включенными тенями. Материалы персонажей пока что реагируют на свет и затенения, но, возможно, стоит отключить им эту настройку, чтобы цвета стали ярче.

В данном прототипе я решил совместить походовые jrpg-сражения в стиле приблизительных Final Fantasy 7-9 с механикой забегов по веткам абстрактных подземелий, наподобие того как это было реализовано в файтинге FF: Dissidia - специальный режим с последовательным разбором/прохождением колоды карточек, среди которых попадаются сражения, предметы, сопартийцы и прочее.

<i>На начальном этапе просто тестировал 3д-сцену на телефоне с кнопками настройки освещения.</i><br />
На начальном этапе просто тестировал 3д-сцену на телефоне с кнопками настройки освещения.
<i>Текстуры не сразу отображались корректно, в отличие от вида на ПК - нужно было выставить правильные настройки. При этом на примитивах текстуры уже лежали правильно, но не на моделях с костями.</i><br />
Текстуры не сразу отображались корректно, в отличие от вида на ПК - нужно было выставить правильные настройки. При этом на примитивах текстуры уже лежали правильно, но не на моделях с костями.
<i>Затем, когда всё стало нормально с отображением, перешёл к созданию моделей героев разных классов:</i><br />
Затем, когда всё стало нормально с отображением, перешёл к созданию моделей героев разных классов:
<i>Low-poly персонажи разных классов, сделанные в Blender</i><br />
Low-poly персонажи разных классов, сделанные в Blender

То есть, таким образом я ухожу от разработки чего-то неподъёмного, куда нужен сюжет, локации, сопровождающие персонажи и масса прочих вещей к прохождению цепочки сражений, между которыми игрок может донабрать в партию новых героев, прикупить какие-то предметы и так далее. В конце цепочки прогресс сбрасывается и можно проходить её заново.

Что касается накопления какого-то несгораемого прогресса, тут мне захотелось реализовать нечто вроде системы профессий, опять же время от времени фигурирующей в серии FF. Суть в следующем - есть некие браслеты/кристаллы профессий, внутри которых есть ветки прокачки. Каждый персонаж может экипировать до двух таких браслетов - первый определяет внешний вид героя, а оба они дают свои активные и пассивные способности, возможно, разрешения на использование определённой экипировки.

Таким образом, большинство присоединяющихся персонажей представляли бы собой просто чистый лист, носителя для браслетов. В то время как игрок вначале имел бы 3 дефолтных кристалла начального класса (Странник), которые прокачивались бы независимо и их можно было бы отдать кому угодно, раз за разом теряя уже набранных героев в конце цепочки приключений и начиная новую.

Уникальные персонажи при таком подходе не пропадали бы в конце цепочки, а также могли бы иметь свой своеобразный "встроенный браслет" в качестве первого, и могли бы менять только второй.

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

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

Стоит отметить особенности разработки под тач-управление. Тут потребовалось переработать подход к интерфейсу, потому что варианты реализации из тех игр откуда брались основные концепты - не совсем подходили. Схема с классическими консольными менюшками из FF ещё более менее работала для мышиного управления (как я делал в проекте "Микрокосм" для походового сражения звездолётиков), но добавлять лишнюю кнопку перебора персонажей не хотелось. Удачно вспомнилась реализация из Chrono Trigger, где для каждого героя просто выползала своя отдельная менюшка команд, независимо - так я в итоге и сделал.

На экране с вариантами действий в каждой фазе прохождения приключения на смартфоне тоже было бы неудобно щёлкать на каждую опцию и смотреть, что она делает (в референсной игре опции перебирались стрелками джойстика, а выбор шёл уже по нажатию кнопки), а затем ещё жать на какую-то отдельную кнопку для совершения выбора. Поэтому добавил надписи к каждой опции, а нажатие на кнопку её сразу активирует. И так далее. С экипировкой и прогрессом браслетов тоже нужно будет продумывать, как это лучше сделать под тач, если/когда до этого дойдёт.

<i>Экран прохождения приключения - слева доступные опции, сверху слева следующие опции, которые будут доступны после текущего выбора. Внизу количество накопленных ценностей, справа кнопки открывающие подменю изменения состава партии и смены класса.</i><br />
Экран прохождения приключения - слева доступные опции, сверху слева следующие опции, которые будут доступны после текущего выбора. Внизу количество накопленных ценностей, справа кнопки открывающие подменю изменения состава партии и смены класса.
<i>Сражение. Параметры и команды героев. Справа две кнопки для вращения камеры. Справа сверху кнопка досрочного выхода из боя.</i><br />
Сражение. Параметры и команды героев. Справа две кнопки для вращения камеры. Справа сверху кнопка досрочного выхода из боя.
<i>Зомблин наносит урон героям</i><br />
Зомблин наносит урон героям

Демо

Итак, сейчас в получившемся проекте реализованы следующие вещи:

Игрок получает одного стартового персонажа партии, которому для прохождения доступны два небольших сценария, заканчивающиеся порталом и сбросом прогресса. Внутри каждой фазы сценария игрок выбирает что-то из трёх вариантов: взять ещё одного героя в партию, сразиться с монстром, получить азуру, потратить азуру на предметы.

Между сражениями вы можете добавить/убрать персонажей в партию, поменять их классы (сейчас это странник или волшебник).

На данный момент герои не могут умереть. Сражения не заканчиваются с поражением монстра (нужно использовать кнопку выхода). Опция Enchantment не работает. Все команды в бою сейчас просто наносят фиксированный урон.

В этом проекте также хотелось реализовать систему модифицированной шкалы ATB, о концепте которой писал ранее. На текущий момент модификации ускорения/замедления для шкалы времени уже добавлены, но лишь отображаются и не имеют реального эффекта - команда Magic даёт 2 градации замедления, в то время как команда Item даёт одну градацию ускорения.

Вёб-версия и apk-файл доступны здесь:

55
7 комментариев

Для 2д-проекта на смартфон я бы скорее взял Solana2d (или как он там сейчас называется)

Не понял. А что не так с годотом в 2д? В отличие от того же юнити в годоте честное 2д, небольшой размер билда

1

В Solana размер просто будет ещё меньше, производительность шустрее, ещё более старые телефоны потянут, да и собирать там как-то проще было. А так можно и мобильное 2д на Godot тоже делать (особенно когда уже всё настроено).

вообще выглядит самобытно и интересно, удачи проекту