DDNET 知识库

中文 Wiki

DDNet Workshop 中文知识库,收录 79 Wiki 词条,涵盖游戏技巧、机制等内容,提升广大玩家游戏理解

自动地图 Automapper
地图制作与外部工具•地图制作与外部工具

自动地图 Automapper

DDNet 自动映射工具使用指南,包含规则文件语法和配置方法

自动映射规则地图制作工具
2024-01-01

Automapper 是一个让地图制作者更轻松制作地图的工具。你可以创建一个简单的自动映射规则,将一些规则应用到整个瓷砖层,而不需要手动放置冻结区域的圆角边缘。

每个自动映射器都是为特定的瓷砖集制作的,每个瓷砖集可以有多个自动映射器。

所有自动映射器规则都位于你的 teeworlds 路径下的 data/editor/automap/ 目录中。


规则文件

每个有自动映射器的瓷砖集都有一个 tileset.rules 文本文件。每个 tileset.rules 文件可以包含多个自动映射器。

规则文件大致遵循 INI 文件格式。

自动映射器命名

在文件中,每个自动映射器以 [automapper_name] 行开始。

示例:在 grass_main.rules 文件中,有一个叫做 Grass 的自动映射器,它在文件中以 [Grass] 行开始。

使用自动映射器

  1. 在地图编辑器中创建一个使用 grass_main 瓷砖集的瓷砖层
  2. 右键点击图层,然后点击 Auto map
  3. 要开始自动映射,点击 Grass

注意:自动映射器的文件名必须与瓷砖集的文件名一致。

Grass 自动映射器示例:

ini
[Grass]
Index 1
#top
Index 16
Pos 0 -1 EMPTY
...

处理流程

自动映射器会读取规则文件并扫描图层的每个位置。如果所选瓷砖的每条规则都适用,该瓷砖就会被放置在自动映射器扫描的位置。

  • 如果多个瓷砖及其规则都匹配,只有最后的规则会生效(因为它会覆盖前面的)
  • 除非停用,否则自动映射器会先将其更改放入缓冲区,然后再应用它们

瓷砖索引

每个瓷砖集有 16 行和 16 列,每个瓷砖都可以通过其索引来寻址。

瓷砖的索引是其位置的直接结果,可以通过以下公式计算:

index = 16 * row + column

其中行和列在 0 到 15 之间。

特殊索引:

索引含义
0总是被认为是 EMPTY(空的)。通常这部分在瓷砖集中不包含纹理
其他总是被认为是 FULL(满的),即使它不包含任何纹理且完全透明

索引用于自动映射器的 INDEX 关键字。


语法

命名你的自动映射器规则

类似于 ini 文件,你可以为你的自动映射器规则创建自己的节:

ini
[your-automapper-rule]

多个索引选择后跟规则可以是一个节的一部分。

编写注释

ini
# this is a comment

选择你想要放置的瓷砖

ini
INDEX 42

这会选择瓷砖 42(意味着第 3 行第 11 列)。

可以通过在每个索引之间添加 OR 来选择多个索引:

ini
INDEX 42 OR 43

修改瓷砖

ini
Index 42 XFLIP YFLIP ROTATE
修饰符效果
XFLIP垂直镜像瓷砖
YFLIP水平镜像瓷砖
ROTATE将瓷砖旋转 90°

旋转组合:

  • 180°:设置 XFLIP 和 YFLIP,但不要设置 ROTATE
  • 270°:设置 XFLIP、YFLIP 和 ROTATE

瓷砖修改总是与选择在同一行。


放置瓷砖的规则

如果所有以下规则都适用,所选瓷砖就会被放置。放置瓷砖的规则总是以坐标开始,后跟一个规则:

ini
Pos 0 -1 FULL

这条规则选择相对于自动映射器扫描位置 X 坐标为 0、Y 坐标为 -1 的瓷砖。如果扫描位置上方的瓷砖是 FULL,所选瓷砖就会被放置(如果所有后续规则都适用)。如果是 EMPTY,就不会被放置。

使用 INDEX 关键字

除了使用 FULL 或 EMPTY,你还可以使用 INDEX 关键字选择另一个瓷砖:

ini
Pos 0 -1 INDEX 12

如果扫描位置上方的瓷砖索引为 12,它就会被放置。

可以通过在每个索引之间添加 OR 来选择多个索引:

ini
Pos 0 -1 INDEX 12 OR 13

同样可以使用 NOTINDEX 来排除一个瓷砖。

随机规则

你可以通过添加随机规则使所选瓷砖随机应用规则:

ini
Random 20%

随机规则期望一个 0% 到 100% 之间的值。这个值代表瓷砖被放置的概率。

高级概率:

如果你输入一个没有 % 符号的值,概率将不会按百分比解析,而是使用以下公式:

percentage = 1.0 / value

这允许概率在 0% 到 1% 之间且值 > 100 的更稀有的瓷砖放置。

示例:Random 150 将有 1.0 / 150 ≈ 0.67% 的概率。

取模运算

使用 Modulo x_pattern y_pattern x_offset y_offset 运算符,你可以根据瓷砖的 X 和 Y 坐标创建重复图案。

示例:Modulo 2 3 0 -1

使用模运算来设置:

  • X 轴上每隔一个瓷砖(x_pattern)
  • Y 轴上每隔两个瓷砖(y_pattern)

第三个和第四个参数可用于偏移 X(此处为 0)和 Y(此处为 -1)坐标并移动图案。

只有当以下两个规则都为真时,瓷砖才会被放置:

(x + x_offset) % x_pattern == 0
(y + y_offset) % y_pattern == 0

这里 % 是取模运算符。

默认条件规则

默认情况下,游戏假设你想将每条规则应用于一个满瓷砖,这意味着以下规则总是隐含的:

ini
Pos 0 0 FULL

你可以通过在瓷砖选择下方添加以下行来停用这个默认规则:

ini
NoDefaultRule

NewRun

在节中添加 NewRun 会使该节每次添加此关键字时额外运行一次。这可用于在第一次运行中设置一些基本瓷砖,在第二次运行中设置更复杂的瓷砖。

NoLayerCopy

在节中添加 NoLayerCopy 会导致它原地运行。这可以大幅提高性能,因为自动映射器不会在应用更改之前将其复制到缓冲内存中。

警告:但它可能会导致意外的副作用!


工具

一些用于创建自动映射器规则的工具:

工具说明
SimpleDDNetAutomapper一个小型 UI 应用程序,尝试为非常基本的规则和瓷砖集提供更友好的方法。它不支持随机性或 POS INDEX 规则,但支持 EMPTY 和 FULL
Teeworlds Web Editor自动映射器编辑和实时预览
rpprules++ 是一个小实验,旨在通过释放 DDNet 规则的全部潜力让地图制作者变得极其懒惰。它旨在简单、可读,最重要的是正确

资源

  1. Automapper tutorial
  2. Automapper files
  3. Grass automapper
  4. Random rule implementation
  5. Teeworlds web editor unique features
  6. rules++ about

小提示

  • 自动映射器规则文件位于 data/editor/automap/ 目录下
  • 规则文件使用类似 INI 的格式,每个自动映射器以 [名称] 开始
  • 文件名必须与瓷砖集文件名一致
  • 索引 0 表示空瓷砖,其他索引表示满瓷砖
  • 使用 XFLIP、YFLIP、ROTATE 可以变换瓷砖
  • Random 可以添加随机性,Modulo 可以创建重复图案
  • NoLayerCopy 可以提高性能,但可能有副作用
  • 多个匹配规则时,最后一条规则会生效