ダメージ受けない 敵動かない
このゲームはシンボルが残っているソフトです それを頼りに2種類のコードを紹介します

ダメージ受けない

シンボルをだーっと見ていくと
「MIS_IsPlayerInvincible」という物が見つかりました

「Invincible」には「無敵」という意味があります
プレイヤーインビンシブル=プレイヤー無敵と読み取れるので
ひとまず、どういう処理をしているかこの場所に飛びます。

すると、このようなプログラムになっていました

この関数はアドレス003E7BE0からワードデータをロードする
その命令だけですぐに処理が終わっています
恐らく、数値をロードしているだけという事は
無敵フラグをロードしているのではないかと思われます

すぐ下の関数には、似た名前の「MIS_SetPlayerInvincible」
と言うシンボルが張られていて、こっちは逆に
アドレス003E7BE0にワードデータを書き込んでいます
こっちのMIS_SetPlayerInvincibleの方は
無敵フラグを書き込んでいるのではないかと予想できます

仮にMIS_Is〜が本当にフラグをロードしているのであれば
このv0レジスタに0001が入っていればフラグが立った事になる
つまりプレイヤーがダメージを受けなくなるハズです
という訳でlw命令をv0レジスタに0001を代入する命令に書き換えます。

A0131A58 24020001
〜暗号化〜
9C869D80 3854E7A6

これでゲーム中に攻撃を受けてみると
一切ダメージも受けず、微動だにしなくなりました。
ちなみに、v0レジスタに00000000以外の数値が入っていれば
無敵フラグとして成り立つ様ので、私のコードでは転載確認用に
ppac5という滅多に見ない命令でえろえろに組んでます。



敵動かない

敵関係のシンボルが無いか探していくと
ENEMY(エネミー=敵)という文字を縮めたと思われる
ENMYという文字から始まるシンボルが大量に見つかりました
(1文字しか縮まってないのでENEMYのままでも良かった気も。)

その中に「ENMY_Move」というシンボルがありました
文字通り「敵の移動」に関係するプログラムと考えられます。

早速このシンボルが張られているプログラムに飛びます
少しプログラムを見ただけではどういう流れかは掴めませんが
シンボル名から敵の移動に関係するプログラムである可能性は高いので
このルーチンを動作しないようにして、どうなるかテストします

このENMY_Moveの先頭を参照先に設定して
F3でどこからこの関数を読んでいるか調べます
すると、0017D838の一箇所だけが見つかりました


このjal命令をnopに書き換えてしまえば
ENMY_Moveのプログラムを一切通過しなくなるので
事実上、ENMY_Moveを潰したのと同じになります

A017D838 00000000
〜暗号化〜
9C825B60 1456E7A5

これでゲームを始めてみると・・・
敵が全く出てこなくなってしまいました
どうやら敵の動作を止める事が出来ているみたいですが
このままではゲームを進める事が出来ません

そこでパッド操作でそれぞれ潰す、復帰するコードを作り
この敵が出てこない不具合を回避する事にします

D07B8A02 0000FBFD
2017D838 00000000
D07B8A02 0000F7FD
2017D838 0C09E940
〜暗号化〜
0CEE0D26 1456AC0A
1C825B60 1456E7A5
0CEE0D26 1456B80A
1C825B60 104DBE65

これで、敵の姿が見えてるうちにL3とL1を同時に押すと
その瞬間敵の動きが停止するようになりました
L3とR1を同時に押すとちゃんと動き出します
気分は「ザ・ワールド」です(笑)

またまた、私自身が出してるコードは
転載確認用に普段は見ない命令を使っていますが
結局は命令を潰しているだけで特に意味合いは変わりません。