Rimworld Mod教程 武器Weapon篇 近战章 第一讲:长剑与等离子剑,tools与extraMeleeDamages
本讲以LongSword【长剑】讲解一把最简单的近战武器如何制作。而复杂的部分要留在本章的后面几讲来剖析。 考虑到很多人喜欢做武器,甚至可能跳过前面的片段直接看到本章节,让我们重新复习一下如何从0开始制作mod。 首先启动合适的编辑器,找到文件内查找功能,
路径设置为这游戏的简中翻译包(Steam\steamapps\common\RimWorld\Data\Core\Languages\ChineseSimplified (简体中文).tar,注意需要解压) 查找内容为长剑 能看到搜索结果 如果你不确定哪个是长剑物品,哪个是长剑相关的其他东西(比如合成配方,研究项目之类的),就去看搜索结果所在的文件位置,肯定是要在ThingDef里面的。 经过上述操作,我们就能得到长剑的defName:MeleeWeapon_LongSword 再次搜索该defName,我们就能找到长剑def所在的xml文件了
接下来我们看到Core/ThingDefs_Misc/Weapons/MeleeMedieval.xml,line120开始就是长剑了
但在一切开始之前,我们从ParentName="BaseMeleeWeapon_Sharp_Quality"开始,不断追溯父定义。 首先BaseMeleeWeapon_Sharp_Quality这一层让武器有了品质的区分 找到一个合适的父定义能省不少事,我稍微列一下 BaseMeleeWeapon_Sharp_Quality:有品质和艺术区分的锐器近战武器 BaseMeleeWeapon_Blunt_Quality:有品质和艺术区分的钝器近战武器 上面这两个父级是: BaseMeleeWeapon_Sharp:没有品质和艺术区分的锐器近战武器 BaseMeleeWeapon_Blunt:没有品质和艺术区分的钝器近战武器 上面两个父级是: BaseMeleeWeapon:没有锐器和钝器来区分,需要手动填写weaponClasses,同时也少了合成材料的筛选,一般来说不会用到这一个,用上面四种就够了。这一级提供了近战武器相关的基础东西,但我就不细讲了,你们直接拿来用就可以。
再往父级找,就是BaseWeapon 它有一个非常重要的comp就是CompEquippable。如果处于什么原因你不想直接使用原版的这些父定义,请一定记得要把thingClass改为ThingWithComps及其子类,然后加上这一个comp。 就是这个Comp使得你的武器可以被小人拿在手上。 哦对了,这个父定义还提到了武器扔在地上会有最高35°的随机旋转角度
好了,现在开始正式地分析长剑
我们只看重要的几个东西 >weaponTags:一个字符串的list,如果敌人拥有相同的weaponTag,那么敌人在生成时就有可能选择该武器。 >equippedAngleOffset:武器的旋转角度,顺时针为正方向。该旋转只在小人手持时生效,在地上是不生效的。 >equippedDistanceOffset:这条长剑没有,我就顺带补充一下,表示的是手持时武器贴图的偏移量,填的内容是格数。偏移方向由小人瞄准方向决定。 >tools:近战的重头戏,它是一个list,内容是若干个Tool,接下来我们详细讲一下Tool
这里就是游戏里长剑对应的三个Tools
>>label:填一个文本,可以翻译。 >>capacities:填一些“ToolCapacityDef”,一般情况下只填一个,多个的话就是每次攻击时选一个。后文会列出常用的ToolCapacityDef。 >>power:单次攻击基础伤害。这个伤害还会受到很多因素影响,从而造成最终伤害。比如武器品质,武器材质什么的都会影响。 >>cooldownTime:近战后摇,也会受到很多因素影响。单位是秒。 再补充一些额外的东西。 >>armorPenetration:伤害穿透。在默认情况下,其值为伤害的0.015倍。手动指定时,就是指定的值,并且会乘以“MeleeWeapon_DamageMultiplier”【近战伤害乘数】 >>chanceFactor:权重乘数,每个tool的基础权重由其单次伤害决定,然后会再乘以这个值,默认值是1。 >>soundMeleeHit:填一个SoundDef,表示命中之后播放该音效。 >>soundMeleeMiss:填一个SoundDef,表示没有命中时播放的音效。 >>extraMeleeDamages:ExtraDamage的List,表示额外伤害,这里再引入一个新的例子。MeleeWeapon_PlasmaSword等离子剑的Tools内:
看到这里的extraMeleeDamages里的元素,每个代表一种额外伤害的属性 >>>def:填一个DamageDef,Flame是那个带点燃的烧伤,详细可以看我另一个文章【RimWorld 代码机制:伤害机制与伤害类型】 >>>amount:伤害量,跟上面的amount类似 >>>armorPenetration:穿甲,跟上面的armorPenetration类似,不填的话也是自动生成 >>>chance:默认值是1,如果填了的话就是填0~1,表示该额外伤害的触发概率
综上所述,等离子剑的效果就是,当使用剑头或剑刃进行攻击时,有50%概率触发额外的10点火焰伤害,该伤害会引燃目标。 如果有extraMeleeDamages有多个元素,就会分别进行判定 需要注意的是,必须主攻击命中了,额外伤害才会开始判定。
这里再给一些capacities里能填的东西: Stab【刺】,Cut【割】,Blunt【钝击】,Demolish【拆除】,KickMaterialInEyes【扬沙】,Poke【捅】,Scratch【抓】,ScratchToxic【毒击】,Bite【咬】,ToxicBite【蛰】 比如edge+Cut在上面长剑的页面写的是剑刃(割) 这些capacities具体的细节我们在后续有机会再分析。
我得提一下,所有加群的人必须查看群公告,然后按照指定的规则来提问。 提问的时候必须附上你的代码和游戏给你的报错内容。 不要忽视红字在解决问题时的重要性,它能提供最直观的错误信息。 也不要把你的代码藏着掖着,在看不到你的代码的情况下解答者只能用猜的。
我的教学工作和答疑工作都是无偿的,就请给到我基本的尊重,我不是你解答问题的工具。