Декомпозиция классов: подход к разнообразию игровых систем на примере D&D и гонок

7b461a9719fd8335144de6dd0a111e54.png

Богатая мета и разнообразие игровых классов — постоянная отличительная фишка RPG и еще ряда жанров, обеспечивающая поддержание интереса игрока и высокую реиграбельность. Но чтобы игрались все классы действительно хорошо, нужно уметь их правильно балансировать и комбинировать связки навыков, отличающие их друг от друга.

В своей работе я часто опираюсь на ресурсный подход к дизайну систем, описанный Эрнестом Адамсом (Ernest Adams) и Джорис Дорманс (Joris Dormans) в книге Game Mechanics: Advanced Game Design. Это дизайн в абстракциях, который представляет игру как экономическую систему. Подробнее с ним вы можете ознакомиться в книге или на Machinations.io. 

А под катом я расскажу про основы такого подхода и приведу практические примеры, как его применять в дизайне классов для игр любого жанра — на основе Dungeons & Dragons 3.5 и гонок, которые мне когда-то доводилось разрабатывать. 

Основы экономики игры

Сначала вкратце разберем, из чего состоит экономика игры. Я не претендую на научную корректность определений и не буду брать их из Википедии — просто своими словами опишу необходимые термины. 

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

В диаграммах Machinations используются подобные обозначения элементов экономики: в виде треугольников и круговВ диаграммах Machinations используются подобные обозначения элементов экономики: в виде треугольников и кругов

Между ресурсами могут иметься связи, и эти связи бывают прямыми и косвенными. Прямаясвязь — это обмен ресурса. Когда ресурс перетекает из одного хранилища в другое или когда вы меняете один ресурс на другой — это прямая связь. 

Пример: те же минералы из StarCraft. Залежи минералов являются хранилищем. В одном кристалле лежит 900–1800 минералов. Пока они лежат в кристалле, игрок не может их потратить. Рабочий за цикл добывает 5 единиц минералов. Пока рабочий в пути, он сам является хранилищем минералов. Он забирает 5 минералов из залежей, они теперь хранятся на рабочем, его можно убить (залежи уничтожить нельзя), но игрок все еще не может эти минералы тратить. В конце рабочий приносит 5 минералов на базу, и минералы поступают на счет игрока. Это третье хранилище в цепочке: теперь эти минералы полностью под контролем игрока, и он тратит их по мере необходимости. 

a99252723188f385a67bc1f0850bf197.jpeg

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

Косвенную связь отличает то, что ресурс с такой связью не тратится на обмен, а только влияет на другие связи и ресурсыКосвенную связь отличает то, что ресурс с такой связью не тратится на обмен, а только влияет на другие связи и ресурсы

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

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

Главный трюк, благодаря которому подобное описание геймплея игры работает — то, что в качестве ресурса можно представить все что угодно: не только какие-то измеримые вещи, которые обмениваются на другие вещи, но и что-то абстрактное. Мана — ресурс (измеримый), уровень персонажа — ресурс (измеримый, обычно не тратится). Репутация игрока в 4х — тоже ресурс (измеримый или нет, в зависимости от системы), тактическое преимущество на поле — тоже ресурс (неизмеримый). И навык конкретного игрока — это ресурс: он не меняется в процессе игры, но имеет косвенные связи с множеством элементов экономики. 

Шахматы можно представить как игру с двумя ресурсами: количеством фигур и тактическим преимуществом. В процессе игры игрок разменивает свои фигуры на то, чтобы получить тактическое преимущество на поле. Игра заканчивается, когда один из игроков достигает »100 очков» тактического преимущества — мата. И чем более опытный игрок играет в игру, тем выгоднее его обменный курс фигур на преимущество. 

Эту схему можно усложнить. У каждого типа фигур — свой обменный курс. И навык противника на этот обменный курс тоже влияет. И противник может отобрать это преимущество. Но подобной схемы достаточно для демонстрации принципаЭту схему можно усложнить. У каждого типа фигур — свой обменный курс. И навык противника на этот обменный курс тоже влияет. И противник может отобрать это преимущество. Но подобной схемы достаточно для демонстрации принципа

Это весь необходимый фундамент. Чтобы работать с дизайном в подобном фреймворке, необходимо определить центральный ресурс в системе — тот ресурс, к которому все сводится в конечном итоге. И посмотреть, как на него влияют все остальные ресурсы: где происходит прямой обмен, а где лежат косвенные связи. 

А теперь разберем все это на примерах.

Дизайн классов в RPG

Для простоты примера возьмем какую-нибудь RPG, ориентированную на бои. Например, Dungeons & Dragons часто ругают, что это RPG про бои и кидание кубиков, а не ролевой отыгрыш — значит, для наших целей она отлично подходит. 

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

Чтобы применять ресурсный подход к дизайну классов, надо определить этот ресурс и то, каким образом другие игровые ресурсы с ним взаимодействуют.

Как и в любой игре про бои, центральный ресурс в D&D — это сила персонажа, которая получается из произведения выживаемости на DPS (Damage per Second — урон в секунду). Подробнее об этом можно почитать здесь.

Сила любого персонажа игры рассчитывается как на этой схемеСила любого персонажа игры рассчитывается как на этой схеме

Любой персонаж состоит из этих двух параметров. Можно менять сами параметры и таким образом получить какое-то количество разных персонажей. Танк имеет низкий DPS и высокую выживаемость «от природы», дамагер — наоборот. Еще можно представить какого-нибудь среднего персонажа, у которого обе характеристики где-то посередине. А также двух персонажей, у которых обе характеристики низкие или высокие. На этом все: пять персонажей, два из которых не являются сбалансированными. При этом какой-то интересный геймплей за них представить сложно. 

Что нужно сделать, чтобы придать этим персонажам жизни и создать какой-то особенный геймплей для них? Если мы говорим про D&D, то с учетом расширений в D&D десятки классов персонажей. Эту схему нужно обогатить новыми ресурсами и связями.

Например, так.

Тестовый образец №1Тестовый образец №1

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

1468c876a17a1089d8d3fbf423d16a84.png

Здесь и далее сразу замечу, что то, как конкретно будут работать связи — это уже задача дизайна. В D&D варвары заранее объявляют, что хотят обменять выживаемость на атаку, и входят в ярость. И тратят на это класс брони. Но ту же самую связь можно задизайнить по-другому. В Diablo варвары получают бонус уже после того, как потеряли HP. Это два разных варвара: у них по-разному работают косвенные связи «выживаемость-DPS». И сама выживаемость — это комплексный ресурс, который состоит из HP и брони (и уворота, и еще чего-нибудь). Можно тратить разные компоненты выживаемости, но при этом структура класса «варвар» не меняется. В абстрактной ресурсной схеме это одинаковые прямые и косвенные связи. 

Ну, а мы идем дальше.

Тестовый образец №2Тестовый образец №2

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

24cff3f5a1a200af8c9f13396355bad7.png

Опять-таки, схема не идеально точная и ее можно модифицировать. DPS  мага в D&D так же будет зависеть от того, заклинание какого круга он потратил: чем выше круг, тем больше DPS в этот раунд. То есть, каждый круг заклинаний — это отдельный ресурс со своим курсом обмена заклинания на очко DPS. Если совсем занудствовать, то можно сказать, что на некоторые заклинания маги тратят деньги в виде материальных компонентов: глаз тритона, перо ворона и вот это все. И это все — пространство для дизайна альтернативных классов и престиж-классов. Спонтанные маги, которые не завязаны на компоненты, маги, которые могут обменивать один круг заклинаний на другой, и так далее. 

Посмотрим еще один класс.

Тестовый образец №3Тестовый образец №3

И снова очень знакомые цифры. Это вор и его производные классы. В D&D вор наносит дополнительный урон по противнику, если атакует его вместе с союзником. Я назвал этот ресурс тактическим преимуществом. У него два состояния — 1 или 0: либо он есть, либо его нет. И он обладает косвенной связью с DPS. В отличие от слотов заклинаний, преимущество не тратится на проведение атаки. 

b65ed28068945799e1ef5cb0dc3d49f4.png

Для интереса я также включил в схему зависимость уровня. Связь с DPS и выживаемостью — общая черта всех классов системы D&D, да и вообще большинства игр: чем выше уровень, тем больше у персонажа HP и тем лучше он бьет. В случае вора уровень напрямую влияет на модификатор DPS дополнительного урона, хотя это справедливо и для примеров выше: магу от уровня становятся доступно больше слотов заклинаний и более высокие круги, у варвара с уровнем улучшается ярость и количество ее применений в день. 

Я могу делать это весь день — но, думаю, общий принцип понятен. И RPG — это наиболее наглядный пример, чтобы уловить подход. Задача создания классов в RPG относительно простая на базовом уровне: это все работа с архетипами, которых в массовой культуре накопилось бессчетное множество. Вам все равно нужно будет дизайнить конкретное исполнение класса. Ресурсные схемы не дают ответа на то, как конкретно должны работать особенности этого класса. Они только описывают общий паттерн на самом верхнем уровне. Архетипы персонажей тоже с этим справляются. 

Задача же становится гораздо интересней, когда устоявшихся архетипов нет — или вы с ними не знакомы. 

Дизайн классов для гонок

Гонки — пример гораздо более интересный. Да, там тоже есть свои классы, и в какой-то мере они устоялись. Есть машины передне-, заднеприводные и с полным приводом. Машины с высокой акселерацией, или с высокой максимальной скоростью, или выдающейся управляемостью. Но, во-первых, в эти тонкости может быть сложно погрузиться, если вы не провели за реальным или виртуальным рулем сотни часов, и во-вторых, гонка может быть необычной. Это может быть не Need for Speed, а Mario Kart, в котором вы не захотите грузить игрока особенностями привода и характеристиками сцепления с трассой. 

Определение центрального ресурса

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

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

0dd7def9659690775d89125b264e34a2.jpg

Создание классов

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

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

Для примера я взял Mario Kart, в котором есть несколько дополнительных элементов геймплея, которые мы также можем связать со временем. 

Дрифт

Каждая машина в Mario Kart умеет дрифтить на поворотах. Если продержаться в дрифте достаточно долго, то машина получает ускорение. 

fb39f44479f2f4c6290a6412f2158c5e.jpeg

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

176ca5f6e0c6e550cc8f04dff6ae8e81.jpeg

Трамплины и нитро-панели

На трассах Mario Kart есть специальные элементы, которые дают машине ускорение. Машина ускоряется при проезде по специальным панелям или трамплинам аналогично дрифту. 

b3c87577f9b976b9df4c3996041de683.jpeg

Несмотря на то, что эффект похож на ускорение после дрифта и конкретно в Mario Kart это одна и та же характеристика, я на схеме вынес взаимодействие с объектами в базовый ресурс, который напрямую связан со временем. Мастерство дрифта и мастерство выбора траектории движения по всей трассе — это разные навыки игрока, и я бы, скорее всего, преимущества от них разнес на отдельные классы машин. 

Оружие

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

7a03ba55a10a1fa3e8feb7a30223c81b.jpeg

Сила оружия — интересный параметр. В отличие от всех остальных, он не экономит время игрока, а замедляет всех конкурентов. То есть, затягивает гонку, что может быть веской причиной не включать такую характеристику в систему. А также непомерно усложняет схему. По уму, сила оружия должна быть связана не с временем прохождения трассы, а со скоростью противника. А на само время трассы влияет скорость игрока против скорости противников. Но такая детализация уже за рамками статьи. Тем не менее, я оставлю этот ресурс в примере, потому что в Rock«n"Roll Racing ему вполне нашлось место. 

Заключение

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

Добавлю, что я не эксперт в автомобилях или гоночных играх — не более, чем любой другой рядовой игрок. Такая детализация — это результат декомпозиции игры в абстрактные ресурсы, характеристики и отслеживание связей между ними. Этот подход работает и для RPG, и для гонок, и для других игр при переходе к достаточному уровню абстракции. 

Этот прием не поможет вам довести игру до конца. Каждую связь нужно уже в деталях задизайнить и забалансить. И от этого будет зависеть то, какую конечную форму примет игра. Но с его помощью вы можете решить проблему «чистого листа» или декомпозировать референсные игры, чтобы разобраться, на каких принципах они работают. Подобные схемы могут показать, что у вас в игре недостаточно базовых элементов для построения паутины связей, обеспечивающей нужную вариативность, и стать вдохновением для новых фичей, которые прикроют дыры. Примерно так мог бы появиться дрифт и нитро-панели в Mario Kart. 

А в комментариях мы можем поупражняться и порисовать схемы для всех классов D&D из Player«s Handbook и Complete.

© Habrahabr.ru