時鐘電路(漏洞)
這篇文章可能涉及部分未獲得寶可夢相關企業授權的內容。 神奇寶貝百科僅記述這些內容,而並非支持任何侵權行為。 |
時鐘電路漏洞,又稱樹果漏洞(日文︰きのみ問題,英文︰Berry glitch),是一個在《紅寶石/藍寶石》中發現的漏洞,由GBA遊戲卡帶實時時鐘電路(RTC)的程式設計缺陷導致。
觸發漏洞
此現象在遊戲初期版本發生,會在已遊玩超過1年以上的《紅寶石/藍寶石》中出現,漏洞會在遊戲開始後第366天觸發,時間電路缺陷一旦被觸發,會導致以下事件不按現實時間流動而再次出現:
但以下事件依然會正常觸發:
漏洞產生原因
《紅寶石/藍寶石/綠寶石》遊戲卡帶使用精工S-3511 石英晶振驅動時鐘,但此晶振電路本身無法獲得真實世界時間,卡帶啟動觸發石英振盪後,遊戲內的時間便從公元2000年1月1日開始讀秒,遊戲內時鐘的運作不需如同真實生活中有曆法(陽曆、陰曆與陰陽曆),時間只是由初始日期加石英振盪不斷累加。
- 遊戲卡時鐘電路啟動時的基準時間為「2000年1月1日 00:00:00」,之後時鐘電路會不斷運作,電池電量不耗盡的情況下會一直向未來運作。
- 而當玩家開始《紅寶石/藍寶石/綠寶石》的新遊戲,玩家在主角家中鐘錶上設定時間,鐘錶表面默認為上午10時,玩家設定的時間會被作為「起始時間戳0時」,遊戲的報告會用一個五位數記錄遊戲流逝的時間,其中初始零時記為00000。
- 之後遊戲內在每次存檔時,會與時鐘比對,在此基礎上將時鐘電路上從「起始時間戳」開始,經過的日、時、分、秒數(年月全部換算為日數)以及星期轉化為一串數字,並作為時間戳儲存在遊戲的報告內,這個經過時間是隨著現實時間流逝,與現實時間無關,在遊戲關閉的時候,遊戲的「經過時間」(非遊戲實際遊玩時間)依然會向後運作。
- 每次遊戲內種植樹果或進行周期性事件後,存檔會記錄下下次事件樹果成熟的時間戳或周期性事件戳記,直到時鐘電路時間走到這個既定時間戳後,樹果才會成熟,周期性事件才會更新。
例:卡帶時鐘電路啟動後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及之後,則無需修復。
《火紅/葉綠》和《綠寶石》
任天堂在《火紅/葉綠》和《綠寶石》自帶修復程序,需要玩家以以下操作進行修復:
- 將一台GBA連接到遊戲連接電纜的1P上,插入並打開《火紅/葉綠》或《綠寶石》,在遊戲標題按select和B,進入修復程序,按A
- 另一台GBA連接到遊戲連接電纜的2P上,插入《紅寶石/藍寶石》,按住select和start開機,進入修復程序,根據提示進行修復。
- 每次重新進行遊戲或更換過電池重新進行遊戲後,需要再度進行修復。
寶可夢XD 暗之旋風 黑暗洛奇亞
《紅寶石/藍寶石》與寶可夢XD 暗之旋風 黑暗洛奇亞進行聯動後,將會自動下載修復程序。
寶可夢圓形競技場
美版《紅寶石/藍寶石》從寶可夢圓形競技場的特典光盤中下載競技場的基拉祈會自動下載修復程序。
寶可夢頻道
歐版和澳版《紅寶石/藍寶石》從寶可夢頻道~與皮卡丘一起!~下載基拉祈會自動下載修復程序。
寶可夢盒子 紅寶石&藍寶石
非日版《紅寶石/藍寶石》利用寶可夢盒子 紅寶石&藍寶石的遊玩《紅寶石/藍寶石》遊戲功能時會自動下載修復程序。
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運轉的時間相關事件的值一併改動,會導致部分時間相關事件在生成時,不再與原對應的時間戳關聯,而是產生錯位。如存檔內的幻之島值與記錄自建檔起經歷的時間天數的時間戳有一一對應關係(詳見幻之島的技術細節),而修改時間戳,將會導致對應關係發生錯位,需要另行計算方可得到錯位後的對應關係。
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 ERROR • MissingNo. • ZZAZZ錯誤 • 道具複製 • 道具下溢錯誤 • 地圖254 • 對戰大木博士 故障市 • 合併寶可夢錯誤 • 記錄衝浪錯誤 • 居合斬漏洞 • 老人漏洞 • 夢幻漏洞 • 《皮卡丘》的圖像錯誤 任意門 • 剩餘HP錯誤 • 雙屬性克制資訊顯示錯誤 • 脫離連接俱樂部 • 選擇按鈕錯誤 • 資料損壞錯誤 |
第二世代 | 捕蟲大賽資料複製 • 城都寶可夢錯誤 • 錯誤維度 • 代幣盒錯誤 時拉比的蛋 • 寫生錯誤 • 訓練家之屋錯誤 • 重要物品合併 |
第三世代 | 榴石果漏洞 • 時鐘電路漏洞 • 整個盒子的壞蛋 • 對戰塔盒子複製 |
第四世代 | 變身招式保留錯誤 • 衝浪漏洞 • 榴石果漏洞 • 追打所造成的異常天氣 |
第五世代 | GTS變形錯誤 • 自由落體重力漏洞 |
第六世代 | 列表 |
第七世代 | 列表 |
第八世代 | 列表 |
第九世代 | 列表 |
多個世代 | 克隆漏洞 • 任意代碼注入 • 溢出 • 隨機數異常 • 更改時間系統 多回合攻擊類招式漏洞 • 講究道具鎖定漏洞 • 蓄力的招式覆蓋錯誤 |
跨世代服務 | Pokémon HOME漏洞 |
旁支系列 | 寶可夢+信長的野望漏洞 • 寶可夢大集結漏洞 |
相關列表 | 錯誤招式 • 錯誤屬性 • 錯誤地點 • 錯誤音樂 • 錯誤道具 • 錯誤訓練家 • 錯誤寶可夢 • 壞蛋 |
這個頁面屬於神奇寶貝百科遊戲工程,歡迎加入遊戲工程。 |