战争游戏红龙吧 关注:37,575贴子:307,228

战争游戏mod制作基础教程

取消只看楼主收藏回复




IP属地:美国1楼2021-02-05 17:59回复
    战争游戏的数据修改大致有这几类:
    单位数据修改,
    单位模型的材质(Texture,又称皮肤)替换(比如给单位换上用户制作的自定义涂装),(注意,不是单位模型替换,红龙游戏发行至今7年,尚未有mod作者能够成功给游戏加入新模型)
    用户界面(UI)使用的各种图片资源修改,
    和其他游戏数据修改。
    下面将介绍如何进行单位数据修改。


    IP属地:美国3楼2021-02-05 20:12
    收起回复
      广告
      立即查看
      在开始单位数据修改之前,先要讲一下游戏的文件结构。
      下面是游戏的根目录,可以看到结构很简单,游戏的单位数据都在Data文件夹,EmptySteamDepot是一个空文件夹,而Maps文件夹内含地图相关的数据。

      进入Data文件夹,会看到两个子文件夹。上面的PC文件夹仅包含各版本的WarGame3.exe和几个dll文件,而游戏的单位数据都在下面的WARGAME 文件夹。

      点进WARGAME文件夹会发现只有一个PC文件夹

      继续进入PC文件夹即到达游戏数据所在的位置。
      数字从小到大的各个文件夹内就包含了各个版本的单位数据。要想修改最新版的游戏内单位数据,进入数字最大的文件夹即可。
      在目前,最新的版本即510117427,在下面的箭头处标出。如果欧根再次更新,那么510117427文件夹之后还会有更大数字的文件夹(虽然欧根在可见的未来更新版本的概率很小)。


      IP属地:美国5楼2021-02-05 20:44
      收起回复
        继续进入510117427文件夹,会发现一个叫做NDF_Win.dat的dat文件。红龙所有的单位数据,如单位移动速度,隐蔽,穿深,射速等等都在里面。

        要想打开这个文件,需要一个叫Modding Suite的工具,是由一个叫enohka的国外大佬制作的战争游戏dat文件编辑器。可以说没有Modding Suite,很多现在红龙的mod就不会存在。

        Modding Suite发布在Github上,可以的话请去作者的页面给他加个星。


        IP属地:美国6楼2021-02-05 22:02
        收起回复
          注:Windows使用的跨平台兼容版(支持和MAC/LINUX用户联机的最新版本)是510064564(图中箭头处)
          (红龙开发商欧根前几个月的一个修复bug的微型更新导致MAC/LINUX用户无法和Windows用户联机,后来欧根在steam红龙游戏属性的测试栏增加了兼容版(即老版本)的选择,见下图二)



          IP属地:美国7楼2021-02-05 22:13
          回复
            一旦下载好了ModdingSuite,我们就可以开始单位数据修改了。
            双击moddingSuite.exe打开。点击左上角的File按钮打开之前提到的对应版本的NDF_Win.dat文件,就会看到一长串的路径。在下图圈出的位置输入 everything找 到everything.ndfbin

            如图所示,双击即可打开NDF 文件编辑器



            IP属地:美国8楼2021-02-05 23:21
            回复
              这个编辑器界面有好几个有用的功能,不过为了让这个教程的学习曲线平滑一些,让我先说说如何找到一个单位并修改其数据。
              首先在界面左边的框(为过滤器/搜索器)内输入 TUniteAuSolDescriptor ,意思大致为【单位描述器】

              如下图,输入后左边只剩一行,左键点击

              此时黑色圈出的这一列数据就是游戏中所有的单位,每一行代表一个单位。箭头指出的数字表示这里一共有多少种不同的单位,原版是2006种。
              左键点击这列单位中的第一个,我们就可以从右边看到这个单位的顶层数据,比如它的内部开发者名字,化名等。
              如下图箭头指出。

              有些人可能会问为什么NDF编辑器这里有2006种单位,但原版军械库中只显示了1988种。

              这是因为游戏中有一些隐藏单位,即被欧根做了一半但是又被从游戏里砍掉的单位。


              IP属地:美国9楼2021-02-06 00:23
              回复
                这里要注意,游戏内军械库上显示的单位名字和上面箭头指出的名字不总是一样,要想找到一个单位的精确名字,需要看下面447行,NameInMenuToken。这一行左边是这个变量的名字,中间是这个变量的类型(LocalisationHash,翻译为本地化散列函数,详情可参考计算机科学概念: 散列/哈希函数),而右边是这个变量的值: 8E14D59D2C0F8600,这一串字符就是这个单位的真正且唯一的名字。

                要想找到这个单位名字对应的军械库内的中文名(战争游戏红龙的繁体中文版)或者英文名(英文版),
                我们需要查字典,字典是一个叫ZZ_Win.dat的文件,同样可以用moddingSuite打开并编辑,在当前版本的红龙里,文件的位置如下图箭头所示

                这里要注意如果未来红龙更新,和NDF_Win.dat文件一样,欧根会把新版的ZZ_Win.dat放在更大数字的文件夹中。


                IP属地:美国10楼2021-02-06 00:47
                收起回复
                  广告
                  立即查看
                  用moddingSuite打开ZZ_Win文件后,繁体中文字典见下图高亮处,英文字典见下图箭头处,双击即可打开。

                  字典如图:

                  在右上角输入之前找到的单位名字(哈希):8E14D59D2C0F8600,
                  就能找到对应的名字DANA


                  IP属地:美国11楼2021-02-06 00:57
                  收起回复
                    上面的字典查阅是双向的,也就是说我们可以在右上角的框内输入单位的英文名/中文名来找到单位的唯一名字(哈希名)。

                    比如这俩AML 60, 查字典我们就可以找到它的哈希名:C1615D0B00000000
                    回到之前打开的NDF编辑器
                    如下图,

                    点击1号位置打开过滤器,
                    点击2号位置选择NameInMenuToken
                    点击3号位置输入哈希名
                    点击4号位置(apply)应用
                    即可从左边的一大串单位清单中找到AML 60对应的单位数据


                    IP属地:美国12楼2021-02-06 01:16
                    回复
                      准备工作做完了,接下来就可以开始进行mod中最有趣的部分,修改单位了。
                      下面我将演示如何进行一次最简单的单位修改,把AML 60迫击炮的HE伤害增加1。
                      先放一张完成的图,如下:

                      另:我创建了一个战争游戏mod修改交流群,欢迎对mod修改有兴趣的吧友加入一起交流。
                      在群文件内放了mod制作需要的资源供有需要的吧友下载。如果有吧友对教程里提到的内容有问题,也欢迎加入提问。


                      IP属地:美国14楼2021-02-06 15:10
                      收起回复
                        首先使用上面说明的方法找到AML 60的单位描述器,(即使用在箭头处的过滤器)。
                        然后点击圈出的Modules变量(438行)

                        由于Module变量的值是一个列表(List),所以NDF编辑器在下方出现了一个新子窗口,里面显示了这个列表的内容。
                        在子窗口内找到WeaponManager那一行(如箭头所示)

                        这里要注意,只有变量的类型为列表(List)时NDF编辑器才会在左键点击时出现子窗口。
                        当变量的类型不是列表(List),比如468行UpgradeRequire的类型是未设置(Unset),

                        或467行VitesseCombat的类型是32位浮点数(Float32)时,左键点击就不会在下方出现子窗口。


                        IP属地:美国16楼2021-02-06 15:47
                        回复
                          找到WeaponManager那一行后,左键双击打开
                          一个新窗口,TModuleSelector(模块选择器),会出现(下图上半部分)。双击494行Default变量会再次打开一个新窗口:
                          TWeaponManagerModuleDescriptor(武器管理器模块的描述器)(下图下半部分)。
                          图中圈出的数字建议记在笔记本上或者其他地方,这个数字之后可以用来在NDF编辑器内直达【AML 60单位的 武器管理器模块描述器】的这个窗口(省略之前繁琐的点击过程)。

                          TWeaponManagerModuleDescriptor(武器管理器模块的描述器)是这个单位武器的总描述器。
                          其中包含了单位各炮塔的数据和武器可以打几轮的数据。(红龙中所有武器都遵循短装填长装填的机制,这里一轮的意思是武器在两个长装填之间打完所有短装填算一轮)


                          IP属地:美国17楼2021-02-06 16:42
                          收起回复
                            上述炮塔的数据在598行 TurretDescriptorList,而武器可以打几轮的数据在599行 Salves。

                            这里要说明一下,战争游戏的单位数据是基于面向对象编程的。
                            每一层的数据都是一个类(即“对现实生活中一类具有共同特征的事物的抽象”,详见百度百科https://baike.baidu.com/item/%E7%B1%BB/6824577),通过一层一层数据的层层嵌套,最终组成了一个单位。
                            比如AML 60这个单位的武器管理器模块的描述器和机动总描述器,隐蔽总描述器及其他一些平行的总描述器共同组成了AML 60这个单位。
                            而武器总描述器,
                            全名【武器管理器模块的描述器】(TWeaponManagerModuleDescriptor)由一个一个的【炮塔描述器】组成。
                            而【炮塔描述器】又由一个一个的(炮塔)【附带武器描述器】组成。
                            注意炮塔描述器有好几种:
                            双轴炮塔描述器(TTurretTwoAxisDescriptor)常见于载具上的旋转炮塔
                            单位炮塔描述器(TTurretUnitDescriptor)常见于飞机上的固定机炮/导弹“炮塔”
                            步兵炮塔描述器(TTurretInfanterieDescriptor)常见于步兵
                            投弹炮塔描述器(TTurretBombardierDescriptor)常见于轰炸机
                            继续向下,【附带武器描述器】(TMountedWeaponDescriptor)又由一个到多个的【弹药】(TAmmunition)组成。


                            IP属地:美国18楼2021-02-06 18:07
                            回复
                              广告
                              立即查看
                              AML 60那门迫击炮的HE伤害属于【弹药】属性,因此我们需要从【武器管理器模块的描述器】进入【炮塔描述器】再进入【附带武器描述器】再进入【弹药】来修改。
                              如下图,跟随箭头点击即可从【武器管理器模块的描述器】(TWeaponManagerModuleDescriptor)一路进入【弹药】(TAmmunition)

                              如上图,AML 60的【武器管理器模块的描述器】内只有1个【炮塔描述器】(即只有1个炮塔),但对部分单位来说可能会有好几个炮塔,比如海军舰船。
                              判断哪个炮塔是哪个只能通过这个炮塔下属的武器是什么来推断(但通常游戏内单位数据卡上的从左到右第一个武器就在从上到下第一个炮塔下),或者事先记录下这个单位各个炮塔的ID, 在上图中则是【(双轴)炮塔描述器】(TTurretTwoAxisDescriptor)旁边的五位数:47227
                              从上图中我们还能看到AML 60唯一的【炮塔描述器】下有3个【附带武器描述器】(TMountedWeaponDescriptor), 判断哪个【附带武器描述器】是哪个的方法和区分炮塔的方法一样。
                              下面我们将通过比对不同的【附带武器描述器】下属的【弹药】的不同来判断。


                              IP属地:美国19楼2021-02-06 19:35
                              回复