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

Зал закрыт

middle~30 мин

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

На «Комете-1» мальчишка простоял два часа и ни разу не выиграл. Спросил, можно ли ещё жетон. Значит, проигрывать было интересно. Вечером переставил шесть чисел в прошивке: выигрывать стали чаще, а играть меньше. Вернул как было.

Утро. Левое крыло Дома культуры в Посаде, высокие окна, в луче света висит пыль. Вдоль стен стоят автоматы под простынями, и простыни повторяют их форму: тут торчит ручка, там угол табло. Тридцать лет здесь работал зал «Комета». Автоматы для него собирал и программировал инженер Лев Аркадьевич, в городе его звали Аркадьич. Прошлой зимой его не стало, и зал закрыли.

На двери снаружи приклеен глянцевый флаер: «„Лутбокс“. Открытие через улицу. Три первые крутки бесплатно». Варя отклеивает его, сминает и всё равно кладёт в карман. Она внучка Аркадьича и теперь хозяйка зала. Тебя она нашла по объявлению: программист из большого города, игр не делал, зато не боится железа.

Из-под простыни под котом видна латунная табличка: «Комета-1».

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

Варя достаёт из ящика кассы общую тетрадь в клетку. На первой странице одна строка, крупно, рукой Аркадьича:

«Игру делают не для автомата, а для того, кто стоит перед ним».

Ниже, мельче, та самая запись про «Комету-1», с которой начался урок.

Демо-режим и жетон

Варя помнит, как «Ракетка» стояла у входа. Пока никто не играл, автомат крутил демо-режим: две ракетки сами отбивали мяч, табло само считало очки, пищалка пищала на каждом ударе. Картинка та же, что в игре. Но это не игра, это вывеска.

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

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

Философ Бернард Сьютс собрал это в одну фразу: играть значит добровольно пытаться преодолеть необязательные препятствия. Каждое слово в ней работает. «Добровольно» это жетон, который бросил сам. «Пытаться» значит, что можно и не суметь. «Необязательные препятствия» это правила: мяч проще остановить ладонью, но так нельзя, и в этом весь смысл.

Разберём их по одному.

Правила

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

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

Цель

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

Обратная связь

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

Геймдизайнер Раф Костер в книге «A Theory of Fun» называет удовольствие от игры удовольствием от учёбы: мозг замечает закономерность и радуется, что заметил. Обратная связь это материал для такой учёбы. Пропустил мяч, увидел, где ошибся, в следующий раз встал раньше.

Добровольность

Человек играет, потому что хочет, и может перестать. Поставь мальчишку к «Комете-1» на два часа по приказу, и это будет работа, хотя правила, цель и табло останутся теми же.

Запомни флаер на двери. «Бесплатно» тоже способ подвести человека к автомату, и курс к нему ещё вернётся.

Магический круг

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

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

Три автомата под простынями

Варя приподнимает край каждой простыни и рассказывает, как было.

«Комета-1», самый старый автомат зала, тот, на котором спит Спрайт. Ручка ведёт комету вверх и вниз, навстречу летят камни. Задел камень, и хвост кометы становится короче. Долетел до конца трассы с хвостом, выиграл. Хвост кончился раньше, жетон съеден.

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

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

Вот «Ракетка», разобранная по всем пяти пунктам:

«Ракетка»
Правиларакетка ходит только вверх и вниз; мяч отскакивает от стен и ракеток; мяч за ракеткой это очко сопернику
Цельпять очков раньше соседа
Обратная связьщелчок удара, цифры на табло, мяч летит туда, куда его отбили
Добровольностьжетон бросают сами, уйти можно после любого розыгрыша
Магический кругот жетона до пятого очка; потом автомат снова крутит демо-режим

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

Числами и руками

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

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

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

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

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

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

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

Как устроен курс

В курсе 204 урока в семнадцати разделах. Урок начинается сценой в зале и держится на одной мысли. Мысль сразу уходит в код на движке Bevy: короткая разминка или очередной этап автомата, который ты собираешь через весь раздел. Код проверяет раннер сайта тестами без окна, а картинку ты смотришь у себя в шаблоне komet-template. Раздел кончается боссом: автомат встаёт в зал, завсегдатаи в него играют, а ты получаешь ранг.

РазделУрокиЧто делаем
GD0 Зал закрыт1-4что такое игра, первое окно, проверка без окна
GD1 Первый автомат5-16«Ракетка»: игровой цикл и ECS
GD2 Векторы17-30«Кирпичник»: геометрия на плоскости
GD3 Сок31-42тир против строя пришельцев: ощущение от игры
GD4 Инерция43-56шутер с тяжёлым джойстиком: физика
GD5 Прыгун57-72платформер и уровни
GD6 Чертёж73-84геймдизайн как ремесло: от глагола до одностраничника
GD7 Баланс85-100вероятность и карточная дуэль с ИИ
GD8 Охотники101-114лабиринт и ИИ врагов
GD9 Подвал115-130роглайк
GD10 Генератор131-138мир, который строит себя сам
GD11 Сценарий139-154диалоги, квесты и сценарий
GD12 Легенда155-172большая ролевая игра
GD13 Сцены173-180постановка, производство и выпуск
GD14 Объём181-1923D и линейная алгебра в пространстве
GD15 Кабина193-200тренажёр
GD16 Открытие зала201-204финал

Почти весь код пишется на Rust. Два раздела, GD6 и GD7, идут на TypeScript прямо в браузере: там правила игры проверяются без движка. От тебя ждут основ Rust: владения, трейтов, итераторов, модулей и cargo. Если их ещё нет, пройди уроки с первого по двадцать первый в курсе Rust. Школьную математику курс не считает известной: вектор, синус и матрицу ты встретишь заново, когда без них мяч полетит не туда.

Практика

Дальше

Варя опускает край последней простыни. Спрайт на «Комете-1» переворачивается на другой бок.

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