Home > スポンサー広告 > ToHeart2 ダンジョントラベラーズ 真四天王召喚

スポンサーサイト

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

コメント: -

Home > スポンサー広告 > ToHeart2 ダンジョントラベラーズ 真四天王召喚

Home > ToHeart2 DT > ToHeart2 ダンジョントラベラーズ 真四天王召喚

ToHeart2 ダンジョントラベラーズ 真四天王召喚


ミルディンたん。

モンスター行動デザインがちょっとアトラスぽかった。
戦闘時カーソル記憶が無いとか自動戦闘が無いとか
バグが多いとか詰めの甘さがもったいないな。



■これは質問への回答です。
・「このように変動サーチしたら一発でコードが出てくる!」
 ということはプログラムコードでは絶対ありません。
・bpを各所に置いて通過箇所を見たり、レジスタに入っている数値を見ながら
 トレースしたり、ひたすら地味な作業です。
・これを読んだからと言って他のゲームで同じように出来るとは限りません。
・解析の経験を積むほど、『自然』さんと『zero memory』さんの偉大さがよく分かります。


■必要なもの
・PSPLINK改造版
・プロセスメモリエディタ TempARなど


■あると便利なもの
・ps2dis
自然 R5900命令表
R4000 Microprocessor User's Manual (.pdf)
『はじめて読む MIPS(リローデッド)』 by 中森章


■必要最低限の知識
自然 PS2解析
自然 PS解析
zero memory ゲーム改造講座(R3000関連)


■あると便利なコード
・雑魚から逃げる100%成功
・必ず先制攻撃
・HP減らない(敵も減らなくなってもOK)


■基本方針
手がかりとなるラベルや特殊メッセージ等何も無いので正攻法で遡ることにする。
エラーメッセージを出さないアプリの方がクラックしにくいのと同じ。
これがWinでメッセージを吐くならGetWindowTextAだわ。


■下準備1

▼アイテム袋1個目のアドレス
01 アイテムを1個も持っていない状態にする。
02 お金など買う手段を用意して道具屋に行く。
03 クロワッサンを9個買う。
04 固定値サーチ 8bit 0x09
05 クロワッサンを1個売る。
06 固定値サーチ 8bit 0x08
07 クロワッサンを1個売る。
08 固定値サーチ 8bit 0x07
09 サーチヒット件数1→0x09CA7176


▼強者の証のアイテムID
01 上のアドレスをDecoderで開く。
02 道具屋で違う種類のアイテムを買う。
03 Decoderで数値の変化を確認する。
04 個数のすぐ隣がアイテムの種類ということがわかる。
05 その場所に順番に数字を入れてアイテムリストを作成する。
06 強者の証のアイテムIDが0xB1だと分かる。
07 0x09CA7174 0x00aabbcc
 aa=個数/Lv bb=カテゴリ cc=種類


▼サーチ範囲
01 色々なサーチをするとワークエリアは0x09C00000以降だと分かる。
02 サーチ範囲を設定しておくとサーチ時間が短縮できる。


■下準備2

▼ランダムエンカウント
自然 - ソフト毎の解析手順 - 実際の解析手順 - テイルズオブリバース を参照のこと。


エンカウントの一般的特徴
・ランダムエンカウントは大抵『歩数管理』。時々『時間管理』。
・歩数はエンカウント用歩数と、リセットされない全体歩数がある場合がある。
 (後者はゲーム実績用)
・エンカウントすると歩数は0にリセットされる。
・ダンジョン突入直後に敵に遭遇することは無い。
・フロアが変わった直後に敵に遭遇することは無い。
・階段などの特殊なマスは敵に遭遇しない場合がある。
・初期ダンジョンの入り口からn歩までは絶対に遭遇しない場合がある。
・一定歩数を超えるまではエンカウント率0の場合がある。
・エンカウント直後はエンカウント率が0か低めに設定される。
・同じ場所に留まっているとエンカウント率が上がる場合がある。


▼歩数アドレス
TempAR呼び出しキーがHOME+Rの場合、
Rでキャラが動いてしまうと、歩数が測れない場合があるので
キー割り当てを変えるか、HOMEを先に押して灰色の画面を出している間に
Rを押す形にするか(ずらし押し)、位置取りを右に壁がある状態にする。

01 ダンジョンに潜る。
02 1歩移動したら変動サーチ+1。
03 数回繰り返すと、2-3件に絞られる。
  0x09CDE4A8
  0x09D5FA20
04 他のダンジョンに移動してみる。
05 サーチを確認し、数字が0にリセットされているアドレスが当たり。
06 0x09D5FA20


▼エンカウント制御
01 psplinkで「bp 0x09D5FA20 r」を実行。
02 1歩移動する。
03 0x0884A060でブレークする。
04 ダンプファイルをps2disで読むか、psplinkでdiを実行。

addresscommand意味
0884A060:8E050414lw a1,$0414(s0)歩数ロード
0884A064:24A50001addiu a1,a1,$0001歩数=歩数+1
0884A068:AE050414sw a1,$0414(s0)歩数ストア
0884A06C:28A50006slti a1,a1,$0006歩数a1が6より小さいならa1=1 違うならa1=0
0884A070:14A00005bne a1,zero,$0884A088a1<>0なら0884A088へジャンプ
0884A074:02D4282Aslt a1,s6,s4s6<s4ならa1=1違うならa1=0
0884A078:14A00069bne a1,zero,$0884A220a1<>0なら0884A220へジャンプ

05 0x0884A064で歩数を増やして次行で書き戻しているのでこれに0を入れて常に歩数0にする。
06 addiu a1,a1,$0001→ addiu a1,zero,$0000
  (and a1,zero,zeroでもori a1,zero,$0でもor a1,zero,zeroでも好きなのでOK。
  再利用する場合を考えるとaddiuやoriが都合が良い)
07 上の命令をアセンブルしたものを、psplinkから書き込む。
08 「pw 0x0884A064 0x24050000」
09 ゲーム上で歩いて0x09D5FA20の数値が常に0なのを確認。→実際にエンカウントしない。
10 「pw 0x0884A064 0x2405007F」など常に0x7F歩0xFF歩などを入れてみるが
  エンカウント率が100%にならない→抽選があることが分かる。
11 「pw 0x0884A064 0x24A50001」で元に戻しておく。
12 この命令の後に分岐があるので操作する。
13 slti/sltかbneを書き換えるかのどちらか。
14 0x0884A06Cと0x0884A074に1か0を入れて、ゲーム上で確かめる。→当たり。
15 エンカウント率0%と高確率エンカウントのコードが完成。
  (高確率への分岐なだけで100%ではない。その後抽選がある。)



■真四天王

▼抽選
01 エンカウント高確率にセットする。
02 真四天王がエリア全域に出て都合の良いダークカテドラルに移動。
03 アイテム袋1個目のアドレスにbpセット。「bp 0x09CA7174 r」
04 1歩移動すると3カ所ブレークする。

  08855FA8:94C40010 lhu a0,$0010(a2)
  08856098:94860010 lhu a2,$0010(a0)
  088559C0:94880010 lhu t0,$0010(a0)

05 クロワッサン(0001)を強制代入してどのアドレスが関係あるか確認。

  08855FA8 雑魚とミルディンに遭遇
  08856098 雑魚とミルディンに遭遇→たぶん雑談関係
  088559C0 雑魚しか出なくなった→当たり

06 08855FA8と08856098を0001強制代入などにした状態で
  「bp 0x09CA7174 rv 0 0xB1」を実行。0xB1は強者の証。
07 1歩移動する。
08 雑魚エンカウント→ブレークなし。ミルディンエンカウント→ブレークした。
  上記から次のことが分かる。
  雑魚/真四天王抽選→真四天王当選→アイテム所持チェック
09 0x088559C0の手前のアドレスを確認するとjr raがあり
  不連続なのでどこからか飛んできていることが分かる(当たり前)
  jr raのすぐ後の0x088559ACにどこからか飛んできている。
11 「jal $088559AC」は0e21566bなのでこれをps2disでサーチ。
  4件ヒット。もしくはスペースバーで逆参照解析。
  4つまとめてbpセット。

  08843A70 雑魚と遭遇→ブレークしない。
  08849E80 雑魚と遭遇→ブレークしない。
  0884A1AC 雑魚と遭遇→ブレークしない。ブレークした→ミルディン遭遇
  08898198 雑魚と遭遇→ブレークしない。

  jalならraに格納されるのでepでraレジスタを確認しても良い。
  0884A164:5100002B beql t0,zero,$0884a214
  ここを飛ばれるとjalに来ないので分岐を書き換えておく。

  0884A184:12040007 beq s0,a0,$0884a1a4
  ここを飛ぶとサブルーチンへ来るのでとりあえず分岐を書き換えてみる。→当たり

  付近に分岐が4つあるのでそれぞれ書き換えて意味を確かめてみる。
  また、分岐前後にbpをセットして本来の動きをトレースして確認する。
13 最初にブレークした088559C0付近を見るとbeqでアイテム照合→
  v0にフラグを立てていることが分かるのでこれを書き換えると
  必要アイテムを持っていなくてもイベントが起きるコードの完成。


▼遭遇フラグ
01 ミルディン遭遇コードで遭遇→変動サーチ
02 ダンジョンから出る。
03 ダンジョンに入り直す→→変動サーチ
04 ミルディンと遭遇→変動サーチ
05 フラグの場合、遭遇前は0で遭遇後は1か数字が増えている。
  場合が殆どなので数値増減サーチでも良い。
06 サーチのヒット件数2件。
  0x09CD881C 遭遇後は1、遭遇前は0が入っている。
  0x09DFE6F8
07 「bp 0x09CD881C r」を実行。
08 08842684でブレーク。
09 常に0を強制代入させる。→ダンジョンから出なくても再戦可能。




関連記事
スポンサーサイト

コメント: 0

Home > ToHeart2 DT > ToHeart2 ダンジョントラベラーズ 真四天王召喚

Return to page top

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