维多利亚3吧 关注:108,606贴子:1,562,563

【Mod技术】Victoria 3 Mod 技术等级(顺便讲下基础知识)

只看楼主收藏回复

这是一个excel表格,列出了制作 Victoria 3 Mod 所有可能涉及的技术分支,并对其进行了分级。这张表格的技术划分下限极低上限极高,你可以试着找到自己的位置,也可以评估一个 Mod 需要多么高的技术水平。

1.在这张表格中,更高级的技术要求包含同分支更低级中所有不冲突的技术要求
2.表格中的部分技术分支领域涉及不少通用领域的技术要求,不同的Mod可能有不同的技术要求,大多数Mod都不需要声音、视频、三维这三项技术分支,如果说在Victoria 3哪个分支存在感最低,那当然是视频,原版只有事件的动态背景播放了视频
3.技术要求不一定全面,多个相关能力正常情况都是一并增长,例如在打字速度越来越快的过程中,打字的准确率也上升了
在我看来,如果要制作Mod,这图中有两个技术分支都至少要到达4级,分别是计算机和设计,你需要熟悉系统盘的大致结构,明白桌面和我的文档等主要文件在什么位置,也需要清楚游戏本身的多个文件的所在的路径,如游戏本体、本地文件、订阅文件和截图文件的路径,这不仅仅是基础,也有利于你掌握本体中更复杂的文件路径并记忆它们。此外,明白Mod在文件层面的的工作原理,还有设计构思时务必考虑实际可行性,这也是必须具备的基础。
由于只是基础,所以很好全面讲解,下面我先来讲下这里提到的几个知识点,顺便在讲点更高级的技术


IP属地:河北1楼2023-08-17 21:58回复
    首先,是系统的文件结构
    现在的计算机都会使用硬盘,无论磁盘怎么分区,都至少会有一个系统盘,分出的非系统盘可以是空着的,但系统盘就不一样了,而且有时steam还安装在了系统盘,或是用户文件在非系统盘放置,这里不考虑这两种情况。
    假设有一个固态硬盘和一个机械硬盘,固态硬盘只有一个分区C:\并作为系统盘,然后机械硬盘只有一个分区D:\并作为非系统盘,如果steam在系统盘只需要能找到steam文件就可以,用户文件在非系统盘也是能找到文件就行。


    IP属地:河北2楼2023-08-17 22:04
    回复
      2025-08-22 00:48:27
      广告
      不感兴趣
      开通SVIP免广告
      在系统盘的根目录至少会有几个文件夹,这里我们只需要关注用户文件夹,路径中能看到其名字是Users
      然后在Users中会有一个文件夹,这是安装系统时设置的用户名,大多数情况下用户名会是默认的Administrator,此外在这个路径中还会有公用文件夹,至少这里需要注意的相关文件不会需要在这里创建,如果用户名不是Administrator,那你也应该能找到这个文件名
      然后在用户名文件夹中,桌面Desktop、我的文档Documents、下载Downloads、AppData(用户数据,可能被隐藏了),还有其它不太重要的文件夹也都在这个路径中


      IP属地:河北3楼2023-08-17 22:10
      回复
        接下来是游戏的相关文件,这里不考虑无法下载安装steam并下载安装Victoria3的问题,在excel中,这是计算机中2级的要求,如果你要达到4级的水平,那你需要做到这一点。
        所以,你会有steam的文件夹在硬盘中的某处,而游戏的本体文件就在steam\steamapps\common\Victoria 3目录中,最外层的steam这个文件夹名可以变更,里面的都不能变更。
        当然,你可以在steam的用户界面,右击选择打开文件位置,来直接到达这一路径。
        然后是steam中定义Mod和steam截图的路径,尽管截图不怎么重要,但也算是相关文件,所以这个路径这里也会给出。
        steam模组订阅路径:steam\steamapps\workshop\content
        steam截图保存路径:steam\userdata\1095448889\760\remote
        这两个路径到达的是整个steam中,你所有游戏的共同目录,路径名可能会有所不同,截图也可以右击通过打开文件位置来到达路径,订阅的Mod可能也有这个命令,这里给出 Victoria 3 的订阅模组路径和截图保存路径。
        steam Victoria 3 模组订阅路径:D:\steam\steamapps\workshop\content\529340
        steam Victoria 3 截图保存路径:steam\userdata\1095448889\760\remote\529340
        可以看到,在steam中,Victoria 3 在这两个路径中的文件夹编号都是 529340


        IP属地:河北4楼2023-08-17 22:19
        回复
          然后是本地文件中的路径,在我的文档Documents中有一个Paradox Interactive文件夹,你启动过任何一个paradox的游戏,都会自动在这个路径中创一个Paradox Interactive文件夹,然后这个文件夹里面有具体那一款游戏的子文件夹。
          而在安装系统时可能把用户文件Users放在了别的盘符中,那样我的文档Documents也就不能够在系统盘中找到了,无论你的计算机上的文件结构如何,如果你要做Mod,你就必须确保你能找到我的文档Documents,考虑到路径不容易到达,你也需要创建快捷方式,有关于建立相关文件夹的技巧,后面会提及。
          接下来,进入Documents\Paradox Interactive\Victoria 3路径,游戏存档、本地Mod、启动配置文件、日志文件、使用paradox启动器的截图文件等,都在这个目录中,对于基础的Mod技术,需要关注本地Mod文件夹,在往上还需要关注日志文件,调试模式中生成的错误报告就在日志文件中。


          IP属地:河北5楼2023-08-17 22:30
          回复
            现在,终于可以提Mod的工作原理了,这一块有两大分支,一是启动设置的原理,二是Mod文件的读取原理


            IP属地:河北6楼2023-08-17 22:32
            回复
              在一些情况下,你可以直接启动在游戏根目录(Documents\Paradox Interactive\Victoria 3)中的binaries\victoria3.exe来直接启动游戏,且启动器的设置,如启用哪些DLC、Mod,还有启动的语言,甚至的更具体的游戏设置,在启动后这些情况都不会重置,这是因为这些数据信息都存储在了启动配置文件中。
              前面已经提及,启动配置文件会在我的文档Documents中的游戏文件中,这里面存储了不只是游戏中的设置,还有启动哪些DLC和Mod,对于程序来说这样的配置信息存储起到了一个记忆的作用,如果文件发生了损坏,例如Paradox Interactive\Victoria 3中的文件发生了损坏,你就会注意到游戏的各种设置都变回了默认设置。
              在启动时,启动器仅仅只是修改了配置文件中启用哪些DLC或Mod的数值。首先启动器会读取所有的DLC和Mod并在配置文件夹建立相关代码,然后通过0和1,也可能是false或true来存储启动状态与否,从数据的角度上来看,在启动中你点击一个Mod的启用开关的实际作用是更改了对应配置文件中的对应代码的值,然后当你点击启动游戏时,所执行的命令和你直接启动victoria3.exe是一样的,由于这时启动器还开着,所以还至少执行了一个可视的命令,在检测到游戏程序启动后,执行关闭启动器的命令。
              当然,这些需要证据来证明,就删除了我的文档Documents中的相关文件后会清楚这些用户信息的效果来看,已经能够证明这一猜测是正确的。


              IP属地:河北7楼2023-08-17 22:42
              回复
                补充上一段,在启动游戏时,会读取启动配置文件中的代码,来决定哪些DLC还有Mod是启用还是不启用,在这之前,无论是DLC还是Mod,都需要先被启动器识别到,这样才能够在启动配置文件中去建立相关代码。
                通过启动器提供的一个命令,可以创建一个空的文件夹在本地Mod文件夹,路径是:Documents\Paradox Interactive\Victoria 3\mod,重启启动器或是执行启动器的重载命令,可以读取这一目录中的所有文件,但如果你把Mod文件放的更深亦或者更靠外,只要不符合设定好的文件格式,那么这个本地Mod的文件即使连同Mod的配置文件都被读取到了,也不会被程序识别为是一个Mod,自然就不会出现在启动器中。不在启动器中出现不仅意味着你无法上传它,也意味着其没有出现在启动配置文件中,本地的Mod文件没有与游戏的启动程序关联起来,当启动游戏时,这个Mod中无论有着怎样的内容,都不会被启动。
                所以,为了Mod能够运行,请确保在本地模组文件夹中的Mod文件夹中不仅要有Mod的配置文件,文件结构上的格式也要符合规范。一个Mod文件会有一个文件夹名,配置信息中也会有一个name的属性,尽管在技术上多个Mod可以名字相同,但为了能够区分多个Mod,清确保不同的Mod的名字不一样,并且Mod根目录中的.metadata\metadata.json中的name属性的名字和Mod文件夹的名字一致。
                首先metadata.json这个文件是每个Mod的配置文件,其主要有两个作用,一是让外层的整个Mod文件夹能够被启动器识别为是一个Mod,二是向启动器提供这个Mod的名字,目前已实装的功能只有这两个,启动器会为不同的Mod生成不同的编号来区分Mod,这也就是name相同时还能兼容运行的缘故,因为这里的name不是用于区分Mod的唯一标识,不是唯一id。
                技术上,在这里Mod的文件夹名和里面的name的名都是中文也没问题,但为了降低意外情况的发生概率,最好确保名字中的所有字符全都是英文字符,不能有中文标点或是特殊符号,阿拉伯数字也是英文字符。


                IP属地:河北8楼2023-08-17 22:55
                回复
                  2025-08-22 00:42:27
                  广告
                  不感兴趣
                  开通SVIP免广告
                  讲完了关于启动配置的原理后,接下来是Mod启动时文件读取原理。


                  IP属地:河北9楼2023-08-17 22:57
                  回复
                    在游戏启动时,第一步就是将所有启用的Mod中的文件覆盖到原版文件,当然这个覆盖只会影响到存入物理内存中的数据,并不会变更文件路径或是修改文件,你可以想象把Mod文件正确的原版路径中来理解这一步骤,但不要真的覆盖文件,因为这会破坏原版文件的完整性,你就需要在steam验证文件完整性甚至是重装游戏来恢复文件。
                    至少在克劳塞维茨引擎的游戏中,Mod都是通过覆盖到原版的文件路径中来生效,就像游戏读取原版文件到物理内存中作为缓存一样,之所以说“覆盖到原版文件”而不是“覆盖原版文件”,是因为在大多数路径中,你可以增加新的文件,这也能被启动程序读取到并加载,在克劳塞维茨引擎中,许多纯文本都会像代码一样被读取,Mod中的文本文件就和本体中的文本文件一样,都会被读取并加载到物理内存中作为缓存。当然,文本文件的扩展名有很多,在这里你能够看到很多不常见的扩展名,大多都是文本文件,也有很多图像文件,扩展名除了最常见的.dds外,也有很多其它的扩展名,并且就我个人的已知范围内,在地图技术中,Mod至少也能提交一个实际有效的二进制文件。
                    启用的Mod会按照一个先后顺序,去以此覆盖到原版文件中,如果多个Mod包含了同一个路径中的同名文件,那么就只有最后读取的文件才是会生效的那个,这种情况可能会导致部分Mod缺少关键文件,也可能导致导致两个Mod同时读取一个名字的情况,Mod的不兼容问题基本都是这种情况造成。
                    在文件的读取顺序中,基本上同一个子目录都会放置多个相同语法规则的文件,去分别定义一个相同的东西,如果在这样的目录中,多个文件同时定义了同一个名字,那么就如Mod先覆盖原版一样,也如后读取的Mod覆盖先读取的Mod一样,字母排序下排在靠后的文件会覆盖排在之前的文件,你会发现许多原版文件都是00_开头,这正是为了其能够先被读取,这样哪怕Mod中增加到这个目录中的文件名的首字母是a,也能够覆盖原版文件中出现过的代码命名。
                    最后,在缓存中收集了所有的原版文件,再模拟了Mod文件覆盖到原版文件中后,启动程序才会开始依次读取最终的缓存数据,把游戏数据构建出来。


                    IP属地:河北10楼2023-08-17 23:15
                    收起回复
                      到目前为止,excel中计算机分支的4级技术算是基本讲完了,本以为几百字能全解释清的,几千字都没解释完……


                      IP属地:河北11楼2023-08-17 23:17
                      回复
                        接下来是设计分支中的4级技术,这一块更好理解,道理也基本在通用领域适用。
                        首先你需要明白你自己要做什么,你是要做Mod对吧?那你是不是得确保你的Mod能做出来?所以无论是任何的Mod你都需要先验证技术上的可行性,确保其具有实际可行性,也就是能做出来。
                        不是说技术上能够做到就可以了,你得看你自己,还有参与项目的人是否有人具备这一技术水平,如果没有人具备且没有人可能具备这一技术,也包括没有具备技术水平的人加入进来的可能的话,那就不要认为这一设计具有实际可行性。因为你不会,参与的人也不会,你们也没有人能学会,已经学会的人也不会参与进来,自然就不可行了。


                        IP属地:河北13楼2023-08-17 23:22
                        回复
                          不要以为参与进来的很多人都是制作人员,他们往往大多数设计水平只有1级,正如描述上写的一样:“有一些想法,但完全不会考虑与此项目的关联性,也不知道自己在做什么” ,他们根本就没有考虑自己的想法如何在游戏中体现出来,他们不过就是在聊天而已,这些空谈设定的人,都不是模组制作人员。
                          而这,也就是我要求除了计算机分支的水平要过基础线(合格线)外,设计分支的水平也要能过基础线(合格线),空谈设定而不考虑实际是没有意义的。


                          IP属地:河北14楼2023-08-17 23:26
                          回复
                            在考虑了实际可行性后,一个问题就来了,什么是实际可行的?所以在往上的设计技术要求了了解什么在游戏中可行或不可行,除了还需要考虑到产品的包装和用户的需求外,更往上的设计分支甚至要求了精通其它所有相关技术……
                            信息上是1+1>2的,这和数学上通过已知得到未知是一样的,任何一个能把Mod做的很好的人,大多数游戏也都玩的很好(比如我),同样那些能把软件插件做好的人,也都是使用软件的高手,你要设计构思要确保东西能做成还得能做好,你就需要理解其它相关技术领域能做什么,了解到的不仅仅是技术上的可行性,还有设计构思上的创新,知道的更多才更有可能创新。一个笑话讲一遍时会有很多人笑,讲第二遍时就没有那么多人笑了,在多讲几遍就几乎没人会笑了,创新有多么重要这不用我在举例了吧?当然,一个笑话第一遍讲的时候能有很多人笑,也是因为其质量不低。


                            IP属地:河北15楼2023-08-17 23:34
                            回复
                              2025-08-22 00:36:27
                              广告
                              不感兴趣
                              开通SVIP免广告
                              支持技术贴,尤其是系统地整理mod的需要的技术不错


                              IP属地:加拿大16楼2023-08-17 23:35
                              回复