时钟电路(漏洞)

  Bag 防尘护目镜 SV Sprite.png非正式术语  
来自神奇宝贝百科
Bag 谜芝果 SV Sprite.png 这篇文章可能涉及部分未获得宝可梦相关企业授权的内容。
神奇宝贝百科仅记述这些内容,而并非支持任何侵权行为。

时钟电路漏洞,又称树果漏洞(日文︰きのみ問題,英文︰Berry glitch),是一个在《紅寶石/藍寶石》中发现的漏洞,由GBA游戏卡带实时时钟电路(RTC)的程式设计缺陷导致。

触发漏洞

此现象在游戏初期版本发生,会在已游玩超过1年以上的《紅寶石/藍寶石》中出现,漏洞会在游戏开始后第366天触发,时间电路缺陷一旦被触发,会导致以下事件不按现实时间流动而再次出现:

但以下事件依然会正常触发:

漏洞产生原因

紅寶石/藍寶石綠寶石》游戏卡带使用精工S-3511 石英晶振驱动时钟,但此晶振电路本身无法获得真实世界时间,卡带启动触发石英振荡后,游戏内的时间便从公元2000年1月1日开始读秒,游戏内时钟的运作不需如同真实生活中有历法(阳历、阴历与阴阳历),时间只是由初始日期加石英振荡不断累加。

  1. 游戏卡时钟电路启动时的基准时间为“2000年1月1日 00:00:00”,之后时钟电路会不断运作,电池电量不耗尽的情况下会一直向未来运作。
  2. 而当玩家开始《紅寶石/藍寶石綠寶石》的新游戏,玩家在主角家中钟表上设定时间,钟表表面默认为上午10时,玩家设定的时间会被作为“起始时间戳0时”,游戏的报告会用一个五位数记录游戏流逝的时间,其中初始零时记为00000。
  3. 之后游戏内在每次存档时,会与时钟比对,在此基础上将时钟电路上从“起始时间戳”开始,经过的日、时、分、秒数(年月全部换算为日数)以及星期转化为一串数字,并作为时间戳储存在游戏的报告内,这个经过时间是随着现实时间流逝,与现实时间无关,在游戏关闭的时候,游戏的“经过时间”(非游戏实际游玩时间)依然会向后运作。
  4. 每次游戏内种植树果或进行周期性事件后,存档会记录下下次事件树果成熟的时间戳或周期性事件戳记,直到时钟电路时间走到这个既定时间戳后,树果才会成熟,周期性事件才会更新。

例:卡带时钟电路启动后3小时(电路时间为2000年1月1日3时0分)玩家开始了新游戏,而玩家一开始在家中调整钟表的时间为上午12点(默认时间上午10点),并在此时存档,游戏会以此时作为“起始时间0时”开始计算游戏时间,假设在5天后下午1点再开机并存档,此时时钟电路的时间则是2000年1月6日4时0分,即使只游玩1分钟,游戏存档的时间戳仍是5天1小时。如果在此时2000年1月6日4时0分,种下一颗橙橙果,而第三世代中橙橙果的成熟时间是12个小时,在石英晶振12小时后,当时钟电路走到“2000年1月6日16时”的时,这株橙橙果便会成熟。


用表格表达就是:

事件 遊戲卡時鐘電路啟動 3小時後報告第一次的啟動並設置為12:00 AM 5天後的1:00 PM種下一顆橙橙果 橙橙果成長至第一階段 橙橙果成長至第二階段 橙橙果成長至第三階段 橙橙果成熟
時鐘電路(RTC)時間 2000-01-01 00:00:00 2000-01-01 03:00:00 2000-01-06 04:00:00 2000-01-06 07:00:00 2000-01-06 10:00:00 2000-01-06 13:00:00 2000-01-06 16:00:00
存檔時間戳記錄 不存在 0天0小時0分0秒 5天1小時0分0秒 5天4小時0分0秒 5天7小時0分0秒 5天10小時0分0秒 5天13小時0分0秒
主角家中的時鐘 不存在 12:00:00 AM 1:00:00 PM 4:00:00 PM 7:00:00 PM 10:00:00 PM 1:00:00 AM

由于《紅寶石/藍寶石》中此函数的运算缺陷,时钟电路在的“2000年”的时候,存档时间戳计为第0年,导致时间在电路从2000年满1年也就是满366天跨到来年“第367天”时,漏洞会导致隔天不会变为“第367天”,而是自动重置到“第1天”,与游戏事件预定的触发时间点不同。在“第366天”触发的周期性事件和种下的树果,本应在“第367天”更新和成熟,但由于时钟电路的“第367天”错误的变为“第1天”,导致所有事件更新和树果成熟将未到达第367天,而一直到要再度经过366天,石英电路走到“2002年1月2日”,时间戳重新累积到“第367天”到来的时候才会触发事件,树果成熟。

用表格表达就是:

事件 遊戲卡時鐘電路啟動 3小時後報告第一次的啟動並設置為12:00 AM(第一天) 第366天的11:00AM 第366天的12:00 AM(事件冻结) 第734天的12:00 AM(事件解冻)
時鐘電路(RTC)時間 2000-01-01 00:00:00 2000-01-01 03:00:00 2001-01-02 02:00:00 2001-01-02 03:00:00 2002-01-04 03:00:00
存檔時間戳記錄 不存在 0天0小時0分0秒 366天23小時0分0秒 0天0小時0分0秒(漏洞触发) 367天0小時0分0秒


而游戏启动时时钟电路已经运行到2001年1月1日之后的报告则不会触发漏洞。

类似漏洞

电池耗尽

时钟电路的电池耗尽的时候,时钟电路会被强制重置为2000年1月1日 00:00:00,但正常电池耗尽的游戏会在标题屏幕有警告信息来警告时钟无法运作。相反,触发了时钟电路漏洞的游戏反而不会出现这条警告信息。

更换电池后的漏洞

某些场合被称为新电池漏洞,在更换电池后,时钟电路依然会从2000年1月1日 00:00:00开始重新计算,时钟电路数据将会早于报告的时间戳,导致时间错位,而当错位发生的时候,游戏存档的时间戳将无法到达下一个刷新时间,导致所有的事件都被冻结,直到时钟电路的时间再度运转到和游戏时间戳一致或快于游戏时间戳,然后再运行到时间戳设定的刷新时间之后才会再度恢复正常。

例:假设游戏的“起始零时”是时钟电路的2000年1月1日0时,而时钟电路已经走到2011年1月1日0时,时间戳则记录为4018天0时,此时种下一颗橙橙果,那么时间戳会设定下一次橙橙果成熟的日期是4018天12时,而假设此时电池突然耗尽,那么更换电池后,时钟电路回到了2000年1月1日0时,那么时钟需要再经过4018天12时,也就是11年零12个小时,这株橙橙果才会成熟,而且时间戳才会更新下一次事件的刷新时间。

用表格表达就是:

事件 遊戲卡时钟和游戏同时啟動 11年后的0:00PM種下一顆橙橙果 时钟电路更换新电池(事件冻结) 自然时间4018天(11年)后事件解冻 橙橙果成熟
時鐘電路(RTC)時間 2000-01-01 00:00:00 2011-01-01 00:00:00 2000-01-01 00:00:00 2011-01-01 00:00:00 2011-01-01 12:00:00
存檔時間戳記錄 0天0小時0分0秒 4018天0小時0分0秒 4018天0小時0分0秒(漏洞触发) 4018天0小時0分0秒(漏洞解除) 4018天12小時0分0秒

这一漏洞不仅《紅寶石/藍寶石》会触发,包括没有漏洞的《綠寶石》也会触发这种新电池漏洞,而由于此漏洞在游戏发售后多年,时钟耗尽时才会发生,因此官方并未针对这种问题给出解决办法,官方的修复程序也无法修复此漏洞。

满RTC时钟后的漏洞

又称2099漏洞。当时钟电路运转到2099-12-31 23:59:59 之后,时钟电路将重置回2000-01-01 00:00:00,从而引发漏洞。该漏洞分为两种情况:
1、在游戏关机状态下,时钟电路达到满时间重置;
2、在游戏运行状态下,时钟电路达到满时间重置。
当前者再次开机之后,效果等同于更换新电池漏洞。而后者的存档时间戳记录将会发生错误,产生高达62291天数的数值,该数值产生与建档时初始RTC时间戳相关。

漏洞修复

这是一个日本官网欧美官网都有公告说明的游戏漏洞,由于是宝可梦第一次出现大规模且必定会发生的恶性漏洞,因此任天堂多次对此漏洞进行了批量修复,首先在新版本的《紅寶石/藍寶石》上,已经修补了此漏洞,而对于已经销售的早期版本《紅寶石/藍寶石》,也提供了多种修复方式,除此之外,玩家还可以将游戏卡寄至任天堂进行修复(寄送维修服务已于2016年9月停止支援)。

修复程序的修复原理具体如下:
1、若初始RTC在2000,且当前RTC在2000/01/01-2000/12/31,则将当前RTC调整为366天后;
3、若初始RTC在2000,且当前RTC在2001/01/01-2002/01/01,则将当前RTC跳到2002年1月2日;
3、若初始RTC在2000,且当前RTC在2002/01/02及之后,则无需修复;
4、若初始RTC在2001及之后,则无需修复。

火紅/葉綠》和《綠寶石

火紅/葉綠》的修复程序界面

任天堂在《火紅/葉綠》和《綠寶石》自带修复程序,需要玩家以以下操作进行修复:

  1. 将一台GBA连接到游戏连接电缆的1P上,插入并打开《火紅/葉綠》或《綠寶石》,在游戏标题按select和B,进入修复程序,按A
  2. 另一台GBA连接到游戏连接电缆的2P上,插入《紅寶石/藍寶石》,按住select和start开机,进入修复程序,根据提示进行修复。
  3. 每次重新进行游戏或更换过电池重新进行游戏后,需要再度进行修复。

宝可梦XD 暗之旋风 黑暗洛奇亚

紅寶石/藍寶石》与宝可梦XD 暗之旋风 黑暗洛奇亚进行联动后,将会自动下载修复程序。

宝可梦圆形竞技场

美版《紅寶石/藍寶石》从宝可梦圆形竞技场的特典光盘中下载竞技场的基拉祈会自动下载修复程序。

宝可梦频道

欧版和澳版《紅寶石/藍寶石》从宝可梦频道~与皮卡丘一起!~下载基拉祈会自动下载修复程序。

宝可梦盒子 红宝石&蓝宝石

非日版《紅寶石/藍寶石》利用宝可梦盒子 红宝石&蓝宝石的游玩《紅寶石/藍寶石》游戏功能时会自动下载修复程序。

E卡刷卡器

任天堂E卡刷卡器的说明

日本方面随杂志附赠特制专用E卡来刷入修复程序。

任天堂GameCube

任天堂GameCube的一些演示台也提供了修复程序的下载。

新电池漏洞的非官方修复方式

重新开始游戏

更换电池后,重新开始游戏会让游戏报告的“时间戳0时”重置,进而会让游戏正常运作,但如果此时时钟电路的年份并未超过2001年的话,《紅寶石/藍寶石》运行1年后依然会触发原始的漏洞,依然需要官方修复。

修改电路和存档的时间戳

原本的《紅寶石/藍寶石》漏洞,在触发了漏洞后,只要利用官方修复程序即可修复,但这种方法并不能解决新电池漏洞。

对于新电池的漏洞的研究最早由Furlock's Forest Wiki的维护者Adam提出,并通过自己编写的自制程序,读取《紅寶石/藍寶石綠寶石》游戏卡内部时钟电路的时间,将其运转的时间设置为等于或略晚于游戏报告的时间戳,即可解除问题,但此方法虽然能够解决问题,却会导致游戏内原本正确的时间变得与真实时间不一致。

而先利用第三方设备(如月光宝盒、Retro Freak)或者软件(如配合NDS使用的GBA Backup)提取游戏存档,再利用存档修改程序将报告的“起始时间戳0时”设置为0天0时0分0秒,时间戳设置为当前时刻距离2000年1月1日的天数和时间,然后再导入游戏卡内,之后利用Furlock's Forest Wiki的程序将时钟电路运转的时间设置为等于或略晚于游戏报告的时间戳,即可让时间电路的时钟和游戏存档的时间戳同步,在与现实世界当前时间一致的情况下解除所有问题。

但需要注意的是,修改存档内的时间戳相关数据,并不会将依赖RTC运转的时间相关事件的值一并改动,会导致部分时间相关事件在生成时,不再与原对应的时间戳关联,而是产生错位。如存档内的幻之岛值与记录自建档起经历的时间天数的时间戳有一一对应关系(详见幻之岛值与经过RTC天数的标准对应表),而修改时间戳,将会导致对应关系发生错位,需要另行计算方可得到错位后的对应关系。

2099漏洞的非官方修复方式

2099漏洞的第一种情况可以通过新电池漏洞rtcread,调整当前rtc至晚于最后保存时对应的RTC时间来恢复,但随着游戏的进行,第一种情况多次修复后最终都会演变成第二种情况。而第二种情况下的游戏,将无法通过单纯rtcread更改时间来修复。必须对存档内的初始RTC时间戳和经过RTC时长进行修改,再使用rtcread调整时钟电路,才可修复。但对存档内时间戳进行修改,会导致其他时间相关数值因为并未同步更新变化,而发生此类数值与rtc时间的错位,如幻之岛值。

存在漏洞的卡带版本

早期发售的红宝石蓝宝石卡带存在着树果漏洞的问题,在后期的版本更新中,卡带内部被置入了永久性的漏洞修复。以下是是否存在树果漏洞的卡带版本。

是否存在树果漏洞的卡带版本
卡带版本 存在漏洞 已修复漏洞
紅寶石/藍寶石 日版 1.0 1.1
美版&欧版英文 1.0、1.1 1.2
欧版非英文 1.0 1.1
綠寶石 已修复漏洞

细节

  • 时钟电路漏洞与计算机的时间不同步的问题有着许多共同点:即当硬件的时钟与系统文件的时间印记不同步的时候,可能会导致系统内对文件的修改变为无效,计算机可以通过调整硬件的时钟来解决问题。但GBA游戏卡却没有给出官方的调整硬件时钟的手段,一旦发生问题除了重新开始游戏没有不借助外力解决问题的办法,除非靠第三方程序和硬件来令几个有关时间的数值同步。
  • 第四世代开始,宝可梦游戏的时间和日期获取不再交由游戏卡自己的时钟电路,而是交由主机底层系统的时间,系统记录的是真实的时间,而且根据时间变化记录内的时间戳还可以同步刷新,从而根本上避免了这一漏洞的继续发生。

外部链接


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