Jump to content

Automapper/ru: Difference between revisions

From DDraceNetwork
FuzzyBot (talk | contribs)
Updating to match new version of source page
Created page with "<code>Index 42 XFLIP YFLIP ROTATE</code>"
 
(66 intermediate revisions by 2 users not shown)
Line 5: Line 5:




<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Rules_File"></span>
==Rules File==
==Файл правил==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Для каждого набора тайлов, у которого есть автомаппер, существует текстовый файл ''tileset.rules''. Каждый файл ''tileset.rules'' может содержать несколько автомапперов. Файл правил в общих чертах следует [https://en.wikipedia.org/wiki/INI_file формату INI-файла]. Внутри файла каждый автомаппер начинается с строки <code>[automapper_name]</code>. Например, в файле ''grass_main.rules'' есть автомаппер под названием ''Grass'', который начинается со строки <code>[Grass]</code> в этом файле. Чтобы использовать его, нужно создать слой тайлов с набором тайлов ''grass_main'' в редакторе карт. Кликните правой кнопкой по [https://wiki.ddnet.org/wiki/Mapping#Layers слою] и выберите ''"Auto map"''. Чтобы начать автомаппинг, нажмите ''"Grass"''.
There is a ''tileset.rules'' textfile for every tileset that has an automapper. Each ''tileset.rules'' file can contain multiple automappers. The rules file loosely follows the [https://en.wikipedia.org/wiki/INI_file INI-file-format]. Inside the file every automapper starts with the line <code>[automapper_name]</code>. For example in the file ''grass_main.rules'' there is an automapper called ''Grass'' which starts at the line <code>[Grass]</code> inside the file. To use it you have to create a tilelayer with the tileset ''grass_main'' in the mapeditor. Rightclick on the [https://wiki.ddnet.org/wiki/Mapping#Layers layer] and click on ''"Auto map"''. To start automapping click ''"Grass"''.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Имя файла автомаппера '''должно''' соответствовать имени файла набора тайлов.
The filename of the automapper '''has to''' follow the filename of the tileset.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Автомаппер Grass<ref name="Grass automapper">[https://github.com/ddnet/ddnet/blob/0abb32514b6e9643154dc6bcdc4a754defbf2321/data/editor/automap/grass_main.rules#L1 Grass automapper]</ref>:
Grass automapper<ref name="Grass automapper">[https://github.com/ddnet/ddnet/blob/0abb32514b6e9643154dc6bcdc4a754defbf2321/data/editor/automap/grass_main.rules#L1 Grass automapper]</ref>:
</div>


<pre>
<pre>
Line 31: Line 24:
</pre>
</pre>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Processing"></span>
==Processing==
==Обработка==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Автомаппер будет считывать файл правил и сканировать каждую '''позицию''' слоя. Если для выбранного тайла выполняются все правила, тайл будет размещён в просканированной позиции автомаппера. Если совпадают несколько тайлов и их правила, применяется только последнее правило (так как оно перезапишет остальные). [[#Syntax|Если не отключено]], автомаппер сначала поместит свои изменения в буфер, а затем применит их.
The automapper will read the rules file and scan each '''position''' of the layer. If every rule of a selected tile applies, the tile will be placed at the scanned position of the automapper. If multiple tiles and their rules match, only the latest rule will apply (because it will be overwritten). [[#Syntax|Unless deactivated]], the automapper will put it's changes into a buffer first and apply them afterwards.
</div>
[[File:Indices.png|thumb|227x227px|<span lang="en" dir="ltr" class="mw-content-ltr">Tileset indices overview</span>]]


<div lang="en" dir="ltr" class="mw-content-ltr">
[[File:Indices.png|thumb|227x227px|Обзор индексов набора тайлов]]
==Tile indices==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Tile_indices"></span>
Every tileset has 16 rows and 16 columns and each tile can be addressed by its index. The index of a tile is a direct result of it's position and can be calculated by <code>index = 16 * row + column</code>, where row and column is between 0 and 15. The tile at index 0 is always considered <code>EMPTY</code>. Usually this part doesn't contain textures in tilesets. Each other tile is always considered <code>FULL</code>, even if it doesn't contain any textures and is fully transparent.
==Индексы тайлов==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Каждый набор тайлов содержит 16 строк и 16 столбцов, и каждый тайл можно адресовать по его индексу. Индекс тайла напрямую зависит от его позиции и может быть вычислен по формуле <code>index = 16 * row + column</code>, где значения row и column находятся в пределах от 0 до 15. Тайл с индексом 0 всегда считается <code>EMPTY</code>. Обычно эта часть не содержит текстур в наборах тайлов. Каждый другой тайл всегда считается <code>FULL</code>, даже если он не содержит текстур и полностью прозрачен.
The index is used for the <code>INDEX</code> keyword of the automapper.
</div>  


<div lang="en" dir="ltr" class="mw-content-ltr">
Индекс используется для ключевого слова <code>INDEX</code> в автомаппере.
==Syntax==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Syntax"></span>
'''Naming your automapper-rule''':
==Синтаксис==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Название вашего правила автомаппера''':
Similar to ini-files, you can create your own section for your automapper rule:
 
</div>
Аналогично ini-файлам, вы можете создать свой собственный раздел для правила автомаппера:


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>[your-automapper-rule]</code>
<code>[your-automapper-rule]</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Несколько выборок индексов с последующими правилами могут входить в раздел.
Multiple index selections followed by rules can be part of a section.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Написание комментария''':
'''Writing a comment''':
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>#this is a comment</code>
<code>#this is a comment</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Выбор тайла, который вы хотите разместить''':
'''Selecting a tile you want to place''':
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>INDEX 42</code>  
<code>INDEX 42</code>
</div>  


<div lang="en" dir="ltr" class="mw-content-ltr">
Это '''выбирает''' тайл 42 (то есть 3-я строка и 11-й столбец). Несколько индексов можно выбрать, добавляя между ними <code>OR</code>:
This '''selects''' tile 42 (meaning the 3rd row and 11th column. Multiple indices can be selected by adding an <code>OR</code> between each index:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>INDEX 42 OR 43</code>
<code>INDEX 42 OR 43</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Изменение тайла''':
'''Modifying the tile''':
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>Index 42 XFLIP YFLIP ROTATE</code>
<code>Index 42 XFLIP YFLIP ROTATE</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>XFLIP</code> зеркально отражает тайл по вертикали, а <code>YFLIP</code> — по горизонтали. <code>ROTATE</code> поворачивает тайл на 90° один раз.
<code>XFLIP</code> mirrors the tile vertically and <code>YFLIP</code> mirrors the tile horizontally. <code>ROTATE</code> rotates the tile a single time by 90°.
 
</div>
Если вы хотите повернуть тайл на 180°, достаточно установить <code>XFLIP</code> и <code>YFLIP</code>, '''но не''' <code>ROTATE</code>.


<div lang="en" dir="ltr" class="mw-content-ltr">
Если вы хотите повернуть на 270°, нужно установить <code>XFLIP</code>, <code>YFLIP</code> и <code>ROTATE</code>.
IF you want to rotate a tile by 180°, you only need to set <code>XFLIP</code> and <code>YFLIP</code> '''but not''' <code>ROTATE</code>.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Модификации тайла всегда находятся в той же строке, что и выбор.
If you want to rotate by 270°, you need to set <code>XFLIP</code>, <code>YFLIP</code> and <code>ROTATE</code>.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Если вы хотите выбрать тайл без поворотов и отражений, можно использовать <code>NONE</code>. В противном случае будут выбраны все тайлы с указанным <code>INDEX</code>.
Tile modifications are always in the same line as the selection.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Правило для размещения тайла''':
'''Rule for placing the tile''':
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Выбранный тайл размещается, если выполняются '''все''' следующие правила.
The selected tile gets placed if '''all''' following rules apply.
Правило для размещения тайла всегда начинается с координат, за которыми следует правило:
A rule for placing the tile always starts with coordinates followed by a rule:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>POS 0 -1 FULL</code>
<code>POS 0 -1 FULL</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Это правило выбирает тайл с координатой ''X'' 0 и ''Y'' -1 '''относительно''' [[#Processing|текущей позиции сканирования]] автомаппера. Если тайл '''над''' позицией сканирования равен <code>FULL</code>, то '''выбранный тайл''' будет размещён (если выполнятся все следующие правила). Если тайл равен <code>EMPTY</code>, он размещён не будет.
This rule selects the tile with ''X'' coordinate 0 and ''Y'' coordinate -1 '''relative to the''' [[#Processing|scanning position]] of the automapper. If the tile '''above''' the scanning position is <code>FULL</code>, the '''selected tile''' will be placed (if all following rules apply). If it's <code>EMPTY</code>, it won't be placed.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Вместо использования <code>FULL</code> или <code>EMPTY</code> можно выбрать другой тайл с помощью ключевого слова <code>INDEX</code>:
Instead of using <code>FULL</code> or <code>EMPTY</code>, you can select another tile with the <code>INDEX</code> keyword:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>POS 0 -1 INDEX 12</code>
<code>POS 0 -1 INDEX 12</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Если тайл над [[#Processing|позицией сканирования]] имеет индекс 12, он будет размещён. Несколько индексов можно выбрать, добавляя между ними <code>OR</code>:
If the tile above the [[#Processing|scanning position]] has index 12, it will be placed. Multiple indices can be selected by adding an <code>OR</code> between each index:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>POS 0 -1 INDEX 12 OR 13</code>
<code>POS 0 -1 INDEX 12 OR 13</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Аналогично, для исключения тайла можно использовать <code>NOTINDEX</code>.
Similarly <code>NOTINDEX</code> can be used to exclude a tile.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Случайное правило''':
'''Random rule''':
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Вы можете сделать так, чтобы выбранный тайл применялся случайным образом, добавив случайное правило:
You can make a selected tile randomly apply to rules by adding a random rule:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>RANDOM 20%</code>
<code>RANDOM 20%</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Случайное правило ожидает значение от 0% до 100%. Это значение представляет вероятность размещения тайла<ref name="RandomRule">[https://github.com/ddnet/ddnet/blob/0abb32514b6e9643154dc6bcdc4a754defbf2321/src/game/editor/auto_map.cpp#L312 Реализация случайного правила]</ref>.
The random rule expects a value between 0% and 100%. This value represents the probability, that a tile is placed<ref name="RandomRule">[https://github.com/ddnet/ddnet/blob/0abb32514b6e9643154dc6bcdc4a754defbf2321/src/game/editor/auto_map.cpp#L312 Random rule implementation]</ref>.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Если указать ''значение'' '''без''' символа <code>%</code>, вероятность будет рассчитываться не в процентах, а по следующей формуле:
If you put a ''value'' into it '''without''' a <code>%</code> symbol, the probability will not be parsed in terms of percentages, but with this formula:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>percentage = 1.0 / value</code>
<code>percentage = 1.0 / value</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Это позволяет задавать более редкое размещение тайлов с вероятностями от 0% до 1% при ''значении'' > 100.
This allows for rarer tile placements with probabilities between 0% and 1% and a ''value'' > 100.
 
</div>
Например, <code>RANDOM 150</code> будет иметь вероятность <code>1.0 / 150 ≈ 0.67</code> (процента).
 
'''Modulo''':
 
С помощью оператора <code>MODULO x\_pattern y\_pattern x\_offset y\_offset</code> можно создавать повторяющиеся шаблоны в зависимости от координат X и Y тайла. Например, <code>MODULO 2 3 0 -1</code> использует \[[https://en.wikipedia.org/wiki/Modular\_arithmetic](https://en.wikipedia.org/wiki/Modular_arithmetic) модульную арифметику], чтобы задать каждый второй тайл по оси X (<code>x\_pattern</code>) и каждый третий тайл по оси Y (<code>y\_pattern</code>). Третий и четвёртый параметры позволяют смещать координаты X (здесь 0) и Y (здесь -1), изменяя положение шаблона. Тайл будет размещён только если выполняются оба следующих правила:
 
<code>(x + x_offset) % x_pattern == 0</code>
 
<code>(y + y\_offset) % y\_pattern == 0</code>


<div lang="en" dir="ltr" class="mw-content-ltr">
Здесь <code>%</code> — это [https://en.wikipedia.org/wiki/Modulo оператор modulo].
For example <code>RANDOM 150</code> will have a probability of <code>1.0 / 150 ≈ 0.67</code> (percent).
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''Правило условия по умолчанию''':
'''Default condition rule''':
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
По умолчанию игра предполагает, что каждое правило применяется к полному тайлу, то есть всегда подразумевается следующее правило:
By default the game assumes, that you want to apply each rule to a full tile, meaning that the following rule is always implied:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>POS 0 0 FULL</code>
<code>POS 0 0 FULL</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Вы можете отключить это, добавив следующую строку '''под''' выбором тайла:
You can deactivate this by adding the following line '''under''' the tile selection:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>NoDefaultRule</code>
<code>NoDefaultRule</code>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''NewRun''':
'''NewRun''':
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Добавление <code>NewRun</code> в раздел заставит раздел выполняться дополнительно столько раз, сколько раз этот ключевой слово добавлено в раздел. Это можно использовать для установки базовых тайлов в первом проходе и более сложных — во втором.
Adding <code>NewRun</code> in a section will make the section run an additional time for each time this keyword gets added to the section. This can be used to set some basic tiles in the first run, and more complex ones in the second.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
'''NoLayerCopy''':
'''NoLayerCopy''':
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Добавление <code>NoLayerCopy</code> в раздел приведёт к выполнению [https://en.wikipedia.org/wiki/In-place_algorithm алгоритма на месте]. Это значительно улучшит производительность, так как автомаппер не будет копировать свои изменения в буферную память перед применением. Но это может вызвать нежелательные побочные эффекты!
Adding <code>NoLayerCopy</code> in a section will cause it to run [https://en.wikipedia.org/wiki/In-place_algorithm in-place]. This can drastically improve performance, because the automapper doesn't copy it's changes into buffer memory before applying it. But it can cause unintended side effects!
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Tools"></span>
==Tools==
==Инструменты==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Существуют некоторые инструменты для создания правил автомаппера:
Some tools in order to create automapper rules exist:
*[https://github.com/AssassinTee/SimpleDDNetAutomapper SimpleDDNetAutomapper] — небольшое приложение с интерфейсом, которое предлагает более удобный подход для очень простых правил и тайлсетов. Не поддерживает случайность или правила <code>POS INDEX</code>, но поддерживает <code>EMPTY</code> и <code>FULL</code>.
* [https://github.com/AssassinTee/SimpleDDNetAutomapper SimpleDDNetAutomapper] - a small UI application, which tries a more user friendly approach for very basic rules and tilesets. It does not support randomness, or <code>POS INDEX</code> rules, but <code>EMPTY</code> and <code>FULL</code>.
*[https://github.com/k2d222/twwe Teeworlds Web Editor] — редактирование автомаппера и просмотр в реальном времени<ref name="twwe">[https://github.com/k2d222/twwe/blob/main/README.md#unique-features Уникальные функции Teeworlds web editor]</ref>.
* [https://github.com/k2d222/twwe Teeworlds Web Editor] - Automapper edit and live-preview<ref name="twwe">[https://github.com/k2d222/twwe/blob/main/README.md#unique-features Teeworlds web editor unique features]</ref>.
*[https://github.com/Aerll/rpp rpp] rules++ — небольшой эксперимент, направленный на то, чтобы сделать мапперов максимально ленивыми, раскрывая полный потенциал правил DDNet. Предназначен быть простым, читаемым и, что самое главное, правильным, всё остальное не важно<ref name="rpp">[https://github.com/Aerll/rpp/blob/main/README.md#about Правила++ о проекте]</ref>.
* [https://github.com/Aerll/rpp rpp] - rules++ is a small experiment, aiming to make mappers utterly lazy, by unlocking the full potential of DDNet's rules. It is meant to be simple, readable and most importantly correct, everything else is irrelevant<ref name="rpp">[https://github.com/Aerll/rpp/blob/main/README.md#about rules++ about]</ref>.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Resources"></span>
==Resources==
==Ресурсы==
</div>




<references />
<references />

Latest revision as of 15:17, 15 June 2025

"Автомаппер" - это инструмент, облегчающий создание карт. Вместо того чтобы вручную расставлять круглые края фриза, вы можете сделать простое правило автомаппера, которое применяет правила ко всему слою тайлов. Каждое правило создается для определенного набора тайлов, и каждый набор тайлов может иметь несколько правил. Все правила находятся в 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].

Ресурсы