前言
学会使用mod工具,能够让你的游戏(装mod)体验更上一层楼。
本教程涉及各种Mod工具,但主要还是围绕xEdit的使用。部分参考于开源的Lively Dismay教程,因此本教程同样遵循相同的开源协议,这意味着任何人均可对该内容进行添加、修改及重新发布(CC BY-NC-SA 4.0)。
请注意,该教程需要正版游戏本体(实际上不需要,但这都2023了你还没买老滚?),盗版游戏将无法获得支持。
章节目录
这里是目前已经写好的内容。
0 - 1 小节:基础工具的安装与配置、MO启动项设置于工具输出路径
- BGS游戏中的常见文件格式 <- 你在这里
- 如何为esp移除前置模组
- 如何使用SPID(Spell Perk Item Distributer)为任意容器、NPC分配物品
- esp转esl(espfe/esl-flagged esp)
- 使用zEdit合并多个esp
- Nemesis 与 FNIS 共存的动画引擎解决方案
计划更新内容
- 如何找到未汉化的esp及词条
- xEdit基础:Keyword与Condition
- 通过xEdit进行冲突排查与简易补丁制作
- CK教学:制作基础的世界冲突补丁
后续章节还是发在单独的帖子里,我会把链接更新到上面的目录里作为跳转。
------------分割线------------
BGS游戏中常见的文件格式
BGS是Bethesda Game Studio的缩写,因此这里我们说的实际上就是上古卷轴与辐射为主的几款游戏,尤其是上古卷轴4、5以及辐射NV、4。了解文件格式是为了让你清楚自己每天安装到游戏里的mod都是如何发生作用的。
以上古卷轴5的mod为例,作者在发布时往往会有两种不同的打包方式,零散文件(loose file)以及封包文件(BSA)。你可能会看到诸如不一样的人生等mod在安装之后,文件夹内只有esp以及几个.bsa格式(在辐射是.BA2)的奇怪文件,这种文件实际上也是一种压缩包,只不过是B社游戏引擎能够读取的格式罢了。因此,在之后我们将用零散文件来说明,对于bsa包的一些特性我会放到全文的末尾,因为它不是最重要的内容。
另外,老滚和辐射的(尤其是一些替换原本内容的)mod,他们的工作原理基本上都是利用相同的文件名去替换原版游戏里的文件,从而达到修改的目的。因此请不要随意修改mod文件名或扩展名。
1. 文件的类型
首先,我们可以以N网上一个最受欢迎的mod为例来说明——以下是天际的滑翔伞这个mod的文件内容
这是一个比较典型的mod可能会包含的文件:meshes、textures、sound、scripts、SKSE、nemesis等文件夹外加一个.esp文件。下面我将大概介绍每种文件夹里通常放的是什么。
1.1 Meshes 和Textures
构成游戏世界最基础的两个元素——模型与贴图。meshes文件夹中几乎都是b社引擎能够读取的nif文件,它们就是你在游戏内看到的各类生物、NPC、武器服装等物品的模型,但只有模型还不够,通过在nif文件中引用textures文件夹中的贴图(它们都是.dds文件),就构成了你在老滚中看到的画面中的几乎一切元素。
meshes中的文件虽然基本上都是模型,但你还会看到类似maleskeleton.nif这类NPC骨骼文件,骨骼在游戏中是用来驱动生物及NPC运动的结构,和真实世界的人体一样,有了骨骼(Skeleton),再有皮肉(Mesh),然后为骨肉添加肌肉连接(绑定、蒙皮和变形weight and morph),一个NPC就能够进行跑动、打斗等各种活动。有时候nif还会被用作游戏中的特效,例如许多剑影mod就是将一张薄片模型贴上贴图做出来的。
textures中的文件全都是贴图。老滚以及辐射使用的贴图格式为.dds文件,而dds又分为许多种不同的位数,针对不同引擎有不一样的贴图位数要求。例如传奇版老滚所要求的贴图格式通常为DXT3(或BC3),而重制版及周年版的引擎则更喜欢BC7格式的dds贴图。
如果你经常使用MO,应该能够注意到MO其实自带贴图预览插件。通过双击任意mod,在窗口中找到随便一张dds文件,对其双击,MO会打开一个方便的预览窗口来显示贴图的内容,在窗口下方还会告诉你这张贴图具体是哪种位数的dds。如果你无法进行贴图预览,可以在以下设置中启用这个MO插件:
而nif模型的查看则需要使用到第三方工具——nifscope。Nifscope支持查看并对模型进行一些简单的修改。同样能够查看nif模型的工具还有另外一个,是跟随Bodyslide一同打包的Outfit Studio,你可以在Bodyslide的文件夹内找到它。它通常用来制作服装mod,修改蒙皮和权重绘制。更加进阶的模型修改和制作则需要用到更专业的三维软件,例如Blender、3Ds Max等,但这不在本教程的讨论范围内。
更新:找到一个MO插件,可以像预览dds贴图那样预览nif模型,但目前仍处在beta状态。下载链接
1.2 Sound
你在游戏中听到的武器击打音效、NPC语音、BGM等声音都在这个文件夹内。BGS的音频文件分为几种,在老滚中常见的是.fuz和.wav两种格式。.fuz文件通常用在NPC语音上,它内部还包含.lip文件,用于使NPC在说话时做出大致的嘴型动作,而.wav则是一种通用的音频文件,但直接使用wav在老滚中的性能和资源占用不如fuz来的高效,有些mod会在特效音频上采用wav格式的音频。
wav文件可以在任何电脑上直接播放,但是fuz文件无法直接预览,而是需要使用专门的转换工具(LazyConverter或Yakitori等)转成mp3或wav,在转换时如果包含有效的.lip文件也会被一起解压出来。
在辐射中还有一种格式的音频被经常用到——.xwm,它与fuz类似,也需要通过专门的工具转换。
老滚的音频具有一个特性,就是在电脑上预览所听到的音量要比实际在游戏中听到的大声,所以如果你想制作音频替换类mod,最好在处理声音时提高音频的音量大小。
1.3 Scripts
这个文件夹中就是老滚的脚本文件了。通常mod作者在发行mod时会考虑将脚本以及源代码一同打包发布,这是因为老滚及辐射的脚本撰写几乎总是需要用到来自其他mod的源码,为了方便其他的mod作者能够直接使用原作者的代码(因为到目前为止老滚的脚本仍然无法反编译为源代码),大多数作者都会主动提供源代码文件。所以你常常会看到scripts文件夹内包含一堆.pex文件以及额外的source文件夹(里面是一些.psc格式的源代码)。pex格式的文件无法被常规的文本编辑器打开,但可以在CK中查看大致的功能内容,而psc文件则可以通过记事本、VSCode等文本编辑器打开浏览,如果你能看懂一点脚本语言,那么它对你来说就和英语没什么差别。
老滚的脚本都是以代码片段的方式工作的,每个pex文件就是实现某种功能的一段代码。在pex中的第一行通常会声明本脚本的名称,以及这段代码的用途是扩充原版中的哪一部分内容。而让脚本发挥作用的则是esp中所指定的引用规则。
1.4 SKSE
带有这个文件夹的通常是一些SKSE插件。最常见的是SSE引擎修复、SSE Display Tweaks等。SKSE插件的特点是更高效、即插即用而不用担心排序、存档等问题。
1.5 Nemesis
带有这个文件夹的通常为复仇女神动作引擎专用的动画、战斗框架等mod。并且这类mod一般是无法用在FNIS动作引擎上的。
1.6 esp的类型
想必大多数人都知道老滚的插件格式有esp、esm和esl三种,但是实际情况比三种要复杂一点。
1.6.1 插件格式的多样性
esm格式:m代表master,即主插件或前置插件的意思。esm格式在MO中会被加粗显示,并且总是加载在最上面,即使你安装时没有排序,看起来它被放在加载顺序最末尾,但实际上在游戏加载时,引擎还是会将他放到顶端。通常那些大型地域扩展(如警戒者mod)、大型任务模组(如龙裔艺术馆)以及作为框架类的mod(如高模头、高跟音效)会使用esm格式。因为它们需要被最先加载、并且在有必要时被别的mod覆盖。同时出于老滚引擎上的一个限制(会在之后的一篇翻译文中介绍),涉及大量世界空间修改的mod也需要使用esm格式,否则会随着存档时间递增而出现问题。
esl格式:l代表light master,即轻量主插件。esl在MO中会显示为斜体,并且总是加载在esm后面,其他esp前面。特点是只包含小于等于2048个词条。esl格式的插件如果在文件头部被标记为esm,那么它就会以加粗斜体的形式显示,并且遵循esm的排序和加载规则。
esp格式:p代表plugin,即普通的插件。它们被加载在esm和esl的后面。
但实际上,对于esp来说它还分成四种情况:普通的esp、被标记为esm的esp、被标记为esm及esl的esp以及被标记为esl的esp
- 普通的esp就是最常见的那种esp,它可以被放在esm和esl后面的任意位置;
- 被标记为esm的esp,实际上和esm是相同的,它们同样会被加粗显示,并且只能和其他esm一起排在最上面;
- 被同时标记为esm和esl的esp,实际上和esl格式相同,它们会以斜体显示,和其他esl排在一起;
- 被标记为esl的esp,也被叫做espfe,就是我们常说的转esl的操作。这种esp的词条数量小于等于2048,并且在排序上和普通esp一致,可以放在任何位置。
老滚插件格式的多样性
以下是理论上的加载顺序:
- esm(包括标记为esm的esp)
- esl(包括标记为esm和esl的esp)
- esp
- espfe
esl以及espfe在游戏内存中共同占用FF开头的ID,而由于老滚的ID以16进制呈现,因此在理论上你能够安装的esl和espfe插件数量是4096个,它们加起来占用老滚的255个esp数量的一个。esm、esp的数量上限则是249个(255-5个官方esm-1个FF插槽)。
1.6.2 你为什么需要关心这些
这种加载规则也关系到游戏中途新增或删除mod的行为。如果是espfe,不管你把它放在哪里,他都不会影响到其他esp的编号(id开头前两位16进制编码),但是这不代表着你可以在存档中途随意加减espfe;
如果是esp,中途删除绝对是最愚蠢的做法。就算删除的esp只是用于加载BSA所使用的空esp,删掉它也必然导致排序在他后面的其他esp的id编号全部发生变化。对于那些被老滚写入存档的数据来说,大量的id变动绝对是你不想遇到的状况。
如果你实在想要中途添加mod,建议你把它放在加载顺序的最后,避免改变其他esp的ID。但这样不代表问题不会发生,把新的esp放在最末尾,只能保证该mod的内容能够正确安装进游戏,但如果它覆盖了你的其他mod,那么有可能导致其他mod出现问题。
总结:一旦你决定正式开始游玩,就不要随意改动插件加载顺序,尤其是应该避免中途删除插件的行为。如果你不幸安装了有一堆bug的模组,那么要么删除并开新档,要么通过MCM来禁用mod功能(如果有的话)。
2. BSA —— B社的文件压缩格式
2.1 BSA包的特性,以及老滚的文件加载机制
如前文所述,在老滚中mod发布一般有两种方式——以零散文件(loose files)的形式和以BSA包的形式。BSA作为一种压缩格式,除了能够减小单个mod的文件体积以外,他还具有一些零散文件不具备的特性。
特性1:BSA的加载更加高效
老滚的引擎在加载文件时,他的顺序是这样的:
在Skyrim.ini中定义的BSA(官方BSA)
以esp插件形式加载的BSA
- 排序靠上的
- 排序靠下的
排序靠上的零散文件
排序靠下的零散文件
换句话说,BSA始终是先于零散文件被加载到游戏中。
特性2:BSA文件始终被零散文件所覆盖
另外这种加载机制也会导致另一个特性出现。比如,如果你有两个mod——mod A 和 mod B,它们都对纳齐姆的外表做出的不同修改,但A是以BSA包的形式安装的,而B则是以零散文件的形式安装。当你将A和B同时安装时,不管你对它们如何排序(这里的排序指左边面板中的文件排序),生效的永远是B所做出的修改。这就是为什么你会听别人说零散文件始终覆盖BSA的原因。
特性3:BSA对游戏加载速度的影响
看到现在你可能会说,那既然BSA读取更加高效,为什么不把所有mod都打包成BSA呢?假设你将你的老滚mod全部打包成BSA之后,你会很快发现一个现象,那就是你的游戏启动到进入主界面的速度明显变得快了很多。紧接着,随着你进入游戏之后,你会接着意识到快速旅行的加载速度似乎变得更慢了。这就是BSA对于游戏加载速度的影响。
在老滚刚刚启动的时候,引擎并不会去查找,或者说使用你所安装的BSA包里的内容,知道你载入一个存档或者创建新存档并进入游戏时,BSA中的内容才会被读取。这个行为导致BSA使用的越多,你的游戏启动速度就越快。但是例如主界面替换这种mod就很显然不能使用BSA压缩。
结论就是:理论上来说如果全是BSA——更快的启动速度,更慢的加载;如果全是零散文件——更慢的启动速度,更快的加载。
但作为一个玩家来说,其实你没必要过多操心由BSA带来的加载速度影响。因为对大多数电脑的配置和大多数人的mod环境来说,加载速度上的变化几乎可以忽略不计。BSA最主要的好处还是在于缩小文件体积上。
特性4:BSA包需要有同名的esp激活时才能被游戏加载
对于mod添加的BSA来说都是如此,除非你在老滚的INI文件中手动添加BSA文件名来强制老滚读取它们,但是那样非常的麻烦。所以有时候你会看到一些以BSA发布的mod,虽然它们只是模型贴图替换,但却自带一个esp。但好消息是esl或者espfe也可以用来读取BSA,因此你可以随意将esp转成esl,节省一个esp数量。
2.2 解压BSA
所有人都应该知道如何解压或打包BSA。这里你需要额外下载一个软件
BAE
如果只是想要解压BSA包,使用MO自带功能是最方便的。以下是设置及使用方法。
1. 激活BSA压缩/解压插件
2. 寻找需要解压的BSA包位置
直接在MO中的封装包栏内寻找(Mod不多的情况)
- 解压BSA
在封装包栏内,对着BSA条目右键,选择提取即可。
2.3 压缩为BSA
任何mod的内容都可以被压缩为BSA,并且实际上使用BSA包还有一些好处(在上文提及)。
BSA打包有以下规则:
- 贴图文件夹(textures)应该单独打包成一个BSA文件,并命名为 mod名称 - Textures.bsa
- 其他文件夹(meshes、scripts、sound等)可以统统打包到一起,并直接命名为 mod名称.bsa
- esp不应打包。
需要注意的是bsa文件名称需要和esp名称对应,才能够被游戏正确读取。
使用BAE进行压缩的过程很简单,只需要按照软件界面的按钮来进行即可。
参考
Plugin Files and You - Arthmoor, AFK Mods
BSAs and you - alt3rn1ty,AFK Mods