Раздел 47 · Геймдев: зал «Комета»

MDA и основной цикл

middle~25 мин

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

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

Под простынёй «Ракетка»: деревянный корпус, тёмный выпуклый экран, две ручки-крутилки по краям панели, над экраном табло на две цифры. Палыч щёлкает тумблером на задней стенке. Экран загорается серым, пищалка коротко пищит, и больше ничего не происходит.

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

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

Три слоя одного автомата

Палыч помнит, что было в прошивке «Ракетки». Варя помнит, что творилось у автомата по вечерам. Запишем обоих.

Что записано в прошивке:

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

Что происходило, когда играли двое:

  • первые розыгрыши короткие, потом всё длиннее: игроки учатся;
  • кто посильнее, начинает бить краем ракетки и загонять мяч в угол;
  • к концу долгого розыгрыша мяч летит так быстро, что вокруг замолкают;
  • при счёте 4:4 вокруг автомата собирается толпа.

Что чувствовали те, кто держал ручки:

  • азарт против соседа, а не против машины;
  • напряжение длинного розыгрыша и облегчение, когда он кончился;
  • «ещё один матч», если проиграл со счётом 4:5.

Три списка это три слоя. Первый называется механикой: правила и числа, которые записаны в коде. Второй называется динамикой: то, что вырастает из механики во время игры. Третий называется эстетикой: то, что чувствует игрок. Слово «эстетика» тут не про красоту, а про переживание.

Вместе это MDA, по первым буквам английских слов mechanics, dynamics, aesthetics. Схему предложили в 2004 году геймдизайнеры Робин Ханике, Марк Леблан и Роберт Зубек, и с тех пор ею разбирают игры от настольных до сетевых.

С какой стороны смотришь

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

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

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

Под капотом

Пять процентов за удар значит, что после каждого удара скорость умножается на 1,05. После двух ударов мяч быстрее подачи в 1,05 · 1,05 ≈ 1,10 раза, после десяти в 1,05¹⁰ ≈ 1,63, после четырнадцати в 1,05¹⁴ ≈ 1,98. Через четырнадцать ударов мяч летит вдвое быстрее, чем на подаче. Ракетка при этом не ускоряется, и с каждым ударом у игрока остаётся меньше времени, чтобы доехать. Где-то к двадцатому удару мяч упирается в потолок скорости, тоже записанный в прошивке, и дальше розыгрыш держится только на руках. Строки «розыгрыш когда-нибудь кончится» в прошивке нет. Это следует из одного числа.

Поставь десять процентов, и мяч удвоится уже за семь-восемь ударов (1,1⁷ ≈ 1,95, 1,1⁸ ≈ 2,14): розыгрыши станут короткими и злыми. Поставь один процент, и удвоения придётся ждать семьдесят ударов (1,01⁷⁰ ≈ 2,01): розыгрыш затянется, и зрители разойдутся. Одно число механики задаёт длину розыгрыша, это динамика. Длина розыгрыша задаёт, когда вокруг замолкают, это эстетика. Удвоение можно посчитать на бумаге, а какая длина розыгрыша держит зал, видно только у автомата.

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

Восемь удовольствий

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

Это Гоша, завсегдатай. Ему не нужна «Ракетка» сама по себе, ему нужен Тёма по ту сторону поля. Механика у всех одна, а удовольствие у каждого своё. Авторы MDA перечисляют восемь видов удовольствия и честно предупреждают, что список не полный:

УдовольствиеИгра какВ зале
Ощущениерадость для глаз и ушейщелчок удара, неон над входом
Фантазиявыдумка, в которую веришьты не точка на экране, а комета среди камней
Повествованиедрамаматч, который проигрывали 0:4 и выиграли, пересказывают неделю
Испытаниеполоса препятствийрекорд «Кирпичника», который никто не может побить
Товариществоповод собратьсядуэль на двоих и толпа при счёте 4:4
Открытиекарта с белыми пятнамидогадаться, что мяч от края ракетки уходит круче
Самовыражениеспособ показать себяодин бьёт краем, другой стоит в обороне
Времяпрепровождениеспособ скоротать времяпартия, пока ждёшь автобус

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

Основной цикл

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

Три шага повторяются по кругу: основной цикл.

  1. Действие: игрок что-то делает, крутит ручку.
  2. Отклик: игра отвечает, мяч отскакивает и летит в угол.
  3. Решение: игрок смотрит на отклик и выбирает следующее действие.

Вокруг основного цикла крутятся циклы побольше, как шестерни разного размера:

ЦиклСколько длитсяЧем кончается
ударсекунда-двемяч ушёл к сопернику
розыгрышдесятки секундочко на табло и новая подача
матчнесколько минутпятое очко
вечерчасыпоследний жетон

Последний цикл Варя считает жетонами. Если внутренние циклы не держат, до него дело не доходит.

Вопрос веб-разработчика: «Это как цикл событий в браузере?» Нет. Цикл событий крутит машина, а основной цикл крутится в голове игрока. У автомата тоже есть свой цикл: много раз в секунду он смотрит на ручки, двигает мяч и рисует экран. Это игровой цикл, и он появится в пятом уроке. Основной цикл про то, что делает человек.

В лоб и как в игре

В лоб. Ракетка отбивает мяч зеркально: под каким углом прилетел, под таким и улетел. Действие есть, отклик есть. А решения нет: куда полетит мяч, задано заранее тем, откуда он прилетел. Остаётся одна задача: успеть встать на пути. Через десять минут игроки уходят. Это проверка реакции, и выбирать в ней нечего.

Как в игре. Угол отскока зависит от того, куда пришёлся удар: в середину ракетки мяч уходит полого, в край круто. Теперь каждый удар это выбор. Рискнуть краем и загнать мяч в угол или сыграть серединой и не промахнуться? Одна строка механики, а динамика уже другая: появились стили игры, сильный игрок стал отличаться от слабого. Геймдизайнер Сид Мейер называл игру чередой интересных решений. Зеркальный отскок решений не даёт, отскок по месту удара даёт их на каждом ударе.

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

Практика

Дальше

Гоша убегает, пообещав привести Тёму. Палыч щёлкает тумблером, серый экран «Ракетки» гаснет.

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