{"id":2412,"title":"\u0423\u0433\u0430\u0434\u0430\u0439\u0442\u0435 \u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u043e \u0437\u0432\u0443\u043a\u0443 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043f\u0438\u0432\u0430 \u0438 \u043f\u0435\u043d\u0438\u044e \u043a\u0438\u0442\u043e\u0432","url":"\/redirect?component=advertising&id=2412&url=https:\/\/vc.ru\/special\/sound&placeBit=1&hash=1620c155cf544062859cfaabcc12f9dd73613708c43c381ba3dbf0828037edcd","isPaidAndBannersEnabled":false}
Инди
Максим Волков

TD Worlds — трейлер, демоверсия, стим и дальнейшие планы

И снова здравствуйте. На связи tower defense с элементами roguelite.

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

Движок: Godot.

Интерфейс пока еще болеет

Прошедшие 2 месяца прошли под знаком активной полировки проекта, оформления страниц в стиме, монтажа первого трейлера, сбора фидбека по демоверсии и прочих подобных вещей. А еще, наконец, проект графически стал выглядеть приятнее и опрятнее. Заодно я переработал игровой баланс с механиками апгрейдов по мере продвижения по игре.

И каков же результат?

Первый трейлер

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

Демоверсия

Для придания некой «солидности» завел для демоверсии отдельную страницу на itch.io (не выкладывать же постоянно на гугл диск и прочее, в самом деле).

Теперь там всегда можно обнаружить последнюю версию, небольшую историю изменений, и, при желании, дать обратную связь.

Кстати, еще обратную связь можно дать и в дискорде проекта.

Так же было несколько публикаций на реддите (ну и странный он, конечно) и даже получен полезный фидбек по игре.

Стим

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

Кстати, демоверсия в стиме тоже доступна.

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

Есть какое-то отдельное удовольствие наблюдать за тем, как твои заявки на проверку в стиме успешно одобряются.

Оптимизация

В какой-то момент я начал замечать неприятные просадки производительности. Казалось бы, довольно небольшая 2D игра, в чем дело?

Оказалось, что есть свои тонкости, которые стоит учитывать:
- очистка ненужных объектов - если вы создаете любые вспомогательные объекты, то не забывайте их удалять после того, как они сделали свое дело (вызывать queue_free() для нод и просто присваивать null для обычных типов данных);
- минимизация используемых нод - изначально тот же объект врага у меня содержал всевозможные дочерние ноды для всех случаев разных эффектов, что вызывало серьезные лаги при большом количестве врагов, так что теперь я подгружаю только минимальное количество нод для конкретных условий на уровне;
- вдогонку к предыдущему пункту - удаляйте "нужные" ноды сразу как только они закончили свою работу. Например, при установке башен у меня есть небольшая анимация, и теперь я сразу удаляю все с ней связанное как только она заканчивается (экономия в 3 ноды на каждый случай);
- предзагрузка шейдеров - когда в игре впервые появляется любой шейдер, может наблюдаться заметный лаг (при последующих запусках игры шейдеры обычно уже закешированы работают как надо). Чтобы его минимизировать, стоит загрузить все возможные шейдеры как можно раньше, в идеале во время первоначальной загрузки игры во время вступительного экрана. Для этого достаточно разместить все объекты с шейдерами на отдельном CanvasLayer на самом нижнем уровне (обычно достаточно -1 уровня), таким образом слой будет находиться под контентом игры, и при этом все еще просчитываться видеокартой. Не забывайте удалить его после полной загрузки игры;
- аккуратнее со светом - Light2D работает медленно в текущей версии Godot (это обещают починить в 4 версии, но когда это еще случится), поэтому старайтесь ограничиваться малым количеством источников света. К примеру, у меня было всего 4 статичных источника на сцене, и они успешно просаживали фпс на 50%.

Надеюсь, эти наблюдения помогут вам не наступать на те же грабли при разработке.

Дальнейшие планы

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

Собственно на этом все, благодарю за чтение сего текста и всех вам благ.

Выход игры запланирован на первую половину 2022 года*

*при условии отсутствия чрезвычайных происшествий

Бонус

Игра практически steam deck ready
{ "author_name": "Максим Волков", "author_type": "self", "tags": ["\u0434\u0435\u043c\u043e","\u0434\u0435\u0432\u043b\u043e\u0433","towerdefense","tdworlds","tddevelop","roguelite","indiegamedev","indie","godot","gamedev","demo"], "comments": 2, "likes": 24, "favorites": 7, "is_advertisement": false, "subsite_label": "indie", "id": 815871, "is_wide": true, "is_ugc": true, "date": "Tue, 03 Aug 2021 19:08:17 +0300", "is_special": false }
0
2 комментария
Популярные
По порядку

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

1

Башенки не сильно зрелищно это делают, так что пляшем от того, что имеем.
Зато текст такой "вжух"

4
Читать все 2 комментария
{"hash":"f644db5e","params":{"id":"dtfru","service":1,"title":"\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440","isLegacy":false}}