Карта мира и работа с ней

На этой странице в общих чертах описывается техническое устройство карты мира.

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

Карта всегда представляется клеточным полем.

Весь код (кроме низкоуровневого моделирования ландшафта) можно найти:

Уровни формирования карты

Формирование карты можно разбить на несколько уровней, на каждом из которых она обрабатывается особым образом.

  • Моделирование базовых параметров мира.

  • Выделение биомов — узнаваемых типов ландшафта, которые лучше всего соответствуют параметрам клетки карты (горы, джунгли, равнина, etc.).

  • Фомирование схемы тайлового отображения карты — именно эта схема отдаётся браузеру и по ней рисуется карта.

  • Отображение карты браузером.

Моделирование параметров мира

Моделирование карты осуществляется отдельной библиотекой deworld:

Моделируется несколько базовых параметров (высота, температура, растительность, etc.) с учётом влияния игровых объектов.

На выходе этого этапа карта представлена набором слоёв, с нормированными величинами каждого параметра (например, температуры).

Игровые объекты влияют на эти параметры, задавая «точки влияния». Кажая точка описывается:

  • координатами клетки на карте;

  • описанием области, на которую распространяются изменения;

  • слоем, который она изменяет;

  • величиной и правилами изменения параметра слоя.

Описание «точек влияния» можно найти в исходниках игры.

Также, по этим данным формируется текстовое описание клетки. Исходный код.

Выделение биомов

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

Для каждой клетки карты биом выбирается по следующему алгоритму:

  • Пространство значений каждого параметра бьётся на интервалы (например, влажность, измеряемая от 0 до 1 бьётся, на 10 интервалов с шагом 0.1).

  • Для каждого сочетания биома с интервалом значения в балансе игры прописано количество «очков», которое биом получит, если значение параметра в клетке попадает в интервал.

  • Для каждого биома считается сумма очков всех параметров клетки.

  • Биомом клетки выбирается биом с максимальным количеством очков.

Файл с очками биомов

Фомирование схемы отображения карты

Данных о биомах и объектах карты уже хватило бы, чтобы нарисовать её в клиентах игры. Но, чтобы упростить реализацию новых клиентов, мы делаем предобработку данных карты.

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

Получение карты и её формат описаны документации нашего API.

Отображение карты клиентом

Клиенту остаётся получить инструкцию по отрисовке карты и исполнить её.

Обновление карты на сервере

Для обновления карты на сервере есть отдельная команда.