平台bug:注册号漂移

Ra2map:本文转载自【教程】平台bug:注册号漂移 - 红警任务之家

本教程整理自我在2021.5.10回复visa6000提问的邮件。感谢他的提问。

相信不少任务制作者都遇到过一个坑:

在FinalAlert中,有些地方需要使用注册号作为触发或者脚本的参数(比如触发条件“19 建造特定类型的建筑…”,触发结果“41 播放动画在…”,脚本“移动到己方建筑”等)。

但我们时常发现,在使用原版的rules文件时,对于一些序号比较大的建筑或者动画,游戏内部实际起作用的序号(就是“填写这个注册号,触发和脚本才会正确的起作用”,下文全部用蓝色表示)、地图编辑器中显示的序号(就是“地图编辑器下拉框中,我所需要的正确物品的名称对应的序号”,下文全部用绿色表示)和在rules文件中这一条目的注册号(下文全部用红色表示)是存在差异的,或者说,是有“漂移”的。

先举一个例子说明这三种序号的差别,以建筑列表的尤里建造厂为例:

  • 在rules文件中这一条目的注册号——305:在rulesmd.ini中可以查到,305=YACNST
  • 地图编辑器中显示的序号——301:在地图编辑器中的下拉框中可以看到,301 尤里建造厂
  • 游戏内部实际起作用的序号——300:经过试验可以确认(地图编辑器里面300号是公车站,囧)。

这种漂移在建筑序号中是漂移一点点,但在动画列表中就是大幅度跳跃了。

一个非常典型的例子就是超时空传送效果的动画,CHRONOTG,其正确的内部号码是257,然而在rulesmd的[Animations]注册表中的注册号是668,在地图编辑器中显示的号码是261。如果按照后两个号码来填写,前者会导致游戏直接出错,后者会播放错误的动画。


这种漂移已经算是bug了。那么这个bug有没有规律可言呢?答案是有的。

在阅读原版的rulesmd.ini的时候,你会发现这些列表中的注册是有重复的,也有序号大幅度跳跃的状况:

上图是原版的rulesmd.ini中[Animations]注册表的一部分。可以注意到有效的注册号并不是连续的,318之后跳到了321,334之后直接跨越到了500,然后又跳步到510。游戏内部读取这些动画的时候,明显是按照读取的顺序,给每一项重新依次编号了

种种迹象表明,从在rules文件中的注册号游戏内部实际起作用的序号之间,重新编号的规律是这样的:

  • 从上到下按顺序读取每一个项目。
  • 空白的项目(只有注册号,等号后面没有东西)原样保留,不进行合并和删除。
  • 非空的重复项目,以先读取的项目为准,后面的会被删除。
  • 读取所有项目以后,再从头到尾从0开始重新编号。

如果你有编程基础,你可以写一个程序来处理这种改变。

而地图编辑器读取序号的时候,处理了“跳步”的问题,但是没有处理“重复”的问题,这导致地图编辑器中显示的序号与另外两种序号可能都不一样。


下面举一个例子,以开头的尤里建造厂为例,手工分析一下各种序号的漂移状况:

建筑列表的注册号从1=GAPOWR开始的(而不是从0开始,这直接导致了漂移1号);在253、273和304各跳了1号;而241=NAPSYA和185=NAPSYA注册了两次。没有其余的异常状况。

因此对于305=YACNST

  • 游戏内部实际起作用的序号漂移了5号,因此是305-5=300
  • 地图编辑器中显示的序号相对游戏内部实际起作用的序号只漂移了1号(只有“NAPSYA注册了2次”影响它),因此是300+1=301

其实对于建筑列表,由于地图编辑器中显示的序号相对游戏内部实际起作用的序号只受“NAPSYA注册了2次”影响,因此就是241之前不漂移,241之后漂移1号,就这么简单。

至于动画列表的漂移状况十分复杂,我还是用程序来处理吧……


说了这么多,有什么可以直接使用的结论吗?

有。

rules注册号漂移计算-Downloads.zip
5.32KB
直接下载

(2021.5.23更新:修复了由于搞错一个物体注册多次时的判定顺序而引发的局部漂移。)

这其中的两个文件就是经过程序处理完毕的原版[Animations]和[BuildingTypes]注册表。你可以有两种办法来使用它:

  • 在你需要寻找某一个物体游戏内部实际起作用的序号的时候,就可以在对应的文件里面查找,找到的就是正确的序号,填到地图编辑器里面没问题。
  • 把这两个文件里面的列表复制到rulesmd.ini里面,覆盖原来的列表(如果你添加了新的物体,在后面按顺序正常注册即可)。覆盖完成以后,游戏内部实际起作用的序号地图编辑器中显示的序号在rules文件中这一条目的注册号会变得完全一致,也就是一劳永逸的修复了这个bug。

2021.5.21更新:

我把计算注册号漂移的JavaScript程序打包进了一个网页,这样无需别的运行环境,只要一个浏览器就能打开运行了:

rules注册号漂移计算.html
8.95KB
直接下载

(2021.5.22更新:修复了自动合并空条目的bug。现在不会合并空条目,与游戏内部表现一致。)

可以直接使用这个程序导入你的rulesmd.ini来计算正确的注册号。

2021.5.23更新:

更改了一处错误的程序逻辑:一个物体注册多次,应该以先出现的那次为准,而非后出现的。

  • 平台bug:注册号漂移
  • 作者:竹蜻蜓(Heli)  发布于:2021-05-16  更新于:2021-05-23  许可协议:若无特别说明,均为 CC BY-NC-SA
如何关联触发
悬崖基础画法