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コードと同じですが、こちらは
アドレス1F8000001F8003FFのスクラッチ領域という
メモリデータを書き換えるコードです。

・D0コード(条件判定・2バイト)

<対応ツール>
PAR1,PAR2,PAR3,PAR-CDX,※X-T
<書式>
D0xxxxxx yyyy
<機能>
指定したアドレス(xxxxxx)のデータ値とyyyyの値が一致した場合のみ、
次の1行のコードが実行される、といった機能があります。
よって、単体で使用することはできません。
D0コードは80コードと同じく2バイトの値を取り扱っているため、
基本的に偶数アドレスに対してのみ、使用することができます。
(奇数アドレスを指定した場合は、大抵の改造ツールにおいて
偶数アドレスに補正される)
<使用例>
D0020000 0101
80010000 0002

この場合、アドレス80020000の2バイトの値が0101等しい時のみ
アドレス800100000002を書き込むといった処理を行います。
<注意事項>
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-TD0コードは、条件判定が成立すると
以下に続くすべてのコードが有効になってしまうため、
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ボタンが押された時のみ
アドレス800100000001を書き込み続けます。

・条件判定コードの重ね掛け

<対応ツール>
PAR2,PAR3,PAR-CDX(?)

条件判定系のコードは基本的に、
条件が成立したら次の1行を実行→成立しなかったら次の1行をスキップ
ですが、一部ツールでは条件判定系のコードを重ね掛けに対応しています。
これによって、より複雑な条件判断を行うことができます。
<使用例>
D0010000 0001
D1010002 0064
80020000 03E7

アドレス80010000の値が0001と等しく、かつ
アドレス80010002の値が0064(100)未満なら
アドレス8002000003E7を書き込み続けます。

・マスターコード

<対応ツール>
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

アドレス800100000000
アドレス800100020001
アドレス800100040002・・・
という感じで20回分(アドレス800100260013を書き込むまで)
繰り返して行います。
<参考>
(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を書き込み続けます

これだと00000063までの値を高速でループし続けるので
擬似的に乱数を発生させることもできるかと思います。

・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のアドレスに複写して
「常に体力最大」や
プレイ時間のデータを所持金や各種能力値などにに複写して
「時とともにパワーアップ」、
また、特定キャラステータスを他のキャラのアドレスに
まるまるコピーして全員同一人物にすることも一応、可能です。

なお、C0C1コードとは異なり、マスターコードではありません。



戻る