На этой странице в общих чертах описывается техническое устройство карты мира.
Карта изменяется раз в час под влиянием параметров, задаваемых действиями игроков, и своего предыдущего состояния.
Карта всегда представляется клеточным полем.
Весь код (кроме низкоуровневого моделирования ландшафта) можно найти:
- Python: модуль the_tale.game.map.
- JavaScript модуль map2.js
Формирование карты можно разбить на несколько уровней, на каждом из которых она обрабатывается особым образом.
- Моделирование базовых параметров мира.
- Выделение биомов — узнаваемых типов ландшафта, которые лучше всего соответствуют параметрам клетки карты (горы, джунгли, равнина, etc.).
- Фомирование схемы тайлового отображения карты — именно эта схема отдаётся браузеру и по ней рисуется карта.
- Отображение карты браузером.
Моделирование карты осуществляется отдельной библиотекой deworld <deworld_project>
:
- github: https://github.com/the-tale/deworld
немного документации <deworld_project>
Моделируется несколько базовых параметров (высота, температура, растительность, etc.) с учётом влияния игровых объектов.
На выходе этого этапа карта представлена набором слоёв, с нормированными величинами каждого параметра (например, температуры).
Игровые объекты влияют на эти параметры, задавая «точки влияния». Кажая точка описывается:
- координатами клетки на карте;
- описанием области, на которую распространяются изменения;
- слоем, который она изменяет;
- величиной и правилами изменения параметра слоя.
Описание «точек влияния» можно найти в исходниках игры.
Также, по этим данным формируется текстовое описание клетки. Исходный код.
Поскольку реализовать отображение карты для всех возможных сочетаний параметров сложно, у нас выделено несколько выделяющихся типов ландшафта, которые мы называем биомами.
Для каждой клетки карты биом выбирается по следующему алгоритму:
- Пространство значений каждого параметра бьётся на интервалы (например, влажность, измеряемая от 0 до 1 бьётся, на 10 интервалов с шагом 0.1).
- Для каждого сочетания биома с интервалом значения в балансе игры прописано количество «очков», которое биом получит, если значение параметра в клетке попадает в интервал.
- Для каждого биома считается сумма очков всех параметров клетки.
- Биомом клетки выбирается биом с максимальным количеством очков.
Данных о биомах и объектах карты уже хватило бы, чтобы нарисовать её в клиентах игры. Но, чтобы упростить реализацию новых клиентов, мы делаем предобработку данных карты.
В итоге клиенту возвращается двухмерный массив. В каждой клетке массива находится список идентификаторов спрайтов, которые нужно отобразить и угол их поворота. Спрайты указаны в порядке отрисовки.
Получение карты и её формат описаны документации нашего API <external_api__region>
.
Клиенту остаётся получить инструкцию по отрисовке карты и исполнить её.
Для обновления карты на сервере есть отдельная команда.