Автомаппер
"Автомаппер" - это инструмент, облегчающий создание карт. Вместо того чтобы вручную расставлять круглые края фриза, вы можете сделать простое правило автомаппера, которое применяет правила ко всему слою тайлов. Каждое правило создается для определенного набора тайлов, и каждый набор тайлов может иметь несколько правил. Все правила находятся в teeworlds по адресу data/editor/automap/[1][2].
Файл правил
Для каждого набора тайлов, у которого есть автомаппер, существует текстовый файл tileset.rules. Каждый файл tileset.rules может содержать несколько автомапперов. Файл правил в общих чертах следует формату INI-файла. Внутри файла каждый автомаппер начинается с строки [automapper_name]
. Например, в файле grass_main.rules есть автомаппер под названием Grass, который начинается со строки [Grass]
в этом файле. Чтобы использовать его, нужно создать слой тайлов с набором тайлов grass_main в редакторе карт. Кликните правой кнопкой по слою и выберите "Auto map". Чтобы начать автомаппинг, нажмите "Grass".
Имя файла автомаппера должно соответствовать имени файла набора тайлов.
Автомаппер Grass[3]:
[Grass] Index 1 #top Index 16 Pos 0 -1 EMPTY ...
Обработка
Автомаппер будет считывать файл правил и сканировать каждую позицию слоя. Если для выбранного тайла выполняются все правила, тайл будет размещён в просканированной позиции автомаппера. Если совпадают несколько тайлов и их правила, применяется только последнее правило (так как оно перезапишет остальные). Если не отключено, автомаппер сначала поместит свои изменения в буфер, а затем применит их.

Индексы тайлов
Каждый набор тайлов содержит 16 строк и 16 столбцов, и каждый тайл можно адресовать по его индексу. Индекс тайла напрямую зависит от его позиции и может быть вычислен по формуле index = 16 * row + column
, где значения row и column находятся в пределах от 0 до 15. Тайл с индексом 0 всегда считается EMPTY
. Обычно эта часть не содержит текстур в наборах тайлов. Каждый другой тайл всегда считается FULL
, даже если он не содержит текстур и полностью прозрачен.
Индекс используется для ключевого слова INDEX
в автомаппере.
Синтаксис
Название вашего правила автомаппера:
Аналогично ini-файлам, вы можете создать свой собственный раздел для правила автомаппера:
[your-automapper-rule]
Несколько выборок индексов с последующими правилами могут входить в раздел.
Написание комментария:
#this is a comment
Выбор тайла, который вы хотите разместить:
INDEX 42
Это выбирает тайл 42 (то есть 3-я строка и 11-й столбец). Несколько индексов можно выбрать, добавляя между ними OR
:
INDEX 42 OR 43
Изменение тайла:
Index 42 XFLIP YFLIP ROTATE
XFLIP
зеркально отражает тайл по вертикали, а YFLIP
— по горизонтали. ROTATE
поворачивает тайл на 90° один раз.
Если вы хотите повернуть тайл на 180°, достаточно установить XFLIP
и YFLIP
, но не ROTATE
.
Если вы хотите повернуть на 270°, нужно установить XFLIP
, YFLIP
и ROTATE
.
Модификации тайла всегда находятся в той же строке, что и выбор.
Если вы хотите выбрать тайл без поворотов и отражений, можно использовать NONE
. В противном случае будут выбраны все тайлы с указанным INDEX
.
Правило для размещения тайла:
Выбранный тайл размещается, если выполняются все следующие правила. Правило для размещения тайла всегда начинается с координат, за которыми следует правило:
POS 0 -1 FULL
Это правило выбирает тайл с координатой X 0 и Y -1 относительно текущей позиции сканирования автомаппера. Если тайл над позицией сканирования равен FULL
, то выбранный тайл будет размещён (если выполнятся все следующие правила). Если тайл равен EMPTY
, он размещён не будет.
Вместо использования FULL
или EMPTY
можно выбрать другой тайл с помощью ключевого слова INDEX
:
POS 0 -1 INDEX 12
Если тайл над позицией сканирования имеет индекс 12, он будет размещён. Несколько индексов можно выбрать, добавляя между ними OR
:
POS 0 -1 INDEX 12 OR 13
Аналогично, для исключения тайла можно использовать NOTINDEX
.
Случайное правило:
Вы можете сделать так, чтобы выбранный тайл применялся случайным образом, добавив случайное правило:
RANDOM 20%
Случайное правило ожидает значение от 0% до 100%. Это значение представляет вероятность размещения тайла[4].
Если указать значение без символа %
, вероятность будет рассчитываться не в процентах, а по следующей формуле:
percentage = 1.0 / value
Это позволяет задавать более редкое размещение тайлов с вероятностями от 0% до 1% при значении > 100.
Например, RANDOM 150
будет иметь вероятность 1.0 / 150 ≈ 0.67
(процента).
Modulo:
С помощью оператора MODULO x\_pattern y\_pattern x\_offset y\_offset
можно создавать повторяющиеся шаблоны в зависимости от координат X и Y тайла. Например, MODULO 2 3 0 -1
использует \[[1](https://en.wikipedia.org/wiki/Modular_arithmetic) модульную арифметику], чтобы задать каждый второй тайл по оси X (x\_pattern
) и каждый третий тайл по оси Y (y\_pattern
). Третий и четвёртый параметры позволяют смещать координаты X (здесь 0) и Y (здесь -1), изменяя положение шаблона. Тайл будет размещён только если выполняются оба следующих правила:
(x + x_offset) % x_pattern == 0
(y + y\_offset) % y\_pattern == 0
Здесь %
— это оператор modulo.
Правило условия по умолчанию:
По умолчанию игра предполагает, что каждое правило применяется к полному тайлу, то есть всегда подразумевается следующее правило:
POS 0 0 FULL
Вы можете отключить это, добавив следующую строку под выбором тайла:
NoDefaultRule
NewRun:
Добавление NewRun
в раздел заставит раздел выполняться дополнительно столько раз, сколько раз этот ключевой слово добавлено в раздел. Это можно использовать для установки базовых тайлов в первом проходе и более сложных — во втором.
NoLayerCopy:
Добавление NoLayerCopy
в раздел приведёт к выполнению алгоритма на месте. Это значительно улучшит производительность, так как автомаппер не будет копировать свои изменения в буферную память перед применением. Но это может вызвать нежелательные побочные эффекты!
Инструменты
Существуют некоторые инструменты для создания правил автомаппера:
- SimpleDDNetAutomapper — небольшое приложение с интерфейсом, которое предлагает более удобный подход для очень простых правил и тайлсетов. Не поддерживает случайность или правила
POS INDEX
, но поддерживаетEMPTY
иFULL
. - Teeworlds Web Editor — редактирование автомаппера и просмотр в реальном времени[5].
- rpp — rules++ — небольшой эксперимент, направленный на то, чтобы сделать мапперов максимально ленивыми, раскрывая полный потенциал правил DDNet. Предназначен быть простым, читаемым и, что самое главное, правильным, всё остальное не важно[6].