【PARコードの基礎】No.1 - 16進数と仮想アドレス

ゲームの改造コードについてまとめておきます。

ここではニンテンドーDSの改造コードを例に挙げて説明します。

PARコードとは?

PAR(Pro Action Replay)コードとは、

ゲーム機の仮想アドレスに格納されている値を書き換えるためのコードのことです。

で、この仮想アドレスに格納されている値を書き換えると何ができるのか?、というと

一瞬でレベルをカンストさせたり、所持金をMAXにしたりできるわけです。

では、PARコードの一例を見てみましょう。

02226084 0098967F

このコードは、ポケットモンスターBW2において所持金をMAXにするコードです。

空白で前半部分と後半部分に区切られているのが分かると思います。

前半部分の『02226084』は仮想アドレス

後半部分の『0098967F』は仮想アドレスに格納する値を表しています。

仮想アドレスについては後ほど解説します。

16進数

16進数とは、0~9までの数字とA~Fまでの記号を用いて数値を表現する方法のことです。

詳しくはここで説明すると長くなるので、リンク先の説明などで調べてみてください。

www.weblio.jp

PARコードはDSのものに限らず基本的に16進数で記述されます。

上で挙げたPARコードの一例を見てみましょう。

後半部分の『0098967F』に注目してください。

これはもちろん16進数で記述されているのですが、

これを10進数に変換すると、9999999になります。


9*16^5=9437184 \\
8*16^4=524288 \\
9*16^3=36864 \\
6*16^2=1536 \\
7*16^1=112 \\
15*16^0=15 \\
9437184+524288+36864+1536+112+15=9999999 \\

仮想アドレス

仮想アドレスとは、プログラムから見たメモリアドレスのことです。

ゲームをプレイ中に変化する数値(レベル、所持金、位置情報etc...)全てに仮想アドレスが割り振られており、

仮想アドレスの中身を書き換えることで、それに対応した数値を変化させることができます。


ちなみに、仮想アドレスはデータの格納場所を示すもの(住所的なもの)なので、

仮想アドレスの数値自体は変更しません。書き換えるのはあくまで仮想アドレスの中身です。


上で挙げたPARコードの例でいくと、

前半部分の『02226084』が仮想アドレスになるのですが、

このPARコードは所持金をMAXにするものでした。

つまり、この『02226084』という仮想アドレスは現在の所持金を格納している場所であり、

この仮想アドレスの数値を後半部分の『0098967F』という値(10進数で9999999)に書き換えることで

現在の所持金をMAXにすることができる、という仕組みになっています。

応用編

仕組みさえ分かってしまえばPARコードを改造することもできます。

元のPARコードは

02226084 0098967F

ですが、逆に所持金を0にしたければ

02226084 00000000

1000円にしたければ

02226084 000003E8

といった感じにPARコードをアレンジすることもできます。

16進数で1000を表すには3E8になるところは要注意。

まとめ

仮想アドレス
ゲーム内のデータを格納しておく場所の情報

PARコード前半部分
仮想アドレスを表す

PARコード後半部分
ゲーム内で書き換えたい数値