关于“跳关区”敌人对跳关信息的设置方式以及跳关机制的一些补充说明:
前面一开始,我提到了“跳关区”敌人设置的跳关信息始终是通往36、5、36这一组世界的;后面给出的程序代码中,则可以看到,“跳关区”敌人实际上是将“跳关控制”内存06D6的值增加了1,这样,本来06D6的值是0,代表进纵向水管不跳关,现在变成1,进纵向水管就会跳关至36、5、36世界当中的一个了。
……且慢!“加1”?不是“变成1”?那如果有多个“跳关区”敌人,又会怎样?
各位不妨自行一试,我就不试了,而是根据跳关控制的代码脑补出结论(
):
如果有2个“跳关区”,可以跳到第8、7、6世界;
如果有3个“跳关区”,可以跳到第0、0、39世界;(这什么鬼
)
如果有4个“跳关区”,可以跳到第4、3、2世界;(……这好像才是第一组跳关信息吧?怎么回事?)
如果有5个“跳关区”,可以跳到第36、5、36世界;
……嗯,好像开始循环了?没错,后面的确会这样循环下去,就不继续列出了。另外,以上还只是讨论了只有“跳关区”敌人的情形,如果把“跳关区”地形也加进来,情况会更复杂,这里暂不详述,后面解释了跳关机制之后各位可以自行推断可能发生的状况。
总之,先上个结论:“跳关区”敌人的作用并非是“始终加载36、5、36世界的跳关信息”,而是“将跳关信息设置为当前跳关信息的下一组跳关信息”;跳关信息一共有4组,其中3组正常信息,1组溢出信息,顺序上面已经给出。
那么,为什么内存06D6的值等于1对应的是第二组跳关信息?“跳关区”地形又是如何设置跳关信息的?下面就来解释跳关机制,以上问题就都可以得到解答了。
正常来说,一个完整的跳关流程是这样的:首先由“停止滚屏(跳关区)”地形设置跳关信息,然后进水管时根据设置的跳关信息决定跳到哪一组世界,水管位置则决定了跳到这一组世界的第几个。至于“跳关区”敌人?前面已经说过了,它就是个bug,并不是游戏设计者预期的表现,根本就是个来捣乱的奇葩
首先,“跳关区”地形根据一定规则,将内存06D6的值设置为4~6之中的一个数,分别依次对应三组跳关信息,同时在屏幕上将跳关信息显示出来——没错,06D6不仅要在后面用来提供进水管时的跳关信息,而且还要用来确定跳关区屏幕上显示的世界编号;而这个用来显示信息的程序,则是个公用程序,基本上什么文字信息都是由它来显示的(Memory Map原文:handles all except victory messages;顺便扯一句,包括关卡开始界面的生命值信息也是由它的其中一段控制显示的,这段程序我自己也作过修改,使它能正常显示两位生命值
),所以,这个程序需要根据调用时A的值来确定显示什么文字,如果A>=4,则显示跳关信息;因此,06D6的值才需要从4开始。
由于06D6的正常取值为4~6,因此在实际使用时,不管是屏幕显示跳关信息,还是进水管时用它读取跳关信息,都是先AND #$03,即取出最末两位,然后再使用的,即真正用到的它的取值为0~2;所以,06D6=1就对应了第二组跳关信息。具体来说,06D6的正常取值是0、4、5、6,0表示“不开启跳关”,其余表示“开启跳关”并对应跳关信息;而进水管时,对06D6的判断方式则是“0不跳关,非0则跳关”,这样,当06D6=1时,也就开启了跳关,并且1 AND 3=1,因此它对应了第二组跳关信息。