资料损坏错误(漏洞)

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

资料损坏错误(英文︰SRAM glitch)是一个存在于所有第一世代游戏中的漏洞,当玩家故意在报告过程中的特定时机关机时,资料文件便会出现问题,而这个出问题的资料文件,却依然能够被载入。

利用此漏洞极速通关

实现方法

在游戏目前没有资料文件的情况下,开始游戏,游戏正式开始后打开菜单,选择报告并确认,并在是/否对话框消失后一小会(大约20帧-30帧的时间,约0.4-0.5秒,务必精确控制,时间太短会提示资料损坏要求开始新游戏,时间太长资料就不会出现任何问题)后关机重新开始,如果重新载入后发现宝可梦列表可以被打开,并且显示为空白,说明漏洞已经被成功触发。

触发此漏洞后队伍里某只宝可梦

触发效果

触发这个漏洞以后,由于资料文件的不完整性,重新载入后游戏将会以大量FF(255)值覆盖掉各类信息。虽然宝可梦列表看起来是空白,但实际上有255只(有箭头并且可以移动),且开头的一些均是级别为255的 'M (FF)Q◣(日版中为アネ゙デパミ゙,它们均是游戏里内部编号255的错误宝可梦),HP均为F35(日版中显示为カ35,即65535),招式均为四个“TM55”(招式编号255),名字和训练家均为许多重复的9,ID No.均显示为65535。

注:HP和ID No.均为两个连续地址来控制,FF FF即255 255在游戏里的体现就是65535。

作用

包包扩充

虽然触发这个漏洞以后,这个资料文件将不再能用于正常游戏。但切换这些宝可梦的顺序,可以打乱游戏内存的数据,尽管切换其中大部分都会引起死机。但如果切换前9只宝可梦之一与第10只(此为美版做法,日版是切换前8只之一与第9只),打开包包后,会发现包包里的物品也变为了255个,这些物品的名字以乱码为主。

导致255个物品的原因是宝可梦的切换覆盖了地址$d2a1(日版)或$d31cY、$d31dRB(美版),这个地址的作用是记录包包里的物品数量,由于前面一些错误宝可梦的数据在内存里均是连续的255,所以切换宝可梦顺序便可以使这些255的值转移到别的地方,而日版中$d2a1和美版中$d31c、$d31d分别包含在第9只和第10只宝可梦的数据中,这种切换导致它们变成了255,于是我们便取得了包包里有255个物品的结果。而在正常情况下,包包里不可能有如此多的物品,所以这便会导致游戏将大量与包包毫无关系的内存地址强行算进去。

此时,包包中每一个物品对应内存中两个连续的地址,物品种类在前,物品数量在后。交换这些物品的顺序,或改变这些物品的数量,便可实现在游戏内改变游戏本身内存数据的目的。

打乱图鉴信息

在扩充包包的同时,图鉴信息也会被打乱而显示为遇到了152只宝可梦(而第一世代中正常的宝可梦只有151只),原因是255值覆盖了整个和图鉴相关的区域(美版:地址$d2f6-$d31bY或$d2f7-$d31cRB,日版:$d27b-$d2a0,共38个,前19个控制捕获信息,后19个控制相遇信息),这块区域正好就位于物品数量数据的前面,所以一并被覆盖掉了,而由于这些地址每个都控制了8只宝可梦捕获或相遇的信息,即使每组最后一个也不例外,所以可推断出,每组最后一个地址控制了145号到152号宝可梦的捕获或相遇信息,因此当这些地址全部为255时,自然就会显示出了捕获或遇到了152只宝可梦。

内存地址与物品的对应关系

修改内存信息极速通关

在扩充包包之后,由于这些被强行被拖入包包物品信息中的内存地址和游戏中的某些触发有联系,比如:当前处于哪个地图、某个入口进入后移动到哪里等等一系列信息,所以利用这个漏洞便能实现某种非常规的极速通关,这是因为宝可梦游戏通关的触发便是登入名人堂,所以便可以通过这个漏洞,强行更改诸如入口信息、当前地图信息,甚至替换当前地图执行的剧本为殿堂的剧本,来直接达到通关的目的。

修改当前地图信息

如下图,当前主角所在位置为家里2楼,而游戏中主角家2楼的地图编号为38,游戏中保存当前地图信息的内存地址为$d2dd,即12DD,在此处即对应了图中物品的数量,如果玩家想使这个数值减少,就要去把这个物品扔掉一定的数量,如果想使它增加,就要用其他的物品(数量大于玩家所需要的数值)与它交换,然后再去扔掉(当然如果正好是需要的数值就不用扔了)。相应的,如果将一个物品扔完,将导致该物品对应内存地址以下的数据整体向前推进,直接导致死机。

当前地图信息

示范视频中那个替换当前地图信息的操作,即是先将某个数量不为0的物品对应的内存地址与$d2dd交换(因为真新镇的地图编号就是0),来使游戏判定当前主角不在真新镇,否则大木博士将会强制主角去研究所领取宝可梦(不可随意替换,某些含地图剧本的编号直接替换进去会引起死机,这也就是为何不能直接将地图替换为殿堂的原因,这里选择了一个134的值),然后走到1号道路(走到1号道路后该值将变为12,因为1号道路的编号就是12),这里选择的是将某个数量为188的物品,扔掉80个,来获得一个118的数值,然后遇野生宝可梦后与$d2dd交换,于是$d2dd的数值就变成了118,而118是殿堂的地图编号,所以逃走后就直接到了殿堂而通关了游戏。

替换传送点信息

替换主角2楼到1楼的出口信息,则是用到了内存地址$d331,在主角家2楼时,它的值为37,而37正是主角家1楼的地图编号,它控制了主角下楼时会到哪里。所以这里选择了一个数量为255的物品与它所对应的物品交换,再扔掉137个,即可将这个内存地址控制为118,也就是相当于将主角家2楼的出口,替换成了殿堂的入口,所以下楼就直接到了殿堂。

而替换1楼的出口信息则与上一个原理类似,即将某个数量为186的物品与此时控制1楼出口的$d364替换(与日版中$d2e4作用一致,具体可以看下面的介绍),再扔掉68个,即可使1楼出口变为殿堂的入口,出门就直接到了殿堂。另外由于当主角位于家里1楼时,$d364的值将为0,所以直接将其对应的物品扔掉138个,也能达到同样的目的。(虽然扔完一个数量不为0的物品将会使它消失而导致死机,但对于本身数量已经为0但却有种类信息的物品,扔掉它却会令游戏使它从255个重新开始递减,因为它是个无符号整数)

同时替换掉当前地图信息与当前地图执行剧本

同时替换掉当前地图信息与当前地图执行剧本,也可以达到直接通关的目的,地图执行剧本对应内存中的几个连续地址$d2ec、$d2ed、$d2ee(日版)或$d36d、$d36eY/$d36e、$d36fRB(美版),必须全部替换为需要的数值。用日版《皮卡丘》举例来说即是将当前地图信息对应地址$d2dd替换为118的同时,将$d2ec、$d2ed、$d2ee三个连续地址分别替换为126、171、125(不同版本需要的值均不一样),需要同时替换两项信息的原因上文中已经提到过。关闭菜单后,将会弹出一个文本框,内容为“1エラー”,随后直接显示通关信息而略过登入名人堂的过程。但由于这里的操作需要同时替换3个连续地址为确切的数值(加上当前地图信息一共4个),而想在内存的其他区域获得需要的值并不容易,导致这个方法虽然理论上可以实现,但实机几乎不可行,解决方法即是利用模拟器进行大量重录(也就是所谓的运气操纵)。此方法在理想状态下是目前可以做到的最极速之通关方法,可以在1分10秒左右完成整个游戏。

注:以上内存地址的值,均为十进制表示。

关于第一世代的所有地点的编号,可以查阅这里:

主頁面:地点编号(第一世代)
同时替换执行剧本和当前地图信息

文本加速漏洞

这个漏洞存在于所有第一世代游戏中,是以资料损坏错误为基础的,它需要用到一个控制游戏选项的内存地址,游戏选项中的文本速度有“快”、“中”、“慢”三个级别,当其它选项没有被改变时,对应内存地址的值为1、3、5,这个地址在每个版本中是不一样的,比如在日版《皮卡丘》中,这个地址是$d2d4,而在美版《皮卡丘》中则是$d354。

在平常的状态下,这个地址是根据选项不同而有固定数值的,但是当触发了资料损坏错误以后,这个值就可以随意更改了,它的值越大,文本速度越慢,将它更改成0,即可使文本速度达到最快,所谓“最快”即是瞬间显示一屏文字,远远快于默认的“快”。

另外由于未知原因,数值16也可以达到“文本速度最快”这个效果,也是唯一的例外。除了16以外,其他大于5的值均比默认的“慢”还要慢。

示范视频1和2中即用到了此漏洞。

$d331的相关延伸内容

主角位于常青市时内存中的情况

在示范视频2中,$d331被用于主角家2楼到1楼的出口信息,但它的实际作用不局限于此,同时它也不是唯一的变量,在$d331之后,每隔3个内存地址,如$d335、$d339、$d33d,均与它的作用类似,他们的值取决于主角当前位于哪个地点,记录了这个地图中所有可进入建筑进入后会移动到哪里。如上图,此时主角位于常青市常青市中有5个可以进入的建筑,分别是宝可梦中心友好商店、学校、一个民房以及常青道馆,查阅地点编号可知,它们的地点编号分别为41、42、43、44、45,所以体现在内存中便是$d331、$d335、$d339、$d33d、$d341这5个地址的值分别为41、42、43、44、45。地图中有几个可进入的建筑,便有几个这样的地址是有作用的,再往后的地址则均保持为0。

同样地,当主角位于真新镇时,$d331、$d335、$d339的值分别为37、39、40,分别对应主角的家1楼、青绿的家以及大木研究所。被大众所知的任意门漏洞即是利用了这里的$d335,当主角位于玉虹市时,它对应的则是玉虹百货公司的右入口。

同时$d2e4也起到了同样的作用,但这个值大部分时候是在房间内有效,比如当主角位于家里1楼时,它的值为0,控制了主角从1楼出门会到哪里。

示范视频4便是替换$d2e4和$d331的结果,利用将文本速度调到快,来使$d2d4的值为1,将它与$d2e4替换,由于$d2e4原先就为0,所以在触发了文本加速的同时,也将家门直接替换成了常青市的入口,到达常青市以后位于宝可梦中心的门口,而宝可梦中心的入口信息即是$d331,所以选择一个数量188的物品与它替换,扔掉70个使它的值为118,再进入宝可梦中心,就直接到了殿堂

之所以它比视频2要快,是因为到达常青市后,使大量原先为0值的内存地址变得不为0,而由于未知原因,编号0的物品切换速度非常缓慢,切换一次几乎要半秒,所以在这里虽然看起来过程更复杂,但通关时间却更短了。

参考视频

  • 视频1(替换主角家1楼的出口信息):Bilibili
  • 视频2(替换主角家2楼到1楼的出口信息):Bilibili
  • 视频3(替换当前地图信息):Bilibili
  • 视频4(替换$d2e4和$d331):Bilibili

视频1使用的版本为美版《皮卡丘》,视频2、3、4则为日版《皮卡丘》。

  • 附加视频(强行调出THE END但似乎不能算作通关,因为这么做资料里不会有通关数据):Bilibili

细节

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