COMSIGHT

『**COMSIGHT**』（コムサイト）は、1987年にテクノソフトより発表されたアルゴリズム構築型シミュレーションゲームである。

## 概要
本作は3Dポリゴン表示されたタンク同士の対戦ゲームである。本作最大の特徴は「プレイヤーはタンクを直接操作するのではなく、タンクに指示するためのアルゴリズムをプログラムとして記述することで、間接的にタンクを操作する」「タンクを操作するプログラムを、対戦プレイ中は変更できず、対戦前に事前に作成しておく必要がある」という点にある。つまり、タンク同士の対戦プレイ中、プレイヤーはタンクの挙動を見守ることしかできないというわけである。

タンクには「エネルギー」「シールド」「ダメージ」が設けられており、「エネルギー切れとなる」「シールドが破壊され、蓄積されたダメージが許容範囲を超える」「プログラムエラーが発生する」ことで負けとなり、相手側が勝者となる。時間は無制限であるが、動かなくともエネルギーを徐々に消費するため、実質は有限時間で勝負が付く（あるいは引き分けとなる）システムとなっている。各プログラムには対戦成績（対戦数と勝ち数）が記録される。

タンクに指示するプログラムはBASICに似た言語である「BATTLE PROGRAMMING LANGUAGE（BPL）」が用いられており、各種命令（移動、旋回、索敵、ミサイル、ビーム、待機、あるいは内部計算など）に応じて消費エネルギーと処理時間が異なる仕組みとなっている。索敵に成功すると相手の位置が相対座標として取得でき、相手の行動を先読みして現在の相手位置からずれた場所を攻撃する（但し、内部計算にはそれ相応の時間が掛かる）といった凝ったプログラムとすることも可能である。また、文法エラーや0除算など、プログラムエラーが発生するとその時点で自爆してしまい、負けとなってしまう。

発売当時は、パソコン通信を用いた対戦、テクノソフト主催のバトルコンテストなども行なわれていた。

ロボットやタンクなどの対戦ゲームで「プログラムによって、プレイヤーキャラクターの挙動を決定する」「プレイヤーはゲーム中、プレイヤーキャラクターの挙動を直接操作することができない」という性質を持つゲームは、他にも「ロボットコンストラクション R.C.」（エレクトリックシープ）、「カルネージハート」（アートディンク）、「Robocode」（IBM）、「RealTimeBattle」（オープンソースもの）などがあるが、本作は同ジャンルにおいてかなり初期の作品と言える。

## ゲーム内容

### BATTLE（対戦）
前述の通り、ゲーム内容は1対1のタンクバトルとなっている。事前に作成したタンクを2台用意し、両者を対決させるという操作となっており、その操作を行なった後はプレイヤーはタンクの動作に関与することはできない。メーカー作のタンク8種がゲームに始めから用意されており、対戦者に「COMPUTER」を選択することでこれらのタンクとの対戦が可能となる。これらのタンクのプログラムソースは見ることはできない。プレイヤーのタンクのプログラムソースは、ゲーム中も実行中の処理に該当する部分が逐次表示されるようになっている。（非表示にも設定出来る）

ゲーム開始後、各タンクには「エネルギー」「シールド」「ダメージ」ゲージが設けられる。「エネルギー」ゲージは処理に応じて減少する。タンクはプログラム指示によって「ビーム」や「ミサイル」で相手を攻撃することができ、攻撃を受けると「シールド」ゲージ減少する。「シールド」ゲージが失われる、それ以降受けた攻撃によって「ダメージ」ゲージが増大する。先に「エネルギー」ゲージが失われるか、「ダメージ」ゲージが許容範囲を超えると、負けとなる。また、これらのゲージに関わらず、プログラムエラーが発生するとその時点で負けとなる。

### CREATE（タンク作成）
タンクの性能は、大きく2種類の要素によって決定される。一つは「タンクのタイプ」であり、もう一つは「プログラムの性能」である。

タンクは以下の8種類のタイプが用意されており、タイプによってシールドの方向特性（前方からの攻撃に強い、側面からの攻撃に強いなど）に違いがある。
* CIRC：全方位均等なシールドを持つ。
* MASH：やや前後に強く、やや側面に弱いシールドを持つ。
* SIEVA：シールドは前方(斜め前も含む)に特化して強く、後方(斜め後ろを含む)にはほとんどシールド効果を持たない。つまり背後を取られると危険なタイプ。
* AGLEX：シールドは前後左右に特化しており、斜めからの攻撃に弱い。つまり旋回中に攻撃を受けたり、ミサイルを使用した斜め方向からの攻撃に弱いタイプ。
* VOA：シールドは斜め方向からの攻撃に特化し、前後左右からの攻撃に弱い。つまり、正面からのぶつかり合いに弱いタイプ。
* HOGS：前後に特化して強く、左右に弱い。MASHの特徴を突き詰めたタイプ。
* ZAR：左右に強く、前後に弱い。
* WEITZ：前方に弱く、後方に強い。

プログラムには、BASICに似た言語である「BATTLE PROGRAMMING LANGUAGE（BPL）」を使用する。指示プログラムはテキストベースで作成する、まさしくプログラミングを行うのと同様の操作となっている。シールドの強弱が面によって異なるタンクを使用する場合、シールドの弱い面（つまり弱点）を相手に晒さないような動きとなるようにプログラムを組むことが、タンクの性能に影響を与える。以下は、単純なプログラムの一例である。なお、これはあくまで説明のためのものであり、アルゴリズムとしては貧弱、処理時間の掛かるIF文を多用しているなど処理効率的にも粗悪なものである。なお、実際にはコメント内には全角文字を含めることはできない。


```
1000 '初期化処理
1010 S=64
2000 '四方をある範囲で索敵し、その結果を変数に保持
2010 SEARCH S: X=@X: Y=@Y: R=@R
2020 '索敵結果によって分岐
2030 IF R <> 0 THEN 4000
3000 '索敵失敗の場合の処理
3010 FORWARD '前進
3020 LEFT    '左に旋回
3030 S=S*1.2 '索敵範囲を広げる
3040 GOTO 2000
4000 '索敵成功の場合の処理
4010 IF Y=0 THEN TURN X: BEAM 1000                '真横に敵がいれば、その方向を向いてビームを放つ
4020 IF X=0 THEN BEAM @ME/20                      '正面に敵がいれば、残りエネルギーに応じたビームを放つ
4030 IF R<3 THEN MISSILE X,y: BACK                '一定以上敵に近づきすぎている場合は、ミサイルを撃った後、離れる
4030 IF R>8 THEN MISSILE X,Y: MOVE R/2: S=S*0.6   '一定以上敵から離れていれば、ミサイルを撃った後、相手に詰め寄る
4040 GOTO 2000
```


サンプルプログラムでも一部使用しているが、以下の変数を使用することが可能となっている。

* @ME @MS @MD：自機のエネルギー残量、シールド残量、ダメージを表す
* @EE @ES @ED：敵機のエネルギー残量、シールド残量、ダメージを表す
* @X @Y @R：索敵成功時の敵の相対位置（Xが左右方向、Yが前後方向、Rが相手との距離、いずれも8で一マス分の距離に相当、索敵失敗時には@Rが0となる）
* @D：索敵成功時の敵の向き（自機と同じ向きなら0、90度右を向く度に+16）

上記のように、敵との相対状況によって処理を大きく変えることができるなど、プログラムを用いてかなりきめ細かな自機の制御が可能となっている。
プログラム作成時の支援として、2Dのステージ上に自機と標的（固定式であり、移動はしない）を設置しての動作確認を随時行うことが可能である。

## 関連項目
* 類似ジャンルのゲーム
** ロボットコンストラクション R.C.（エレクトリックシープ）
** カルネージハート（アートディンク）
** Robocode（IBM）
** RealTimeBattle（オープンソースもの）