移動速度変更 このテの要素はどうやって探すのか、と良く聞かれるので 今回は深く切り込んで移動速度変更を探してみましょう。 何もヒントが無い状態(シンボルなど)で移動速度変更を探したい場合、 移動に関連していそうなプログラムからいくつか遡って探すと良いでしょう 例えば今回ならば「歩数」という分かり易い要素があります。 つまり「歩数が増える=移動するから増える=移動関連のプログラムと繋がっている」 というように考えて突き止めようということです。 という事で、まず歩数の最大値チェックを探します。 最大値は05F5E0FFなのでE0FFで16bit検索をすると 00353EBCで引っ掛かった所が歩数の最大値チェックと分かりました。次に、この関数を呼び出している場所を調べます この歩数最大値チェックの先頭部分(00353E00)を参照先に設定して F3でこのプログラムを呼び出している部分を調べていきます すると唯一、002562F4のjalで呼び出している事が分かりました。
今度はこのjal命令をnopなどで潰してみて、ゲーム中に何か変化が出ないかを調べます ちなみに002562F4を潰した場合は歩数が増加しなくなりました。 このように変化があったら、さらにこのjal命令が存在するプログラムの先頭を参照先に指定して F3で呼び出しているプログラムを探してはjal命令を潰して ゲームに何か変化が出る場所を探し続けます。 このjal命令が存在するプログラムの先頭は00256200なので、 このアドレスを参照先に設定してF3検索をすると3箇所が引っ掛かりました。 中でも00256390のjal命令を潰した時になんとカメラが固定されました! カメラの移動はキャラの移動に連動して行われる要素なので 徐々に移動関連の中枢に近づいているようです。 さらにこのカメラが停止した時のプログラムを遡ってみると 唯一、00227EF0のjalからこのカメラ関連プログラムを呼び出しています。
この00227EF0のjalを潰してもまだ移動は可能なので キャラが移動できなくなるまでプログラムを遡って行こうとした所、 このプログラムの先頭(00227C08)の参照先である001C0C58のjal命令を潰したら ついにキャラクターの移動そのものが出来なくなりました、 ようやく移動関連の中枢へ辿り着いたようです。 00227C08からの一連の流れを潰した結果移動できなくなった訳ですから 「00227C08からこのプログラムの終わりである00227FA4までの中のどこか」 に移動関連の処理をしている部分があるハズです 00227C08内の怪しい命令やjal命令をとにかく1つ潰してはゲームで確認し、 これを繰り返してピンポイントで移動が出来なくなる部分を探し出します。 実際に00227C08から一個ずつjal命令を潰しては確認を繰り返した結果 00227CACにあるjalを潰した時だけ移動が不可能になる事が分かりました。 これは、このjal命令のコール先である00256038からの流れの中に 移動に関するプログラムが含めれていると言うことなので今度は00256038の中を調べます。 移動関係には必ず浮動小数点が使用されているので、 浮動小数点に関する命令(命令に.sやc1という文字が含まれた命令) を潰してみるなどして、ゲームに影響が出る部分を探していきます。 しかし00256038〜002560B8の中にある浮動小数点の命令を弄っても ゲーム中にはこれといった影響が出てきません。 となると残るはこの関数内にあるjal命令などの呼び出し先に 移動に関するプログラムが置かれている物と考えられます。 そこで3つあるjal命令が呼び出しているプログラムを見てみるのですが その先には浮動小数点の命令が存在していません。 となると残るはこの部分しかありません。
j命令でジャンプした先「00255E20」の処理を見てみると この中にはかなりの数の浮動小数点関連の命令が存在しています。 また地道に怪しそうな部分を書き換えて行ってみると 00255E84と00255E88で作っている「42D7FFFF」という浮動小数点値を書き換えた所 ついに、ゲーム中の移動速度が変化するようになりました 後は適度な速さになるように書き換える値を調節すれば移動速度変更コードの完成です。
ここまでの説明通り、こういった要素のコードは非常に探し難く 最大値検索のように目立った処理をしている訳では無いので わずかでもヒントになりそうな部分から時間と手間を掛けて探すしかありません。 ですが、その分得られる効果はそれなりの物も多いですから 自分のスキルに合わせて挑戦してみて下さい。