2026年3月19日 星期四

實況野球MLB2009-使用模擬器金手指開啟WBC終極編輯模式

 

WBC2026剛落幕,意猶未盡的玩家可以用MLB2009版的再組國家隊再戰幾回合。不過原始的遊戲只能改五項(姓名、背號、音声預設都不能改),當年在實體機上使用金手指可以解鎖此一部份,球員的姓名、背號、音声部分變成都可以修改,這樣就可以調整球隊陣容到符合現實狀況。



圖為Stuart Fairchild,沒他那支逆轉兩分砲大概贏不了韓國,這屆要是沒贏韓國那場,光憑前兩場大概就像2009那隊被嘴到爆。

參考日文網站「改造ゲーム日記」這一篇
実況パワフルメジャーリーグ2009
<WBC>
WBCエディット制限解除
0C08DD4C 14564594
1C06D25C 2859E7A6
0C08DD4C 14564594
1C06D5DC 2859E7A6

此為金手指AR V1的規格,模擬器用的需要轉成RAW
找一個軟體omniconvert可以幫忙轉碼
個人測試的PCSX2版本v1.7.2237,其他版本不保證有相同效果。

PCSX2的金手指碼為
patch=1,EE,20935134,word,34050001
patch=1,EE,209352B4,word,34050001


使用後多了「名前」、「背番号」、「音声設定」等功能,可以在遊戲介面下爽改,不用大費周章在文字介面下修改PSU檔。

進一步瞭解程式運作,可以使用Cheat Engine的「檢視記憶體」功能。

觀察記憶體7FF770935134的這個位址與7FF7709352B4,發現目前的值都為2D 28 00 00(反轉為0000282D)




加入金手指後(方法請看這裡),記憶體7FF770935134的這個位址與7FF7709352B4,發現目前值都改變為設定的01 00 05 34(翻轉為34050001)



關於這個修改原理,以下是AI的說明:

要理解這個修改,我們得進入 PS2 的大腦——MIPS 處理器的運作邏輯。

簡單來說,原本的 0000282D 是一道**「判斷題」,而修改後的 34050001 則是直接給出了「標準答案」**。

1. 原本的指令:0000282D (判斷模式)
在 MIPS 機器碼中,0000282D 對應的彙編指令通常是:

move a1, v0 (或類似的寄存器傳送指令)

它的意義: 遊戲程式執行到這裡時,會去問系統:「嘿,這個選手能不能編輯?」

運作流程: 系統會把檢查結果(例如:0 代表不能改,1 代表能改)存放在一個名為 v0 的抽屜裡,然後這行指令會把 v0 的結果搬到 a1 這個抽屜,交給後面的選單程式去決定要顯示「可編輯」還是「隱藏」。

結果: 因為 WBC 選手在遊戲設定中是「禁止編輯」的,所以系統給出的答案永遠是 0,你的選單自然就是看不見「名前」、「音聲」這些選項的。

2. 修改後的指令:34050001 (強制模式)
修改後的 34050001 對應的彙編指令是:

ori a1, zero, $0001 (等同於 li a1, 1)

它的意義: 「不管系統說什麼,總之給我就對了。」

運作原理: 這行指令直接跳過了詢問系統的過程。它強行把 a1 這個抽屜填入數字 1。

結果: 當選單程式跑過來查看 a1 時,它看到的永遠是 1(代表允許編輯)。選單程式被「騙」了,以為這是一個普通可以編輯的選手,於是就把「名前」、「音聲」等選項跑出來給你用。

3. 為什麼有兩組位址? (20935134 與 209352B4)
這代表遊戲中有兩道不同的門檻:

第一組 (20935134): 通常負責解鎖 「選單進入權限」(可能是讓你能改到名字)。

第二組 (209352B4): 通常負責解鎖 「子功能權限」(例如讓你進去後能改音聲或背號)。

我們不是改了選手的資料,而是改了遊戲的**「法律規則」**。


不過,改完存檔後還是有個「疙瘩」在,有強迫症的應該會看編輯過的選手名字後方那個E很不順眼,欲除之而後快。

參考日文網站「改造ゲーム日記」這一篇
実況パワフルメジャーリーグ2009
エディットしてもE表示つかない
1CFD54C4 1456E7A5
*選手エディット中は表示されるよ
使用這個金手指,即使是編輯完再存檔,也不會留下E的記號,原本有E的也可以再編輯一次就消除掉。
(編輯過程的頁面那個E是無法消除的,如第一張圖的Fairchild,但最後不影響就好)


PCSX2的金手指碼為
patch=1,EE,206AD39C,word,00000000

使用Cheat Engine的「檢視記憶體」功能觀察記憶體7FF7706AD39C的這個位址,發現目前的值都為25 20 85 00(反轉為00852025)


加入金手指後,記憶體7FF7706AD39C的這個位址,發現目前值都改變為設定的00 00 00 00


在 MIPS 指令集與 PS2 記憶體結構中,這行代碼的運作原理可以從兩個層面來解釋:
1. 數值層面:Flag(旗標)的清除在《實況野球》的選手資料結構中,206AD39C 這個位址存放的是該選手的 「狀態位元(Status Bits)」。
原始值 00852025:這是一個 32-bit (Word) 的複合資料。其中某些位元(Bits)代表了不同的意義:某些位元代表:選手的增長類型。某些位元代表:是否為自創選手。
關鍵位元: 其中有一個特定的 Bit(通常是第 5 或第 6 位)就是 「E 標記(Edit Flag)」。

當你進入編輯器並按下「決定」時,遊戲程式會把這個位元從 0 改成 1。

修改後 00000000:你用金手指強行把這 32 位元全部「抹平」為 0。這包含了那個代表 E 的旗標,所以圖示消失了。
2. 指令層面:這原本是一行「運算指令」嗎?
如果我們把 00852025 當作 MIPS 機器碼(程式碼)來看,它的意義是:or a0, a0, a1 (將暫存器 a1 的值與 a0 做「或」運算,結果存回 a0)
為什麼會出現在這裡?在 PS2 遊戲中,記憶體通常分為 「程式區(Code)」 與 「資料區(Data)」:
如果這個位址在資料區:它只是選手的一個屬性數值。
如果這個位址在程式區:它是一行指令。
你將它清零,剛好把「E 標記」連同其他不痛不癢的顯示狀態一併抹除了。

運作原理總結
這行金手指的本質是 「記憶體覆蓋」。它像是在一張考卷的「是否有作弊」欄位上,用立可帶強制塗白。原本: 遊戲紀錄「該選手已編輯過(01)」。金手指: 每一秒鐘都去檢查那個格子,只要發現不是 0,就立刻把它擦掉寫成 0。結果: 遊戲繪圖引擎找不到「1」這個訊號,所以 E 記號就顯示不出來。

總之,這樣就可以在遊戲介面下痛快的編輯各個國家隊了!




沒有留言:

張貼留言