百合文库
首页 > 网文

Rimworld的MOD教程#2#Defs文件说明

2023-03-09MOD教程环世界Rimworld 来源:百合文库
不管是简单的设计还是负责的设计,Defs是99%都会用到的,这里我会用多个例子来讲解
开发工具
这里先说个题外话,作为MOD开发者,参考原设计是很重要的一环
比如我想自己做个发光的墙,需要复制参考原本的数据,一个一个文件的去翻或者靠记忆是很傻的行为,我们需要一个可以搜索文件内容的工具
我个人是使用IntelliJ IDEA,演示一下几秒内找到数据
先把Core复制到Mod里,只保留Defs和LanguagesChineseSimplified文件夹方便随时参考
然后开始操作
搜索”墙“
根据翻译标准,一般都是<物体ID.label>写的是翻译结果
我找到墙的ID是Wall
(其中可以看到搜索结果非常少)
然后搜索Wall
根据Defs标准,ID都是写为<defName>物体ID</defName>
可以很快锁定到文件
(其中如果双击中间的结果条目,可以直接打开文件并锁定到匹配到的那行)
找到了
Defs的结构
言归正传,先要了解Defs的结构
Defs的结构
如图,1,2,8这3行代码是固定的,直接对着Core参考就行,以后不再说明
定义类型
是决定要定义的东西是什么玩意
比如常见在物体ThingDef,天赋TraitDef...等等
各种类型Defs定义
Name
这个结构体可以作为模板提供给其他定义参考,搭配ParentName来使用的
ParentName
这个结构体参考于哪个定义,搭配Name使用,这叫做继承
这2个属性主要是减少重复定义的工作
简单来说,我复制了一个定义1内容,取名叫A
在这个定义1上写Name=“A”
然后把这个内容复制给另一个定义2
在另个定义2上写ParentName=“A”
然后定义2会先填充定义1的内容,然后把自己定义2的内容覆盖进去
继承效果,游戏会把定义的东西解析为右边
Abstract
这个属性表示该定义是抽象的,并不会被游戏加载,只作用于定义的时候提供模板数据
一般这个东西是搭配上边的Name,ParentName来使用
Abstract的继承效果
defName
这个是该定义的ID,会参会游戏里的各种交互
同一种定义类型,ID是唯一的 
ID测试
然后我们测试一下一些异常的ID写法
4个写法分别做成4个MOD进行加载
然后游戏提示W3出现错误
游戏效果
w1并没有出现,因为w2的ID和w1是一样的
w3报错了,但是不影响游戏,原因是后定义的属性把前边定义的覆盖了,比如这个ID
w4也只有一个,理由同上
所以我们要注意的是,为了避免一切MOD冲突,最好自己定义的ID和Name都做前缀处理
比如原本想写个Wall的,修改为Miao_Wall或者不带下划线也行,这样就不会因为多个MOD导致定义冲突了
一些MOD的有加载顺序也是因为这个理由,需要调用别人的定义或者,必须让其他的先加载就是如此了
不同的定义类型,比如ThingDef和TraitDef,他们的ID可以是相同的
简单的定义例子
知道如何定义一个简单的东西之后,就可以愉快的去拔core里的东西进行修改了
比如我打算做的会发光的墙
参考Wall和StandingLamp
游戏里可以正常建造它
它发光了
简单的例子就到此结束了
Defs涉及的属性非常多,我不会挨个讲解,需要自己去翻译,参考
但是日后有机会我可以提供一个文档

猜你喜欢