三、创建一个项目并配置civ6proj文件

该章节将阐述关于civ6proj的一些内容。

创建一个新项目

我们要知道,每一个Mod都是一个项目,所以创建新项目是开始写一个Mod的第一步。

Starter相关的是官方的Mod样例项目,其中包含每种类型的基本代码。

我们选择对应DLC的空MOD(Empty Mod,后面小括号内是DLC版本),在Name中填写上Mod的项目名称,点击OK。

Mod的基本信息

当我们点击OK后,会弹出创建新Mod步骤1的窗口,我们需要根据文本框依次填写标题、作者、特别感谢、描述等内容,当然,不填写也可以在项目中修改。

新人强烈建议确定Title!!!原因如下:(看不懂也没关系,后面会讲)。

初识项目管理器

项目管理器可以管理Mod项目文件

进阶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图形化配置

civ6proj实际上是转化为modinfo之前的文件,不会在项目管理器中作为文件显现,因为其中绝大多数内容都会出现在图形化的配置页面当中,但你仍然需要了解如何手动修改这个文件,我们先来看看如何打开图形化界面。

当你右击白色文件的时候,会弹出一个重要的对话框,我们先点击Properties

Mod基本信息配置

通过这一步,我们的工作区会弹出如下内容:

这是Mod配置的主要界面,左侧为项目,右侧为内容

我们先来看Mod Info:

  • Mod ID:这里是一个 UUID 通用唯一识别码(Universally Unique Identifier),不建议修改(因为已经是唯一的),关系到Mod和DLC之间的执行关系和游戏资源的加载,若New之后,必须将Art.xml中的一并修改(Art.xml中UUID的与这里必须一致)。

  • Version:这里指Mod版本,意思为你下一次发布的Mod的版本是什么,我们可以利用这个实现一些Mod和DLC之间版本的控制等等。

  • Mod Name:这是Mod名称,在游戏中会显示。

  • Author:这是作者。

  • Special Thanks:特别感谢。

  • Homepage:这是Mod作者的相关主页,可以填写你的Steam个人主页。

  • Teaser:当你打开游戏中的Mod管理器,鼠标在Mod名称上停留(可以开关的那块区域),会提示这个。

  • Description:Mod的描述。

  • Compatibility:这是兼容性

    • Single Player:支持单机游戏,可在单机中运行。

    • Hot Seat:支持热座游戏,可在热座中运行。

    • Network Multiplayer:支持网络游戏,可在网络中运行。

    • 若以上几项为否,则不能再对应的游戏中运行。

  • Saved Games: 游戏存档相关。

    • Affects Saved Games 是否影响游戏存档,如果Mod是修改了UI等内容,可以不勾选,因为不会有新的数据添加到游戏中,这样UI Mod关闭后,存档也可以被游戏载入,反之不行。

  • Compatible Versions:版本兼容性,不勾选对应的版本在Mod管理器中提示版本不兼容。

    • Gathering Storm:是否支持风起云涌。

    • Rise and Fall - Spring Update:是否支持迭起兴衰 春季更新

​Mod自定义数据配置

基本可以无视,极特殊情况使用

自定义配置内容,很少会使用,这里不详细描述,键值对形式,在civ6proj以xml形式存储。

键值对是指 Key-Value,通过对应的Key我们可以访问到对应的Value,例如:

Key:Min Value:1 | Key:Max Value:10

这样,程序通过访问Min和Max即可得到相应的数据。

Mod依赖项和关联项配置

Mod加载依赖项管理

这里面有三大文本框,分别为 Dependencies References Blocks。

  • Dependencies:依赖项,如图所示,其中依赖了风起云涌这个DLC,没有这个DLC无法在游戏中激活该Mod。

  • References:引用项,是一种“不严格”的依赖项,即便相关内容没启用Mod也可以运行。

  • Blocks:禁用项,若某个Mod或者DLC开启,该Mod无法被启用。

Type是类型,Name是名称,接下来,我们将讲述三个列表那三个相同按钮(名字一样的都是一样的)。

Add Mod...会弹出的菜单
  • Mod Title:对应Mod的标题,在游戏Mod管理器中显示。

  • Mod Id:对应Mod的UUID,这里必须填写一致,在游戏过程中被处理识别。

  • From Version & To Version:开始和结束版本,这里是一个区间,只有处于这个版本号的Mod才会被影响,除此之外不影响,可以阻止一些老旧Mod不兼容导致的Bug,又或者是你不想让两个Mod同时被启用(这里指用于Blocks时)。

Add DLC..会弹出的菜单

官方很良心的把每个DLC的Name和Id都写在里面了,所以我们只需要在上面的下拉菜单中选择对应的DLC即可。

官方的叫Package,我们的叫Mod。

若添加错误可以选中对应条目之后变蓝按Remove键移除。

Mod数据内容和文件加载配置

FrontEnd是指你打开文明6到没有点击开始游戏的这段时间。

In-Game是你进入游戏后的时间。(从点击按钮之后黑屏时显示载入中就已经是了)。

FrontEnd时Mod如何被载入

这是重点,所以要仔细看,一句话都不要落下。

我们先看最左侧的Action(动作)旁边的列表框。 Type:是类型,可以出现多个相同的(在InGame中比较有用),我会详细讲述有哪几种类型,而ID则是相关动作的名字,在日志中会有体现,似乎FrontEnd和InGame之间可以重复,Mod与Mod之间可以重复。

这里的Emiya Pre Art可以理解为 卫宫 预加载 美术资源,我都说这么命名的。

EmiyaInGameDataEP1 卫宫 游戏中 数据 资料片1

统一的命名方便后续DEBUG(查找漏洞)。

截至2019年4月4日,包括所有官方内容,共有以下几种Action Type:

  • AddMap:添加地图,只有把做好的地图通过这个方式加入到游戏中才可以被读取,应该是MAP格式。

  • AddWorldBuilderMap:类似于盘古大陆、岛屿那样的东西?相关文件被载入就可以在游戏中动态生成,也许包含XML,SQL,LUA,MAP格式。

  • ImportFiles:导入文件,部分文件是通过中继调用的,所以要把部分文件导入到游戏中让游戏读取。

  • UpdateArt:这里只应该有一项内容,就是(Mod Art Dependency File),这个是Art.xml的代词,等同于Art.xml,而Art.xml也只应该在这里被载入,绝大多数情况下不需要有第二个UpdateArt。

  • UpdateColors:风起云涌后的新功能,把InGame的颜色改到了FrontEnd(这样玩家可以在开始的时候修改自己图标配色),即便如此原来的颜色系统(老版本的UpdateDatabase-InGame方案)也可以正常工作,风起云涌更新前(我是指风起云涌这次版本而不是DLC),无法被正常使用(大多数影响盗版,因为正版就是最新版),只应该有XML和SQL。

  • UpdateDatabase:主要数据内容,凡是涉及到游戏中的数据(战斗力、生产、科技树)等等内容,都会通过这个动作被更新,在FrontEnd里用于注册Mod在FrontEnd时期的工作内容,例如领袖的选择界面,只应该有XML和SQL。

  • UpdateIcons:图标内容:当你在FrontEnd选择领袖时的那个图标,和在游戏中的图标,都是通过这个功能来加入到游戏中的,这里面只应该有XML和SQL,而其他的贴图会在资源编辑器中被打包,后续章节会讲。

  • UpdateText:文本内容:更新游戏中的文本,只应该有XML和SQL。

  • DoNothing:啥也不干,上一个夏天(Last Summer Update)更新的新功能,字面意思,不管。

可以这么理解:在FrontEnd阶段不需要载入的(例如信仰的图标和文字内容),可以在InGame中载入,所以以此区分FrontEnd和InGame都需要Update哪些内容,只在对应的动作中添加需要访问的对应文件即可。

右侧分别为两大栏,上部分为Custom Properties,(Type和ID在上面讲过了)。

在这里可以写一些内容用于自定义数据被游戏读取,例如官方的LoadOrder,用于控制读取顺序,和下面的优先级使用方式一样。

Context标签在AddUserInterfaces中必须被声明,我只用过Value为InGame这一种。

LoadOrder的排序似乎是以全游戏顺序排的,DLC1和DLC2在-100。

Files是添加文件,通过这个方式,我们把需要加载的对应文件添加到对应的动作中。

再次重申,该文件等同于art.xml

Priority是读取顺序,通过数字来调整前-后,先读取小的,再读取大的,允许负数。(该功能似乎只限制于该动作内)。

举例子:假设你有三个修改同一个单位的文件,你可以把基础数据改为1,把增量数据改为2,把第三个改为3,这样就会按顺序覆盖,如果你反着来,3号文件可能会提示缺少1号文件的内容。

我的政哥哥有大量的特性需要被修改,但放在一个XML里又很乱,所以我把特性抽了出来,做成了新的文件,并排在最后让游戏导入。

如果不做排序,那么当政哥哥还没加载完全,就去开始修改其中的数据时,这时候游戏会报错,因为那些要被修改的数据还没有被加载,当然也改不了。

InGame界面,比FrontEnd多了点东西

其中刚才和FrontEnd中匹配的内容用法和功能是一样的,这里只讲新出现的:

  • AddGameplayScripts:游戏中一些内容是通过Lua实现的,Lua是脚本语言,与XML和SQL完全不同。

  • AddUserInterfaces:添加用户界面,通过这种方式游戏可以获得新的UI内容,需要加载XML,对应的Lua需要被ImportFiles加载而不是AddGameplayScripts。

  • ReplaceUIScript:替换UI文件,这是迭起兴衰更新后的功能,用于替换原版的一些UI(因为原版所有内容都要被读取,而新内容只能通过这种方式替代),和AddUserInterfaces用法一样。

  • UpdateAudio:更新声音文件,这里应该包含由Wwise生成的bnk、txt、xml和一个我们自己写的bank.ini

  • UpdateLogitechARX:升级ARX图标,在文明6中,所有文明的图标都可以在罗技推出的LogitechARX手机APP里显示,通过这个方式,可以把Mod文明的图标传送到手机里。

Audio在文明BGM中有BUG,需要Wwise软件才可以实现,后续章节讲。

LogitechARX用的人很少,不做的话新文明在手机APP上会显示问号,命名前缀为:Civ_(后面详细讲)。

InGame中的新内容
Criteria这个界面的New很少用到

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是依赖类型:

  • Include:该动作包含目标动作?(不确定)

  • Exclude:该动作排除目标动作?(不确定)

  • Required:该动作需要目标动作。(这个用的多一些)

  • ConflictsWith:该动作排斥目标动作?(不确定)

至此,所有civ6proj的图形化内容全部完成。

案例:官方Action加载

		<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代码化配置

有一些内容,还是要通过文本方式去修改的,现在,我们来学习如何找到civ6proj并明白其中的内容。

你的Mod项目应该在这个路径下(Win10)

这是Mod的最外层,其中ci6sln和civ6suo是IDE使用的,通过这个才可以被IDE打开,这些文件和我们制作没有关系,但你必须要保留并且不能破坏。

这是Mod的真正路径

当我们打开后,我们发现了Art.xml和.civ6proj两个文件,我们把主要方向着重与civ6proj,笔者通过使用Sublime Text来修改,当然,你有其他工具也可以,例如UltraEdit,Atom,Linux的vim等等。

不建议使用自带的文本文档,因为复杂的结构会让你十分很乱。

Mod的项目配置文件(最终大部分内容完成后的样子)

这也许是你第一次看到XML,但不要眼晕,你仔细看一看,其中的<>内容是否与刚才图形化对应的选项文字的一样?OK,本章节不会告诉你怎么去理解这些,因为我会先从XML的基本来教你,现在只是告诉你这个文件的位置,并且如何去打开。

复读机:civ6proj在Mod生成后就是modinfo

因为这个文件不需要大幅度手动修改(90%图形化解决),所以这一节很短。

Last updated

Was this helpful?