看板 Rockman 關於我們 聯絡資訊
## 前言:「公路的詛咒」 RockmanX的最初版卡帶有一個奇妙的防盜機制,(這應該是防盜機制,有許多記載) 「豆砲打到沒有辦法造成傷害而反彈的東西, 玩家就會被拔裝送回序關高速公路。」 如果對這點沒有印象,首先我們可以看看影片:(注意0:06的位置) https://youtu.be/6gWaFwSZ08Q
七年前我在這個版上發了一篇這個現象的研究。 #1Ke19UXX (Rockman) [心得] RockmanX初版回溯Bug研究+咒殺八大 那時有了一些模糊的的研究結論,其中最重要的是: 「玩一玩會發現有時候大補落地就會立刻消失,這時候就會發上述bug」 「這可以讓我們秒殺boss」(!) 「只要不拿腳就不會被送回公路,只會被踢出關卡」(!!) 但其實我對那些結論其實一直很不滿意:那並不是一種機制的描述,我沒辦 法從中預先知道我這次離開關卡會不會回到公路,因此不太容易在流程規劃把這 個機制列入考量。七年過去,機緣巧合地重新面對了這個問題,在幾位朋友的幫 助下終於釐清了這個防盜機制發生的過程,控制他發生與否的條件,以及為什麼 不同模擬器會有不同結果。 ------------- ## 詛咒的機制 首先要先介紹ROM版本。開頭這個影片中,玩家是用ZSNES模擬器玩美版的Rom ,但其實日版美版的初版Rom都有這現象,他們分別會被取以下名字: Mega Man X (U) (V1.0) [!] Rockman X (J) (V1.0) [!] (U)和(J)分別表示美板與日板,V1.0表示初版,而後面的[!]表示這是驗證過的正確 ROM。根據超任模擬器的大神 byuu (or 他後來改名叫 near) 的描述,這現象當初 在日版的實機卡帶上有發生,而 Capcom 立刻做了臨時的物理修正──追加了一條 跳線,並且很快的又重新釋出了完全修正的版本 V1.1。至於當初到底發生了什麼問 題──這完全值得另外追加一篇介紹,如果我之後有看懂的話,下一篇我們就來講 這個。 為了方便在畫面上標示記憶體中的數值,本文以 Bizhawk 2.4 模擬器為例,選 擇使用Snes9x核心。本段落所列出的記憶體位址以此為基準,其他模擬環境需要另 外換算。首先要先介紹兩格關鍵的記憶體。 (1) 「爆炸計數器」:位址"0x001F9D"。是這個防盜機制的核心。 https://i.imgur.com/B2AlXUJ.png
https://i.imgur.com/5nBc1tv.png
https://i.imgur.com/XqFgaZ9.png
https://i.imgur.com/FoFtel1.png
- 是一個有號位元組(Signed Byte) - 可以裝的值的範圍是-128~+127, - 遊戲開始的時候這個值是0, 每打倒一個敵人發生一次爆炸都會加一。 - 有一些比較大型的敵人可能會爆炸不只一次。 - 中頭目多半是16次,RT-55J是30次,Boss大多是64次。 - 超過127之後會溢位(Overflow)回-128。 - 當他是負值的時候,會發生一些奇怪的現象, 姑且讓我們將其稱為「詛咒狀態」。 - 詛咒狀態中,補血落地後只能存在6楨。 - 很容易觸發,通常透過這個現象來檢查詛咒狀態的發動與否。 - 但也因為這樣,在詛咒狀態中很難把E罐補滿。 - 詛咒狀態中,如果使用豆炮打到無法造成傷害而發生反彈的敵人,則 會強制離開關卡。這是大多數人對這個機制的第一印象,叮的一聲之 後就回公路了。 - 如果是還沒取得武器的八大關卡,會進入Weapon Get的結算 - 如果在演示動畫中看到變色的X傳送下來示範武器效果的畫面 ,系統就會承認你已經拿到這個特殊武器。 - 在選關畫面中,boss的生存與否,其實就是檢查你拿到幾個 武器;也就是說,當你拿到特殊武器的瞬間,boss就已經死 了。 - 換句話說,我們可以故意在關卡中觸發豆砲反彈,看到變色 的X,然後Boss就會被詛咒身亡。 - 如果是其他關卡,或已經有這個武器了,則直接進入密碼畫面。 - 因此老西城內的 Boss 不能用這個方式跳過。 - 詛咒狀態中在礦車上無法起跳。 - 這不太重要,但要小心你可能會被礦車拖下去無底洞。 - 詛咒狀態中衝刺豆砲會打開「序關旗標」, 之後用任何方式離開關卡後會回公路 - 序關旗標會在下一小節更詳細的介紹 (2) 「序關旗標」:位址"0x001F9B" - 是一個位元組。有沒有正負號不太重要,他似乎只有幾種少數的值。 - 在遊戲開始的時候是0 - 序關通過的瞬間會變成4 - 讀檔的時候可能有不同的值,但總之只要序關通過了就不會是0 - 遊戲在離開關卡之後, 會依據這個數值決定要把你送去選關畫面還是序關公路。 - 以序關來說,如果玩家把三條命死光,會看到密碼畫面; 然後因為這時候序關旗標是0,系統會把玩家丟回公路的開頭 - 但如果玩家通過序關,仍然會看到密碼畫面; 這時候序關旗標是4,因此系統會把玩家丟去選關畫面。 - 在前一小節中有提到,在詛咒狀態中使用衝刺豆砲會打開序關旗標 - 上面這句話就是「詛咒狀態中衝刺豆砲會把這個數值改成0」。 - 目前沒有在關卡中把這個值改成不是0的方法, 所以沒有辦法取消效果。 - 反過來說,只要確保禁止使用衝刺豆砲,這個數值就不會被改成0, 玩家就不會被送回公路了。 ## 應用方式 基本上就是在關卡中找到適合叮的東西,然後叮下去;但因為觸發詛咒狀態有 爆炸次數的限制,所以一但開始叮之後就要減少殺敵數,避免詛咒狀態被取消掉。 原則上會先打企鵝關拿腳,但是因為衝刺豆砲很危險,所以記得「不要衝動,我是 說不要衝豆。」有需要的時候盡量用冰特武取代豆砲。 (1) 咒殺八大快速通關 姑且拿寫這篇文章之前打的那一輪當範例,但下面的流程有稍微換個順序,讓 變色龍隱形多發揮一些功用。 https://youtu.be/k-c1Q_OtkWY
0. 序關通過順路清怪大概會有90次左右的爆炸。 1. 企鵝:可以叮的地方是後面的雪屋。 - 拿到腳部裝備之後可以放心衝刺,但還是要避免衝刺發砲。 - 原則上如果沿路有清蝙蝠,到冰屋附近應該已經發動詛咒狀態了。 - 如果還沒,就打幾隻冰屋跑出來的蜻蜓 2. 鍬形蟲:開場馬上有一隻盾兵可以叮。 3. 變色龍:用剪刀打RT55J拿身體裝備, 然後下方通道的落石機器人變身完成之前可以叮。 - 有需要的話也是可以用冰特武打個幾隻路上的怪,但盡量節制一點。 4. 金剛:開場立刻換血拿E罐, 然後上方的電球槍兵的飛彈可以叮,建議小跳射。 5. 鐵鷹:開場上去拿愛心,E罐,頭部裝備, 然後往上爬一點有個小矮兵,踢牆跳射。 - 如果不想拿頭也可以不拿,不太重要,就是帥 https://i.imgur.com/NoANoZn.png
6. 大象:前面有拿頭的話這裡可以拿手部, 然後用冰車墊腳上去拿E,回頭底下拿愛心 https://i.imgur.com/EY7yDaB.png
7. 犰狳:用衝刺的闖過前半段,變色龍集氣拿E, 然後追上壓路機背後站好,這時壓路機應該會往下掉一層, 原地豆砲連打可以打中壓路機往上伸的前輪。 - 萬一沒追上也不用緊張,更前面一點點還有一階 https://i.imgur.com/c07sdkQ.png
8. 章魚:用變色龍集氣躲掉關卡,兩隻鯨魚中頭目都用變色龍針刺清掉, 後面轟炸河底的船的炸彈可以叮。 9. 進城:還是要非常小心避免衝刺豆砲。 沿路只有RT55J和兩隻鯨魚是爆炸次數較多的,加起來大約七十次;如果其他盡 量換血,原則上應該不會湊到128次爆炸,也就是說可以在一輪詛咒狀態之內咒殺完 八大頭目。對自己有自信的話,E罐可以少拿一點;原則上就是大象E最遠,其他都 滿好拿的。頭部手部裝備也可以不拿,有身體總是可以換血的,不見得需要倚賴變 色龍集氣。 (2) 波動拳 基本上就是上面的流程跑一遍然後每關進去補道具,拿到就EXIT跳出。波動拳 本身容易夾帶豆砲,所以對有無敵時間的boss(對我就是在說那隻萬惡的蜘蛛)來說 是滿危險的。 ## 模擬器的差異 前文中有提到,ZSNES 1.51 可以觸發這個現象,但 Snes9x 1.53 不能。我自 己有滿長的時間都是用SNESGT在玩這個版本,因為ZSNES他的E罐只會補一半。但藉 著這個機會,剛好來檢查一些常用的模擬器,各自對這個防盜機制的相性如何。 模擬器 結果 版本 ZSNES 可以 1.51 SNESGT 可以 Snes9x 不可 1.56.2之前版本,至少到1.40都不可 可以 1.57之後版本,為什麼阿XD Bizhawk/Snes9x Core 可以 2.0之後版本 很奇妙的2.0~2.6全部都可以, 裡面的Snes9x核心到底是什麼版本?! 下面一串 byuu 開發的模擬器當然是不會觸發的── byuu 有故意把這修掉。 bsnes higan byuu Bizhawk/bsnes Core 除此之外 Bizhawk/Faust Core 不可 迷你超任的Retroarch 不可 迷你超任自帶Canoe 可以 Wii Virtual Console引擎 可以(!!) SD2SNES 嗚嗚我沒有,但看起來不行 ... 有看過 Speedrunner 之前在研究 1.0(J) 限定的 bug 他們使用了SD2SNES,但是並沒有觸發 不過我自己實在沒機會碰到,還是滿想知道準確的情況 值得注意的是,那些被我標上「不可」的,他們之所以不能觸發,主要是他們 的爆炸計數器那格的數字不會隨著爆炸上升;相對的,他們的行為是如果有一個正 值,這會隨著爆炸次數不斷下降,到零就停止。也就是說,如果能夠修改記憶體, 直接把爆炸計數器改成負值,立刻衝刺豆砲,或是拿豆砲反彈的話──該發生的詛 咒都會發生。如果是用Snes9x,請注意他的記憶體位址算法和Bizhawk不同,所以記 憶體位址要改成7E1F9D。 ## 練習方式:Bizhawk / Snes9x 上面的截圖中有顯示當前爆炸計數器與序關旗標兩格記憶體的數值,這其實是 一個簡單的小型Lua腳本。總之先上連結 https://pastebin.com/aSQF5Krs 如果有想要拿來練習套路,直接把上面這個lua腳本拿去用 Bizhawk 的 Lua Console 載入就可以了。 https://i.imgur.com/mGZHtuR.png
當然,如果你想用snes9x 1.60來進行練習,也可以用陽春一點的方式: Search Cheat 有個 RAM Watch 的功能,可以直接用 Load Watches 直接讀取想要監 控的記憶體數值。總之還是先上連結 https://pastebin.com/Kpw4nTdU 直接把連結中的文字存檔,然後用 Load Watches 讀取這個文字檔就可以了。 https://i.imgur.com/hczgi6d.png
## 致謝 在此感謝波紋(ProwainK)與阿痕(ds83171)的協力研究。事實上最關鍵的條件 「衝刺豆彈」是由波紋在2019年告訴我的: 「只要用衝刺豆彈擊中敵人 / 物件,就會更容易回到公路的樣子」 雖然這個敘述不夠準確,但衝刺豆砲是幾年來我從來沒有注意到的切入點;前 幾天阿痕以這句話為出發點做了幾次嘗試,發現這能夠完全避免被送回公路,於是 他練習了幾輪之後,順利的在33分鐘完成一輪遊戲。有了阿痕大量測試的樣本,我 們非常相信這個切入點很可能是對的,於是才有了這整次研究的產生。 後來經過更多的搜尋,有看到更多文章與影片多少都有提到這件事情,但實在 是沒看到準確的觸發控制。但如果還有機會,下次我們應該會來弄清楚一些其它人 提到的,這個防盜機制實際上做了什麼,大家都遇到了什麼效果。 ## 下集預告: The Cutting Room Floor 與 near.sh 的相關記載 我目前找到最接近這個現象的記載是在 The Cutting Room Floor: https://tcrf.net/Mega_Man_X#Copy_Protection 他在防盜機制的小節之內,寫了一些系統判定你玩的是盜版的時候會觸發的一 些有趣現象,例如會失去所有的裝備、鎖住你的集氣炮、傳送回關卡開頭、吃到1up 回序關、在128次爆炸之後衝刺豆炮讓你需要回到關卡開頭(!!!)...等等。欸,其實 這個他已經寫出來了嘛。只是光是這樣寫我當初真沒看懂我們遇到的到底是其中的 哪些。他同時也提到了 byuu 寫的段落──Capcom如何物理修正了1.0J的卡帶。詳 細的部分我們下回再來──如果我真的能夠看懂那個電路圖的話 ... ## 給按End的人 - 當年洛克人X1的初版卡帶的防盜設計,會讓玩家被傳送回公路。 - 這個版本的ROM可以讓玩家在八大關卡開頭秒殺BOSS。 - 我們最近研究出了刻意控制讓自己不會被傳回序關的方式,拿來幫助通關。 - 對於七年前的自己,只能說,年輕人就是年輕人,太衝豆了。 -- ███◣ ◢██◣ ◢██◣ █ ◢█ ◣ ◢ ◢██◣ ◣ █ █ ██ █ ██ █ ██ █◢█◤ █◣◢█ █ ██ █◣ █ █ ██ █ ██ █ ██◤ ████ █ ██ ██◣█ @ ptt.cc ███◤ █ ██ █ ██◣ █◥◤█ ████ ████ █◥█◣ █ ██ █ ██ █◥█◣ █ ██ ◥█ 鴉片(Append) ◥█ ◥██◤ ◥██◤ █ ◥█ █ █ █ ██ twitch.tv/append -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.9.155 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Rockman/M.1620776735.A.9EC.html Append:轉錄至看板 C_Chat 05/12 07:46
Valter: 推 不過看下來反而不懂幹嘛稱防盜 正版正常玩都可能出事 05/12 07:59
Append: 這就是為什麼需要多開一篇... 05/12 08:01
Append: 那個防盜機制的原理還是滿有趣的,值得獨立一篇 05/12 08:13
ainamk: 比較想要先看這怎麼防盜啊XD 05/12 08:51
Append: 嗯...那我開個hackmd來寫我目前看懂的好了 05/12 09:05
Append: 總之基本原理是想要檢查SRAM X1是沒有SRAM的 05/12 09:07
Append: 但很多磁碟機為了應付存檔功能還是有SRAM 05/12 09:08
RuinAngel: 記得當年玩磁碟機的時後就沒事會回公路很煩,但沒有印 05/12 09:08
RuinAngel: 像碰過打一半被送回去的都是關卡結束或離開之後出現在 05/12 09:08
RuinAngel: 公路就是了@@? 05/12 09:08
Append: 所以如果他發現系統有SRAM就會開始妨礙玩家正常遊玩 05/12 09:08
Append: 打一半被送回去通常是豆砲反彈,所以如果你不太常使用豆砲 05/12 09:11
Append: 例如特殊武器用的多,或是很努力地都先集氣就不太會遇到 05/12 09:11
RuinAngel: 還好我不是正版軟體的受害者,是盜版軟體的受害者(?) 05/12 09:14
Append: 那現在你可以成為盜版軟體的既得利益者了! 05/12 09:22
h908492: 剛剛打開卡帶發現有跳線,所以跳線焊起來也可以用詛咒嗎XD 05/12 09:41
Append: 別。很可能不是只有1.0有跳線。 05/12 09:43
h908492: 怕...立刻鎖回去 05/12 09:45
Append: 這樣說好了,我有去找了很多拍賣網站上的X1卡帶,很偶爾有 05/12 09:48
Append: 看到他們拍電路板,更偶爾看有拍到背面跳線。從這些照片中 05/12 09:48
Append: 有看到兩種跳線接法,我沒把握哪個是1.0。但總之我去訂了 05/12 09:48
Append: 一張和byuu拍的照片一樣的,我想那總應該要是對的。等送來 05/12 09:48
Append: 我再找機會去借實機SFC來研究細節。 05/12 09:48
Append: 安全的辨認1.0和1.1的方式是用冰車打boss,會碎掉的是1.1 05/12 09:50
Append: ,會成型滑出去的是1.0。 05/12 09:50
randyko: 推,詛咒是發現盜版才觸發嗎?signed byte隨便都溢位吧 05/12 11:02
Append: 他會做一些跟硬體有關的檢查,如果發現答案跟他預期不同, 05/12 11:06
Append: 就會觸發詛咒。很不巧的是開發版的硬體和製品版也不同.... 05/12 11:07
Append: 不確定Capcom什麼時候發現這點,但最後他追加了一條跳線 05/12 11:08
Append: 強迫更改製品版的記憶體映射,原則上這樣應該就不會出問題 05/12 11:09
Append: 後來他們有推出了1.1,檢查的方式跟1.0不太一樣 05/12 11:10
Append: 沒有爆炸計數器這種東西了,真的去硬搜記憶體不會找到和 05/12 11:10
Append: 爆炸相關的記憶體格子 05/12 11:10
Append: 但...我不太確定他們有沒有繼續用跳線這個技巧,看起來很 05/12 11:11
Append: 容易辦到,說不定他們根本不想找其他方法就沿用了XD 05/12 11:11
Append: 我覺得我之所以現在能在網拍上看到兩種跳線可能是這樣來的 05/12 11:12
randyko: 所以有先確認是否為正版的機制在,不過蠻想知道當初拿到 05/12 11:20
randyko: 沒跳線版一直玩序關能不能換貨可能工廠已經都跳線完了, 05/12 11:20
randyko: 發現直接升級軟體成1.1就沒問題了,跳線就不拿掉了 05/12 11:20
Append: ROM沒辦法升級軟體阿。 05/12 11:30
randyko: 在工廠應該可以更新ROM內的軟體吧? 05/12 11:49
Append: 不能,ROM就是"Read-Only Memory",硬體設計只能讀不能寫 05/12 12:14
Append: "升級軟體"的唯一手段就是"拆晶片直接裝新的" 05/12 12:15
Append: 那樣就不是更新軟體了,而是直接換一片新的 05/12 12:15
randyko: 了解,感謝解說 05/12 12:22
dv8508: 鴉片大太猛了!!!! 05/12 13:56
superrockman: 這個超強 都過了快20年了還能挖出來XD 05/12 15:16
cola540112: 先推 我盡力看了一半了我還是看不懂XD 05/12 16:53
h1236660: 真有趣 05/12 17:21
snk2001: 這個我有印象 小時候玩的是超任磁碟片的X 我有發現每次 05/12 17:26
snk2001: 黃豆砲打到會反彈的東西就會通關然後被送回序關 05/12 17:27
snk2001: 結果都一直拿不到腳部零件 無言 05/12 17:27
loreck: 朝聖 05/12 19:32
※ 編輯: Append (220.133.9.155 臺灣), 05/13/2021 10:41:04
chjimmy: 太猛了,以前只覺得很奇怪,沒想到鴉片居然解出觸發機制 05/13 21:21
chjimmy: 對了,請問溢位到-128時再爆炸數值還會有變化嗎? 05/13 21:29
ainamk: +1變成-127吧 05/13 22:33
Append: 就繼續+1,所以再爆128次之後可以解除詛咒... 05/14 00:52
ainamk: 但是詛咒狀態下要湊到128次還不能叮 好像 有點難? 05/14 08:55
Append: 換特武阿,特武不怕叮 05/14 11:19
Append: 本作取得特武異常容易,八大全部咒殺掉身上武器很夠用 05/14 11:19
superrockman: 問題 黃豆叮到會觸發詛咒 那特武呢....? 05/14 18:04
ainamk: 樓上你先好好看完文章吧? 05/14 19:08
Append: 特武是絕對安全的,但詛咒狀態不是由黃豆觸發的。詛咒狀態 05/14 23:27
Append: 由128次敵人爆炸觸發。黃豆反彈會在詛咒狀態下觸發離開關 05/14 23:28
Append: 卡,除此之外衝刺豆砲發射會開啟序關旗標。 05/14 23:28
sifone7251: 小時候有印象 沒想到真有人去測試機制 受我一拜 05/17 16:01
clayerlee: 這篇超有趣,大推實驗精神 05/19 15:20
luken: 想起小時候跟同學說我用八大武器打序關,每個都說我唬爛 05/21 23:18
mattc123456c: 樓上,有禁斷碼可以在1.1版體驗 05/22 21:26