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

【红色警戒】将YR战役移植到MOD中

2022-06-25 09:47 作者:育碧苏联Ubisoviet  | 我要投稿

直接把地图改名扔进不同版本/模组中是不行的。

RA2、YR与YR的各个模组之间,战役地图是不通用的,原因主要有两点:国家不同、单位不同。本文以将YR战役《脑死》移植到心灵终结3.x为例。

首先解决国家不同的问题

@双杀步枪 提出过修改Country的节名的方法。但是该方法针对仍保留有原国家的模组,譬如将RA2地图移植到YR。但是由于扩展工具的进步,YR的模组不需要再像RA2一样保留原有国家(比如心灵终结3.x)。而且地图文件在通过FA2编辑后会丢失注释,修改后的地图文件将不再具有可读性。此外,改了节名修复了触发但还会出现其他的问题,比如

修改RequiredHouse(其实不是House,是Country )或者ParentCountry。如果涉及到规则国家又是麻烦事。

因此不建议采用此方法。

(双枪原贴说法是:“如果你的MOD像共和国之辉一样对原始国家进行了大量修改……该部分请自行研究”。事实上,共和国之辉由于RA2v1.000的引擎限制,没有修改,而是指Confederation 为天朝。共和国之辉、兵临城下那个时代没有修改国家ID的模组反而更好移植,直接用双枪的办法是可以的。前面说过这种修改国家ID的模组是伴随着NPatch、Ares这类平台扩展工具才出现的。)

我的建议是全部使用地图内新建国家。这样便于后期的修改

最先要了解House与Country的区别。House是参战方,Country是国家。前者控制外交关系、所属色、科技上限、地图上分布的初始单位。后者控制科技树、触发。总之即便很多人(包括西木)把它们混为一谈,但二者不是一个东西。

首先来看地图里的国家是怎么读取的

在读取地图时,第二列的国家会接到第一列后面。第三列得出的序号将会用于触发,序号对应的是Country但经常被称为House,FA2的Triggers编辑也是指国为屋

注意

一二列的数字只是摆设,重要的是前后顺序。美国哪怕写999,只要它在第一位就是0。

如果第二列中有与第一列重复,以第一列为准。比如Yuri3Country前有一个Alliance,读取结果仍然是图里第三列那样。


我们在Yuri3Country后按照规则里的国家新建地图国家。比如CAmericans、CGDI这样。Neutral和Special肯定是会保留的,就不用新建了。如果模组有旧国家,也可以沿用,只需要得知它的序号即可。

为什么玩家可操控国家要新建不能用旧名称(模组内没有这个国家时)?

因为YR战役的代码极为不规范,至少原版战役是这样的。RA2各参战方名称后都会加上House,YR没有。Americans既是国家名又是参战方名,[Basic]>Player=Americans(参战方),然后Americans(参战方)的国家是Americans(国家)。规则内有Americans就可以直接读取。但是如果没有,就无法读取这个国家。即便设置[Americans]>ParentCountry=UnitedStates(MO3.x的规则国家),游戏也不知道Americans是哪个国家。

RA2原版战役没有这些顾虑,它们不使用任何规则国家,全部使用地图国家。所以没有必要弄一系列CAmericans这种,只需要把地图国家的ParentCountry 改好就可以去改触发了。

接下来设置每个国家的参数

[CAmericans]
Name=America
Suffix=Allied
Prefix=G
Color=Gold
Multiplay=yes
Side=GDI
SmartAI=yes
ParentCountry=UnitedStates

除了最后一行,直接搬YR的内容。最后一行ParentCountry把地图国家指向规则里存在的国家。

GDI、Nod不需要ParentCountry,Special、Neutral可以不设置参数。

触发修改

接着把各参战方的Country=、[Triggers]、[AITriggerTypes]里的国家名修改成新的国家名。

通过列表拼接,获取新的读取列表。和老列表比对得到国家序号的变动。

比如特殊、中立不变,Americans到CAmericans由0成16。

接下来回到双枪的老方法(另一个),用正则表达式修改[Events]、[Actions]和脚本的House序号(前面说过了,其实是Countries)。

[ScriptTypes]
n=20,x ;修改所属
[Events]
,1,0,x ;进入事件
,5,0,x ;作战方被发现
,9,0,x ;被摧毁,单位
,10,0,x ;被摧毁,建筑
,11,0,x ;被摧毁,全部
,25,0,x ;越过水平线
,26,0,x ;越过垂直线
,30,0,x ;电力不足
,32,0,x ;建筑存在
,44,0,x ;受到攻击
,55,0,x ;被摧毁所有海军
,56,0,x ;被摧毁所有陆军
,58,0,x ;充足能量供应
,59.0,x ;进入或飞越
,60,2,x,x ;指定科技类型存在
,61,2,x,x ;指定科技类型不存在
查找用的正则表达式
(=\d+,|,\d+,)(1|5|9|10|11|25|26|30|44|55|56|58|59),0,([0-9]{1}|(1|2)[0-9])(,|$)
[Actions]
,1,0,x ;胜利方
,2,0,x ;失败方
,3,0,x ;生产开始
,6,0,x ;全部单位执行Hunt
,9,0,x ;卖掉全部建筑
,13,0,x ;自动创建开始
,14,0,x ;单位转所属
,36,0,x ;全部转所属
,37,0,x ;结盟
,38,0,x ;成为敌人
,74,0,x ;AI触发开始
,75,0,x ;AI触发停止
,113,0,x ;欢呼
,119,0,x ;摧毁所有单位
,120,0,x ;摧毁所有建筑
,121,0,x ;摧毁所有陆军单位
,122,0,x ;摧毁所有海军
,123,0,x ;心灵控制基地
,124,0,x ;接触心灵控制
,126,0,x ;恢复到游戏初始建筑单位状态
,130,0,x ;恢复初始建筑
查找用的正则表达式
(=\d+,|,[a-zA-Z]{1,2},)(1|2|3|6|9|13|14|36|37|38|74|75|113|119|120|121|122|123|124|126|130),\d,([0-9]{1}|(1|2)[0-9])(,|$)

此时,工作已经完成大半了。进入游戏测试,开场后运输机正常投放工程师,工程师修复基地后包括哨戒机枪在内的建筑的所属权已经可以正常转移。

接下来是建筑和动画的问题

触发里的建筑、动画也是按顺序而非名称来的(写的那个序号也同样不作数)。模组通常不会修改已有动画、建筑的次序,修改了也没有什么好办法。RA2到YR新增4个动画,331行之后会向后顺延,按播放动画的行为查找并逐个修改即可。而MO完全打乱了建筑表的顺序,只能用FA2与FA2MO双开,一个一个比对查找。

模组新增建筑会导致地图建筑序号偏移,就像地图国家一样。也是文本查找或者FA2比对修改。

地图上初始放置的建筑如果在读取模组的FA2和实际游戏中不显示,则应考虑是否已被删除或者修改了ID。比如废弃苏联基地边的通讯中心CATECH01在MO3中成了CACOMN,直接在以文本形式打开地图文件替换。

其他的修改

前面提到过完全架空国家设置便于后续修改

既然便于修改了,那么就可以整花活了。比如让焚风穿越过来揍尤里。

找到CAmericans,把它的ParentCountry 修改为Guild1(狂鲨先锋),Side改为FourthSide。再修改参战方Americans的Color为墨绿。

由于MO大改了副官语音,删掉了剧情语音、修改了一些语音命名的拼写错误,所以副官语音是不正常的。副官的语音修复涉及到原模组文件的修改,因此此类修改成果是不允许发布下载的,所以不多赘述。

如果要让传送来的MCV不是盟军MCV而是焚风MCC。不仅要修改传送来的小队,还需要修改“丢失基地”的Event,否则简单和中等难度会不停传送援军过来。讲这个例子是要说,牵一发而动全身,一个修改会关联很多,修改过要测试。


参考资料

https://bbs.ra2diy.com/forum.php?mod=viewthread&tid=16046

https://modenc.renegadeprojects.com/Making_The_YR_Singleplayer_Campaign_Work_With_Your_Mod




【红色警戒】将YR战役移植到MOD中的评论 (共 条)

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