Как мы делали The Waystone Circle - игру на GMTK jam 2025. Девлог и постмортем
Вроде бы, дтф когда-то был про игры, так что поделюсь своей историей, как мы делали небольшую игру на джем.
Команда состояла из 3 человек:
- ChipTune — идея, геймдизайн, баланс;
- AlexSilent — арт;
- и я — геймдизайн, код и музыка.
Началось всё совершенно случайно: мне попался на глаза анонс джема, я даже уже не помню где. Я закинул идею поучаствовать нескольким людям, кто-то даже откликнулся. Не сказать, что я был готов участвовать, скорее просто нравится пред-джемовая суета. Так что после отправки сообщений я пошел за пивком (Ballmer peak is real), ни на что особо не рассчитывая. Но пара человек все-таки откликнулась. И тут все завертелось…
День 0 — идея
Тема на джеме — loop. Почти сразу после анонса мы с Чиптюном созвонились и стали штормить идеи. Было много разного, но остановились на том, что в центре должна быть идея «перерождения», что каждый новый цикл основывается на том, что происходило в прошлом. За референсы были взяты: Loop Hero, Reigns и Kingdom. Чуть позже, в этот список добавится Фрирен.
Остановились на том, что персонаж идет через королевство, собирает ресурсы, бьет монстров и отстраивает портал, чтобы перейти куда-то дальше.
Вообще, идей было довольно много, из самых интересных:
— мана не появляется из воздуха, персонаж должен выкачивать ману из земли и этот процесс будет корраптить этот сегмент. Это вообще корневая механика из другой моей игры, которую я когда-нибудь сделаю
— очень хотелось применить Dual Purpose Design, поэтому каждая либо использовалась в двух местах, либо шла под нож.
— случайные события. Во время путешествия игрок мог получить случайное событие, которое бы давало апгрейд. Чуть позже это и принесло в дизайн нотки из Фрирен. Я хотел заменить «души» на «воспоминания» и сделать чуть больше эмоциональной привязки, и случайные события хорошо бы с этим сочетались. Но тут нужен хороший писатель…
— смена сезонов года. Каждый сезон давал бы свои дебаффы, ломал бы некоторые здания и спавнил сезонных врагов.
Все это обсуждение заняло часа 2, после чего все отправились спать.
День 1 — основы
Спать я особо не смог, очень хотелось что-то поделать. Поэтому спустя 4 часа сна, я приступил к написанию диздока (~4 часа).
Даже такой примитивный диздок сильно помог структурировать мысли и сделать план работ, чтобы успеть в короткий срок. С этим же диздоком меня нашел Алекс. Я закинул ему список ассетов, которые нужны были в первую очередь и палитру, и перешел к коду.
В первую очередь была система передвижения по таймеру, и началось все вот с такого:
Спустя пару часов, Алекс вернулся с первыми ассетами, которые я добавил в игру и сразу пошел постить гифки в разные места:
И первый фидбек неплохо так мотивировал:
Но отсутствие сна ночью не дало спокойно поработать, поэтому я в обед пошел спать (да, я знаю, режим сна у меня ппц, но я безработный, поэтому могу себе позволить).
Позже в этот день удалось сделать полностью передвижение, работу с картой и сбор ресурсов, после чего я лег спать на 12 часов.
День 2 — строения, враги и условие поражения
Второй день был очень насыщенным: были сделаны механики постройки, битв, был первый набросок баланса (поняли, сколько сегментов хотим под ожидаемое время игры), игру уже можно было проиграть.
Больше всего было кода, но могу отметить, как я Алексу описывал эффекты:
Всего в этот день я провел над кодом порядка 14 часов. Отвлекался только на покушать и покурить. А спать опять лег на 4 часа xdd
День 3 — текстовые описания, музыка, vfx, repel и обучающие сегменты
К третьему дню, базовые вещи были почти сделаны. Поэтому у меня фокус был больше на полише, добавлении всяких фишечек и ожидании ассетов от Алекса. Так же, к обеду подоспел Чиптюн с первой версией баланса по ресурсам и врагам.
Из интересного — была механика пропуска врагов. Пройти через врагов можно 3 способами: побить врага магией огня, сдуть врага магией ветра, и впитать урон. Последние две опции оставляют врага на этой же клетке, и в следующий цикл игрок мог натолкнуться на эволюционировавшего врага. Так вот, возвращаясь к repel’у. Мне очень нравилась анимация атаки ветром в SMT IV, хотелось сделать что-то похожее. И вроде получилось, выглядит забавно (если вы конечно не пиксель арт пурист с криками «пиксели нельзя вращать!»):
Ах да, спал я 13 часов 😈
Последний день
День начался с того, что Алекс скинул вообще ВСЕ ассеты. Хорошее начало дня.
Первая половина была занята добавлением новых ассетов, новых врагов, новых зданий. Потом проход по балансу, что игра проходима. Потом какие-никакие звуки. В последние часы была добавлена основная механика рандомизации сегментов на смене сезонов и разрушение зданий. А дальше оказалось, что какая-то из новых механик ломает html билд xdd. И музыка не работает. И итч лежит. Да, релиз был не очень приятный, но не сказать, что это было неожиданно. Дедлайн продлили на час, что позволило нам добавить первый экран-менюшку, что поправило проблему с музыкой и успели убрать один из эффектов, потому что он крашил html версию, но не windows.
В итоге, все отправили и сейчас даже собираем положительные отзывы, чему я очень рад.
Постмортем
Это скорее микро постмортем, но все равно хотелось бы поделиться.
- Фокус на геймплее и контенте. Обычно я делаю только геймплей, сейчас же изначально поставил себе требование про быстрое добавление новых событий. Поэтому мой процесс выглядел примерно так: сначала добавить новую сущность максимально просто, если похожая сущность есть — то вынести условия в отдельные таблицы и генерализировать код, чтобы он принимал данные-описания. То есть, сначала добавляем здание, когда нужно добавить другой вид зданий — перерабытываем код, чтобы можно было отдать структурку (BUILDING_MILL, mill_requirements), и потом расширяем список.
- Помощь от других людей. Прошлые джемы я обычно участвовал в соло, так что участие в команде для меня в новинку. Ну и последние часы прошли намного менее стрессово, потому что на фоне был 4 часовой созвон с обсуждением, что делать с проблемами, так что никакая проблема не была страшна.
- Время для отдыха. Хоть у меня и были 14 часовые периоды работы, но они были так сказать «гармоничные» для меня. Если я чувствую, что просто не могу писать код, то надо пойти прогуляться, переключится на что-то физическое. У меня это были цветы, растущие на балконе.
- методика ABZ. Начинаем с A и Z: A — точка, где я сейчас нахожусь, Z — куда хочу прийти. Следующий шаг — это описать B, что нужно сделать, чтобы немного продвинуться из точки A в точку Z. У меня под эту методику отдельный документ, и это сильно помогает структурировать мысли и не скакать от одной вещи к другой.
И еще раз ссылка на игру:
А еще, зацените наши другие игры:
Frame Cat - платформер в стиле Comix Zone-панка
Crazy Cats vs Crazy Cyborgs - шмап в стиле... хз чего на самом деле.
А еще я ищу двух человек на ревшейр: кого-то, кто сможет постить видосики в ютуб (у меня ебейшая социальная тревога, даже этот пост писать - тряска); и помощника по коду, сейчас не хватает рук. Готов учить и прокачивать, было бы желание у самого человека.