地狱之门吧 关注:16,581贴子:162,636

停止重复发明轮子!【游戏修改和mod制作相关】

取消只看楼主收藏回复

发现一些伙伴投入了大量精力从头开始研究修改文件,并且做着一些实际上许多年前MOW爱好者们已经完成了的工作。为了交流经验提高效率,在此作一个汇总,当然也欢迎提问


IP属地:上海1楼2023-08-09 06:21回复
    以在D盘根目录的SteamLibrary为例,游戏文件的路径为D:\SteamLibrary\steamapps\common\Call to Arms - Gates of Hell
    打开后如下

    第一个binaries,包含二进制文件,游戏本体、编辑器、创意工坊(mod上传工具)在这里面
    第二个localizations,包含各种语言的本地化文件,做汉化,修改显示文本等会用到
    第三个mods,包含你自己手动添加的模组,游戏会自动读取创意工坊内你订阅下载的mod,但是创意工坊下载的在另外的地方,这个文件夹并不会添加文件,它可以用于放置你在其他途径获得的mod
    第四个resource,包含文件资源,后续修改文件,制作mod都主要在这里完成


    IP属地:上海2楼2023-08-09 06:49
    收起回复
      进入binaries\x64后如下

      其中
      游戏本身不必说
      _ed.exe是编辑器
      _workshop.exe用于在创意工坊上发布mod
      后者打开以后大致如下

      Create,创建一个内容,打开如下

      在Upload Directory中选择你想要上传的mod的路径,注意mod有相应的格式,可以参考其它在创意工坊中发布的mod。创意工坊的文件夹在SteamLibrary\steamapps\workshop\content,然后找到地狱之门对应的文件夹查看其中的mod。
      Preview Image预览图,选择合适的封面有助于mod传播,注意符合格式
      Tags标签,方便使用者搜索和分类mod,必须要打一个,不过目前看来制作组对地狱之门steam社区的管理基本没有,而且分类奇特,也没有什么作者会用特意使用某种标签,点击左侧框的mod让它进入右侧就可以了
      Title标题,Description描述,这两个放一起说,这里不能写中文和相当多类型的标点符号,否则会发布失败。所以尽量不在mod工具里写大段的描述,发布以后去steam进入创意工坊修改会方便很多,而且可以使用中文
      Visbility可见性,下拉选项公共,隐私和仅好友,依据需求选择。
      记得勾选接受相关协议
      Publish发布,所有项目都填完以后就可以点击发布
      点击发布以后还会有一个类似的窗口弹出,前面标题和描述的输入不合规就会把你拦在这一步,都没有问题就会上传到创意工坊了
      手动tag方便搜索:怎么上传mod/如何上传创意工坊/怎么发布mod/发布mod教程


      IP属地:上海4楼2023-08-09 07:29
      回复
        工具其余按钮不赘述,选择一个你已经发布的mod,点击Edit修改会有一个类似点击创建的界面弹出
        游戏根目录下
        localizations以后介绍新增单位或者修改描述时再讲
        mods,对于一个新下载的游戏来说进入以后是空文件夹,在其中放入你从非创意工坊途径获取的mod,比如你自己制作的mod,游戏会进行读取,注意打开游戏以后再放入这个文件夹的mod要重启游戏才能读取
        自己制作的mod放这里读取测试,同时修改文件如果你不要求获得游戏成就的话最好也以mod的形式放在这,方便管理并且不影响无mod状态的联机

        下面举例说明mod的格式
        mods目录下具体某个mod的文件夹名字是任意取的,随便叫什么自己觉得方便就行,当然最好不要含中文和标点符号

        进入具体的mod文件夹以后,从这里开始,文件的路径应当和前文提到的游戏根目录下的文件路径一样,也就是这下面放如resource,localizations的文件夹,然后依原有文件之序放入你进行修改或者添加的内容
        mod.info表示mod的信息文件,理论上只有这个文件是必须的,你可以创建一个什么都不修改的mod,其内容如下

        name名称,desc描述,会显示为你在游戏中进入额外以后的mod列表中的文字
        min/maxGameVersion最低/高适用游戏版本,可以写具体的版本号,如1.029.0,当mod适用的版本号与你的游戏版本不符时,你就无法加载这个mod。写any代表了任何版本都可用,我为了图方便一般都写这个,但是这并不代表mod是永远可用的,它仍有可能因为后续游戏更新导致报错或闪退
        这也是MOWAS2更新后大量mod失效的原因,那次更新并没有变更什么内容,但是增加了版本号,手动修改无法加载的mod的适配版本后有很大概率可以继续使用
        回到mods文件夹
        你也可以在这里添加一些外部资源,比如使用须知,详细的更新日志,工具应用等
        logo.jpg似乎会被读取为封面,可以用于离线时显示mod封面


        IP属地:上海7楼2023-08-09 10:44
        收起回复
          resource,游戏的资源文件,主要的修改就在这里进行

          entity实体,所有游戏过程中展现的内容的基础,包含各种武器、载具、人物、地形环境等的模型实体,还有一些用于实现效果的特殊实体,实际上也包含一些贴图纹理
          interface界面,包含UI界面、光标、按钮、兵种头像等,主要是图片内容,同时还有按钮和UI的工作逻辑,在MOWAS2中我好像见过调整了UI布局的mod,但是在地狱之门中还没有
          map地图,包含战役、对战、征服等地图,编辑器保存和修改的地图就在这里
          texture贴图,包含大部分的贴图纹理,各自载具,人物皮肤的图像等
          gamelogic游戏逻辑,修改游戏时最常用到的压缩包,后续会详细介绍,注意实际路径中并不存在叫gamelogic的文件夹
          music音乐,sound音效,video视频,不是特化mod几乎不会用到
          游戏会读取这里所有的文件,不同的压缩包有同名文件夹不影响其中不同的具体文件的读取
          注意实际读取的路径是对应的文件夹顺序,压缩包并不会影响读取的成功与否,影不影响速度我不能确定
          比如生效的是resource/entity/-vehicle或resource/set,而压缩包是不必要的,完全可以把entity给压缩了虽然里已经都是压缩文件,并且压缩包叫名字什么也不会影响读取
          但是如果同时在压缩包内部和外部有同名文件似乎会优先读取压缩包外的文件,也不排除在二进制文件中指明了读取的优先级导致不同文件夹的压缩包有不同的效果
          总而言之,尽量不要在压缩包内外有同一文件夹路径下的同名文件,导致你不能推断自己的修改是否生效了


          IP属地:上海14楼2023-08-09 15:13
          收起回复
            gamelogic.pak大多数修改都需要用到这个压缩包里的文件,建议解压以后再修改,在压缩包内直接修改有可能是可以生效的,但是也有会遇到点击保存但是实际上并没有保存修改的文件的问题
            可以直接在resource目录下解压,然后把这个压缩包剪切到其他地方去作备份

            properties属性,包含人物的骨骼动画以及大量实体会引用到的特性如载具血量,物品栏大小,补给类型等
            script脚本,包含对战、征服中ai的出兵逻辑和作战脚本
            set设置,包含武器和弹药的属性数据,征服科技树构成,实体间的互动逻辑等,是这几个内容中最关键也最常用的
            shader着色器,可以改变游戏色调但是修改这个很难调出阳间效果
            注意没有叫gamelogic的文件夹,在自己的mod中也不需要增加gamelogic.pak来包括这些文件,直接resource文件夹下包含set等文件夹就行


            IP属地:上海16楼2023-08-09 16:03
            回复
              先看properties

              animation动画,包含人物骨骼动画,比如各种火炮的转向装填动作,上下载具的动作
              human_fsm,我不确定fsm是指什么,但是其包含的内容是人类模型在各种状态时调用的动作和这种状态时添加的标签,比如bazooka_stand.inc站立拿着巴祖卡时,board.inc上下车时,die.inc死亡时,inventory.inc使用物品栏(捡起或放下物品)时。

              注意编辑器中开启显示tag时的标签和在文件修改中出现的tag是不一定相同的,尽管它们可能都叫tag。在这里大概率是不相同的,打开其中的die.inc,可以看到在许多状态下比如state "stand_knock_down"(站立时被击倒),会在这个状态下产生{tag "knock-down"}和{tag "up"},在编辑器中开启显示tag后你可以看到人物被击倒时头上显示的"knock-down",但是没有up,推测从是别的途径添加的

              seletcion选择,包含你选中单位时地面上显示的选中框大小形态颜色等,其中.ebm文件表示这种选择框使用的贴图类型、颜色、大小,.inc文件中,{visible 0}可以调整选中框的可见性,Sprite指定了某种单位使用哪个.ebm文件进而指定贴图,还有控制选中框大小和旋转角度的乘子,{ground}显示在地表,{dynamic}跟随实体动态刷新等

              .inc和.ext和.ebm和一些没有后缀的文件等都可以通过文本读取软件打开,notepad、记事本等,这里我使用的是记事本
              .inc和.ext以及在实体中的.def文件等等其他文件在某种程度上没有区别,时常可以混用。通常来说,.inc表示inclusion/including,它被其他文件引用而产生作用,并且也可以引用其他文件,其自身也可能有对某些属性的定义,比如前述选中框的可见性;.ext表示extension扩展文件,通常是对具体属性的描述,由其他文件引用,并且不会进一步引用其他文件,虽然理论上可以,比如载具的装甲数值,在MOW和MOWAS2中是写在载具的.def内的,地狱之门将其单独分出来写
              shadow阴影,但是全部是空文件,可能只起占位作用,实际内容编码在二进制文件中
              abm.inc包含各种单位移动时的扩圈和精度模板的定义,如没有垂直稳定器的的坦克、有垂直稳定器的坦克、无炮塔坦歼等
              airborne.inc包含飞机所需的基础属性和并且引用了它们共同使用的大部分文件,所有具体的飞机.def都引用这个文件,节省对飞机这种类型所需的特性的定义文本量,其他单位也是同理


              IP属地:上海18楼2023-08-09 18:21
              回复
                应用例1:修改手操步兵时射击的精度和伤害,并且增加物品栏大小,而且不影响ai强度
                在mods文件夹中新建文件夹改成任意的英文或数字名称,或者复制一个mod进来,进入以后新建一个resource文件夹,一个名称为mod,格式后缀修改为.info的txt文本文档

                打开mod.info,输入或修改为以下内容,其中的name和desc可以随便写,可以是中文,你自己看得懂就行,minGameVersion/maxGameVersion推荐填any,这样不管版本是什么都可以加载

                完成以后你打开游戏就可以在额外中看到这个mod了,但是还没有修改什么内容
                根据前述,我们需要修改的文件是properties文件夹中的human.ext
                在mod中resource文件夹内新建一个名为properties的文件夹,不需要包含在gamelogic.pak中,再将原文件的human.ext复制到这个properties文件夹中,效果如下

                打开human.ext文件

                ;SDL经常出现,但是没有实际意义,有人知道是什么意思吗?
                (include"abm.inc")导入了前述各种单位移动瞄准的精度和扩圈文件,当然也包含步兵(人类)的
                extender扩展器,用于给一个实体扩展某种功能或特性,有哪些可选的功能并没有在任何地方全部列出,以后我会做一个总结
                比如这里使用的是“vitality”活力,应用于步兵相关的属性,比如生命值,耐力等,在这里修改的生命值和耐力会被breed文件中对具体步兵的定义数值覆盖,数值的意义如上图
                关于耐力再生表,比如对于一个负重超过75kg的跑步中的步兵,他将每秒增加-4.5耐力,也就是损失4.5耐力。在游戏中,单击右键移动是normal方式,双击右键移动是fast方式,表的最上方三种移动模式通常在编辑器里使用移动状态脚本才能得到,也可以修改文件来调用,不过比较麻烦


                IP属地:上海19楼2023-08-09 19:40
                收起回复

                  movement_limits移动模式限制,其值为可触发和自动停止时的耐力值,比如拥有10点耐力时可以开始跑步,而剩余1点耐力值时会停止跑步,体现在步兵长距离跑步在耐力消耗完以后时不时快跑几步
                  Damage伤害,数值为身体各种部位的伤害倍率,注意在这里修改只会影响到非直接控制状态时的伤害,也就是ai自己射击时的伤害,如果只想修改手操伤害,应该修改它后面的DamageTPC

                  DamageBlast破片伤害,当然实际上指的是任何类型的爆炸伤害倍率,注意即使改到0也有可能被炮击杀死,因为炮弹、炮弹爆炸产生的killzone实体和人类实体直接接触时有另外的伤害判定。GEM引擎通过光线追踪技术来计算爆炸伤害效果,在某次更新robz加入了killzone实体后才增加了高爆穿透掩体造成杀伤的效果
                  DamageTPC第三人称和直接操控模式伤害,这里的数值是我自己已经修改之后的
                  (mod "hardcore"硬核模式,地狱之门早期以及战争召唤中的一个可选模式,通常指的是更高的伤害,目前应该只在多人游戏中默认应用,注意征服模式也算多人游戏。其中也包含了一套伤害数据,为了确保生效建议一齐改了

                  {extender "resoureces"扩展器 资源,这个东西就是构筑工事时消耗的工程点数,也就是步兵左下角的棕黄色条
                  {extender "inventory"扩展器 物品栏,box指的就是按I打开的物品栏,{Size 8 12}表示横竖格数,{Weight 100}并不是负重,更类似于堆叠倍率,印象里把它改到200原本30发子弹堆叠的弹匣会变成60发
                  {armor "head"装甲 头部,类似的armor指身体穿戴的物品栏内物品,比如头盔,胸甲,携行具等,mask用于和具体的物品配对,比如{mask “head”}对应头盔,bone,volumes对应实体的骨骼和模型,{pierceAbsorb 20}推测表示能吸收20mm穿深的子弹、炮弹等


                  IP属地:上海20楼2023-08-09 20:29
                  收起回复
                    改动上述{size 8 12}的值就可以改变人类物品栏的大小
                    {armor "body"装甲 躯干,如苏联的虾甲就是占用这个槽位装备,mask会在相应的物品上有一个词条对应,volumes、bone后""中的内容是实体的模型和骨骼名称,HeatDamping热量阻尼,推测指的是吸收0.6的热量会点燃躯干,或者是点燃状态能传递0.6热量,热量相关数值在各种具有燃烧效果的武器或弹药中会出现
                    {extender "stuff"扩展器 物品,当作为一个被拾取的物品时,人类会作为一个"human"项目进入物品栏,也就是你们让人扛起尸体时物品栏里穿蓝色衣服的人
                    {bone "foresight2" 骨骼 视点2,这个骨骼点大多数时候用于生成炮口火光等开火特效,但不确定在人类实体中作用是什么,我记得开枪的枪口焰等应该是生成在枪械上的
                    后续Sensor传感器,{Chassis "foot"底盘 脚以及实体模型的部分以后要用到时再说


                    IP属地:上海22楼2023-08-10 11:04
                    回复
                      接下来就是修改手操精度
                      拉到最底下,可以看到

                      Weaponry武器,可以发现载具的.def写武器种类也是这种形式。{place "hand_right"}位置 右手,类似的在载具上是place "gun",""内的内容表示一类武器的规定名称,与开火特效的定义等相关,随便填不会报错但是会导致功能缺失,{Rotate}选择,推测和由该项武器带动整个实体旋转相关,我在制作曲射mod时碰到过使用没有这个词条的新增武器时,炮塔或车体不随指针旋转的情况,("abm_human")表示使用人类移动瞄准,数据来自前面导入的移动瞄准文件
                      {ManualAccuracy 1.00}和{ManualAccuracyZoom 1.50}手操精度和手操放大精度的倍率,也就是我们需要修改的东西,前者表示常规手操的精度,后者表示手操步兵时按住右键瞄准时的精度,我推荐改到10倍左右,射击手感就比较符合直觉了
                      完成这些修改以后,基本满足了最开始的要求,但是在实际使用的过程中会发现,远距离上还是很难有效射击,这与伤害衰减相关,我们还需要对这个进行修改


                      IP属地:上海26楼2023-08-11 23:40
                      回复
                        进入前述的set文件夹,找到其中的ballistics.set文件,这个文件就是用于设置武器伤害衰减的

                        打开如下

                        注释译:几种武器类型的配置文件,定义如何根据距离改变对人类生命值的伤害
                        第一个值是距离(武器射程乘该值)(比如:武器射程100m与值0.5可得50m)
                        第二个值是伤害(武器伤害乘该值)(比如:武器伤害50与值0.5可得-25生命值)
                        对一个{curve"bullet"曲线 子弹,比如步枪射程是120m,伤害是70,则第一组数据{0.05 5.00}意味着120m*0.05=6m,70*5.00=350,也就是6m的距离上有350伤害,最后伤害还需要乘以我们前面修改的命中身体部位的倍率,这也是有人觉得地狱之门步兵很脆或者高级兵被低级兵偷袭会被一枪秒的主要原因,因为0-6m步枪打中躯干350伤害,大部分兵都是扛不住的,实际上远距离对射一个人仍然能吃五六发子弹,比如{0.5 0.65},在60m距离上一发步枪弹命中躯干只有46点伤害,一个200血的常规步兵也能挨5发步枪弹才死。
                        我们修改这项内容,主要目的是减少远距离的伤害衰减,因为这项修改也会影响到ai,所以不宜把伤害倍率设置得太高,以我自己的数据为例,前面的躯干伤害倍率我修改为6.5倍,远距离衰减设置为0.45时,70*0.45*6.5=204.75,刚好能一枪击毙常规步兵,并且不会大幅增强ai,所以我们把上面列表中的{0.9 0.28}与{2.0 0.18}修改为{0.9 0.45}与{2.0 0.45},加上前面的修改,就可以在游戏中手操大栓一枪一个了,冲锋枪、机枪、手枪乃至霰弹枪等都可以作类似的改动
                        进入游戏,在“额外”中应用这个mod,就可以利用你的FPS技巧在RTS游戏中流畅地消灭敌人
                        但是还有一个需要注意的问题


                        IP属地:上海28楼2023-08-13 18:45
                        回复
                          先来个私货,看会不会被吞,这是我自己制作的达成以上效果的mod,不过没有修改步兵物品栏

                          搜索“轻武器精度和伤害增强”
                          或链接https://steamcommunity.com/sharedfiles/filedetails/?id=2843626065


                          IP属地:上海29楼2023-08-13 18:51
                          回复
                            如果你不想使用这个mod但你仍打算继续这个存档,并且你知道如何读取一个曾经应用过mod的存档(通过删除存档文件中应用过mod的编号),你很有可能发现读取时会还是会报错,这是因为改变步兵物品栏导致你步兵身上放置的物品超出了关闭mod以后的物品栏上限,或者是你改变了物品栏横向大小导致排序出错使得物品超出物品栏边框。对于这种情况,可以在该mod应用时,直接将超出物品栏上限的步兵删除,比如送掉或者解散;或者把他身上的东西丢弃到保证不会超过物品栏上限,但是如果步兵数目较多会比较麻烦


                            IP属地:上海30楼2023-08-13 18:57
                            回复
                              进入set文件夹,这个文件夹的内容值得详细解释,如下

                              ability技能,指步兵拥有的技能,进入以后可以看到

                              aimeshot.set瞄准射击,使用狙击步枪狙击所需要的技能,狙击手、奥斯纳茨特战队、白色死神都有的技能,注意缩圈时间、缩圈伤害倍率等是定义在武器上的,这里是技能项目的定义
                              avoidance.set回避,由士兵等级对应的伤害规避属性,level "lvl_8"等级8;{drop_weapon 0}扔下武器 0,士兵死亡后一定会掉落武器,注意濒死可以被医疗兵救时武器还是拿在手里的;{knockdown_melee 0.65}近战击倒 0.65,推测是近战攻击有65%的减伤,{fire 0.3}和{aimed_shot 0.35},同理,对火焰和狙击伤害分别有30%和35%的减伤
                              field_glass.set望远镜,使用望远镜观察所需的技能,一般是军官拥有
                              health.set生命以及后续的health_regeneration.set生命再生、resourece.set资源、stamaina.set耐力等技能,都导入了level_generic.set等级属性,其内容指的是士兵的生命值等属性如何对应再生属性,在level_generic.set中,{level "350%"3.5}指,属性值为350的,其每秒再生为3.5,这个的优先级可能低于在breed类型中的具体设置
                              melee.set近战,包含等级对应的近战攻速,伤害倍率,可用的攻击方式(定义在blow打击中),打断对方近战攻击的概率,击晕对方的概率
                              skill_mgun.set机枪技能,包含每级熟练度对应的站姿、蹲姿、卧姿以及掩体中的枪械精度倍率、枪械后坐力倍率和枪械抖动倍率。与后面的skill_mgun_light.set轻机枪技能的区别主要在于,一般来说轻机枪的站姿、蹲姿精度倍率高,而机枪的卧姿和掩体中精度倍率高,目前看来只有弹盘DT29、DP28和那些使用弹匣的机枪有轻机枪tag,而MG34、MG42即使是弹鼓型号的也是机枪tag,重机枪、坦克上的机枪当然也是机枪tag。其他武器类型不再解释
                              telescope.set望远镜,或者准确的说是光学瞄具,使用狙击步枪观察所需的技能,就是狙击手拿狙瞄准获得的视野
                              veterancy.set老练,士兵等级对应的生命值、生命再生、轻武器装填速度、武器熟练度等加成,注意士兵等级和武器熟练度不是一回事,并且由这个文件产生一定联系


                              IP属地:上海31楼2023-08-15 11:38
                              收起回复