キー判定アドレス



・キー判定アドレスとは

コントローラーのどのボタンが押されているのかという
状態を保持しているアドレスで、
これを参照することでゲーム内のキャラクターが
プレイヤーのコントローラーのキー操作に応じて
動作を起こすことがができるわけです。

・主な利用法

通常、改造コードはゲームが起動してから常に実行されっぱなしなので
場面によって改造コードのON・OFFを切り替えたい場面などで
使用します。

例えば、ジャンプ中のみ空中浮遊できるようにしたい
(常に空中浮遊していると先に進めない!)
場合などです。

・入力の仕方

キー判定アドレスなので80xxxxxx yyyyと表記されていますが、
これは条件判定コード(D0コード)として利用します。
よって、まずはアドレス部の先頭2桁を

80xxxxxx yyyyD0xxxxxx yyyy

に直します。
(D0コードに直したものをキー判定コードと言う場合もあります)

次にyyyyに対応するデータ値を決めるのですが、
これのボタン対応は

+形式のキー対応表
初期値 0000h
L2 +0001h R2 +0002h L1 +0004h R1 +0008h
+0010h +0020h × +0040h +0080h
SELECT +0100h



START +0800h
+1000h +2000h +4000h +8000h

となっています。
yyyy=0001と指定すれば、
L2ボタンが押されたら次の1行のコードを有効に〜 となるわけです。
これらのキーは組み合わせることも可能で、
yyyy=000Fならば
L2ボタンR2ボタンL1ボタンR2ボタンの4つが同時に押されたら〜
という意味合いになります。

なお、yyyyの値で無難な値は
L2,R2,L1,R1のうちゲーム内で割り当てられていないキー、
もしなければSELECT+L2,R2,L1,R1あたりが良いでしょう。

・サーチの仕方

キー判定アドレスのサーチはコツをつかんでしまえば簡単に
見つけることができるようになります。

キー判定アドレスの特徴として、
・現在のボタン状態によって一定の値を示す
・ボタン状態が変化すると値が変わる
があるので、下の探し方が使えるかと思います。
1.L2ボタンのみを押した状態で0001で数値サーチ
2.R2ボタンのみを押した状態で0002で数値サーチ
3.なにも押していない状態で0000で数値サーチ
通常はこれで候補が数個まで絞れますが、
その中のどの候補を使用してもだいたい動作します。
が、中には特定の場面でしかキー判定アドレスとしての役割を
果たさないものもあります・・・。

ゲームのタイトル画面でサーチすれば、確実性は若干上がるでしょう。

・もし見つからなかったら・・・

上記のボタン対応表は、何も押していない状況が0000
ボタンを押す毎にデータ値が増加していくので「+形式」と呼びますが、
ゲームプログラムによっては+形式のキー判定アドレスが存在しないものがあります。

そこでどうするか、
+形式があれば当然−形式もあります。
−形式はどのゲームプログラムにも確実に存在しているので
こちらでサーチをすることになります。

−形式のキー対応表
初期値 FFFFh
L2 -0100h R2 -0200h L1 -0400h R1 -0800h
-1000h -2000h × -4000h -8000h
SELECT -0001h



START -0008h
-0010h -0020h -0040h -0080h

探し方としては
1.L2ボタンのみを押した状態でFEで数値サーチ
2.R2ボタンのみを押した状態でFDで数値サーチ
3.なにも押していない状態でFFで数値サーチ
この方法が有効です。
なぜかと言えば、サーチツールによっては8000h以上の2バイト値で
数値サーチしようとすると思った通りの動作をしないものがあるためです。
また、サーチ候補が奇数アドレスになっているかと思いますが
アドレス値を1h引いて偶数にして下さい。

+形式では0001,0002・・・とサーチしていたのに対し、
−形式ではFEFF,FDFF・・・と1バイト先のデータ値をサーチしているためです。

ただし1バイト値のサーチ機能のないPAR3では
1.L2ボタンのみを押した状態でFEFFで数値サーチ
2.R2ボタンのみを押した状態でFDFFで数値サーチ
3.なにも押していない状態でFFFFで数値サーチ
こうサーチして下さい、問題なくいくはずです。

・これでもやっぱり見つからなかったら・・・

まだ諦めないで下さい!
PAR3など、サーチ範囲が80010000801FFFFFになっていると
見つからないことがあります。
もしこのケースに当てはまってしまった場合は、
メモリエディット画面でアドレス80007572のデータを見てください。
もし値がFFFFとなっていれば、そこが−形式のキー判定アドレスです。
適当にボタンを押してみてください、値が変化するはずです。

・他のサーチ法は・・・(参考)

PSのメモリイメージをPCに転送できる環境が前提ですが、
PCに転送したメモリイメージをバイナリエディタで開き、

00,41,FF,FF

というデータ列を検索してみて下さい。
もしヒットすれば、そのデータ列のFF,FFの位置が−形式のキー判定アドレスです。

ただしこの方法を使う場合、メモリイメージの転送時に
コントローラのアナログ機能をOFFにしておかないと
うまくいかないようです。

−形式だとPAR1などで正しく使うことができない場合があるので、
できるだけ+形式をサーチするよう心がけましょう!



戻る