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