FM TOWNSに3D FPS「Quake」を移植した話

FM TOWNS界が震撼(Quake)する。

というわけで1989年に発売された富士通のパソコン「FM TOWNS」に1996年にid Softwareから発売された3D FPSQuake」を移植してみました。

これで「DOOM」「Wolfenstein 3D」とid SoftwareクラシックFPS 3部作はすべてFM TOWNSに移植できたことになる。PC-98版は公式でDOOMとWolfenstein 3Dが出たがQuakeは発売されず、X68000DOOMしか非公式移植されていない。つまりFM TOWNSの勝ちである(意味不明)。

要FPU内蔵のCPU・メモリ16MB・ハイレゾPCM、機種で言うとFM TOWNS II MXで俗にいう白TOWNSが最低動作環境、動作の重さも相まってできればFSB 66MHz改造とCPU換装(133MHz駆動以上)を行ったFM TOWNS II HB・HCを推奨。

※追記:実機MA・CPU 5x86、HC・CPU Pentium 90MHzおよびODP 180MHzでの動作報告あり。

FM TOWNSエミュレータでは80387オプションを設定した津軽(v20240223以降)でしか動きません。「うんづ」はFPUが実装されていないため起動不可

実行ファイルとソースコードのダウンロード先(Github)

シェアウェア(体験)版か製品版のpak0.pak・pak1.pakをid1フォルダに置き、実行ファイル(QUAKE.EXP)を起動させれば遊べます。

製品版はSteamやGOGで購入可能。シェアウェア版はSDLQuakeのサイトにある(Shareware Dataというのがそれ)ようなのでそこからダウンロードしてきてください。

 

DOOMの時と同じくTownsOS用のアイコン(QUAKE.ICN)も作成

 

FM TOWNSエミュレータ津軽」(FREQ 66設定)での動作映像

 

以下はFM TOWNS版の現時点での仕様

  • フレームレートは486 66MHz(TOWNS II MX)で約4fps。ゲームになりません!
  • ソースコードはすべてC言語。オリジナル版は描画部分をアセンブラでやっていて同じ486 66MHzで約6~7fps出ているようなのでやはり速度的に不利。
  • 画面解像度は320*240のみ。プログラム的には640*480画面も用意しているが現状でも重すぎるので設定できないようになっている。
  • 効果音こそ鳴るものの処理落ちしまくっている関係と、プログラム的には大雑把な再生位置しか取得していない関係で音割れが発生。
  • CD音源による音楽再生は非対応。
  • マウスルック対応。
  • ネットワーク対戦非対応。
  • ゲームに付属されているデモの再生と実ゲームで1ステージのクリアまでは確認したが、フレームレートが出なくて続けるのが難しくそれ以上は試せていない。

 

話は変わり、なんでこんなものを作ってしまったかというと事の発端はFM TOWNSエミュレータ津軽」がFM TOWNSWindows 95を動かせるようになったこと。

TOWNS版Win95の動作検証でWinQuakeを動かせないか試すと、未実装のFPU命令があったがそれらを自分で追加して動かしてみたところ、キーボードが反応しなかったり動作速度が遅すぎるといった問題はあるにしろ描画やデモの再生は問題なく行えることが確認できた。

そしてWindows 95版とはいえTOWNS上、エミュレータ上で動かせるなら「もしかしたら・・・いや、もしかしなくてもFM TOWNS OSネイティブで動くQuakeが作れるんじゃ?」とまたどうしようもない魔が差してしまい移植作業開始。2月の終わりごろに初めてこの記事を書いている昨日(3月10日)完成。作業時間2週間。まあ殆どフレームバッファ先のメモリを確保していなかったとかいうしょうもないバグ(グラフィックが問題なく表示されてたのに不具合が出るのはデモ再生と音周りなんで気づかなかった)に悩まされてただけなんで、それ無かったら1週間で終わってたかもしれない。

FM TOWNS 誕生35周年には間に合わなかったけど、そのお祝いも込めて。

 

やけに移植期間短いな、と思われるかもしれないが、FM TOWNSのプログラムを何度かやって流石にノウハウを積んできているのと、ソースコードのi_*.cというファイル名のコードだけ修正すればその機種用の「DOOM」が作れた時と同じく、実はQuakeも末尾に機種名が書かれたファイルを弄るだけでその機種用のQuakeが作れる

具体的に言うと「sys_***.c」「vid_***.c」「in_***.c」「snd_***.c」「net_***.c」「cd_***.c」という6ファイルのみWinQuakeのソースコードにはWindowsだけじゃなく元のDOS版やLinux版まであり、更に空関数で記載されて新たに記述しやすい「***_null.c」というものまである。マジかよ。

1996年のゲームでこんなに移植しやすいはずなのに、デジカメや電動歯ブラシにまで勝手移植版が作られるDOOMと違いそこまで流行らないのは、やはり動作環境が高すぎ(FPUが組み込まれたCPUと10MB以上のメモリ)で組み込み系のマシンに移植するには荷が重すぎるのが原因なんでしょうね。皆で流行らせよう、Quake勝手移植。

今まで移植してこなかったのはちゃんとQuakeソースコードを確認しなかった、津軽エミュレータのFPU実装がどこまで正確かわからないのでバグが出ても原因究明が難しくなる(WinQuakeが問題なく動いてるので動作に必要なFPU命令は実装できていることが確認できた)、移植できても遊べるレベルのフレームレートが出ないとわかりきっていたので優先度が低かったからですね。

 

FM TOWNSQuakeとはちょっとズレますが、時間計測にはVsync割り込みを使用しておりFM TOWNSDOOMと同じくHISライブラリ(ちょもらんま氏作 Oh! FM TOWNS 1995年8月号付録のCD『天晴 Vol.2』)を再度使用し、DOOMではTownsOS標準のWAVE APIで音を鳴らしていたが、Quakeではセガサターン用ソフト「だいなあいらん」をFM TOWNS上で動かす「だいなふぉとす」のソースコード内に入っていたpdrv16.lib(PEN,miyamoto氏)を使用しました。

pdrv16.lib単体での再配布が許可されているか記載がないのでQuake for FM TOWNSソースコード内には入ってませんが、「だいなふぉとす」そのものは転載可能という記述があるので必要な場合はこちらから丸ごと取得してください。

『だいなあいらんプレーヤー for Towns OS』ダウンロード