Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров8.7K
Автор оригинала: Joris Dormans
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 показаны некоторые из них.


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

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

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

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

Благодарности: идея циклического создания подземелий возникла во время исследовательского воркшопа в канадском Banff Center. Я не могу присвоить себе авторство этой идеи, поэтому делюсь этой честью со всеми, кто был в нашей рабочей группе.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 25: ↑25 и ↓0+25
Комментарии0

Публикации

Истории

Работа

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань