夢想メモリ

ゲームの攻略、データ、感想、縛りプレイのこと等を中心に、ゲームとは無関係の雑記も書きます。

VisualBoyAdvance-Mで使えるGB,GBCのGameSharkコードの作り方

GameSharkコードでは指定したメモリアドレスの値を指定した値に固定することができ、 値の改竄などの簡単なチートを行うことができる。

目的のメモリアドレスを探す

まず、Tools > Cheats > Find cheatから、 メモリアドレスを知りたいもの(お金とかステータスとか)の現在の値を Search value下のボックスに入力してSearchを押して検索する。

入力する値はSigned/Unsignedの項目でHexadecimalを選ぶと16進数で指定できる。 この指定にしないとA~Fが入力できない。 Signedは符号付10進数、Unsignedは符号なし10進数らしいが、使ったことがない。 ところで、私の環境だと1~6が入力できなかったのだが、テンキーや貼り付けなら入力できた。 デフォルトのショートカットに割り当てられているからだろうか。

Data sizeは何ビット区切りで検索するかを指定できる。最大値が255になるものなら必ず8bitsを選択。 最大値がもっと大きいものでも、下位1バイトだけを指定して8bitsで検索した方が良いかも知れない。 2バイトのデータを16bitsで検索しても、奇数アドレスから始まる場合、結果に出て来ない。

結果が出たらOKを押してCheat Searchのウィンドウを閉じ、 ゲーム内で起こせる通常の処理でその値を変化させる。 次に再びCheat Searchを開き、New Valueが変化後の値と一致しているものがあれば、そのメモリアドレスが目的のデータを格納しているアドレスと考えられる。 基本的に、メモリアドレスを探したい値は、16進数表記で大きな数字になるようにしておくと候補が少なくなりやすいと思う。 候補が膨大な場合、条件を入力してSearchで絞れる。OKを押して閉じてまたゲーム内の処理で値を変えて絞っていくことも可能。 逆に新しいメモリアドレスを探す時は一度Clearを押さないと、 表示されている結果の中から検索することになってしまうので注意。

あとは得たメモリアドレスに格納されている値を書き換え、 実際にゲーム内で効果が表れるかを見て確認する。

メモリアドレスを探す場合には、既に公開されているチートコードが参考になることもある。 下記項目を参照。

GameSharkコードでメモリの値を書き換える

GB,GBCのGameSharkコードは8桁の16進数で表される。 これをttvvaaaaとおく。

ttで表した最初の2桁がコードのタイプ。値を書き換えて固定するのは01。 vvは書き換え後の値。 aaaaはアドレス。ただし前と後の1バイトを入れ替える。 例えば、メモリアドレスB6C5の値をFE(254)で固定したかったら01FEC5B6と書く。

下位2桁がメモリアドレスであることが分かっていると、いくつかチートコードが公開されているゲームの場合、 そのコードが指定するメモリアドレスから、 関係する値があるメモリアドレスも推測できることがある(例えば攻撃力の1バイト後が防御力だったなど)。

コードを追加するには、Tools > Cheats > List cheatsから緑のアイコンを選び、 TypeをGameSharkにして、Codesの所にこの8桁の16進数だけを入力してOKを押して閉じれば良い。 最後にTools > Cheats > Enable cheatsにチェックを入れれば機能する。

私の環境だけかも知れないが、Memory Viewerで直接書き換えようとしても上手く行かないことがあるので、 改竄したい値のメモリアドレスについて確証が無いテスト段階でも私はこの方法を使っている。