自動貼圖
自動貼圖是一個方便作者製作地圖的工具。只需在貼圖層簡單地制定一些貼圖規則編纂成組運用,就能省去諸如手動在凍結區域邊角放置圓角貼圖此類的麻煩。每組貼圖規則需要指定一個貼圖集(tileset),一般由一個導入的貼圖資源文件構成;單個貼圖集可以預設多種規則以備選用。所有規則文件位於遊戲路徑下data/editor/automap/[1][2]
貼圖規則文件
作為貼圖集的圖片資源文件,其自動貼圖規則通常會寫在另一個文本文件中,後綴固定為.rules,規則文件名必須和資源文件名相同;每個貼圖規則文件內可以寫入多組自動貼圖規則。此規則文件大致遵循 INI 文件格式,文件中每組貼圖規則以方括號括住規則組的名字為首行,並附帶多行具體規則於其後,首行語法為[规则组名]
。例如,在文件grass_main.rules中,有一組名為Grass 的貼圖規則,它在文件中以 [Grass]
開頭。要使用這組規則,您需要在地圖編輯器中創建一個使用grass_main文件作為貼圖集的貼圖層:首先要新建一個貼圖層(tile layer),然後右鍵單擊此貼圖層並選擇資源圖片(Image)為grass_main,在此圖層畫好主體部分後,再次打開剛才的右鍵菜單並點擊Auto Rule,然後在下拉選項中選擇Grass規則組,最後點擊Auto map自動貼圖。
強調:貼圖規則的文件名必須和貼圖資源的文件名保持一致。
示例的 Grass 自動貼圖規則如下[3]:
[Grass] Index 1 #top Index 16 Pos 0 -1 EMPTY ...
貼圖規則執行過程
自動貼圖時,從上往下讀取規則組的每條規則依次自動執行替換:
- 規則一般以方塊編號開頭,並尾隨一系列位置關係描述等替換條件;
- 將圖層中同時符合此條規則所有替換條件的圖塊替換成句首指定的編號貼圖(此時可能會覆蓋先前規則替換好的方塊位置,最後表現為同一位置只執行了最後一條規則)。
除非禁用,否則會先將替換貼圖的步驟放入緩存,在同組規則執行時,先前執行規則發生的改變不會立即影響後續規則的位置判斷,最後再將所有變化應用於圖層。

方塊索引
每個資源文件導入後會被分割成16行16列的貼圖集,以左上角為0號方塊,之後從左往右由0到15依次給第一行方塊編號,每行編號完畢再到下一行,第二行左邊開頭為16號方塊,依此類推。容易看出方塊每次向右一格+1,向下一格+16,對應計算公式為编号 = 16 * 行数 + 列数
(注意第一行和第一列在計算機中默認為第0行和第0列)。資源文件中0號方塊的位置通常留空,貼圖規則會將它稱為EMPTY
(空);其餘位置的方塊無論置空與否都會被當作FULL
(滿)。
在規則文件中,編號的關鍵字是INDEX
。
語法
將您的規則組命名
與INI文件類似,您可以給貼圖規則分段:
[您的规则组名]
對單次被選中的方塊編號以及其位置描述可以作為一段。
如何注釋
請使用#號開頭,例如:
#这是一条注释。
選擇要用於貼圖替換的方塊編號
INDEX 42
這一行選中了42號方塊(第三行第11列)。使用OR
可以同時選中多個編號,例如同時選中42和43號:
INDEX 42 OR 43
對貼圖微調
將42號方塊做水平和豎直翻轉:Index 42 XFLIP YFLIP ROTATE
XFLIP
水平翻轉;
YFLIP
豎直翻轉;
ROTATE
90°旋轉。
如果您要將方塊旋轉180°,可以同時使用XFLIP
和YFLIP
,而不是ROTATE
。
如果您要將方塊旋轉270°,可以同時使用XFLIP
、YFLIP
和ROTATE
。
方塊必須在選中的同時進行微調。
替換條件
在編號選擇的語句下方有一系列替換條件,如果一個圖塊符合所有條件就會被該編號貼圖替換。 例如下方採用相對坐標的位置描述:
POS 0 -1 FULL
這條規則描述替換條件是在X坐標為0、Y坐標為-1的圖塊屬性是FULL
,也就是說相對位置上方一格有FULL
圖塊的方塊會被編號方塊替換(其它位置條件也滿足時)。如果上方是EMPTY
則不會。
除了FULL
或EMPTY
之外,您還可以直接指定方塊編號INDEX
:
POS 0 -1 INDEX 12
如果相對位置上方存在12號方塊,就會滿足替換條件。使用OR
連接編號來擴大判斷條件,例如判斷上方有沒有12或13號方塊其中之一:
POS 0 -1 INDEX 12 OR 13
類似可以用NOTINDEX
來反選一個編號。
隨機規則
通過添加隨機規則,您可以讓一些方塊隨機貼圖:
RANDOM 20%
隨機規則可以從0到100%取值,這個值是此編號的替換概率[4]
如果您在取值的時候忘記添加%
,概率計算時不會除以100,而是按照如下公式:
概率 = 1.0 / 取值
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).
默認規則
遊戲會自動在所有規則下默認添加一條替換條件,用於判斷被替換處原本是否有方塊,如果原本就是空的,默認也不會更改此處。即默認添加如下條件:
POS 0 0 FULL
如果你想把圖層空白處也納入替換範圍,可以添加下方的替換條件:
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!
工具
下面是一些方便製作貼圖規則的工具:
- SimpleDDNetAutomapper:一個帶圖形界面的簡單應用,有助於處理基本貼圖規則和貼圖集。但是它只支持
EMPTY
和FULL
,不支持隨機貼圖和POS INDEX
規則。 - Teeworlds Web Editor:自動貼圖編輯和實時預覽[5]。
- rpp:rules++是一個小嘗試,致力於通過激發DDNet貼圖規則的潛能把地圖作者變成懶狗。也就是說它非常簡單、易讀並極重視正確性,就別管其它了。[6].