マジシャンロードでOP復活 <Update!> byサイフォン

エミュレーターFinalBurnNEO,neogeo,エミュレーター

前期とか後期とか最初に言い出したのは誰な(ry

最初に、情報提供いただきましたサイフォンさんに感謝をここで。
ありがとうございました!!毎回、記事のネタにさせていただいて感謝です。

何かする人は、サイフォンさんに権利がありますので
うちのブログのコメントなどで許諾を取ったうえでお願いします。

解析のために高額なNEOGEOCD版まで購入されたそうで
その情熱には頭が下がるばかりです。いやはやホントに感謝です。

後期とOPについて

ザックリ説明すると、後期の方が易しくなったものの
ゲーム開始における状況説明のOPが流れなくなったのを復元します。



おそらくOPの微妙に時間が長いので削ったのかな?
アーケードなら、短いゲームのデモ画面の後に
差し込んだらよかったんじゃないかなぁ。
これで後期版+OP追加で完全版になる形です。(Returned OP Screen Hack)

該当するROMSetはmaglordです。
これはPrimeGamingなどから変換抽出が可能です。


今なら、もうちょっとスマートに書き直せますが、まあそれは気が向いたら。

必要な物

ROM Masquerade

はむさんによるROM抽出用ツールです。
PromのEndian Conv 16bitを相互変換のするために利用します。

バイナリーエディター
好きなバイナリーエディターを使ってください
StirlingFavBinEditHxDなど定番はたくさんあります
文中ではStirlingを使っています。

作業詳細

STEP1

ROM Masqueradeから005-pg1.p1を開いて
Go Analyze!→Endian Conv(16Bit)→Save dumpFileを押して好きな名前で保存します。
これはエンディアンコンバートされたPを作業できる形式に戻した形です。

STEP2

今度はバイナリーエディターでSTEP1で保存した(任意名)のファイルを開きます。
ファイル名がころころ変わりますが、気にしないでください。

そののち、0xC054から0xC0D9をコピー、0x7FF00(空き領域)にコピーする。
範囲は先頭が 4A 2E 38 20 (中略)末尾は 0C 04 4E 75 までになる。

これで0x7ff00以後には、0xC054から0xC0D9をコピーしたデータが存在することになります。

STEP3(概念図)

ゲームスタート→遊び方説明→ゲーム開始となっている状態から


ゲームスタート→遊び方説明→OPデモ→ゲーム開始という処理を割り込ませます。



元のアドレス(0xC054-0xC0D9)を変更すると
アドレスがずれてプログラムに支障をきたすので
空きスペース(0x7ff00)に処理をコピーしてから
OP処理を割り込ませているかたちです。

STEP3 (実作業)

具体的に説明すると
 0x7FF58:4E B9 00 00 C0 DA 42 2E 02 C9
 0x7FF62:28 6E 38 3C

この間に"4E B9 00 02 02 2A“を"挿入”する(上書注意!)
StirlingではInsキーを押せば挿入モードになります。

※"4E B9 00 00 C0 DA 42 2E 02 C9“は遊び方説明(左端の子)
 "4E B9 00 02 02 2A“はOP処理(真ん中の子)
 以後の 2A 28 6E 38 3C ゲーム開始(右端の子)
 
 0x7FF58:4E B9 00 00 C0 DA 42 2E 02 C9
 0x7FF62:4E B9 00 02 02 2A 28 6E 38 3C



4E B9 00 00 C0 DA 42 2E 02 C9
4E B9 00 02 02 2A" 28 6E 38 3C
となればOKです。挿入モードを解除して上書きモードにしましょう。

追加作業(必要に応じて)UPDATE!!

メモリーカードでロードするとブラックアウトする症状を
修正するバイナリパッチが、サイフォンさんより投稿されましたの掲載します。

あんこさん
しげるさん

メモリーカードのブラックアウトの修正を行ったので、共有します。
バグ版   →修正版
66 00 00 70 →66 00 00 76
66 00 00 64 →66 00 00 6A
66 52    →66 00 00 5A

これらの修正は、特定の条件を満たすと、そのバイト分ジャンプするという意味です。
00 00 5Aであれば5Aの次から5A分ジャンプするということです。
ジャンプ先は00 00 0C 04 4E 75の最初の00のことです。
修正完了すると、以下のようになります。

●オフセット7FF00
4A 2E 38 20 6B 0C 08 EE 00 00 0C 6F 66 00 00 76 60 0A 08 EE 00 01 0C 6F 66 00 00 6A 42 2E 0C 05 4E B9 00 00 B2 2E 4A 2E 0C 05 66 00 00 5A 2F 2E

https://milkchoco.info/archives/8743#comment-5030

あんこさん

0x07FF2B: 52 2F 2E 38 3C => 00 00 5A 2F 2E
このあとは38 3C〜とそのまま変更せず使えばOKです。
なので正確には
00 00 5A 2F 2E 38 3C〜
という感じで続きます。
要は52を00 00 5Aに差し替えているだけです。
末尾の00 00 0C 04 4E 75の最初の00までジャンプできればOKです。

それ以外の
0x07FF0F: 70 => 76
0x07FF1B: 64 => 6A
は問題ありません。

https://milkchoco.info/archives/8743/comment-page-1#comment-5060

ステートセーブで問題ないと思いますが、念のため。

メモリーカード問題修正前
0x07FF00 4A 2E 38 20 6B 0C 08 EE 00 00 0C 6F 66 00 00 70
0x07FF10 60 0A 08 EE 00 01 0C 6F 66 00 00 64 42 2E 0C 05
0x07FF20 4E B9 00 00 B2 2E 4A 2E 0C 05 66 52 2F 2E 38 3C

メモリーカード問題修正後
0x07FF00 4A 2E 38 20 6B 0C 08 EE 00 00 0C 6F 66 00 00 76
0x07FF10 60 0A 08 EE 00 01 0C 6F 66 00 00 6A 42 2E 0C 05
0x07FF20 4E B9 00 00 B2 2E 4A 2E 0C 05 66 00 00 5A 2F 2E 38 3C

0x07FF0F
: 70 => 76
0x07FF1B: 64 => 6A
0x07FF2B: 52
=> 00 00 5A
(52を00 00 5Aに置換、挿入する)

2024.09.22 確認と修正が遅くなりすみませんでした。
何ならメモカ用はIPSで差分作って、エミュレーター側でオンオフしてもいいかも。

STEP4(概念図)

通常ではゲーム開始などの、処理を行うジャンプ先が0xBEF9は00 C0 54となっています。


Use Google Lens to translate images.

ここで0xBEF9を07 FF 00に書き換えることで、ジャンプ先が07 FF 00になります。
そのため、先ほどコピーして書き換えた先で処理が行われるようになり
ゲームスタート→遊び方説明→OPデモ→ゲーム開始の処理が行われるようになります。
わざわざコピーして飛び先を変更しているのは、直接書き換えるとゲームが止まるからです。

STEP4 (実作業)

バイナリーエディターで0xBEF9にジャンプして00 C0 54を07 FF 00に上書きします。
上の作業で挿入モードにしていると、黒画面になり正常動作しませんので注意しましょう。

0xBEF9 : 00 C0 54 => 07 FF 00
上記ならパッチツールで使えるかと思います。

余剰バイナリを削除します。

末尾のバイナリデーターがはみ出まくっているので
終了が0x7FFFFになるように削除して、確認出来たら保存します。

STEP5

最後にROM Masqueradeを再度起動して
STEP4で保存したバイナリファイルを開きます。


Go Analyze!→Endian Conv(16Bit)→Save DumpFileを押して005-pg1.p1を保存しましょう。
別セットを追加ビルドしたエミュレーターがあるなら、名称をそちらにあわせて変えてください。

確認したところCRC32がA0126980でしげるさんと一致しています。
オリジナル作者のサイフォンさんのCRCとは異なっています
が、問題なくOPが再生され遊べるようになりました。
おそらく、データコピー(0xC054-0xC0D9)の範囲がずれたりするとCRCもズレるかも?

動作確認

あ、このボスそういうことなのね!と腑に落ちる演出

このくだりがないと、何でこいつが出てくるのかさっぱり分からないんですよね。



マジシャンロードの由来もしっかりと解説してくれました。
サイフォンさんのおかげでストーリーが分かるようになりました!
情報の提供をありがとうございました!

しめ


どことなくハ〇ヒの長〇らしさがあるような、ないような。
マジシャンつながりです。

3回くらい作業して間違えまくった結果
ファイル名が入れ替わりを繰り返しました;
CRCがあわなくても、動作するなら末尾4バイト書き換えればいいので。

教科書みたいなマニュアルのような更新でしたが
何をどうしてこうなるのか?が分かるようにしてみた形です。

画像が貧相なのはお察しください。
不備やまちがいなどありましたら、お気軽にコメント欄までどうぞ。