FM-7オリジナルのアクションゲーム「ウットイ (UOOTOY)」を、PC-6001mkII/6601/SRに移植してみました。MZ-2000シリーズ用を改造して動くようにしたものです。
PC-6001mkIIでウットイ
PiO 1986年5月号 p119-131掲載の、MZ-2500/2200/2000用ウットイへのパッチとデータ変換プログラムを公開します。当該号は国会図書館に所蔵されているので、遠隔複写サービスの利用が可能です (要登録)。
テンテン君を操作して、ゴール (点滅している床) を目指してください。隠れゴールのある面もあるようです。全50面です。
キー | 動作 |
---|---|
カーソル左右 | 移動 |
カーソル上 | ジャンプ |
スペース | ブロックを積む |
SHIFT | ブロックを消す |
ESC | 一時停止、一時停止解除 |
n | 次の面に進む (クリア済みの面まで) |
5面ごとにアルファベットのパスワードが出るので、タイトル画面で打ち込むとそこまでの好きな面が選べるようになります。カーソル左で一文字消去、リターンで入力終了。スペースを押すと面選択画面になります。カーソル左右で面を選び、リターンでスタートです。クリア済みの面から好きな面が選べます。
(※P6版ではパスワード文字のDとOは全く同じで見分けがつきません。ごめんなさい。AとR、MとNも判別が難しいですが、「UNTIL NOW PASSWORD」や「ROOM」の表示と見比べてみてください。)
移植までの経緯やプログラムについて、つらつらと書き留めてみます。ウットイ、ずっと憧れのゲームだったのです。広告を見ては、どんなゲームだろうと想像してワクワクしてました。ロードランナーやフラッピーなど、当時流行りだった面クリア型パズル風味アクションゲームは、多機種へ移植されることが多く、ウットイも複数の機種に移植されています。なのでそのうちきっとP6にも移植されるはず……そう思っていたのですが、結局移植されずじまいでした。(SR版がプログラムコンテストで入賞していますが、販売はされなかったようです)
そして2016年現在、ロードランナーやフラッピーは現行機で遊べるのに対し、ウットイは未だ遊べません。そのうちきっとPC版が開発されたりProjectEGGあたりで出たりするはず……そう思っていたのですが、いまだ移植されないままです。このままではウットイを遊ばないまま一生が終わってしまう、もうFM-7を買うかP6に移植するかの二択から選ぶしかない、そんな感じで移植を考え始めたのでした。(※2024年、Steam版が発売されました!)
とは言え、遊んだことも動いているところを見たこともないゲームを移植するのは無理があります。想像で作ったとして、あの日憧れたウットイと同じものが果たして遊べるのか。そんな時、「ウットイはKコンパイラを使って作られたので、他の機種への移植の際にはソースが流用できた」という話を見たのでした。じゃあKコンパイラをP6に移植すればいいんじゃないか?そう思って調べてみたところ、CP/Mで動くKコンパイラがあるのを知りました (I/O 1986年10月号掲載)。これ幸いと早速打ち込んだのですが、その後I/OやPiOをいくら探しても、ウットイのソースリストが見つかりません。どうもダンプリストしか掲載されなかったようです。残念。
しかしソースが公開されていないなら、編集部以外が移植したものは一体どうやったのかと思って調べてみたところ、PC-8801版はKコンパイラを使用したのではなく、アセンブラで一から書かれたものということでした。また、MZ-2000版ウットイは88版を元に移植したものとのこと。ならばこれらZ80で動くウットイを元にして、機種依存のある入出力部分だけ改造すれば、公式な仕様と同じウットイが遊べるのでは?そう考えて移植が始まりました。ちなみに88版でなくMZ版を元にしたのは、MZの記事にはメモリマップが載っていたことと、88版が全30面 (パッケージ版は100面だったようですが) に対しMZ版が全50面だったことが理由です。
MZ版では、2000-8CFFにデータをロードした後、グラフィックデータとメインプログラムをそれぞれ別の領域にコピーして実行しています。そのままだとP6ではVRAM領域がとれないので、グラフィックデータをずらして4000-7FFFの領域をVRAMとして確保することにしました。
P6版アドレス | MZ版アドレス | 内容 |
---|---|---|
2000-2BFF | 同 | プログラム、表示用データ、仮想画面など |
2C00-3FFF | 同 | 面データ |
4000-7FFF | (C000-FFFF) | VRAM |
856C-B10F | 556C-810F | グラフィックデータ |
B900-E5FF | 同 | プログラム |
E600-E8FF | P6用追加プログラム、スタック |
MZのキーマトリクスの資料が見つからず、ちょっと苦労しました。解析していて気付いたのですが、MZ版には隠しメッセージがあるようです。MZ版作者の名前と「TO TOMOKO」という表示が出るというもので、恐らく「ごらんトモコ、これは君のために作ったゲームなんだよ」「キャー素敵!」のようなやり取りがあったものと思われます。面選択画面で何かのキーを同時押しすると出るようなのですが、これが何のキーなのかよくわかりませんでした。P6版ではMODEキーを押すと出るようにしてあります。
MZ-2000の音源はPWMなのだそうで、ON/OFFの周期と長さでソフトウェア的に周波数とデューティが決まるもののようです。ウットイではデューティ50%のプログラムになっていました。P6版では、該当部分のプログラムの実行ステート数を数えて大まかに音程を合わせたつもりですが、音の長さは適当に調整しました。メロディのない効果音的なものなので、正確でなくてもいいかなーと。
表示に関しては、元のプログラムと同じく、RGB3プレーンのデータをそれぞれ書き込むようになっています。P6mkIIのスクリーンモード3のVRAMはRBプレーンとHGプレーンの2プレーン構成なので、RBの方はわざわざ二度に分けて書き込んでいる格好です。また、H(色相)ビットは常に1で、15色のうち8色のみ使っています。
グラフィックデータは機械的に変換しています。幸いMZ版のスクリーンショットを載せているサイトがあったので、確認しながらプログラムを書くことができました。変換方法としては、MZの解像度が640×200、P6mkIIの解像度が160×200なので、単純に横4ドットごとにORをとっています。文字が読みにくかったり針があまり鋭くなかったりしますが、まあそこそこ見られる表示になったんではないでしょうか。例外として、画面右側に表示される影付き文字については、4ドット中で一番多く使われている色を選ぶという変換をしています。
あまり痛くなさそうな針
元のプログラムはウェイトが入っているのですが、そのままではP6だと非常に遅くなってしまったので、ウェイトの量をある程度減らしました。1面で大体こんな速度だろうという風に適当に合わせましたが、本物をやったことがないので、果たしてこんなんでいいのかどうか……。キャラクタの多い面(5面など)では元々のウェイトがゼロになっているようなのですが、そういう面だとP6版では遅さが目立ちます。画面表示などにまだまだ高速化の余地があると思うのですが、とりあえずここまでです。
この辺の面は少々遅いです
当時の愛機がPC-6001mkIIだったのでモード5用に移植しましたが、SRに同様に移植するならどうなるでしょうか?320×200のより精細なグラフィックが利用できて良さげです。問題は、32KBのVRAMを確保できるかどうかでしょうか。MZ版のプログラムリストが約27KB、今回追加したプログラムの純増分は1KB以下なので、SR用のプログラムの分量が少し増えても、うまく配置できれば収まりそうな気がします。更に100面化も、とか考えると厳しいかも。
トップ > 雑多なもの > PC-6001mkIIでウットイを