欢迎光临散文网 会员登陆 & 注册

心灵终结3.3.6地图编辑器萌新教程第13篇:ini简介,战役地图内置ini

2022-06-11 13:51 作者:不会游泳的企鹅24  | 我要投稿

这一篇以及接下来的几篇,我会为大家介绍红警ini的基本原理和战役地图内置ini的修改方法。在此之前首先声明:在看完这几篇之后,你并不能学会如何像一些大佬一样作出一些能烧坏CPU的魔改的单位。我们在这里只讲ini的基本原理和简单的修改,以及在战役制作中的应用。

  • 什么是ini?

ini实际上是一种文件格式,就像doc,ppt,pdf一样,可以作为文件名的后缀。我们常说的“ini”实际上是指“以ini为后缀的配置文件”。红警中的ini文件规定了游戏中的数值、音效、动画等最基本的东西,可以直接双击用记事本打开。以心灵终结为例:Thememo.ini与游戏中的背景音乐有关,BattleClient.ini与战役入口有关,aimo.ini与游戏中的AI行为有关,而最重要的是rulesmo.ini,与游戏的基本设置、游戏中各种建筑、单位和支援技能的数值和属性有关。

在以下的几篇专栏中,rulesmo.ini将是我们讨论的重点。

  • ini文件在哪里?

心灵终结的ini所在的位置比较分散。在根目录(即Mental Omega文件夹)中,你会看到一个名为INI的文件夹,然而里面只有一些不重要的东西,接下来几篇不会涉及;根目录的Resource文件夹中还有一堆ini文件,包括我们在上一篇中讲到的thememo.ini。然而rulesmo.ini是在被加密的mix文件中的,只能通过其他途径获得,比如百度贴吧上下载,如果实在找不到也可以加我的qq(点开最新的视频,简介中有qq号)。

  • ini文件的结构

各个ini文件的格式都是类似的,我们下面以rulesmo.ini为例。

打开rulesmo.ini,你会发现一份ini文件都是有下面的一个部分作为基本单元构成的:

[A]

B1=C1

B2=C2

……

每一个这样的部分被称为一个“小节”,其中中括号里的A被称为“小节名称”,下面的每一行被称为一个“”或“属性”,其中等号左边的被称为“参数”或“键名”,等号右边的被称为“参数值”或“键值”。注意这里的“参数值”或“键值”虽然有“值”这个字,但不一定都是数字

另外,ini文件中的分号是注释符号,和编程语言一样,注释符号后这一行的内容只是为了方便阅读和理解,没有实际作用

rulesmo.ini前面的小节都是对游戏基本设置的规定,在此不用去纠结都说了些什么,后面要用到的时候再讲。下面从[InfantryTypes]小节开始就是“单位注册”的内容。(直接用“编辑”中的“查找”功能可以快速找到此小节)

在红警中,每一个建筑、单位都需要“注册”,没有注册的单位即使后面对应的小节写得再多都是没有用的。在rulesmo.ini中被注册的有步兵、载具、建筑、飞行器、武器、弹头、动画、地形对象、超级武器以及其他一些乱七八糟的东西。这一部分的小节名称说明的是被注册的对象是什么类型,比如上面列举的这些;每一个键都代表一个被注册的单位,其中键名为一个数字,是被注册单位的“序号”;键值是一串字母,是被注册单位的“注册代码”。我们在第6篇中讲“特遣部队”时用到过“注册代码”,其源头就是这里。比如[InfantryTypes]里面的第一条:0=E1,就是在注册美国大兵。

注册部分结束之后,ini里还有一些和所属方和国家有关的东西,第一个小节为[Sides],后面不会涉及,继续往下拉,便来到了rulesmo.ini中最重要的部分:规定每个单位和建筑的具体数值和属性(开头小节为[E1])。这一部分的小节名称必须与“注册”部分的“注册代码”相同,比如第一个小节[E1]就是在规定美国大兵的属性。例如下面的“Strength=135”指的是美国大兵的血量,“Speed=6”指的是移动速度,“Cost=120”指的是价格。

这一部分结束之后,是武器和弹头的数值和属性,我们后面如果遇到了再讲。

之后就是和地形对象有关的一些乱七八糟的东西了,之后不会涉及。

  • 地图内置ini,ini的优先级

前面说过,心灵终结的rulesmo.ini文件是在mix文件包中的。如果你得到了一份修改过的rulesmo.ini,把它直接放在根目录中,那么当你再打开游戏时,原来mix文件中的rulesmo.ini就会失效。如果你再将根目录中的rulesmo.ini删除或移除文件夹,则mix文件中的ini又会发挥作用(类似于教程第1篇中的战役地图文件的读取)。

那么什么又是“地图内置ini”呢?我们可以找到自制的地图(后缀名为map),右键并选择“以记事本方式打开”,这时我们可以看到一个符合前面所述的ini格式的文件。这就是“地图内置ini”。例如下面展示用记事本打开我正在制作的自制战役第10关的地图(剧透+证明自己没有咕咕咕)

(注:以下有关内置ini中表示特遣部队、动作脚本、作战小队的小节不需掌握,了解即可,不会对战役制作产生影响。理论上,你可以只通过编辑记事本来制作一张战役地图,不过应该不会有人这么干。后面只会涉及一点用记事本对地图内置ini进行一些简单的编辑,大多数ini编辑还是用地编进行的,详见后面“地图内置ini的编辑方法”。)

用记事本打开自制战役第10关地图

第一张图中第一个小节为[01000006],在编辑地图时,每一个触发、特遣部队、动作脚本和作战小队都会有一个编号,就是这里的小节名。这里的01000006是一个特遣部队,“0=1,Volkov”表示“特遣部队包含1个沃尔科夫”;Name表示这个特遣部队的名称,Group=-1表示特遣部队的分组(不用管)。第二幅图里的这三个分别是特遣部队、动作脚本和作战小队。可以看出第一个特遣部队是4个美国大兵(E1)和4个守卫大兵(GGI);动作脚本0=1,2表示“第一个动作,动作类型为1:攻击路径点,参数值为2”;第三个小节为一个作战小队,它用到的特遣部队就是第一个小节(TaskForce=01000010),动作脚本就是第二个小节(Script=01000011),其他的一堆东西对应作战小队里面的那一堆选项。

当然,编辑作战小队是在地图编辑器中完成的,不需要用记事本写这些东西。

第三张图中的小节是沃尔科夫,三行内容分别表示:血量为1000,自动回血速率为0.02,每次自动回血量为4.

大家可能马上想到了一些问题。第一:在地图内置ini中我们并没有对沃尔科夫进行“注册”;第二:在rulesmo.ini中,原本是有“沃尔科夫”这个小节的。而地图内置ini中又出现了这一小节,是否会产生问题?

首先我们说明这样一个问题:如果在本关的地图内置中没有[Volkov]小节,会怎样呢?答案是:本关中的沃尔科夫和一般遭遇战中的沃尔科夫没有任何区别。因此,在地图内置ini中添加rulesmo.ini本身就有的小节是为了让一些东西在本关中有与一般遭遇战中不同的属性

那么又产生了这样一个问题:为什么不直接修改rulesmo.ini,却要在地图内置ini中新添加这一小节?这是因为:在地图内置ini中进行修改,只会影响这一张地图。在自己制作战役时,尽量不要对原来的东西产生影响。如果在rulesmo.ini中修改,则原本遭遇战中的沃尔科夫也会受到影响;另外如果修改rulesmo.ini代替修改地图内置ini,若想在另一张地图中对沃尔科夫作出其他的修改就无计可施了。

下面再回答前面提出的问题。地图内置ini和根目录或mix文件中的ini有优先级顺序:地图内置ini > 根目录或mix文件中的ini(此后称为“外置ini”),且最小单位是“一个键(属性)”而不是“一个小节”。意思就是:如果地图内置ini中关于某个小节的某个参数的参数值,那么就以此为准,不论外置ini关于此小节是否有此参数以及参数值是多少;如果地图内置ini中没有某个小节,或者关于某小节没有某参数,那就以外置ini为准

例如具体到沃尔科夫的例子:在地图内置ini中没有[InfantryTypes]小节,也就是没有注册,然而外置ini中有此小节,且里面有对沃尔科夫的注册。因此以外置ini为准,注册不成问题;在内置ini的[Volkov]小节中,有Strength=1000,说明在这张地图中沃尔科夫的生命值为1000,而外置ini中[Volcov]小节中的Strength=600失效。而其他的关于沃尔科夫的内置ini中没有提到的属性,以外置ini为准,如Cost=1500,因此在这一张地图中沃尔科夫的造价仍为1500。而外置ini中没有SelfHealing.Rate和SelfHealing.Amount两条,这是内置ini中新添加的,自然以内置ini为准。由此可以看出,本关中关于沃尔科夫的属性,内置ini中有的由内置ini决定,没有的则由外置ini决定,这就是前面所说“最小单位是一个键(属性)而不是一个小节”的含义。

这样的设定为我们修改ini带来了很大的方便:如果我们只想修改某个单位的某几个属性,只需要在地图内置ini中建立相应小节,只写要修改的内容即可,其余内容以外置ini为准;然而这也产生了一个问题,那就是我们不可能在内置ini中做到“删除内容”。例如,如果我们让沃尔科夫不免疫心灵控制,如果是修改外置ini,我们只需要删除沃尔科夫小节下的“ImmunetoPsionics=yes”即可,然而修改地图内置ini则无法做到“删除这一句代码”,因为内置ini中没有的内容会以外置ini为准而不是被“删除”。不过这个问题很好解决:只需要在内置ini中写“ImmunetoPsionics=no”即可。一般来说,我们想要“删除”的键都是以yes/no或者True/False为键值,而不是像“Strength”"Speed"这样的数值,这是想让某个单位不具有某种特殊属性,只需要把相关的键值改成相反的内容即可。当然也有例外。比如在盟军第13关《美人鱼》当中要删除谭雅的主武器和副武器,于是在地图内置ini中添加了“Primary=NotAWeapon”和“Secondary=NotAWeapon”。不过这类情况遇到得不多,如果遇到,可以尝试将要删除的键的键值改为None(不保证一定有效)。

  • 地图内置ini的编辑方法

地图内置ini的编辑方法有两种。

第一种就是前面所说的用记事本打开地图文件,直接在里面按照ini的格式进行编辑。注意,虽然说你会发现里面的小节名称是按照首字母顺序排列好的,但是你编辑的时候不需要在意这一点。例如,你可以在最后添加[Volkov]小节,而不必去寻找“V”开头的小节在哪里,而当你运行一次地图之后,内置ini里的小节顺序就会重排为首字母顺序。

第二种是在地图编辑器内进行的。打开“编辑——INI编辑”,可以看到地图内置ini编辑器,上面有一句善意的提醒:“强烈推荐不要使用本编辑器,除非你真正清除自己在做什么。”无视它即可。最上面是“项目小节”,就是前面说的ini文件中的“小节”,后面的内容就是小节名称。可以用下面的“添加”“删除”来新增小节或删除已有小节。新增小节时只需输入小节名即可,不需输入中括号。下面的“小节内容”就是该小节的键,大方框里列举出了所有键名,点击键名之后会在最下面显示相应的键值。可以用左边的“添加”“删除”来新增内容或删除已有内容。新增内容时输入的格式与ini中键的格式相同:键名=键值。

例如,我们添加项目小节,输入Volkov,然后添加小节内容:“Strength=1000”等,保存地图,最终效果与我们用记事本编辑ini相同。并且在你保存地图之后,用记事本打开地图,也可以看到以ini格式展示出来的[Volkov]小节。也就是说,我们在用ini编辑器修改ini就相当于是用记事本打开地图并在里面写东西,两者完全等价

添加项目小节
为项目小节添加键名和键值
最终效果

我们暂时先介绍到这里,在下一篇中我们会举例说明ini编辑在战役制作中的具体应用,包括:

  • 如何让建筑“无敌”

  • 如何显示/隐藏右下角的超武/支援技能倒计时

  • 如何在移动的单位头上显示“目标”“防御”等标记

  • 如何为同一地图的不同难度设置不同的初始金额

如果大家有其他疑问也欢迎提出来,我会尽自己所能(但不保证)在之后的教程中为大家解决。感谢大家的支持。


心灵终结3.3.6地图编辑器萌新教程第13篇:ini简介,战役地图内置ini的评论 (共 条)

分享到微博请遵守国家法律