详解Ares引擎[INI文件拆分]与[属性继承]
GreatSword_高
编辑于 2025年11月23日 20:21
收录于文集
共14篇

强烈推荐使用[INI文件拆分]功能,所以这篇文章是排头教程!

首先简单介绍一下Ares引擎:阿瑞斯(Ares)是一款用于扩展《尤里的复仇》游戏功能并修复游戏引擎中漏洞的新工具。它由 pd 在 2007 年末构思出来,多年来由阿瑞斯贡献者团队(The Ares Contributors)进行开发,并于 2010 年首次向公众发布。(官网概述)

它并非EA官方出品,而是通过逆向工程和代码扩展实现的强大模组开发工具,旨在突破原版游戏的技术限制,为模组制作者提供更多可能性。

其官网及中文说明书下载可以在我的另一篇专栏中找到

链接→网页链接​


进入正题,本次主要讲解[INI文件拆分][属性继承]

所谓[INI文件拆分]就是利用[#include]块来让几乎所有的INI文件(包括且不限于rulesmd.ini、artmd.ini、ai.ini、soundmd.ini)外挂新的子ini文件,方便用来调试,封包,加密等

以下为示范:Rulesmd.ini

代码块
JavaScript
自动换行
复制代码
在Rulesmd.ini文件中,随意找个显眼的地方注册,比如表头[General](全局相关标签)上方
[#include]				; 拆分子文件
+=XXXXXX.ini			; 文件名自己设置,必须与文件夹内相同,最好设置英文名。
…………以下是示范例子…………
+=AAlist.ini			; 注册表,这一模块全部是注册表
+=AArules.ini			; 修改内容,这里是你自己新增或修改的单位之类的
复制成功

接下来我们在拆分出来的ini文件内注册或修改等同于在原文件中修改,并且同名单位增加修改词条也会对游戏产生影响,并不需要完整复制一个单位模块。

以下为示范:AArules.ini内

代码块
JavaScript
自动换行
复制代码
AArules.ini内  仅写这么3句话,其它词条没有写

[E2]        ;动员兵
Primary=120mmx						;主武器换成天启主炮
Secondary=MammothTusk				;增加副武器为天启导弹
复制成功

可以看到动员兵的主武器被更新了,副武器也增加了。

换了个显眼的导弹Image

我们不需要把原词条整个复制过来,只需要新增词条,或者重新赋予新的值即可给原单位赋予新属性。修改数量少的时候你看不出来,当多了以后你就知道好处了。

PS:[#Include]可以读取文件夹

代码块
JavaScript
自动换行
复制代码
[#Include]
+=INIConfigs\test.ini
; 读取[根目录]下的[INIConfigs]文件夹下的test.ini文件
+=INIConfigs\Soviet_\test.ini
; 读取[根目录]下的[INIConfigs]文件夹下的[Soviet_]文件夹下的test.ini文件
复制成功

用这个方式可以在茫茫多文件的根目录下快速找到你的INI文件,但是如果你需要MIX封包,MIX包是不读取文件夹嵌套的。


所谓[属性继承]便相当于将[A]全文复制到[B]这里来,包括[A]的本身属性,武器调用巴拉巴拉。使用方式为[B-新单位]:[A-被继承单位]

先在AAlist.ini中注册

代码块
JavaScript
自动换行
复制代码
等同于在Rulesmd.ini内注册
[InfantryTypes]			; 步兵注册表
+=SupperE2				; 超级E2
+=Test_1				; 继承测试单位

[VehicleTypes]			; 坦克注册表
[AircraftTypes]			; 飞行器注册表
[BuildingTypes]			; 建筑注册表
[SuperWeaponTypes]		; 支援技能注册表
[WeaponTypes]			; 武器注册表
[Warheads]				; 弹头注册表
[Animations]			; 动画特效注册表
复制成功

然后在AArules.ini中修改

代码块
JavaScript
自动换行
复制代码
AArules.ini内  仅写这么3句话,其它词条没有写

[E2]        			; 动员兵
Primary=120mmx			; 主武器换成天启主炮
Secondary=MammothTusk	; 增加副武器为天启导弹

[E2Supper]:[E2]			; 超级E2完全继承E2

[Test_1]:[SHK]			; 测试单位继承磁暴步兵
Image=TANY				; 定义谭雅外形
复制成功

可以看到哪怕动员兵在新的注册表内修改了武器,依然全部继承,且引用了谭雅外形的新磁爆谭雅也出现了。

结合继承与拆分,我们可以大大减少重复代码的工作量,不但减少了体积,看着也清爽。

同时“[B-新单位]:[A-被继承单位]”可以理解为“[B-新单位]”,可直接在下方增加词条

为了方便理解,再次举个例子,我们要创建一个新的坦克单位,它引用了战斗要塞的载员逻辑+磁能坦克的磁能武器,然后我们又懒得写那么一堆词条,只需要这样

代码块
JavaScript
自动换行
复制代码
AAList.ini下注册
[VehicleTypes]			; 坦克注册表
+=ANNIHILATE			; 星火燎原MOD——湮灭者坦克

AARules.ini下修改
[Text_2]:[TTNK]			; 继承磁能坦克  
[Text_2]:[BFRT]			; 继承要塞
Image=ANNIHILATE   		; 模型引用=星火燎原MOD——湮灭者坦克
复制成功

然后就得到了一个必须选苏俄国家还要有盟军高科重工没有磁能武器的坑爹换皮要塞(눈‸눈#)

坑爹呢这是!(╯‵□′)╯︵┻━┻

这是因为后面写的继承属性会覆盖前面的属性([继承要塞][继承磁能坦克]后面/下面

所以要塞的主武器覆盖了磁能的主武器

要塞的建造条件Prerequisite=GAWEAP,GATECH覆盖了磁能的建造条件Prerequisite=NAWEAP,NARADR

又因为专属苏联词条RequiredHouses只有磁能坦克有,所以这个词条没被覆盖,就造成了以上结果。

理解了顺序问题,那么我们只需稍稍修改即可。

代码块
JavaScript
自动换行
复制代码
AARules.ini下修改
[Text_2]:[BFRT]				; 先继承要塞,索取载员逻辑
[Text_2]:[TTNK]				; 再继承磁能坦克,替换主副武器  
Image=ANNIHILATE			; 星火燎原MOD——湮灭者坦克
Prerequisite=GAWEAP			; 重新定义建造前提
Owner=Russians,Confederation,Africans,Arabs,British,French,Germans,Americans,Alliance,YuriCountry
; 重新定义所属国
RequiredHouses=Russians,Confederation,Africans,Arabs,British,French,Germans,Americans,Alliance,YuriCountry
; 重新定义哪些国家可以建造
复制成功

这样我们就达到了【不更改原始Rulesmd.INI】的情况下,用很少的词条新增了一个单位。

不要在意开火位置,仅为测试使用

注意:[A-被继承的块]要写在[B-继承者]前面,否则不会继承

以下是@双杀步枪@九千天华大佬总结的“读取顺序图”。

红警DIY论坛大佬九千天华与双杀步枪总结的一图流

简单解释一下:这张图直观的体现了【拆分文件】的读取顺序,A.ini就好比Rulesmd.ini,它拆分了B和D,B又拆分了C,C又拆分了E,D拆分了F和G,如果你在D和E这里分别更改了动员兵[E2]的属性,那么它最终调用的属性是E的属性,也就是最后的属性。

            如果在C、F和G内分别改动,则最终调用G的属性。

同时,它也适用于【属性继承】,比如你在E.INI中继承前面的任意块都没问题,但是从B继承E就不行。

            然后G可以继承同列的F或者C,但是C不能继承F和G。

拆分属性人话版:最后面的属性决定最终属性。

继承属性人话版:[B-新单位]:[A-被继承单位],[A]块要写在[B]前面。

感谢 @九千天华 @双杀步枪 总结。

B站原贴浅谈[#include]读取顺序》地址:

浅谈[#include]读取顺序​


关于【属性继承】这里有更加详细的介绍和使用方式,以下是链接

详解Ares引擎【属性继承】正确的使用方式​

感谢 @九千天华 与 @三个冲 两位技术大佬的悉心指导与经验分享,为本篇内容提供了关键思路!


最后讲一下Ares引擎新增的注册方式

以动画注册表[Animations]  为例

代码块
JavaScript
自动换行
复制代码
[Animations] 		;原版《尤里复仇》动画注册表
0=TWLT100
1=ELECTRO
2=H2O_EXP1
……
604=NANRCT_PD
605=YAPOWR_BD
606=YAPOWR_CD
复制成功

如果是大型MOD的话动画量只会更多,如心灵终结有2200+的动画量,你如果没有安装Ares引擎,不懂得使用[#Include]拆分文件,你需要先搜索[Animations],然后从头往下滚啊滚啊滚,再到末尾处增加新的序号添加新的动画名。鼠标滑轮表示mmp。

而当你使用了拆分规则以后,只需要在新的ini文件中输入即可,以本人的AAList.ini为例:

代码块
JavaScript
自动换行
复制代码
AAList.ini中
[Animations]					; 动画注册表
114514		=	NewAnim			; 数字/英文字符及符号均不可同名复用
+			=	NewAnim1		; +号可以同名复用
+			=	NewAnim2		; +号可以同名复用
NewAnim3	=	NewAnim3		; 数字/英文字符及符号均不可同名复用
NewAnim_4	=	NewAnim4		; 数字/英文字符及符号均不可同名复用
复制成功

注册时不强制使用数字来注册,你可以使用任意英文字符代替序号,并且也可以用“+”来复用

整体结构为“名”=“注册名”,比如上面的“+”=“ANNIHILATE”和“NewAnim3”=“NewAnim3”


顺便推广一下我们的INI萌新交流群:796097515

本期到此结束,还请不吝点赞。