続・ファンタジーゾーンコンプリートコレクション

ROM抽出,エミュレーターFinalBurnNEO,MAME,エミュレーター

長くなったので分割

お約束

抽出は全て自己責任でお願いします

手順などの不備がありましたら
お手数ですがコメントをいただけると幸いです
あらかたぶん投げてるので、補完のコメントも大歓迎です


こちらは後編になりますので
事前準備などは前編をご参照いただければ。

Fantasy Zone II – The Tears of Opa-Opa (System 16C)

現行のMAMEセット準拠への変換は
0.227からの追加分である
315-5298.b9が変換で不足すると思います。

0.225位までなら動作可能と思われます。

変換

#packopt name "fantzn2x"
#module
#deffunc writedata str filename,int ofs,int size
	sdim buf2,size
	repeat size : poke buf2,cnt,peek(filedat@,cnt*2+ofs) : loop

	bsave ""+filename,buf2,size
return
#global

;//cpu
	notesel filedat
	noteload "fz2_s16c.p00" : filesize = strsize
	writedata "fz2.a7", $000000, $20000
	writedata "fz2.a5", $000001, $20000

	noteload "fz2_s16c.p01" : filesize = strsize
	writedata "fz2.a8", $000000, $20000
	writedata "fz2.a6", $000001, $20000

;//sprite
	noteload "fz2_s16c.spr" : filesize = strsize

	writedata "fz2.b1", $00001, $20000
	writedata "fz2.b5", $00000, $20000
	writedata "fz2.b2", $40001, $20000
	writedata "fz2.b6", $40000, $20000
	writedata "fz2.b3", $80001, $20000
	writedata "fz2.b7", $80000, $20000
	writedata "fz2.b4", $c0001, $20000
	writedata "fz2.b8", $c0000, $20000
	writedata "fz2.a1", $100001, $20000
	writedata "fz2.b10", $100000, $20000
	writedata "fz2.a2", $140001, $20000
	writedata "fz2.b11", $140000, $20000

;//bg
	noteload "fz2_s16c.scr" : filesize = strsize

	sdim outbuf,filesize/4,3
	repeat filesize/4
		ofs1 = cnt*4 : ofs2 = cnt
		tmp = 0 : repeat 4 : tmp = (tmp<<8)|peek(filedat,ofs1+cnt) : loop

		dim bytebuf,3
		repeat 8
			tmp2 = tmp&($70000000>>(cnt*4)) : tmp2 = tmp2>>(28-cnt*4) ;特定位置の4bitを取り出す
			tmp3 = $80>>cnt
			if (tmp2&1)!0 : bytebuf.0 = bytebuf.0 | tmp3
			if (tmp2&2)!0 : bytebuf.1 = bytebuf.1 | tmp3
			if (tmp2&4)!0 : bytebuf.2 = bytebuf.2 | tmp3
		loop
		repeat 3 : poke outbuf.cnt,ofs2,bytebuf.cnt : loop
	loop

	bsave "fz2.a14", outbuf.0, filesize/4
	bsave "fz2.a15", outbuf.1, filesize/4
	bsave "fz2.a16", outbuf.2, filesize/4

;//sound
;//	noteload "fz2_s16c.snd" : filesize = strsize
	
;//	writedata "fz2.a10", $00000, $8000
;//	writedata "fz2.a11", $10000, $20000	
end

HSP3.1用です。エディターを開いて、実行ファイル自動作成を選ぶと
fantzn2x.exeができあがるので、アンパックしたBINフォルダーで実行。

サウンドROMの切り出しは、HSPで上手く書けないので
Romcutterを用いて分割しました。


Romcutterは上記のはむさんのサイトからダウンロード出来ます。

HSPに通じている方なら、ファイルから切り出すように書けば一発変換可能です。

romcutter fz2_s16c.snd fz2.a10 0 8000
romcutter fz2_s16c.snd fz2.a11 10000 20000

全てのファイルを生成したら
fantzn2x.zipとして保存すれば作業は完了です。

FinalBurnNeoはoptionalで315-5298.b9が不要なので監査OKです。
繰り返しますが、MAMEは0.225までになります。

実機動作の話


Fantasy Zone IIの実機動作は
上記のサイトで検証されていました。

どうやらSYSTEM16Bにメモリを増設し
SYSTEM16Cに改造すると動作するようです。

メモリ増設の経緯は

こう言う流れだったそうです。

Fantasy Zone (Time Attack, bootleg)

Fantasy Zone (Time Attack, bootleg)で変換可能でした。

MAMEのROMSET準拠変換は
HSPスクリプトと(自分のスキル不足で)Romcutter併用です
HSPを書ける人はfz1_s16b.sndの先頭32kbを切り出すようにすればOK

#packopt name "fantzoneta"
#module
#deffunc writedata str filename,int ofs,int size
	sdim buf2,size
	repeat size : poke buf2,cnt,peek(filedat@,cnt*2+ofs) : loop

	bsave ""+filename,buf2,size
return
#global

;//cpu
	notesel filedat
	noteload "fz1_s16b_ta.p00" : filesize = strsize

	writedata "fzta__a07.bin", $000000, $20000
	writedata "fzta__a05.bin", $000001, $20000

;//sprite
	noteload "fz1_s16b_ta.obj" : filesize = strsize

	writedata "fzta__b01.bin", $00001, $20000
	writedata "fzta__b05.bin", $00000, $20000
	writedata "fzta__a01.bin", $100001, $20000
	writedata "fzta__b10.bin", $100000, $20000

;//bg
	noteload "fz1_s16b.scr" : filesize = strsize

	sdim outbuf,filesize/4,3
	repeat filesize/4
		ofs1 = cnt*4 : ofs2 = cnt
		tmp = 0 : repeat 4 : tmp = (tmp<<8)|peek(filedat,ofs1+cnt) : loop

		dim bytebuf,3
		repeat 8
			tmp2 = tmp&($70000000>>(cnt*4)) : tmp2 = tmp2>>(28-cnt*4) ;特定位置の4bitを取り出す
			tmp3 = $80>>cnt
			if (tmp2&1)!0 : bytebuf.0 = bytebuf.0 | tmp3
			if (tmp2&2)!0 : bytebuf.1 = bytebuf.1 | tmp3
			if (tmp2&4)!0 : bytebuf.2 = bytebuf.2 | tmp3
		loop
		repeat 3 : poke outbuf.cnt,ofs2,bytebuf.cnt : loop
	loop

	bsave "fzta__a14.bin", outbuf.0, filesize/4
	bsave "fzta__a15.bin", outbuf.1, filesize/4
	bsave "fzta__a16.bin", outbuf.2, filesize/4

;//sound
;//	noteload "fz1_s16b.snd" : filesize = strsize
;//	writedata "fzta__a10.bin", $000000, $8000       

end

上記でfzta__a10.bin以外を抽出可能です。
コメントアウトしてるコマンドではODD/EVENになってしまって
そのまま32kb切り出しがうまく行きませんでした・・・

HSPの自動実行ファイル生成を選ぶとfantzoneta.exeになりますので
BINフォルダーにコピーして実行するとファイルが変換されます。

romcutter fz1_s16b.snd fzta__a10.bin 0 8000

これでfzta__a10.binもCRC一致します
バイナリカット出来るソフトなら何でもOKです。

これで変換されたファイル全てをまとめて
ZIPにしたのちfantzoneta.zipにリネームします

MAMEベースなら監査は通過出来ました。
Arcade 0.251.0で確認済です。

Fantasy Zone (PS2) for HBMAME

HBMAMEではPS2版のファンタジーゾーンとして
ROMを読み込むドライバーが実装されていました。

タイムアタック版とプログラム以外は同一になっているようです

タイムアタック版の変換にあわせ
fz1_s16b_p00をODD/EVENで2分割すればOk
.a5がCRC:2e131b1dで.a7が8c6fe14dです。

差分はプログラムだけですから
HSPに下記を追記してあげればOKです。

;//cpu 
notesel filedat noteload "fz1_s16b.p00" : filesize = strsize
 writedata "fz1_s16b_p00.a07", $000000, $20000 
 writedata "fz1_s16b_p00.a05", $000001, $20000

もしくは、はむさんのROM masqueradeを使って
EVEN/ODDでそれぞれ手動でSaveDumpする方法もあります。

fantzone01.zipとしてタイムアタック版の必要分も入れてZIP圧縮すれば完了です。

コインを複数入れるとsの色がおかしいですね。
実機だとパッチ(消滅済)を当てないと最終面で問題が起きるようです。(海外フォーラムより)

追記していったら、可読性がダダ下がったので分割しました
これで現状できる範囲の変換は完了したとおもいます。

記述ミスや修正などありましたら
たいへんお手数ですがコメントまでお願いします。

HSPで単純バイナリカットができれば一発変換できますが・・・
自分は3.1をいまさら弄る気力がないので楽に走りました(スミマセン

しかしファンタジーゾーンやってると
STGってこれくらい素朴な方がホッとするなぁ・・・(下手くそ)