Friday, May 4, 2012

「Playstation版ドラゴンクエストモンスターズ1・2 星降りの勇者と牧場の仲間た...

「Playstation版ドラゴンクエストモンスターズ1・2 星降りの勇者と牧場の仲間たち」のセーブデータ改造について、どなたかご教授お願いします。

改造について知識があるかたお願いします!

現在ふとした思いつきで昔プレイした「Playstation版ドラゴンクエストモンスターズ1・2 星降りの勇者と牧場の仲間たち」のセーブデータをバイナリエディタにて直接編集しています。

セーブデータの構造については下記のURLにあるものを参考にしています。

http://page.freett.com/seaside/analysis/dqm12.html



モンスターのHPやMPなどの基本的なパラメータ改造や、チェックサムについては問題ないのですが、

モンスターの所有特技についてと、所有アイテムの変更についてどうしても分かりません。



まずモンスター一匹目の所有特技は0x2270-0x2274までの5バイトで、8つの特技を表します。

つまり一つの特技に5bit使用するのですが、どう分割しても期待する値を得ることができません。(具体例は後ほど)



例えばあるモンスターが血統継承特技1(0x09),血統継承特技2(0x0A),血統継承特技3(0x0B)を持っていた場合、

セーブデータ上では

0x49 AD FF FF FF

という5バイト分の特技データで表されているのですが、

このデータからどうやって0x09 0A 0B 1F 1F 1F 1F 1Fという8つのデータを得るのか全く分からないという状況です。



単純に40bitの2進数に変換し、5bitずつ分けてみると

01001 00110 10110 11111 11111 11111 11111 11111

= 0x09 06 16 1F 1F 1F 1F 1F

という結果になり、最初の特技はきちんと表されるのですが残りの特技が全く違う物を表すことになってしまいます。



またアイテムについても同様で、0x2157番地から下位7bit固定で所有アイテムが並んでいることは分かるのですが、

どう分割しても期待する値を得ることができません。

例えば画像のようにキメラの翼(0x29)を6個だけ所持したときのセーブデータは0x2157番地から次のようになります。

0xA9 54 2A 95 4A 01 00 00 0....



最初のアイテムだけは下位7ビットを見ることで0x29を取り出すことができますが、以降のデータから

0x29というデータをどうやって取り出せばいいのか全く分かりません。



バイトオーダーがリトルエンディアンになっているからか?それともビット列を逆にするのか?などあらゆる可能性を

考え試してみましたが、自分の能力では無理だと悟りました。





どなたか頭の良い方、この謎を解いてご教授下さい。お願いします。







バイトを逆順に並べ、下位から取り出せばよさそうです。

49 AD FF FF

FF FF AD 49 並べ替え

11111111 11111111 10101101 01001001 2進数

11 11111 11111 11111 01011 01010 01001 下位から5ビットづつ

… 1F 1F 1F 0B 0A 09 16進



アイテムも同様

No comments:

Post a Comment