自動貼圖
自動貼圖是一個方便作者製作地圖的工具。只需在貼圖層簡單地制定一些貼圖規則編纂成組運用,就能省去諸如手動在凍結區域邊角放置圓角貼圖此類的麻煩。每組貼圖規則需要指定一個貼圖資源文件,但是單個貼圖資源文件可以預設多種規則以備選用。所有規則文件位於遊戲路徑下data/editor/automap/[1][2]
貼圖規則文件
貼圖資源文件的自動貼圖規則通常會寫在一個文本文件中,後綴固定為.rules,規則文件名必須和資源文件名相同;每個貼圖規則文件內可以寫入多組自動貼圖規則。此規則文件大致遵循 INI 文件格式,文件中每組貼圖規則以方括號括住規則組的名字為首行,並附帶多行具體規則於其後,首行語法為[规则组名]
。例如,在文件grass_main.rules中,有一組名為Grass 的貼圖規則,它在文件中以 [Grass]
開頭。要使用這組規則,您需要在地圖編輯器中創建一個使用grass_main文件作為貼圖資源的貼圖層:首先要新建一個Special:MyLanguage/Mapping#Layers 貼圖層(tile layer),然後右鍵單擊此貼圖層並選擇資源圖片(Image)為grass_main,在此圖層畫好主體部分後,再次打開剛才的右鍵菜單並點擊Auto Rule,然後在下拉選項中選擇Grass規則組,最後點擊Auto map自動貼圖。
自動貼圖的文件名必須和方塊集的文件名保持一致。
Grass 自動貼圖[3]:
[Grass] Index 1 #top Index 16 Pos 0 -1 EMPTY ...
處理過程
自動貼圖會讀取規則文件並掃描圖層的每個位置。如果所選方塊的所有規則都適用,則該方塊將被放置在自動貼圖掃描的位置。如果多個方塊及其規則匹配,則只有最新的規則會生效(因為之前的規則會被覆蓋)。除非被禁用,否則自動貼圖會將其更改先放入緩衝區,然後再應用。

方塊索引
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 index = 16 * row + column
, where row and column is between 0 and 15. The tile at index 0 is always considered EMPTY
. Usually this part doesn't contain textures in tilesets. Each other tile is always considered FULL
, even if it doesn't contain any textures and is fully transparent.
The index is used for the INDEX
keyword of the automapper.
語法
Naming your automapper-rule:
Similar to ini-files, you can create your own section for your automapper rule:
[your-automapper-rule]
Multiple index selections followed by rules can be part of a section.
Writing a comment:
#this is a comment
Selecting a tile you want to place:
INDEX 42
This selects tile 42 (meaning the 3rd row and 11th column. Multiple indices can be selected by adding an OR
between each index:
INDEX 42 OR 43
Modifying the tile:
Index 42 XFLIP YFLIP ROTATE
XFLIP
mirrors the tile vertically and YFLIP
mirrors the tile horizontally. ROTATE
rotates the tile a single time by 90°.
IF you want to rotate a tile by 180°, you only need to set XFLIP
and YFLIP
but not ROTATE
.
If you want to rotate by 270°, you need to set XFLIP
, YFLIP
and ROTATE
.
Tile modifications are always in the same line as the selection.
Rule for placing the tile:
The selected tile gets placed if all following rules apply. A rule for placing the tile always starts with coordinates followed by a rule:
POS 0 -1 FULL
This rule selects the tile with X coordinate 0 and Y coordinate -1 relative to the scanning position of the automapper. If the tile above the scanning position is FULL
, the selected tile will be placed (if all following rules apply). If it's EMPTY
, it won't be placed.
Instead of using FULL
or EMPTY
, you can select another tile with the INDEX
keyword:
POS 0 -1 INDEX 12
If the tile above the scanning position has index 12, it will be placed. Multiple indices can be selected by adding an OR
between each index:
POS 0 -1 INDEX 12 OR 13
Similarly NOTINDEX
can be used to exclude a tile.
Random rule:
You can make a selected tile randomly apply to rules by adding a random rule:
RANDOM 20%
The random rule expects a value between 0% and 100%. This value represents the probability, that a tile is placed[4].
If you put a value into it without a %
symbol, the probability will not be parsed in terms of percentages, but with this formula:
percentage = 1.0 / value
This allows for rarer tile placements with probabilities between 0% and 1% and a value > 100.
For example RANDOM 150
will have a probability of 1.0 / 150 ≈ 0.67
(percent).
Default condition rule:
By default the game assumes, that you want to apply each rule to a full tile, meaning that the following rule is always implied:
POS 0 0 FULL
You can deactivate this by adding the following line under the tile selection:
NoDefaultRule
NewRun:
Adding NewRun
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.
NoLayerCopy:
Adding NoLayerCopy
in a section will cause it to run 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!
工具
Some tools in order to create automapper rules exist:
- SimpleDDNetAutomapper - a small UI application, which tries a more user friendly approach for very basic rules and tilesets. It does not support randomness, or
POS INDEX
rules, butEMPTY
andFULL
. - Teeworlds Web Editor - Automapper edit and live-preview[5].
- 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[6].