Ludum Dare №35, или история создания игры за 48 часов

Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост

Привет, Пикабу! В прошлые выходные наша команда CAT_IN_THE_DARK принимала участие в конкурсе по скоростной разработке игр Ludum Dare №35. Правила конкурса очень просты: нужно придумать игру на заданную тему и написать её за 48 часов (в более сложной категории Compo, где работать можно только в одиночку) или 72 часа (категория Jam, допускается командная разработка).

Это международный конкурс, участие в котором принимают программисты и команды со всего мира. Но в Омске так же проводится и свой, локальный Omsk Ludum Dare (OLD), участники которого тусят в одном огромном лофте с 7 утра субботы до 18 часов воскресенья и неистово пишут игры. Затем проводится "ярмарка", где все команды показывают, что у них получилось за эти ~25 часов работы (если тратить время на поспать) и победитель определяется голосованием. Затем участники OLD могут выложить свои игры на мировой Ludum Dare.


Мы уже 9 раз подряд принимаем участие в Omsk Ludum Dare и сегодня расскажем, как это было!

Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост

Итак, конкурс начинается в субботу, в 7 часов утра по Омскому времени. Всё из-за разницы часовых поясов, поскольку в это время объявляют тему, на которую нужно будет писать игру. Тема этого Ludum Dare - Shape Shifter, то есть оборотень. Мы лениво подтягиваемся к лофту, попутно обдумывая различные идеи игр. Идей - хоть отбавляй, но чем дольше идут споры, тем меньше становится вероятность сойтись на чём-то одном. К 10 часам утра блокнот изрисован подобными концептами, каждый из которых чем-то не понравился кому-то из команды:

Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост
Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост
Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост

В 10 часов утра состоялась презентация идей, на которой все команды по очереди рассказали о своих будущих играх. Мы, увы, так ничего путного не придумали, поэтому вместо плаката с идеей игры просто нарисовали котика:

Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост

И продолжили брейншторм. В конце концов, в 12:30 идея игры таки появилась: сетевой шутер с видом сверху. Ещё полчаса ушло на обсуждение всех деталей, и финальная идея выглядела так: по тёмному лесу среди кустов и деревьев бродят охотник и оборотень. Охотник пользуется фонариком и не видит за пределами его луча. Оборотень прекрасно видит всё, происходящее вокруг. Охотник может стрелять из ружья, а оборотень - только кусать (за бочок, ага). Цель - найти противника и убить его. Ниже - первая зарисовка этой идеи:

Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост

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


Игру мы писали не на какой-то новомодной Unity, а на скромном 2d-движке libGDX, в котором многие вещи приходится делать самостоятельно. В частности, для отрисовки теней, для проверки того, попал ли охотник выстрелом в волка, укусил ли волк охотника и не врезался ли кто-то из персонажей в дерево, приходилось вспоминать школьные уроки тригонометрии и обсчитывать кучу математики. Куда сдвинуть окружность на минимальное расстояние, чтобы она перестала пересекаться с данной? Как найти координаты точек касания по координатам центра окружности, радиусу и координатам точки, из которой выходят касательные? Как понять, пересекается ли с окружностью треугольник? Как найти угол между осью OX и прямой, соединяющей две точки? Вот к таким забавным геометрическим задачам сводилось написание игрового движка. Соответственно, блокнот пестрил подобными рисунками:

Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост
Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост
Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост

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

Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост

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

Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост

За второй день деревья на карте обрели физический смысл, и игроки больше не могли проходить сквозь них. Луч света на гифке выше был заменён на красивый мягкий луч с постепенным угасанием от центра к краям. Волк и оборотень научились стрелять \ кусать друг друга и обрели нормальные анимированные покадрово текстуры. Волк научился перепрыгивать деревья, а окружающий мир так же получил нормальные текстуры и наполнился звуками. Последние минуты до начала ярмарки были посвящены куче мелких доработок и мы с небольшим опозданием таки закончили своё детище. Вот как выглядела разработка игры, ускоренная в 300 раз:

В итоге, мы с сетевой игрой снова заняли на Омском конкурсе первое место, получили порцию футболок и славы и отправились по домам, доделывать игру, чтобы успеть выложить  её до 7 утра вторника на мировой Ludum Dare. За это время мы успели сделать так, чтобы волк и охотник оставляли за собой следы, иначе при огромном размере карты найти друг друга иногда непросто. А так же был полностью переписан код работы с сетью, чтобы люди могли играть друг с другом не только по локальной сети, но и через Интернет: появился сервер, который соединял разных людей по парам в игровые сессии.

Видео геймплея можно посмотреть здесь:

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

https://catinthedark.itch.io/za-bochok
Она кросс-платформенная, требует установленной Java версии 1.7

Так же страничка со статистикой игроков: кто, с кем, сколько играл и откуда были игроки

https://catinthedark-dashboard.herokuapp.com/


Ludum Dare №35, или история создания игры за 48 часов Ludum Dare, Игры, Программирование, Ld48, Шутер, Гифка, Видео, Длиннопост