鉄拳3

 

□ まずおきまりの、体力から、
1P体力 800AAAB6 0098
2P体力 800AC342 0098
(データ部は、モードによって違いますが、これでたぶんいいでしょう)

□ ずっと気合い溜め状態になります
1P気合い溜め 800AA7E2 00FF
2P気合い溜め 800AC06E 00FF

□ キャラクタを変更します
1Pキャラクタ番号 800AF1F4 00xx
2Pキャラクタ番号 800AF1F6 00xx

<キャラクタ番号一覧表>
00 ポール
01 ロウ
02 レイ
03 キング
04 ヨシミツ
05 ニーナ
06 ファラン
07 シャオユウ
08 エディ
09 ジン
0A ジュリア
0B クマ
0C ブライアン
0D 平八
0E オーガ
0F 木人
10 ガンジャック
11 ゴン
12 アンナ
13 ドクターB
14 TRUE オーガ
15 クロー


□ コスチュームを変更します
1Pコスチューム 800AF230 000x
2Pコスチューム 800AF232 000x
(xは0〜2 0=パンチで選択 1=キックで選択 2=その他、制服とかタイガー)
※ このコードはなかなかおもしろい。隠しコスチュームのあるのは、ジン、シャオユウ、ガンジャック、ロウ、ニーナ(意味無いです)、エディ、アンナ。一回隠しコスチュームを持つキャラを選び、その後、隠しコスチュームを持たないキャラを選ぶと、前のキャラのままで、モーションだけ変わります。なぜかこのときヨシミツを選んでも、ちゃんと刀を持っています。

□ モーションを変更(木人みたいに動きだけ変更)
これは、普通に書き替えるなら、1Pなら800AA6D6を書き替えてやればいいのですが、タイミングによっては(ロード中など)フリーズしてしまいます。
そのため、かなり変則的なコードを使用します。
モーション選択1
 D00A77B2 FEFE
 800502E4 0016

モーション選択2
 D00502E4 0016
 800502E6 A482

モーション固定1
 D00A77B2 FBFE
 800502E4 0000

モーション固定2
 D00502E4 0000
 800502E6 0000

上記のように、4項目使って入力します。理由は、先頭がDのコード(条件判定するやつ)は、それより下のコード1つにしか効果がないようで、そのためこんな見苦しいコードになってしまいます。(ちなみに私は、caetlaのver 0.23を使用しています。)
使うときは、4項目すべてを選択して、まず普通に、使いたいモーションのキャラを選び、そのキャラで試合が始まったら、セレクト+L1を押してください。そうすると、自分のモーションも相手のモーションも、キャラクターを変えてもずっとそのままです。シャオユウがエディの動きをしたり、ジンがクマの動きになったりします。
またモーションを変えたいときは、セレクト+L2を押すと、元通り普通にそのキャラクタの動きをするようになります。また最初と同じように選びたいモーションのキャラを選び、試合中にセレクト+L1を押すと、またそのキャラのモーション番号に固定されるのでずっとそのキャラのモーションになります。

このコードは、プログラムのコードを書き替えています。
一応どうやって探したかを書いておきます。参考にしたい方はどうぞ。

まず、モーション番号のアドレスを探します。すると、いくつか、同じ番号を書き替えているところがでてきます。試しに書き替えていると、ラウンド1が終わり、ラウンド2に行くときにモーションデータの再読込を行うようになるコードがあります。それがモーション番号です。たぶん木人がいるため、そんな仕様になっているのでしょう。
おもしろそうなので、早速コード登録して、ずっと同じ動きにしてみましょう…と思ったら、顔のアップ画面がでてくるとき(なにVSなんとかという表示がでるとき)に止まってしまいます。書き換えタイミングをコントロールするための何か動作状況を表すような変数なんかがあればいいのですが、いいものがありません。そういうときは、高度な解析ができるデーテル社純正のACTION.EXEを使いましょう。
まず、SHIFT+F1を押して、逆アセンブル表示にします。そして、SHIFT+F8を押してモーションデータのアドレス800AA6D6にブレークポイントを設定します。そのとき、BREAK ON WRITEをYESにして、設定します。こうすると、このアドレスに書込のあったとき、その命令のところで処理が停止します。ブレークポイントを設定したら、SHIFT+F9を押して実行を再開します。すると、800502E4あたりで停止します。そのあたりを逆アセンブルされたリストで見てみると、ちょうど、800502E4にsh命令があります。sh命令は、2バイト書き込む命令です。

A4820016   sh v0,$16,(a0)

といった命令で、v0の内容をa0+$16に2バイト書き込むというものです。
SHIFT+F5を押して、a0レジスタを見てみると、800AA6C0なので、$16足すと、800AA6D6なので、たぶんここがモーション番号を書き替えているところでしょう。ここをnop命令(なにもしない)に書き替えてみると、モーションがずっと変わりません。顔がアップの画面になってもフリーズしません。この方法で行きたいところですが、まだ問題があります。これを単純に書き替えると、ずっと書き変わらず、モーション番号が0のままです。つまりみんなポールの動きになってしまいます。これでは困るので、この命令の部分を自由に書き替えられるようにしましょう。そうなると最近よく見かける、キーの押されている状態を見て書き替えるという方法が手軽でいいでしょう。
あまり使わないキーということで、ここでは、セレクト+L1とセレクト+L2を使用します。サーチのヒントとして、なにも押してない場合、キーテーブルの値は、FFFFになります。拙作のPSXS.EXEを使用すると、まず、FFFFをサーチしたあと、セレクト+L1を押したままにして、比較サーチで、前回と違うを選び、サーチするといったことができるのでかなり早く見つけることができます(宣伝(笑))。そうやってサーチすると、800A77B2がキーテーブルだということがわかります。これらを元に、コードを作ると、

D00A77B2 FBFE
800502E4 0000
800502E6 0000

といったようなコードになるわけですが、この場合800502E6 0000がなにもしなくても有効になってしまいます。このままだと、命令コードが異常ということでフリーズしてしまいます。そのため、この部分の命令の無効化と復元をやろうとすると、4項目の改造コードが必要になるわけです。プログラム書き換えは方法が一通りではないので、他にいい方法があるかもしれませんが、私のレベルではここまでです。なにせ、R3000関係の本はなにも持っていないため、つらいです。欲しいのですが高くて…。しかもこちらは田舎なので取り寄せになるでしょう。
ここまでだらだらと長く書いてしまいましたが、だいたいこんな感じで探しました。プログラムの書き換えはなかなかおもしろい改造ができます。まだチャレンジしていない方で、数字の書き換えだけの改造に飽き飽きしているという方は是非チャレンジしてみてください。もしおもしろいコードができたら教えてください。この探し方に関する文章に対する感想もいたたけると嬉しいです。

参考資料:Oh!MAGICOM No.9 とても役に立ちました。いい本を作られている編集者の方々に感謝!

TK3.TXT (caetlaアップデート用)

 

戻る