雑記 NEO-CMCの自家ビルド
忘れるので忘備録(メモ)です
NEOGEOのROMは復号化されているものがたま~にありまして
任意のタイトルのCやVを暗号化したいときには
NEO-CMCを改造するのが便利です。
自分が度忘れしがちなので、せっかくなので記事にしてみました。
下準備
VisualStudio2022をインストールします
参考)
一般的なオプションを選べば問題ないと思います。
後から必要になった場合は追加できるので、気楽にやりましょう。
スクラップAさんのサイトからメタルスラッグコンプリート用の
MSC_extract_v2.zipをダウンロードします
任意のフォルダーに解凍しておきます。
VisualStudioにプロジェクトを作成
コードなしで続行を選びます。
新規作成→既存のコードからプロジェクトを作成を選びます。
ウィザードが立ち上がるのでVisual C++を確認して次へを押します。
プロジェクトファイルの場所は
(解凍先の任意のドライブとフォルダー)¥src¥neo-cmc を選びます。
プロジェクト名を任意の名前にします。
自分の場合は、改造するのでMODを追加しておきました。
入力が終わったら、次へを押します。
プロジェクトのビルド方法で
VisualStudioを使用するの中のプロジェクトの種類を
コンソール アプリケーション プロジェクトに変更します。
操作が終わったら完了を押します。
これでslnファイルが生成されるので
次回からはslnをダブルクリックすれば、この画面になります。
画像では17と記載がありますが、vs2017もインストールされているからです。
完了後にRelease x86を確認しておきます
あとは自分でソースコードを変更してビルドすればOKです。
変更ポイント
testmain.cppを書き換えて自分が暗号化したいタイトルに変更します。
どうやってタイトル名_GFX_KEYが分かるのかというと
prot_cmc.hの中に対応しているタイトルが記載されているのでコピペでOKです。
例えばKOF2003のCを暗号化したいなら
コピペでtestmain.cppのcaseの中から
KOF2003_GFX_KEYと入れ替えればOK
KOF2003、ROTD、PREISLE2、ZUPAPAとかは有用かもしれません
タイトル網羅してくださったスクラップAさんに感謝感謝。
int titleflag = 0; //0:ZUPAPA 1:PREISLE2 2:ROTD 3:kof2001 4:SAMSHO5 5:samsh5sp 6:KOF2003 7:mslug5
//(略)
switch (titleflag) {
case 0:
extra_xor = ZUPAPA_GFX_KEY;
break;
case 1:
extra_xor = PREISLE2_GFX_KEY;
break;
case 2:
extra_xor = ROTD_GFX_KEY;
break;
case 3:
extra_xor = KOF2001_GFX_KEY;
break;
case 4:
extra_xor = SAMSHO5_GFX_KEY;
break;
case 5:
extra_xor = SAMSHO5SP_GFX_KEY;
break;
case 6:
extra_xor = KOF2003_GFX_KEY;
break;
case 7:
extra_xor = MSLUG5_GFX_KEY;
break;
ダウンロード
ね?かんたんでしょ?
上記でビルドしたものがこちらになります(実行ファイルとソース同梱)
全てで動作確認できていないので、うまく暗号化できるか分かりません。
ソース込みで公開してくださったScrapA様には、この場で感謝申し上げます。
〆
今回はビルドと自家改造について触れてみました
まぁおそらく、ほとんど需要はないでしょうね(´・ω・)
凄いのはコード書いてるプログラマーさんであって
自分みたいなのは、ざぁこざぁこなのです
なので皆さん気後れせずにビルドしましょう!
で、ビルド繋がりですがFBNeoは開発者さん曰く
x86推奨でx64はバグがあるから非推奨だそうな(詳細不明)
公式見ててもWin x64のビルドボットで
ちょいちょい失敗しがちなのでビルドに失敗する!
という人はx86のがいいかもしれません。ダメな時はダメですけどね!
あとkarilleraのDLLはx86のみなので、x64では動かなくなります
(いまさらkarilleraで通信対戦しないけど)
まぁそっちはGGPO対応のファイトケード2の方がいいでしょうね
ただしファイトケードはFBNeoのlicense違反だと
本家に切れられていますし、本家にもGGPO対応の予定はあるようです
(実装は可能だけど手を付けるかは別問題)
ディスカッション
コメント一覧
今更ながらPrimeGamingのKOF2003の抽出に挑戦しています
しげるさんのサイトを参考に下記コマンドにてkof2003h.zipを抽出中です
========================================================
bcut.exe p1.bin bootleg_PROM1 1048576 6291456
bcut.exe p1.bin bootleg_PROM2 0 1048576
copy /b bootleg_PROM1 + bootleg_PROM2 + bootleg_PROM2 swap_bootleg_P1
bcut.exe swap_bootleg_P1 271-p1d.p1 0 4194304
bcut.exe swap_bootleg_P1 271-p2hd.p2 4194304 4194304
bcut.exe v1.bin 271-v1d.bin 0 4194304
bcut.exe v1.bin 271-v2d.bin 4194304 4194304
bcut.exe v1.bin 271-v3d.bin 8388608 4194304
bcut.exe v1.bin 271-v4d.bin 12582912 4194304
neoconv.exe 1 e 5 271 4 – bin d
ren 271-v1e.bin 271-v1c.v1
ren 271-v2e.bin 271-v2c.v2
copy /b s1.bin 271-s1hd.s1
copy /b m1.bin 271-m1d.bin
echo Encrypt or decrypt this file: (e/d) には e を応答
m1crypt.exe
ren 271-m1d.bin.encrypted 271-m1k.m1
echo tiles2cromでは以下c1-c8を作成後に -1 で終了
echo 0、0、800000、c1
echo 0、1、800000、c2
echo 800000、0、800000、c3
echo 800000、1、800000、c4
echo 1000000、0、800000、c5
echo 1000000、1、800000、c6
echo 1800000、0、800000、c7
echo 1800000、1、800000、c8
tiles2crom.exe c1.bin
copy /b c1+c3+c5+c7 odd
copy /b c2+c4+c6+c8 even
bcut.exe odd 271-c1d.c1 0 8388608
bcut.exe odd 271-c3d.c3 8388608 8388608
bcut.exe odd 271-c5d.c5 16777216 8388608
bcut.exe odd 271-c7hd.c7 25165824 8388608
bcut.exe even 271-c2d.c2 0 8388608
bcut.exe even 271-c4d.c4 8388608 8388608
bcut.exe even 271-c6d.c6 16777216 8388608
bcut.exe even 271-c8hd.c8 25165824 8388608
del c1 c2 c3 c4 c5 c6 c7 c8 odd even
=========================================================
あとはC-ROMの暗号化のみとなり、こちらでDLさせて頂いたneo-cmc_mod.exeにて下記コマンドで実施しましたがCRCが合いませんでした
neo-cmc_mod.exe 271-c1d.c1 8388608 271-c1k.c1 1 6 -1
う~む...。
aceさんどうも遅くなりました、スパム判定くらってました;
えーとCROMの再暗号化は全部まとめてから
1つのファイルで暗号化しないとダメだと思います。
復号化CROMをすべて1つにまとめ直す→NEO-CMC掛けて→再度分割って方法です。
餓狼の時が参考になるかなと
echo c1 StartAddr:0 Odd_or_Even:0 SplitSize:800000
echo c2 StartAddr:0 Odd_or_Even:1 SplitSize:800000
echo c3 StartAddr:800000 Odd_or_Even:0 SplitSize:800000
echo c4 StartAddr:800000 Odd_or_Even:1 SplitSize:800000
echo c5 StartAddr:1000000 Odd_or_Even:0 SplitSize:800000
echo c6 StartAddr:1000000 Odd_or_Even:1 SplitSize:800000
echo c7 StartAddr:1800000 Odd_or_Even:0 SplitSize:800000
echo c8 StartAddr:1800000 Odd_or_Even:1 SplitSize:800000
tiles2crom.exe c1.bin
copy /b c1+c3+c5+c7 odd
copy /b c2+c4+c6+c8 even
BSwap c B crom.bin oddeven.txt odd even
neo-cmc crom.bin 67108864 crom_encrypt.bin 1 2 -1
BSwap d B crom_encrypt.bin oddeven.txt odd_enc even_enc
bcut odd_enc 253-c1.c1 0 8388608
bcut odd_enc 253-c3.c3 8388608 8388608
bcut odd_enc 253-c5.c5 16777216 8388608
bcut odd_enc 253-c7.c7 25165824 8388608
bcut even_enc 253-c2.c2 0 8388608
bcut even_enc 253-c4.c4 8388608 8388608
bcut even_enc 253-c6.c6 16777216 8388608
bcut even_enc 253-c8.c8 25165824 8388608
返信、有難うございました
おかげで kof2003h.zip として抽出が完了しました
無事に変換できたようでなによりです!
最近は話題がそれておりますが、ネタが来たらまた戻ります!
便乗でKOF2003弄ってなんとかなりました。
ありがとうございます。
ついでに勢いで買って、Cromで頓挫していたandroid版ZUPAPAも抽出してみました。
(去年11月購入です。今もファイル名が一致しているかは分かりません)
binwalkでアレして
copy /b 221F40+38A0A8+56C0A0+711E80 crom.bin
neo-cmc_mod crom.bin 16777216 crom_encrypt.bin 1 0 -1
BSwap d B crom_encrypt.bin oddeven.txt odd_enc even_enc
83CE94(2,048)⇒070-v1.v1 リネームのみ
9670C9(1,152)⇒070-p1.p1 0から分割するだけ
95AA98(1,280)⇒070-epr.m1 0から分割するだけ
こんだけです。
doritosさんコメントありがとうございます!
ファイル名は近似値でいけますし、CRC分かれば同一なので楽ですね
ズパパもちゃんと行けましたか。マイナータイトルなのでいいですね!
情報ありがとうございます!