Сделать свою игру

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

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

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

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

Сцена живёт и сама по себе. Её состояние — рассвет или ночь, дождь или ясно, кто где стоит — меняется ключами, и одна и та же сцена может пройти за минуту от сумерек до темноты. Сцену можно показать и без всякой игры, просто как живую картину: такие наброски тоже есть на moood.me.

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

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

Мини-игры сначала были у каждой игры свои, и игрок каждый раз заново гадал, что тут нажимать. Потом из жалоб и пожеланий вырос общий язык: метка на предмете, жест рукой, отклик сцены, плашка вверху — и звук, который подсказывает, получилось или нет. Подробно — в статье [«Язык мини-игр»](/stories/minigame-language). Пользоваться им не обязательно, но он экономит много сил.

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

Писать удобно вместе с ИИ-агентом — Claude Code, ChatGPT, Gemini, любым. Для этого есть открытый репозиторий [moood](https://github.com/moood-me/moood): движки, страница сцены и страница игры, язык мини-игр, проверка и маленький плеер, чтобы играть у себя. Мы клали туда всё по одному правилу: если вещь нужна, чтобы сделать игру и сыграть в неё, — она там. И документацию, написанную так, чтобы по ней мог работать агент: что важно в сцене и чего не делать никогда, как ставить свет и людей, как устроена игра, как писать сценарий, если он вам нужен.

А чтобы агенту было на что посмотреть, мы открыли и свои работы — репозитории [works](https://github.com/moood-me?q=works). Там миры и игры с moood.me с кодом сцен и историей того, как их делали, площадка мини-игр, где каждый жест можно потрогать отдельно, и ранние маленькие миры — пробы того, какими бывают сцены. Берите что пригодится.

Любая вещь — мир, сцена, игра, статья — называется одной строкой: `ваш-репозиторий@ветка:папка`. Ветку можно заменить коммитом. Так её открывают в студии, на неё ссылаются из другой игры, её дают агенту. Игра может стоять и на чужом мире — по такой ссылке.

Сначала было сложнее: у каждого мира были свои служебные ветки под каждый сайт, куда он выкатывался. Агентам так было привычно. Павел посмотрел и сказал: «Как-то когнитивно сложно это)… А без веток — никак?)» — и попросил подумать не о том, как поправить, а о том, как сделать просто. Оказалось, кроме git, ничего и не нужно: ваши ветки — это и есть ваши черновики.

У себя — в плеере из moood: он запускается над вашей папкой, и стоит сохранить файл, как страница обновится сама, а игра продолжится с того же места. Или в студии: там видна любая ветка сразу после пуша, на компьютере и на телефоне. Поправили что-то, пока играли, — студия предложит продолжить на новой версии, не начиная заново.

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

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

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

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

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

**Начать без кода.** В студии есть художник — ИИ, которому можно просто написать: «пусть будет вечер, и фонарь на причале горит». Он правит сцену сам, и каждое изменение сразу видно. Он для того и есть, чтобы мир можно было начать прямо в браузере, без редактора и без агента у себя. Хоть просто ради интереса: сделать пару сцен и посмотреть, что выйдет.

**Не тормозить.** Живая сцена должна идти плавно и на слабом ноутбуке, и на телефоне. Студия замеряет её на разных машинах и показывает, где она не укладывается. Почему это для нас так важно — в статье [«Почему тормозило»](/stories/why-it-was-slow).

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

Готовую игру можно попросить опубликовать на moood.me. Перед показом её посмотрят, и она встанет на сайте рядом с остальными — с картинками сцен, голосами и музыкой.

А можно и без нас. Страницы moood покажет любой сайт или приложение, которое отвечает на их несколько простых запросов. Можно взять движок и сделать на нём что-то совсем своё.

Мы старались, чтобы в студии не терялись. Она устроена как портал: слева сервисы — репозитории, миры, игры, статьи и мастерская: рендеры, замеры, речь, музыка, движения, художник, проверки, публикации. Сверху поиск сразу по всему: набрали «фонарь» — и видно и игру, и статью, и сцену. Нужное отмечается звёздочкой. Есть тёмная тема и телефон, а сама студия говорит на тех же двенадцати языках.

Ловили и мелочи. Нажимаешь пункт меню, а ответа нет — то ли нажалось, то ли нет. Теперь пункт подсвечивается сразу, а если страница грузится дольше мгновения, появляется «Загружается…». Если быстрее — ничего не мигает.

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

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

Доступ в студию даёт Павел. Напишите ему в [Telegram](https://t.me/pavel_zhur) или на [[email protected]](mailto:[email protected]) — он откроет, просто так. А если захочется помочь самому moood — движку, страницам, документации, — он будет рад: issues и pull requests в [moood](https://github.com/moood-me/moood) открыты для всех.