Как написать квестовую RPG
Чистый лист — челлендж не только для художников, но и для геймдизайнеров. Здорово просто следовать за вдохновением в разработке игр, но иногда его нет и спасает методология. Перевели статью, где автор по шагам разбирает процесс создания квестовой RPG — с чего начать, как не отвлечься от основной идеи и что поможет в работе.
Я написал простую текстовую RPG в типичном фэнтезийном сеттинге. Можете поиграть в браузере. В проекте есть основной квест и семь дополнительных, а на финальном экране будет видно, какие из них вы прошли и пропустили. Сейчас расскажу, как именно создавался этот мини-проект.
Подготовка
Ресерч и брейншторм
Я понимал, что такое сайд-квест, и был готов сразу записать несколько идей. Но у меня был довольно небольшой опыт с RPG, при этом бывалые игроки и разработчики наверняка уже выдали тонны прекрасных концептов для сайдов. Мне оставалось только прочитать и бессовестно позаимствовать некоторые из них.
Пару лет назад Nerdarchy опубликовал список дополнительных квестов для RPG, и у Boccob в блоге есть несколько таких списков.
Я их прочитал и стащил идеи сделал кое-какие заметки. Вот тут пришла пора взяться за ручку и бумагу. Через пару брейнштормов в моем блокнотике появился примерно такой список:
заточение в поместье: сбежать от садиста-хозяина;
спасти ребенка из логова огра;
закупиться (доспехи, оружие, травы и т. д.);
выиграть схватку в Долине Зеркал;
найти компонент заклинания для волшебника;
…
Одни задачи звучали захватывающе, другие — муторно и сложно. Оставалось разобраться, какие из них использовать.
Выбор главного квеста и дополнительных
Стащив идею из Moonrunner Стивена Хэнда, я решил, что в основном квесте нужно выслеживать преступников и передавать их властям. Для сайдов уже был готов список, но не все ответвления я взял из него — многие пришли в голову, когда я начал структурировать тайтл.
Написание
Платформа Arcweave — отличный инструмент для создания интерактивных историй. Можно быстро набросать ключевые точки сюжета, а затем прописать отдельные сцены, не отрываясь от общей картины.
Когда я начал добавлять первые элементы и взаимосвязи, у меня даже толком не было контента.
Структура превыше всего
Первая схема отражала сюжет в общих чертах. Методом тыка я решил, что история будет состоять из пяти-шести основных шагов и назвал их MQ1, MQ2 и так далее (от Main Quest — Основной квест). Конечно, смысла почти не прибавилось, но так было уже лучше, чем пялиться в пустое окно платформы.
И снова почти произвольно я добавил кое-где сайд-квесты, назвав из SQ1, SQ2 и так далее. Понятия не имел, какими они будут, просто хотелось получить общее видение по размерам проекта и его структуры..
На этом этапе было решено, что некоторые дополнительные истории будут взаимосвязаны. Например, SQ5 откроется, только если пройти SQ2. Хотя в итоге от этой идеи пришлось отказаться.
Первые наметки сюжета выглядели вот так. Это не функциональная блок-схема, в ней нет двусторонних взаимосвязей, то есть нельзя вернуться к основному сюжету из сайд-квеста. Да и контента тут еще тоже нет. Но такая визуализация вдохновляет куда больше, чем пустое рабочее пространство.
Заглушки — волшебный инструмент. Пока вы ждете подходящую идею, можно выделить под нее место. Словно расставляете пустые тарелки, на которые потом выложите вкусности. Просто пока не знаете, какими именно будут угощения.
Написание квестов
Я решил, что сделать город стартовой локацией — хорошая идея. Только прошел Sorcery! 2 с ее незабываемым Кхэрэ, да и в Moonrunner действие происходит в городе. Оба тайтла отличились хорошо прописанными вдохновляющими сюжетами.
Конечно, было понятно, что не вся игра будет завязана на истории и не весь сюжет будет протекать в городе. Но здорово начать в кипящем жизнью месте, а потом уйти в дикую Каменистую Долину.
Arcweave позволяет разбивать сюжет на несколько схем — так называемые «борды». Для каждой сцены или сайд-квеста можно создать свою борду, не загромождая основную блок-схему.
Первым дополнительным квестом стал сюжет с карманником. Закончив его, я понял, что мне нужен план. Пришлось отвлечься от схемы, открыть текстовый файл и заполнить кое-какие пробелы:
РЫНОК ГОРОДА ЛАМ’ИА (MQ1)
----------------------
ОСНОВНАЯ ЦЕЛЬ:
Добраться до Хаотичной нейтральной таверны.
ДОПОЛНИТЕЛЬНЫЕ ЦЕЛИ:
* помочь торговцу донести пшеницу. НАГРАДА: сила + голда.
* карманник украл ваш кошелек. Преследовать?
ХАОТИЧНАЯ НЕЙТРАЛЬНАЯ ТАВЕРНА (MQ2)
----------------------------
ОСНОВНАЯ ЦЕЛЬ:
Поговорить с человеком по имени Тень.
ДОПОЛНИТЕЛЬНЫЕ ЦЕЛИ:
* победить местного чемпиона по выпивке. НАГРАДА: деньги.
* ввязаться в потасовку. НАГРАДА: ???
* тихонько выпить свой эль, ничего не делая.
...
Пользователь должен понимать свою цель в каждой сцене. Причем, все сюжеты должны вести к достижению общей цели по поиску и поимке преступника.
Чтобы не отходить от заданного вектора, решил заполнять эту скучную таблицу (см. выше). Получился отчет в строгом формате: ЛОКАЦИЯ, ОСНОВНАЯ ЦЕЛЬ, ДОПОЛНИТЕЛЬНЫЕ ЦЕЛИ. Он помог придерживаться строгих правил, которые я установил:
Ввести одну цель для одной ступени основного квеста, которая продвигает игрока по сюжету.
Разбить основной сюжет на несколько локаций.
Прикрутить сайд-квесты к основной сюжетной линии.
Заполнив отчет, я вернулся к блок-схемам и перешел к самому интересному — начал прописывать сцены игры.
Разбиение на борды
Очень круто, что Arcweave позволяет разбить историю. Слева формируется список, через который можно попасть на любую борду. Получается классическая структура папок.
Размещая каждый сайд-квест на собственной борде, проще переключаться между ними в процессе написания игры. А значит, можно создать в истории сколько угодно глав, при этом их удобно читать и редактировать. Когда дополнительный квест обрастает различными элементами, я перемещаю его на отдельную борду. Джамперы позволяют переходить к сайду из основной сюжетной линии.
Заключительные штрихи
Финальный экран
Я ввел числовую переменную, чтобы следить, какие сайды запустил игрок.
Всего один integer для каждого квеста показывает, ждал ли игрока успех/поражение или он просто проигнорировал сайд. Начальное значение переменных — 0. Если оно не меняется, значит, квест пользователя не заинтересовал. Если же игрок решился на прохождение, переменной присваивается либо значение 1 (победа), либо -1 (неудача). Если сайд был запущен, значение соответствующей переменной по модулю будет 1.
Складывая значения всех integer по модулю, получаем количество квестов, которые открыл игрок: quest_sum = abs(quest_1) + abs(quest_2) + …
Финальный экран формируется после запуска серии условных операторов if. Пришлось написать несколько условий, рассматривающих исход квестов, чтобы показать успехи и поражения игрока.
Вот так это выглядит для пользователя:
Пожалуй, на основании этих результатов можно присваивать пользователю характеристики типа «поверхостный игрок» или «перфекционист». «Выслеживая преступника вы взялись всего за два дополнительных квеста. Вас можно назвать поверхностным, не так ли?» :)
Визуал
Хотел отдельно отметить невероятный арт, который мне посчастливилось скачать для игры.
Все картинки взяты с Freepik бесплатно, для этого нужно указывать их источник. Что, кстати, нужно делать всегда. Я создал отдельную страницу Credits с указанием авторов иллюстраций, на которую можно попасть в начале и в конце игры.
Итоги
Процесс написания
Написание игры длилось около недели, при этом проект занял лишь часть рабочего времени. Было здорово, хотя он нужен только, чтобы немного развлечь читателей. Я протестировал инструменты и процесс создания таких игр. Конечно, все истории разные, но когда так долго смотришь на пустой экран, что глазам требуется отдых, понимаешь, что немного методологии не помешает.
Что касается инструментов: старые-добрые карандаш и бумага все еще хороши для черновой работы, шлифовка и тестирование шли в Arcweave.
Тайминг
Стоит признать, что для учебного тайтла игровой процесс длится дольше, чем планировалось. Если браться за все сайд-квесты, потратишь далеко не пять минут. Я немного подредактировал сюжет, но не урезал его слишком сильно.
Не хотелось убирать дополнительные квесты. Ведь вся фишка такой игры — предложить варианты развития событий, которые пользователь может принять или отклонить.
Обрезать сцены тоже не стоит. Сократите их, и сломаете ощущение цельной истории. Вместо развернутого сюжета игрок получит список покупок, типа:
Вы на пути в таверну, кто-то украл ваш кошелек. Преследовать (кликнуть сюда) или проигнорировать (кликнуть сюда)?
Вы проигнорировали происшествие и пришли в таверну. Тут драка. Примите в ней участие (кликнуть сюда) или проигнорируете (кликнуть сюда)?
Вы втянулись в драку, но недостаточно сильны, и вас вытолкнули. Идет соревнование, кто больше выпьет. Примите в нем участие (кликнуть сюда) или проигнорируете (кликнуть сюда)?
Уныло, не правда ли? В оригинале все совсем не так, но не стоит верить мне на слово. Переходите по ссылке и поиграйте сами, буду рад фидбеку.