任意门(漏洞)

  Bag 防尘护目镜 SV Sprite.png非正式术语  
来自神奇宝贝百科

任意門漏洞(日文︰どこかしらドアバグ,英文︰Dokokashira door glitch)是日文《紅/綠/藍》中出现的游戏漏洞,最初由日本搜集游戏漏洞的网站Pokemonbug发现。透过这个漏洞不用挑战联盟就能登入名人堂,也可以到其它地方。

這個漏洞雖然可以在國際版中的《紅/綠/藍》中觸發,但效果異於在日文版中的效果,且不能傳送至其它地方。

具体步骤

在得到常青市友好商店店员拜托主角交给大木博士包裹后,打开包包,把托付物品排到第二位。再把光标移动到托付物品上,先按下选择键,再选择取消,重复两次后,光标会变成白色。在这之后,与野生宝可梦战斗时打开菜单,选择第一只宝可梦,它便会变成アネ゙デパミ゙。使用这只错误宝可梦击倒对手或者逃跑来结束战斗,这个漏洞就被成功触发了。 逃跑之前一定要打开战斗菜单一次,否则进入真新镇后会因位置原因,玩家会重新回到家门口,使得漏洞触发失败。

略过联盟挑战直接登入名人堂

在流程中的真新镇
在流程中的殿堂

完成以上步骤之后,走83步,在最後一步时进入位于真新镇青綠的家,这样一来,玩家会被传送到7号道路。向西步行至玉虹市,进入宝可梦中心后马上出来,否则会死机。然后透过玉虹百货公司的右门进入玉虹百货公司,这样玩家会直接进入阿渡的房间。此时不要与阿渡对话,向上走进入冠军的房间后,也不要与青綠对话。继续向上走,大木博士会进入冠军的房间,也不用与他对话,直接手动登入名人堂即可通关。

如果前面进入的是玉虹大厦,进行同样的操作后将直接被传送到殿堂,虽然殿堂图像会变得混乱,但仍旧能正常通关。


作用原理

位置已切换完毕
正常情况下的同行宝可梦终止数据

在游戏中,“选择”按钮的其中一个作用便是切换包包中物品的顺序,正常操作是在一个物品处按下“选择”,然后在想与它交换位置的另一个物品处再次按下,然而,在早期版本中,由于程序员的疏忽,当在一个物品处按下“选择”然后不做任何其他动作而直接关闭包包时,游戏却依然记录了被选择的那个物品的位置。

在游戏早期,玩家只持有一只宝可梦,而由于“选择”按钮的错误,当玩家拿到第二个物品并用“选择”按钮选择它时,游戏便记录下了位置“2”,此时打开同行宝可梦列表点击第一只宝可梦,游戏便错误的认为玩家要切换第二只宝可梦与第一只的位置,然而第二只宝可梦根本不存在。

游戏内存中,最后一只宝可梦的种类数据后面有一段特殊数据,标记了同行宝可梦在何处终止,具体内存地址为$d123+持有宝可梦数量*2,比如玩家持有两只宝可梦,这个地址就是$d123+2*2=$d127,它的值为FF(255),以便游戏能够认为这段数据以前是同行宝可梦信息,然而却有一个例外,当玩家只有一只宝可梦时,正常情况下第二只宝可梦的种类数据所应该在的位置,便是这段标记终止的数据,即一个地址在不同情况下能起到两个不同作用,这个问题在玩家拥有两只或两只以上宝可梦后将不复存在(尽管还是可以切换存在的和不存在的宝可梦,但不会触发任意门,因为无论什么情况下$d127、$d129、$d131、$d133、$d135的作用都只能是终止数据,而不会是种类,所以无论怎么切换宝可梦的顺序都不会使它们有任何变化)。如图所示,玩家持有一只妙蛙种子,它的内部编号为153,$d124即是它的种类相关数据,所以为153,而$d125即是同行宝可梦终止数据,为255。所以上述那个切换的动作,即是将终止数据$d125,切换到了前面表示第一只宝可梦种类的$d124,这也就是为何切换完成后第一只宝可梦会变为アネ゙デパミ゙的原因,因为这只错误宝可梦的内部编号就是FF(255)。(关于内部编号,参见宝可梦列表(按第一世代内部编号)

由于没有了正常的同行宝可梦终止数据,所以游戏只能寻找下一个值为FF的地址来代替,然而正常情况下,下一个值为FF的地址离$d124非常远,游戏会认为从$d125开始直到下一个FF值之间的所有数据均为玩家持有的宝可梦数据,于是大量内存地址都受到了影响,受影响的地址正常情况下将有超过600个,游戏将认为玩家拥有一个成员数量非常庞大的宝可梦同行宝可梦,并将这数百个内存地址都强行拖入到宝可梦数据的相关判定里。宝可梦数据中也包括了宝可梦的状态(即中毒、麻痹等等),而这些状态都是用不同数值表示的。

每走4步内存里发生的事,方框内即为$d335

发生这种错误后,地址$d335对应第199只宝可梦的HP,而这只宝可梦又恰巧被判定为中毒状态,中毒在战斗外的效果就是每走4步HP减少1点,所以$d335这个值在触发漏洞之后,每走4步,就会减少1,而$d335的作用正是每个地图中某个地方的传送点相关,在每个地图中作用不同,在真新镇中,它是青綠家进入以后所到的地方,默认为39,而每到一个新的地方,它的值都会被重置一次(重置该值不是漏洞,而是游戏固有机制,因为不同地图中的传送点所能到的位置肯定是不一样的)。另外,由于它被判定为中毒,所以在真新镇中走39x4=156步后会出现提示xx倒下,继续走将会出现更多类似的提示,因为并非只有这一只中毒的宝可梦,上面图中多个每走4步就减少1的值,均为某只宝可梦被判定为中毒的结果,由此在内存中产生了相当多的垃圾数据,这便是地图出现各种显示错误的原因,因为这些地址对应了游戏中各种机能,并非只是传送点。

上述直接登入名人堂的方法中,走84步后$d335的值将为39-84/4=18,编号18的地点是7号道路,临近玉虹市,走到玉虹市后之所以要进入宝可梦中心,是为了重置掉$d335,否则将使该值小于想要的数而无法达成目的,而进入宝可梦中心并走出重置该值为122然后直接走到玉虹百货公司的右侧入口时,这个值将为113,所以进入玉虹百货公司就会直接移动到阿渡的房间,继续往前走就会直接通关。而如果进入的是玉虹大厦,直接走到玉虹百货公司的右侧入口时$d335将正好为殿堂对应的118,所以将直接通关。

具体地点编号可以查阅地点编号(第一世代)

关于地图上传送点的进一步延伸,可以参考资料损坏错误

地图常量

下面的表格是每个地图中$d335所对应的传送点以及移动到这些地图时$d335的初始值。(进入某个地图会重置该值,进入该地图除下表以外的房子并出来也会重置该值)

$d335的值 地点 传送点
39 真新镇 劲敌的家
42 常青市 友好商店
52 深灰市 深灰科学博物馆
63 华蓝市 宝可梦中心附近的房子
90 枯叶市 宝可梦发烧友俱乐部
122 玉虹市 玉虹百货公司的右侧入口
142 紫苑镇 宝可梦塔
153 浅红市 有在讨论正辉的人的房子
166 红莲镇 红莲道馆
177 金黄市 格斗道场

非日语版中的类“任意门”

在非日语版中,虽然不可以在游戏早期就触发这个漏洞,但通过某些手段(如ZZAZZ漏洞)可以在游戏内存中起到类似的效果,但是,这种方式触发的类“任意门”并不具有任意传送的效果。

任意门的根本原理是删除掉同行宝可梦终止数据,由于触发ZZAZZ漏洞后会导致内存中大量覆盖153的值,所以这个漏洞在特定情况下也能将同行宝可梦终止数据的255替换成153,即同行宝可梦中有1、3、4、6只宝可梦时,具体原因可以参考ZZAZZ漏洞的条目。(对应影响的内存地址分别为$d165、$d167、$d168、$d16a)

但是由于触发之后,并没有哪只宝可梦的HP对应传送点的地址,所以不能达到真正的任意门效果。

虽然不能任意传送,但也会有某些效果每4步就会发生变化,最明显的体现就是某些地图内,每走4步,音乐就会发生改变。同时,也保留了每走一些步数就会显示某只宝可梦倒下的效果。包包里的某些物品数量,也会每走4步就减少1个。地图显示错误也依旧会发生。

下面示范视频中,演示了每走4步,宝可梦中心的音乐就改变一次的效果。

示範視頻

遊戲漏洞
第一世代0 ERRORMissingNo.ZZAZZ错误道具复制道具下溢错误地图254对战大木博士
故障市合并宝可梦错误记录冲浪错误居合斩漏洞老人漏洞梦幻漏洞《皮卡丘》的图像错误
任意门剩余HP错误双属性克制信息显示错误脱离连接俱乐部选择按钮错误资料损坏错误
第二世代捕虫大赛数据复制城都宝可梦错误错误维度代币盒错误
时拉比的蛋写生错误训练家之屋错误重要物品合并
第三世代榴石果漏洞时钟电路漏洞整个盒子的坏蛋对战塔盒子复制
第四世代变身招式保留错误冲浪漏洞榴石果漏洞追打所造成的异常天气
第五世代GTS变形错误自由落体重力漏洞
第六世代列表
第七世代列表
第八世代列表
第九世代列表
多个世代克隆漏洞任意代码注入溢出随机数异常更改时间系统
多回合攻击类招式漏洞讲究道具锁定漏洞蓄力的招式覆盖错误
跨世代服务Pokémon HOME漏洞
旁支系列宝可梦+信长的野望漏洞宝可梦大集结漏洞
相关列表错误招式错误属性错误地点错误音乐错误道具错误训练家错误宝可梦坏蛋
神奇宝贝百科游戏工程.png 这个页面属于神奇宝贝百科游戏工程,欢迎加入游戏工程 Wikilogo.png