Moon Jumpの基礎知識とBreezeを使ったざっくりとした探し方


Moon Jumpとはボタンを押している間キャラクターが上昇し続けます。

似たものに何度でも無限に多段ジャンプ出来る無限ジャンプというものがありますが、Moon Jumpとは性質が異なり別のものになります。

今回はそんなMoon Jumpを探してみようという訳です。

Moon Jumpの基礎知識
  • メモリ上で基本的にFloat「浮動小数点」で管理されている
  • ジャンプ前の足が地に着いた状態の値は0である事が多い(多いだけで異なる場合有り)
  • Floatを10進数で表現すると上昇時は0.1~2000で下降時は-2000~-0.1の範囲内である事が多い
  • 16進数で表現すると上昇時は3DCCCCCD~44FA0000で下降時はC4FA0000~BDCCCCCDである事が多い

Moon Jumpの知識おまけ
  • Moon Jumpは重力や加速度が関係してるかも
  • 上昇時は地面から浮き上がった直後が最も値が大きい事が多く、地面から離れた距離が大きい程値は小さくなる事が多い
  • 下降時がマイナスの値の場合、一番地面から離れている要するに下がり初めが最もマイナスが小さく地面に近い程マイナスの値が大きくなる事が多い
  • 下降時に明らかに地面に着地していないのに着地している時と同じ値になるゲームもある
  • 上昇時がマイナス値で下降時がプラス値である場合、着地点がゼロ以外の場合、Float値がDoubleで管理されていたりと基本と違う事がよくある
  • ジャンプする度に着地点の値が変動するゲームもある
  • 着地時も上昇時も下降時も全てがマイナス値というゲームもある

それではMoon Jumpを探してみましょう
※再起動すると検索は1からやり直し、ローディングを挟むのもやり直しになる場合があるので要注意

1.キャラクターをジャンプさせて上昇中にフリーズコードで停止しよう


2.MJ presetを選択後、Start Searchで検索しよう


3.一度の検索では絞り込めないのでPause Searchを選択


4.下降中にフリーズさせて2度目の検索へ


5.Invertを押して範囲をマイナス値に設定してContinue searchで2度目の検索をします


6.まだ絞れないはずなのでゲーム画面に戻り着地した状態で再度Breezeへ戻る
※枠線内はこんな検索パターンがあるとの説明です


7.EQ cycleを選択 → Edit Aで0を入力 → Continue searchで3度目のサーチ


8.ある程度候補が少なくなるまで上記1~7を繰り返して、ある程度絞れたらShow Candidatesを選択して中身を確認しましょう


9.青枠内の怪しいと感じた箇所の値を増やしたり固定してみます


10.見事浮かびあがりました


11.あとはどれが目的のアドレスか特定する為に、先ほど固定した値を少しずつ解除していき特定します



13.アドレスが特定出来たらAdd Bookmarkで任意の名前をつけてブックマークに保存します


ブックマークの保存が完了したら、あとはコード化するだけになります。

PointerSearcher SEを用いてポインターを見つけてコード化したり、更に深追いしてアセンブラの命令文を特定してコード化したりと色々ありますが、ここでは触れませんがお好きなやり方でコード化して下さい。

ちょっと記事が長くなったので他の探し方などは、また機会があれば載せるかもしれません。

コメント