[Перевод] Циклическая генерация подземелий на примере Unexplored

image


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

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

В dungeon crawler’е Unexplored использован фундаментально иной подход (см. рисунок 1). Вместо линейных путей в качестве самой базовой структуры он изначально использует циклы. Разница оказывается поразительной: при старом подходе хорошие и интересные циклы могли возникать случайно, а в Unexplored они являются запланированной особенностью результата работы генератора.

https://i1.wp.com/ctrl500.com/wp-content/uploads/2016/07/basic-cyclic-explantion.png


Рисунок 1 — циклы против деревьев.

Как же это работает? Когда Unexplored начинает генерировать подземелье, она стартует с произвольной начальной точки на карте. Но вместо создания ветви к целевой точке она создаёт цикл, состоящий из двух путей, соединяющих вход и конечную точку. Такие циклы гораздо лучше подходят к стандартным паттернам дизайна уровней, чем линейные пути.

Каждый цикл имеет путь A, ведущий от входа к конечной точки, и путь B, ведущий назад. В зависимости от абсолютной и относительной длины путей A и B можно превращать каждый цикл в паттерн дизайна (см. Рисунок 2). Например, когда A короткий, а B длинный, можно разместить в конечной точке цикла закрытую дверь, а ключ расположить в конце B, прямо перед тем, как можно будет вернуться к основному пути. Так будет создан уровень, где игрок сначала видит запертую дверь, а когда он находит подходящий ключ, то ему не нужно идти далеко, чтобы найти открываемую им дверь. Очевидно, что для этого требуется, чтобы игрок не мог достичь B прямо из входа в цикл, хотя может оказаться интересно, если он сможет сразу видеть B и ключ.

Ещё один пример, хорошо работающий с длинным A и коротким B — можно поместить между входом и B потайную дверь, создавая скрытый срез. Или B может просто быть более рискованным маршрутом, чем A, потому что на нём находится опасный враг или комната со множеством ловушек. Существует множество возможностей, на рисунке 2 показаны некоторые из них.

b3853d41f5d7796a55e2c706fd8bc680.png


Рисунок 2 — примеры паттернов циклического дизайна.

Результаты оказываются потрясающими. На рисунке 3 показан уровень, сгенерированный игрой Unexplored. Он состоит из большого цикла «замок-ключ» с циклом, заполненным большой пропастью. Чтобы добавить немного интересности, добавлен небольшой цикл гамбита. Конструкция проста, но эффективна. На самом деле, мы осознали, что для большинства уровней часто достаточно всего пары циклов; уже при паре циклов уровни приобретают уникальную структуру и характер.

https://i1.wp.com/ctrl500.com/wp-content/uploads/2016/07/the-ring-level.png


Рисунок 3 — прохождение уровня.

Благодарности: идея циклического создания подземелий возникла во время исследовательского воркшопа в канадском Banff Center. Я не могу присвоить себе авторство этой идеи, поэтому делюсь этой честью со всеми, кто был в нашей рабочей группе.

© Habrahabr.ru