網頁

2023年2月19日 星期日

[HACK][SFC]實況Q版沙羅曼蛇-生命不減+無敵

這應該是K社另一款惡搞的射擊遊戲。

前面生命不減和無敵就不想寫了,難在於這次嘗試修改按鍵,雖然最後仍然失敗,但是記錄在這邊,作為以後的參考。

學習6502真的不容易,他很多代碼呈現方式很原始,但是卻很深奧,雖然失敗,但是學到的東西卻無價。

首先要HACK按鍵,第一個要先查按鍵改變記憶體的代碼,經過搜尋,發現在7e0020這個地方,按A會出現128,也就是16位元的80,按下X會出現40,按下R會出現10,按下L會出現20,為什麼這樣設計,應該是按鈕疊加也能判定的思考。

所以理論上,當7e0020出現80的時候,我就可以新增功能,於是再來就是在ROM裡面找到一堆FF的地方,也就是檔案最後。

再來嘗試跳轉





代碼部分:

a0 80 00  ldy #$0080 把 80推入Y

cc 20 00 cpy $0020 把Y和7e0020的值比較

f0 03 beq 跳3格,如果Z變成1就跳(Z變成1表示前面cpy比較結果相同,如果不同z就是小寫,然後意義是0)

4c 06 8f 不相同就跳回7e8f06,回家

ee 40 08 inc $0840,給7e0840加1,這邊是空的位址,因為按太快武器會狂跳,所以多一層判斷,讓按鈕不要飛那麼快

a0 0f 00 ldy #$000f 把 0f推入Y

cc 40 08 cpy $0840 把Y和7e0840的值比較,如果是0f,表示要進位,這邊進位是從7e0840進到7e0020。

f0 03 beq 跳3格,如果Z變成1就跳(Z變成1表示前面cpy比較結果相同,如果不同z就是小寫,然後意義是0)

4c 06 8f 不相同就跳回7e8f06,回家(這邊就是一個簡單進位機制,如果按鍵按下,7e0840就加1)

ee 20 08 inc $0820 處理進位的值,所以在7e0820加1。

a0 00 00 ldy #$0000 把 00推入Y

8c 40 08 sty $0840 把7e0840的內容清掉,完成進位,個位(7e0840)寫0,十位(7e0020)加1。

a0 07 00 ldy #$0007 把 07推入Y

cc 20 08 cpy $0820 把Y和7e0820的值比較,如果是07,表示要再給他1,避免溢位,當機(超過07就會當,最多只能6)。

f0 03 f0 03 beq 跳3格,如果Z變成1就跳(Z變成1表示前面cpy比較結果相同,如果不同z就是小寫,然後意義是0)

4c 06 8f 不相同就跳回7e8f06,回家

a0 01 00  ldy #$0001 把 01推入Y

8c 20 08 sty $0820 把01推入7e0820。

4c 06 8f 跳回7e8f06,回家


後來,還是失敗了。

程式有成功,按下去按鈕也有緩衝,但是問題是遊戲本身不顯示。


雖然目前7e0020停在5,可是不顯示,這樣玩家就不知道現在可以按下option,如果按到6會清空耶,速度加太快,也不好玩,所以這樣HACK,等同不能發揮功能,因為不顯示。

雖然失敗,但是整體來說很有趣,然後學到很多,尤其是beq jump if equal,如果相同就跳,這個代碼很有趣還有一個是BNE,jump if not equal反邏輯。


影片為改一般無敵版本的。

沒有留言:

張貼留言