
Чтобы игра слушалась
Бывает, герой прыгает как надо, а бывает - будто застрял в воздухе. Правила те же, отличаются настройки. Сегодня сравним такие варианты, а потом добавим в ремикс пульт и подберём числа под себя.
- пульт по кнопке P: можно менять прыжок, падение, поблажки и зону касания
- твои числа вписаны в игру и сохранены
- три записи: что мешало играть и какое число ты поменял
Чтобы сравнить: открой remix.html, нажми P, затем сыграй в index.html.
Работаешь над своей идеей с первого дня? Настраивай её главное действие. Попроси агента адаптировать пульт и выбрать параметры для твоей игры: это могут быть скорость, время перезарядки или задержка хода. Копировать управление динозаврика не нужно.
Если уже знаком с поблажкой у края и буфером прыжка, начни с дегустации и переходи к пульту.
Начнём с твоего ремикса
Попроси агента открыть ремикс и сыграй пару раундов. Пока ничего не настраивай.
Загляни во вчерашнюю домашку: там ты записал число, которое хотелось поменять. Сегодня начнём с него.
Вспомним прошлый урок
Ты стреляешь во врага, но попадание никак не видно и не слышно. Чего не хватает?
- Цели: непонятно, чего добиватьсяЦель здесь есть - остановить врагов. Не хватает сигнала, что выстрел попал.
- Отклика: непонятно, попал ли выстрелДа. Игра должна как-то показать результат действия.
- Препятствия: игроку ничто не мешаетПрепятствие - враги. А вот ответ на попадание не виден.
Ты скопировал remix.html в новую папку и открыл там агента. О чём стоит вспомнить?
- Ни о чём: агент помнит вчерашние правилаВ новом разговоре нет вчерашней переписки. Нужные правила должны лежать в памятке.
- Без памятки агент вообще не сможет работатьСможет, но не узнает ваши договорённости из прошлой папки.
- Нужно перенести и памятку с правиламиВерно. Она хранится в папке игры. В день 4 перенесём правила в новый проект.
Что изменим сегодня
Прыжок работает, но что-то в нём мешает. Пока трудно объяснить, что именно.
Открываешь пульт по P, меняешь число и сразу проверяешь, стало ли удобнее.
Слепая дегустация
Здесь пять раундов на перевале из учебного примера «Искра на перевале»: огонёк Искра бежит сам, а ты прыгаешь через ледяные шипы и расщелину. В каждом раунде попробуй версии A и B: они отличаются одним числом, но каким - пока не говорим. Прыгай пробелом или касанием окна. Выбери понравившуюся версию, затем посмотри, что в ней изменилось.
В одной версии прыжок задерживается на 0,1 с. Может ли это быть заметно при игре?
- Да, управление может казаться медленнымДа. Около 0,1 секунды - граница, после которой ответ перестаёт казаться мгновенным (Нильсен, 1993).
- Нет, разницу невозможно почувствоватьПо картинке она может быть незаметна, но при нажатии кнопки ощущаться. Сравни версии ещё раз.
- Только профессиональный игрок заметитНазови, что мешает: «тормозит» или «ватно».
Как объяснить, что хочется поменять
«Ватно», «как кирпич», «будто на Луне» - нормальные первые впечатления. Только по ним трудно понять, что менять. Найдём за каждым ощущением настройку, которую можно проверить. Вот подсказки для твоей игры:
| так говорят | что крутить |
|---|---|
| ватный, тормозит | взлёт быстрее: timeToApex меньше, 0.35 → 0.28 |
| как на Луне, висит | падение быстрее подъёма: fallMult 1.5-2 |
| как кирпич | прыжок выше или взлёт дольше: jumpHeight, timeToApex больше |
| нечестно, я же не задел | зона касания меньше рисунка: hitboxShrink 4-6 |
| нажал, а он не прыгнул | запомненное нажатие: jumpBuffer 0.1 |
| скучно, еле ползёт | мир быстрее: runSpeed больше, на 10 % и больше |
| так говорят | что крутить |
|---|---|
| камнем вниз | тянет слабее: gravity меньше, 1400 → 1200 |
| как воздушный шарик | тянет сильнее: gravity больше |
| взмах вялый | взмах резче: flapSpeed больше |
| не успеваю поймать падение | предел скорости падения: maxFall меньше |
| нечестно, я же не задел | зона касания меньше рисунка: hitboxShrink 4-6 |
| трубы душат | просвет шире: gapSize 170 → 190 |
| так говорят | что крутить |
|---|---|
| сонная | шаг короче: stepTime 0.15 → 0.12 |
| нервная, не успеваю | шаг длиннее: stepTime больше |
| к концу гонит как бешеная | разгон мягче: speedUp ближе к 1, 0.97 → 0.98 |
| съела мой поворот | помнить два нажатия: inputQueue 2 |
| нечестно, я успел повернуть | поблажка у стены: graceTime 0.12 |
| тесно | поле больше: gridSize 20 → 24 |
Прыжок, кстати, удобнее задавать тем, что видит игрок: высотой и временем до верхней точки. Силу тяжести агент посчитает сам. Так советует Кайл Питтман в докладе «Building a Better Jump» (GDC, 2016).
«Тяжело» - не всегда ошибка. В Flappy Bird Донг Нгуен настроил гравитацию так, что птицу губит любое лишнее нажатие, пишет Rolling Stone (2014). Слово подсказывает, куда крутить, а насколько - решаешь ты.
Если неясно, с какого числа начать, попроси агента предложить вариант. Проверять всё равно тебе:
Тебе говорят: «Герой прыгает будто на Луне». Что попробуешь поменять?
- Подниму высоту, чтобы дольше лететьТогда герой проведёт в воздухе ещё больше времени. Попробуй изменить длительность взлёта или падения.
- Сокращу взлёт или ускорю падениеДа. Так можно проверить, не слишком ли долго герой висит в воздухе.
- Увеличу скорость бегаЭто изменит расстояние прыжка, но не уберёт долгое зависание.
Когда игра прощает неточное нажатие
Иногда кажется: «Я же нажал прыжок», а герой всё равно падает. Две небольшие поблажки помогают таким нажатиям срабатывать:
- Поблажка у края, или «время койота»: ещё немного времени на прыжок после того, как герой сошёл с платформы.
- Запомненное нажатие: нажал прыжок перед приземлением - игра подождёт касания земли и прыгнет.
Ниже снова перевал Искры: расщелина, узкий каменный столб и ещё одна расщелина. Сделай 5 попыток без поблажек и 5 с ними. Сравни результат: когда поблажка помогает, рядом появляется подпись.
В Celeste поблажка у края - ровно 0,1 секунды, это видно в открытом коде её героя. Мэдди Торсон разобрала эти поблажки и честно добавила: «Не думаю, что мы придумали хоть один из этих приёмов». А Танели Арманто ещё в 1997 году дал змейке на Nokia несколько миллисекунд перед столкновением, чтобы игрок успел повернуть (MEL, 2019).
Сравни оба варианта сам: стало ли проще попасть на каменный столб?
Сделай по 5 попыток в каждом режиме. Затем попробуй «Кирпич» и «Пушинку»: задача та же, а прыгать приходится иначе.
На табло останутся результаты обоих вариантов.
Как проверить:
- По 5 попыток без поблажек и с ними
- С поблажками перепрыгнул чаще
- Видел, как поблажка выручила: подпись у края или у столба
Если пока не удаётся перепрыгнуть, включи «По числам Celeste» и подольше удерживай прыжок: в верхней точке будет больше времени.
Теперь сыграй в учебный пример целиком. «Искра на перевале» сделана по образцу Celeste. Оттуда взяты числа прыжка, обе поблажки, зависание в верхней точке и рывок: в воздухе он один и снова готов, когда огонёк встал на землю. Экраны короткие, после падения огонёк сразу стоит в начале экрана.
Пока играешь, замечай, где поблажка тебя выручила. Твоя игра может быть совсем другого жанра: поблажки нужны везде, где игрок жмёт кнопку в точный момент.
Добавим пульт в твою игру
Попросим агента встроить пульт в ремикс. По кнопке P откроются ползунки: двигаешь - игра меняется без перезагрузки. Набор настроек зависит от того, какую игру ты выбрал.
Пока агент работает, найди своё число из домашки в шпаргалке выше.
С пультом можно пробовать настройки, не отправляя агенту новое задание на каждый сдвиг.
Отправь промпт, открой ремикс и нажми P. Подвигай каждый ползунок, пока игра продолжает работать.
Как проверить:
- Ползунок меняет игру сразу, без перезагрузки
- Отпустил ползунок - клавиши снова управляют игрой
- «Скопировать числа» отдаёт строки CONFIG
- Проверил то, что агент велел заметить
Если пульт ведёт себя иначе, найди похожий случай в таблице и отправь агенту подсказку рядом с ним.
| что видишь | что сказать агенту |
|---|---|
| ползунки двигаются, а игра та же | «Пульт не влияет на игру. Сделай так, чтобы игра читала числа из CONFIG каждый кадр» |
| пробел двигает ползунок | «Когда я отпускаю ползунок, пробел должен снова управлять игрой» |
| P ничего не открывает | «P не работает. Проверь клавишу по event.code, у меня русская раскладка» |
| кнопка не копирует | «Покажи числа в текстовом поле, я скопирую сам» |
Найдём настройки, с которыми хочется играть
Сделай три пробы. Для каждой выбери один ползунок, поменяй его и поиграй минуту. Запиши, что мешало и какое число помогло. Начни со вчерашней домашки.
Для сравнения меняй число хотя бы на 10 %. Так проще заметить разницу, а потом можно подобрать промежуточное значение.
Джейми Гриземер, геймдизайнер Halo 3, поменял у снайперской винтовки время между выстрелами с 0,5 на 0,7 секунды. В докладе на GDC 2010 он советует: меньше чем на 10 % не меняй, лучше проскочи и вернись (запись доклада).
Когда найдёшь удачные значения, нажми «Скопировать числа» и отправь их агенту. Он впишет их в игру, иначе после перезагрузки вернутся прежние.
Сохраним выбранные числа вместе с игрой.
Запиши три пробы в тетрадь, затем отправь агенту промпт выше с числами из пульта.
Как проверить:
- В каждом заходе менял один ползунок
- Три пары «слово → число» записаны
- После перезагрузки страницы числа мои
- Агент сохранил версию «мои числа»
Если поменял сразу несколько ползунков и запутался, верни последнее сохранение. Повтори опыт с одним числом.
Что настроить в твоём жанре
Этот шаг по желанию. Управление важно в любом жанре, хотя настройки у всех разные. Попробуй варианты в genre.html из домашки первого дня или в remix.html. Числа ниже - отправная точка: подбирай под свою игру.
Начни с 0,1 с на прыжок после края и 0,1 с на запомненное нажатие. Попробуй падение в 1,5-2 раза быстрее подъёма и сравни.
Попробуй разгон и остановку за 0,1-0,15 с. Если герой кажется скользким, проверь, сколько времени он тратит на торможение.
Попробуй анимацию хода на 0,1-0,15 с и возможность отменить ход. Так случайное нажатие не заставит начинать уровень заново.
Пусть карта при наведении приподнимается за 0,1 с. Сразу будет видно, какую карту ты выбираешь.
Добавь отметку и звук в первые 0,1 с после приказа. Тогда игрок поймёт, что щелчок принят, даже если отряд ещё ищет путь.
Добавь к сбору предмета «+1» и небольшой подскок. Проверь, приятно ли собирать несколько предметов подряд.
Попробуй 30-40 знаков в секунду. Щелчок должен показывать всю строку, чтобы не приходилось ждать уже прочитанное.
Начни с темпа стрельбы, урона или разброса. Каждый раз меняй одно число хотя бы на 10 %, как советует Гриземер в примере с Halo 3.
Попробуй шаг по клеткам за 0,12-0,15 с. При удержании стрелки герой должен идти без пауз.
Проверим, что числа сохранились
Осталось сравнить версии и сохранить выбранные настройки.
Проверяет агент
Играешь ты
Сыграй три раунда в index.html и три в remix.html. Что стало удобнее? Назови конкретную разницу.
★ Свежий взгляд
Открой новый разговор: введи /clearвведи /newоткрой новую сессию в той же папке. Пусть агент проверит файлы без предыдущей переписки.
Если проверки прошли, сохрани день.
Тебе говорят: «Прыжок какой-то ватный». С чего начнёшь?
- Выберу одну настройку и проверю еёДа. Например, сократи время до верхней точки. После одной перемены легче понять, помогла ли она.
- Попрошу агента сделать прыжок приятнееСначала уточни, что хочешь проверить: высоту, скорость взлёта или падения.
- Сразу поменяю высоту, время и падениеПосле трёх перемен будет труднее понять, какая повлияла на ощущение.
Что делает поблажка у края?
- Рисует край платформы чуть ширеРисунок тот же. Поблажка - во времени, а не в пикселях.
- Даёт прыгнуть чуть позже краяДа. В Celeste - 0,1 с. Игрок её не видит, он просто реже падает.
- Замедляет игру у самого краяСкорость та же. Просто прыжок ещё засчитывается.
Ты сдвинул четыре ползунка сразу, и стало хуже. Что дальше?
- Двигаю ещё два, пока не станет лучшеШесть изменений разом - ещё больше путаницы.
- Попрошу агента угадать неудачное числоОн может предложить варианты, но ощущения проверяешь ты. Вернись к одному ползунку.
- Возвращаю как было и кручу по одномуДа. Когда меняешь по одному, сразу видно, какое число виновато.
Ты нашёл отличные числа в пульте и закрыл вкладку. Что будет, когда откроешь игру снова?
- Вернутся старые числа из CONFIGДа. Пульт меняет игру, пока она открыта. Чтобы числа остались, их вписывают в CONFIG.
- Числа останутся: пульт их помнитСам пульт ничего не хранит. Помнит только CONFIG.
- Игра откроется сразу с пультомПульт открывается по P, а числа будут старые.
В дегустации есть прыжки с 0,35 и 0,6 с до верхней точки. Какой выбрать?
- 0,35: резкий прыжок всегда лучшеНе всегда. Парящий прыжок тоже бывает к месту.
- 0,6: с ним легче, значит, лучшеЛегче не значит лучше. Это вкус.
- Тот, который подходит моей игреДа. Резкий и парящий прыжки решают разные задачи. Ты уже знаешь, каким числом менять это ощущение.
Агент написал: «Готово, прыгать стало приятно». Что дальше?
- Верю и сразу сохраняю версиюАгент проверил код, а не ощущение. Сыграй.
- Сыграю сам и сравнюВерно. Проверка кода ещё не говорит, удобно ли тебе управлять героем.
- Прошу его поиграть ещё разокРуками он не почувствует. Сыграй сам.
Дадим обе версии другому человеку
- Попроси человека сыграть в
index.html, затем вremix.html. Спроси: «В какой версии удобнее играть?» - Запиши, что он выбрал и какими словами сказал
- Подбери настройку к его замечанию и добавь четвёртую пару в тетрадь
- Добавь в ремикс ещё одну настройку управления. Сравни игру с ней и без неё
Сыграй в genre.html с поблажками и без. Где падал реже? Запиши в тетрадь.
Покрути разгон от 0,05 до 0,3 с и найди число, на котором герой перестаёт скользить.
Дай другу решить уровень и посчитай, сколько раз он нажал Z.
Сыграй бой. Отметь момент, когда хотелось более быстрого ответа карты.
Отдай несколько приказов подряд. Следует ли отметка за твоими щелчками?
Собери 20 предметов подряд. Не надоедает ли «+1»? Если надоедает, сделай его тише или короче.
Прочитай одну сцену на 25, 35 и 50 знаках в секунду. Какая скорость твоя?
Трижды попробуй уменьшить и увеличить темп на 20 %. Запиши, с каким темпом стрельбы тебе удобнее.
Пройди деревню с шагом 0,10, 0,13 и 0,18 с. На каком ходить приятнее?
| критерий | зачёт |
|---|---|
| Пульт | открывается на P, ползунки меняют игру сразу |
| Мои числа | в CONFIG, переживают перезагрузку, есть сохранение |
| Слова | три-четыре пары «слово → число» в тетради |
| Игрок | сыграл «до» и «после», его ответ записан |
Время: 15 минут.
- Впечатление от управления можно связать с конкретными настройками. Начни с высоты, времени взлёта, падения или зоны касания.
- От впечатления - к проверке. За словом «ватно» может стоять, например, время до верхней точки:
timeToApex 0.35 → 0.28. - Небольшие поблажки помогают управлению. Попробуй по 0,1 с у края и перед приземлением.
- Меняй по одному числу. Для сравнения - хотя бы на 10 %. Удачные значения впиши в CONFIG и сохрани.
- Выбор остаётся за тобой. Сыграй и реши, подходит ли настройка этой игре.
Источники
- Response Times: The 3 Important Limits
- Math for Game Programmers: Building a Better Jump
- Мэдди Торсон о поблажках в Celeste
- Celeste & Forgiveness
- Открытый код героя Celeste: Source/Player/Player.cs
- Tuning Canabalt
- An Oral History of «Snake» on Nokia
- The Flight of the Birdman: Flappy Bird Creator Dong Nguyen Speaks Out
- Джейми Гриземер: время между выстрелами снайперки в Halo 3
В следующем уроке придумаем собственную игру. Агент задаст вопросы и соберёт первый черновик. Пока можешь прикинуть, за кого хочется играть и что в этой игре делать.