Как мы поучаствовали в геймджеме (Postmortem Karma Land)

Как мы поучаствовали в геймджеме (Postmortem Karma Land)

Stanislav

Как вы знаете, мы угораем не только по моушен дизайну, но и по геймдеву. И сейчас я хочу рассказать, как мы с Димой Крипаковым поучаствовали в геймджеме и за неделю сделали вполне неплохую игру под названием Karma Land.

Ссылка на игру для нетерпеливых:

https://bereg.itch.io/karma-land

С начала года я успел поучаствовать в четырех джемах, Дима - только в одном, так как все время посвящал записи курса про Редшифт. И вот, курс дописан, погода на улице так себе, вирусная обстановка тоже не очень - и мы решили поучаствовать в надвигающемся Brackeys jam, который проводился с 1 по 8 августа.

Тема джема: “Rewind”, то есть “Перемотка”.

Мы, как всегда, начали с мозгового штурма в Трелло. 

Очень сложно было отказаться от штампов про перемотку времени в процессе игры, но в конце концов мы сошлись на одной идее, которая звучала так: “Колесо Сансары как игровая механика”.

Сначала была мысль про Deathmatch, где ты перерождаешься в другой класс персонажа в зависимости от успехов прошлого раунда, но в конце концов все пришло к песочнице, где ты бегаешь за одно из животных по сюрреалистичному ландшафту и перерождаешься после смерти.

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

Боже, как я ошибался!

Первые тесты работали неплохо, животные ригались и красиво бегали. 

Я стал писать игровую логику и в процессе понял, что влип. Ассет контроллера, которым я пользовался, состоит из тридцати разных скриптов, каждый отвечает за своё. И написаны они не так, чтобы супер. Многие вещи, которые мне были нужны, просто не работали, мне пришлось вооружиться Debug.Log и погрузиться в потемки чужого кода.

В конце концов я переисправлял примерно с десяток скриптов, чтобы все заработало. Ух, как это мне потом аукнется.

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

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

О процессе создания Дима расскажет сам. Ему слово:

Почти все модели в игре были сделаны в гудини и передавались в юнити через гудини энжин. Получается довольно удобно - можно сделать в гудини один процедурный ассет, например, моста, или домика, или вязанки бревен, и потом в юнити в пару движений сделать много вариаций этих ассетов. Очень сильно экономится время, а главное если пришла идея добавить к модели какую-то крутую штуку - не нужно переделывать 5-10 вариантов домов, достаточно обновить ассет, и в юнити всё автоматически перестроится.
Получилось достаточно быстро и гибко настраивать уровень. В юнити мне достаточно было указать точки для спавна деревьев, а энжин уже проецировал эти точки на террейн, то есть мне даже не нужно было точно всё подгонять по высоте, потом на их месте высаживались деревья, а вокруг деревьев появлялась трава.
Если траву нужно было настраивать как-то более тонко - нет ничего проще, в юнити, по сути, подгружается ассет из гудини напрямую, со всем интерфейсом, и поэтому можно легко добавлять сколько угодно параметров прямо под ситуацию. Так например в 2 слайдера из генератора дома я сделал генератор мельницы.
Но есть и минусы, конечно. Багов всё ещё хватает. Чего стоит только то, что случилось после того как мы выложили игру. Я подгрузил в проект юнити какой-то пэкедж и вот что стало с генератором уровня. Это фиаско, братан. Делайте бекапы!

Дима делал уровень у себя в Юнити, а потом передавал мне его в виде префаба через unitypackage. Так было довольно удобно работать, но в какой-то момент что-то пошло не так. Ну как “в какой-то момент”? Вечером перед окончанием джема. 

Дима в пекедж запаковал не только уровень, но и ассеты животных, которые он использовал для тестирования. А я был замотан и не посмотрел, что там Юнити хочет импортировать.

Возможно вы уже поняли. Импортировав уровень, я перезаписал все те скрипты контроллера, которые последние три дня люто переписывал. И уже готовая работающая игра сломалась. Совсем.

Время - 19:00. Завтра в час дня нужно засабмитить игру на джем. А игры нет, все не работает, куча ошибок. “Бэкапы?” - спросите вы? Ха-ха. Нет, в этот раз все шло так хорошо, и я решил, что бэкапы не нужны, вот такой я умный.

Ну что делать, ночь длинна и мне пришлось заново переписывать эти скрипты. Проблема была в том, что я не помнил точно, в каких местах я их менял. Мне пришлось декомпилировать вчерашний билд игры (святой C#!) и подсмотреть там.

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

Я поспал часов 5 и с утра ринулся в бой, по сути заново пересобирая алгоритмы для ИИ. По законам жанра, в последний момент, к полудню, они заработали! Животные стали злыми убийцами, которые не отстанут от игрока, пока не убьют. В игру стало реально интересно играть.

Ура.

Компиляция.

Багфикс.

Еще раз компиляция.

Еще раз багфикс.

Игра готова. Выкладываем.

Если вам интересно, вот таймлапс процесса разработки, записанный с моего рабочего стола:

https://youtu.be/VEJ19zpHAg0


Этот год по понятным причинам стал прорывным для геймджемов. Рекорды по числу проектов поставили Ludum dare, GMTK jam, а теперь вот дошла очередь до Brackeys jam. На него было представлено… 1915 проектов.

Почти две тысячи. И среди них где-то там затерялась наша игра, наш Karma Land.

Скачать ее и поиграть можно по ссылке: 

https://bereg.itch.io/karma-land

Будем рады вашим отзывам.

А если вы сами в первый раз собираетесь принять участие в джеме, то дадим вам несколько советов.

  1. БЭКАПЫ! Каждый вечер! Неважно, GIT это или банально копирование на другой диск.
  2. Ознакомьтесь с движком. Перед началом джема потренируйтесь создавать простенькие игры, убедитесь, что вы сможете запрограммировать игровую логику. Заранее установите все необходимые программы и обновления пакетов. 
  3. Убедитесь, что вы знаете, как скомпилировать игру и сколько времени это займет. В конце джема у вас может не оказаться достаточно времени, чтобы разобраться с этим вопросом.
  4. НЕ ОБНОВЛЯЙТЕ ОПЕРАЦИОННУЮ СИСТЕМУ И ЛЮБОЙ СОФТ ВО ВРЕМЯ ДЖЕМА.
  5. Внимательно прочитайте правила. У разных джемов они разные. Где-то нельзя использовать сторонние ресурсы, включая графику, звук и даже текстуры. Где-то обязательно делать ассеты в конкретном пакете. Иногда есть запреты на использование определенных тем (например политика и религия). В общем, будет неприятно столкнуться с тем, что ваша игра не проходит по правилам, после того, как вы ее уже сделали.
  6. Устройте мозговой штурм перед началом. Не садитесь кодить сразу как узнаете тему. Подумайте. Джем - отличная возможность поэкспериментировать и создать какую-то абсолютно новую и смелую игровую механику.
  7. Составьте график работы и старайтесь ему следовать. В графике лучше учесть время на непредвиденные трудности. То есть не планируйте финальный сабмит игры в последнюю минуту. У вас наверняка будут проблемы с компиляцией или заливкой игры. 
  8. Нормально питайтесь, спите и регулярно делайте зарядку. Близкий дедлайн не повод умирать.
  9. Если вы работаете в команде, то заранее распределите роли и обсудите все нюансы взаимодействия. Используйте инструменты для продуктивной работы - Trello, Slack и так далее.
  10. Оставьте перфекционизм в стороне. Это джем, тут нужно работать быстро. Допилить игру вы всегда сможете после дедлайна. 
  11. Сфокусируйтесь на одной игровой механике и доведите ее до ума. На этапе мозгового штурма у вас может появиться множество идей, но вы наверняка не сумеете реализовать каждую из них. Выберите одну.
  12. Не парьтесь, если ваш код выглядит плохо. Работает - и отлично. Провести рефакторинг можно будет после окончания джема.
  13. Ближе к концу джема вам нужно будет подготовить описание и скриншоты для страницы игры. Не откладывайте это на последнюю минуту.
  14. Выделите время на тестирование игры. Обязательно!
  15. Захватывайте видео вашей работы! Вы можете записывать процесс создания игры в режиме таймлапс (например поставив в программе захвата fps 1) или даже стримить его на Youtube или Twitch. Потом обязательно выложите запись и сообщите нам.
  16. После джема сделайте Post-mortem. Это может быть видео или текст, в котором вы анализируете, как прошел джем, чему вы научились, что пошло не по плану, а что получилось хорошо. Такой анализ поможет вам избежать ошибок в следующий раз. Постмортем можно разместить на странице игры на Itch.io - там есть специальный раздел для Дневников разработки.
  17. Следите за успехами других участников. Обязательно поиграйте в их игры и оставьте комментарии. При этом будьте вежливы и конструктивны. Эти люди прошли через те же испытания, что и вы.
  18. Не волнуйтесь и не бойтесь. Получайте удовольствие. Джем - это в первую очередь приятное времяпрепровождение, а уже потом тяжелая работа без отдыха и сна с потерей аппетита и отказом двадцати процентов внутренних органов.


Report Page