打印

[交流] GBA模擬器修改PM資料

GBA模擬器修改PM資料

首先得說明數點:

1.在下以下所說明的是原理,可不是鼓勵別人玩模擬器,請盡量支持正版。
2.部份內容涉及基本電腦用語。
3.實際操作可能有所出入,注意。

好了,這次要說的是如何利用模擬器來修改PM的資料。網上關於PM的金手指雖然多,但是我想不少玩家都絕不是希望「製造」一隻PM,很多時只是希望改一改一些不順眼的地方(例如個體值太低,努力值取向問題‥‥),因此個人決定說明一下PM的遊戲數據。

首先,請把要看的PM放在隊伍第一名,其餘的通通放進電腦,目的是方便看數據。接著,如果是用VisualBoy Advance的話,在Tool的一欄之中有一處名為Memory Viewer,請選擇此項。

接著,請根據版本輸入以下的地址:
紅寶石:0x03004360
藍寶石:0x03004360
綠寶石:0x02024190 (美版為:0x020244EC)
火紅:0x02024284
葉綠:0x020241e4

到達後會看到一大堆不知所謂的東西,容在下慢慢解釋:




首先,圖中會看到有一紅線分開了數據,如果夠細心的話,便會發現紅線下面的數據就是在下的神寶的數值(但以16進制表示)。這些數據就是玩家平日看到的攻擊、體力之類(還包括現時神寶狀態)。但玩家可不要以為要提升神寶實力,只要改掉這些數據便成。因為這些數值是計算的結果,一旦神寶放進電腦,這些數值便會消失。日後再拿出來時會重新計算,故除非玩家永遠不把神寶放進電腦,否則這止修改都是暫時性的。

那麼如何永久性的修改呢?這就得回想紅線上的數值了。紅線上的數值有五行,首兩行的排序是每隻神寶均同的,而下面三行則因獸而異,故先說上面兩行。

好了,接下來電腦常識的時間:

1 byte = 8bit , 1bit就是二進制的一個位。

如數值18,二進制下就會變成10010(bin) = 1x16 + 0x8 + 0x4 + 1x2 + 0x1 =18(dec) = 5個BIT。
而在16進制下:1個位就代表了4BIT,以上面為例:10010 = 0001 0010 = 1 2(hex)/ 0x12。

註:16進制下,10會變成A,11變成B,如此類推。

也就是說,16進制下,2個位就是1 byte,1byte的範圍是由0-255(2進制是沒有負號的。),有了這些基本常識就可以繼續說下去:



第一行為D3 21 D4 ED 23 D4‥‥
其中,D3是一個byte,21是另一個byte,如此類推。

在電腦之中,數據的排列並不是如此容易看的。舉例:神寶的首4個byte是個人值。依圖來看,數值應該是D3 21 D4 ED。如果玩家這樣想,便大錯特錯了!因為數據的排列是依據小印第安排列法的(Little Indian),也就是說:真正的數值並不是D3 21 D4 ED,而是ED D4 21 D3才對!要是不注意這些地方可是看不懂的啊。

接下來數據的分佈大致如下:
              byte數目  開始位址(由開始往後移多少個byte)
個人值                4              0
原訓練家的ID     4              4
別名                10               8
文字類別         1              18
精神健全值?         1              19
原訓練家的名字         7            20
標記                 1                  27
Checksum         2              28
????                 2              30

文字類別指的大抵就是大、細階之類的東西。而標記則是放在電腦時會看到的三角、正方,用來協助整理神寶。

首兩行的資料就是這樣。(註:1行有16個byte),其中,粗體的字表示這些數值跟下面三行有關,最好便別亂改。而這兩行的數值基本上沒多大實用性,玩家若只是對招式、個體值之類有興趣的,便要看下面三行。



下面三行可說是神寶的精華 (開始為:E9 F5 97‥‥‥),內堸O下了四大類數據,每類12個byte:

1.成長類
              byte數目  開始位址(由開始往後移多少個byte)
品種                 2         0
手持物品         2         2
經驗                 4         4
PP 加成            1         8   註:PP加成指的就是吃了多少個增加PP上限的藥。   
親密度           1         9
???                 2         10

2.招式類
招式 1          2          0
招式 2          2         2
招式 3          2         4
招式 4          2         6
PP 1          1         8
PP 2          1         9
PP 3          1         10
PP 4          1         11

3.後天加成類
HP努力值          1          0
攻擊努力值         1         1
防禦努力值         1         2
速度努力值         1         3
特攻努力值         1         4
特防努力值         1         5
帥氣度                 1         6
美麗度                 1         7
可愛度                 1         8
醒目度                 1         9
硬朗度                 1         10
滑度                  1         11

4.個體類
身體狀態          1          0   註:這兒說的是有沒有生寄生菌。
捕獲地點         1         1
捕獲等級         1         2    註:首一個bit固定為0。
訓練家性別/用的神寶球 1         3    首一個bit為性別,後4個則為神寶球。
個體值                4         4    4個byte=32bit,每5個bit代表一項個體值,首2個bit代表是可為蛋及有沒有別名。
鍛帶                 4         8


好了,現在最大的問題來了,明明表是這樣寫,但為何看上去卻完全不像的呢?原因很簡單:
1.數據被加密。
2.以上四大類數據的排列不固定。

先說說如何找次序好了,最簡單的方法自然是故意增減其中一項數值(如不斷加努力值),看看那個值有變化。這雖然有效,但是數據被加密這問題又如何解決?原來,數據是根據以下的方法加密的:

1.第一行的個人值跟訓練家ID不是各有4個byte嗎?只要用電腦內置計算機當中的XOR功能把兩者「XOR」掉,便可以得到一組4個byte的數字,而這組4個byte的數字再一次「XOR」掉目標就可以知道原本未加密的數值。解密後若再「XOR」一次則為加密。

註:這次的「XOR」也是要4個4個進行的,不能只拿1個byte出來,如果想看第3行第15個byte的真正值,便需要連同13、14、16都一起解密掉。

聽來容易,但是事實上卻很容易出錯。為了保險,個人建議先用個人值mod 24(十進制)來看看結果,因為這結果是影響四大類數據的排列的,若兩者有異即表示出錯了:

00. 1234          06. 2134          12. 3124          18. 4123
01. 1243         07. 2143         13. 3142         19. 4132
02. 1324         08. 2314         14. 3214         20. 4213
03. 1342         09. 2341         15. 3241         21. 4231
04. 1423         10. 2413         16. 3412         22. 4312
05. 1432         11. 2431         17. 3421         23. 4321

1234代表上面的四大類。

好了,目標找到了,也找到要改變成甚麼了,完事了嗎?才不呢!首先請把要改變的數值加密一次(填下去時就是填這個),其次,在改動前把未修改且未加密的那組數字抄一次。因為之前曾提及過第二行有一名為Checksum的數值,這數值會根據下面3行的數值而變化,若兩者不合,神寶就會變成bad egg狀態不能使用。因此玩家除了要改目標值外,還要改掉Checksum的數值才能成功過關。

要知道新的Checksum是甚麼有點麻煩,因為要把下面3行,以2個byte為1組,全部加起來(而且用的還需要是已解密的數值)。這表示要是玩家之前沒抄下資料,便要所有數據都解一次及加起來!有抄下的便好一點,只要把未修改的數值跟已修改的數值減一下,再加進Checksum便成(如發生4個byte裝不下的情況則只把最大的那個位刪除掉)。

最後也是最重要的工作,就是測試了。如果成功修改的話,神寶們自然不會變成bad egg。但是有些變化卻不是立即的,玩家需要把神寶放進電腦再拿出來才能確定是否成功修改,希望大家看過後對神寶的資料會有所了解。

p.s.:以上的資料當然不是在下自行研究的了,reference:
http://bulbapedia.bulbagarden.ne ... tructure_in_the_GBA
http://bulbapedia.bulbagarden.ne ... ructures_in_the_GBA

[ 本帖最後由 Chomp 於 2009-8-30 21:13 編輯 ]
附件: 您所在的用戶組無法下載或查看附件
本帖最近評分記錄
  • 路人 好評度 +1 辛苦你了...... 2009-8-29 17:41
  • wmfchris 好評度 +1 我試過了...成功! XD 2009-8-28 21:10
  • べ軒ぺ 好評度 +1 太強了... 2009-8-28 18:54
  • 喔~~耶 好評度 +1 感謝提供遊戲...攻略? 2009-8-28 12:22

TOP

其實我看不懂=_=

1)精神健全值是什麼?
2)(說起來真慚愧...我還是第一次聽到個人值這種東西)如果要改變性別、性格、特性等資料,是不是要改個人值?
3)招式、物品、捕獲地點等自己本身不是數值吧...如何得到自己想要的東西?
4)能不能學習該PM本身不能學習的招式?
5)其實由XOR到1234那個部分我看不明白...
6)上兩行及下三行都有"???"...那到底是?

事實上我對修改興趣不大,只是純粹想問問而已
Quiet days...
但還是歡迎大家去茶坊(聊天留言版)!

問問題專區的路人數學特別版!!

Beginning 2020
對於2020,我想到的是……Hindsight in 20/20

TOP

1.關於精神健全值的問題,事實上連我也沒試過(遊戲/reference中也沒有相關的資料),由於要改資料要做的工程很大,故在下沒有嘗試,把此當成一個謎之byte好了。

2.而個人值所含的資料是非常豐富的,包括神寶的性別,個性,還有特別的spinda(好像是叫晃晃斑)的圖案,未知圖騰的形狀等。因此,幾乎每隻神寶的值都不同,算是資料大集合。

3.如果要得到自己希望要的東西,最好效的方法就是先找一個樣板(就是一隻有希望得到的資料的神寶),例如要把招式改成地震,最好便先找一隻懂地震的神寶。另一方面,網上不少修改碼也有提及招式的相應十六進制數值,可以參考。

4.理論上是沒有問題的。但是這樣做最好同時改掉有關招式的PP,免掉在別處發生bug。

5.XOR本身是一種logic gate,效果很簡單,用truth table表示的話便是如此:

輸入1   輸入2 結果
  正       正      錯
  錯       錯      錯
  正       錯      正
  錯       正      正

而在文章中,運用XOR的目的就是為了把資料加密以防被輕易改動,例如資料原本為1000,個人值為1100,那麼顯示出來的值就會變成0100。不太明白的便把此當成一雒加密的手段好了。

至於1234那段,事實上每一隻神寶的招式/後天加成/個體還有成長類的次序都是不一樣的。有時會是招式/後天加成/個體/成長,有時可以是個體/後天加成/成長/招式。目的應該也是為了增加解密的難度。但事實上次序的先後是有固定公式,此公式為個人值mod24(mod的意思是個人值/24,但結果則是其餘數而非商。)

6.???的意思主要是指用途不明的byte,由於神寶遊戲內部本身隱藏著不少玩家不知道的數值,故這些數值有可能影響著一些玩家看不到的神寶數據(事實上解碼時時都會遇到謎用途的byte,這可以是dummy variable,也可以是用來reserved使下一代的神寶的數據格式跟本代一致)。

順帶一提,如果要修改道具數量的,必須在pc中進行,袋中的道具的address可是會浮動,讓人找不到真正應該改變的位址的。

TOP

Processed in 0.128576 second(s), 8 queries, Gzip enabled.|DEISGNED BY LINSTYLE