VisualBoyAdvance用コードの暗号化手順


先ず、ふぁおのぺえぢさんや当ページからGBAPAR数値変換プログラムをダウンロードして下さい。
ダウンロードしたファイルは圧縮されていますので、Lhasaやeoといった書庫解凍ソフトで解凍し、
その後、解凍してできたファイル、gbapar.exeをクリックしプログラムを起動させます。

すると、以下の画面が表示されますので、



アドレス部にVisualBoyAdvance用コードのアドレス、データ部にValue(値)を入力します。
ここではスーパーロボット大戦Aの所持金コードを例に挙げてみたいと思います。

※02000000 - 0098967F(このValueは16進、32bit表記。10進になおすと9999999)

ただし、VisualBoyAdvanceのアドレスに関し注意点があります。
Valueが8bit(00〜FF)のコードはそのまま02000000で大丈夫ですが、
16bit(00〜FFFF)のコードなら12000000、
32bit(00〜FFFFFFFF)のコードなら22000000というように、
状況に合わせてアドレスの先頭を変更しないといけません。

Size 10進数 16進数 暗号化前
8bit 0〜255 00〜FF 0yyyyyyy - xx
16bit 0〜65535 00〜FFFF 1yyyyyyy - xxxx
32bit 0〜4294967295 00〜FFFFFFFF 2yyyyyyy - xxxxxxxx

この結果、02000000 - 0098967Fというコードは22000000 - 0098967Fとなり、
GBAPAR数値変換プログラムで算出された、
5F0A2B86 0BE519CCがGBA用PARコードになります。





それでは実際にいろいろなコードを変換してみましょう。(以下は改造例)

なお、コードの中にはアドレスしか掲載されていないものもありますが、
この時は『好きな数値を入力して下さい』という意味ですので、
例えばアイテム変更系コードでしたらアイテムリストの数値を入力したり、
ステータス変更やアイテム個数系のコードでしたら、
HPやMPをいくつにしたいか?道具を何個持たせたいか?など、
これは人それぞれなので、ゲームに見合った(無理のない)数を入力して下さい。



例:ヒカルの碁 詰め碁100%

※ブルマンさんの投稿コードです。
詰め碁100% 0200B0A0 - 64

この場合、アドレスが0200B0A0、
Value(データ部に入力する数値)が64というのは分かると思います。
暗号化すると51A357EE F183F831になりますので、これがGBAPARコードとなります。

ちなみにValueの64という数値は10進数で100を表していますので、
100%を99%にしたければ63(10進:99)、10%にしたければ0A(10進:10)というように、
この部分には好きな数値を入力することができます。

例:マジカル封神 お金MAX

お金 【999999】 02008A30 - 3F
02008A31 - 42
02008A32 - 0F

一見すると、このコードは3行入力しないといけないように見えます。
もちろん1行ずつ暗号化してもGBAPARコードとしてご利用いただけますが、
入力が大変なので、せっかくですから3行のコードを1行にまとめてみましょう。

こういう複数行あるコードは先頭行が基本アドレスとなります。
02008A30 ←先頭行です

次にValue(データ部に入力する数値)なんですが、
ここにはその項目の最大値(【】内の数値)を16進数になおして入力してみて下さい。
0F423F ←999999(10進)を16進になおしたもの

コードをよく見ると、
一番下の行のValueから上に上がっていった数値が、0F、42、3Fとなっていますよね?
実はGBやGBAなど多くのゲーム機のコードがこのような書き方になっているので、
この法則は覚えておくと良いかもしれません。

上のことを踏まえて実際にコードに表すと、
02008A30 - 0F423F ←アドレス部 - Value(データ部)の形
というようになり、あとは暗号化すれば良いだけなんですが、
その前に気をつけていただきたいことがあります。

※GBAPARの仕様
Size 10進数 16進数 暗号化前
8bit 0〜255 00〜FF 0yyyyyyy - xx
16bit 0〜65535 00〜FFFF 1yyyyyyy - xxxx
32bit 0〜4294967295 00〜FFFFFFFF 2yyyyyyy - xxxxxxxx

この表の暗号化前という項目に着目して下さい。
Valueの桁数によって、アドレスの先頭が変化しているのが分かります。

0F423F(10進:999999)という数値は桁が6桁なので、
0yyyyyyy - xxでもなければ、1yyyyyyy - xxxxでもありません。
2yyyyyyy - xxxxxxxxにしか当てはまらないので、
この結果、02008A30 - 0F423Fというコードは22008A30 - 0F423Fとなり、
暗号化した7611FCAF 10216E4EがGBAPARコードになります。

例:バトルネットワーク ロックマンエグゼ2 戦闘後に手に入るチップの変更

※F.Mさんの投稿コードです。
戦闘後に手に入るチップ 0200EFFE 数値はデーターライブラリ順。

☆戦闘後に手に入るチップをクロスガンにしたい。

0200EFFE - 0006 ←リストを見るとクロスガンのValueは0006
これをGBAPARの仕様(Valueが4桁以上)にあわせると、
1200EFFE - 0006 ←16bitコードなら先頭を1に変更

よってコードは1200EFFE - 0006になり、暗号化するとEB74A442 C69F7F11になります。

例:ファイアーエムブレム 封印の剣 輸送隊のアイテム変更

※羽さんの投稿コードです。
輸送隊のアイテム 1個目 種類 02015D2A 入力後、輸送隊コマンドでアイテム交換を行って下さい。
輸送隊に不要なアイテムを預ければ、
預けたアイテムが希望のアイテムに変わっています。
個数 02015D2B

☆輸送隊アイテムの1個目をアンロック99個にしたい。

種類:02015D2A - 51 ←リストを見るとアンロックは51
個数:02015D2B - 63 ←99を16進にすると63
よって、このコードを暗号化すればGBAPARコードとなるわけです。
種類:3493E747 752A8832
個数:03B4EA0D AE31D685

また、覚えておくと非常に便利なのですが、
このようにコードのアドレスが連続しているものは
16bit(Valueはxxxx)で入力することができます。
(以下はゲームの改造に慣れてきたら挑戦してみて下さい)

0215D2A - 6351 ←Valueは下の行から先に入力(この場合は個数→種類の順)
これをGBAPARの仕様にあわせると、
1215D2A - 6351 ←16bitコードなら先頭を1に変更

よってコードは1215D2A - 6351になり、暗号化すると6580477F FDBBD4EEになります。
本来なら2行必要とするコードをこの方法で1行にまとめることができます。