Проект от команды ADDMM (внутренняя команда Azur Games)

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

Play the best song in the world, or I'll eat your soul.

Tenacious D

Команда

Итак, у нас было две команды (всего было больше, просто речь пойдет об этих двух). Одна состояла из двух серверных разработчиков и одного 3Д художника, а вторая - из двух клиентских разработчиков. У первых была куча наработок и фреймворк для сборки бэкендов для ПвП игорь, а у вторых “чудесным" образом оказался подобный фреймворк для фронтенда. Эти два набора инструментов до этого на проектах компании не встречались, поэтому мы подумали, что было бы неплохо повеселиться и заодно проверить совместимость наших решений и запилить что-нибудь отмороженное и сетевое за два дня. Отмороженная сетевая механика - это, наверное, не совсем то, что нужно нашему паблишингу, но должны же мы хоть когда-то отдыхать душой? 🙂

Результат

И была сформирована убер команда

  • Макс - сервер (я)
  • Алексей - клиент
  • Дмитрий - сервер
  • Дарья - клиент
  • Максим - 3Д моделинг, левел дизайн
  • Фил (на фото) - мур-мур
Проект от команды ADDMM (внутренняя команда Azur Games)

Идеи

В субботу часов в 11 все потихоньку сползлись в слак, и началась генерация идей. Главные критерии - мультиплеер и веселье. Второстепенные критерии - отсутствие physic-based геймплея, чтобы не делать серверную физику, и отсутствие мелких и быстрых проджектайлов. Мы бы так просто не успели.

Просто перечислю идеи, которые могли увидеть свет

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

И финальная идея, которую в итоге и делали: остается 60 секунд до заката Солнца, нужно бегать по окрестностям и собирать батарейки в сундуках, чтобы вставить их в генератор. Через 60 секунд просыпаются монстры и всех, кто не спрятался, съедают. Чем больше батареек соберут - тем больше людей поместится в убежище. То есть игрок может сразу залезть и занять место, чтобы выжить, либо метаться по карте и пытаться всех спасти - за это даются очки. Мотивация игрока, конечно, сильно перекошена, но она поддается неплохому тюнингу, если основная механика заработает. А понять, заработает она или нет, можно только через что? Правильно, прототипирование 🙂 А в данном случае прототип механики равняется игре для хакатона, что всех устраивает. С таймером тоже не очень ровно - немного притянуто за уши, но условие хакатона выполнено, уже судьям решать что и куда там притянуто. Попозже поймаем в коридорах студии какого-нибудь геймдизайнера и дадим ему потрогать наш прототип - может скажет, как надо 🙂

Кресло для выдумывания идей, в котором и родилась, собственно, идея (у Алексея)

Проект от команды ADDMM (внутренняя команда Azur Games)

Планирование и подготовка

После оценки трудоемкости, мной был произведен расчет необходимого объема бутылки грин бабуна - 0,5 должно хватить, и, кстати, хватило идеально

Проект от команды ADDMM (внутренняя команда Azur Games)

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

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

Фронтендеры тоже взяли свой темплейт, выкинули оттуда все лишнее.

Теперь и бэк и фронт стояли на низком старте, готовые сорваться и пилить уже фичи каждый на своих инструментах. По времени это было примерно в 15-16 часов дня в субботу. Дальше - созвон, обсудили в общих чертах, как все будет, наметили фичи, точку встречи и уже началась тру разработка.

Разработка

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

По клиентским фичам делали все, что должно быть на клиенте)) Это взаимодействие с сундуками, с генератором, с убежищем. Появилась идея сделать рандом в сундуках - либо это батарейка, либо ловушка на замедление, либо ускорение, либо ничего” (“Это твоё любимое! Разочарование!” (с) Metalocalypse). Из-за недостатка времени делегировали пока что выбор контента сундука на клиент. Само собой, “это должен делать сервак, но пока пусть так” (успокаивающая серверная мантра, которая внушает веру в светлое будущее) 🙂

3Д художник параллельно моделил генератор, расставлял пропсы по уровню, творил магию левел-дизайна.

Проект от команды ADDMM (внутренняя команда Azur Games)

Примерно в середине воскресенья мы начали делать робкие попытки интеграции и соединения сервера с клиентом - как ни странно, оно заработало почти сразу (если бы я не перепутал X с Y - то заработало бы вообще сразу)

Синхронизация позиций

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

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

Я, как тру серверник, начал делать ГУЙ - верстать панель результатов раунда - ну это логично же, результаты то с сервера приходят 🙂

Ок, вот вам

Проект от команды ADDMM (внутренняя команда Azur Games)

Результат

Ну и часам к 21-22 в воскресенье у нас уже было все готово, осталось немного украшений, собрать билд и записать видос с геймплеем, что мы и оставили на утро понедельника. А, ну еще название придумать, конечно же.

Проект от команды ADDMM (внутренняя команда Azur Games)

Если подытожить - мы добились своей цели - наши два фреймворка (бэкенд и фронтенд) подружились моментально, 80 процентов игры получилась из готовых и протестированных инструментов - осталось только собрать из них механики. Ну и повеселились, конечно, куда без этого. Остальные проекты от наших ребят тоже, кстати, получились достойные и красивые. Если они захотят - покажут 🙂

С наилучшими пожеланиями,

Макс

1414
1 комментарий

Нормуль, но как-то экшена не хватает

2
Ответить