rimworld吧 关注:236,437贴子:4,179,070

环世界·制作MOD教程

取消只看楼主收藏回复

欢迎各位想要自己动手制作环世界MOD的人,此贴由简到难,逐步教学武器、盔甲、建筑、AI行为、时间、地图等MOD制作。
时间2023/12/4——武器MOD教学系列一——近战武器
本人自制明朝腰刀MOD——增加佩戴小人进行切割工作的加成,毕竟刀的功能本来就有砍枝开路……
https://steamcommunity.com/sharedfiles/filedetails/?id=3103941986,欢迎您订阅鉴赏。
同时也欢迎您的发电,这将加快本帖和MOD的更新


IP属地:山西1楼2023-12-04 15:42回复
    http://39.104.209.42/zanshang.html


    IP属地:山西2楼2023-12-04 15:45
    收起回复
      mod制作教学一——一个mod应该包含的文件
      About文件——
      包含了About.xml和previwe.png两个文件。
      在About.xml中,将用xml编程语言(不必担心,您只需要拥有电脑的文本文档便可以进行编程和应用)对mod进行说明和上传打包说明;
      previwe.png——很明显,这是一个图片文件,用于mod预览和上传steam创意工坊时自带图片。
      假如您上传.jpg文件,环世界上传时将自动转换为.png文件。


      IP属地:山西3楼2023-12-04 15:51
      回复

        这就是用文本文档打开的About.xml文件(如果您看不到/无法更改.xml文件,请查询如何显示文件后缀)
        第一行声明了xml版本“1.0”和使用编码“utf-8”
        <packageld>命名只允许半角符号(即英文输入法)、必须有.、不允许出现连续的..、建议为制作者名称.mod名</packageld>
        这行代码规定了此mod上传到环世界中的打包名称,此名称必须是唯一的,如果此名称和别的mod打包名称出现冲突,将会造成不可控的结果。
        <author>制作者ID,即您的名字
        <supportedVersions>支持的版本(因为环世界各版本差异巨大,不建议添加过多版本)
        <li>1.4</li>支持1.4版本的环世界,如果你想添加,<li>支持版本号</li>即可
        <description>描述,建议用英文
        Ps:第一次见到xml编程语言就感觉和html一模一样,然后就看到俩人是一样的……


        IP属地:山西4楼2023-12-04 16:02
        收起回复

          About文件夹文件补充图。
          一口气更新这么多,下次继续~
          当然,您的回复和打赏都是对我莫大的鼓励


          IP属地:山西5楼2023-12-04 16:05
          回复
            第二个Deds文件夹为MOD主体,对额外增加的物品的定义、数值、逻辑都在这个文件夹中。
            以腰刀mod为例,因为仅是物品mod,所以Deds文件夹中只包含如下图所示文件——
            即只包含ThingDefs(直译:东西定义)文件夹,在此文件夹中,可包含多种物品的xml定义文件

            (请注意,此文件名与About.xml中的<name>项一致,避免中文!此处中文仅为演示!)
            打开后,您将看到如下图所示的诸多代码
            如果您有时间逐一翻译的话,就会发现,他们用各种<>标签定义了物品的数值和一些行为。
            我们关注的也只是其中一些而已(图太多,放下一贴了)
            再次感谢大家的回复!!!


            IP属地:山西8楼2023-12-04 17:21
            收起回复
              别被如此众多的标签劝退,在制作一款近战武器mod时,所需关注的项目并不多,但我依旧建议去查看游戏自带的ThingDef文件,通常他们在游戏目录/Data/core/Defs中,在这里您可以看到各种示例文件。
              对于近战武器项目,在Defs文件夹中包括了初始棍、短剑…的示例,具体位置如下图
              系统推荐使用浏览器打开,xml文件,但问题在于有些标签会被浏览器隐藏(不知道是触发了关键词还是别的),所以依旧建议用专业编译器或者自带的记事本程序打开,如下便是狼牙棒的定义文件(请允许我这样称呼):

              如下为翻译:
              <?xml version=“1.0” encoding=“utf-8” ?>
              <Defs>
              <ThingDef ParentName=“BaseMeleeWeapon_Blunt_Quality”>
              <defName>MeleeWeapon_Mace</defName>
              <label>梅斯</label>
              <description>一个精致的球杆,专为高效的挥杆和致命的冲击而设计。</description>
              <possessionCount>1</possessionCount>
              <graphicData>
              物品/<texPath>物品/装备/武器近战/狼牙棒</texPath>
              <graphicClass>Graphic_Single</graphicClass>
              </graphicData>
              <uiIconScale>1,2</uiIconScale>
              <techLevel>中世纪的</techLevel>
              <costStuffCount>50</costStuffCount>
              <statBases>
              <WorkToMake>6000</WorkToMake>元
              <Mass>1,25</Mass>
              </statBases>
              <equippedAngleOffset>-65</equippedAngleOffset>
              <recipeMaker>
              <researchPrerequisite>锻造</researchPrerequisite>
              <skillRequirements>
              <Crafting>3</Crafting>
              </skillRequirements>
              <displayPriority>400</displayPriority>元
              </recipeMaker>
              <stuffCategories>
              <li>金属</li>
              <li>
              呃……没翻译完,但以及可以一目了然地看到狼牙棒的一些属性
              不过如前文所说,我们并不关注全部——请见下文


              IP属地:山西11楼2023-12-04 19:37
              回复
                我们首先需要关注的是<description>标签(它通常在<label>标签下面),请允许我用通过英语四级的身份说明,此标签直译为:描述文本。
                顾名思义,在这个标签中的文字是用来描述这个物品的(您可以随便写,不必像我一样依靠翻译软件)
                因此我们可以通过这一标签大致了解我们打开的是什么示例物品的代码,而在我们制作物品时也可以友好地给予他人描述。


                IP属地:山西12楼2023-12-04 19:48
                回复
                  让我们重回制作mod之路。
                  当您想要制作棍棒类武器时,便可以复制+粘贴狼牙棒的代码,然后修改,而像我一样想要制作近程刀具类武器时,则可以参考短剑的代码,它位于前文所述位置,具体文件名为:
                  让我们开始讲述如何修改具体项目。
                  除了简单易懂的<description>标签外,您会发现狼牙棒和短剑代码第一处不同便在<ThingDef ParentName="">里引号中的内容,但他们拥有一致的前半部分,狼牙棒多出了一个单词“Quality”——质量,这表明狼牙棒是靠质量攻击的——很贴合现实。
                  前面一致的部分为“BaseMeleeWeapon_Blunt”(base:基础;melee:近战;weapon:武器;blunt:钝)
                  狼牙棒和短剑都是基础近战钝器(短剑没有锋利属性,所以归为钝器)
                  别的武器示例也会给出其他<ParentName>的值,您可以根据您想制作的武器贴近哪一类,找到示例值并选择使用。
                  接下来迎来一个重要标签<defName>,这是环世界程序调用时的物品身份,必须拥有唯一性,强烈建议用项目或mod名称为前缀即:“ModName_”,下划线后内容可自定义为物品具体名称;
                  <lebel>标签中的内容为物品在游戏中显示的名称(比如在制作台、交易界面),如果为英文名称,建议使用小写,方便注入到游戏自动生成的语句中,游戏程序只会在单词出现在标题和句子开头时自动大写,而不会自动小写,当然,.xml编程语言像html一样支持在标签中使用中文,所以在这个标签中您可以使用中文,使得物品自动出现中文(虽然对外国人不友好,但编程对咱已经很不友好,你可以发现只要会英文,将节省大量时间,所以,管他们呢,用中文吧,后面出bug再说)
                  这就是除武器数值外的几个标签,接下来开始武器数值标签介绍。
                  Ps:假如您搜索.xml语言将会得到如下结果:XML(Extensible Markup Language)是一种类似于 HTML,但是没有使用预定义标记的语言。因此,可以根据自己的设计需求定义专属的标记。这是一种强大将数据存储在一个可以存储、搜索和共享的格式中的方法。
                  所以,上述涉及到的标签均为游戏制作者设定的定义标签,所以您可以使用css应用于上述文档(使用xml-stylesheet去处理),您将得到.xml文件的全部数据,当然,您也可以使用一些工具(如XSLT)将xml转换为html语言。
                  这一特性也使得xml语言十分有利,很多游戏的mod都是用它来制作,因为人们可以约定游戏数值标签,也可以很方便地处理数据。


                  IP属地:山西13楼2023-12-04 20:17
                  收起回复
                    让我们继续~Let's go!

                    上次介绍完了上图,接下来就是物品具体数值
                    首先是物品贴图

                    <graphicData>标签中分别定义了物品贴图、纹理蒙版、基本渲染设置。
                    其中,第一行<texPath>标签定义了物品贴图的位置,我们应该将贴图放在Textures文件夹下


                    同样,蒙版也放置于此文件夹中:

                    贴图将用于地面上的物品以及装备的武器纹理,而蒙版将使只由刀片部分的材料着色,而不改变其握把颜色(即,使用不同材质时,将仅改变刀片颜色,蒙版图黑色部分不做更改,您可以在<graphicData>标签中写入蒙版位置,即:ExampleMod/ExampleWeapon_Machete_m)
                    纹理图和蒙版的具体制作会在接下来讲,让我们继续学习标签内容:

                    <uiIconScale>ui图标规模,即用户看到ui的大小(不建议更改数值,盲目更改将会影响mod体验)
                    <techLevel>科技等级,即解锁物品所需科技水平,Medieval为中世纪科技水平,同理,此处可以更改为其他,但需要考虑物品位置标签(见下),其他科技水平可通过查看其他示例代码查看(也可以在评论区留言,这算课后作业,例如,Neolithic,新石器时代)
                    <costStuffCount>生产消耗的“东西”,在环世界中,count翻译为材料更合适,即生产一件物品所需的单位材料,此处60就是需要消耗60个木质/金属材料(具体规定可用什么材料制造见下文)
                    <statBases>启用基础,此标签下规定了物品生产细节:<WorkToMake>需要多少工作去制造,此处6000为生产一件mod物品需要6000工作单位,大家可以通过更改这一数值大小来直观感受工作单位的大小;<Mass>物品重量,单位为公斤,这一数值将影响小人携带时移动速度。

                    下一行,<equippedAngleOffset>装备角度偏移,即小人装备后贴图旋转角度(通过旋转来造成视觉上持握的感觉),这一角度将于您制作的贴图和蒙版息息相关。
                    如果在贴图中,物品是水平的(我也建议这么做,不然物品放在地面上就像立起来的……),此处-65为逆时针选择65度,通常,枪械类为-45或更少(严禁为45,正值旋转将使枪口/刀口指向小人自己……)
                    <recipeMaker>制作物菜单:<reserchperequisite>制造前提,smithing为锻造物,这一值还可以为Gun枪械;<skillRequirements>技能需求菜单-<crafting>此标签为手工制作(即制造物品小人的人工制作水平),数值3为不低于3级;<displayPriorty>显示优先级(没搞清是制造清单的显示优先还是堆放物品架时的……)
                    接下来——请听下回分解


                    IP属地:山西17楼2023-12-05 21:05
                    收起回复
                      <stuffCategories>东西(被制造物品的东西)类别,这一项为列表项,所以用<li>标签来列举(在html语言中,也这样做),<li>Metallic</li>,可以用金属来制造、<li>Woody</li>可以用木头来做。
                      (木头武器…您可以删除这一行,这样小人就不会用木头来做mod物品,当然,还可以添加,如<li>Stony</li>石头才是硬家伙,需要注意的是,对于Metallic来说,便包含了Steel钢、Uranium铀等材料,是一个类(假如您学习C++或者Java的话,一定会感到很熟悉))


                      IP属地:山西18楼2023-12-05 21:24
                      收起回复


                        IP属地:山西19楼2023-12-05 21:26
                        回复
                          图太长,不得不分开——就像英语听力题目和选项的分页一样让人讨厌,我会尽力结合代码让大家看明白:
                          这一页是武器最后也是最重要的代码,即:攻击!
                          当攻击行为发生时,主程序将会调用这些标签下的数值进行判定,因此可以看到这里用了大量的<li>来列举不同情况下的数值,让我们一一看来:
                          <weaponTage>武器分支
                          <li>MedievalMeleeDecent</li>中世纪近战面攻击(面攻击:可理解为挥砍类)
                          <weaponClasses>武器类
                          <li>Melee</li>近战(像矛之类,可以加一个远战。)
                          <tools>手段(武器攻击手段清单。在这里需要补充标签的嵌套,一个标签里可以嵌套自身或者嵌套别的标签,一个标签遇到</>格式会结束,但它中间还可以有别的<></>,只要一一对应就可以无限嵌套)
                          <li> 在这个列表中就出现了嵌套情况
                          <label>handle</label> 一层嵌套《标签》柄《标签结束》
                          <capacities> 能造成的后果,这里又有一层嵌套,即后果列表,例举了可能造成的后果
                          <li>Poke</li> 捅(可添加或删除,此处更改将改变武器这一种手段进攻后果)
                          </capacities>
                          <power>9</power> 威力9
                          <cooldownTime>2</cooldownTime> 冷却时间
                          </li>
                          这整个<li>标签描述了一种进攻情况,即用武器柄部攻击的情况,对于刀,攻击手段有handle柄部、head头部(即刀的头~刀身),对于远程武器,则分为了子弹和枪身(以后详述)
                          <li>
                          <label>head</label> 共计部位:刀头(刀身)
                          <labelUsedInLogging>false</labelUsedInLogging> 标签用于日志 否 标签用于日志结束
                          <capacities> 攻击结果(后果)
                          <li>Blunt</li> 钝器 攻击
                          </capacities>
                          <power>15.7</power> 威力15.7 (更改此处,将增加/减少武器威力)
                          <cooldownTime>2</cooldownTime> 冷却
                          </li>
                          这就是描述刀身攻击的代码片段


                          IP属地:山西23楼2023-12-05 22:17
                          回复
                            现在您距离创作一个mod只有一步之遥——那就是贴图和蒙版图制造。
                            不要为图像编辑工作发愁,您可以使用win10系统自带的画图3D软件轻松完成。
                            如果您已经迫不及待,可以使用、、还有,,用新标签打开他俩,然后保存就行,图像后缀应为.png,名称和下面保持一致,即ExampleMod/图片名字(您可以重命名图像不要出现中文,在中文输入法下输入英文也不行!)

                            累了,明天继续写……


                            IP属地:山西24楼2023-12-05 22:26
                            回复

                              ——感动哭了,谢谢打赏!!!


                              IP属地:山西26楼2023-12-06 19:46
                              回复