суббота, 30 января 2016 г.

Идеи и механики для игр #3: Дерево окружения

(Довольно сложный текст, есть недоработки, буду править)

Процедурно генерируемый контент (например рандомные подземелья) является чем-то вроде святого Грааля для игрового дизайна. Способность мгновенно генерировать различный контент может обеспечивать бесконечную реинграбельность. Даже игры с очень поверхностным процедурным контентом, такие как Diablo 2 или NetHack являются играми, в которые можно играть очень много раз заново.

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

Описанная идея является по сути не идее геймплея, но идеей механики дизайна геймплея. Проще говоря, описывая игровой мир в виде дерева, становится легко располагать головоломки и сами подземелья таким образом, чтобы они всегда были решаемыми-проходимыми.

Описание

2016-01-29 20_44_35-Three Hundred __ Mechanic #004

Это карта которую я буду использовать в качестве образца. Она состоит из двух этажей и крыши. Голубые двери – это простые двери, которые могут быть закрыты или открыты, в то время как светло серые двери являются “невидимыми”. Мы можем закрывать и запирать обычные двери, но мы не можем закрывать невидимые. Мы все еще можем заблокировать такие двери, но мы мы должны положить какое-нибудь препятствие, например огонь или баррикаду. Разница чисто косметическая.

2016-01-29 23_29_33-Three Hundred __ Mechanic #004
Это дерево пространства. Оно представляет логическое пространство внутри этого здания и вы можете обратить внимание, что они представлены в том порядке, в котором вы их встречаете. Это очень простое дерево, так как тут нет циклов, двери только в одну сторону или множественные точки входа (то есть лестницы или лифты), но принцип должен быть понятен.

И вот тут происходит магия. Давайте скажем, что мы хотим всего лишь 3 пазла, и для простоты пусть это будут пазлы типо “нужен ключ для двери”, иначе говоря что-то требует X и ты получаешь Y. В примере пазл будет требовать X (ключ) для доступа к новой территории, которая будет содержать либо следующий ключ, либо это будет победа.

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

2016-01-30 00_48_01-Three Hundred __ Mechanic #004

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

2016-01-30 00_50_26-Three Hundred __ Mechanic #004

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

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

Соображения

  • Это очень простая версия системы, которая требует дополнительного исследования, если хочется мультилинейности. Эта версия, например, не подразумевает поддержку возможности входить в комнату в двух разных направлениях. Большинство адвенчур не такие уж и открытые, когда дело доходит до практики. Silent Hill например, позволяет вам входить в область-зону только с одного входа, но может позволять открывать одностороннюю дверь в предыдущую локацию, чтобы сократить время путешествия. Что-то подобное будет легко добавить и обработать, чтобы оно помогало в залочивании пазлов.
  • Строго нелинейная зона будет возможно одним узлом в графе, но даже тут использование предложенной системы-схемы может давать преимущества. Например, путь который вы проходите через нефтеперегонный завод может быть открытым (в смысле, по нему можно свободно перемещаться), но вы все равно попадете на этот путь (эту локацию) после сточной трубы. Еще одним примером будет большая открытая локация, которую можно разделить на множество мелких, таких что один узел не означает каждую из этих локаций, но их совокупность. И эта совокупность будет открываться при входе в одну из комнат.
  • Кто-то может создать план этажа и построить дерево из этого плана. Основываясь на предположениях (например, вы начинает возле задней двери, а не передней), можно сгенерировать очень разные деревья. Возможно должен быть метод создания объединений множества деревьев, для учета разных точек входа. Например, может быть холл и смежные комнаты, в которые можно войти только с одного входа независимо от того сколько дверей ведет в этот холл – это одно поддерево, которое будет разделяться (расшариваться) между двумя различными версиями мира.
  • Множественные точки входа определенно сложный объект для рассмотрения. К счастью, большинство адвенчур не используют эту концепцию. Ее можно подделать, проигнорировать или избежать. Классное решение проблемы генераци локаций с множеством точек входа – повод для гордости.

Комментариев нет:

Отправить комментарий