スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ちょっとしたPS2改造コード講座 「数値サーチ編その3」

こんにちはこんばんは。
まず、再びかなりご無沙汰して申し訳ないm(_ _)m

前回までのちょっとした解析講座でメジャー(かな?)な解析方法は全部です。
今回は数値サーチ編その3としていますが、コントローラの各ボタンに対応した処理を行っている部分を捜したいと思います。

これを解析することによって何ができるのかと言うと、簡単な操作ボタンの変更や各ボタンに対応した処理(攻撃や選択など)を解析する駆け足になるといったところです。
もしかしたら敵やNPCのデバック部分に触れることができるかも?
ただ、ゲームによってはうまく解析できない可能性があります。
(私自身、地球防衛軍2というゲームしか解析していないので他のゲームについてはどうなっているかわからないのが本音)

次回は・・・「ラベルサーチ編」ですかね。大方ネタ切れです・・・。
いっそのことgdgdな解析動画でもあげたほうがいいのかな・・・。



0.はじめに

まず、各ボタンはどのように処理されているかの説明をします。

各ボタンにはそれぞれ特定の値が与えられていて、ボタン処理の際にその値と比較して合致していれば該当する処理を行うようになっています。

詳しく言えば、
1.ボタン入力のイベントが起きる(常時)
2."特定のアドレス"にボタンの値を入れる(常時)
3.該当する処理(例えば"攻撃")にたどり着いたら"特定のアドレス"から値をロードする
4.ロードした値とボタンの値(例えば"○ボタン")を比較する
5.合致していれば該当処理(攻撃)を行う

そのボタンの特定の値というのは以下の通り。

●パッド値(プラス形式)
○ = 0020
× = 0040
△ = 0010
□ = 0080
L1 = 0004
L2 = 0001
L3 = 0200
R1 = 0008
R2 = 0002
R3 = 0400
↑ = 1000
↓ = 4000
← = 8000
→ = 2000
select = 0100
start = 0800

●パッド値(マイナス形式)
○ = DFFF
× = BFFF
△ = EFFF
□ = 7FFF
L1 = FBFF
L2 = FEFF
L3 = FFFD
R1 = F7FF
R2 = FDFF
R3 = FFFB
↑ = FFEF
↓ = FFBF
← = FF7F
→ = FFDF
select = FFFE
start = FFF7

(これは念のため)

改造コードを使ったことのある方なら見たことがあるかもしれませんが、これはパッドコードで使われるものと同じです。
パッドコード自体、パッドアドレスの値を参照しパッドコードの値と比較することで機能しているのでやっていることはほとんど同じです。

今回、このパッド値を使って数値サーチをするわけです。
こういうリストを見ながらでもいいですが、いつもお世話になっている「地球防衛軍2 PAR改造コード第三倉庫」のサイトの「解析ツール」のページから「s2c」というものをダウンロードして解凍して頂き、その中にセットで入っている「PadCodeMaker」というソフトを使っていただくとやりやすいと思います。

padcodemaker.jpg

ただし、サーチする前にもう1つ知っておきたいことがあります。

それは命令ですね。
よくこういうパッド処理(正確には比較処理)に使われる命令がありまして、数値サーチとあわせてその命令を目印にする必要があります。

その命令というのは andi命令分岐命令(beqやbne)のセットです。
よくこういう感じで見かけます。
(r1、r2は説明用の架空レジスタ。r1は比較用、r2にはロードしたパッド値が入っているとする)

andi r1, r2, $1000 (↑ボタン)
bne r1, zero, $00123456 (分岐先は該当処理とする)

andi命令というのはr2レジスタと即値(ここでは$1000を指す)の各ビットを比較して共に"1"のビット列があればそこを"1"に、それ以外なら"0"にしてr1レジスタに代入するというものです。
・・・という仕様なのですが、こういう解説だと何やっているか分かりにくいですね。

簡単に言えば、r2レジスタと即値に共通するものがあればr1に"0"以外が入るということ。
もっと極端に言えば、r2レジスタと即値が同じならr1に"0"以外が入るということ。
詳しくはr5900命令表Be Natural様のサイトよりダウンロード)で確認してください。

こういうボタン処理に限って言えば、r2レジスタに確認したいパッド値が入っているかどうかを調べるものとして使われます。
入っていれば、かならずr1レジスタには"0"以外が入るので、次の分岐命令でzeroレジスタと比較して該当処理に飛ぶという手順になっています。

確認することはこれで以上です。
続いて、実際にサーチしてみましょう。


1.パッド値の選択

解析するゲームソフトは、この講座でおなじみ「地球防衛軍2」です。
ps2disを起動してソフトの実行ファイルを読み込み、逆参照解析さんを起動しておきましょう。

次に、サーチするパッド値の選択します。
今回はプレイヤーの操作に関わるものをサーチしようと思います。
地球防衛軍2の操作には「ノーマル操作」と「テクニカル操作」の二つがありますが、今回は「テクニカル操作」でいきます。
「テクニカル操作」で使われるボタンは十字キー、L1、L2、R1、R2、R3ぐらいですね。
この中からパッド値を選択するわけですが、ここで一つポイントがあります。
まずは、各パッド値を並べてみましょう。

L1 = 0004
L2 = 0001
R1 = 0008
R2 = 0002
R3 = 0400
↑ = 1000
↓ = 4000
← = 8000
→ = 2000

プラス形式かマイナス形式かも選ぶ必要がありますが、最初は分からないと思うのでとりあえずプラス形式からやってみましょう。
次に、どのパッド値を選ぶかですが、L1、L2、R1、R2のように1桁目に"0"以外が入っているようなものは避けたほうがいいです。
理由は単純で、関係ないところで検索に引っかかりやすいからです。
できるだけ十字キーのように桁数が多いものから選んだほうがいいでしょう。
加えて言うと、基本的に数値が大きいものが個人的に望ましいです。ここでは←キーの"8000"ですね。

ただ、"8000"という数値はコンピュータにおける16bitの符号付整数の表現においてアンダーフローの限界値でもあり、これもあらゆる場所で引っかかる可能性があるので、"4000"や"2000"で検索するものありです。
("4000"も浮動小数点値"2.0"の即値としてひっかかりやすいですが・・・)

今回はあえて"8000"でサーチしましょう。


2.サーチ

ps2disのメニューバーから編集(E)→「32bit値を検索」をクリック。

32bit値検索

16bitにチェックを入れ、16進数の入力フォームにパッド値"8000"を入れてOKします。

32bit値検索2

あとは、F4キーShift + F4キーを駆使して"andi r1, r2, $8000"みたいなものをひたすら探します。

今回、かなりのハズレがひっかかりました。
だいたいこんなのがよくひっかかります。

はずれ

あまりにも多いときはF4キーを押しっぱなしにしておいてandi命令が一瞬でも見えたらストップして探すのもあり。

しばらくすると、一つ目が見つかりました。

はずれ2

しかし、ここで確認することがあります。
大抵のゲームでは十字キーは↑↓←→の4つがセットで使いますよね。
(メニューや選択肢などでは↑↓または←→の2つセットですが)
ということは、これがあたりなら周囲に←(8000)以外を即値にしたandi命令があってもおかしくありません。
そこで周囲を捜しましたが、それらしきものはありませんでした。
つまり、ハズレですね。仕方ないので次に行きましょう。

次に、それらしきものが見つかりました。

あたり?1

今度は画像を見ての通り、十字キー全てが見つかりました。
目標は「テクニカル操作」に関わるのも探すことなので、この周囲に残りのR1、R2、R3、L1、L2ボタンの処理があるかどうか探します。

探してみたところ、これしか見当たりませんでした。

あたり?2

R1、R3はともかく□ボタンは「テクニカル操作」では使いません。
これとL1、L2が見当たらないことを考えるとおそらくこのあたりは戦車エアバイクという乗り物の操作系でしょう。
詳しくは弄って確かめる必要がありますが。
結局ハズレでしたが、副産物としてメモをとってもいいですね。

最終的に、当たりは以下の通りです。

あたり1

↓のほうに行ってみると、

あたり2

selectも一応「テクニカル操作」含まれているのでこれが当たりで間違いないでしょう。

ここで補足。
上の画像で「R1+R3」となっている部分の解説をちょっと。
↓の画像で解説します。

複数の値

見ての通り、これは3つのパッド値が加算されたものが即値に入っています。
これでどうなるのかというと、3つのボタンのいずれかが入力されれば処理することが可能となります

この場合だと、R1でもR3でも□ボタンでも動きます。(同時押しでもOK)
andi命令はこういう使い方もできるというわけです。

また、こういう計算は先ほどのPadCodeMakerを使えば楽に計算できます。

padcodemaker解説


3.改造

簡単な改造方法は、操作ボタンの変更ですね。
やり方は簡単で、andi命令の即値を他のパッド値に変更するだけです。
十字キーを○×△□ボタンにしたり、自分のお好みにカスタマイズできます。
また、ボタンを封印することもできますね。
その場合は即値を"0000"とするか、セットになっている分岐命令を弄る。
逆に押しっぱなしにすることも?

他にはボタンが攻撃に割り当てられていれば攻撃関連、移動に割り当てられていれば移動関連の処理を弄れる可能性があります。
すぐ近くにある浮動小数点値を代入している命令の数値を変えてみれば変化が現れるかもしれません。

例えば、移動関連なら、

改造1
----------------------------------------------------------------------------------------

複雑なものもありますが、しっかり流れを読んで弄る。


改造2

他にもjal命令をつぶしたり、レジスタの中身を覗き見したり、自作プログラムを作ってみたり色々試しましょう。


4.最後に

注意しておくことは、操作系は複数存在する可能性です。
特定の状況下しか動かないものが結構あると思います。(メニュー画面、戦闘、乗り物に乗る等)
ましてや、敵の操作にかかわるものがあったり・・・w(地球防衛軍2では存在を確認)

あと、元々自由にボタン変更が可能なゲームだったらこのサーチ法ではできないんじゃないかと思ったり。
色々と変更できるということは、パッド値がほとんど表に出ていることはないんじゃないかと思う。
まあ、やったことがないので分かりませんが。

では、おつかれさまでした。
関連記事
スポンサーサイト

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

PS2 チート 頭文字Dの事についての情報

【PS/PS2】筋肉番付シリーズのチート&NG集 ここでは、 【PS/PS2】筋肉番付シリーズのチート&NG集 に関する記事を掲載しています。(続きを読む) 迷子の黒蟻さん ちょっとしたPS2...

コメントの投稿

管理者にだけ表示を許可する

No title

どうもアズさんこんにちはこんばんわ
早速の記事更新ありがとうございます。
ならびに1万HIT達成おめでとうございます!

今回の記事これはクリティカルヒットです
私の解析しているゲームには各ボタンに
そのボタンを何回押したかで分岐
そのボタンに対応したコマンドが出現してからそのボタンを押すまでの時間で分岐、等々
数々の設定がされている様で、該当の数値で検索すると怪しそうな部位が多数ヒットします

あと8000 4000辺りで検索するとデバッグモードらしき処理部分を通過しているようです
解析はまだですがデバッグモード出現のコマンドに関係してれば、、なんてアマイかな(笑

大方ネタ切れで と言う事なのでリクエストします
マップ処理に関する物をお願いしたいのですが
地球防衛軍関連の物でかまいませんので、どんな感じでプログラムが組まれていたか
アズさんがどんな処置を施したか、等々記事にして貰えると有難いです
いや、私自身かなり以前からマップ関連の処理部分を探しているのですが
手掛かりが全く掴めない状態なので、、、御一考ください。

No title

>taskさん

こんにちはこんばんはです。

>今回の記事これはクリティカルヒットです
おお、お役に立てて何よりですー。

>デバッグモード出現のコマンドに関係してれば、、なんてアマイかな(笑
残念ながらデバックモードにつながるようなものはおそらく消されている可能性が高いです。
ゲームによってはデバックモードの名残が残っているものもあるようですが、その場合は基本的にジャンプ命令や分岐命令がつぶされているらしいです。

デバックモードであるとは限りませんが、例えばAIが関わるものである可能性があります。うまくいけばAIの行動を制限したり、直接操作ができるかもしれません。

>マップ処理に関する物をお願いしたいのですが
うーむ、マップ処理に関係するものですか・・・。
実を言うと、間接的に干渉しているものしか解析できていなかったりします(汗
具体的には敵を出現させる処理において3Dマップ上で出現させる座標を弄るとか、マップを描画する前の処理においてマップファイル名を弄るとかそんな感じです。

解析法も「先人の知恵法」の延長みたいなものですし。
探すのであれば、個人的には直接探すよりも、周りからのほうがいいかもしれません。
小ネタレベルになってしまうかもしれませんが、考えてみます・・・。

No title

>例えばAIが関わるものである可能性があります。
うお!なんで解るんですか!4000 8000とゆう数値?やっぱ出来る人は違う!!!
私の解析している物はそのAIが全てみたいなゲームです。
そのAIが面白くてコードを使用するとそれに反応するんですよ
いや、コードが効くという意味じゃなくて
どうもプレイヤー=データ改竄者として認識出来るみたいなんです。
その反応を見るのが楽しくてやめられない(笑
それにしても何で解るのですか?
AIとゆう言葉が出てるのを見て思わず ドキッ! としてしまいました。

No title

>taskさん

>うお!なんで解るんですか!
えーと、消去法ですかね・・・w
プレイヤーが操作するもの以外は、大体AIなりCPUなりNPCなりが操作している部分ということです。
実際、地球防衛軍でもプレイヤーや乗り物の操作系以外に、敵の蟻や歩行メカなどの操作系があり、弄ってみれば攻撃してこなかったり、常に壁に向かって歩き続けさせるとかできます。

つまりは、AIなどもプレイヤーと同じ方法で操作している(されている)わけです。(例外はあるかもですが・・・)
違いは、コマンドを打つのがコントローラーかプログラム(人工知能かな?)かというところです。

No title

ループ命令がいまいちわからないので
今度ループ命令について記事にしてもらえますか?

No title

z.wさん

>今度ループ命令について記事にしてもらえますか?
分かりました!
正確にはループ命令というものはなく、分岐命令を用いたループ処理ですが、次回の記事でできればこれを含めて解説するようにします。
プロフィール

アズ

Author:アズ
取り合えず自由気ままに。
主にニコ動の活動の報告や
補足をしていくつもり。

基本的にリンクフリーです。
ブログに掲載したコードについてはご自由に転載してくださってかまいません。

箱○にてオンはたまーにやってるかも。
ゲームタグは「azulitter」です。

最近は団子虫がお気に入り。

最新記事
最新コメント
カテゴリ
FC2カウンター
検索フォーム
月別アーカイブ
QRコード
QR
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。