繼續研究代碼,這次使用C4(JMP)跳離代碼,直接把一堆金手指寫進遊戲就實現了上述功能。
大概流程如下:
先找到遊戲開始時候的重置代碼,我一開使用0090這個位址,0090是無敵的位址,後來發現82(速度)代碼,比較後面,所謂比較後面的意思是,他前面全部都歸零了,我再給他補回來的意思。
同樣的我也有測試,散彈這個位址,也是比較前面,所以使用速度這個地方當突破口很不錯。
原本代碼是85 82 A9 40 意思是 STA 82 LDA 40,把A放到0082這個位址,A是0,也就是清空0082的意思,然後在給A放40進去。
這四個代碼,直接取代成4C E0 FF EA,意思是4C(JMP)跳轉到FFE0這個位址,EA就是NOP,不執行指令。
後面還是要把 85 82 A9 40 補回。
然後是注入代碼。
A9 03,LDA 指令,把A放3進去,原本是0,85 82 ,STA 82,把A的值也就是3,放入82,這樣速度就一開始就直接給3,A9 01,再把A改成1,85 90,把A的值也就是1,放入90,這個位址是盾,一開始一樣要盾,8D C7 07,把A的值送到07C7的位址,為什麼同樣是STA,有85也有8D,85是推單一位址,例如0090,8D是推兩位,例如07C7,所以這邊用8D,再來,A9 40 ,把原本A的值回寫成40,雖然不知道40什麼意思,但是要剛好寫回去,這樣遊戲不會當,最後4C F1 B5,跳回 B5F1的位址。
然後發現,這個遊戲的盾很奇妙。
盾是0090這個位址,然後91,會放一個1,92會放1,也就是當取得盾的後,會依序放入01 01 01
然後,盾可以擋15發或16發子彈,每次會在92這邊加1,也就是數值變成01 01 0F之後,就強制進位,變成 01 02 00,這樣,於是盾就取消,然後再把3個地址全部寫回00 00 00 ,所以去找觸發 0093這個位址的代碼,發現有兩段,一個應該是碰到敵人,一個是碰到子彈,這兩段都給他EA掉,這樣就可以讓盾無限。
實際試玩,玩到第7關,玩不下去,都在打鈴鐺。
不知道這個遊戲有無破關,還是一直LOOP下去,我看地圖應該是LOOP了。
剛剛突然想到,盾不會減少,其實就不會死,也不需改無限命,也很有趣。
沒有留言:
張貼留言