mixiユーザー(id:67686861)

2023年06月14日00:00

443 view

T-DRAGON QUESTで大金持ち

X68000エミュレータのXM6 TypeGでT-DRAGON QUESTも動いたし、
ちょっと始めて見たらちょっと面白そう。

社会人で時間がない俺は昔のように時間を投入できない。
社会人になってからのRPGはチートが基本。
経験値のチートはゲームがつまらなくなるのは知っているので金MAX。
金MAXチートは何回かやっているけど、サクサク進むし丁度いい。
経験値MAXは死ななくなるので、戦闘がダルいだけになる。
最後にこのチートをやったのはドラクエ8だったな。PS2なのでPARが使えた。

さて手法を探る。
1つはどこでもセーブのデータを解析する方法。
次いでフロッピーディスクイメージであるXDFを解析する方法。
そしてXDF内のセーブファイルをを解析する方法。
解析するなら容量は小さいほうがいいのでセーブファイルをを解析することにした。
T-DRAGON QUESTはフロッピー上で動作しセーブはフロッピーディスク上のファイルに保存される。
エミュレータ上ではフロッピーはXDF形式のファイルがマウントされることで動作する。
まずはXDF形式のファイルから中身のファイルを取り出す方法を調査する。
どうもDiskExplorerなるもので閲覧・抽出が出来る模様だ。
https://hp.vector.co.jp/authors/VA013937/editdisk/index.html
T-DRAGON QUESTのXDF内の中身を見たのが画像1。
セーブデータがどれかは一発でわかる。TDQ_DATA.DATだ。
1990年代のファイルが並ぶ中、こいつだけが2023年のファイルだ。
っていうか、X68000って2000年問題なかったんだな。

こいつを右クリックしてホストOSのWindowsマシンに取り出すことが出来る。
取り出したらいつものようにバイナリエディタで分析・改変。
アドレスの0x283に金の値らしい数値を見つける。
68000CPUは二進化十進数を扱えるのでデータ形式は注意。
昔メガドラエミュではメモリ内の数値が二進化十進数であらわされていることがあった。
今回、結果としては16進数であることを前提に進める。。
0x283の前の3バイトが0で埋まっている。
68000CPUはビッグエンディアンなので十分あり得る話。
金の値が1バイトなわけがない。2バイトで扱っている?
しかし、2バイトでは最大でも65535までしか扱えない。
16bitマシンで時代的にちょっと考えられないので4バイトの可能性がある。

調子に乗って上げすぎるとスーパーマリオの無限1UPのように残機がなくなる。
あれはオーバーフローしてマイナス値なってゲームオーバーになっているハズ。
今回は金なのでマイナス値はないと思うけどオーバーフロー対策として
余裕を持った値である16進数での0x7FFFFFFFにする。
10進数で2147483647。21億ゴールド。ま、余裕でしょ。

チートしてステータスを表示したのが画像3。
経験値0のレベル1で金は多すぎて"たくさん"に。
表示しきれないせいだと思う。多分表示できるのは99999ゴールドまでと思う。
うむ、二進化十進数ではなくて16進数でよかったんだな。
でも数値が大きくなると"たくさん"とか表示されるんだな。
知らなかった。よくできている。

++++++++++++++++++++++++++++++++++++++++++++
2023/06/15 後記
0xFFFFFFFFにすると表示は?になる。
ここで追加のゴールドを取得するとオーバーフローする。
例えばこの状態で新たに10ゴールド取得すると所持ゴールドは9になる。
よって金MAXとして設定値は0x7FFFFFFFが最適と思われる。

1 2

コメント

mixiユーザー

ログインしてコメントを確認・投稿する