比例道
| フロントページ | 新着 | 一覧 |
<-domain ijino tamedesu

MZ80KによるAir War Aid

Air Warはゲーム上の1ターンが実際の2.5秒だ。60秒の空戦をシミュレーションするのに、24ターンを必要とする。1ターンの間に目視索敵、レーダー索敵、ロックオン、スロットル操作、空戦機動、武器の操作、発射したミサイルの飛翔経路決定など諸々を行う。これらの処理を1機ずつに対して独立に行うのだ。6機対6機の空戦を1分間シミュレーションするのに2,3時間かかる。これが災いしてゲーム自体はなかなか普及しなかった。しかし、戦闘機パイロットから見ても違和感のないシミュレーションだったため、米空軍のパイロットにもこのゲームの愛好家は居たと和訳のマニュアルに書いてある。
このゲームで一番つらいのは、サブヘックス単位の旋回角度を機体毎に覚えておかなくてはならないことだ。ゲーム盤はヘックスを利用しており、機体やミサイルの向きはヘックスの辺と角を両方使うようにしているため360/12=30度単位で表現する。ところが、これでは荒すぎるために、ゲーム上の移動では 15度単位で扱う。ゲーム盤上の駒の向きだけでは15度単位は表現できないので、各機体が盤上の向きから15度分の旋回をしていたか否かを覚えておかなくてはならないのだ。これが面倒で仕方がなかった。他にも覚えておかなくてはならないのは、降下で稼いだ勢い(これはゲーム上の仮想概念で実際の運動エネルギーとは異なるのだが、この不思議な概念でなぜかシミュレーションの精度があがっていた)、キャノンやミサイルや爆弾の残弾数、増槽投下の有無、被弾状況などだ。一応各機毎の紙のシートに記入するようになっていたが、いちいち記入していたらただでさえ時間のかかるゲームプレイがさらに長くなってしまい、プレイアビリティががた落ちになる。どうしても頭で覚えておかなくてはならない。
そこで、コンピューターでこのプレイを補助することを考えた。データベースに機体の状況を保存しておいて、更新/閲覧しながらプレイすれば良いのだ。当時はデータベースソフトなんてのは大人のサラリーマンの年収なみの価格で、とても子供には買えなかった。結果的にこれが良かった。もし買えていたとしても、現在のOracleやPostgreSQL程度の性能だろうから、 1機当たり数十項目のデータを検索、閲覧、入力、更新することを数秒のうちに完了させるなど、最終的にSQL問い合わせに帰着される標準インタフェースではまず実現できない。現在のGHzクラスのPCでもできないのに、当時のCPUクロックが高々4MHzのマイコンでできるはずがない。
データベースが買えなかったので自分でシステムを作り始めた。高速なデータアクセスと高速な表示、および高速なデータ入力が必要となることは分かっていたから言語は熊本のキャリーラボ社のWICSを利用した。当時BASIC全盛で一部の人がアセンブラを利用していた状況の中でWICSは画期的な言語だった。いわゆるコンパイラタイプの言語だったのだ。文法はC言語に似ていた。データアクセスの高速化のためにはメモリエリアを確保してポインタでアクセスするというのが、今も昔も常套手段であるが、WICSの場合はそれが簡単に記述できた。データ構造はAir Warに特化した固定構造だったので、データベースの構築自体はあっさり完了した。残る問題は高速入出力だ。
高速入力に関しては、データを入力するときに項目選択動作がはさまるのはどうしても速度的に不利になることに気付いた。そこで、選択動作なし入力にした。この結論にたどり着くのに試行錯誤のプログラミングでひと月はかかった。でき上がったものは何のことはない、現在の3Dゲーム(Doom等)で採用されている入力項目毎にキーボードのキーを割り当ててしまう当たり前の方式だ。エルロンを使って右に30度ロールしたらカーソル右キーを押し、60度ロールなら 2度押し、逆ロールに変えたら今度はカーソル左キーを押すという具合だ。すべての動作をキーに割り当てたものだから、キー数の少ないMZ80Kのキーボードのほとんどのキーが使われてしまった。高速出力に関しては、 VRAMダイレクトアクセスを使った。先ほどのロールを例にとるとカーソルキーを押した瞬間に画面上の機体が30度分ロールしなくてはならない。それ以外の表示は変えてはならない。これをprint文で実現しようとすると、行単位の処理しかできないから、同じ行に含まれる他の部分のデータ表示を考慮せねばならなくなり、処理が重く実用に耐えなくなる。そこで、VRAMを直接CPUでアクセスしてコードを送り込むようにした。高速化のために走査線の帰線区間を待たずに問答無用でコードを書き込んだ。CPUとRAMDACがVRAMに同時アクセスした場合は画面がちらついたが、美術鑑賞ではなく戦闘をしているのだ、そんなことは気にならない。
こうやって完成したAir War Aidはとても満足の行く性能で、余計なことを覚える必要がなくなった分、戦術に没頭することができた。今まで人間の処理能力的に不可能だった50機対 50機などという大規模空戦もシミュレーションできるようになった。50機も指揮する場合はさすがにこのシステムを使っても大変なので、後で編隊指揮機能を追加した。ある機体グループの入力を代表的な1機へのデータ入力で済ませてしまう機能だ。この機能も現在のたいていのシミュレーションゲームには付いているものだ。
このシステムの欠点はキーボードのアサインを覚えるのがとても大変なことだ。作者の私には問題なかったが、初めての人には敷居が高かった。こればっかりはどうしようもなかった。今でもDoomなどのプレイではキーアサインを覚えるのは大変なので、キーボードで操作する限り、この問題は常につきまとうのだろう。
SPI Air War とフォークランド紛争