自己动手丰衣足食-自己动手修改GBA ROM游戏文件
? ?經過一天的努力終于琢磨出怎么修改GBA的游戲文件也就是俗稱的ROM文件,起因是因為偶然看到二手GBM,頓時抑制不住買了一臺,可惜買得晚了,完美運行游戲又帶金手指功能的燒錄卡買不到了。SUPERCARD燒錄卡看評論說費電,玩游戲會拖慢什么的,最后權衡再三買了個EZ4燒錄卡,缺點就是不能開金手指。但是我這種從小開慣金手指的人沒有金手指怎么馳騁游戲?好了廢話不多說開始進入正題,看本文最好有80x86匯編語言基礎,理解什么是代碼段,什么是數據段,用CE OD調試修改過PC游戲的最佳。
? ?當然沒有的話我也試著盡量讓沒基礎的人能看懂,之前搜了半天百度只找到一篇很晦澀的博文說了這個方法,本人弄出來了就打算寫篇圖文教程造福廣大沒有條件開金手指的玩家。
? ?首先是工具:
1.UltraEdit ?
? ?大名鼎鼎的16進制文件閱讀/修改工具,這個工具主要是修改GBA ROM文件,并保存。
2.NO$GBA1.4C ?
? ?這個并不是那個著名的NDS模擬器,雖然名字一樣,但卻是個GBA ROM的DEBUG調試工具,用它能幫助定位需要修改的代碼段。
3.VisualBoyAdvance1.6
? ?一定得是這個低版本的GBA模擬器,我被卡了大概一早上就是因為我本來用的是1.72版本的,1.72和NO$GBA1.4C載入后的地址不一樣,有偏移。
4.arm匯編手冊(中文版)
? ?GBA的CPU用的是ARM匯編語言,有80x86匯編語言基礎的朋友可以自己查手冊,實現更自由的修改。
? ?http://download.csdn.net/detail/l198738655/9903635 ? ? 本文提到的工具
? ?好了,我們開始,首先我們來學習怎么找或者說制造VisualBoyAdvance模擬器用的金手指,因為只有會找金手指代碼了才能進行下一步的ROM修改。示例游戲是《牧場物語:礦石鎮的伙伴》
? ?
? ?現在的錢是500,選擇菜單欄中的 修改→搜索修改?
? ?
? ?按照圖片上的設置來,然后點 開始→搜索
? ?
? ?出來一個結果,有時候會出現多個結果,這時候只能去買點東西讓數值變動重新搜索,好在GBA游戲比較簡單數據比較少,不會出現PC游戲一個數值幾百上千個結果的事情,可能也是我這個存檔是游戲剛開始,所以干擾數據比較少。
? ?
? ?然后選擇“添加代碼”
? ?
? ?然后選擇 修改→修改代碼列表?
? ?
? ?就能看到金手指了
? ?
? ?金手指已經生效,錢被修改成了800。此時要記下“修改代碼列表”里的地址“020068b4”這就是存儲金錢的地址,這個地址下存儲著金錢數“320”這是個16進制數,換算成10進制正好是800,不清楚的人可以自己用WINDOWS的計算器點“查看”切換成程序員來換算。做到這一步就可以關閉VBA模擬器了,現在打開NO$GBA1.4C。
? ?
? ?
? ?首先選擇 設置→模擬器設置 然后按照下圖設置按鍵
? ?
? ?用鼠標點一下游戲畫面才能開始操作游戲
? ?
? ?在紅框框內 右鍵→GO to...
? ?
? ?
? ?然后再對話框內輸入剛才找到的地址,輸入完后點OK
? ?
? ?點擊OK后跳轉到了光標所在的地址,我此時游戲內的金錢是1600,換算成16進制數是“640”,但這里顯示的是4006是怎么回事呢?這涉及到一個大端小端問題,弄過80x86匯編的人會知道,這里就不展開來說,這里用的是小端模式,計算機的數據都是以字節為單位顯示的,一個字節簡單來說就是兩個數字“00”,所以1600的16進制也可以寫成“0640”,小端模式就是要把數據按字節為單位前后顛倒,本來從左往右讀的改成從右往左,兩位兩位的讀,故改成“4006”。然后我們用快捷鍵Ctrl+B,然后在彈出的對話框中輸入 [020068b4]!
? ?
? ?來設置條件斷點,讓游戲訪問這個地址里的金錢數據時斷下來,我們就能知道是那一段代碼在訪問這個內存地址,然后我們買個東西,花點錢讓代碼段訪問以下這個地址
? ?
? ?
? ?買一袋種子后斷在了紅框框處,現在按一下鍵盤上的"Delete"鍵刪除[020068b4]!這個斷點。這一句我們不用理他,看這一句的上面一句
? ?
? ?sub是減法 這一句的意思是,r0寄存器里的值- r1寄存器里的值結果放回r0寄存器。r0=r0-r1
? ?
? ?我們在這一句上下一個斷點,就是點一下這行末尾出現“BRK”就說明斷點已經設立,然后買個120G的東西,又斷下來了,我們看r0和r1寄存器此時的值
? ?
? ?r0為640就是10進制的1600;r1是78就是10進制的120。所以我們只要編輯這行代碼讓它由減變加,就能實現買東西反而倒找錢的功能了。在下了斷點那行再點一下,"BRK"消失,取消斷點,然后在此行上右鍵選擇“Change Instruction”來修改代碼
? ?
? ?
? ?修改成add r0,r0,r1,然后確定
? ?
? ?然后我們用鼠標點擊一下游戲畫面,讓游戲跑起來
? ?
? ?因為我們在買的時候斷下,修改代碼后重新運行,此時游戲邏輯已經改變,現在錢變成了1720正好是1600+120,但是此時我們要把代碼改回去,為何呢?因為這個調試器是無法保存我們的修改的,我們得改回去然后用之前提到的16進制文件編輯器來查找到這段代碼,再修改后才能保存。改回去后記住紅框框內的4個字節。
? ?
? ?我們要記下圖片中的這4個字節:1C211A40,然后轉換成小端形式:211c401a,然后我們用UltraEdit打開 牧場物語.gba 文件
? ?
? ?然后在這里按Ctrl+F搜索字符串:211c401a?
? ? ?
? ?
? ?看我們找到了,如果怕不是這個我們可以再搜索一次就會出現
? ?
? ?說明這4個字節的組合是唯一的
? ?
? ?我們要把sub修改成add,也就是要把 211c401a 改為 211c4018,選中a,用鍵盤改它為8,然后保存退出就修改成功了。此時把這個ROM文件拖入任何一個燒錄卡,任何設備的GBA模擬器,修改都會生效,沒有金手指也能縱橫GBA世界。修改GBA ROM主要就是找SUB或ADD語句,下面再以機戰OG2為例子,說一個用加法實現減錢效果的代碼的修改。有時候代碼實現減法不一定會用SUB而是用ADD,用一個正數加上一個負數也能實現減法。
? ?
? ?
? ?這一句的意思是r1=r1+r2,經過測試,去地圖里殺敵后增加資金也是這段代碼,把ADD改為SUB的話減錢就是加錢,加錢就減錢,問題在于資金數肯定有個上限,超出后恐怕會溢出導致存檔損壞什么的,單純的把加改成減并不安全,我的辦法是把add r1,r1,r2改為add r1,r1,1,也就是不管買什么都只加1塊錢。但問題來了,殺敵一臺本來該加2000也變成了只加1。不過這也不是什么大問題,想加錢的時候換成正常ROM不想花錢了換成改過的ROM,存檔是不受影響的。
? ?我已經把修改后的ROM文件一起打包到工具壓縮包里了,有興趣的同學可以自己拿模擬器或者GBA試試。
轉載請注明出處尊重一下鄙人的勞動成果多謝多謝
總結
以上是生活随笔為你收集整理的自己动手丰衣足食-自己动手修改GBA ROM游戏文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html封套成exe,一种使用方便的封套
- 下一篇: datagrid设置单元格边框_如何设置