FM TOWNS / MARTY用新作ゲーム「CELESTE Classic」

富士通が1989年に発売したパソコン「FM TOWNS」用新作ゲームとして、去年「DOOM」を移植したものの、実質FM TOWNS II MA/MX以降用でFM TOWNS全機種で動かせるタイトルではなく、巷では主流(?)の初代機となる灰色FM TOWNSやそれをベースに設計されたFM TOWNS MARTYでは遊べないという問題があったので他のゲームでそれらのスペックでも移植できそうなタイトルを検討していったら仮想ゲーム機エンジン「PICO-8」向けに作られていたフリーゲームCELESTE Classic」ならやれるかなということで移植してみた。

Googleドライブ - CELESTE Classic for FM TOWNS (2022年11月10日更新)

(使用したサウンドドライバ「MSVライブラリ for High-C V2.08」のファイルはSRCフォルダに一緒に同梱しています)

TownsOS V2.1 L31以上用、FM TOWNSエミュレータ津軽」「うんづ」、FM TOWNS MARTY実機でクリアまでできることを確認。

2005年辺りに海外の人がFM TOWNS MARTYで起動するゲーム(?)を作っていたようだけど、それ以来誰もMARTY用にはゲームを作っていないと思うので多分約17年ぶりに出たFM TOWNS MARTY対応ゲームかな。

 

毎日チマチマ移植作業をやっていって1か月くらい(時間かけすぎとか言わない)かけてとりあえず完成。SDL移植(Windows・3DS用、その派生でVita・PS3用)とかGBA移植とかSwitch移植とかネイティブ移植じゃない3DS・Switch向けのプチコン SmileBASIC版とか、DOOMと同じように有志移植が割とあるタイトルだが、プチコンを除くC言語移植は浮動小数点演算で計算されていたり音源がストリーミング再生だったりでソースコードをそのまま持ってきて移植はできなかったんで、PICO-8の内部計算が16.16計算の固定小数点演算なのでTOWNS版も同じく固定小数点演算となるコードにしたり、流石に元の尖った音色と一緒とはできず柔らかい音色となってしまうが矩形波三角波・鋸波・ホワイトノイズに近い波形をFM音源で作って鳴らすとか工夫することとした。

エミュレータ津軽」上では表示が問題なかったのにFM TOWNS MARTY実機上で動かしたところ、何故か主人公の髪の毛の表示がおかしかったり吹雪がすべて2ドット分の大きさで表示されてしまうという不具合が発生してしまった(MARTY実機で録画した上の動画参考)。とりあえず、実際にゲームクリアまで行けることは確認はしたのでこれで実行ファイルやソースコードを公開しておくが、エミュレータの問題かMARTYの問題か確認して、他にもある問題点と合わせて修復するかもしれない。(吹雪が2ドットとなる問題は津軽のスプライト縮小アルゴリズムの問題で、エミュレータ側で実機と同じアルゴリズムとなるアップデートが適用されたのを確認し、2022年9月14日版で修正。)

それと、サウンドドライバとしてVectorに置いてあった「MSV ライブラリ V2.08」を使用したのですが、どうもバグがありそうでBGMのテンポが乱れたり効果音の多重音声ができない、といった不具合があったのでどなかた既に閉鎖済みの公式サイトで配布されていた最終版(V2.08)のファイルをお持ちって方がいれば教えてください

上のスクリーンショットエミュレータ津軽」上で撮影したもの。

 

TownsOSがインストールされたHDDを接続しているTOWNS機なら任意の場所にゲームファイル群を入れてCELESTE.EXPを実行すればいいだけだけど、FM TOWNS MARTY 実機などでフロッピーからブートして動かしたいという人向けの解説。

まずはTownsOS V2.1 L31以降のCDからブート(以下の解説ではV2.1 L51を使用)

TownsOSが起動したら一番上にあるメニューから「ディスク」を選んでその中の「初期化」を実行

フロッピーディスクをドライブにセットし、「システムの複写」は「する」、「ディスクの種類」は「1.2MB[2HD]」、「ディスクの名前」は任意(自分はCELESTEとした)、で設定して「実行」ボタンをクリック。フォーマットと起動ディスクの作成が始まる。

起動ディスクの作成が終わったら、「ドライブ選択」からフロッピーディスクドライブを開いて表示されたウィンドウの右上角の水色のボタンを押して「ファイル」を選択、ファイル一覧が開くのでそこにSRCフォルダ・CELESTE.DOC・CELESTE.ICNを除く全ファイルをコピーする。間違っていなければ上のスクリーンショットのようになるはずだ(PICO8.PMBというのが入っているのがテスト版で作っていた残骸を間違って入れただけなので無視して)。

最後にTownsOS上のアイコンで「テキスト編集」というプログラムを実行し、フロッピーディスクドライブ上のAUTOEXEC.BATを開く、「:EXIT」の次の行に

「RUN386 CELESTE」

という行を追加して上のメニューから「ファイル」を開き「同名保存」を押してファイルを更新する。

あとはこのフロッピーからブートすればCELESTE Classicが立ち上がるはずだ。

 

 

 

元が8bit風仮想ゲーム機ということで見た目的には派手さはなく地味な画面かもしれないが、FM TOWNS用に移植する際は結構トンチな表示方法をしている。

 

PICO-8の画面は解像度128*128 16色 30fpsというスペックで、過去に書いた記事のとおりTOWNSのスプライト性能は60fpsを維持するのに16*16サイズのスプライトを(初期型で)最大227枚まで表示可能で、PICO-8の30fpsを基準とするなら切りのいい448枚くらいまではフレームレートを維持して表示することができるのでキャラクターや細かいオブジェクトのみならず背景スクロール・地形・舞い散る雪を含めてすべてスプライトで表示している。一部シーンで448枚を超えるシーンが発生するがその場合は背景スクロールの一部が非表示となって448枚に収まるようにしている。背景が単色なのであまり目立たないようにはなっている。固定されている地形だけでもビットマップ面に表示すれば?と思うだろうが忘れちゃいけない、TOWNSはスプライト・ビットマップ面の表示優先順位が固定となっているので、それで表示しようとすると今度は背景スクロールが難しくなる。

TOWNSのスプライト面の解像度自体は256*256と十分なものの、単純に元の128*128ドットの絵を2倍拡大して256*256相当に置き換えて表示してしまうと、FM TOWNSの31KHz画面モード時の実解像度が640*480ドットな関係で小さく画面上に表示されてしまったり、CRTCの機能で2倍拡大して表示すると縦512ドット相当となって実解像度の480ドットをはみ出して実質240ドット分しか表示されない。

そこで、TOWNSのスプライト機能の一つである1/2限定の縮小表示機能を使って1スプライトを8*8ドット相当にし、解像度はPICO-8版と一緒の128*128、それを3倍拡大して384*384相当にして640*480の画面上の中央当たりに表示している。これでもまだ黒縁部分の領域が広い画面となってしまうが、256*256の画面をそのまま等倍で表示するよりは1.5倍ほど大きくなる。

 

ビットマップ面に関しては二段ダッシュが可能となるオーブが出現する大箱を開いた際のフラッシュ演出で背景色が変わるところでしか使っていない。ビットマップ面に関しても解像度は128*128ではなく実際は16倍拡大されており実質16*16。単色なので解像度はどんなに低くても問題ないし、第一128*128の範囲に固定値を出力するだけの操作でも、386 16MHz 3ウェイト / 386SX 0ウェイト程度のCPU能力ではこの程度のことでも30fpsを維持できないほど非力。解像度を下げることは必須となる。