模组文件结构

本页面所适用的版本可能已经过时,最后更新于1.9

模组文件结构

本地模组

本地模组必须位于~/.local/share/Paradox Interactive/Hearts of Iron IV/modC:\Users\<Username>\Documents\Paradox Interactive\Hearts of Iron IV\mod,应该包括:

  • '.mod'文件,它告诉启动器如何处理模组文件夹。(文件名没有特殊要求,仅本地模组需要,当上传到steam创意工坊时该文件不会上传)
  • 模组文件夹或者包含模组数据的压缩文件。模组数据要与游戏文件有相同的文件结构
  • descriptor.mod文件在模组文件夹内部——它应当包含与上面的 .mod 文件相同的信息。(注意:文件名必须为 descriptor.mod,且不能用 UTF-8 BOM 编码储存)
  • 模组图片 (可选) - 模组文件夹中命名为 thumbnail.png 的文件, 起到 Steam 创意工坊模组图片的作用。(注意:必须使用 .png 格式并命名为 'thumbnail.png';尺寸不重要,但应该按照 1:1 的比率。)


游戏启动器的模组配置工具可以自动创建基本的文件结构。前往Mods 标签页,然后点击Mod 工具创建 Mod。 注意文件夹和文件的名字在 macOS 和 Linux 上大小写敏感。

Steam 工坊模组

从 steam 创意工坊订阅和下载的模组位于.../Paradox Interactive/Hearts of Iron IV/workshop/content/394360或在某些情况下位于...\SteamLibrary\steamapps\workshop\content\394360

从 Steam 创意工坊下载的模组与手动安装或创建的模组其处理方式有所差异:
虽然模组的 .mod 文件会出现在模组文件夹(表示为remote_file_id),但是模组的内容被存储在...\Paradox\Hearts of Iron IV\workshop\content\<remote_file_id>
remote_file_id是创意工坊给予模组的一个标识。这个标识被用来表示模组 .mod 和 zip 文件的名字,但在 .mod 和 descriptor.mod 文件中是这样表示的:

name="New Ideologies"
archive="workshop/content/281990/678893824/newideologies.zip"
tags={
	"Balance"
	"Gameplay"
}
remote_file_id="678893824"
supported_version="1.0.0.19987"

注意:从游戏 1.9.0 开始,新创建的模组不再存储在 .zip 压缩包中


创建一个模组

总原则

  • 修改游戏的模组的文件结构应与原版游戏保持一致。
  • 文件夹中找到的所有文件都会被游戏加载。
  • 所有 .txt 文件都应使用 UTF-8 without BOM 的格式,本地化(localisation)文件都应该使用 UTF-8 BOM 的格式。
  • 要覆盖原版文件,使用相同的文件名。
  • 要添加新内容同时不改变任何原版文件,使用一个不同的文件名。
  • 游戏除文件目录的变化外不会作进一步的变化检查。如果想在文本文件里新添一行,则需要复制整个文本文件后再在复制后的文件里添加。

创建简单的本地模组

例如,要创建一个名为“Test1”的模组,则要在...\Paradox\Hearts of Iron IV\mod目录下新建一个名为test1.mod的文本文件和名为'test1'的文件夹。

test1.mod的内容应该与下述一致:

name="Test1"
path="mod/test1"
tags={
	"Alternative History"
}
picture="thumbnail.png"
supported_version="1.5.4"

这样做是为了给游戏启动器提供模组的信息。包括了模组的名称、位置(来自 mod 文件)、标签(额外的描述符)、图片名称和支持的游戏版本。

创建次级模组

有时你会想你的模组能依赖其他模组,并且按照一定的加载顺序。模组通常会按字母顺序加载(所以列表中最后一个模组会覆盖前面的模组)。但是有些东西可能会影响这点,所以如果你需要一个特定的加载顺序,确保你写明了依赖关系,这需要在 .mod 文件的 "dependencies" 下写出其全名来指定。

name="testmodB"
path="mod/testmodb/"

# this guarantees we load testmodA first before our testmodB is loaded
dependencies= { 
	"testmodA" 
}
supported_version="1.5.2"

增加模组内容

例如,一个简单的修改就可以改变游戏中显示的文本。

要改变加载界面中出现的名人名言,请把游戏原版文件,“.../Hearts of Iron IV/localisation/loading_tips_I_english.yml”,中的“localisation/loading_tips_I_english.yml”文件复制到你新创建的“mod/test1”文件夹下的“localisation”文件夹。

文件结构现在看起来应如下所示:

 ...\Paradox Interactive\Hearts of Iron IV\mod
     test1.mod
     test1 (dir)
       localisation (dir)
         loading_tips_I_english.yml

当“loading_tips_I_english.yml”未被改变时,游戏将会像往常一样正常运行。但是如果改变了,游戏就会使用新内容而不是惯常的“loading_tips_I_english.yml”。修改模组文件夹中的“loading_tips_I_english.yml”文件,让它包含这些内容:

 l_english:
  LOADING_TIP_0:0 "Test1 mod"

当游戏加载这个模组并以英文运行时,唯一显示的名人名言就会是这句“Test1 mod”。

小提示

  • 要准确理解代码中的东西是怎么工作的,查看游戏文件以及搜索你的模组会改变什么东西等类似的事会很有帮助
  • 另外,你可以在...\steamapps\workshop\content\394360下搜索其他用户模组的文件
  • 尽量减少对原版文件的覆盖,这样你在管理模组让它与最新版游戏保持一致,并且减少与其他模组的冲突时都会更方便一些
  • 测试模组时,查看...\Documents\Paradox Interactive\Hearts of Iron IV\logs\error.log下的错误日志很有帮助,这能让你在有些东西不起作用时得到相关线索。

参见

根据你的模组要做什么,你可能会想浏览一些与部分更基础的游戏内容修改相关的页面: