GUC コードステーション情報
ソフト名 2.キー判定コードのサーチ法
ソフト品番情報
ソフト対応機種 PS(PlayStaition)
改造対応ツール
投稿者(敬称略) D-RAM【GUC】
投稿者連絡先 mopro@jade.dti.ne.jp
登録日 1999/07/26
更新日 1999/07/26
サーチ環境
コメント 「何か動作がおかしい」とか、「こういうことができるコードが欲しい」
また、「ここはこうするべきでは」等のご意見がありましたら、お手数ですが
D-RAM【GUC】
e-mail mopro@jade.dti.ne.jp
までメールをいただけると大変ありがたいです。


2.キー判定コードのサーチ法 今回は、比較的簡単に見つけることができ、 幅広く応用できる「キー判定コード」についてです。 すべてのゲームプログラムには、コントローラーの キー状態を保持しているデータが必ずといっていいほどあります。 (コントローラーを一切使わない場合はこの限りではありませんが、 そのようなゲームソフトは普通、考えられないでしょう) ただし保持しているアドレスは統一されていないので、 ゲームタイトル毎にサーチしなくてはなりません。 まず、キーの状態とデータの対応表です +形式 ニュートラル=0000 L2=0001(ビット1 ON) R2=0002(ビット2 ON) L1=0004(ビット3 ON) R1=0008(ビット4 ON) △=0010(ビット5 ON) ○=0020(ビット6 ON) ×=0040(ビット7 ON) □=0080(ビット8 ON) セレクト=0100(ビット9 ON) スタート=0800(ビット12 ON) ↑=1000(ビット13 ON) →=2000(ビット14 ON) ↓=4000(ビット15 ON) ←=8000(ビット16 ON) -形式 ニュートラル=FFFF L2=FEFF(ビット9 OFF) R2=FDFF(ビット10 OFF) L1=FBFF(ビット11 OFF) R1=F7FF(ビット12 OFF) △=EFFF(ビット13 OFF) ○=DFFF(ビット14 OFF) ×=BFFF(ビット15 OFF) □=7FFF(ビット16 OFF) セレクト=FFFE(ビット1 OFF) スタート=FFF7(ビット4 OFF) ↑=FFEF(ビット5 OFF) →=FFDF(ビット6 OFF) ↓=FFBF(ビット7 OFF) ←=FF7F(ビット8 OFF) キーを押していない状態で0000を示し、 押したキーに対応したビットがONになるのが+形式、 キーを押していない状態でFFFFを示し、 押したキーに対応したビットがOFFになるのが-形式です。 ただし、+形式・-形式ともに上位8ビットと下位8ビットが 入れ替わっている変り種もまれに見かけます。 ですが、基本的には上に挙げた対応表の通りです。 例えば、すべてのキーを押した状態では、 +形式 1111 1001 1111 1111(2進表記) 16進表記ではF9FFになります。 -形式 0000 0000 0000 0110(2進表記) 16進表記では0006になります。 ここで問題なのが、+形式と-形式どちらを使用するかです。 通常、キー判定コードはDコードとして使用します。 このDコードですが、初期のPARやX−Tでは データ部分が7FFFまで、という制約があります。 つまり、-形式を使用すると、改造ツールによっては 動作しなくなる恐れがあります。 そういうことでキー判定コードのサーチは +形式で行うことを勧めます。 (それ以前に、+形式のほうがサーチ自体が簡単ですが・・・) -------------------------------- さて、サーチ法ですが、押したキーに対する数値が分かっているので、 数値サーチが利用できます。 簡単なやり方では、 1.L2のみ押して0001でサーチ 2.R2のみ押して0002でサーチ 3.何も押さないで0000でサーチ これなら10進、16進どちらで指定しても同じなので便利です。 ポーズ機能があれば、無駄な候補を減らすためにも ポーズをかけた状態でサーチをかけましょう。 1回目のサーチでは数万個の候補が出ますが、 2回目でおそらく数十個まで減ると思います。 3回目以降では候補数は全く減らなくなるので、 通常は3回くらいで十分です。 次に、場面を変えてもう一度サーチします。 というのも、現段階では特定の場面でのみ有効な キー判定コードも候補に残っている可能性があるからです。 4.場面を変更して、L2のみ押して0001でサーチ 別に、L2キーにこだわる必要はありません。 ここでは簡単で済むので例を挙げているだけです。 ここまでくれば、候補にリストアップされているものは どれでも問題なく動作します。 しかし、再びDコードの話しに戻りますが 初期のPARでは、Dコードはアドレスの末尾が 0,4,8,Cでなくてはならならず、 2,6,A,Eのものに関してはCコードにする必要がある、 という約束もあります。 そこで、アドレスの末尾が0,4,8,Cになっているものを 優先的に選択したほうがよいでしょう。 -------------------------------- では、実践です。 まずは、ファイナルファンタジー8です。 適当な街に入り、ポーズをかけた状態でサーチしました。 1回目、L2のみ押して0001で数値サーチ =>候補数:49580 2回目、R2のみ押して0002で数値サーチ =>候補数:10 3回目、何も押さないで0000で数値サーチ =>候補数:10 この段階での候補リストは、以下の通りです。 800700A4 800703D4 80081B0E 80081B22 80081B36 80081B4A 80081B5E 80081B72 80081B86 80081B9A 次に、ワールドマップ画面でサーチしました。 ポーズはかけておりません。 4回目、L2のみ押して0001で数値サーチ =>候補数:8 80081B0E 80081B22 80081B36 80081B4A 80081B5E 80081B72 80081B86 80081B9A 2つ減りました。 後で分かった事ですが、800700A4と800703D4の2つは、 街中でもポーズ状態のみヒットすることが判明しました。 逆に、街中でポーズ状態でない時のみ有効になるものに、 8006F308がありました。 上の8つの中からアドレスの末尾が0,4,8,Cのものを選択するわけですが、 残念ながら1つも該当しません。 仕方がないので、ここでは仮に80081B0Eとしておきます。 そのため、初期のPARで使用する際は、DコードをCコードに 変換する必要が出てきます。 -------------------------------- もう一つ、特殊な例としてファイナルファンタジー6です。 メニュー画面でサーチしました。 1回目、L2のみ押して0001で数値サーチ =>候補数:45244 2回目、R2のみ押して0002で数値サーチ =>候補数:0 ここで、候補が1つもなくなってしまいました。 何度繰り返しても同じ結果になります。 少数ですが、+形式のキー判定コードを持たないものがあります。 この場合、-形式でサーチを進めることになります。 -形式のキー判定コードのサーチ法 +形式ではL2やR2を使用しましたが、 -形式では、L2はFEFF(65279)、R2はFDFF(65023)で 数値サーチすることになります。 10進か16進かを意識して入力する点に注意してください。 何度か試してみると分かりますが、 このサーチ法では、下1バイトがFF(255)になっている部分を 多数拾ってしまうため、候補を絞ることができません。 そこで-形式では、下1バイトがFF以外になる スタート、セレクトボタン(又は方向キー)を使用しましょう。 ファイナルファンタジー6の例では、 1回目、セレクトのみ押してFFFE(65534)で数値サーチ =>候補数:5375 2回目、スタートのみ押してFFF7(65527)で数値サーチ =>候補数:2 今度はしっかり見つかりました。 候補の2つは、80007572と3006EE05でした。 キー判定コードに奇数アドレスはありえないのですが、 3006EE05に注目してみると、これは変り種のキー判定コードで、 上位8ビットと下位8ビットが入れ替わっている形式のようです。 とりあえず、もう一つの80007572に決定です。 ただし、前にも書いたように、-形式なので 改造ツールによっては正常な動作が見込めず、 (厳密に言うと問題を起こす可能性があるのは初期のX−Tのみ) かつアドレスの末尾が2,6,A,Eなので、 初期のPARではDコードをCコードに変換しなければなりません。 -------------------------------- ここで挙げたものは比較的難しい例ですので、 大抵のゲームタイトルではここまでする必要はないでしょう。 以外と用途の広いキー判定コード、セガサターンのマスターコードのように ゲームタイトル毎に用意しておくと便利になりそうです。 その場合、初期のPARではDコードをCコードに変換する、 というような補足があればなおありがたいです。



無断転載・無断商用利用・無断直接リンク禁止
ホームページサイト登録はこちらゲーム個別検索登録はこちら