PARコード解説
最近の改造ツールは改造コードの種類が多くて
どれが何の機能を持っているかが把握しにくい状況なのですが、
実は知っておくとわざわざ改造コードをサーチしなくとも
手間が省けたりいろいろとカスタマイズすることができるケースがあります。
特に改造コードを少しでも使いこなしたいという方は必読です。
※対応ツールについて
PAR1:プロアクションリプレイまたはその互換品
PAR2:プロアクションリプレイ2・攻略ナビゲーター・攻略ナビゲーターライト
PAR2Ver2.3以降:攻略ナビゲーター・攻略ナビゲーターライト
PAR3:プロアクションリプレイ3
PAR-CDX:プロアクションリプレイCDX
X-T:PS Xターミネーター・Xターミネーター2・XターミネーターProDX
・30コード(1バイト書き換え)
<対応ツール>
PAR1,PAR2,PAR3,PAR-CDX,X-T
<書式>
30xxxxxx 00yy
<機能>
指定したアドレス(xxxxxx)に1バイトの数値(yy)を書き込み続けます。
1バイト分を書き込むということで、
データ部分に0100以上を指定した場合、上2桁は無効になります。
例えば、
30010000 1234
と入力しても、実際は
30010000 0034
(→アドレス80010000に0034の値を1バイト分書き込む)
と同じ動作をするということになります。
SFCの「7E」で始まるコードやGBのコードは
PSでいう30コードに相当します。
一つ注意点を挙げるとすれば、
メモリエディット画面で30コードを入力する場合でも、
80xxxxxxというアドレスに入力するという点です。
アドレス部分の上2桁は改造コードの種類・働きを識別するためのもので、
実際は80000000+アドレス部分の下6桁が実際に書き込むアドレス、
ということになります。
・80コード(2バイト書き換え)
<対応ツール>
PAR1,PAR2,PAR3,PAR-CDX,X-T
<書式>
80xxxxxx yyyy
<機能>
指定したアドレス(xxxxxx)に2バイトの数値(yyyy)を書き込み続けます。
80コードは30コード2つに変換することができます。
例えば
80010000 1234
というコードは、
アドレス80010000に0034を書き込み、
アドレス80010001に0012を書き込む動作をしているので、
30010000 0034
30010001 0012
と変換できます。
ただ、80コードは偶数アドレス(アドレスの末尾が0,2,4,6,8,A,C,E)にしか
使用することができないため、奇数アドレスの場合は上記の
30コード2つに分割する方法をとる必要がでてきます。
ちなみに、80コードで奇数アドレスを指定した場合、
改造ツールによっては30コードに自動変換されたり
偶数アドレスに補正されるものもありますが、
そうでない機種の場合はハング(ゲーム画面が止まる)してしまいます。
・1Fコード(1バイト書き換え)
<対応ツール>
PAR2Ver2.3以降,PAR3,PAR-CDX
<書式>
1F800xxx 00yy
<機能>
指定したアドレス(xxx)に1バイトの数値(yy)を書き込み続けます。
機能は30コードと同じですが、こちらは
アドレス1F800000〜1F8003FFのスクラッチ領域という
メモリデータを書き換えるコードです。
・D0コード(条件判定・2バイト)
<対応ツール>
※PAR1,PAR2,PAR3,PAR-CDX,※X-T
<書式>
D0xxxxxx yyyy
<機能>
指定したアドレス(xxxxxx)のデータ値とyyyyの値が一致した場合のみ、
次の1行のコードが実行される、といった機能があります。
よって、単体で使用することはできません。
D0コードは80コードと同じく2バイトの値を取り扱っているため、
基本的に偶数アドレスに対してのみ、使用することができます。
(奇数アドレスを指定した場合は、大抵の改造ツールにおいて
偶数アドレスに補正される)
<使用例>
D0020000 0101
80010000 0002
この場合、アドレス80020000の2バイトの値が0101と等しい時のみ
アドレス80010000に0002を書き込むといった処理を行います。
<注意事項>
●PAR1の場合
D0コードのデータ部分が8000未満でないと
正常に動作しないようです。
ただしアドレスの末尾が2,6,A,Eの場合は、C0コードで
代用することができます。
(書式:C0xxxxxx yyyy)
アドレスの末尾が0,4,8,C、データ部分8000未満:○
アドレスの末尾が2,6,A,E、データ部分8000未満:○
アドレスの末尾が0,4,8,C、データ部分8000以上:×
アドレスの末尾が2,6,A,E、データ部分8000以上:○※
※アドレス部分の先頭をD0からC0に変更すれば動作する
●X-Tの場合
X-TのD0コードは、条件判定が成立すると
以下に続くすべてのコードが有効になってしまうため、
PAR用のD0コードとして使用すると問題が発生する可能性があります。
X-Tでは70コードがPAR用のD0コードと同じ役割を持っているので
すべてのD0コードにおいて、アドレス部分の先頭を
D0から70に変換することをお勧めします。
(書式:70xxxxxx yyyy)
・E0コード(条件判定・1バイト)
<対応ツール>
PAR2,PAR3
<書式>
E0xxxxxx 00yy
<機能>
上記のD0コードと同じく、
指定したアドレス(xxxxxx)のデータ値とyyの値が一致した場合のみ、
次の1行のコードが実行されますが、
こちらは1バイト単位で値を比較します。
アドレス部の末尾が偶数・奇数どちらでも指定できます。
<使用例>
E0020000 0001
80010000 0002
これで、80020000の1バイトの値が0001と等しい時のみ
アドレス800100000002を書き込みさせることになります。
・D1,D2,D3,E1,E2,E3コード(条件判定・その他)
<対応ツール>
PAR2,PAR3,※X-T
<書式>
D1xxxxxx yyyy
D2xxxxxx yyyy
D3xxxxxx yyyy
E1xxxxxx 00yy
E2xxxxxx 00yy
E3xxxxxx 00yy
<機能>
指定したアドレス(xxxxxx)のデータ値が、
(D1,E1の場合)yyyyの値と等しくなければ
(D2,E2の場合)yyyyの値未満ならば
(D3,E3の場合)yyyyの値以上ならば
次の1行のコードが実行されます。
なお、
D1,D2,D3は2バイト単位(奇数アドレスは指定不可)、
E1,E2,E3は1バイト単位(奇数アドレス指定可能)で比較します。
<注意事項>
●X-Tの場合
X-TではD1コードに対応する90コードのみ使用できます
(書式:90xxxxxx yyyy)
・D4コード(キー条件判定・2バイト)
<対応ツール>
PAR3
<書式>
D4000000 yyyy
<機能>
コントローラから特定のボタン入力があった時に
次の1行の改造コードが有効になります。
D0コードで実現する場合はゲームタイトル毎に
キー判定アドレスなるものの特定が必要でしたが
D4コードはどのゲームタイトルでも流用できるので便利です。
yyyyに対応する値は
L2 |
+0001h |
R2 |
+0002h |
L1 |
+0004h |
R1 |
+0008h |
△ |
+0010h |
○ |
+0020h |
× |
+0040h |
□ |
+0080h |
START |
+0100h |
|
|
|
|
SELECT |
+0800h |
↑ |
+1000h |
→ |
+2000h |
↓ |
+4000h |
← |
+8000h |
で、複数のボタンを組み合わせることも可能です。
<使用例>
D4000000 0801
80010000 0001
コントローラからSELECT+L2ボタンが押された時のみ
アドレス80010000に0001を書き込み続けます。
・条件判定コードの重ね掛け
<対応ツール>
PAR2,PAR3,PAR-CDX(?)
条件判定系のコードは基本的に、
条件が成立したら次の1行を実行→成立しなかったら次の1行をスキップ
ですが、一部ツールでは条件判定系のコードを重ね掛けに対応しています。
これによって、より複雑な条件判断を行うことができます。
<使用例>
D0010000 0001
D1010002 0064
80020000 03E7
アドレス80010000の値が0001と等しく、かつ
アドレス80010002の値が0064(100)未満なら
アドレス80020000に03E7を書き込み続けます。
・マスターコード
<対応ツール>
PAR1,PAR2,PAR3,PAR-CDX,X-T
<書式>
D0xxxxxx yyyy (PAR1,PAR2)
C0xxxxxx yyyy (PAR3,PAR-CDX)
F0xxxxxx yyyy (X-T)
<機能>
指定したアドレス(xxxxxx)のデータ値とyyyyの値が一致した場合のみ
選択した全てのコードが有効になります。
2バイト単位で比較しているため、xxxxxxには偶数アドレスのみ指定できます。
なお、1バイト単位で比較するマスターコードは現段階では存在しません。
<注意事項>
●PAR1,PAR2の場合
D0コードですが、マスターコードの入力欄に1行だけ入力します。
●PAR3,PAR-CDXの場合
マスターコードの項目がないため、
「マスターコード」というコード名を新規登録し、
そこにC0コードを1行だけ入力します。
以後、任意のコードを選択した時にマスターコードも一緒に
選択状態になります。
●X-Tの場合
こちらも「マスターコード」のコード名を新規登録し
そこにF0コードを1行だけ入力します。
・タイマーマスターコード
<対応ツール>
PAR3,PAR-CDX
<書式>
C1000000 yyyy
<機能>
ゲームが起動してからyyyyカウントが経過後に
選択した全てのコードが有効になります。
改造コードをONにしているとオープニング画面で
止まってしまう時などに有効です。
特にPAR-CDXではゲーム中のコードのON・OFFの
切り替えができないため必須ともいえそうです。
これもマスターコードのコード名を新規登録し、
そこに1行だけ入力するようにします。
・50コード(シリアルコード)
<対応ツール>
PAR2,PAR3,※X-T
<書式>
5000zzvv wwww
80xxxxxx yyyy
または
5000zzvv wwww
30xxxxxx 00yy
<機能>
指定したアドレス(xxxxxx)に1バイトもしくは2バイトの数値(yyyy)を
アドレス部にvv、データ部にwwwwずつ加算しながら
zz回反復して書き込みます。
このコードは2行で1組です。
<使用例>
50001402 0001
80010000 0000
アドレス80010000に0000
アドレス80010002に0001
アドレス80010004に0002・・・
という感じで20回分(アドレス80010026に0013を書き込むまで)
繰り返して行います。
<参考>
(a)
80010000 6363から
800100FE 6363まで
アドレス+2hずつ
(b)
1人目体力
80020000 03E7
2人目以降はアドレス+78hずつ、8人目まで
などという記述を見かけたら
(a)
50007F02 0000
80010000 6363
(b)
50000878 0000
80020000 03E7
と、シリアルコードに変換すると大変便利です。
<注意事項>
●X-Tの場合
X-Tのシリアルコードは少々書式が異なり、
Bzzzvvvv wwww
10xxxxxx yyyy
となっています。
PAR用のものと比べて反復回数や加算アドレス値に
大きい値が指定できるメリットがありますが、
(反復回数はFFh(255)回でも安定して動作しないのであまり意味がないですが・・・)
2バイト書き換え専用なのが難点でしょうか。
●反復回数
反復回数にあまり大きい値を指定するとゲーム自体が
起動しないなどの不具合が起こることがあります。
この場合は、シリアルコードを複数に分割するとうまくいくようです。
だいたい80h(128)回を目安として下さい。
例:
5000FF02 0000
80010000 0000
なら
50008002 0000
80010000 0000
50007F02 0000
80010100 0000
など
・10コード,11コード(プラス、マイナスコード)
<対応ツール>
PAR2,PAR3
<書式>
10xxxxxx yyyy(プラスコード)
11xxxxxx yyyy(マイナスコード)
<機能>
指定したアドレス(xxxxxx)のデータ値にyyyyを
(10の場合)加算
(11の場合)減算
し続けます。
加減算は2バイト単位で行われているので例によって偶数アドレス専用です。
このコードは単体で使用すると延々と加算・減算が続いてしまうため、
条件判定系(とくにキー判定)のコードと併用すると効果的です。
<使用例1>
D0010000 0001
10020000 0001
アドレス80010000のデータ値が0001と等しければ
アドレス80020000のデータ値に0001を加算し続けます
<使用例2>
10010000 0001
D0010000 0064
80010000 0000
アドレス80010000のデータ値に0001を加算し、
その値が0064(100)だったら0000を書き込み続けます
これだと0000〜0063までの値を高速でループし続けるので
擬似的に乱数を発生させることもできるかと思います。
・20コード,21コード(プラス、マイナスコード)
<対応ツール>
PAR2Ver2.3以降,PAR3
<書式>
20xxxxxx 00yy(プラスコード)
21xxxxxx 00yy(マイナスコード)
<機能>
指定したアドレス(xxxxxx)のデータ値にyyを
(20の場合)加算
(21の場合)減算
し続けます。
加減算は1バイト単位で行います。(奇数アドレス可能)
・C2コード(バイトコピーコード)
<対応ツール>
PAR3
<書式>
C2xxxxxx yyyy
80zzzzzz 0000
<機能>
指定したアドレス(xxxxxx)からyyyyバイト分のデータを
アドレス80zzzzzzに書き込み続けます。
このコードは2行で1組です。
使用例としては、
最大HPのデータを現在HPのアドレスに複写して
「常に体力最大」や
プレイ時間のデータを所持金や各種能力値などにに複写して
「時とともにパワーアップ」、
また、特定キャラステータスを他のキャラのアドレスに
まるまるコピーして全員同一人物にすることも一応、可能です。
なお、C0・C1コードとは異なり、マスターコードではありません。