该文件夹用于存放defs文件,每个文件内会有一个或多个def数据体,以数据库的形式被程序读取来形成mod的新内容。
Defs数据体有ThingDef,HediffDef,RecipeDef等的区分,不同的def对应不同的新内容,如刚才的三个分别对应新物品,新的健康状态和新的制作配方。
Def的内容依附游戏已有的庞大框架,学习他们就是本教程的主体部分,从此我们将用其不断创造新内容来完成我们的mod。不同def以后会分别详细讲解,此章节我先接收所有def共有的数据。
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<DamageDef ParentName="Bomb">
<defName>XFUnused_BombWithDirection</defName>
<label>炸</label>
</DamageDef>
<DamageDef ParentName="Bomb">
<defName>XFUnused_BombWithDirectionSecond</defName>
<label>炸2</label>
<workerClass>MParmorLibrary.Unused.DamageWorker_ExplosionWithDirection</workerClass>
</DamageDef>
</Defs>
第一行是XML固定识别码,不可丢
第二行是Defs,我们所有的def都要被这个东西包住(看第二行与最后一行)
然后中间的就是每一个数据体了
<defName/>
该数据是一个def的基础,表示了一个def的识别名,就像身份证号一样,相同类型的def间defname必须不同,而不同类型间则可以相同。
请注意,这里的特异性不只适用于你的项目,拿thingdef举例,所有已启用的mod中的所有thingdef都不允许重复,当然也不允许与原版的重复——毕竟原版本身就被视为一个mod。
为了解决这种极易出现的bug,所有制作者均会在defname填写时加上一个独特的前缀,如游戏里“钢铁”的defname为”Steel”,那么我得项目里的新钢铁就可以这么写:
<defName>XFMLI_Steel<defName>
其中XF是“旋风”的缩写,MLI是“mod lesson instance”的缩写。
当然,只要你有自己解决重名的方法,如何命名是无所谓的,但整体必须遵循仅由:1.大小写英文(defName是大小写敏感的) 2.数字 3.下划线 组成,且最后一个字不能为数字。而除了程序的这些硬性要求之外,我们还有一些自己的规范:
由于不允许使用空格,在面对多个单词的时候有些人会选择使用下划线:
<defName>XFMLI_Beautiful_flower_for_you</defName>
其实显得过于冗长和散漫,我更推荐用“驼峰命名法”,而下划线应起到类似区分前缀后缀和本体的作用:
<defName>XFMLI_BeautifulFlowerForYou</defName>
将每个单词首字母大写,删去单词间的空格,就成了驼峰命名法。其中首字母大写的为:“大驼峰”,我们使用这种。
首字母小写的为“小驼峰”,大多数的数据名均为这种类型,若制作时报错请检查拼写问题。
<label>flower</label>
<description>A flower for someone you love</description>
以上数据中,label为显示名,description为介绍,两者的填写没有绝对要求,可以使用空格、汉字、特殊字符,但不允许使用{} [] <>。这类文本数据在使用翻译包时将可以被替换,我们会在后面学到。这两种数据允许重名,在部分def中他它们甚至不会被调用。而在需要调用它们的def中,缺少它们将会导致报错。