#Bevy

Герои научились продавать излишний лут + разбор того как это реализовано

Привет всем, последние несколько недель я занимался прототипированием некоторых компонентов ИИ, улучшая поведение агентов в игре. Подход имеет в основе метод "job givers", который включает в себя кастомный планировщик задач похожий на GOAP. Само улучшение пока небольшое, но в будущем на его основе я буду строить другие поведения для агентов.…

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

Осталось прикрутить хот-релоад. Сам код довольно простой потому что почти всю тяжелую работу выполняют другие библиотеки: asefile – парсер для файлов и image – буфер с помощью которого можно собрать атлас из фреймов анимации. Моя работа в том чтобы записать фреймы в атлас и запомнить какие кадры каким индексам из этого атласа соответствуют.

Запилил небольшой профайлер для ECS систем в Bevy Engine

Для чего это нужно? Можно быстро находить медленные системы и другие узкие места. Этот плагин конечно пока не дает такой подробной диагностики как offline профайлеры вроде superluminal или tracy, но зато работает в реальном времени и дает быстрый сигнал, который дальше уже можно изучить в более продвинутом софте. Идея в том чтобы оптимизировать…

Пример как установить плагин в проект из исходников.
Добавил разные анимации импакта чтобы разнообразить бои. Удар теперь "станит" персонажей
Добавил систему частиц и поработал над звуками
Анимация луков
Стрелы пока еще не реализованы.
Скелетная анимация в духе Archvale

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

Рубящее оружие. Сам спрайт персонажа нужно будет немного адаптировать.
Простая система для боев

Долго тянул, но вчера вечером добавил базовую систему боев. Все очень просто – система AI агента отправляет события урона со всякими параметрами, обработчик их применяет и запускает анимацию деспауна (ее пока что нет). В событие можно добавить тип оружия, урона, прямой или по площади и прочее. Обработчик может читать параметры целей (броню и…

Небольшое демо
Добавил горячую перезагрузку для карт LDTK

Добавил начальный хот-релоад в движок для карт созданных в LDTK (такой универсальный 2D редактор уровней для спрайтовых игр). Я долго тянул с этой фичей, но она оказалась реализуема за 30 минут. Уровень загружается в свою иерархию в ECS которую мы потом подменяем на новую когда обновляется ресурс файла карты. До этого приходилось перезагружать…

Слева – LDTK, справа – движок игры.
Добавил нормальный шейдинг объектов над полом

Доработал то как шейдятся объекты над полом. Я разделил пол, стены, и "остальные объекты" на 3 отдельных слоя (RenderLayer в Bevy). Текстуры этих слоев затем передаются в один фрагментный шейдер для всего экрана где они по разному освещаются заранее посчитанной текстурой света пола и затем смешиваются. Думаю для начала получилось неплохо. Сам…

Пол, стены и другие объекты теперь рендерятся отдельно.
Вышла новая версия движка BEVY 0.5, написанного на Rust

Существенным изменениям подверглась система ECS.

null