Sponsored Link

« Projectづくし | メイン | Project64 日本語化RDB(Unofficial RDB) v4.14リリース »

コードの見つけ方

090913_01.jpg

掲示板の方でエミュレーター使用時の
ゲームのメニューを開く速度を速くするコードを
探してほしいといわれ割と簡単にコードが見つかったので
そのやり方を書いておきます。

とりあえず下のファイルをダウンロードしてください。

  • Project64 v1.6用レジスタモニタ

  • 私が4年くらい前に自分用に作ったPJ64 v1.6用のレジスタモニタです。
    実行するとPJ64のメモリからレジスタ情報を取得し表示してくれます。


    === 探し方 ===
    例としてマリオストーリーでやってみましょう。
    このゲームはエミュレーターで動かすとゲーム中のメニューを開こうとすると
    一瞬止まったかのようになりメニューを開くのに時間がかかります。
    090913_02.jpg


    レジスタモニタを起動してもう一度メニューを開いてみると
    pcレジスタは802747C、raレジスタは8027B04で
    処理が重くなっているのがわかります。
    090913_03.jpg

    つぎに逆アセンブラで該当箇所を見てみましょう。
    PD2DISまたはNemu64で逆アセンブルして8027B04付近を見てみました。
    090913_04.jpg


    上記の処理を簡単に説明すると

    8027AFCへの処理から戻ってきた後、S2に1を加算、
    値が0x13Eより大きくなるまで処理をループ


    という流れになっています。

    おそらくこのループ部分で処理が重くなりメニューが開くのに
    時間がかかるようになっていると推測されるので
    強制的にループを抜けるようにするにするために
    80027B28を書き換えて

    80027B28: SLTI V0, S2, 0x013E
      ↓
    80027B28: SLTI V0, S2, 0x0000


    にしてしまえばすぐにループを抜けるようになるはずです。

    そんなわけでマリオストーリーのコードは

    81027B2A 0000

    になります。


    ※追記
    逆アセンブル結果をよく見てみたら80027B4Cにも分岐命令がありますね。

    80027B44: SLTI V0, S3, 0x00EF
    80027B48: ADDIU T0,T0, 0x0140
    80027B4C: BEZ V0,0x80027790

    最初のところと併せて二重ループになっているようなので
    これもき換えた方がいいのかな?と思ったんですが
    値をよく見てみると0xEFは10進法で219、0x13Eは318
    というわけで捜査線の数っぽいですね。
    つまり画面のエフェクトの処理をしている部分ではないかと推測されます。
    こんな処理の重いエフェクトは必要ないので、
    このエフェクト処理を呼び出している部分をつぶしてしまいましょう。

    Nemu64でやった場合をせつめいしますと、
    エフェクト処理が終わって元の処理に戻す部分
    80027B74: JR RA
    にブレイクポイントを仕掛けたあと、もう一度メニューを開いてブレイクさせたら
    逆アセンブルウィンドウのStepボタンを押すと逆アセンブルリストが切り替わって
    80027FD8付近のエフェクト処理の呼び出し部分に行くことが出来ます。
    090913_6.jpg

    少し上の80027FD0を見てみると

    80027FD0: JAL 0x80027984

    でエフェクト処理を呼び出しています。
    このエフェクト処理を呼び出しているのは1カ所しかないので
    ここを呼び出ししないようにすればOKとなりますので
    最終的なコードは

    81027FD0 2400

    となります。


    関連記事:

    トラックバック

    このエントリーのトラックバックURL:
    http://nekokabu.s7.xrea.com/x/blog/mt-tb.cgi/290

    ※トラックバック送信元の 中でこのエントリのアドレスを引用してください。
    引用がない場合はスパムとして削除します。

    コメント (5)

    ぷー:

    いきなりの書き込みですみません。

    サイトでマリオストーリーの画像貼ってたのでねこかぶさんもやっていると思い一つ質問があるんですけど仲間の能力を使うボタン?ってどこなんですかね...

    いろいろ試してみたのですが出来なくて...

    ねこかぶ:

    >仲間の能力を使うボタン
    ちゃんとやったことないのでわかりません。
    適当にボタン押したら見つかると思いますけど

    みの:

    ねこかぶさんって、すごいですね。
    ヨーヨーがお好きなようですし、パソコンにも、とても詳しいです。

    やっぱり、ねこかぶさんは工業高校とか大学の工学部卒なんでしょうか?

    あお:

    コードだけでなく調べ方まで書いて頂けるなんて。
    快適にプレイできるようになりました。
    有り難うございました。

    ねこかぶ:

    >工業高校とか大学の工学部卒なんでしょうか?
    違います。物好きなだけですー

    コメントを投稿


    ※エントリと関係ないコメントはやめましょう

    About

    2009年09月13日 14:21に投稿されたエントリーのページです。

    ひとつ前の投稿は「Projectづくし」です。

    次の投稿は「Project64 日本語化RDB(Unofficial RDB) v4.14リリース」です。

    他にも多くのエントリーがあります。メインページアーカイブページも見てください。

    楽天市場


    上海問屋
    ヨーヨーショップ スピンギア
    テレセン オンラインショップ
    スターキッズ
        

    Amazon