Ответы к вопросу прошлой недели
Если хотите свериться с ответами за прошлую неделю:
Анализ перетасовки карт
Для колоды из трёх карт существует шесть различных вариантов расположения карт, все равновероятные. Если нам даны карты А, Б и В, то выглядят расклады так: АБВ, АВБ, БАВ, БВА, ВАБ, ВБА. Следовательно, если алгоритм тасования действительно даёт случайный результат, мы ожидаем увидеть шесть результатов (или другое количество, кратное шести), каждый из которых имеет одинаковую вероятность.
Анализ алгоритма №1. Сначала вы выбираете одну из трёх карт на дно колоды (А, Б или В). Затем выбираете одну из двух оставшихся карт, которая идёт в середину (если вы уже выбрали А на дно, тогда вам надо выбирать между Б и В). Наконец оставшаяся карта кладётся наверх (никакого выбора у вас уже нет). Это отдельные, (псевдо)случайные, независимые опыты, поэтому, чтобы их посчитать, мы их перемножаем: 3 * 2 * 1 = 6.
Если вы действительно проделаете эти шаги, чтобы перечислить все шесть возможных комбинаций, вы увидите, что они соответствуют шести результатам, приведённым выше. Алгоритм правильный, это один из двух «стандартных» способов тасования карточной колоды. Второй алгоритм — сгенерировать псевдослучайное число для каждой из карт, а затем разложить карты, следуя этим порядковым номерам. Этот метод — самый простой для того, чтобы расположить список в произвольном порядке в Excel, используя RAND (), RANK () и VLOOKUP ().
Анализ алгоритма №2. Во-первых, если перетасовка действительно случайная, пятидесятикратное повторение не сделает её более случайной — это просто бесцельная трата вычислительных мощностей. А если перетасовка не случайная, то повторение не обязательно поможет, так что вам лучше исправить базовый алгоритм, а не надстраивать на него что-то ещё.
Так что же с этим внутренним циклом? Сначала мы выбираем одну из трёх карт на дно, затем одну из этих же трёх — в середину, а затем одну из трёх — наверх. Как и раньше, это отдельные независимые опыты, поэтому мы перемножаем их 3 * 3 * 3 = 27.
Мы сразу же понимаем: раз 27 не делится на 6 без остатка, где-то кроется проблема. Поэтому, даже не проверяя ничего дальше, мы знаем, что одни расклады будут более вероятны, чем другие. Мы с полным правом могли бы здесь остановиться и официально объявить алгоритм забагованным. Если вы достаточно настойчивы, вы можете отследить все 27 результатов и увидеть, какие раздачи более или менее вероятны и насколько. Достаточно азартный игрок, изучая алгоритм, мог бы действительно произвести эту симуляцию для большой колоды, чтобы получить небольшое соревновательное преимущество.
На этой неделе
Это особая неделя. Ближе к началу курса мы две недели обсуждали баланс транзитивных игр, а затем ещё две недели говорили о вероятностях. На этой неделе две изученные темы мы свяжем воедино — крепким узлом с красивым бантом.
Эта неделя посвящена ситуационному балансу. Что такое ситуационный баланс? Иногда мы имеем дело с транзитивными вещами или что-то вроде того, но их значения меняются во времени и зависят от ситуации.
Один из примеров — эффект зоны поражения. Казалось бы, при прочих равных условиях то, что наносит 500 очков урона нескольким врагам сразу, должно быть ценнее, чем то, что наносит 500 очков урона лишь одной цели. Но насколько оно ценнее? Бывает по-разному. Если вы боретесь с врагом один на один — нисколько. А если на вас толпой налетели пятьдесят врагов, то такая вещь будет в 50 раз ценнее. А бывает, что вы сражаетесь с одним-единственным боссом. Как тогда привести к балансу такую вещь?
Или представьте себе эффект, который зависит от того, что делает ваш противник. Например, в Magic: The Gathering есть карта под названием «Карма», которая на каждом ходу наносит вашему противнику 1 очко урона за каждое его болото, находящееся в игре. Игрока, у которого в колоде 24 болота, такая карта может убить, прямо скажем, насмерть, быстро и без посторонней помощи. Против игрока совсем без болот такая карта абсолютно бесполезна. (Ну, на самом деле она бесполезна, только если у вас в колоде нет других карт, которые могут превратить земли врага в болота. В таком случае ценность «Кармы» зависит от вашего умения сочетать её с эффектами других карт, которые вы можете вытянуть, а можете и не вытянуть). В любом случае, способность карты наносить урон варьируется от хода к ходу и от игры к игре.
Или вот эффект исцеления: в большинстве игр он совершенно бесполезен, если вы уже полностью исцелены, но может стать решающим для победы или поражения — это когда вы сражаетесь с еле живым противником, сами уже еле живы, и вам нужно последнее усилие, чтобы добить его, пока он не добил вас.
В каждом из этих случаев поиск правильной цены на вашей ценовой кривой зависит от внутриигровой ситуации — именно поэтому я называю это ситуационным балансом. Итак, вещь может быть сбалансированной, маломощной или сверхмощной — всё зависит от контекста. Как нам сводить к балансу то, у чего фиксированная стоимость, хотя его польза непостоянна? Если вкратце: мы используем вероятности, чтобы вычислить предполагаемую ценность вещи, именно поэтому мы целых две недели закладывали основу для нынешней работы. Если подробнее: всё сложно, именно поэтому я посвящаю этой теме целую десятую часть курса.
Правда ли, что лучшее решение — это тестирование
Вообще-то существует множество разных методов сведения ситуационного баланса. К сожалению, ответ на вопрос «Какова ценность»? всегда такой — «По-разному бывает!». Поэтому к этой проблеме лучше всего подойти через тестирование — чтобы выяснить, где на графике стоимости будут располагаться разные ситуации. В реальном мире бюджет у нас ограничен, а если бы он и был неограниченным, всё равно нужно было бы знать, с чего начать. Поэтому нам как минимум надо попытаться как можно точнее угадать, и сделать это можно несколькими способами. «Тестировать, тестировать и ещё раз тестировать» — хороший и простой совет, но ответ неполный.
Простой пример — d20
Давайте начнём с простейшей ситуации. Однажды этот вопрос мне задали на собеседовании (и да, я получил работу), так что должно же оно где-то быть полезным.
Сейчас я приведу очень, ну очень упрощённое описание системы боя на основе d20 (двадцатигранный кубик — прим. ред.), которая используется в D&D 3.0 и выше. Вот как она работает: у каждого персонажа есть две характеристики, базовый бонус атаки (или ББА, который по умолчанию равен 0) и класс брони (или КБ, по умолчанию равен 10). В каждом раунде каждый игрок должен осуществить одну атаку на противника. Чтобы атаковать, он бросает 1d20, складывает выпавшее со своим ББА и сравнивает с КБ своей мишени. Если общее значение атаки больше или равно КД — атакующий пробивает броню и наносит урон, в противном случае он промахивается и ничего не происходит. Выходит, что по умолчанию, без дополнительных бонусов, вы должны наносить урон приблизительно в 55% случаев.
А вопрос такой: сбалансированы ли ББА и КБ? Если я дам вам +1 к атаке, будет ли это эквивалентно +1 к КБ или один из показателей более мощный, чем другой? Если бы я задал вам такой вопрос на собеседовании, что бы вы мне ответили? Подумайте об этом минутку, прежде чем читать дальше. Какой здесь центральный ресурс?
Вот моё решение (ваше может быть другим). Во-первых, я понял, что не знаю, как много урона можно наносить и как много здоровья есть у игрока (то есть сколько попаданий можно пережить или сколько попаданий требуется, чтобы убить противника). Допустим, эти значения равны (или равнозначны), это неважно. Должны ли вы попасть во врага один раз, пять или десять — если вы точно так же уязвимы, вы всё равно будете попадать во врага в определённом проценте случаев. И враг будет попадать в вас в определённом проценте случаев. Всё сводится к тому, что ваш процент попаданий должен быть выше, чем у противника. Процент попадания — и есть центральный ресурс, вокруг которого должен строиться весь баланс.
Если у обоих — и у меня, и у противника — шанс попасть друг в друга 5%, то в среднем мы будем попадать очень нечасто. Если у каждого из нас 90% шанс попасть в другого, мы будем попадать почти что на каждом ходу. Так или иначе, наносить удары или промахиваться мы будем одинаково часто или одинаково редко, поэтому никакого преимущества друг перед другом не имеем.
Поиск баланса через центральный ресурс
Итак, в балансе ли друг с другом КБ и ББА? +1 ББА даёт мне +5% к моим шансам на попадание, а +1 КБ даёт -5% к шансу противника попасть в меня. Получается, когда я сражаюсь против врага-одиночки один на один, эти две характеристики действительно равнозначны. Так или иначе, наш относительный процент попадания меняется одинаково в количественном отношении. (Есть одно исключение: если процент становится выше 100% или ниже 0% — никакие дополнительные бонусы уже никак на вас не влияют. Видимо, поэтому ББА по умолчанию +0, а КБ +10 — чтобы достижение такого уровня было всё менее и менее вероятно и требовало очень много бонусов. Пока что мы с вами пренебрежём этими крайностями.)
А что, если битва не один на один? Что, если мой персонаж один, а его окружили четверо врагов? Теперь я могу атаковать только один раз на каждые четыре вражеских атаки, так что +1 КБ здесь гораздо мощнее: бросок, к которому прибавляется КБ, случается в четыре раза чаще, чем бросок, к которому плюсуется ББА.
А если всё наоборот: у меня в отряде четверо спутников и мы наступаем на одного великана? Здесь, при условии, что великан может атаковать только одного из нас за ход, +1 ББА гораздо мощнее, потому что каждый из нас атакует великана по разу за круг, но лишь один из нас при этом сам подвергается атаке.
На деле же, в большинстве случаев D&D мастера любят ставить группы, которые они водят, в положение меньшинства, когда численный перевес на стороне противника — так получается эпичнее (по крайней мере, исходя из моего опыта). Это значит, что в практическом применении КБ мощнее, чем ББА. Две эти характеристики не равноценны на графике стоимости, даже при том, что игра функционирует так, как должна.
Как я и сказал, это упрощение: оно совсем не отражает действительный баланс D&D. Но даже из такой упрощённой системы мы можем сделать интересные выводы: ценность атаки выше, если вас больше, чем врагов. Добавив числовые показатели цены и пользы к проценту попаданий, мы бы могли вычислить, насколько эти показатели более значимы, через функцию численного перевеса — вашего или вражеского.
Какое это значение имеет для геймдизайна
Если вы создаёте игру, где заранее знаете, что ждёт игрока впереди, — например, шутер от первого лица или ролевую игру с уровнями, разработанными вручную, — вы можете использовать это знание, чтобы сбалансировать все характеристики. Например, в нашей упрощённой системе d20, зная, что игроку предстоит сражаться с численно превосходящим его противником, можно изменить КБ на графике стоимости в сторону большей ценности, а значит, и большей цены.
Ещё один способ сбалансировать КБ и ББА и сделать их равнозначными — изменить энкаунтеры в вашей игре так, чтобы примерно в половине случаев враг был многочисленнее, а в половине — малочисленнее отряда игрока. Помимо того что это уравновесит характеристики, в вашу игру будет интереснее играть повторно: прохождение игры с высоким ББА будет совершенно отличаться от прохождения той же игры с высоким КБ. В любом случае, некоторые встречи с врагами будут гораздо труднее других, и игрок сможет взглянуть на сложность каждого энкаунтера с другой стороны.
Цена переключения
Что если бы в D&D вы могли свободно переводить КБ в ББА и наоборот перед каждой новой битвой? Совершенно внезапно они стали равнозначны друг другу и бонус +1 к любой из характеристик становится гораздо мощнее и универсальнее, чем остальные бонусы в игре. Может, в D&D этого и нельзя сделать, зато существует множество игр, где вы можете поменять одну ситуационную вещь на другую.
Шутеры от первого лица — классический пример: вы можете носить с собой одновременно несколько видов вооружения. Например, гранатомёт против медленно движущихся мишеней или больших скоплений врагов, снайперскую винтовку против расположенных далеко одиночных целей, и нож для рукопашного боя. Каждое из этих оружий полезно в разных ситуациях, но если вы можете без задержки переключаться с одного вида вооружения на другое, то имеете дело с суммой возможностей всего оружия, а не с ограничениями одного-единственного.
Раз так, допустим, что мы поднимем цену переключения с одного оружия на другое: пусть на то, чтобы положить одно оружие в рюкзак и взять другое, игрок тратит 10 секунд (если подумать, так будет правдоподобнее: раз вы с собой таскаете 10 единиц огнестрельного оружия и можете моментально переключаться с одного на другое — где и как вы их носите?). Внезапно ограничения каждого вида вооружения становятся значительными, и одно универсальное оружие может стать мощнее, чем целый ассортимент ситуационного. Если вы, наоборот, можете мгновенно переключаться с одного на другое, то куча всевозможного вооружения, где каждое идеально подходит для определённой ситуации, становится гораздо лучше, чем оружие, которое умеет всё, но понемногу.
Что мы можем отсюда почерпнуть? Мы можем влиять на ситуационный баланс, просто меняя стоимость переключения между инструментами, оружием, распределением пунктов характеристик или вообще стратегиями.
Всё это, конечно, хорошо в теории, но как обстоят дела с конкретными цифрами? Давайте посмотрим.
Пример: Невозможно переключиться
Давайте возьмём один крайний случай, где вы вообще не можете переключаться между стратегиями. Например, ролевая игра, где вы можете иметь при себе лишь одно оружие и надевать лишь один доспех, а когда приобретаете новый — автоматически избавляетесь от старого. Здесь расчёт очень простой: выбора нет, поэтому можно легко рассмотреть все ситуации. Очень похоже на расчёт предполагаемой ценности.
Итак, в каких ситуациях ценность того или иного объекта будет выше или ниже и насколько? Как часто вы сталкиваетесь с подобными ситуациями? Перемножьте всё и сложите. Вот простой вымышленный пример, чтобы наглядно показать все вычисления: допустим, у вас есть меч, который наносит двойной урон драконам. Допустим, 10% значимых сражений в вашей игре — против драконов. Предположим также, что в вашей игре урон находится в линейном соотношении с кривой стоимости, так что, удвоив урон, наносимый чем-либо, вы делаете эту вещь в два раз лучше.
Итак, 90% времени меч обычный, 10% времени он в два раза лучше. 90% * 1,0 + 10% * 2,0 = 110% цены. В таком случае «двойной урон против драконов» — это +10% к базовой стоимости. Вот другой пример: у вас есть меч, который в полтора раза мощнее всех других мечей своего класса, но троллям он наносит лишь половинный урон. Давайте также предположим, что половинный урон — это существенный недостаток: он отнимает у вас ваш основной способ наносить урон, поэтому приходится полагаться на другие, менее эффективные источники, и это сильно повышает ваши шансы быть убитым, если вы вдруг встретите тролля. Так что в этом случае «половинный урон» на самом деле делает меч изначально отрицательным. Но давайте ещё добавим, что тролли в вашей игре очень редки, допустим, всего 5% энкаунтеров.
Если обычный меч в вашей игре имеет пользу 100 (в соответствии с вашей кривой стоимости) — меч, наносящий полуторный урон, будет иметь пользу 150, а то, что ваш меч не работает в определённых ситуациях, стоит 250 — просто потому, что тогда вам вместе с мечом крышка. Тогда математика такая: 95% * 150 + 5% * (−250) = 130. Таким образом, ваш меч имеет пользу 130, или на 30% больше, чем обычный меч.
Есть много способов это изменить, много рычагов, которыми дизайнер может воспользоваться, чтобы вмешаться в баланс. Конечно, вы можете изменить цену и пользу объекта, увеличивая или уменьшая урон в тех редких случаях, когда он отличается от базового, либо регулируя другие способности для всех остальных случаев — так, как вы бы сделали с транзитивной механикой.
В ситуационном балансе вы можете изменить ещё и частоту ситуаций — например, увеличив количество троллей или драконов, во всей игре или только в зоне, прилегающей к месту, где игроку достаётся этот особый меч. Ведь если игрок собирается использовать меч, уступающий троллям, в той области игры, где троллей вообще нет, пусть даже оставшееся игровое пространство ими кишит — не такой уж это и недостаток, не правда ли?
Другой пример: Переключение без цены
Теперь позвольте привести другой пример, где вы можете носить с собой сколько угодно ситуационных объектов и переключаться с одного на другой абсолютно свободно. В этом случае ограничения и близко не дотягивают до силы объекта, потому что получение новой способности не имеет цены упущенной возможности.
В таких случаях мы смотрим на пользу всех объектов, которые удалось собрать игроку, и вычисляем, что нового будет уметь объект — того, чего пока не может ни один другой из имеющихся у игрока. Умножьте эту дополнительную пользу на процент времени, когда она будет использоваться, — это и будет ваша дополнительная польза от нового объекта. Так что расчёт здесь очень похож — только мы не обращаем внимания на случаи, когда предмет слаб, ведь всегда можем без труда переключиться на другой.
На практике не всегда всё так просто. Во множестве игр игрок может использовать неоптимальные стратегии, потому что он ещё не успел приобрести нужного для данной ситуации предмета (на самом деле, для большинства игр было бы даже лучше, если бы так и было устроено). Кроме того, игрок может на каждом прохождении находить новые объекты в другом порядке. В итоге вы не знаете точно, как часто будет использоваться тот или иной предмет. Это будет зависеть от того, какие инструменты уже есть у игрока, и от желания игрока пустить в ход новоприобретённую игрушку даже там, где она не оптимальна (оптимальную вещицу под эту ситуацию он ещё не нашёл), но по крайней мере лучше остальных.
Вот пример. Допустим, у вас есть разные мечи, каждый из которых наносит определённому типу монстров много дополнительного урона, чуть больше чем обычно — второму типу, а против третьего типа совершенно бесполезен. Предположим, таких мечей у вас 10, монстров в игре тоже 10 типов, каждый тип одинаково силён и встречается с одинаковой частотой. Не нужно быть математиком, чтобы догадаться, что все эти мечи должны стоить одинаково.
Между тем, мы столкнулись с проблемой. Играя в игру, мы быстро понимаем, что на самом деле все эти мечи для игрока неодинаковы по ценности в определённый момент времени. Вот, скажем, я купил меч, который наносит двойной урон драконам и полуторный — троллям. Значит, где-то в игре есть меч, который наносит двойной урон троллям, но он уже совсем не так ценен для меня, как раньше. Я повышаю коэффициент урона с 1,5 до 2, а не с 1 до 2, так что выгода меньше. Для полной оптимизации я могу приобрести около половины всех мечей в игре и получу хоть какой-то коэффициент повышения урона против большинства монстров и игре, так что каждый новый меч будет иметь для меня всё меньшую ценность.
Как сбалансировать такую систему? Мне приходит в голову несколько способов, и, пожалуй, существует ещё несколько, до которых я не додумался. Всё зависит от того, что подходит конкретной игре.
Предложите скидку. Один из способов — менять цену на ходу. Обыграйте это в повествовании: чем больше мечей вы покупаете у этого торговца, тем больше скидка на следующие для такого замечательного покупателя (можете даже дать игроку «карту постоянного клиента», и пусть торговец ставит на ней печати — некоторым игрокам такие вещи очень нравятся).
Пусть решает игрок. Или вы можете привести всё к балансу, исходя из того, что у игрока нет ничего. Это значит, что в игре будет действовать закон уменьшающейся выгоды, и сам игрок будет решать, сколько ему нужно и когда остановиться — считайте, что это часть игровой стратегии.
Пусть растущая денежная кривая сделает «скидку» за вас. Если игрок будет добывать всё больше денег за единицу времени, то для «уменьшения» стоимости нужно просто держать цены на старом уровне, ведь у игрока будет уходить всё меньше времени на то, чтобы накопить на следующий.
Мечи со скидкой попадаются позже. Вы можете так распределить мечи по локациям, что будете точно знать, где какой игроку попадётся, и скорее всего одни мечи он купит раньше, а другие — позже. Вы можете назначить им разные цены: когда игрок находит новый меч, определённые мечи ему уже доступны — в соответствии с этим вы можете снизить его стоимость.
Само собой, для игр, где можно переключаться с объекта на объект, но у этого переключения есть некоторая цена (время, деньги — что угодно), следует использовать метод посередине между двумя крайними: «вообще нельзя менять» и «можно моментально менять когда угодно».
Цена универсальности
Мы затронули тему универсальности с точки зрения игрока, когда он покупает множество предметов в игре и делает своего персонажа универсальным и способным справиться с разными ситуациями. А что если сам предмет универсален? Так часто бывает, например, в поочерёдных стратегиях реального времени, где отдельные юниты могут быть многофункциональными.
Итак, может быть, лучники сильны против летунов и уступают пехотинцам (обычная схема для стратегии). Допустим, вы хотите создать новый тип юнитов, который силён и против летунов, и против пехотинцев, но не превосходит лучников. Так что, допустим, лучник одолеет летуна и при этом почти не получит урона, а этот новый юнит потеряет в противостоянии с летуном половину очков здоровья (он победит, но дорогой ценой). Этот новый юнит не так хорош против летунов, но хорош для других целей, так что он более универсален.
Другой пример: в шутерах от первого лица, когда вы стоите вплотную к противнику, лучшее оружие — это обычно ножи и мечи, тогда как снайперские винтовки хороши на расстоянии, а вот пулемёт более или менее полезен почти на всех расстояниях (но не так хорош, как всё остальное). Таким образом, вас никогда не застигнут врасплох с абсолютно бесполезным оружием, если у вас есть пулемёт, но в то же время не будет идеального оружия, если вы часто сталкиваетесь с близким и дальними целями.
Сколько стоит такого рода универсальность
Вот ключ: ценность универсальности прямо пропорциональна неуверенности. Если вы заранее знаете, что будете играть на малой карте с узкими коридорами, кучей поворотов и перекрёстков, ножи точно будут полезнее снайперских винтовок. На карте с большими открытыми пространствами всё совсем наоборот. Если же у вас на одной карте есть и замкнутые пространства, и открытые, то универсальное оружие, которое может служить двум целям (пусть даже и посредственно), будет гораздо ценнее.
Допустим, у вас вместо этого случайная карта и равные шансы получения карты, оптимизированной под ближний бой, и карты, оптимизированной под дистанционное оружие, — 50/50. Какая стратегия будет лучше? Универсальное оружие будет умеренно полезно в любом случае, но не идеально, а значит, вы победите тех, кто совсем не угадал, но проиграете тем, кто угадал с оружием.
Лучшего выбора здесь нет, это всё случайная догадка. Такой выбор обычно не очень занимателен: игрок должен выбирать заранее, вслепую, и тогда вся суть игры сводится к тому, чтобы правильно угадать. Если только вы не введёте механизм смены оружия во время игры, чтобы приспособиться к карте, или не разрешите игрокам носить с собой несколько видов оружия, или ещё что-нибудь — и вот мы снова вернулись к тому, что универсальность бывает двух мастей:
- Способность отдельного игрового объекта быть полезным в различных ситуациях.
- Способность игрока переключаться с одного игрового объекта на другой. Чем проще игроку переключиться между объектами, тем менее ценной становится универсальность отдельного предмета.
Теневая стоимость
А теперь, прежде чем мы с вами углубимся в подробные примеры, я хотел бы написать о различных видах цен, которые может иметь игровой объект. Строго говоря, я должен был рассказать об этом, когда мы обсуждали кривую стоимости, но на деле с ними приходится сталкиваться чаще как раз в ситуационном балансе, поэтому говорю об этом сейчас.
Грубо говоря, мы можем разделить все цены объекта на две категории: цена в ресурсах и всё остальное. Когда мы говорили о построении кривых стоимости, я упомянул, что любой недостаток и любое ограничение — это тоже цена. Именно об этом я сейчас и говорю. Экономисты называют это теневой ценой, то есть это цена, скрытая за денежной ценой.
Если вы купите дешёвый радиобудильник за 10 долларов, у него будет ещё дополнительная цена времени и транспортировки (вам надо выйти из дома, чтобы купить эту вещь). Если однажды утром в важный день он не сработает, потому что интерфейс разработан плохо, вы поставили его на 7 вечера вместо 7 утра и пропустили важную встречу, то плохой дизайн будет стоить вам дополнительных денег и времени. Если из-за дешёвых компонентов он через пару месяцев сломается, вам придётся идти и возвращать его или менять на новый, что будет стоить дополнительного времени. Поэтому на первый взгляд он стоит 10 долларов, но истинная цена выше из-за теневой цены, которой может не быть у более качественных часов.
В играх существует два вида теневых цен, которые чаще всего всплывают в ситуационном балансе: невозвратные издержки и упущенные выгоды.
Невозвратные издержки
Под невозвратными издержками я понимаю некие вложения, которые необходимо сделать, чтобы получить доступ к вещам, которые вам нужны. Обычно их можно увидеть в древах технологий в RTS, MMO и RPG.
Например, в стратегиях реального времени, чтобы создать определённый тип юнитов, вам необходимо сперва построить некую структуру, которая будет их обеспечивать. Эта структура может не давать вам никакой пользы, кроме возможности создавать этот тип юнитов. Например, каждый драгун в StarCraft стоит 125 минералов и 50 единиц газа (это явная цена), но, помимо этого, вам необходимо построить «Кибернетическое ядро», чтобы иметь возможность создавать драгунов, — а это стоит 200 минералов, что увеличивает стоимость каждого отдельного драгуна.
Кстати, вы не можете построить «Кибернетическое ядро», если ещё не построили «Врата» за 150 минералов — это тоже входит в цену. Так что вы строите здания, не используете их больше ни для чего, создаёте одного драгуна — и этот красавец стоит вам в общей сложности 475 минералов и 50 единиц газа, а это огромная цена по сравнению с заявленной ценой самого юнита.
Конечно, если вы затем создадите десять драгунов, цена каждого из них сократится до 160 минералов и 50 единиц газа за штуку, что уже гораздо ближе к заявленной цене, потому что за здания вы в большинстве случаев платите один раз. И если вы получаете дополнительную пользу от этих зданий, то часть цены этих зданий расходится на другие вещи — можно уже и не рассматривать её как часть цены драгунов.
Всё же, как видите, вам нужно заплатить некую цену просто для того, чтобы иметь возможность заплатить дополнительную цену, и в анализе вы должны внимательно это учитывать. Когда цена может быть «амортизирована» (распределена) на несколько покупок, изначальная невозвратная издержка должна быть сбалансирована, исходя из ожидаемой стоимости: сколько драгунов предположительно создаст среднестатистический игрок? Задавая стоимость драгунов, необходимо учитывать и эти предварительные вложения.
Вы также можете посмотреть на это с другой стороны, когда задаёте цену предварительным условиям (таким как здания, необходимые для создания юнитов): не просто «Что это даст мне сейчас?», но и «Какие возможности это даст мне впоследствии?» Вы часто встречаетесь с этим, когда имеете дело с древом технологий. Например, в некоторых ролевых или массово-многопользовательских играх с древами технологий встречаются способности, которые можно купить при получении нового уровня. Они не так уж полезны сами по себе (возможно, и вовсе бесполезны), но нужны для получения очень мощных способностей впоследствии.
Невозвратные издержки можно увидеть и в других играх. Мне встречались ролевые игры, где игрок выбирал между одноразовыми и многоразовыми предметами. Конечно же, одноразовые гораздо дешевле, но их можно пустить в ход лишь однажды. Так, например, вы можете купить зелье за 50 золотых или зельеварную машину за 500 золотых. В таком случае вы купите машину, если рассчитываете создать больше 10 зелий. Вы можете купить билет в один конец за 10 золотых или проездной за 50 золотых и спросить себя, собираетесь ли вы прокатиться больше пяти раз.
Или вы раздумываете, покупать ли дисконтную карту за 1000 золотых единовременно, которая даст 10% скидки на все последующие покупки. Вам придётся подумать, собираетесь ли вы потратить в этом магазине столько, чтобы карта себя окупила (раз уж на то пошло, принятие решения о покупке дисконтной карты в реальном мире требует похожих расчётов).
Подобные решения не всегда так уж интересны: по сути, вы просите игрока прикинуть, как часто он будет пользоваться той или иной вещью — но при этом не говорите ему, как долго продлится игра или как часто ему придётся применять многоразовый предмет. Поэтому это решение — разновидность решения вслепую. Всё равно мы как дизайнеры знаем ответ, поэтому нам нужно сделать свои собственные расчёты ожидаемой стоимости и сбалансировать всё в соответствии с этим. Если мы всё сделаем правильно, то к моменту принятия решения о покупке игроки поверят, что в нашей игре стоимость адекватно соотносится с ценностью.
Цена упущенных возможностей
Второй тип скрытой цены, я называю её ценой упущенных возможностей — это когда вы должны отказаться от чего-либо, уменьшить свою универсальность. Пример из игр с древами технологий — ситуация, когда вы достигаете некой развилки и должны выбрать, какой навык развивать дальше. Если вы выбираете определённое умение или изучаете определённую технологию, то ограничиваете себя и уже не можете изучать что-то другое. Если вы изучаете магию Огня, вам тут же становятся недоступны все заклинания Льда и наоборот. Такое случается и в системе квестов: если вы не взорвали Мегатон, вы не получите квест на Тенпенни-Тауэр.
Это может произойти в настольных играх: одна из коллекционных карточных игр, над которой я работал, содержала в основном нейтральные карты и очень мало таких, которые были бы «хорошими» или «плохими». Если вы разыгрывали карту «хорошего» персонажа, то до самого конца игры уже не могли играть «плохими» (и наоборот), так что каждая отдельная взятая колода могла использовать либо хороших, либо плохих, но не тех и других одновременно. По сути, любая игровая ситуация, когда вы совершаете какое-либо действие и лишаетесь возможности совершать другие действия в дальнейшем, — это цена упущенной возможности.
Ваше действие будет иметь особую теневую стоимость: вдобавок к цене за совершение действия прямо сейчас вы платите уменьшением универсальности в дальнейшем (а не только ресурсами). Для игрока это дополнительное ограничение. Сколько оно стоит? А вот это уже ваша задача — рассчитать всё для конкретной игровой ситуации. Если цена ненулевая, не забудьте учесть её в анализе графика стоимости.
Пример универсальности
Как на деле ведут себя числовые значения универсальности? Всё зависит от природы универсальности, а также от цены и сложности переключения.
Вот вымышленный пример: вы собираетесь выйти в бой против реального игрока и знаете, что в распоряжении противника либо атака Льда, либо атака Огня — точно не обе, и одна из них точно есть, он не безоружен. Можно купить заклинание, защищающее от Льда, или заклинание, защищающее от Огня (или оба, чтобы уж наверняка, но это дороговато). Допустим, оба заклинания стоят по 10 золотых каждое.
А теперь предположим, что мы предлагаем новый предмет, «Защита от стихий», который предлагает вам оба заклинания в одном пакете. Сколько он будет стоить? От чего именно зависит его цена? Если вы были внимательны, то знаете правильный ответ: цена зависит от того, что вам известно о планах противника, а также от цены переключения между заклинаниями, в случае если потом передумаете.
Если вы знаете наперёд, что противник применит, скажем, атаку Огня, — пакет будет стоить столько же, сколько «Защита от огня», то есть 10 золотых. «Универсальность» здесь не даёт никакой дополнительной ценности, потому что правильный выбор вам уже известен.
Если же узнать тип атаки вашего противника невозможно, пока не будет уже слишком поздно что-то решать, и вы не можете переключаться с защиты на защиту, когда поединок уже начат, то «Защита от стихий» должна стоить 20 золотых — как оба зелья сразу. Здесь универсальность даёт вам ту же добавочную стоимость, что и покупка обоих предметов по отдельности. В рамках игры нет никакой разницы, покупаете вы их по отдельности или вместе.
Что если у вас будет возможность купить одно заклинание перед битвой, а затем, если окажется, что вы не угадали, тут же объявить тайм-аут и купить ещё одно? В таком случае было два варианта:
- Потратить 10 золотых сразу с 50% шансом на то, что угадали. Тогда ваши траты ограничиваются 10 золотыми.
- Есть 50% шанс, что вы промахнулись. Тогда вам придётся потратить дополнительные 10 золотых, чтобы купить ещё одно заклинание — итого 20 золотых.
Ожидаемая ценность здесь (50% * 10) + (50% * 20) = 15 золотых — именно столько и должен стоить совмещённый пакет в такой ситуации.
Что, если игра частично предсказуема? Предположим, у вас могут быть кое-какие соображения насчёт того, использует ваш противник атаку Огня или Льда, но вы не совсем уверены. Тогда оптимальная цена пакета должна лежать где-то между этими крайними значениями, в зависимости от того, насколько вы уверены.
Хорошо, эта последняя ситуация звучит довольно странно с точки зрения дизайна. Где в настоящей игре вы можете иметь неполное представление о том, что ваш противник собирается использовать против вас? Во-первых, в стратегиях реального времени я могу увидеть какие-то из частей армии, которую разворачивает мой противник. Это даёт мне частичное (но не полное) представление о том, что меня ждёт. Исходя из этого, я могу создавать соответствующие юниты.
Здесь универсальные юниты ценны (у моего оппонента в рукаве может быть припрятана пара тузов, о которых я ещё не догадываюсь), но их ценность частична: кое-что об армии противника я знаю, следовательно, имеет смысл создавать юниты, которые сильны против существующих частей вражеской армии.
Ситуационный баланс на примерах
Теперь, когда мы всё это обсудили, давайте приступим к изучению конкретных примеров.
Прицельный огонь и зона поражения (серия игр Age of Empires)
При прочих равных условиях насколько полезнее массовое поражение для того, что наносит урон сразу многим целям, а не только одной?
Обычно ответ такой: возьмите ожидаемое количество поражённых целей и умножьте. Таким образом, если враги идут равно распределёнными группами от 1 до 3, то в среднем вы будете поражать 2 врага за одну атаку, нанося двойной урон в сравнении с обычной атакой, — тогда массовое поражение имеет двойное преимущество.
Небольшое предостережение: «при прочих равных условиях» — очень хитрая вещь, ведь обычно прочие условия как раз не равны. Например, в большинстве игр враги не теряют способности к нападению, пока они не уничтожены полностью, поэтому нанесение частичного урона не так важно, как нанесение смертельного.
В таком случае медленное и равномерное распространение урона может быть менее эффективным, чем прицельное поражение выбранного врага мощными ударами: так вы с каждым выстрелом уменьшаете наступательную мощь врагов, тогда как с массовым поражением это происходит не сразу. Кроме того, враги, по которым мы ведёте огонь, могут иметь различное количество очков здоровья. Массовое поражение может убить некоторых из них, но не всех, сокращая отряд противника до нескольких трупов и меньшей группы (или одного врага). Впоследствии это сокращает мощь массовой атаки, то есть ваши атаки с каждым разом становятся всё слабее. С этим следует быть осторожным: обязательно рассмотрите, как часто при типичном столкновении враги будут собираться в группы и как долго будут держаться вместе.
Атаки, которые эффективны (или неэффективны) против определённого типа врагов
Мы уже рассматривали это на примере с драконами и троллями. Необходимо умножить дополнительную пользу (или невыгоду), как если бы она имела место при каждом столкновении с врагами, на предполагаемый процент времени, когда это будет действительно иметь значение (как часто вы будете встречать этот тип врагов).
Как мы видели в предыдущем примере, хитрость здесь в том, чтобы точно рассчитать действительную пользу или ущерб от вещи, ведь что-то с «двойным уроном» или «половинным уроном» на деле редко имеет двойную или половинную ценность.
Метаигровые объекты, которыми вы можете воспользоваться или пренебречь
Бывает, что есть предмет, который иногда полезен, а иногда нет. Использовать его или нет, решает игрок — если обстоятельства к тому не вынуждают, он не тратит ресурсы впустую.
Примеры:
- Ситуационное оружие в шутерах, которое носят с собой в качестве смены.
- Специализированные юниты в стратегиях, которые можно создать по мере необходимости и игнорировать в других случаях.
- Ситуационные карты в коллекционных играх, которые могут дожидаться своих противников в запасной колоде.
Обратите внимание, что в таком случае на них влияют силы, не зависящие от игрока: случайная карта местности, на которой вы играете, юниты, которых создаёт противник, карты в колоде соперника.
Велик соблазн оценить их в соответствии с вероятностью их востребованности. Например, если у меня есть карта, которая наносит 10 очков урона против красных существ в Magic, и я знаю, что в большинстве колод 2–3 цвета, то у меня 40–50% вероятность сыграть в открытой игре против красного. Такая карта должна стоить столько же, сколько карта, наносящая 4 или 5 очков урона любым противникам. Если игрок должен решить, использовать эту карту или нет, перед началом игры (не зная, играет ли его противник красным) — это хороший метод.
Но в некоторых случаях вы знаете, что делает ваш противник. На турнире по Magic после того, как разыгрывается первый тур из трёх раундов, вам разрешается поменять несколько карт из основной колоды на карты из дополнительной колоды. Вы можете отложить свою карту, наносящую 10 урона красным, не играть ею первую игру и взять только в том случае, когда ваш противник играет красным. Таким образом вы обеспечиваете 100% эффективность своей карты: единственной ценой становится место в запасной колоде, а это метаигровая цена.
Как мы узнали в одной из прошлых лекций, пытаться оценить что-либо в игре, основываясь на метаигре, — штука непростая. Всё, что вы можете сказать, — она должна стоить немного меньше, чтобы компенсировать метаигровую стоимость, но не вполовину меньше, как стоила бы, если бы игрок вынужден был пользоваться ею в любом случае. Если только мы не хотим преднамеренно её недооценить, чтобы поощрить её использование в запасной колоде.
Так же дела обстоят и со специализированным юнитом в стратегии, если предположить, что вам ничего не стоит сама возможность его создать. Если большую часть времени он бесполезен, вы ничего не теряете, не создав его. Но когда он понадобится, вы его создадите и будете точно знать, что он окажется полезен. Тогда он должен оцениваться, исходя из предположения, что ситуация, для которой он создаётся, происходит в 100% случаев. Если же вы должны заплатить дополнительную цену за универсальность самой возможности создать юнита, то эту цену вам следует регулировать, основываясь на реальном проценте времени, когда такая ситуация случается в игре.
Со сменным оружием в шутерах многое зависит от того, как структурирована игра. Если всё оружие бесплатное (не имеет никакой ресурсной стоимости), но выбрать можно только одно основное и одно на смену — вы должны очень внимательно сбалансировать единицы сменного оружия между собой. Это нужно сделать так, чтобы каждое оружие было полезно в одинаково вероятных ситуациях — или, по крайней мере, у всего оружия должно быть одно и то же соотношение ситуационного преимущества к ожидаемой вероятности получения этого преимущества.
Таким образом, в игре может быть оружие, которое мощнее всего другого, но только в очень редких ситуациях, и оружие, которое весьма посредственно, но пригодно почти всегда и везде — и они сбалансированы, если это соотношение у них сошлось.
Метаигровые «комбо»
Итак, мы только что обсудили ситуации, над которыми игрок не властен. А что если что-то само по себе не слишком полезно, но в сочетании с чем-то другим даёт мощный эффект? Примеры — стрельба с двух рук в шутерах, классы второстепенных («поддерживающих») персонажей в массово-многопользовательских играх, ситуационные карты, вокруг которых строится колода в коллекционных карточных играх, дополнительные башни в играх типа «Защита башни», которые улучшают характеристики рядом стоящих башен, и так далее. Они определённым образом вознаграждают игрока за удачный метаигровой выбор.
Чтобы разобраться, как приводить к балансу такие вещи, нам надо вернуться к понятию цены упущенной возможности. В этом случае мы имеем дело с ценой упущенной метаигровой возможности: вероятно, вам придётся совершить в игре изменения, которые совершенно не связаны с тем, что вы пытаетесь сбалансировать, чтобы сделать ту или иную вещь полезной. В зависимости от ситуации, есть несколько способов подступиться к балансу таких объектов.
Один из них — взять всё «комбо» целиком и сбалансировать его, а затем разделить на элементы и сбалансировать уже их, исходя из того, насколько все они полезны по отдельности.
Например, в Magic было две карты — Lich и Mirror Universe. Lich сокращал очки жизни до нуля, но добавлял новые правила, которые помогали эффективно конвертировать ваши карты в жизни. Сама по себе карта была очень рискованной: когда она покидала игру, жизней у вас всё равно не оставалось, и вы моментально проигрывали. Даже без этого риска ценность карты была сомнительна: по сути, она выручала вас, только если вы уже проигрывали, а иметь в колоде такие карты — значит готовиться к поражению, что само по себе невыигрышная стратегия.
Mirror Universe была картой для обмена очками жизни с противником — не такая рискованная, как Lich, раз вам выбирать, когда ею воспользоваться, но всё равно полезная только тогда, когда вы проигрываете, и эффективно её использовать было не так-то просто.
Однако вместе эти две карты могли обеспечить моментальную победу: вы обнуляете свои жизни, а затем меняетесь жизнями с противником — у него ноль, мгновенная победа.
Как такое оценить? Это, конечно, большая крайность: две карты сами по себе почти бесполезны, в других условиях дают не так уж много, но если их соединить — они всесильны. Лучшее, что можно сделать в такой ситуации — это перекос в сторону их бо́льшей совместной стоимости, чтобы она была сопоставима с похожим мощным выигрышным объектом, разве что чуть меньше, ведь тут требуются две карты (а две карты сложнее вытянуть из колоды, чем одну).
Но как поделить стоимость надвое? Сделать одну дешёвой, а другую дорогой? Или сделать цену одинаковой для обеих? Уравновесьте их в соответствии с их полезностью. Lich даёт некоторые дополнительные преимущества (например, добор карт из колоды, когда вы получаете жизни), но при этом есть и очень неприятные последствия. Mirror Universe таких последствий не имеет, а также даёт некое психологическое преимущество: ваш противник может сдерживать свои атаки, ведь он не хочет, чтобы вы, почти убитый, пустили в ход эту карту и добили уже его. Их сложно сбалансировать относительно друг друга, но, исходя из того, что происходило в игре на самом деле, их стоимость соотносима.
А если не впадать в крайности? Класс персонажей поддержки в ММО дает много бонусов к возможностям и исцелению других персонажей, принося пользу всем остальным в команде. Сами по себе они имеют некоторую ненулевую ценность: если возникнет такая надобность, они всегда могут атаковать врага. Если они при этом могут исцелять и усилять самих себя, у них даже неплохо получится. Да и вообще, это «свежая кровь», на которую отвлекаются враги. Но их истинная ценность раскрывается только в группе, где они могут сделать лучших участников отряда ещё лучше. Как такое сбалансировать?
Давайте возьмём простой пример. Допустим, ваш поддерживающий персонаж может увеличивать силу атаки одного из союзников на 10%, но только одного за раз — так прописано в древе технологий. Вам нужно рассчитать предположительную ценность этой способности, чтобы иметь возможность назначить ей адекватную цену. Чтобы вычислить, сколько же она стоит, давайте представим отряд игроков примерно одного уровня, найдём среди них класс с самым высоким показателем атаки и вычислим предположительную ценность атаки для этого персонажа. В группе искомая способность «баффнуть атаку» будет стоить 10% от этой величины.
Само собой, эта способность будет не так полезна, если персонаж одиночный или состоит в группе, где нет сильных атакующих. Поэтому вам нужно высчитать процент времени, когда этот персонаж будет путешествовать с группой, где такой бафф будет полезен, и учесть его в последующих вычислениях. Таким образом, цена упущенных возможностей при включении атакующего в ваш отряд очень низкая (большинство групп так или иначе включают хотя бы одного), так что эта поддерживающая способность будет почти всегда высокоэффективна — исходя из этого вы её и будете балансировать.
Что общего у примеров с картами Lich и Mirror Universe и классами персонажей поддержки? Когда вы сталкиваетесь с ситуационными эффектами, на которые игрок может повлиять, первое правило — найти цену упущенных возможностей, которую платит игрок за создание этой ситуации, и учесть её как «стоимость» в противовес ситуационному преимуществу. Помимо этого, стоимость необходимо рассчитывать, исходя из лучшего случая, а не из некой «усреднённой» ситуации. Если игроки сами решают, когда им использовать каждый из элементов комбо, мы можем полагать, что они станут использовать их при оптимальных условиях.
Мультиклассовые персонажи
Раз уж мы заговорили о классах персонажей, как насчёт мультиклассовых, которые встречаются во многих настольных ролевых играх? Обычно схема такая: вы становитесь универсальным, получая доступ к уникальным способностях нескольких классов — зато у вас ниже уровень всех этих умений, чем у моноклассовых персонажей. Насколько ниже должен быть уровень умений, чтобы мультиклассовость была жизнеспособной стратегией, но в то же время не настолько мощной, чтобы выбирать монокласс не имело смысла?
Это проблема универсальности. Игрок обычно не знает заранее, в какие ситуации попадёт его персонаж, так что старается подготовиться ко всему понемногу. В конце концов, если бы он точно знал, чего ожидать, — просто выбрал бы самый эффективный монокласс, отбросив всё остальное. Наверняка он примерно представляет себе, что его ждёт, или, по крайней мере, какие способности, которых у него ещё нет, понадобятся его отряду, — так что Воин или Вор пятого уровня не так хорош, как Воин десятого уровня или Вор десятого уровня.
Игрок должен выбирать заранее и, как правило, не может менять свой класс в ходе игры, поэтому ограничение довольно большое. Вы вряд ли ошибётесь, предположив для начала, что моноклассовый персонаж должен быть в полтора раза сильнее мультиклассового, а затем подстраивать это значение, если будет необходимо. Таким образом, монокласс 10 уровня обычно так же силён, как дуал-класс 7 или 8 уровня.
Двупредельный выбор (исключающее или) в единственном игровом объекте
Иногда у вас есть один объект, который может либо одно, либо другое по выбору игрока, но не оба варианта сразу (объект либо исчезает по использовании, либо необратимо меняется).
Например, в коллекционной карточной игре у вас есть карта, которая вводит в игру новое существо или увеличивает существо, которое у вас уже есть. В ролевой игре у вас есть кусок металла, из которого можно выковать либо замечательную броню, либо мощное оружие. В шутере вам даётся возможность улучшить одно оружие из нескольких имеющихся. Если игрок знает цену того, что он может получить (но выбрать должен что-то одно), — настоящая польза должна быть больше, чем каждый из вариантов сам по себе, но меньше, чем всё вместе взятое, в зависимости от ситуации.
От чего же всё зависит? Это проблема универсальности, так что всё зависит от исходной пользы каждого из вариантов, цены или сложности смены стратегии в ходе игры и осведомлённости игрока о задачах, которые встанут перед ним в дальнейшем.
Разница между PvE и PvP
Разработка игр PvE (Player versus Environment, «игрок против среды», где один или несколько игроков кооперируются против компьютера) с точки зрения ситуационного баланса отличается от разработки игр PvP (Player versus Player, где игроки непосредственно противостоят друг другу).
Игры PvE гораздо проще. Вы как геймдизайнер разрабатываете окружающую среду, уровни, искусственный интеллект. Вы уже знаете, что будет «характерно» и «в среднем» для энкаунтеров игрока. Но даже в играх, где контент генерируется согласно установленным правилам, вы точно не знаете, с чем столкнётся персонаж, — вы знаете только алгоритмы, которые за это отвечают (в конце концов, это вы их разработали), так что вам известна ожидаемая вероятность того, что генератор контента выдаст определённые типы энкаунтеров, и пределы.
Поэтому вам довольно просто рассчитать ожидаемые значения для PvE-игр — по крайней мере на основании достаточно точного предположения о ценах и пользах, когда речь заходит о ситуационных областях игры.
PvP посложнее, потому что игроки могут менять свои стратегии. Слова «ожидаемое значение» становится пустым звуком, ведь вы не знаете, чего ждать от противника. В таких случаях лучшие методы, которыми мы располагаем для определения типичного в игре, — это тестирование и анализ количественных показателей. Их мы еще рассмотрим подробнее.
Если вы сейчас работаете над игрой
Выберите в своей игре проблемный объект, который кажется вам слишком слабым или слишком сильным, причем эти его качества зависят от условий или ситуации. Ситуационные эффекты — самые сложные для баланса; если у вас есть проблемы, то они наверняка из этого разряда.
Для начала тщательно поищите, нет ли у объекта теневых стоимостей. Какими возможностями или универсальными свойствами вам приходится жертвовать, чтобы заполучить способности этого объекта? Какие другие свойства вам необходимо приобрести для начала, прежде чем вы получите возможность выбрать этот объект? Спросите себя, какова величина этих дополнительных стоимостей и учтены ли они в ресурсной стоимости объекта.
Далее рассмотрите универсальность самого объекта. Полезен ли он в разнообразных ситуациях или только изредка? Насколько эти ситуации зависят от игрока? Если объект полезен только в некоторых случаях — может ли игрок сделать так, чтобы эти случаи стали более вероятными, увеличив ожидаемую ценность объекта?
Просто ли игроку поменять своё решение (универсальность игрока против универсальности объекта, раз бо́льшая универсальность игрока уменьшает ценность объектной универсальности), если он выбрал объект, а затем решил заменить его на что-то другое, или если он при необходимости использует другие объекты или стратегии? Насколько просто и есть ли у таких действий ощутимая цена? Каков ущерб, если игрок попал в ситуацию, где объект бесполезен? А теперь подумайте, как универсальность игровых систем и универсальность отдельных объектов должна влиять на пользу и стоимость.
Помог ли новый взгляд на объект выяснить, почему он казался слишком слабым или слишком сильным? Дал ли он вам более глубокое понимание других объектов в вашей игре, всей игровой системы в целом?
Домашнее задание
В качестве «домашнего задания» рассмотрим игру Desktop Tower Defense 1.5 — одну из тех, что сделала популярным жанр tower defense. (Полагаю, что вы в них не играете, если в этом нет крайней необходимости: они чудовищно затягивают, и на возню с ними можно потратить кучу времени, которое можно было бы посвятить более продуктивным занятиям.)
Desktop Tower Defense — отличная игра для анализа ситуационного игрового баланса, потому что в этой игре ситуационно почти всё. Вы покупаете башню, помещаете её где-нибудь на карте — когда в поле зрения появляются враги, башня отстреливается. Покупать и улучшать башни нужно за деньги, а деньги вы получаете, убивая врагов башнями. В любой момент игры у вас ограниченное количество денег, поэтому ваша цель — максимизировать среднее количество урона за доллар, наносимое вашей башней по врагам. С точки зрения игрока это проблема эффективного распределения.
Ситуационная природа Desktop Tower Defense
На первый взгляд, всё, что нужно сделать, — выяснить, какой урон может нанести одна башня, разделить на стоимость и взять башню с лучшим соотношением цены и урона. Просто, да?
Только вот урон, который нанесёт ваша башня, — величина исключительно ситуационная. У каждой башни есть радиус действия. Как долго враги будут оставаться в радиусе действия под обстрелом — это полностью зависит от того, где вы поместили ваши башни. Если вы просто разместите башню в чистом поле, враги будут просто подходить к ней, не подвергая себя длительной опасности. Если вы построите огромный лабиринт, где им придётся ходить то вперёд, то назад, оставаясь в зоне действия вышеупомянутой башни, она нанесёт гораздо больше урона.
Дальше больше. В основном башни могут стрелять лишь в одного врага одновременно — поэтому, если мимо идёт группа врагов, то урон на одного врага получается очень небольшим (один враг был поражён, остальные нет). Другие башни наносят урон ударной волной по всей зоне поражения, что эффективно против больших скоплений врагов, но почти не работает против врагов-одиночек — особенно тех, что сильно разбросаны и быстро передвигаются.
Один из типов башни почти не наносит урона, но замедляет врагов, в которых стреляет, задерживая их в радиусе поражения других башен. Их польза зависит от того, что ещё есть поблизости. Некоторые башни эффективны только против определённого типа врагов, или наоборот, неэффективны против определённых врагов и будут совершенно бесполезны против некоторых набегов, даже если обычно дают урон выше среднего.
Есть ещё такие башни, которые совершенно ничего сами по себе не делают, но увеличивают урон башен, смежных с ними. Их соотношение цены и пользы очень варьируется в зависимости от того, какие башни размещены вокруг. Что ещё интереснее, размещение башен огромным блоком (чтобы эта башня увеличивала урон как можно большего числа башен) имеет скрытую цену: такое размещение менее эффективно использует место на поле, так как врагам необходимо просто обойти одно большое препятствие, вместо того чтобы пробираться сквозь длинный лабиринт. Так что балансировать такую игру очень сложно: всё зависит от всего.
Ваша задача, если вы за неё возьметесь
Эту игру неожиданно сложно анализировать, поэтому я ограничусь только одной небольшой игровой областью. В частности, я хочу, чтобы вы рассмотрели две башни: Роевую башню (Swarm Tower), которая действенна только против летающих врагов, но наносит им большой урон, и Вспомогательную башню (Boost Tower) — та самая, что увеличивает урон окружающих её башен.
Итак, лучшее место для их размещения — прямо в центре карты, в прямоугольном блоке 4х3. Давайте предположим, что вы решили все 12 мест занять только Роевыми и Вспомогательными башнями, чтобы извести всех летающих врагов, которые на вас надвигаются. Учитывая, что вы хотите минимизировать цену и максимизировать урон, каково оптимальное размещение этих башен?
Вот вам цифры, на которые можно опираться. Полностью прокачанная Роевая башня наносит 480 единиц урона за одно попадание, а в игре стоит $650. Полностью прокачанная Вспомогательная башня стоит $500 и не наносит урона, но улучшает смежные башни (которых касается углом или стороной) на +50%, так что на практике наносит 240 единиц урона за каждую смежную с ней Роевую. Обратите внимание: две смежные Вспомогательные башни никак друг на друга не действуют — они увеличивают нулевой урон друг друга на +50%, а это всё тот же ноль. Предположим, что все башни прокачаны до предела (самые дорогие версии каждой башни имеют самое эффективное соотношение урона к цене).
Самый верный способ справиться с этой задачей (если вы умеете работать со скриптами или программировать) — написать программу, которая просто-напросто грубо просчитает все 3^12 варианта (нет башни, Роевая или Вспомогательная в каждом из 12 квадратов). Для каждого квадрата рассчитайте урон 480 для Роевой башни, 240*(количество смежных Роевых) для Вспомогательной башни или 0 для пустого квадрата. Добавьте общее количество урона и общую цену для каждого из сценариев и проследите, каким будет лучшее соотношение урона и цены (разделите общий урон на общую стоимость и найдите самое большое значение).
Если у вас нет времени или вы не умеете писать такие программы, альтернативой может стать создание таблицы в Excel для расчёта урона и стоимости для каждого отдельного сценария. Создайте блок 4х3 ячейки, которые могут быть В (Вспомогательными), Р (Роевыми) или пустыми. Под этим блоком создайте ещё один, чтобы рассчитывать индивидуальную стоимость каждой ячейки.
Формула может выглядеть примерно так: =IF(B2="P",640,IF(B2="B",500,0))
Наконец, создайте третий блок ячеек, чтобы рассчитывать урон для каждой из них:
=IF(B2="Р",480,IF(B2="B",IF(A1="Р",240,0)+IF(A2="Р",240,0)+IF(A3="Р",240,0)+IF(B1="Р",240,0)+IF(B3="Р",240,0)+IF(C1="Р",240,0)+IF(C2="Р",240,0)+IF(C3="Р",240,0),0))
Давайте возьмём сумму всех ячеек с уроном и поделим на сумму всех ячеек с ценой. Отобразите это в отдельной ячейке. Вам осталось только поиграть с первоначальными блоками ячеек, меняя их вручную с Р на В и обратно, чтобы оптимизировать итоговое соотношение урона и цены.
Результат
Когда вы найдёте оптимальное расположением Роевых и Вспомогательных башен по соотношению урона к цене — вычислите общий урон и пользу для Роевых башен и отдельно для Вспомогательных. Если предположить, что игра оптимальна и мы рассматриваем одну только эту, очень ограниченную ситуацию (основываясь на соотношении потраченных денег и принесённой пользы), — какой тип башен делает бо́льший вклад в победу за каждый потраченный на них доллар?
Это всё, что вам нужно сделать, но если вы хотите большего — можете углубиться в этот анализ как только пожелаете. Я уже говорил, что эта игра полна ситуационных тонкостей для баланса. Летающие враги попадаются только каждый седьмой раунд — если вы захотите рассчитать истинную эффективность нашего комплекса из башен, всё надо разделить на 7. Затем сравнить с другими типами башен и выяснить, дают ли какие-либо комбинации наземных типов башен (для 6 волн других, нелетающих врагов) и противовоздушных башен лучшие итоговые результаты, чем использование башен, которые атакуют врагов и в воздухе, и на земле.
баланс это круто, но самая интересная тема это как сделать интерес для тех игроков которые уже докачались до всех уровней и испробовали все что только можно
Не совсем так. Это интересно для математиков-гиков, или для поиска меты, если игра соревновательная.
Обычный игрок при отсутствии интересного контента уйдет в другую игру качаться
Если ты создаёшь игры, то важно скольким людям это будет интересно. А то о чём говоришь ты, будет интересно лишь сотой части процента от всех играющих.
И ответ на твой вопрос дают такие игры как ВОВ, ЛОЛ и т.д. регулярный новый контент, что бы не было максимального уровня и всегда было куда стремиться. Либо за новой шапкой, либо за новым уровнем, либо за новым петом