Генерация боевой карты в Stone of Adventure
Всем привет! Подписывайтесь на наш блог, чтобы следить за новостями и оставляйте свои реакции. Сегодня разговор пойдет о генерации боевой карты!
Одной из ключевых особенностей игр в жанре rogue-like является непредсказуемость. Добиться этого можно разными способами, но одним из самых популярных является случайная генерация уровней. В этой статье я расскажу, как реализована генерация боевой карты в нашей игре.
Во время каждого забега игрок проходит через множество сражений ⚔, и чтобы боевые карты не выглядели однообразно, мы разработали свою систему генерации. Однако было бы странно, если бы генератор нельзя было адаптировать под конкретные требования и баланс. Поэтому для каждой битвы формируется своя конфигурация.
На данном этапе генерация карты включает три основных этапа:
- Генерация ландшафта
- Генерация интерактивных объектов
- Генерация статичных (декоративных) объектов
В этой статье мы рассмотрим только первый этап.
Генерация ландшафта
В нашей игре отсутствуют плавные изменения высоты. Это связано с механикой боя: урон зависит от того, находится ли атакующий выше или ниже своей цели. Чтобы сделать этот момент максимально понятным для игрока, необходимо четкое разделение уровней высоты. В конфигураторе можно указать количество уровней высоты, которые будут сгенерированы.
Генерация начинается с задания размера карты: её длины и ширины. Далее происходит поуровневая генерация, начиная с самого нижнего уровня и заканчивая верхним. Каждый уровень можно настраивать индивидуально, что позволяет создавать уникальные карты для каждого сражения.
В настройках уровня высоты задается процент площади, которую он будет занимать относительно предыдущего уровня, и список декоративных объектов, которые будут на нем сгенерированы. У нас много планов по расширению генератора карты, и со временем появятся новые параметры.
Мы также экспериментируем с размером области за границами карты. Она создает ощущение, что карта не ограничивается только игровой зоной. Объекты и тайлы в этой области находятся на отдельном световом слое. Это позволяет отключить влияние источников света, делая акцент на участке карты, доступном для игрока.
Для определения того, будет ли в определенной координате сгенерирован тайл, мы используем алгоритм Окрестности Мура. Окрестность Мура — это как если бы ты смотрел на тайл и проверял все соседние клетки по сторонам, чтобы решить, стоит ли там появляться новому тайлу. Этот алгоритм помогает распределить тайлы на каждом уровне, создавая логичные и разнообразные ландшафты, которые делают игру более интересной и вариативной.
Обязательно напишите, в каких играх генерация уровней показалась вам интересной!