Привет всем подписчикам и просто проходящим мимо. Наша небольшая команда из двух человек продолжает рассказывать о ходе работ над проектом Final Protection – изометрическим шутером на Unreal Engine 4 с разрушаемым окружением, генерируемыми уровнями, сложными боссами и пространственными головоломками. Прошедшая неделя выдалась… скажем так, достаточно сложной. По большей части мы увязли в разработке контента для генератора, более-менее закончили с атаками и анимированием нового типа врагов и начали работу над босс-румом, самим боссом и скриптованием сюжетной части пролога. Но обо всём по порядку.
1. Генератор уровней.
Мы очень много раз упоминали, что часть уровней будет генерироваться процедурно. Генератор – наша самостоятельная разработка, полностью созданная своими руками. На данный момент он свободно работает с масштабными пространствами – если говорить грубо и приближённо, то во вполне приемлемые сроки (малозаметные для пользователя) получается «собирать» архитектуру в границах квадрата до 20х20 км (таких масштабов у нас не будет, это излишнее, но генератор это позволяет).
Какие особенности у этой части нашего проекта? Генератор оперирует пятью основными типами комнат, основная привязка – к расположению выходов на их границах.
Работает это всё примерно так:
1. Генерируется сетка согласно заданному количеству ячеек и их размеру.
2. Случайным образом выбирается стартовая точка
3. В ней делается проверка в каких направлениях возможно двигаться, и выбирается случайное из оставшихся.
4. В следующей клетке к проверке направлений дополнительно проверяется, не упирается ли движение в уже существующую. Если да, то с некоторым шансом движение либо пересечет ее, либо завернет в сторону. Нет - продолжаем движение до тех пор, пока некуда будет двигаться.
5. Если движение невозможно, выбирается любая случайная клетка из уже существующего пути, создавая ответвление.
6. Когда заполняется заданный процент клеток, на выходе мы имеем список ячеек с определенным количеством выходов и их ориентацией в пространстве. Далее в них загружаются случайные уровни-комнаты, у которых конфигурация выходов совпадает, и разворачиваются в нужную сторону.
7. После этого выбираются клетки для входа и выхода с уровня, случайным образом из заданного диапазона наиболее удаленных друг от друга комнат с учетом возможных маршрутов движения между ними.
Дальнейшая работа над генератором будет включать в себя работу с элементами интерьера, освещением и случайными событиями для каждой отдельно взятой комнаты.
Много внимания было уделено оптимизации алгоритма - на текущий момент основная архитектура уровня из 100 клеток полностью загружается в среднем за полсекунды.
Контент, те самые комнаты-клетки для генератора выглядят примерно так:
2. Кроме генератора мы занимались работой над врагами – их типами и «фишками». Полицейские дроны, о которых мы уже рассказывали, обладают довольно слабой атакой, но имеют возможность оглушить героя электричеством – в общем, над реализацией качественного «выстрела» мы и работали. Выглядит всё это недурно=)
3. Наконец, ощутимое количество времени было уделено и непосредственно сюжетно-геймплейной части. Мы поставили себе задачу – к середине весны закончить демо-вресию хотя бы на час полноценного геймплея (от старта игры до сражения с боссом «пролога»). Сейчас идёт предварительный этап – ключевые локации начинают оживать. Там постепенно появляются диалоги и сюжетное наполнение. Также мы плотно работаем над балансом.
Спасибо за внимание!
Опять напомню – самые свежие новости можно узнать в нашем паблике:
https://vk.com/final_protection
Там же мы всегда готовы ответить на любые вопросы относительно нашего проекта!