Эссе о разработке игр, мышлении и книгах

Боты и твинки в играх

ММО игра, если в ней не заниматься ботами и твинками. (с) [Rick and Morty](https://en.wikipedia.org/wiki/Mr._Meeseeks)

ММО игра, если в ней не заниматься ботами и твинками. (с) Rick and Morty

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

Предлагать идеальное решение не буду — сильно сомневаюсь в его принципиальной возможности. Вместо этого попробую выделить направления взаимодействия с проблемой.

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

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

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

И будьте осторожны, очень много букв.

Диспозиция

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

Под определение попадают, в то числе:

  • скрипты для торговли на аукционе;
  • нейронки для автоприцеливания;
  • прокликиватели таймеров в браузерках;
  • полноценный ИИ для pvp или фарма ресурсов.

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

По этому определению, например, персонажи в WoW сверх первого считаются твинками, хотя игра и разрешает их создавать — механики WoW заточены под одного персонажа. Конечно, если Blizzard втихую не подкрутила баланс соответствующим образом :-)

Пример относится чуть больше к классическому WoW, чем к современному, так как в современном есть «огрызки» твинковских механик. Например, экипировка для твинков.

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

Игроков, которые занимаются ботоводством и / или твинководством будем называть нарушителями.

Формально, боты и твинки — разные вещи и по-разному влияют на игру. Можно играть в одного бота, без твинков. Или иметь твинков, но не автоматизировать их.

Формальный подход требует отдельного рассмотрения трёх случаев:

  • автоматизация основного аккаунта;
  • твинководство без автоматизации;
  • автоматизация твинков.

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

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

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

  • читеров;
  • токсичных игроков;
  • донатеров, в случае кривой монетизации.

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

Настройка монетизации также контролируется разработчиками, поэтому принципиальной проблемы в её настройке нет.

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

Формализация проблемы

Одиночные игры

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

Если он купил вашу игру, то пусть развлекается как хочет.

Если это некий singleplayer free-to-play, то игрок заплатит, только если игра ему понравится, так что тоже пусть делает что хочет.  Если же игра должна заставлять игрока платить, то нафиг такие игры.

Если у вас есть общий рейтинг, то это уже не одиночная игра.

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

Многопользовательские игры

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

Из-за природы многопользовательских игр, один нарушитель может испортить опыт большому количеству честных игроков.

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

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

Разрушение игрового опыта

Ресурсная модель игры позволяет смотреть на игру как на преобразователь ресурсов, где ресурсом может выступать всё, что может быть потрачено или получено.

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

Каждая механика преобразует одни ресурсы в другие. Например, время и ресурсы из игры в положительные эмоции. Или в отрицательные, если игрок проигрывает.

Автоматизация и твинки позволяют взламывать правила преобразования ресурсов в пользу нарушителя.

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

Автоматизация же убирает трату времени.

Кстати, это демонстрирует причину сверхэффективности армий ботов:

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

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

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

Соревновательные и кооперативные игры

Нарушители в разной степени портят опыт от этих типов игр.

С соревновательными всё ясно: чрезмерное преимущество в ресурсах одной из сторон приводит к проигрышу второй, независимо от её навыков.

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

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

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

Кроме того, редко бывают чисто кооперативные игры. Всегда есть какой-нибудь рейтинг или мета-pvp.

Моя позиция

Прежде чем продолжить, кратко опишу личную этическую позицию, так как она может влиять (надеюсь нет) на дальнейшее изложение.

Подробнее я изложил её в следующем фронтире геймдизайна.

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

Поэтому альтернативой карательным мерам может стать создание механик, которые:

  • обеспечивают легальное получение опыта, которого не хватает игрокам;
  • либо делают получение такого опыта невозможным в принципе.

Мне сложно определить насколько такая позиция влияет на объективность и полноту дальнейших рассуждений. Если заметите предвзятость — пишите в комментариях.

Направления атаки

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

В идеале, нет влияния — нет проблемы.

Обратите внимание, сами нарушители могут оставаться. Достаточно чтобы они не портили игру честных игроков. Или портили её не на столько, чтобы те уходили из игры или переставали платить.

Немного математики

Эта глава нужна чтобы обосновать выбранные направления. Если вы мне доверяете, можете её пропустить.

Я не боюсь математики и мне интересно

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

Пусть:

  • t — время;
  • type — тип игрока, который может быть:
    • H — honest — честный игрок;
    • I — intruder — нарушитель;
  • experience(type, t) — функция зависимости величины получаемого игроком опыта от типа игрока и времени;
  • expected_exp — положительный опыт, который должен получать игрок, согласно правилам игры и расчётам разработчиков;
  • h(t) — количество честных игроков;
  • i(t) — количество нарушителей;
  • p(t) = h(t) + i(t) — общее количество игроков;
  • damage(x) — доля теряемого / испорченного опыта, в зависимости от доли нарушителей среди всех игроков (и механик игры);
  • new(type, t) — количество новых игроков, приводимых в игру;
  • leave(type, t) — количество ушедших из игры игроков;
  • convert(type, t) — доля игроков, сконвертировавшихся из одного типа в противоположный.

Функции damage, new, leave, convert для нас — чёрные ящики, так как зависят от механик игры.

Получаемый честным игроков опыт можно выразить как:

experience(H, t) = expected_exp * (1 - damage(i(t) / p(t)))

Наша задача максимизировать experience(H, t). Для этого мы можем делать следующее:

  1. увеличивать expected_exp;
  2. уменьшать i(t) / p(t) — долю нарушителей среди игроков: я предполагаю что функция damage возврастающая;
  3. менять саму функцию damage, чтобы она возвращала меньшие значения.

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

Уменьшать i(t) / p(t), само собой, можно только в динамике. То есть, должно выполняться неравенство.

i(t+1) / p(t+1) < i(t) / p(t)

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

Представим p(t) как i(t) + h(t), подставим и упростим

i(t+1) / (i(t+1) + h(t+1)) < i(t) / (i(t) + h(t))

i(t+1) * i(t) + i(t+1) * h(t) < i(t) * i(t+1) + i(t) * h(t+1)

сокращаем i(t+1) * i(t)

i(t+1) * h(t) < (t) * h(t+1)

группируем

i(t + 1) / i(t) < h(t+1) / h(t)

Распишем i(t+1) и h(t+1)

i(t+1) = i(t) + new(I, t) - leave(I, t) + convert(I, t) * h(t)

h(t + 1) = h(t) + new(H, t) - leave(H, t) + convert(H, t) * i(t)

подставим в неравенство и сократим

(new(I, t) - leave(I, t) + convert(I, t) * h(t)) / i(t) < (new(H, t) - leave(H, t) + convert(H, t) * i(t)) / h(t)

или

(new(I, t) - leave(I, t) + convert(I, t) * h(t)) / (new(H, t) - leave(H, t) + convert(H, t) * i(t)) < i(t) / h(t)

Поскольку в момент времени t мы уже не можем влиять на i(t) и h(t), наша задача сводится к минимизации функции

(new(I, t) - leave(I, t) + convert(I, t) * h(t)) / (new(H, t) - leave(H, t) + convert(H, t) * i(t))

для этого мы можем:

  • менять функцию new (увеличивать new(H, t) и уменьшать new(I, t));
  • менять функцию leave (уменьшать leave(H, t) и увеличивать leave(I, t));
  • менять функцию convert

Направления

Итого, мы получаем следующие базовые направления работы с нарушителями. В порядке субъективной сложности:

  1. Улучшать ожидаемый игровой опыт.
  2. Улучшать качество новых пользователей .
  3. Улучшать показатели ухода пользователей.
  4. Уменьшать влияние нарушителей на честных игроков.
  5. Уменьшать профит от нарушения.

И как бонус, менее очевидное направление:

  1. Инвертировать пользовательскую базу — превратить нарушителей в ЦА игры. Если не получается минимизировать функцию, её можно максимизировать.

Откровенно говоря, первый и второй варианты для меня оказались неожиданными. Но если посмотреть на вопрос здраво, то всё логично.

Далее рассмотрим каждое из направлений по порядку, но сначала.

Оговорка

Механики игры — хаотическая система, небольшое изменение её динамики может привести к огромным последствиям.

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

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

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

Улучшение игрового опыта

Ресурсы разработчиков ограничены и не обязательно самым выгодным направлением деятельности является борьба с нарушителями.

Если вы можете улучшать опыт игроков быстрее, чем он портится  нарушителями, почему бы не делать это?

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

Рассмотрим классический случай: singleplayer игру с прикрученным к ней глобальным рейтингом.

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

Минусом подхода является увеличение стоимости (начала) борьбы с нарушителями по мере развития игры. Сложность в любом случае растёт, но если совсем не заниматься вопросом, то рост будет куда значительнее.

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

Поэтому, при выборе этого направления необходимо планировать:

  • либо процедуру вывода игры из эксплуатации;
  • либо параллельную борьбу с нарушителями;
  • либо параллельную подготовку игры (движка, команды) к борьбе с ними.

Привлечение пользователей

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

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

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

Критерии для выбора источников:

  • техническая грамотность (программирование, игровой опыт);
  • этическая подкованность (на сколько игроки приемлют нарушения);

Условно говоря, среди игроков из литературной группы в одноклассниках будет меньше нарушителей, чем среди игроков из хакерских тем на 4chan.

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

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

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

Уход пользователей

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

Тут можно выделить несколько подходов:

  • бан нарушителей;
  • удержание честный игроков.

Начнём с решения в лоб.

Бан нарушителей

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

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

И даже сколько сущностей сидит с другой стороны не всегда ясно.

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

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

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

К тому же, это дорогое удовольствие, особенно для независимых разработчиков.

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

Вот эталонный рассказ как один энтузиаст несколько лет успешно воевал с Microsoft. «Хакер» в своё свободное время just for fun обеспечивал постоянным гемороем работаников Microsoft: от программистов до менеджеров — судя по описанным изменениям. И никаких угрызений совести. В случае небольшой команды такой «энтузиаст» может просто убить проект.

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

Более того, прогресс движется в сторону невозможности отличить какая нейросеть сидит с другой стороны: искусственная или настоящая. Существует ненулевая вероятность, что в будущем отслеживание нарушителей будет становиться всё дороже и сложнее.

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

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

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

Определять же нарушителей можно двумя способами:

  • По внешним признакам, сравнивая их fingerprints для определения твинков.
  • По внутренним признакам:
    • анализу действий для определения ботов;
    • анализу взаимодействий аккаунтов для определения твинков.

Удержание честных игроков

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

Тут мало что можно придумать: если игрок решил уйти, то остановить его сложно. На ум приходит два способа:

  1. Совершенствование поддержки: оперативное отслеживание жалоб (прямых и косвенных — в социальных сетях), корректное разбирательство и раздача компенсаций.
  2. Автоматическое отслеживание уходящих игроков, попытки определить причину ухода (опросами, автоматически) и удержать игрока компенсацией.

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

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

Влияние нарушителей на честных игроков

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

Для этого можно выделить два пути:

  • снижение вероятности встречи честных игроков с нарушителям;
  • снижение негативного эффекта от встречи.

Снижение вероятности встречи

Для ограничения встреч можно использовать несколько подходов:

  1. опираться на реальную социальную сеть;
  2. контролировать встречи игроков эвристиками;
  3. ограничивать массовый доступ к ключевым механикам;
  4. создавать отдельные механики для «нарушителей».

Использование социальной сети

Не Facebook или ВКонтакте, а реальной социальной сети, которую формирует вокруг себя каждый человек.

Мы лучше других знаем с кем комфортно взаимодействовать, а с кем некомфортно. Кто играет честно, а кто — нет.

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

Вариантов я вижу несколько.

Разрешить создание частных серверов, как сейчас происходит во многих песочницах.

Создать игровой мир, в котором группа игроков может «затеряться». Например, вселенную с 100500 планет в Elite-like игре.

Делать singleplayer-центричную игру, когда игрок играет один, но может приглашать помощников из числа друзей или разрешать проход по своей части мира только друзьям. Интересный частный вариант такой механики реализован в Dragon’s Dogma.

Использовать данные из реального мира для организации взаимодействия внутри игры. Классический пример из мобилок — использование графа друзей из Facebook для организации локального рейтинга.

Контроль встреч эвристиками

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

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

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

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

Минус подхода — неточность эвристик: они ошибаются в обе стороны.

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

Если в случае бана честный игрок либо уйдёт, либо восстановится и продолжит играть, то при попадании в «ад» сообществу игры будет нанесён существенный урон. Особенно, если неприятность случится с лидером мнений: стримером, блоггером, кланлидом.

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

Ограничение доступа к механикам

Важные для игрового опыта механики можно оградить сложностью доступа к ним.

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

Фактически, необходим некоторый «paywall», ценой за прохождение которого будут ресурсы в широкой трактовке, получить которые можно только механикой, которую сложно автоматизировать и / или разделить на несколько аккаунтов.

Я вижу два варианта таких механик:

  • действия в реальном мире;
  • неавтоматизируемые действия в игре.

Каждый из вариантов дополнительно делится на:

  • разовый — надо совершить одно действие.
  • периодический — надо взаимодействовать с механикой постоянно.

Если мы ограничиваем доступ платежами, то это разовый платёж и подписка, соответственно

Действия в реальном мире

Простой вариант — зарабатывание денег.  Требование гарантировано отрежет от нарушений всю школоту, но никак не защитит от серьёзных нарушителей.

Кроме денег есть и другие варианты. Уникальные ресурсы можно получать:

  • за победу в конкурсах;
  • за нахождение ошибок в игре;
  • за помощь разработчикам;
  • по квоте через отбор игроков в реальном мире.

Есть где развернуться. Например, интегрироваться со спортивными организациями и проецировать результаты соревнований в игру.

Нужен творческий подход к вопросу.

Минус подхода в том, что любые ресурсы игроки будут пытаться фармить. Например, если давать награду за обнаружение ошибок, то вас завалят ложными сообщениями. В Сказке, например, есть символическое поощрение за общение на форуме и периодически появляются игроки, которые пытаются её фармить спамом.

Неавтоматизируемые действия

По сути, это внутриигровая капча. В него я слабо верю по причинам уже описанным в части про баны.

Примеры таких механик найдутся в стратегиях а-ля StarCraft, для которых создать сильного бота сложно.

Однако сложность увеличивает порог входа в игру, а значит сокращает ЦА.

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

Другой пример ограничения сложностью — клановые войны в WoT, по крайней мере их оригинальный вариант. Чтобы попасть на карту кланам необходимо было пройти турнир среди таких же кланов, а удержаться на карте было ещё сложнее. В таких условиях, ботоводы в клановые войны не попадали.

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

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

Более интересным примером могут стать творческие механики.

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

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

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

В перспективы этого варианта я верю слабо, так как сомневаюсь в появлении настолько сложной (и в реализации, и во взаимодействии) механики. По крайней мере ничего похожего я пока не видел.

Отдельные механики для «нарушителей»

В описании пространства механик ММО я выделил три координатные оси, по которым раскладываются механики:

  • взаимодействие;
  • планирование;
  • массовость.

Каждую механику описывает интервал координат на каждой оси.

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

Эту модель можно развить, добавив отдельную ось для автоматизации и, возможно, ещё одну для твинков. Тем самым мы легализируем автоматизацию, выделяя под неё отдельный срез игры, в который уйдут потенциальные нарушители.

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

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

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

Крайними вариантами могут стать наборы механик, делающих твинков или ботов несущественными.

Чтобы сделать твинков несущественными, игра на одном аккаунте должна предоставлять все те же возможности, что и на нескольких. Не должно быть преимущества от использования нескольких аккаунтов.

Сделать это не так просто, так как потребуется масштабировать все механики игры: от размера хранилищ ресурсов, до бонусов подписки. Удачных примеров я не знаю. Тем более, для игроков это может выглядеть как pay to win.

Чтобы сделать автоматизацию несущественной, придётся автоматизировать все механики, что возможно только в жанре zero player game. Сам по себе жанр неплох, но должны же быть и другие жанры.

К тому же, автоматизировать можно даже zero player game. Сказка тому пример.

Снижение негативного эффекта

Если честный игрок всё-таки столкнулся с нарушителем, то наша задача минимизировать вред для честного игрока.

Вариантов, как всегда, несколько:

  1. Регулирование группового взаимодействия.
  2. Регулирование ресурсов.

Регулирование группового взаимодействия

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

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

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

В сессионках распространена рандомизация групп, которая мешает совместной игре нарушителей.

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

Регулирование ресурсов

Можно ограничить ресурсы, которые одновременно доступны игроку так, чтобы нарушитель не имел значительного преимущества перед честным игроком

Простой вариант: ограничивать максимум ресурсов, скорость их получения, либо испарять их по таймеру.

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

Можно убрать кумулятивный эффект получения игровых ресурсов при групповых активностях: эмоций будет больше, но влияние на общее состояние игры не будет увеличиваться с ростом группы.

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

Сильным ходом было бы устранение или уменьшение синергетического эффекта твинков и автоматизации, но для этого из механик надо исключить трату времени, что довольно сложно в большинстве игр. Но в zero player играх и в частных случаях обычных такое возможно. Например, часть высокоуровневых механик ММО могут работать по этому принципу.

Уменьшение выгоды нарушений

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

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

Увеличение сложности нарушений

Увеличивать сложность можно на уровне механик, либо на уровне взаимодействия с игрой.

Усложнение механик уже рассматривалось, поэтому здесь рассмотрим усложнение взаимодействия нарушителей с игрой.

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

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

Можно использовать признаки уникальности из реальной жизни: паспорт, телефон, данные банковской карточки, личное фото с подписью на листе бумаги :-) Это тот способ, который действительно может победить по крайней мере твинков, по крайней мере в Корее и Китае :-) Но на масштабах планеты будет не применим (надеюсь) никогда.

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

Можно реализовать динамически изменяемое API, изменения в котором автоматически подхватываются официальными клиентами, но ломают все остальные. Как это сделать сходу не скажу, но подозреваю, что возможны как-минимум частично работающие варианты.

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

Уменьшение эффекта нарушений

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

Это действенный вариант для сессионных игр, но игру с перманентным общим состоянием на этом не построишь. С другой стороны, игровая сессия может быть очень длинной, например, несколько месяцев, как в Travian. Либо, состояние может сбрасываться частично.

Другой путь — разрешить срезать углы на пути к желаемому нарушителем опыту.

Продавать быстрый проход через «скучные» этапы игры — очевидный, но опасный с точки зрения разрушения игрового опыта подход. Лучше сразу не делать таких этапов.

Zero player механики. Например, в мобилках сейчас делают пассивное накопление ресурсов во время отсутствия игрока в игре.

«Полноценный» режим автоигры. Есть в некоторых современных мобилках.

Боты-соратники для замены недостающих игроков — проверенный временем вариант для сессионных активностей.

Но более верным подходом, чем предыдущий, будет масштабирование механик под количество игроков. Чтобы можно было играть без ботов вплоть до singleplayer.

Против твинков, теоретически, может помочь накопительный эффект траты ресурсов: чем больше тратишь на аккаунте, тем выгоднее результат траты: меньше тратишь или больше получаешь. Примером возьмём крайний случай, реализованный во многих мобилках, — VIP уровни аккаунта.

Инвертирование целевой аудитории

Мой любимый подход: не можешь победить — возглавь.

Сделать это можно несколькими способами.

Делать игру о твинках. Не представляю как можно реализовать такие механики, но может кто-нибудь придумает.

Делать игру об автоматизации. Скорее всего игра будет доступна только для программистов, но такие игры уже есть, так что почему бы и нет.

В идеале, конечно, лучше делать игру про автоматизируемых твинков. Но это что-то совсем запредельное.

Как делал бы я

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

Поскольку решения сильно зависят от жанра и прочих требований, вот некоторая конкретизация «чего-то»:

  • рпг-стратегия;
  • массивно многопользовательское;
  • с персистентным или частично персистентным миром;
  • с асинхронным или частично асинхронным геймплеем;
  • преимущественно кооперативное (pve);
  • с большим влиянием игроков на мир.

Планирование до разработки

Обязательный элемент в любом случае.

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

Если учитываем нарушителей в механиках, то как и на сколько. Если не учитываем, то чем компенсируем.

В какой степени и в какие сроки готовим код к отслеживанию нарушителей и реакции на них.

Команды это тоже касается: кто чем и как занимается, сколько на это тратит времени и сколько будет тратить.

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

Правила

Должны быть понятные правила: что считается нарушением, а что не считается.

Например:

  • Игра с одного IP-адреса считается нарушением по-умолчанию, но можно получить разрешение, если подтвердить, что живёте вместе.
  • Автоматизация запрещена, но разрешены такие-то и такие-то расширения интерфейса.

Взаимодействие с твинками и ботами должно быть организовано по белому списку: всё что не разрешено явно — запрещено.

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

Нарушителей предпочтительно банить публично и с чётким указанием причины.

Минимальная инфраструктура

Со стороны кода необходимы:

  • лог действий игроков;
  • лог транзакций между игроками;
  • бан, разбан, ограничение доступа к функциональности;
  • фоновый процесс, который будет по аналитике раздавать баны;
  • желательно, «капча» для разрешения спорных для автоматики случаев.

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

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

Со стороны поддержки необходимо отслеживание настроения сообщества, реакция на жалобы и их демонстративное разрешение согласно правилам.

Минимальный геймдизайн

Когда я работал в WG, годах в 2010-2011 у нас на стене висел листок с надписью: «Люди умеют разговаривать». Не помню кто автор мысли.

Этим листком заворачивалось довольно много идей. Суть в том, что не надо упарываться решением проблем игроков, которые они могут решить самостоятельно, поговорив. Идиома очень экономит время, особенно в начале разработки, когда оно наиболее ценно.

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

Это подходит не ко всем жанрам, но в область моих интересов ложится хорошо.

Соответственно, я бы опёрся на самоорганизацию и мотивированность игроков.

Сетевой мир

Игровой мир я бы представил в виде сети относительно независимых инстансов (серверов) с выделением общего сервера и частных серверов.

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

Перемещение игроков и / или ресурсов между мирами было бы разрешено по следующим правилам:

  • Из общего мира в частные, согласно их настройками.
  • Из частных в частные, согласно настройкам и тому, как владельцы миров «задружат» их между собой.

Аналогией для лора такого мира можно считать концепцию мультивселенных из множества франшиз: от D&D до Marvel и DC.

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

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

Иерархия механик по воздействию на мир

По степени влияния механик на общее состояние игры, я бы разделил их на три уровня:

  1. минимум влияния или без влияния — free-to-play — доступны всем;
  2. заметное влияние — pay-to-play — доступны подписчикам и / или покупателям;
  3. сильное влияние — create-to-play — доступны победителям конкурсов, тестировщикам, лидерам мнений, etc.

Все механики обеспечивались бы конкретными ресурсами, которые можно было бы передавать по цепочке: 3->2->1. То есть более вложившийся в игру игрок может передать ресурсы менее сложившемуся, но не наоборот.

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

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

Иерархия социальных механик

Социальную часть геймплея я бы делал в расчёте на малые группы игроков: от 1 до 5-7 человек,  но саму организацию групп и их геймплей делал бы иерархическим с несколькими уровнями.

Условно говоря, механики:

  • для одного-пары игроков;
  • для группы из 5 человек;
  • для 5 лидеров групп по 5 человек;
  • для 5 лидеров групп 5 лидеров групп по 5 человек;
  • и так далее :-)

Этапы запуска

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

  • медленный эволюционный рост, заточенный на формирование сообщества;
  • взрывной рост, насколько позволяют ресурсы.

Я бы не стал соотносить эту логику с таким понятием, как soft launch. Soft launch — это о проверке гипотез и тюнинге. Он может быть и перед этими этапами и между ними.

Было бы интересно попробовать

Перечислю ещё некоторые вещи, в которых я не уверен, но которые хотел бы попробовать.

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

Способы сделать твинков невыгодными:

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

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

Попробовать отслеживать ботов, добавляя случайные сложные игровые испытания, которые не может пройти человек, но способе пройти бот.

Встроить в игру механики для автоматизаторов.