[心得] RXCM 武器FM轉換複製的原理

作者: Append (<( ̄︶ ̄)>)   2020-05-26 10:33:21
# 武器-FM轉換的原理
在#1M0UEvEr (Rockman) 我們有介紹過武器-FM的轉換,
大致上就是,FM列表有一百個欄位,
然而用手動整理可以發現底下多出了第101格,
而且這一格的內容隨著武器列表的第一格的內容,有一一對應的關係。
詳細的過程請參考上面那篇文章。
在這個過程中,玩家很容易會發現,空格是真的有意義的。
遊戲真的有記得道具欄有哪些格子是空的。
實際上去看記憶體,每個空格是用4個Byte,
FM的欄位總共是400個Byte的記憶體;
緊接著就是武器的欄位,相同的每個空格都是用4個Byte。
因此,FM的第101格,剛好就會指向武器欄的前4個Byte。
經過研究,GC版的儲存方式和PS2版有一些微妙的差異。
GC 物品種類 現有個數 已裝個數 00
PS2 物品種類 00 現有個數 已裝個數
# 武器複製的原理
如果你的FM欄位第一格是「雷防盾兩張」
而且目前身上「已經有人裝了一個雷防盾」
GC版中,記憶體的部份就會長的像 2F 02 01 00
2F是雷防盾
02是現在有兩張
01是已經有人裝了一張(所以你賣掉東西的時候這格子會顯示0,不會不見)
00目前沒看出來可以幹嘛 似乎不會變成其他數字
於是 當你如果試著要裝備上「其中一張雷防盾」
這四個byte就會變成 2F 01 02 00
可以看到第二格會-1 第三格會+1
如果現在身上是0個,那麼這個格子就會變成灰色,沒有辦法裝備。
如果把這格雷防盾手動整理移到第101格,
2F 01 02 00 的情況下,
那麼武器欄的第一格就會把2F當成艾克斯炮MK3;
01是現有1個,02是已經有裝備了兩個(雖然是假的)
選擇裝上武器,武器欄的第一格會變成 2F 00 03 00
這時候如果用FM選單把他移開,武器欄第一格就會是空的。
然後,用其他武器替換掉當前裝備的X炮MK3,
換下來的X炮MK3找不到現有的 2F xx 01 00 的格子 (因為剛才被我們搬走了)
這種時候遊戲的行為會選擇 "生出一個這樣的格子",
位置會是武器欄最上面的空位。
於是第一格武器會變成 2F 01 00 00
好,把它搬到第二格,把第一格空出來,
然後把剛才搬去FM列表那格搬到101格,也就是武器欄的第一格──
這樣武器欄記憶體應該會是
2F 00 03 00 (第一格)
2F 01 00 00 (第二格)
所以會分別顯示成「0個X炮MK3」和「1個X炮MK3」。
如果這時候想要裝上X炮MK3,第一格會是灰色的,但是第二格會是亮的。
選擇第二格裝上,他會讓 "同樣都是X炮MK3的格子都執行一樣的操作"
所以第二格會變成 2F 00 01 00,情況看起來很正常;
第一格原本是 2F 00 03 00,
第二個byte-1,第三個byte+1,所以他會變成 2F FF 04 00
也就是說,系統會判定第一格變成255個X炮MK3,這就是武器的複製。
除了武器的複製以外,FM的複製概念也是很接近的。
基本上也是透過"兩格重複的物品"的行為來複製。
# 修改相關
如果是用模擬器搭配Cheat Engine,理解資料之後可以簡單的直接搜尋 Array of Bytes
像是如果我知道FM的前三格分別是LE+100兩張、LE+300一張、WE+5三張,
都沒有人正在裝備中:
我就能夠預期他應該會對應到
GC版 01 02 00 00 02 01 00 00 05 03 00 00
PS2版 01 00 02 00 02 00 01 00 05 00 03 00
連續準備好8~16個byte的內容就比較有把握找到;
如果沒有把握「已經裝備了多少個」,那麼可以打??代替。
不過這邊有比較需要注意的是,
CheatEngine如果要搜尋Dolphin的記憶體,
需要去 Edit->Settings->Scan Settings 裡面勾選搜尋 MEM_MAPPED 區域。
最後,
哪個FM或哪個武器分別對應到什麼數值,
請參考列表 https://reurl.cc/D9Ydmd
列表中同時有附上一些PS2和GC專用的「無名FM」效果,會在下一篇中作介紹。

Links booklink

Contact Us: admin [ a t ] ucptt.com