Temporal Renaissance: или как мы в TWG участвовали
Остановись, мгновенье, ты прекрасно!
Так звучала тема геймджема, который проходил в феврале 23 года, где мы не просто приняли участие, но и показали себя крайне хорошо, выдав одну из лучших игр среди конкурсантов.
Во время конкурса, согласно правилам, в отличие от гаминатора каждый участник должен был вести дневник разработки показывая прогресс. Почти все написанное ниже — его расширенная версия. Я постарался подробно расписать разработку и подготовить визуальные материалы. Надеюсь вам будет интересно.
Скачать актуальную версию игры можно здесь: https://disk.yandex.ru/d/zSkf1-VGpdyo-A
Day 1
Я просыпаюсь с утра и вижу два примерно одинаковых сообщения от разных друзей с анонсом конкурса в канале 2ch в тележке. Имя ему Two Weeks Game. Мы о нем никогда не слышали, но он нас подкупил наличием аудитории, еще он к тому же с неплохим призовым фондом. Конкурс стартует уже сегодня, нужно лишь дождаться оглашения темы.
Не то чтобы у меня сейчас было время на конкурс, но, благо, он всего на две недели, а не на месяц, как обычно на Гаминаторе. Идей никаких, ждем тему. Наступает 3 часа дня по местному времени, и тема опубликована: «Остановись, мгновенье, ты прекрасно». Читаю дальше, и там стих, который, если честно, нас немного смутил, учитывая контекст происходящих в мире событий. И я уже хотел забить на конкурс, но, погуглив, оказалось, что этот стих — это концовка «Фауста». Это все меняет! Тот самый стих:
Лишь тот достоин жизни и свободы,
Кто каждый день за них идет на бой!
Всю жизнь в борьбе суровой, непрерывной
Дитя и муж, и старец пусть ведет,
Чтоб я увидел в блеске силы дивной
Свободный край, свободный мой народ!
Тогда сказал бы я: мгновенье!
Прекрасно ты, продлись, постой!
И не смело́ б веков теченье
Следа, оставленного мной!
В предчувствии минуты дивной той
Я высший миг вкушаю свой.
Дима предложил концепт с геймплейной механикой из «Ботвы». Представьте: у вас локация — разрушенный войной город, и есть альбом с довоенными фотографиями. Вам нужно искать ракурсы, места откуда фотографии были сделаны, после чего кусочек города бы восстанавливался. «Ага, идея как элемент геймплея прикольная» — сказал я. «А что мы будем основное время делать? Просто ходить? Ведь игровой процесс должен быть интересным.» Мы стали думать, идеи были разные: например, летать птицей, собирать всякое и иногда обращаться в человека и сверяться с ракурсом по фотке. Потом я вспомнил про прошлогодний хит «Neon White», который нам всем очень понравился. А ведь было бы прикольно с мувментом, как в «Неоновом белом», путешествовать по открытому миру между точками интереса. Эврика!
Day 2
Как всегда, когда сформирована идея и у тебя есть команда, нужно начинать препродакшен. Когда ты участвуешь один, весь диздок и набор референсов у тебя в голове, ты сразу можешь погружаться в работу. Работа в команде же требует донести видение до всех ее участников. Проснувшись с утра, я сел за написание дизайн-документа в Notion. Параллельно я генерировал концепты в Midjorney, чтобы они служили нам референсами.
После написания кидаю клич в наш чатик с приглашением поучаствовать. В итоге формирую основную команду из 4 человек: три программиста и два художника.
-Так это же 5 человек?
Просто в этот раз я четко решил, что мне нужно закреплять навыки в программировании, и наконец-то на геймджеме отвечать не только за графику/сборку в юнити/левелдизайн/сюжет/звук, но и непосредственно за геймплей (что повторил на свежем гаминаторе). Также я попросил своего друга Mark Slav помочь с озвучкой.
К вечеру я создал репозиторий на гите, доску с первыми задачками в трелло, после чего мы созвонились, обсудили все и приступили к работе. Я начал с первых ассетов, Дима с Валерой — с игровых систем.
Здесь будет много кадров с разработкой игры, но не будет кадров с кодом, и будет только то, что делал я. Также еще очень мало футажей с конца разработки, потому что там уже был жесткий кранч, и записывать работу я тупо забывал.
Касаемо визуального стиля. Две недели — это очень мало, поэтому было решено работать в лоуполи-стилистике с использованием палитры цветов вместо текстур. Такой стиль хоть и дешевит проект, но плюсы для прототипа явно перевешивают.
Название игры мы генерировали в ChatGPT, там же я в тот день сгенерировал и канву сюжета, прося нейронку писать дневники среднестатистического диктатора недалекого будущего. Потом мне лишь останется их порезать и чутка отредактировать.
Day 3
В этот день у меня были личные дела, поэтому я почти ничего не делал, за исключением пары ассетов и отправки тестового задания на озвучку. В голове также в свободные минуты продумывал лор и концепцию игрового мира.
Таймлапс моделирования летающего дрона
Дима же сделал первый вариант для контроллера персонажа и первую версию способности крюка кошки, который в нашей игре зовется энерго-крюком. Мы до этого делали на джемы две игры от первого лица, и каждый раз с мувментом были разные проблемы. В этот раз мы также начали делать его на charcontroller надеясь сделать лучше чем в прошлые попытки. Контейнер персонажа (в этот раз, как и в Метаинституте, мы решили true first person делать) пересобрали, чтобы возможность смотреть вверх/вниз ощущалась более правильно, чем в нашей прошлой игре. Первые пару дней даже болванкой была та же модель что и в Метаинституте.
Первая версия граплингхука
Day 4
На четвертый день я сделал тестовый уровень для отладки игрового процесса, а заодно и кучу ассетов. В этот день и пришло осознание, как я буду визуально восстанавливать игровой мир в конце игры (идею механики из «ботвы» мы все же оставили).
Диме не давался мувмент с крюком кошкой на char controller, поэтому он его полностью переписал под rigidbody, и если честно, стало работать еще хуже.
Во время бега герой пробегал сквозь стены и наклонные поверхности, можно было двигаться в стену и висеть в воздухе. Использование граплингхука делало персонажа совершенно неуправляемым
В этот день я сделал первый вариант модели главной героини и нагенерил картинки, из которых сверстал игровой логотип.
Day 5
На следующее утро я засел переделывать мувмент. Меня категорически не устраивало, как он работал на тот момент. Я чувствовал, что если базовые механики не будут работать в ближайший день, то разработку можно смело сворачивать. Не обошлось без проблем, но за полдня я переделал контроллер персонажа, вернув его с rigidbody на charcontroller, и сделал адекватно работающим. Это был успех. Теперь персонаж двигался, прыгал и цеплялся хуком так, как я хотел. Пресижн-платформинг в стиле неонвайта.
Переделанный мувмент
Я все же подумываю, что стоит добавить приколдесов в чарконтроллер в будущем, но на данном этапе все как нужно. Диме же я расписал подробное ТЗ, как сделать две оставшиеся способности: «блинк» на манер аналогичной способности из Dishonored и «планирование», не в плане дел, а как белка летяга. У нас же мем в команде появился на тему: «планируй свое падение»!
Day 6
Время до сдачи демоверсии поджимало, но на 6-й день уже было завершено 80% игровых механик, а именно все способности, мувмент и взаимодействие с активными элементами в мире, такие как кнопки, механизмы и кристаллы.
Также в этот день мы работали над игровым интерфейсом. Я проработал, как делать анимации персонажа, чтобы игрок не испытывал дискомфорт от дерганья камеры. В текущей реализации камера является дочерним элементом скелета самого персонажа.
Еще один важный факт — это подача сюжета и игровой сценарий. Разве есть отличия? Думаю, что такое сюжет и его подача объяснять не нужно, а игровой сценарий или сценарий прохождения — это планирование действий игрока в игре, то есть что он должен сделать, куда пойти, до чего догадаться, чему научиться. Это звучит крайне просто, но на деле, когда ты потом смотришь, как люди играют в твою игру, невозможно не кричать: «ДА КАК ТАК ТО, Б****, ТЫ ЖЕ ВОТ СЮДА ПОСМОТРЕЛ, НУ КАК ТЫ НЕ ВИДИШЬ ТО А? НУ НЕ ТУПИ ИДИ СЮДА, АААААААА».
Демо потихоньку собиралось, и если раньше я думал просто пустить игроков побегать по заготовкам уровней, то собирая демо, все же решил, что локация структурно должна быть приближена к финальному началу игры. Однако визуально мы еще тогда ничего толком не делали.
С помощью таких дронов героиня в полете может подзаряжать способность «планирование»
Day 7
Уже в начале разработки я понял, что хочу, чтобы все умения кастовались руками, как магия в стиле Ghostwire: Tokyo. Времени придумывать и анимировать прям суперкруто, разумеется, не было, но результат вышел годным. Однако в угоду баланса в итоге пришлось ускорить все анимации, что немного сказалось на их визуале. Чтобы проанимировать хорошо, я записал референсы с помощью камеры. Очень грустно, что у меня не широкоугольный объектив, и чтобы руки в камере было видно, мне пришлось чуть ли не врастись грудью в штатив. Было много разных вариантов и попыток, отобрав лучшие я смонтировал небольшие видео, которые использовал за референс.
В UI мы почти доделали наш динамический прицел, скетчи я для него рисовал в тетради, и доделали главное меню. Но тут особо ничего интересного.
Day 8
День, когда нужно было сдать демо. И разумеется, весь день мы потратили на его сборку. К обучению мы тогда еще не приступали, поэтому я просто в стиле DMC от британцев начал писать на стенах. К вечеру демо было готово и загружено в облака.
На геймджемах помимо участников есть стримеры, которые стримят наши поделки. Как же я не люблю их смотреть! Обычно этим занимается Дима, потому что никогда не знаешь, кто и с каким отношением это будет делать. Меня напрягает и триггерит даже не то, что моя игра кому-то не понравится, а скорее отношение некоторых стримеров к играм на конкурсах. Особенно, когда они ведут себя очень надменно, типа эксперты, а ты прям видишь, что он ему играть во все игры с джема тупо не интересно. Спрашивается: «а зачем ты стримишь, братан?» Короче у меня с таких горит. Поэтому я старался не смотреть, но Дима мне периодически пересказывал какие-то моменты. Поорал, когда один человек сказал на демку, что «ну это чувак первый раз игру делает, молодец конечно».
Моделинг колеса обозрения
Day 9
Как же было лень что-то делать после первого дедлайна, прям как будто уже игру доделал, она получилась без багов и уже в Steam релизнул. Зато Валера много играл в демку и записал спидран. Когда я смотрел, то прямо в голос кричал, настолько это было круто: «Так можно было что-ли? Да тут не то надо, а ты так быстрее прошел… Я это за 5 минут прохожу, а ты…» кайф.
Тот самый спидран
С помощью GPT-чата в этот день еще генерировал сюжет и ручками редактировал его.
Day 10
Не время отдыхать, еще много работы, почти столько же, сколько уже проделано, и даже больше. Я начал прототипировать уровни с помощью пробилда в Unity. Это удобно и в плане метрик, и можно экспортировать меши чтобы править их в Blender. За этот день я сделал прототип уровня в музее и половину уровня «небоскребы».
Также нужно было допиливать графику и приводить ее к финальному состоянию. С точки зрения геймплея нужно было много править, часть выявили на тестах демки, часть знали заранее. С этого дня описывать происходящее довольно сложно, ибо «несущие стены» проекта выставлены, и теперь ооочень много мелких задач, которые сложно документировать и которые забываются сразу после их выполнения. Из важных системных вещей, сделанной в этот день, это система сохранения/загрузок. Было важно дать возможность игроку загружаться к последнему чекпоинту моментально, чтобы не руинить темп прохождения. Но мучил вопрос: откатывать ли прогресс или нет. В итоге решили, что все кнопки/механизмы/кристаллы откатываются, но собранные мгновения и сомнения остаются. Благо рядом с сюжетными предметами всегда чекпоинт, поэтому нельзя просто взять такой предмет и вернуться на прошлый чекпоинт сломав сценарий прохождения.
Кусочек ранней версии уровня «небоскребы»
Day 11−12−13
Начали кранчить. Я перестал подробно вести дневник, ибо времени совершенно не хватало. За эти дни мы переделали/доделали/наладили очень много всего. Почти сделали все уровни и даже собрали из них единую open world локацию. Визуал стал обрастать деталями, а игровой процесс звуками. Одна из крутых вещей это шейдер, который сигнализирует о том, что за поверхность нельзя зацепиться. Озвучка была полностью готова. Диктатора озвучил МаркСлав, а голос ИИ ассистента с космического корабля подарил ИИ от Яндекса Алиса, голос которой я сильно обработал, сделав его похожим на голос GLaDOS из Portal. Помимо открытого мира собрал локацию космического корабля, на котором главная героиня прилетает на эту планету. Я решил, что цвет «инопланетного» это микс золота с черным. В таких тонах выполнен логотип игры, сам корабль, хронокапсулы-песочные часы, они же чекпоинты, и в последствии сама героиня. Этот стиль должен был быть чужеродным миру, в который она прибыла. К сожалению, не все это поняли, поиграв в финальную версию.
Моделирование интерьера корабля
Самое трудное было найти подходящую музыку. Благо, по условиям конкурса, мы не были стеснены авторским правом на музыку и могли брать любую. Тогда я переслушал большое количество саундтреков к японским играм и почему-то остановился на NieR: Automata, но треки, которые я выбрал, не очень подходили под динамичный геймплей. Дима нашел еще музыку, которую мы потом использовали на локации «небоскребы».
Day 14
День сдачи проекта, а мы ничего не успели доделать, и ожидался очень плотный кранч на весь день с большим количеством компромиссов в реализации тех или иных идей. Но к счастью на сайте конкурса появилась новость, что он продлевается на несколько дней. Без этого продления вряд ли игра попала бы в топ. Я переделал первый уровень, доработал графику, начал расставлять ассеты, которые делал Рома. В открытом мире очень важно, чтобы игроки понимали, куда нужно идти, и это совсем не тривиальная задача, если не хочешь указывать маркером, куда конкретно нужно идти. Времени было мало, поэтому я решил воспользоваться «хлебными крошками» в виде зарядов к крюку и разбрасывал их по всему миру, указывая маршрут игрокам, что правда не для всех оказалось достаточным. Еще я добавил на TAB, помимо отображения прогресса/сбора кусочков фотографии, еще и столбы света, которые видно с любой точки карты. Это немного облегчило навигацию, но не читающие туториал люди в итоге все равно тупили.
Я сократил количество мгновений, которые в игре являются обязательными предметами и аудиологами одновременно. История от чего немного потеряла деталей, стала более читаемой заранее и более прямолинейной. Но я понимал, что не успею сделать нужное количество секций для прохождения, чтобы в конце каждой из них игрока ждал сюжетный предмет. Было готово три большие секции: завод робототехники в начале, небоскребы и финальный музей. Нужно было сделать еще две. Также в игре появилась начальная катсценка в меню, «открытие криокамеры», а также телепорт на планету.
Превиз катсцены в меню в блендере
Время кранча
Оставалось еще пару дней, а задачек как будто не убавилось. Я вообще планировал закончить игру в середине недели, а потом тестить и править, но как и всегда времени не хватило, поэтому тестирование пришлось отложить на потом.
С катсценкой восстановления мира было не так просто. Казалось бы, разрушать статую это легко, а ронять колесо обозрения не очень. Оказалось наоборот. Я поломал статую на осколки, запек физическую анимацию взрыва, вроде все нормально, но в Unity во время проигрывания анимации сыпятся ошибки и игра ломается. WTF? Оказалось, что некоторые коллизии в кусочках статуи были проблемными, и такие кусочки вылетали из нее со скоростью света и улетали очень далеко, на тысячи километров. Unity говорит: «У вас слишком большой объект для анимации, удалите его». Пришлось вручную искать эти злосчастные осколки и удалять их из анимации.
«Восстановление мира»
Я хотел две концовки и соответственно две финальные кат-сцены. Их делать долго и сложно, поэтому я решил собрать их в минимализме и без анимаций, чтобы двигалась только камера. После того, как я все проанимировал в Blender, я не смог нормально вывести анимацию в Unity, потому что когда камера резко меняла кадр, происходили разные неприятные подергивания. В итоге я решил не париться и просто отрендерил секвенцию кадров и вставил их в Unity как видеоролик. ПРЕРЕНДЕР, как в старые добрые нулевые.
Две дополнительные секции на прохождение я делал уже как можно быстрее и проще.
Воскресенье — день сдачи проекта, а мы еще не тестировали полноценную версию игры. Часть вещей еще не была реализована и доделана, но мне важно было протестировать как сложность, так и левел-дизайн. Помимо участников команды, я отправил билд еще нескольким людям, которые точно могли в течение пары часов поиграть. А также попросил записать для меня прохождение, ибо на созвон у меня не было времени. К сожалению, лишь один из 4 человек смог пройти ту версию, остальные же просто заблудились в этом мире и не поняли, что дальше делать. К сожалению, исправлять уже времени почти не было, сделал, что смог.
Часики тикают
До сдачи проекта остается несколько часов, один из которых я потратил на залипание в присланные мне прохождения. После я пытаюсь доделать, что успеваю. Остается час. Валера параллельно делает локализацию, и тут нам нужно слить две ветки в гите, возникает конфликт в файлах. Я быстро пишу Диме, а так как времени остается мало, начинаю волноваться. Я в гите не совсем профан, но Дима с ним работает чаще и знает его намного лучше. Мы созваниваемся, устраняем проблему. 40 минут до окончания. Я ставлю проект на билдинг, около 5 минут уходит на это, запускаю. И тут оказывается, что у нас сломалось меню. Я пишу Валере, Валера чинит. Времени все меньше, я опять собираю проект, опять нахожу косяк, правлю уже сам, билдинг… 10 минут до сдачи проекта, я уже заполнил заявку на сайте и вставил ссылку на тестовый билд, который отправлял друзьям днем, на всякий случай, вдруг финальный не успеем доделать. В итоге мы сдаем проект за 3 минуты до дедлайна и выдыхаем. Это был очень потный день.
На следующий день я отдыхаю, чувствую себя хорошо и умиротворенно, пока Дима не кидает фрагмент одного стрима, с которого я сгорел. Чувак запустил игру в оконном режиме в разрешении 600 на 600, от чего весь интерфейс сломался. «А что это кнопки пропустить тутор нету, а?». Снял в своей импровизированной таблице подсчета с нас очков за «заготовку» в виде логотипа нашей команды. Лол. Обвинил меня в плагиате логотипа с моего же ютуб канала. Лол#2. Собрал кучу багов в самом начале игры, которые мы позже не смогли повторить, и не пройдя обучения, дропнул. Очень хотел написать ему гневный коммент на эмоциях, но чувака спасло то, что у меня интернет отключили, когда я уже хотел его отправить.
В итоге весь день чинил игру: пересобрал интерфейс, починил выход в меню после прохождения игры (курсор не отображался), поправил ряд багов с хуком. Добавил ассетов, которые сделал Рома, но я не успел использовать. Переделал один этап на небоскребах, ибо там было не очень очевидно, что делать. Сделал чуть более очевидно. И много чего еще. Хотел зарелизить версию 1.1 еще вечером, но Валера тестил крайне упорно и нашел еще тонну багов, которые я чинил еще все следующее утро. После чего я написал патчноут и выложил новую версию в Discord конкурса, на двач и в свои соц. сеточки.
Когда мы делали Метаинститут и отправляли демо на тестирование, оно попало в руки одному действующему геймдизайнеру, который прям «эксперт». Много критики там было, как и той, с чем я согласен, так и с чем не согласен. Но один момент я прям запомнил: «в обучении нужно, чтобы высвечивалось окно, которое нужно закрыть в ручную, тогда игрок всяко прочитает, что там, и все поймет». В этот раз ради эксперимента я попробовал сделать именно так. И знаете что? «АХАХАХАХ, нет». Очень мало кто это все читал. Планирую полностью переделать обучение в следующей версии проекта.
В последнем гаминаторе использовал гибридную версию, большая часть подсказок к управлению была доступна игроку постоянно в течении всего обучения, а важные геймплейные механики преподносились окнами которые нужно закрыть. В добавок к этому в диалогах были указания на то, что нужно делать. Не встречал отзывов о том, что кто-то не разобрался в итоге в игре, что подтверждает выигрышность такого подхода к обучению. Там конечно много шероховатостей, но они уже относятся к реализации тех или иных механик, но не к самому подходу к обучению.
Итоги
Что я думаю по поводу конкурса? Мне понравилось! Две недели делать игру в режиме кранча на конкурс — всяко лучше, чем месяц, как это обычно происходит на гаминаторе. То, что нужно выкладывать демо через неделю, тоже клево, хоть и расслабляет после. Еще нужно было вести дневник разработки, что прикольно. Он там был не таким подробным, как этот пост, но весь этот текст в качестве рыбы использовал именно те записи. TWG имеет неплохой призовой фонд, и помимо первых трех мест в итоге по небольшой сумме еще получили и те, кто выполнил «ачивку», что, думаю, тоже приятно очень. Не очень понравилась, разве что, часть комьюнити, но чего я мог ждать от двача. Нас сразу предупредили, что анончики сгорят с нашего проекта, что и случилось: «команда мидлов пришла унижать одиноких анончиков», «правило для участия команды для школьников придумали, вы то куда лезете»
В течение трех стримов на канале я проходил игры других участников, и там было много неплохих игр. В среднем даже по ощущениям уровень выше, чем в среднем обычно на гаминаторе. Думаю, потому что было много заявок (было 50 заявок) и много отсеялось на этапе сдачи демо, и после него, когда поняли, что еще за неделю не успеют развить демку. Хотелось бы еще багодень, как на том же гаминаторе, чтобы пропатченная версия входила в официальную сборку в итоге. Но увы.
В отличии от гаминатора здесь голосование только у участников конкурса и судьи, что хорошо и уменьшает возможность накруток. Правда, команда считается за одного участника, поэтому нам пришлось в команде собирать разные мнения об играх и считать среднее арифметическое из баллов по каждой игре, чтобы выдать финальный вердикт. Однако такая система работает хорошо только за счет большого количества участников, впрочем у нее тоже есть слабые стороны, из-за которых после конкурса возник срач в общем чате (не из-за распределения мест, а из-за системы оценивания)
По итогам голосования, мы сами того не ожидая, заняли второе место. Как же каефно. Мы так давно участвовали в геймджемах и ни разу не попадали в топ-3, а тут такое (в gaminator 25 все же вошли в топ-3, что тоже радует). На дваче, разумеется, по поводу итогов сразу пожар возник, ну и ладно.
Заключение
Temporal Renaissance получился клевым. Конечно, мы сделали не все, что хотели. У меня остался бэклог с багами и проблемами, которые стоит порешать, чем, я думаю, и займусь скоро. Хочу довести проект до его лучшего состояния, а там может и на Itch.io выложу. Или еще куда. Спасибо за прочтение, надеюсь было интересно.
Скачать актуальную версию игры можно здесь: https://disk.yandex.ru/d/zSkf1-VGpdyo-A
Жду отзывов об игре от завсегдатаев гамина в комментарии к посту)
- 15 мая 2023, 08:20
- 08
9 комментариев