我们要知道,每一个Mod都是一个项目,所以创建新项目是开始写一个Mod的第一步。
Starter相关的是官方的Mod样例项目,其中包含每种类型的基本代码。
注意这两步名称内不应该包括奇特的字符,例如/ * \ ? 等等不满足文件命名要求的,会造成编译出错等奇特问题(而且不好修复)。
我们选择对应DLC的空MOD(Empty Mod,后面小括号内是DLC版本),在Name中填写上Mod的项目名称,点击OK。
当我们点击OK后,会弹出创建新Mod步骤1的窗口,我们需要根据文本框依次填写标题、作者、特别感谢、描述等内容,当然,不填写也可以在项目中修改。
Description(描述)有最小字数限制,若不满足条件则无法点击其他按钮和控件。
这里不建议填写中文,若需要中文后续再改(部分字段涉及到项目的初次生成)。
新人强烈建议确定Title!!!原因如下:(看不懂也没关系,后面会讲)。
进阶Modder注意:Mod.Art.xml的<id><name>会根据这里的Title生成。
进阶Modder注意:老版本的art.xml生成会是mod.art.xml,新版本空格都会变成_,建议手动纠正xml中的<id><name>中的_为空格(xml中可以写空格,与Modding.log日志有关)
Fate_Stay_Night___Emiya.Art.xml 是空项目自动生成的文件,用于控制游戏如何载入Mod相关的模型音效等多媒体素材。(老版本是Mod.art.xml,新版本似乎会与项目名称一致)。
我们将在稍后讲述关于art.xml的事情,现在把重点放在本章主题:配置civ6proj。
civ6proj实际上是转化为modinfo之前的文件,不会在项目管理器中作为文件显现,因为其中绝大多数内容都会出现在图形化的配置页面当中,但你仍然需要了解如何手动修改这个文件,我们先来看看如何打开图形化界面。
通过这一步,我们的工作区会弹出如下内容:
我们先来看Mod Info:
Homepage会自动填充http://,但不识别https://,解决方案1.手动改civ6proj,解决方案2:把URL复制进去不要点其他地方,ctrl+s保存然后快速关闭图形化配置界面再打开。
自定义配置内容,很少会使用,这里不详细描述,键值对形式,在civ6proj以xml形式存储。
键值对是指 Key-Value,通过对应的Key我们可以访问到对应的Value,例如:
Key:Min Value:1 | Key:Max Value:10
这样,程序通过访问Min和Max即可得到相应的数据。
这里面有三大文本框,分别为 Dependencies References Blocks。
Type是类型,Name是名称,接下来,我们将讲述三个列表那三个相同按钮(名字一样的都是一样的)。
官方很良心的把每个DLC的Name和Id都写在里面了,所以我们只需要在上面的下拉菜单中选择对应的DLC即可。
官方的叫Package,我们的叫Mod。
若添加错误可以选中对应条目之后变蓝按Remove键移除。
FrontEnd是指你打开文明6到没有点击开始游戏的这段时间。
In-Game是你进入游戏后的时间。(从点击按钮之后黑屏时显示载入中就已经是了)。
这是重点,所以要仔细看,一句话都不要落下。
我们先看最左侧的Action(动作)旁边的列表框。
Type:是类型,可以出现多个相同的(在InGame中比较有用),我会详细讲述有哪几种类型,而ID则是相关动作的名字,在日志中会有体现,似乎FrontEnd和InGame之间可以重复,Mod与Mod之间可以重复。
这里的Emiya Pre Art可以理解为 卫宫 预加载 美术资源,我都说这么命名的。
EmiyaInGameDataEP1 卫宫 游戏中 数据 资料片1
统一的命名方便后续DEBUG(查找漏洞)。
截至2019年4月4日,包括所有官方内容,共有以下几种Action Type:
DoNothing有可能可以通过这个方式把一些无关文件打包为Mod(Steam上传器会检索modinfo,也许通过这种方式可以上传一些乱七八糟的内容)。
可以这么理解:在FrontEnd阶段不需要载入的(例如信仰的图标和文字内容),可以在InGame中载入,所以以此区分FrontEnd和InGame都需要Update哪些内容,只在对应的动作中添加需要访问的对应文件即可。
右侧分别为两大栏,上部分为Custom Properties,(Type和ID在上面讲过了)。
在这里可以写一些内容用于自定义数据被游戏读取,例如官方的LoadOrder,用于控制读取顺序,和下面的优先级使用方式一样。
Context标签在AddUserInterfaces中必须被声明,我只用过Value为InGame这一种。
LoadOrder的排序似乎是以全游戏顺序排的,DLC1和DLC2在-100。
Files是添加文件,通过这个方式,我们把需要加载的对应文件添加到对应的动作中。
Priority是读取顺序,通过数字来调整前-后,先读取小的,再读取大的,允许负数。(该功能似乎只限制于该动作内)。
举例子:假设你有三个修改同一个单位的文件,你可以把基础数据改为1,把增量数据改为2,把第三个改为3,这样就会按顺序覆盖,如果你反着来,3号文件可能会提示缺少1号文件的内容。
我的政哥哥有大量的特性需要被修改,但放在一个XML里又很乱,所以我把特性抽了出来,做成了新的文件,并排在最后让游戏导入。
如果不做排序,那么当政哥哥还没加载完全,就去开始修改其中的数据时,这时候游戏会报错,因为那些要被修改的数据还没有被加载,当然也改不了。
其中刚才和FrontEnd中匹配的内容用法和功能是一样的,这里只讲新出现的:
Audio在文明BGM中有BUG,需要Wwise软件才可以实现,后续章节讲。
LogitechARX用的人很少,不做的话新文明在手机APP上会显示问号,命名前缀为:Civ_(后面详细讲)。
Criteria是文明6官方后续更新(迭起兴衰之前的版本)添加的内容,只有将对应的Criteria写入游戏中,自定义文明和自定义领袖才能够被游戏读取。
通过Criteria可以控制DLC1,DLC2,和原版分别读取哪些文件,也就是说为对应的Action添加对应的Crieria可以实现该功能。
我的政哥哥Mod长城在原版,DLC1和DLC2的加成是不一样的,就是通过这个方式实现的,而不是优先级。
可以理解为是动作之间的关联项,例如:
有一个Mod记录着一个单位,而另一个Mod想要修改这个文件,那么排序和验证都是无效的,通过依赖项,我们可以让新Mod以Required的方式,让需要修改的Mod提前载入,而新Mod后载入,这样就可以实现覆盖效果了。
Mod Id是指目标Mod的UUID(你也可以写这个Mod本身的UUID)。
Action Id是指目标的动作ID(注意刚才讲过的命名规则,这里就有用了)。
Type是依赖类型:
至此,所有civ6proj的图形化内容全部完成。
<UpdateDatabase id="Expansion2Core" criteria="Expansion2">
<Properties>
<LoadOrder>-100</LoadOrder>
</Properties>
<!-- Schema comes first -->
<File Priority="2">Data/Expansion2_Schema.sql</File>
<!-- Remove data second -->
<File Priority="1">Data/Expansion2_RemoveData.xml</File>
</UpdateDatabase>
这是官方DLC2更新数据的相关XML,在DLC2的modinfo中可以找到。
其中定义了(id="ExpansionCore2")这个动作(UpdateDatabase)只会在DLC2时候被读取(criteria="Expansion2"),读取的顺序是-100(LoadOrder),先读取顺序为2的文件(Priority="2")中的基础数据,然后通过读取顺序为1的文件来删除无用的数据。
复读机:读取顺序数值越高越提前。
有一些内容,还是要通过文本方式去修改的,现在,我们来学习如何找到civ6proj并明白其中的内容。
这是Mod的最外层,其中ci6sln和civ6suo是IDE使用的,通过这个才可以被IDE打开,这些文件和我们制作没有关系,但你必须要保留并且不能破坏。
当我们打开后,我们发现了Art.xml和.civ6proj两个文件,我们把主要方向着重与civ6proj,笔者通过使用Sublime Text来修改,当然,你有其他工具也可以,例如UltraEdit,Atom,Linux的vim等等。
不建议使用自带的文本文档,因为复杂的结构会让你十分很乱。
这也许是你第一次看到XML,但不要眼晕,你仔细看一看,其中的<>内容是否与刚才图形化对应的选项文字的一样?OK,本章节不会告诉你怎么去理解这些,因为我会先从XML的基本来教你,现在只是告诉你这个文件的位置,并且如何去打开。
复读机:civ6proj在Mod生成后就是modinfo
因为这个文件不需要大幅度手动修改(90%图形化解决),所以这一节很短。