Добро пожаловать, berk
Twitter Группа Steam Страница Вконтакте Группа C.O.R.E. Dragon Age Контакте Новостная лента RSS
/ Статьи / Общеролевые статьи / Аналитика

Подземелья по фэн-шую

Автор: Michael Cook | Добавил: LootHunter, 28.11.2013 | Просмотры: 1322

Dungeon Feng Shui (1)

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

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

Обратимся к статье Яна Хорсвилла II и Лифа Фогеда «Быстрое заселение уровня с ограничениями по играбельности». В ней описывается способ размещения объектов, таких как враги, предметы и сокровища на уровне при помощи процедур, использующих умное программирование и математические трюки чтобы обеспечить выполнение определённых правил. Правила могут быть довольно нечёткими, вроде «перед тем, как найти сокровище игрок должен сразиться как минимум с тремя монстрами», при этом уровни по прежнему задаются случайно и имеют непредсказуемую конфигурацию. Там используется несколько концепций, которые вам возможно не знакомы, но не стоит отступать — некоторые идеи там действительно великолепны.

Dungeon Feng Shui (2)

Для начала немного теории по решению задач с дополнительными условиями. Как правило, когда вы пишете программу вы даёте компьютеру точные задания. Например, если игрок использует лечащее зелье — прибавить ему 20 пунктов к здоровью. Здесь всё однозначно. Но бывает, что вы описываете ситуацию не точно. Если игрок открывает сундук, то он получает предмет, стоимость которого в магазине не более 100 монет. Это ограничение. Вы не говорите, какую именно вещь получает игрок, но задаёте одно из её свойств. Программа при этом сама ищет подходящее решение (скажем перебирает список возможных предметов и сравнивает их значения).

Ограничения интересны тем, что позволяют достаточно изящно задавать правила (на карте должен быть водопад, в деревне должно быть кладбище рядом с рудником) в то время, как большая часть уровня может варьироваться. Это позволяет автоматизировать игровой дизайн вообще, но сейчас речь не об этом.

Статья Яна и Лифа демонстрирует систему, которую они разработали для описания подземелья таким способом, чтобы программа, получив конкретную карту, могла расставить там объекты и закончить дизайн с удовлетворением всех условий. Эта программа просматривает подземелье, просчитывает все возможные пути от точки старта, к точке финиша, и определяет, какие расположения предметов соответствуют правилам, заложенным дизайнером. Там может быть довольно много параметров, но для начала рассмотрим наиболее простой пример.

Dungeon Feng Shui (3)

Чтобы стало совсем просто, предположим, что в каждой комнате есть только один объект — монстр, сокровище или аптечка. По какому принципу они должны располагаться? В статье указано правило «Игрок должен выжить». Логично. Значит мы должны проверить все пути ведущие от начальной точки, к конечной и присвоить каждой комнате на пути значение, которое характеризует «выживаемость» героя. Поскольку выживание зависит от уровня здоровья можно прямо его изменение и считать этим значением. То есть если в комнате монстр, присваиваем ей, скажем, значение -15, а если лечебное зелье, то присваиваем +20.

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

Dungeon Feng Shui (4)

Это крайне примитивный пример и здесь всё очевидно. Теперь рассмотрим более сложный вариант, который предлагают сами Ян и Лиф.

Dungeon Feng Shui (5)

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

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

Dungeon Feng Shui (6)

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

Расчёты с условиями — это великолепный инструмент, который пока ещё не применяется достаточно широко при процедурной генерации, но наличие большого количества исследователей, таких как Ян и Лиф, наверняка поспособствуют этому. Дело здесь не только в лёгком способе кастомизации для разработчиков, но и в более лёгких путях для не-программистов в использовании подобных систем. Если вы сможете выразить математически заданные вами условия, то программа для процедурной генерации сможет сделать остальное за вас. Восхитительно, и возможно теперь многие люди, которые хотят заняться разработкой игр, смогут себе это позволить.

Хотите знать больше?

Ян и Лиф очень дружелюбны и полны энтузиазма в отношении своих исследований. Лиф разработал инструментарий вместе с технодемо, где он позволяет создавать уровни для прото-рогалика. Они рассказали GDC о своей работе и дали интервью Roguelike Radio и AIGameDev. Короче говоря, они легко идут на контакт и они действительно хотят, чтобы люди использовали их идеи! Решение задач с дополнительными условиями — это не что-то, что часто встретишь в геймдеве, но раз люди готовы совершить скачок, я думаю, что они очень заинтересованы в том, что можно найти в этой области. Если хотите знать больше, но не знаете, с чего начать, я серьёзно предлагаю с ними связаться.

В статье есть ещё много интересных моментов, которые к сожалению здесь уже не уместить. Например, что делать, когда герой ходит кругами или попадает в тупик и должен возвращаться по собственным следам? Если хотите узнать больше, рекомендую Map Generation Speedrun Адама Смита. Сам Лиф также написал руководство, как сделать программу для продвижения с условиями. Решение с условиями — не самая лёгкая тема, если вы привыкли к программистской рутине, но это может быть весело и простота программ означает, что читать дополнительной литературы по ним нужно не много.


Обсудить статью на форуме

Обновления форума

Копирайты

  • C.O.R.E. © 2009 – 2016
Система Orphus Creative Commons License
Войти на сайт?
Логин:
Пароль: