Эссе о разработке игр, мышлении и книгах

Генерация подземелий — от простого к сложному

Что у нас должно получиться.

Что у нас должно получиться.

В этом уроке рассказывается, как запрограммировать подземелье. Если вы не программист, вам будет интересно почитать как придумать подземелье.

Несколько вечеров проверял идею генерации космических баз. Космическая база в итоге не получилась, а вот на добротное подземелье результат похож. Поскольку шёл от простого к сложному и никакой суровой магии не делал, то решил переработать код в урок по генерации подземелий на Python.

В итоге у нас получится генератор подземелий со следующими свойствами:

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

Весь код можно найти на github.

Кода в посте не будет — все используемые подходы легко описываются словами.

Для каждого этапа разработки в репозитории будет создан отдельный тэг, содержащий код на момент завершения этапа.

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

Далее

Видео с изменениями карты мира «Сказки» с 2013 года

Изменения карты мира «Сказки» с 2013 года.

Смотреть лучше в максимальном качестве.

Карта изменяется динамически, исходя из действий игроков и своей внутренней логики.

По сути реализована небольшая модель формирования ландшафта с учётом климата и «точек влияния», контролируемых игроками.

Просчитываются и меняются: высота, температура почвы/воздуха, направление ветра, влажность, плодородность земли, типы растительности.

Поверх этого отображаются обобщённые биомы (пустыня, джунгли, горы, etc). Для каждой клетки выбирается биом, который лучше всего ей подходит.

По ссылкам с ютуба можно скачать более подробные ролики.

Генерация текста на русском по шаблонам

И пять лет не прошло (на самом деле прошло), как у меня дошли руки рассказать чем генерируются тексты в Сказке (хабр).

Стастья о python библиотеке для генерации текстов с учётом зависимости слов и их грамматических особенностей.

Github: https://github.com/the-tale/utg PyPi: https://pypi.org/project/UTG/

Нейронный сети научили генерировать полноценные анимэшные аватарки

Пример сгенерированных нейронной сетью аватарок

Пример сгенерированных нейронной сетью аватарок

Пример можно найти на картинке и по ссылкам:

сайт с генератором

краткий отчёт по разработке

статья

Но куда интереснее не сам результат, а способ его получения:

  1. Сырую обучающую выборку слили с сайта об японских играх (изображения персонажей).
  2. На этих изображениях сторонней нейронной сетью распознали лица.
  3. Другой сторонней нейронной сетью назначили полученным портретам теги (цвет волос, глаз, etc).
  4. Обучили свою сеть, которая по параметрам генерирует картинки.
  5. Использовали сеть из пункта 3 для расчёта оценочной функции (на сколько полученная картинка соответствует требованиям).
  6. Конечный результат получается генерацией нескольких аватарок и выбором одной с лучшим значением оценочной функции.

То есть в работе задействовано 3 нейронные сети, 2 из которых — обучены ранее другими людьми. По этому поводу можно было бы расписать много интересного, но просто оставлю как факт.

О создании названий

Первое, что видит игрок, знакомясь с контентом — это его название (конечно, кроме красивой картинки). Будь то название мира, территории, поселения, способности, предмета, монстра или ещё чего-то. Часто кроме названия игрок ни с чем и не знакомится — проходит мимо по каким-то своим делам. Название — это подарочная упаковка для контента, во многом от него зависит обратит ли игрок внимание на то, что скрывается за парой слов, или нет.

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

Далее