Android用NEOGEOソフト解析

~Android用NEOGEO移植ソフトからROMイメージを抽出~
※>>Steam版NEOGEO移植ソフトからの抽出は別記事です。

Last update 2014/08/23
– convpack.zipがKOF98に対応しました。


gplay

~はじめに~

Google playで販売されているNEOGEO作品のダウンロード容量と
NEOGEOのROMイメージ容量が極めてソックリだったため、構造を解析してみました。
参考 [Google play] METAL SLUG X (¥350)

~注意~
Androidの仕様上「支払い→ファイルだけ抜く→すぐに返金処理」で
手元にROMを残せるはずですが、その場合は現行法で
違法コピーと解釈されるはずです。
この実験を行う方は絶対に返金処理しないでください。

むしろ、Android版NEOGEO移植シリーズはなかなか良好な出来映えなので、
メタスラ1,2,X,3やブレイジングスター…などなど全部買っちゃいましょう。
当時ウン十万円した高価なソフト一式がたった数千円で揃うのですよ。
そんな感じで皆が買いまくれば、いつか
Bluetoothでワイヤレス対戦可能なティンクルスタースプライツ
とかもリリースされるかもしれません(・ω・)


~ダウンロード→展開→ゲーム開始の流れ~
ダウンロードサイズがかなり大きいため、ダウンロードと同時に
「Wi-Fi通信」を推奨されますが、
ダウンロードと実行の流れは以下のようになっています。
(METAL SLUG Xの場合)。

1.ダウンロード時に /sdcard/Android/obb/com.dotemu.neogeo.mslugx/ に
main.2.com.dotemu.neogeo.mslugx.obb と
patch.2.com.dotemu.neogeo.mslugx.obb を保存。

2.実行後にこれらを /sdcard/Android/data/com.dotemu.neogeo.mslugx/files/ に展開。

3.最後にAPKをシステムに配置してプログラムを実行できるように設定。

なおobbファイルはゲームごとに格納フォルダ名が異なるので注意。
( /sdcard/Android/obb/ までは共通で、その下にゲームごとに異なるフォルダが出来る)


~obbファイルについて~
filesフォルダから拾い出しても良いのですが main.2.com.dotemu.neogeo.mslugx.obb を
PCにコピーし拡張子をzipに変更して展開すると、下記の意味深なファイルが抽出されます。

ファイル名 ファイルサイズ 内容
mslugx_adpcm 10240KB ADPCM(V-ROM)
mslugx_bios_m68k 128KB BIOS(neo-geo.rom)
mslugx_bios_sfix 128KB SFIX(sfix.sfx)
mslugx_game_m68k 5120KB Program(P-ROM)
mslugx_game_sfix 128KB SFIX(S-ROM)
mslugx_game_z80 128KB Z80(M-ROM)
mslugx_gfix_usage 4KB SFIXから生成した中間データ(不要)
mslugx_spr_usage 96KB TILESから生成した中間データ(不要)
mslugx_tiles 49152KB Tiles(C-ROM)

NEOGEO版METAL SLUG XのROMと比較すると、V-ROMは4096KB+4096KB+2048KB(10240KB)、
C-ROMは8192KB×6(49152KB)でサイズが完全一致。
さらにNEOGEO BIOSらしきものも含まれてウヒョーーー!!!…と思えますが…。

~NEOGEO BIOSのようなものについて~
mslugx_bios_m68kとmslugx_bios_sfixを見たところ、実機BIOSに限りなく似ています。
ただし、完全に同じではなくエミュレータでロードすると起動直後にクラッシュしました。
恐らく、Androidアプリと連携を取るよう細かい部分がカスタマイズされているものと
推測されます。

また、LO-ROM(000-lo.lo)やSM1(sm1.sm1)など他のBIOSイメージが含まれていないため、
「Android版NEOGEOシリーズからBIOSダンプは現実的に出来ない」と思われます。
とはいえ、NEOGEOエミュレータとして動いていることに違いは無いので、
apkなどからLO・SM1を抽出することは可能かもしれません。

~追記~
BLAZING STARに含まれるファイル blazstar_zoom_table が”000-lo.lo”と完全一致しました。
さらに、NEOGEOエミュレータ『Nebula』はSM1を使わずに音源エミュレーションが可能なため、
『METAL SLUG』または『BLAZING STAR』があればneogeo.zip(BIOSセット)を生成可能です。
詳しい手順は当記事最後の『環境構築』項をご覧下さい。


~METAL SLUG XのROMイメージのようなものについて~
試しにmslugx~ファイルを展開できないか検証用に
romcutter.zip(変換バッチファイル同梱)を作ってみました。
main.2.com.dotemu.neogeo.mslugx.obbを展開したフォルダに
romcutter.exeとandroid_METAL_SLUG_X.batをコピーし、
android_METAL_SLUG_X.batを実行すると、NEOGEO ROMと
同じファイル構成で切り出します。

ファイル名 元サイズ 出力ファイル 出力サイズ
mslugx_adpcm 10240KB 250-v1.bin
250-v2.bin
250-v3.bin
4096KB
4096KB
2048KB
mslugx_game_m68k 5120KB 250-p1.bin
250-p2.bin
1024KB
4096KB
mslugx_game_sfix 128KB 250-s1.bin 128KB
mslugx_game_z80 128KB 250-m1.bin 128KB
mslugx_gfix_usage 4KB 未使用
mslugx_spr_usage 96KB 未使用
mslugx_tiles 49152KB 250-c1.bin
250-c2.bin
250-c3.bin
250-c4.bin
250-c5.bin
250-c6.bin
8192KB
8192KB
8192KB
8192KB
8192KB
8192KB

これらのファイルをmslugx.zipに圧縮したものをエミュレータで実行すると…
mslugx
こんな感じ。


~何が問題なのか?~
上の画像を見て「ああ、ステージ1っぽいなぁ」と思った方はいい勘してます。
つまり画面がバグっていてもゲームは進行できるのです。
また、V-ROMやM-ROMも正常に認識しており、BGM/SEもバッチリ鳴ります。

また、画像はバグっていてもカラー情報は完全に一致しているため、
C1~C6・S1をスマートフォンにあわせてピクセル数を調整しているのかもしれません。
(実際、ROMを比較するとS1は似ているもののC1-C6は大きく内容が異なります)。
とりあえず今のところはNebula(JUKEBOX)で音楽を聴くくらいしか出来ません。

これを解決する方法として考えられるアプローチは
1.C1~C6、S1から元データの仕様に準拠したデータを生成するコンバータを作る。
2.Android版のエミュレータの仕様を再現するプログラムを作る。
くらいでしょうか。

※2013/04/28追記:実際にはTilesは
「C-ROMを元に生成したエミュレータ用パターンデータ」です。
スマートフォン用に調整などは一切していませんでした。


~2013/04/25追記 S1コンバータできました~
game_sfixの法則性が特定できたのでコンバータを作りました
Download : answap.zip
単純なバイトスワップだけで生成が可能で、その法則性はコチラをご参照下さい。

恐らくこのバイトスワップは、SFIX-ROMの並びをNEOGEOのメモリマップ上に
適した形に再配置し、より高速な処理を行うための仕様と考えられます。

~2013/04/25追記 C-ROMの法則性特定できました~
というよりも mslugx_tiles の法則性ですが。
エミュレータなどで用いられるFBAフォーマット(fbacacheで生成)や、
NEOGEOエミュレータNeoDSで用いられるNEOフォーマット(NeoDsConvertで生成)
に格納されているVRAM展開用パターンとほぼ同じでした。
(厳密には処理をより高速化するため4バイトブロックを4ビットごとに反転した内容)

つまり以下のような感じです。

ファイル名 開始オフセット データ並びの例(+0x0010600)
mslugx_tiles 0x00000000 9A A8 B8 08
mslugx.fba 0x00630500 80 8B 8A A9
mslugx.neo 0x00F60200 80 8B 8A A9

Download : tileswap.zip
とりあえず4ビットごとに反転するツールも作りました。
ただし、このツールを使っても「FBAやNEOに含まれるスプライト情報ブロックと
同等のデータ列が生成される」だけで、Android版NEOGEO移植シリーズから
PC用エミュレータでプレイ可能なROMイメージを生成することはできません。

このスプライトパターンから元のC-ROMを復元するプログラムは現段階では未完成です。


~2013/04/28追記 スワップ後のタイルからC-ROM生成できました~
Download : tiles2crom.zip
このツールを使うと前述のtileswapで生成したスワップ済みTilesデータから
C-ROMの生成が可能です。
引数にswapped_tilesを与えるとC-ROMを偶数&奇数バイトにメモリ上へ展開します。
メタルスラッグXの場合はtiles2cromに下記パラメータを与えればROMを生成できました。

開始アドレス サイズ Odd or Even ファイル名
00000000 00800000 0 250-c1.bin
00000000 00800000 1 250-c2.bin
00800000 00800000 0 250-c3.bin
00800000 00800000 1 250-c4.bin
01000000 00800000 0 250-c5.bin
01000000 00800000 1 250-c6.bin

なお、タイルデータから元のC-ROMへの再レイアウトの計算式はコチラ
NeoDS同梱のNeoDsConverterのソースコードを参考にしました。


~環境構築~
NEOGEOエミュレータ『Nebula』で実際にプレイ可能にするまでの手順です。

Download : convpack.zip
BLAZING STAR
METAL SLUG
METAL SLUG 2
METAL SLUG X
真サムライスピリッツ
THE KING OF FIGHTERS ’97
THE KING OF FIGHTERS ’98
の変換バッチファイルと、
tileswap.exe、romcutter.exe、answap.exe、tiles2crom.exeのプログラムセットです。
oddファイルを展開したフォルダに中身をコピーして各種バッチファイルを実行し、
C-ROMを正しい手順で変換すればゲームのROMイメージを生成できます。

***-p1.bin、***-c1.bin など拡張子binのファイルが複数生成されるので、
ゲームごとに以下のzipファイルにまとめて圧縮してください。

タイトル ZIPファイル名
メタルスラッグ mslug.zip
メタルスラッグ2 mslug2.zip
メタルスラッグX mslugx.zip
ブレイジングスター blazstar.zip
真サムライスピリッツ samsho2.zip
THE KING OF FIGHTERS ’97 kof97.zip
THE KING OF FIGHTERS ’98 kof98.zip

BIOSイメージ作成にはMETAL SLUGもしくはBLAZING STARを購入し、
oddファイルを以下の通りリネーム。

METAL SLUGの場合 BLAZING STARの場合 リネーム後のファイル名
mslug_bios_m68k blazstar_bios_m68k neo-geo.rom
mslug_zoom_table blazstar_zoom_table 000-lo.lo
mslug_bios_sfix blazstar_bios_sfix sfix.sfx

※実際にはneo-geo.romは使えませんが念のためパックします。

さらにTHE UNIVERSE BIOSの最新版(2013/04/29現在v3.0)をダウンロードし、
uni-bios.romを先ほどの3つのリネームしたファイルと一緒に”neogeo.zip”に圧縮すればOKです。

NebulaのromsフォルダにゲームのROMイメージおよびneogeo.zipを入れて実行し、
Game – Neogeo OptionsメニューのUse Universe-Biosをチェックすれば準備完了。
これで購入した作品をPCでプレイ可能になります。


~さいごに~
これで、Android版NEOGEO作品からNebulaなどで実行可能な
ROMイメージを生成できました。
しかし、せっかく自分で支払って購入したソフトからROMイメージを生成するのですから、
決して誰にも渡さず、あくまで自分用のバックアップとして利用しましょう。
(”mslugx”とサーチするだけで海外のROMサイトがばんばんヒットしますし、
恐らく違法コピー目的の人がこんな面倒なことをするわけありませんが…)。


メールアドレス(アットマークを半角に) : hs_mana@hotmail.com

Android用NEOGEOソフト解析” への8件のコメント

  1. metal slug xをここの手順通りやっているのですが、android_METAL_SLUG_X.batを
    起動すると250-m1.binと250-s1.binだけ作られあとのファイルはアクセスが拒否されましたと出てファイルが作られません。アクセス許可はフルコントロールにしていますがどうもうまくいきません。何かやりかたが間違っているのでしょうか

  2. 可能性として考えられるのは
    ・フォルダ名に日本語または半角スペースが含まれている。
     (バッチファイルの引数指定が狂う可能性アリ)
    ・OS仕様上、管理者ユーザ以外では通常アクセスが出来ない
     特殊フォルダにファイルを展開し、通常ユーザでコマンドを実行している。
    のどちらかと思われます。

  3. 返信ありがとうございます。問題はご指摘の通りアクセス権限に関することでした。問題を解決したところ無事7本全てのromを吸い出すことが出来、nebulaで起動を確認しています。ありがとうございました。

  4. Steamで販売されているやつも同じようなファイル構成だったので、この記事を参考に抽出できました ありがとうございます

  5. いつも有意義な情報ありがとうございます。
    不躾な質問で申し訳ありませんが、こちらのツールで
    android 餓狼 MARK OF THE WOLVESに対応の
    予定はございませんか?

    よろしくお願いいたします。

  6. 理論上はコンバート出来るとは思いますが、
    元となっているROMが特殊チップになっているため
    法則性がつかめていません。
    HumbleBundleあたりで素ROMが出てくれればそれを元に
    解析できますが、今のところは無理ですねぇ。

  7. 分かりました。ネオジオ後期のロムデーター特殊チップなんですね。

    お返事ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です