Toadally Fair - как мы делали на GMTK Jam игру, в которой можно лизать своего босса, чтобы получить повышение

26 июля были официально опубликованы результаты GMTK Jam 2022, самого большого игрового джема в истории itch.io. Наша игра Toadally Fair заняла в общем рейтинге 58-е место из 6165 участников, и мы в абсолютном восторге, что смогли попасть и в топ-100, и в топ 1%, и в видео-нарезку в начале видео Марка Брауна.

<i>Это мы!</i>
Это мы!

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

Команда

Команда состояла из 7 человек:

  • Геймдизайнер (я)
  • 2 разработчика
  • 2 художника
  • Композитор
  • Мальчик на побегушках

Команда вышла мульти-национальная - Украина, Россия, Болгария и Германия. Главного разработчика и композитора мы нашли через Team Finder - замечательный инструмент, который команда GMTK Jam выкатывает перед каждым джемом, и, к сожалению, закрывает позже. Очень удобный сайт, на котором можно и вступить в чужую команду, и набрать себе недостающих специалистов, и всё это с интеграцией с Discord, где ты в один клик сразу пишешь автору объявления. Все остальные участники команды - старые друзья, многие уже раньше участвовали в джемах вместе.

Подготовка

Джем начинался в пятницу в 20:00 МСК. Финальный состав команды мы собрали уже в четверг, и у меня было время подготовить всё необходимое для старта. Сюда входило:

  • Discord-сервер для участников, с ролями и отдельными каналами для разработчиков, художников, и одним общим каналом. Языком общения выбрали английский, чтобы не смущать не-русскоязычных членов команды долгими обсуждениями на русском;
  • Miro-доска для брейншторминга, референсов и визуального дизайна;
  • Unity (сошлись на версии 2021.3.4f1) и репозиторий для проекта;
  • План разработки - не буду скидывать его целиком, но в целом это приблизительная разбивка по времени, когда нужно срезы игры, чтобы быть уверенными, что мы успеваем всё сделать.

Брейншторминг

Тему джема раскрыли одновременно с его началом, в пятницу в 20:00. Тема была Roll of the Dice - тема хорошая, с большим простором для фантазии, хотя Марк Браун в своём джем-постмортеме на Patreon признался, что выбирать основанную на рандоме тему на джем было не лучшим решением, потому что дизайнить рандом очень сложно.

Мы назначили общий звонок в Discord на 21:00, чтобы дать сначала всем время накидать идей в Miro.

Toadally Fair - как мы делали на GMTK Jam игру, в которой можно лизать своего босса, чтобы получить повышение
Toadally Fair - как мы делали на GMTK Jam игру, в которой можно лизать своего босса, чтобы получить повышение
<i>Miro - Дикий Запад для идей</i>
Miro - Дикий Запад для идей

На брейншторме каждый быстро представил свои идеи. Вот примеры того, что мы забраковали:

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

Участники геймджемов часто повторяют один и тот же совет - берите свою первую идею и работайте с ней, чаще всего она оказывается самой лучшей. Так вышло и с нами.

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

Так мы приходим к финальной идее:

Игрок бросает кубики с действиями и объектами на них, и составляет из них действия, с помощью которых должен пройти один день жизни, разбитый на три уровня - приготовить завтрак, убедить босса поднять тебе зарплату и хорошо провести свидание с девушкой. Игрок проиграет, если будет вести себя слишком странно.

<i>Наши наброски ещё до брейншторма. В игровых ассоциациях: <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fstore.steampowered.com%2Fapp%2F224480%2FOctodad_Dadliest_Catch%2F&postId=1286983" rel="nofollow noreferrer noopener" target="_blank">Octodad</a>, <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fstore.steampowered.com%2Fapp%2F736260%2FBaba_Is_You%2F&postId=1286983" rel="nofollow noreferrer noopener" target="_blank">Baba Is You</a> и <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fstore.steampowered.com%2Fapp%2F354240%2FPlease_Dont_Touch_Anything%2F&postId=1286983" rel="nofollow noreferrer noopener" target="_blank">Please, Don't Touch Anything</a>.</i>
Наши наброски ещё до брейншторма. В игровых ассоциациях: OctodadBaba Is You и Please, Don't Touch Anything.

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

<i>Удачи разобрать что-то, когда семь человек одновременно рисуют на экране :D</i>
Удачи разобрать что-то, когда семь человек одновременно рисуют на экране :D

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

Разработка - суббота

К нашему первому звонку в субботу в 11:00 у нас был готов блокаут, набор механик и выбран художественный стиль. Где-то в это же время мы передали композитору список всего, что нам понадобится - звуки кубиков, реакции босса и две музыкальные темы.

<i>Первый блокаут в Unity</i>
Первый блокаут в Unity

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

<i>Гугл-таблицы!</i>
Гугл-таблицы!

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

<i>Работа кипит</i>
Работа кипит

Где-то в это же время мы добавляем в проект единственные два ассета, которые мы используем в этом джеме - Text Animator For Unity для эффектов на текст и DoTween для твининга. Если что, официальные правила GMTK Jam разрешают использовать ассеты и предварительно написанный код.

К второму общему звонку в 18:00 у нас уже есть графика офиса, визуализация кубов, способностей и официальный шрифт.

<i>Блокаут v2</i>
Блокаут v2

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

Блокаут v3
Блокаут v3

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

Разработка - воскресенье

В воскресенье утром, за двадцать минут до намеченного общего звонка в 12:00, я замечаю коммит с странной подписью:

<i>Кнопки в инвентаре теперь вызывают кубики???</i>
Кнопки в инвентаре теперь вызывают кубики???

Это совсем не то поведение, которое я ожидал - кубики должны просто выкидываться все вместе, а инвентарь существует только для визуализации кубиков игрока и их возможных сторон. Я пишу разработчику, и оказывается, что мы неправильно поняли друг друга. Мы ещё раз подробно проговариваем игровой луп, и он принимается за работу, но драгоценное время, конечно, уже потеряно на miscommunication. Более того, днём главному разработчику нужно встретить родителей из аэропорта, а это тоже отнимает у нас минимум два часа.

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

<i>Пока разработчик заканчивает систему с кубиками, я играю в прототип прямо в гугл-таблицах. Это оказалось очень удобно и полезно - из этих партий я вынес несколько мыслей, которые вошли в финальную игру.</i>
Пока разработчик заканчивает систему с кубиками, я играю в прототип прямо в гугл-таблицах. Это оказалось очень удобно и полезно - из этих партий я вынес несколько мыслей, которые вошли в финальную игру.

Здесь же на меня сваливается большое количество ручной работы - нужно в Unity заполнить руками все возможные комбинации кубиков, а это 6х24 комбинаций.

<i>А каждая комбинация это текст действия, изменение характеристик, реакция босса, реплика босса и иногда румянец на объектах</i>
А каждая комбинация это текст действия, изменение характеристик, реакция босса, реплика босса и иногда румянец на объектах

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

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

Toadally Fair - как мы делали на GMTK Jam игру, в которой можно лизать своего босса, чтобы получить повышение

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

Первый билд мы заливаем за пять часов до дедлайна - что бы ни пошло не так, у нас будет опубликовано хоть что-нибудь играбельное. В последствии мы собираем и заливаем ещё шесть билдов - поэтому финальная версия и называется Toadally Fair Win 0.7.

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

Продвижение

Вы думали что геймджем заканчивается вместе с дедлайном? А вот фиг там!

Чтобы вашу игру заметили и оценили среди 6 тысяч участников, нужно приложить усилия. Можно, конечно, пойти лёгким путём и оставить всё на органические просмотры от авто-распределения на itch.io, но во-первых это ненадёжно, а во-вторых это путь слабых духом.

Гифка, которую я набросал в Unity в четыре часа ночи, чтобы продвигать ей игру в среду

Всю следующую неделю я пишу посты в LinkedIn, Reddit, Twitter, слежу за топиками на DTF, три раза в день по таймеру делаю пост в дискорде GMTK Jam, обмениваюсь обзорами с другими игроками и, самое главное, ношу игру по стримам на Twitch.

Стримы на Twitch оказались, вне всякого сомнения, самым полезным и приятным способом продвижения игры. После каждого большого джема на Twitch появляются стримеры, которые играют в предложенные игры - в этот раз таких было около двадцати. Стримеры это:

  • Плейтесты, которые вы можете увидеть вживую;
  • Поставленные на стриме оценки, по которым можно оценить успешность игры;
  • Взаимодействие с чатом и увеличение аудитории.
<i>Самое лучшее ощущение во всём джеме - видеть, как зрители узнают игру ещё до того, как стример её запустит. Второе лучшее - когда тебе на стриме ставят 5-5-5</i>
Самое лучшее ощущение во всём джеме - видеть, как зрители узнают игру ещё до того, как стример её запустит. Второе лучшее - когда тебе на стриме ставят 5-5-5

Возможно, вся история с гласностью не очень сильно влияет на результат джема, и может быть даже где-то участники с небольшим количеством отзывов могут обойти игру с большим количеством отзывов чисто за счёт удачных оценок, но в любом случае это очень интересный и полезный опыт. Кстати, медиана количества оценок на этом джеме была 14, а у Toadally Fair к концу джема было 83 оценки.

Некоторые примеры стримов с тайммарками:

А здесь даже с интервью! Правда, с текстовым.

Что пошло не так?

Конечно, основные проблемы были связаны с временными ограничениями. Мы планировали и не успели:

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

Другая проблема: языковой барьер. Игроки без знания английского не могут понять игру, и ставят ей низкие оценки. Когда я впервые увидел русскоязычного стримера, который поставил 3-3-3 просто потому что ничего не понял, я был в ужасе. 90 переходов по ссылке с DTF, которые мы получили накануне, из благословления превратились в проклятие, и я на всякий случай больше не носил игру на не-англоязычные стримы. Конечно, для органических просмотров и рекламных постов у нас не было никакого контроля над уровнем английского языка у игроков.

Третья проблема: высокая конкуренция и большое количество участников. Посмотреть шесть тысяч игр просто физически невозможно. Из топ-100 игр я до объявления результатов играл только в 6, и совершенно не знал своих соперников. Конечно, эта информация вряд ли бы как-нибудь повлияла на исход голосования, но было бы гораздо спокойнее знать, с кем ты соревнуешься, а не узнавать это в последний момент.

Как-то так. Исходом джема лично я очень доволен - это лучше любого моего предыдущего результата, мне искренне нравится получившаяся игра, я познакомился и поработал с двумя новыми замечательными людьми, и увидел очень много стримеров, которым искренне нравилась игра. Топ-100 и топ-1% это прекрасный результат, большое спасибо всей команде и всем кто играл и оценивал Toadally Fair.

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

Где-то здесь, наверное, должны быть ссылки на вещи, которые я продвигаю. Давайте добавим сюда ссылку на Toadally Fair:

Хоть джем и закончен, но мы будем рады любому фидбеку, любым комментариям и просто если вам будет весело!

А ещё посмотрите (и добавьте в вишлист!) игру, над которой я сейчас работаю в качестве второго геймдизайнера в замечательной компании DO MY BEST - The Bookwalker:

Спасибо всем! Это мой первый (и безобразно длинный) пост на DTF, и я рад буду всем комментариям и отвечу на любые вопросы. Участвуйте в геймджемах, это круто, весело и невероятно полезно!

7272
12 комментариев

Гачи-мужики в идеях, это правильные и светлые идеи в футуристическое будущее которое мы заслужили

5
Ответить

Собеседование в gym из гача фраз. Это была бы победа!

2
Ответить

Это очень круто! Поздравляю. 🍻 После прочтения я даже задумалась над тем, не податься ли мне в геймдев. Хотя, если честно, не представляю, чем бы я занималась. 😅

4
Ответить

если честно, не представляю, чем бы я занималась

В смысле? Ребята «лизанием босса» занялись, и ты смогла бы ;)

1
Ответить
4
Ответить

а в каком виде эти 6х24 комбинаций задавались в юнити? или гугл-табличек прям данные импортировались?

Ответить

Вот такими конструкциями через SerializedObject в юнити. Импорт из гугл-табличек или каких-нибудь json-ов - тоже не для джема задача, по крайней мере если у разработчика не налажен этот процесс в обычной работе.

2
Ответить