這篇想談的是什麼是真正的「一拳」?
拿到這個遊戲收先第一個就是找到自己血,把自己改成不減血。
這都很順利,接下來是想要改出「一拳」,很順利找到敵人血條,發現有兩個血條,分別是7E10a4和7E1124,於是想得很簡單,就想直接在7E11a4這邊下斷點,
首先是出現敵人,第一次斷點,這邊應該是系統設定讀取敵人的血。
給他繼續RUN,然後打敵人一下。
斷在這邊,在00e235這邊,給了一個sta $0024,x,這邊的意思是把攻擊的值後剩下的血量8d,寫回7E10a4,於是修改的第一個思路就在這邊。一、把這邊寫回去的血直接改成寫回0,代碼很簡單,A9 00 00 8D A4 10,把0推入A裡面,再把A推回7E10A4,可是這邊空間不夠,必須要使用跳轉4C。
如果只有一段代碼,那還很簡單,但是隨即撞牆。
拳頭是一段寫回代碼,腳也是、武器投擲、摔,各自都有損傷代碼,每個損傷都是個別計算的,如果每個都另外寫過跳轉,那會花一大堆空間,而且事實上,系統會在畫面上產生2會敵人,等於全部工都要2次,然後大魔王血的位址又還不一樣,顯在在這邊HACK撞牆了。
二、思路二,直接給他STZ,指定7E10a4給他ZERO就可以,這個思路好處是不用跳轉,省很多空間,代碼更精簡,9C A4 10,直接STZ這個位址,但是依然出現前述,拳頭是一段寫回代碼,腳也是、武器投擲、摔,各自都有損傷代碼,每個損傷都是個別計算的,也就是要把全部的99 24 00 STA $0024,X 都取代掉。
然後後來發現第二的敵人,他用X偏移來處理,也就是利用偏移,從7E10a4直接跳到7E1124,換句話說,思路二又撞牆。
三、思路三,前面有說,一開始敵人會出現,系統會讀取資料。
在029523這邊,敵人血量96,系統把A=96這邊寫回7E10a4,所以必須往上找,看什麼時候A被放入96。
兩個敵人各自代碼不同,但是依序會讀028062和028073
所以這邊改成00,系統讀取資料,就會讀成0,這樣兩個敵人出來就直接0,等於一拳。問題是,他用X變址,不同敵人可能不同血量,也就是這邊看到的可能都是血量庫。
四、於是進到第四個思路,往上找LDA這段代碼,在02951e這邊,系統lda 028062的值也就是96進A,程式代碼出奇簡單,只有B7 00,這邊取代成A5 00,
RUN之後給他LOAD回一開始,再看一次斷點狀態。
直接給A等於0,然後系統再把A推到7E10a4或偏移後的7E1124。
於是,最小修改,小兵一拳。
沒有留言:
張貼留言