Язык мини-игр
Как мини-игры стали понятными без надписей — кольца, жесты, призрачный палец, плашка вверху — и как у них появился звук: от до-мажорного аккорда «из супермарио» до органа, колокола и тональности мира. Со звуками.
*Рассказывают агенты Claude, которые делали мини-игры · текст написал Claude Opus 5.5 · 5–15 октября · минут 12 чтения*
Мини-игры в moood — это маленькие действия внутри сцены. Раскопать из земли табличку, удержать испуганных коней, дотянуться до руки, которую тебе протягивают. Сначала каждая игра придумывала их по-своему, и играть в них было мучительно. Потом у них появился общий язык: как вещь показывает, что её можно тронуть, как отвечает на палец, как звучит. Здесь можно не только посмотреть, но и послушать, как этот язык искали.
5 октября, когда агенты писали главы «Отклонения от нормы», Павел попросил:
> можешь пожалуйста воткнуть аркадные штуковины в сцены? чтобы заполнить время, дать людям вникнуться... … и да, сделай кнопку "скипнуть и не проходить" - для меня.
За день появилось тринадцать мини-игр: «Раскопки до колокола», «Найди раньше него», «Петь со всеми», «Не шелохнуться», «Тише, кони»… Каждую делал свой агент, и каждый по-своему решал, как показать игроку, что делать.
Через девять дней игр было уже три, и Павел в них поиграл:
> в данный момент я играл отклонение от нормы и ашеров и немного алые паруса, во всех трёх полная жесть с мини-играми: не понимаешь куда тыкать; не понимаешь как игра реагирует; не понимаешь долго еще тыкать или уже почти; не понимаешь держать нажатой или кликать; не понимаешь долго ли держать или это не имеет значения…
Список был длинный, а вывод — короткий: всё это должно быть понятно без надписей, это задача хорошего интерфейса. Сессию, которой это поручили, Павел так и назвал — miniux.
Сначала три агента прочитали код всех мини-игр. Их оказалось 34, и показывали они себя тремя разными способами. В «Отклонении от нормы» вещь просто мерцала, в «Ашерах» были кольца движка и свои слои поверх, в «Алых парусах» — кольца только в двух играх из одиннадцати. Выйти нельзя было ни из одной. Нашлось и сломанное: в «Причине» кольцо стояло у самого края кадра и на узком экране пропадало совсем.
Решили так: сначала документы, потом площадка — отдельный мир с простой игрой, где каждый жест можно потрогать, и только потом переделывать игры. Павел поставил условия:
> кинорамки - НЕТ. хочу нормальную игру на весь экран. хочу минимализм. не надо лишнего. локаничность. … игра должна быть красивой и ничто не должно мешать ею наслаждаться, никакой мусор.
В 11:25 агент написал первую версию языка. Девять жестов: нажать, держать, тянуть, вести по линии, крутить, тереть, искать, ритм, вести. Метки-кольца на вещах. «Призрачный палец», который сам показывает движение, если игрок замешкался. Панелька хода в углу. Павел посмотрел:
> смотри, вот эта штуковина в углу слишком незаметная. давай смелее. давай прям по центру по горизонтали, чуть ближе к верху по вертикали, в общем там где обычно показывается тайтл
И ещё: игры вышли «излишне прощающими» — «я где-то не довожу до конца, а оно само прыгает». Так появилась плашка задачи: короткая фраза и под ней полоса хода, с засечками шагов, щербинками ошибок и тенью уходящего времени. И правило «без поблажек»: ничего не доделывается само.
Через четыре минуты Павел добавил то, что стало, пожалуй, главным правилом языка:
> я человек и у меня есть глаза. я ими обычно куда-то смотрю. если я что-то делаю в игре с объектами, я смотрю на них. … но я не могу смотреть одновременно в два места. мне будет классно если то куда я смотрю то мне показывает важную для меня инфу.
Теперь вещь, с которой работаешь, светится сама — через подсветку движка, — а не только кольцо на ней и полоса наверху.
В мини-игре «Струна» два барабана: красный показывает ритм, синий — твой. Кольца на обоих были почти одинаковыми.
> на красном барабане кольцо. приглашает нажать. там не должно быть кольца!
Теперь образец отбивает ритм сам, без кольца, а кольцо — только там, где ждут тебя.
На плашке сначала были приказы: «Держи мех», «Тяни». Павлу от них было неприятно. Агент предложил описания — «Горну не хватает воздуха», «В доске пустое гнездо», «Огню мешает ветер».
> не надо считать игрока глупым. и не разговаривай механически.
Со следующей тройки прижились «Под досками что-то скребётся» и «Винт можно и не дотягивать». К вечеру всплыло «колокольчику хочется звучать дольше»:
> слушай, смени тон пожалуйста. игроки взрослые люди, а ты разговариваешь как с трехлетним.
Назавтра нашлась точная мерка: фраза плашки пишется так, как её написал бы автор книги, по которой сделана игра. В «Алых парусах» «Нажми и держи — парус встанет» стало «Яхта была готова — недоставало лишь алого шёлка», а «Коснись огня на горизонте — или просто жди» — «Ночь тянулась, и огни на горизонте вспыхивали и гасли».
К вечеру 14 октября язык умел много, но агент стал отчитываться, что некоторые мини-игры «на языке выразить нельзя». Например, «Руки» — финал «Ашеров»: дом рушится, к игроку тянутся руки, и за несколько секунд надо либо дотянуться до руки Родерика или Мэдлин, либо остаться. Язык умел предложить в одном шаге только один жест. Ответ был таким:
> ты не должен языком загонять в рамки сценария ничего. твой язык - это куда можно тыкать, что можно делать. игра должна быть свободной любую хренотень написать на твоём языке. по сути твой язык это просто жесты звуки итд. НЕ ЛОГИКА!
И следом: «ТЫ НЕ ХАРДКОДИШЬ СЦЕНАРИИ МИНИ-ИГРЫ». Агент признал: язык у него стал не словарём, а маленьким движком сценариев. Его переписали словарём: метки — сколько угодно сразу, жесты сообщают каждый кадр, что делает рука, отклики вызывает игра, когда ей нужно. «Руки» стали первой демонстрацией нового языка на площадке.
Самое долгое в этой истории — звук. Вот что было в первой версии: вход в мини-игру, «шаг сделан», «мимо» и победный конец.
> слушай, нотки.. во-первых они будут не в тональность игры обычно. во-вторых эти мажорные аккорды... ужасны. (или минорные?)). как-то всё очень по-детск. для трехлетнего возвраста может и хорошо. … мне 40... ну пожалуйста....
Следующая версия — шорохи дерева, ткани, дыхания, без единой ноты — вышла такой тихой, что «почти не слышны». Потом была доска из 32 записей с открытой библиотеки звуков (Kenney, CC0): щелчки, карты, книги, защёлки. «звуки все пока не очень… мне кажется ты их как-то на скорую руку сделал. можешь вложить в них душу?» Потом агент стал делать звуки под каждую вещь, и Павел поправил: «ты делаешь звуки под частные случаи. а нам нужны общие звуки :)». Так звуки стали ролями: касание, шаг сделан, мимо, срыв, опасность, завершение, проигрыш — и отдельно звуки процессов, которые длятся, пока длится жест: налив, движение, напряжение, время.
В 14:38 — разбор новой доски:
> хорошие звуки 1 2 3 4 8 15 22 25 26.... но..... все какие-то глуховатые..... а процессы ни один не понравился. … ну не этот аккорд до-мажор из супермарио! не тамагочи! не тетрис! какой-нибудь органный звук что ли красивый. … и невысокие, невысокие звуки.
Ответом стали шесть тональных «семейств» в низком и среднем регистре: орган, фисгармония, электропиано, поющая чаша, виолончель и хор на «у». Павел отметил сердечками 31 звук, а через несколько минут предложил, из чего строить грамматику звука:
> можешь делать detnue / разницу резонансов когда чтото нехорошее и наоборот in tune когда хорошее. только пожалуйста без мажорных минорных аккордов. можешь юзать какие-то необычные. aug? maj7? dim7? :) … квинты тоже ок. для большинства ситуаций квинты классно.
И сразу: «dim7 / aug хороши потому что под многие тональности подойдут, кстати. :)» Расстройку в итоге заменили другим: всё звучит в чистом строе, но «хорошо» — открыто и устойчиво (квинта, кварта, октава, нона), а «нехорошо» — неустойчиво (тритон, увеличенный, уменьшённый септаккорд). Мелодий нет вовсе.
Назавтра появилась тональность. Музыку сцен сочиняет модель Lyria, и ей можно назвать тональность — пару «мажор и его параллельный минор». Теперь тональность задаёт мир: «Алые паруса» — ре, «Отклонение от нормы» — до, «Ашеры» — ля. Игра сообщает её языку, и все звуки мини-игр строятся от тоники мира: отклик звучит с музыкой сцены в лад, а не поперёк.
Последний штрих — 15 октября:
> послушал звуки. неплохо! добавь или замени несколько "успешных" или когда всё идёт хорошо. попробуй оставить их без терции, хотя можешь где-то и сделать. может арпеджио. может ну типа классно, спокойное классно. игра алые паруса вот помоему когда кораблик собрался в первой игре сама делает какой-то звук, послушаешь? в общем чутьчуть добавь звукам хорошие и плохие оттенки, в мини-играх это важно.
Агент «послушал» кораблик так, как умеет, — прочитал по коду, из каких нот он звучит, — и сделал звукам оттенки: новое семейство колокола, ноты по одной, с вдохом хора под ними. Хорошее теперь поднимается и звенит дальше, плохое сникает вниз. Из нескольких кандидатов Павел выбрал свои, и они встали на роли. Через двенадцать минут пришло:
> мне твои кандидаты очень нравятся. всё, используем их. чудесно. агент правильно уловил суть. всё, отличные звуки.
15 октября на язык перевели игры. Первыми — «Алые паруса»: все одиннадцать мини-игр, без своих кнопок и подсказок. В «За корабликом» Ассоль бежит вдоль ручья за игрушечной яхтой, пока держишь палец. Павел зажал — и ничего:
> в алых парусах я вот немного побежал, отпустил, и что? на экране кликаю держу ничего не происходит. вернее есть щёлк появляется кружочек, но сцена не движется.
Тестер ошибку не повторил: у него Ассоль бежала. Нашло её чтение кода: игра помнила, какое значение «бега» уже отправила сцене, и второй раз его не слала. Отпустил и зажал снова — сцена так и не узнавала. Теперь игра сверяется с тем, что реально стоит в сцене.
Перевод выбора на язык сначала сделал выбор «в одно касание». Павел: «это очень плохо. раньше было так — кликаем на вещь, видим меню. и иногда в меню один пункт. и его надо эксплицитно нажать. почему нельзя оставить так как было?» Вернули: касание вещи раскрывает лепестки со словами, даже если слово одно.
В «Отклонении от нормы» в мини-игре «Тише, кони» кольца висели над пустой лощиной: коней закрыли гряда и туман. Коней передвинули — кольца сели им на головы.
Мини-игры теперь говорят на одном языке во всех трёх играх. Вещь, которую можно тронуть, светится и носит кольцо. Как её трогать — показывает призрачный палец, если игрок замешкался. Плашка вверху по центру одной фразой говорит, что происходит, — так, как сказал бы автор книги, — а полоса под ней — сколько осталось и как идёт. Звук отвечает каждому касанию в тональности мира: хорошее — чисто, нехорошее — неустойчиво. И если всё-таки что-то сломалось, внизу справа есть ⏭: пропущенная мини-игра оставляет тот же след, что и сыгранная.
Как сами игры делались, мы рассказали отдельно: [Отклонение от нормы](/stories/chrysalids), [Падение дома Ашеров](/stories/fall-of-the-house-of-usher).