17

Как игры придумывают карты, которые никогда не повторяются

Вы заходите в игру, открываете карту — и каждый раз видите что-то новое. Реки текут по-другому, леса в других местах, а ресурсы спрятаны не там, где были вчера. Всё это — результат алгоритмической генерации карт, и за этой, казалось бы, магией стоит очень конкретная математика.

Как игры придумывают карты, которые никогда не повторяются Gamedev, Игры, Компьютерные игры, RPG, Мобильные игры, Разработка, Длиннопост

Зачем вообще нужна генерация?

  1. Повторное прохождение. Чтобы игроку было интересно вернуться и начать заново.

  2. Экономия времени. Художнику не надо рисовать 100 уровней вручную.

  3. Вариативность. Один игрок идёт по лесу, другой попадает в пустыню — и оба получают уникальный опыт.

  4. Баланс. Иногда алгоритм даже помогает расставить ресурсы, врагов и бонусы так, чтобы всё было честно.


Какие бывают подходы?

Шаблонная генерация

Есть заготовка (например, 10×10 клеток) и набор возможных блоков: лес, вода, база, ресурсы. Алгоритм просто раскидывает элементы по правилам:

  • не более двух озёр рядом,

  • не ставить базу в углу,

  • ресурсы не дальше чем в 5 клетках от старта.

Так работают многие старые стратегии и рогалики.

Шум Перлина (или Симплекс-шум)

Это когда карта «рисуется» плавно, без резких перепадов. Природные формы (горы, реки, равнины) генерируются по математическому шуму. Именно так получаются красивые органичные ландшафты — без угловатых кусочков.

Клеточные автоматы

Алгоритм смотрит на соседей каждой клетки и решает, что с ней делать. Например, если вокруг 5 лесов — пусть будет тоже лес. Если меньше — пустошь. Через несколько итераций получается что-то похожее на «естественный» биом.

Бесконечные миры (chunk-based)

Такая карта не хранится целиком — она создаётся по мере движения игрока. Мир как бы строится у него под ногами. Это используют Minecraft, No Man’s Sky, Dwarf Fortress и другие.


Сложности и нюансы

  • Баланс и справедливость. Случай — не всегда добрый. Нужно следить, чтобы игрок не заспаунился в ловушке или в «голой» пустыне.

  • Повторяемость. Часто генерация идёт от seed-строки или числа. Тогда игрок может повторить тот же мир (например, в Don't Starve).

  • Переходы между зонами. Если карта «пришивается» по частям — важно, чтобы они стыковались без дырок или обрывов,

  • Ресурсы и маршруты. Игрок должен найти нужное, но не сразу — нужно сохранить интригу, ощущение поиска и прогресса от каких-то подсказок по ходу изучения.


А что мы делаем у себя?

В нашей игре Mars Frontier используется тайловая карта с бесконечными координатами. Каждый новый игрок появляется на карте в определенном радиусе, который растет по мере увеличения числа участников. На картинке ниже желтые точки - игроки, видно, как они расползаются от центра в периметр (там пока больше кристаллов для сбора :)

Как игры придумывают карты, которые никогда не повторяются Gamedev, Игры, Компьютерные игры, RPG, Мобильные игры, Разработка, Длиннопост

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

С удовольствием почитаю комментарии и изучу опыт как больших маститых геймдевов, так и профессиональных игроков, любое ценное мнение будет вознаграждено лайком, прошу быть вежливыми по отношению друг к другу в комментах! Хорошего дня!

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"