Уф, целую неделю писал урывками.
Некоторые очевидные аксиомы и противоречия:
1. Один обычный моб не должен быть смертельно опаснен для игрока, по многим причинам. Например, а) это никогда не сбалансировать, смертельно опасный для вора класс может быть безопасным (но утомительным) для паладина, б) два опасных моба – гарантированная смерть, домохозяйки не поймут; учитывая то, что двух мобов можно подцепить случайно – получается случайная смерть, в) ощущение динамики игры резко снижается, если каждый моб опасен.
2. Моб не может быть тривиальным, потому что это скучно. Мобы, однако, тривиальны, из-за предыдущего пункта. Именно поэтому Близзард раньше пытался сделать всякие штуки, типа убегания раненого моба «за подмогой», но было плохо, потому что…
3. Моб не может быть «случайным». Когда моб случайно наносит десятикратные поврежденья, случайно убивает или случайно зовет подмогу – это нехорошо. (Моб может звать подмогу специально, но конечный шанс ее появления все-таки случаен и зависит от непредсказуемых факторов).
4. Специальные способности не делают моба сильней, а раздражают игрока.
Со специальными способностями моба вообще очень легко облажаться. Например, мухи в Un’Goro, которые навешивают на тебя 30-минутный (!) дебаф, увеличивающий поврежденья по тебе на 40% (!!), птеродактили там же, кастующие fear, куча мобов в plaguelands, делающие то же самое, и так далее.
Очевидно, кстати, что уровня с 50 они решили увеличить сложность мобов и понапридумывали им способностей, которые ничего, кроме раздражения, не вызывают. К счастью, этот тренд довольно быстро кончился, и с 60 уровня способности уже «правильные».
Способность должна быть понятной, с наглядными последствиями, но не сильно «поломной».
Удачные способности можно пересчитать по пальцам:
А) Любая вариация на тему дополнительных повреждений: enrage, доты, магические/физические повреждения. Фактически – небольшой rand() в повреждениях, просто красивый/наглядный.
Б) Ranged или melee. Причем и тут особо не разыграешься – можно написать моба, который будет идеально кайтить игрока. И что? Игрок будет умирать и злиться.
В) Самолечение моба. Его можно прервать, оно не влияет на тебя и не наносит тебе случайные повреждения. Это скорей красивое исключение, всем мобам самолечение не сделаешь.
Собственно, всё. Crown control не работает вообще, ибо бесит. Это игрок должен crowd control-ить моба, а не наоборот.
Если убрать исключения, то можно сказать, что специальные не-дамажные способности не нужны, а дамажные должны быть предельно наглядными. ("Closer! Come closer! And burn!").
Обидно, конечно, но по-другому пока никак. Речь, опять-таки, идет о соло игре. То есть о 99% всех мобов.
Проблема вообще глобальна, и больше всего касается танков: отсутствие интерактивных способностей и/или их уникальность.
То есть в идеальном мире было бы круто дать мобу способность «суперудар», от которой можно увернуться. Только тогда способность «увернуться» надо давать всем, либо делать суперудар не таким супер.
Опять-таки, способность «увернуться» - это no-brainer, ее всегда надо использовать, когда начинается «суперудар», никакой тактики тут нет. Значит, она не нужна, а нужна реакция. Получаем MMO-файтинг. Ну, или снова - Diablo.
5. Monster play (и PvP, что одно и то же, хахаха) должен быть сугубо развлекательной фишкой, в отдельных баттлграундах. Играть за монстров может быть весело, да. Играть за монстров так, чтобы обеспечивать непрерывный спрос на мобов в масштабе сервера, никто не будет, и поэтому опираться на это не надо.
6. Говорящие мобы – хорошо и правильно («You take no candle»). Мобы, которые красиво лопаются – тем более хорошо и правильно.
«…монстры в Diablo живут буквально для того, чтобы умереть. Большую часть игры вы просто убиваете их, и поэтому мне прежде всего хотелось сделать так, чтобы они умирали самыми различными способами. В настоящий момент мы реализовали около 35 различных анимаций смерти для каждого отдельно взятого монстра».
7. Son of Arugal, он же Fel Reaver 0.1 – хорошо и правильно, но он должен быть или «желтым» или «неподвижным». Более глобально – конечно же, на одном клочке земли мобы должны иметь разные шкурки, в том числе и быть разными по силе, вплоть до элитных, но не должны набрасываться на игроков.
Итого.
Мобы должны быть тупые, но красивые, разнообразные и говорящие. Если не получается их сделать интересными по смыслу, надо делать их интересными внешне.
Все пропало, других выходов нет?
Есть, но...
Мобы не висят в воздухе, а заботливо расставлены игровым дизайнером. У них даже профессия такая есть – расставлятель (раставитель?) мобов. Некоторые мобы даже патрулируют.
Сделано это для того, чтобы превратить ну хоть как-то убийство мобов в мини-игру «выцепи одного моба и не зацепи лишнего».
Тут тоже можно переборщить, наиболее памятное место - Zeth'Gor, который, определенно, должен сгореть.
Глобально же смысл в том, что все мобы равны, а все различие – в расстановке.
Как и в случае с аггро, все веселье в WoW начинается, когда ты играешь… плохо, то есть случайно цепляешь на себя больше одного моба. Значит, нужно аггрить больше одного моба автоматически!
Если серьезно, то в комментариях было много мыслей на тему глобального AI и «убил 100 волков – получил засаду из злых и обиженных волков».
Все гораздо проще: вместо одного моба делаем пак – скажем, из 5-и мобов. Этот пак имеет один AI (то есть является одним мобом), стоит в одном и том же месте («стая волков»), различается внутри себя шкурками и, возможно, имеет вожака.
Когда игрок нападает на пак (или пак на игрока), бой происходит в режиме «фильма про кунг-фу»: сначала нападает один моб, когда тот умирает (или вот-вот умрет) – нападает второй, и так далее, вместо того, чтобы напасть всей толпой и завалить.
Мобы не обязаны становиться в круг вокруг игрока и выкрикиывать обидные слова, как в настоящем фильме про кунг-фу, это метафора.
Причем, после каждого моба делается проверка – посылать ли следующего, или игрок уже при смерти. (Самая банальная проверка – количество оставшегося здоровья, чуть более интеллектуальная – количество оставшегося здоровья, количество здоровья, теряемого на одного моба из пака, класс и, например, количество смертей игрока за последний час).
То есть – правильно – AI играет вовсе не против игрока, а выполняет роль «гейммастера», просто делает это не глобально во всей игре, а на уровне одного моба, который вовсе и не моб, а пак из пяти.
Исхода у боя два – либо игрок справился и убил весь пак, тогда это видно наглядно («поляна очистилась») и из последнего моба ему вываливается звонкая монетка (ура, я наконец-то придумал, как сделать денежный лут мини-игрой).
Либо игрок не справился, тогда он умер (если совсем-совсем не справился), либо пак потерял к нему интерес на каком-нибудь мобе. И в том и в другом случае пак респаунится очень быстро.
В терминах WoW-а: ты вышел на поляну с волками и начал их бить. Волки слабее обычных мобов процентов на 50%. Но каждый волк, умирая, испускает вой, который зовет следующего (то есть «убегающий моб»). Но зовет он умно, а не случайным образом, и ты «чудом» выживаешь с 10% жизнями.
Дальше навернуть систему легко:
Пак из одного моба ведет себя, как обычный моб. (То есть можно не делать всех мобов паками).
В паке может быть любое количество мобов с любой проверкой на выживаемость игрока (в том числе и отсуствующей, гыгы), это – инструмент балансировки.
Можно делать паки из желтых (неагрессивных) мобов – они все равно будут опасными, потому что тебе придется драться со всеми, но это довольно сильно разнообразит игру, потому что у тебя будет выбор – не нападать (то, что в WoW-е пытались сделать с помощью Mind Soothe, но потом понерфили, ибо процесс стал неконтролируемым, тут же он контролируется, потому что мобов желтыми делаем мы).
Можно делать смешанные паки – из желтых и красных мобов – тогда между ними будет интересно ходить. Красных мобов нужно при этом как-то визуально выделять («волки и волчата»), негоже различать их только цветом рамки.
Развивая идею смешанных паков — чисто теоретически, если делать в паке только одного моба аггрессивным, то проверок на расстояние до игрока надо в 5 раз меньше.
Развивая идею смешанных паков – можно делать паки с лидером, когда в центре стоит большой заметный неагрессивный лидер со своим поведением в рамках пака, типа «я нападаю последним, но если на меня напали первым, когда пак жив – я посылаю весь пак». Фильмы про кунг-фу, натурально – «сначала победи всех моих учеников».
Развивая идею лидеров, для тупых игроков – последнего лидера можно сделать вообще невидимым, но оставить ему поведение «когда пак умер, вылезти из-под земли и напасть».
С лидерами вообще интересней всего получается, сразу наглядно видно, откуда весь вред.
Домашнее задание: увязать это все с групповой игрой.
Домашнее задание-2: посчитать расход процессорной мощности на AI.
Update.
Как это «нарисовать», а то многие не понимают. Я, правда, пока тоже не понимаю, так что условно:
Ты напал на волка — остальные не реагируют. Когда волк при смерти, есть три варианта:
1. Он воет и зовет подмогу.
2. Главарь волков «делает анимацию», посылая следующего волка на тебя.
3. Следующему волку дается комманда медленно приближаться к тебе и «случайно аггрить» или «медленно приближаться и огрызаться», а потом нападать. Лучше всего — со спины.
Рисовать «все встали в круг и ждут», конечно же, не надо.
Теперь, «проигрыш».
Видим, что игрок сливает, есть варианты:
1. Тупо делаем вид, что пак кончился (хотя на самом деле нет) и просто не посылаем новых мобов.
2. Посылаем игроку не очередного моба, а главаря, когда/если главарь умирает — остальные «разбегаются в панике».
3. Делаем игроку «клиническую смерть»: моб сбивает игрока с ног, принюхивается и решает, что игрок мертв, после чего отходит. Игрок встает через 5 секунд.
4. Делаем игроку «помилование» (главарь говорит «оставьте его!») или делаем паку «отступление» с регенерацией.
5. Убиваем игрока, гыгы.
Надзадача: понять, надо ли их вообще делать интересными.