【コムサイト PC88 COMSIGHT TecnoSoft A】
コムサイトはタンクの行動プログラムをBPLと呼ばれる言語で組み、
自動で対戦させるゲーム。
フィールドの広さは16x16ブロック(1ブロック=1マス分)
1ブロックは更に細かい座標であるセクターに分けられる。(1ブロック8セクター)
移動などはブロック単位、ミサイル攻撃の座標指定などはセクター単位で行われる。
ダメージが100になるか、エネルギーを使い果たすか、プログラムが終了したら負け。
初期エネルギーは30000
攻撃方法はBeamとMissileの2種類
タンクは外見とシールド形状の異なる8種類。
攻撃が命中するとまずシールドがダメージを受け、
シールドが無くなるとダメージが蓄積していく。
シールドは時間経過で自動回復するが、エネルギー消費が激しくなる。
ビームは真正面に攻撃を行う。
ミサイルは指定座標に攻撃できるが、攻撃範囲は前方45度未満の範囲に限られる。
BATTLE PROGRAMMING LANGUAGE(BPL)
BASIC風の言語で行番号の後に命令文を書く。
使用可能な変数:A〜Z、A0〜W9
(A〜Wまで後ろに0〜9を付け配列変数として扱える)
XYZはインデックスレジスタとして使用可能
(『X=0:A(X)=1』と『A0=1』は同じ動作をする)
命令毎に動作クロックが設定されており、
命令を実行する毎にゲーム内時間が経過していく。
命令の後ろに実行値を指定するタイプの命令は、
数値が0の場合、クロックを消費しない。
またIF文などはクロックを消費するが、
論理演算をするだけではクロックは消費されない。
そのため高速で無駄なく動作するプログラムにするには、
論理演算を組み合わせ、動作させたいときは必要な数値、
動作させたくない場合は0になるように組んでいくことになる。
SEARCH <数値、変数>
サーチ命令。 命令の後ろに索敵する範囲をセクター単位で指定する。
指定範囲は1〜64 指定範囲を超えると(-1や65など)
イリーガルファンクションコールエラーになる。
※フィールドは15x15なので『SEARCH 64』(8マス)の場合、
必ず敵か壁を見つけることができる。
サーチした情報は以下のレジスタに格納される。(セクター単位)
@X :X座標
@Y :Y座標
@R :自タンクと敵タンクとの距離
@D :敵タンクの向き
敵を見つけた場合は敵、敵が見つからなかった場合は壁の座標が格納される。
敵も壁も見つからなかった場合は0
タンクの方向は0〜63。自タンクと敵タンクが同じ方向(↑)を向いているときは0。
←16、↓32、→48。 旋回中はその間の数値となる。
指定数値毎に16エネルギー消費する。
敵タンクをサーチできた場合、以下のレジスタの内容も更新される
@EE :敵タンクの残エネルギー 30000〜0
@ES :敵タンクの現在のシールド値 0〜100
@ED :敵タンクの受けているダメージ量 0〜100
参照できるのはサーチで確認した直後の数値なので注意が必要。
またサーチに関係なく自タンクの情報は常に確認できる。
@ME :自タンクのエネルギー
@MS :自タンクのシールド
@MD :自タンクのダメージ
@Rレジスタは敵を索敵出来たかどうかの判断基準に使うことができる。
(敵を見つけられなかったとき、@R=0)
再燃キター
1乙
BEAM <数値、変数> 1クロック※
使用エネルギー量を指定する。
真正面にビームを発射し、敵タンクに命中した場合ダメージを与える。
使用エネルギー量が多くなれば与えるダメージも増す。
バグなのか仕様なのかは不明だが、
特定の値の場合ダメージが大きいことが確認されている。
※BEAMコマンドに限らず値を変数で指定した場合、
変数の内容が0の場合、何もせず消費クロックも0になる。
MISSILE <X座標>,<Y座標>,<使用エネルギー> 1クロック
値は数値でも変数でも指定可能。
攻撃範囲は前方45度以内。
範囲外の場合、ミサイルは発射されない。
また、座標として指定可能な数値は0〜64までで、
エネルギーは0〜30000まで指定可能。
指定範囲を超えた場合エラーとなる。
指定座標に対し、ミサイルで攻撃する。
ミサイルは着弾までに時間がかかり、飛翔速度は1クロックに2セクター進む。
(タンクの移動速度の2倍)
敵タンクが自タンクの1マス前(0,8)にいる場合、
その前後3セクターまで命中する。
(X座標-3〜+3、Y座標5〜11)
BEAMは特定数値のみだが、MISSILEは一定値以上のエネルギーを
消費することで、一撃で敵タンクを撃破可能である。
TURN <数値、変数> 16クロック
正の値のときは右、負の値のときは左に旋回する。
0の時は旋回せず、クロックも消費しない。
旋回が完了するまで、次の命令は実行されない。
非常に隙が大きい行動なので、相手攻撃範囲での旋回は避けた方が懸命。
MOVE<数値、変数> 8クロック
正の値の時は前進、負の値のときは後退する。
指定可能な数値は-15〜15まで。
指定数値分のブロックを移動する。
0の場合、移動は行われず、クロックも消費しない。
移動中のタンクは、1クロックに1セクター進む。
一旦移動を開始したら、移動終了するまで次の命令は実行されない。
壁や敵タンクに衝突した場合、ダメージを負うので注意が必要。
移動に関しては専用命令も存在する。
FORWARD 前進
BACK 後退
RIGHT 右90度旋回
LEFT 左90度旋回
数値の指定などはなく、命令単体で機能する。
必ず指定行動を行い、クロックも消費される。
ただし、これらの命令に関しては強いタンクを作ろうとする場合、
全く使用されないと思われる。
同様にIF THEN ELSE、GOSUB RETURNなどの制御命令も使用可能ではあるが、
意図的に使用を避けられることになる。(それだけで無駄にクロックを消費するため)
IF文などを使わずに処理を分岐させる方法についても後ほど解説したいと思う。
GOTO <行番号> 1クロック
指定した行番号へ飛ぶ。
プログラムループを作るため、プログラム末尾に
GOTOが1回使用されるだけの形を目指すことになるのではないかと思われる。
PRINT <"文字列"、変数> 1クロック
文字を表示する。 デバッグ時に便利。
バトル中には全く役に立たない命令なので、確認後は
消してしまうか、コメントアウトする。
使用例:
10 PRINT "X="X,"Y="Y など
自タンクが思ったように動作しない場合、変数の値を表示させることで
問題のある部分を探すのに役立つ。
TROFF
トレースオフ。
プログラム実行中、リスト表示が流れないようにする。
PRINTで表示した内容が読み取り安くなる。
基本的にデバッグ時以外には不要なコマンド。
(PRINTと共に使い、戦闘中にAAやメッセージを表示させたり……してどうする)
プログラムの中に含まれない命令
LIST
プログラムリストを表示する。
LIST <行番号>-<行番号> :指定行を表示
LIST -<行番号> :行番号までを表示
LIST <行番号>- :行番号から表示
RUN
仮想モードでプログラムを実行する。
仮想モード実行中はスペースキーで1クロック毎の動作をコマ送りで確認できる。
実行中もESCでポーズをかけ、F1のメニュー操作から
敵タンクのダミーの位置を変更したりできる。
RENUM
行番号を整理する。
行番号を振りなおしたいときに。
※
ちなみにプログラムは4096バイト(半角文字4096文字分)以内で組む必要がある。
しかしながら、行番号はその制限に含まれない。
行番号を1刻みで小さくしても容量を稼ぐことはできない。
算術演算子 +-/* はもちろん使用可能。
ABS(<数値、変数、式>) :絶対値(正負関係なく、正の値にする)
SGN(<数値、変数、式>) :符号(正ならば1、負ならば-1、0なら0を返す)
例:
X=ABS(5-8)
Xの値は-3ではなく、3になる。
X=SGN(@R)
@Rの値が0ならば0、それ以外は1になる。
(@Rは負の値をとらない為)
論理式
『()』カッコでくくった中の比較演算子が正しい場合-1、正しくない場合0になります。
使用例:
10 X=(@Y>=3)
@Yが3以上のとき、Xは-1。
@Yが3未満のとき、Xは0になります。
比較演算子やAND、OR、NOTといった論理演算子については、検索すれば
色々な解説が見つかると思うのでひとまずは簡単に説明を終えます。
使用例:
10 X=3
20 X=((X+2)AND 3)
Xの値は1になる。(2進数で5は1001、3は0011、論理積は0001になる)
変数で扱える数値の限界は、最小値は -32768、最大値は 32767です。(short型)
49 :NAME OVER:2007/02/13(火) 20:59:38 ID:???
図解 @X@Yの値(自は上を向いている)
圏内の時 相対的な敵座標
囗囗囗囗囗壁
囗敵囗囗囗壁
囗囗囗囗囗壁
囗囗囗囗囗壁
囗囗囗自囗壁
壁壁壁壁壁壁
@X=-16 @Y=24
圏外の時 近い側の壁までの距離(つまり絶対座標がわかる)
壁壁壁壁壁壁 囗囗囗囗囗壁
壁囗囗囗囗囗 囗囗囗囗囗壁
壁囗囗囗囗囗 囗囗囗囗囗壁
壁囗囗囗囗囗 囗囗自囗囗壁
壁囗囗自囗囗 囗囗囗囗囗壁
壁囗囗囗囗囗 壁壁壁壁壁壁
@X=-24 @Y=32 @X=24 @Y=-16
敵の向きと@Dの関係
囗囗囗囗囗囗囗囗囗
囗_0囗16囗32囗48囗
囗↑囗←囗↓囗→囗
囗囗囗囗囗囗囗囗囗
囗囗囗囗自囗囗囗囗
サンプルプログラム
10 SEARCH 64
20 Q=-(@R=0):R=-(Q=0)
30 S1=ABS(@X):S2=ABS(@Y)
40 S3=SGN(@X):S4=SGN(@Y)
50 B=(S1=0)*(S4>0)*R
60 BEAM B
70 X=-(S2>S1)*@X-(S2<=S1)*(S2-1)*S3
80 Y=S2
90 M=100*((S2-S1)>-8)*(S4>0)*R
100 MISSILE X,Y,M
110 T=-S3*(S1>@Y)*R+S3*(S4>0)*Q
120 TURN T
130 V=-(@Y>16)*R-(T=0)*Q
140 MOVE V
150 GOTO 10
サンプルプログラム解説 その1
10 SEARCH 64
最大範囲でサーチします。 敵か壁のどちらかは発見できます。
20 Q=-(@R=0):R=-(Q=0)
敵が見つかった場合と、見つからなかった場合で行動を変化させる為に使います。
@R=0のときはサーチ範囲に敵はいなかったので、探してうろつくことにします。
30 S1=ABS(@X):S2=ABS(@Y)
40 S3=SGN(@X):S4=SGN(@Y)
サーチ結果で得たX座標とY座標の絶対値と符号を用意します。
50 B=(S1=0)*(S4>0)*R
60 BEAM B
ビーム攻撃をします。
(S1=0) ←サーチ対象がが真正面か真後ろの時には-1
(S4>0) ←サーチ対象が前方だった場合には-1
R ←サーチ範囲に敵がいた場合1、いないときは0になります。
全てを満たした場合、前方にビーム攻撃を行います。
つまり、サーチの結果、真正面に敵タンクを発見したらビームを発射します。
どれか一つでも満たさない場合は0になり何もしません。
(この場合、使用エネルギーはたったの1なので、威力の期待はできません)
サンプルプログラム解説 その2
70 X=-(S2>S1)*@X-(S2<=S1)*(S2-1)*S3
80 Y=S2
90 M=100*((S2-S1)>-8)*(S4>0)*R
100 MISSILE X,Y,M
ミサイル攻撃します。
-(S2>S1)*@X Y座標の方が大きい場合、45度に納まるのでX座標はそのままです
-(S2<=S1)*(S2-1)*S3 前方45度に収まらないとき、X座標の指定をY座標-1にします。
Y座標は正の値で指定しておきます。
サーチした対象が前方にあり、前方45度よりもやや広い程度の
範囲内で敵タンクを確認していれば攻撃します。
110 T=-S3*(S1>@Y)*R+S3*(S4>0)*Q
120 TURN T
確認したY座標よりもX座標の絶対値が大きいとき敵方向に旋回します。
敵を見つけていなくて前方に壁があるとき、側面の壁のない方を向きます。
130 V=-(@Y>16)*R-(T=0)*Q
140 MOVE V
敵がいて確認したY座標が16よりも大きい場合、前進します。
敵がいなかった場合、旋回しなかった時に前進します。
150 GOTO 10
10行目まで戻って繰り返し処理を行います。
このように論理式の組み合わせで、自分が行動させたい時には必要な数値、
行動させたくない条件で0になるように掛け算や足し算で組み合わせていきます。
自分のタンクを作る方針をどう決めればいいのか?
勝つためにどうするか、勝利条件について考えてみる。
エネルギーが切れたら負け
@無駄なエネルギーは使わない
シールド強度を下げ、燃費を良くする。
無駄撃ちで消耗しない。
敵との距離に合わせサーチ範囲を限定し、消費を抑える。
A相手にエネルギーを使わせる
ミサイルを命中させ、エネルギー消費を増大させる。
ダメージが100になったら負け
@敵の攻撃を喰らわない工夫
一箇所に長く留まらない
攻撃範囲から逃げる
A先に倒す
命中させる工夫
必中の条件なら一気にトドメをさす。
B壁にぶつからない
移動制御の工夫
プログラムが終了したり、エラーになったら負け
⇒エラー原因になる部分は修正する
これが全てではないかもしれませんが、自分はこんな風に考えてます。
敵タンクの旋回終了までのクロックと旋回後の方向確認
※Tecno-Softが用意してくれたサブルーチンの2番煎じ。
※SEARCHコマンド直後に使ってください。
※A,B,C,D0-D2 レジスタを使用します。
※d2に旋回終了までのクロック、Cに旋回終了後の向きが入ります
※動作保障はしません。使う時は自己責任でお願いします(^^;
100 D0=@D ;敵の向き
110 A=(@D/16*16) ;0〜15=0、16〜31=16、32〜47=32、48〜63=48
120 A=-(A<>D0)*64 ;敵が旋回中(旋回中のハンパな角度)だったら索敵範囲指定
130 SEARCH A ;再サーチ(旋回してないなら再サーチしない)
140 D1=@D ;再サーチ後の敵の向き
150 A=(@D/16*16)
160 A=(A<>D1) ;旋回終了しているかどうか
160 B=(D0-D1)*A ;旋回方向計算
170 A=D1-(15*(B>0)) ;旋回方向に合わせて補正。
;半時計回りなら+15。
;余りを切捨てるので時計回りはそのままでOK。
180 C=-(A/16*16)*(A<64) ;旋回終了後の方向。補正後64を超えたら0に。
190 D2=(C*B)-(D1*B) ;旋回終了までのクロック数計算(回転終了なら0)
とりあえず説明については以上です。
長々と失礼いたしました。
解らないことなどあれば、気軽に質問してください。
わかる範囲でお答えします。
コムサイト関連の雑談も歓迎です。
12 :NAME OVER:2006/12/09(土) 22:54:22 ID:???
88スレから情報引継ぎ
当時テクノソフトがBBSを開いていて専用通信ソフトがあった
対戦コンテストが開かれた
1 MOVE 15:TURN 1:GOTO 1 の逃げるだけマシンは結構勝つ
1定の値の奇数ビームは破壊力大の裏技があった
>>31の1行タンクは15マス進み、右に旋回するだけですが、
案外厄介な相手です。
サーチすら行わないため、敵を探して攻撃するタイプのタンクは
エネルギー消費の差で負けてしまう可能性があるのです。
最初から用意されているタンクに対する勝率もなかなか良く、
敵からの攻撃があるまで動かないGargoileに対して相性が悪いくらいです。
(正面を塞がれてそのまま撃破されるパターンも相手がMinkyのときに確認)
余談ですが、自分のタンクは最速で逃げ回るタンクの対抗策として
偏差射撃を行って命中数を稼いでいるので勝てます。
実はその分だけ普通のタンクに対しては無駄な攻撃行動を取っているので、
敵のタイプを判断して無駄撃ちを減らせないか模索中だったりします。
このエネルギー負けという条件が、コムサイトを面白くしていると思います。
(個人的にはエラー発生で自爆というところも大好きです)
今まで解説してきた論理式を組み合わせるプログラムは、
極限の1クロックが致命的になる状況を避け、相手よりも
手数を出すことで有利なることを目的としたテクニックです。
ですが、必須ではありません。
遠距離ではその分だけ余計にエネルギーを
消費してしまいがちという欠点もあります。
ただでさえ敷居の高いゲームですので、IF文で1クロック消費しても
それが致命的な遅れに繋がらなければ良いと思います。
具体的には敵との距離が近く攻撃を受ける可能性がある状況を
優先して処理し、次の行動になるよう不要な処理を飛ばしたり、
旋回で長く留まった後はすぐにその場を離れるよう移動もセットで
組み込むなどすると良いかもしれません。
(IF文などで判断するタイミングを旋回後に入れないようにする)
>>2 お疲れ様ですw
Apple2の元祖ゲームはMuse SoftwareのRobot Warだと思います
因みにMuse Software社は恐らく現在全盛ののfps系ゲームの元祖である
キャッスルウルフェンシュタインを開発した会社でもあります
>>34 なるほど、そうでしたか。
ありがとうございます(^^
CoreWarsもテクニカルで面白いですよね
まるでウイルスを作っているようで
横から失礼
>>25のサンプルプログラムを算術演算から論理演算に置き換えてみた
10 SEARCH 64
20 Q=@R=0:R=NOT Q
30 S1=ABS(@X):S2=ABS(@Y)
40 S3=SGN(@X):S4=SGN(@Y)
50 B=1 AND R AND S1=0 AND S4>0
60 BEAM B
70 X=@X AND S2>S1 OR S3*(S2-1)AND S2<=S1
80 Y=S2
90 M=100 AND R AND S2+8>S1 AND S4>0
100 MISSILE X,Y,M
110 T=S3 AND S1>@Y AND R OR -S3 AND S4>0 AND Q
120 TURN T
130 V=1 AND(@Y>16 AND R OR T=0 AND Q)
140 MOVE V
150 GOTO 10
人によってはこのほうが理解しやすいかもしれない
ちなみに元のソースより9バイト余分に消費します
ポイントは、
数式 AND 論理式 AND 論理式 AND …
という形で、論理式が真なら数式の値、偽なら0になります
メモリ残量が気になるほどになってくれば、
元のソースのように算術式を利用することになるでしょう
>>38 これは盲点でした。
確かにその方が理解しやすそうですね。
自分も最初はANDやORを使って記述していたものが、
いつしか算術演算子で記述する方が楽で
それがすっかり定着してしまっていたようです。
あの当時の小さいメモリでデバッグモードもあったんだよね。
しかも戦闘時はマルチスレッド(2ソース)の実行で3D表示。なかなか凄い。
前スレから引き出し。
レーザーは1クロックで全部、ミサイルはタンク速x2、一升移動は8、回転は16クロックだったと思う。
相手当たり判定は中心から+3まで
ビームは1クロック消費で即相手に当たる 距離は関係ない
1クロックエネルギー消費量=DL(デェフェンスレベル)+2
シールドは1クロック1回復
1クロックシールド回復エネルギー消費量=DL*3+37
壁や敵にぶつかったときのシールドダメージ=(16-DL)*2+34
CIRC 円状均等
MASH 前後楕円状
SIEVA 前方扇状
AGLEX 前後左右突出
VOA 斜め四方突出
HOGS 前後突出
ZAR 左右突出
WEITZ 後方扇状
20年の謎は解き放たれた
ファイル
PandoraBox
Secrecy
SubRoutine
PASSWORD:""
1 PandoraBox "" なし
Good ____
2 Secrecy "luck"
Next hint パンドラ ノ ハコ ニ サイゴ ニ ノコサレタ モノ
3 SubRoutine "hope"
サンプルプログラム(IF文使用型)
10 SEARCH 64
20 IF @R=0 THEN GOSUB 90
30 IF @Y>=ABS(@X) THEN GOTO 50
40 TURN @X:GOTO 10
50 IF @Y>0 THEN MISSILE @X,@Y,100 ELSE TURN @X:GOTO 100
60 IF @X=0 THEN BEAM 573:GOTO 100
70 IF @Y>=16 THEN FORWARD
80 GOTO 10
90 '
100 IF @Y>0 TURN -@X ELSE MOVE 1
110 SEARCH 64
120 IF @R=0 THEN goto 100
130 RETURN
サンプルプログラム(IF文使用型)解説
10行目 サーチ
20行目 敵タンクがいなければ、90行からの索敵ルーチンを実行
30行目 X座標よりもY座標の方が大きければ50行目へ
40行目 攻撃できないので敵方向へ旋回して10行目へ戻る
50行目 ミサイル攻撃
60行目 ビーム攻撃
70行目 敵が遠ければ接近
80行目 ループ先頭に戻る
90行目
100行目 前方に壁確認⇒壁のない側へ旋回、壁が無ければ前進
110行目 サーチ
120行目 敵がいなければ100行目から繰り返す
130行目 敵がいたので処理を終えて戻る
ちなみにすっきりしている割に無駄な部分は残っていますし、
COMのタンクに勝つためには工夫が必要です。
あくまで最低限の動作をさせるための参考として。
★状況判断の基準を考えやすくするコツ
方眼紙に自タンクの△を書いて、前後左右1ブロック分の幅で線を引く。
自タンクを中心に斜め45度のラインを引く。
前方2〜4ブロックの辺り、この辺りまでバリバリ攻撃したいと思うところで横に線を引く。
線で区切った場所に敵がどういう向きでいたら
どんな風に自分のタンクが動いて欲しいかを考える。
そうすると、どういった条件の時にどんな風に動く命令を書けばいいか
どんな命令が欠けているのかが解りやすい。
1クロックエネルギー消費量=(DL*2)+4 っぽい
DL 01で消費6、DLが1上がるごとに2上昇していき、DL 16で消費36。
失礼。 PRINTのクロック計算に入れてなかった。
DL+2で正しかったわ。
昔遊んでいた頃、対戦相手が欲しくなって、
「自分のタンクに勝ったら5千円!」と賞金を出したことがあった。
それでも対戦者は現れなかった。
そんなゲーム。
『COMSIGHT大会の上位10名のタンクデータ』ってヤツを
昔のゲーム誌(LogInだったかな)で広告を見た覚えがあるんだけど、
あれって本当に販売されたの?
知ってる人いたら教えて欲しいです。
販売されたかどうかは知らないけどモノは存在するよ
少なくとも上位10位に入った人には送られたはず
>>50 うーん、大会参加できなかったのが悔やまれるなぁ。
どんなタンクだったのか気になる。
というか、対戦させてみたかったな。
敵の行動パターンを分析、それに対応して戦い方を変えるタンクとか作ってみたい。
面倒なので投げたけど。
どれかに特化するよりも汎用的なのがいいようなきがす
シールドが変な形しているタンクを生かす方法とか考えてみたい。
昔考えたのは、後ろを敵に向けてBackで突撃するタンクとか。
敵の脇をすり抜けるのが狙いだけど、真後ろに入られると致命的なので、
その対策が思いつかなくて結局ボツになっちゃった。
改めて対戦させてみると、TecnoSoftが用意した
8種のタンクは個性的で良いな。
数ヵ月後だか数年後だか解らないけど、
もっと多くの同好の士がこのスレを見つけてくれるといいなぁ
??
昔コムサイトを遊んでいて好きだった人はまだいると思うけど、
そういう人が20年以上経った今でもアンテナ張ってはいないと思うんだよね。
とあるブログの記事に対して、3年後にレス付いたりしているし。
週末は割と暇なので、質問などあればご遠慮なく〜。
「○○みたいなときは処理させたいんだけど良い方法ない?」とか。
対戦申し込みも歓迎。
平日ちょっと時間を取れないので、週末対戦させてみます(^^
楽しみです。
>>60 前と比べてかなり完成度上がってるねー。
対応するのに苦労しそうだわ。
大会ベスト10のディスクを発掘してきたけどどうしようか
これ自体はプログラムじゃないしプロテクトもかかっていないから
アップしてもいい気がするけど売り物だったのならまずい気もする
正直言って喉から手が出るほど欲しいけれど、
そのあたりの判断はお任せします。
良かったら
>>60のタンクと戦わせてみてどういう結果なのか、
試して結果報告してもらえたら嬉しいです。
とりあえず戦績出してみてから考えるか
まずはTYPE-0 vs 大会タンク
戦績はTYPE-0から見てのもの
大会同様10戦で、表記は「勝ち数」ハイフン「負け数」
下記の01〜10は大会順位、その右はタンクの名前
Y1,Y2は運営側が用意した予選用タンク
01 RYU-4.1 5-5
02 GUYVER-3 6-4
03 HALBERD 10-0
04 TZJSD3G 2 9-1
05 RYU-4.2 8-2
06 D.A.R.K 7-3
07 T.BUSTER 9-1
08 GREAT BOW 7-3
09 Gabu HA 9-1
10 Gabu RO 10-0
Y1 Dragon2 8-2
Y2 Excel-2197 9-1
ちなみにM88の全力駆動で動かしたので試合内容は見てない
ただ時々TYPE-0が自爆することがあった気がする
>>65 おぉ、ありがたい。
結構良い感じで戦えていることが解っただけでも満足。(^^
ご指摘の通り、うpした時点でTYPE-0はバグが残っていました。
プログラムを整理して、別タンクを一から組み直しているところです。
続いてSkydart vs 大会タンク
01 RYU-4.1 10-0
02 GUYVER-3 9-1
03 HALBERD 9-1
04 TZJSD3G 2 9-1
05 RYU-4.2 8-2
06 D.A.R.K 10-0
07 T.BUSTER 8-2
08 GREAT BOW 9-1
09 Gabu HA 10-0
10 Gabu RO 10-0
Y1 Dragon2 10-0
Y2 Excel-2197 10-0
最後Skydart-2 vs 大会タンク
01 RYU-4.1 10-0
02 GUYVER-3 10-0
03 HALBERD 9-1
04 TZJSD3G 2 7-3
05 RYU-4.2 10-0
06 D.A.R.K 9-1
07 T.BUSTER 7-3
08 GREAT BOW 10-0
09 Gabu HA 10-0
10 Gabu RO 10-0
Y1 Dragon2 10-0
Y2 Excel-2197 8-2
修正前より負けが増えたみたい
それソースは観覧できるの?
そうか、発売の翌年4月だったっけ?、コンテスト。
高いFD送るのもったいないとか、そも強いタンク作れなくて、そのまま。
あと、通信用のBBSもあったらしいが、モデムなんて持って無かったよ。
あの頃はフロッピー1枚も高かったもんな
ビームについての検証
まず注意として、エネルギーの値が偶数の場合、威力が著しく減少する。多分バグだろう。
32の倍数のときが最も弱くなり、次いで16の倍数、8の倍数、4の倍数、2の倍数の順で
少しずつ威力が上がるが、奇数の場合とは比較にならないほど弱い。
よって、以降はエネルギーの値が奇数であることを前提とする。
1. シールドを削る場合
まずはじめに、ビームのエネルギーに関係なく、ビームがあたっただけで、
無条件で一定量のシールドが失われる。計算式は、
(16-ディフェンスレベル)*2+α
となっている。αはタンクタイプと被弾方向によって変わる。
SIEVAの正面は5、側面は26、背面は50だった。
さらに、ビームのエネルギーが32増えるごとにシールドを削る量が1増える。
これはディフェンスレベルには影響されない。
例えば、ディフェンスレベル16のSIEVAを正面から攻撃する時、
シールド100を吹き飛ばすのに必要なエネルギーは、
95*32+1=3041 (+1は奇数にするための補正)
となる。5は無条件で削れるので残り95を削るだけのエネルギーで良い。
2. シールドを破ってダメージを与える場合
ビームのエネルギーが160増えるごとにダメージが1増える。
これもディフェンスレベルには影響されない。
シールド0の状態からダメージ100を与えるのに必要なエネルギーは
(100-@ED)*160+1 (+1は奇数にするための補正)
となる。よって、全く被弾していないディフェンスレベル16のSIEVAを
正面から一撃で撃破するのに必要なエネルギーは、
95*32+100*160+1=19041 (+1は奇数にするための補正)
となり、以前指摘された値と一致する。
以上、暇だったので検証してみた。
昔、ダメージの入り方は調べたんだけどシールドの削れ方がよくわからなかった。
改めて調べてみてすっきりした。
なるほど、そんな風になっていたんですね。
自分はMISSILE偏重で、BEAMは詳しく検証していませんでした。
新しいタンクを組む為に色々試行錯誤しているんですが、
工夫する余地はあっても容量が厳しくなってきて、プログラムを整理中だったり。
こちらは距離の値がどんな感じなのか検証していました。
●距離表(@R)
64 64 66 68 72 75 80 85 91
56 57 58 61 64 69 74 79
48 49 51 54 58 62 68
40 41 43 47 51 57
32 33 36 40 45
24 25 29 34
16 18 23
08 11
△
距離はピタゴラスの定理でおk
@R ≒ SQR(@X*@X+@Y*@Y)
小数点以下の端数は切り捨てか四捨五入かは未確認
後でミサイルと壁衝突も再検証してみようかなと思ってる。
シールドの削れ方の法則がわかったので、
相手のタンクタイプとディフェンスレベルを推定できないかなーとか妄想してる。
できてもメリット少なそうだけどね。
ミサイルはシールドを削りきるまで800、
耐久力1削る為に80必要で、100ダメージの為に8000エネルギー必要。
合計8800エネルギーでシールド16のSIEVAを倒せたと思う。
>>79 SQR使えたのか……orz
今は手元にマニュアルがないから色々見落としてるなぁ。
実家にある筈なんだけど、どこにやったか解らんのよね。
でもまぁ、戦術練る上では距離表も無駄にならんと思うのよね。
取り急ぎ改良してみたタンクは上位陣に勝てるんだけど、
T.BUSTERと自分の古いタンクには負けるようになった。(TT
使い方
(1) ac_comsight.kwd を C:\Program Files\Anchor\share フォルダに放り込む
(インストール場所を変えた場合は適宜読み替えて)
(2) BPLソースのテキストファイルを用意して、拡張子を comsight にする
(3) Peggy/PeggyPad で (2) のファイルを開く
このままだとまだ区別がつきにくいと思うので、色の設定を変更する
メニューの「ツール」→「オプション」から「表示色」タブを選択して
次のように設定しよう
数値定数…青色
識別子/変数/関数/ラベル…茶色
CPUインストラクション…赤色、太字にする(色の中のチェックボックスをオンにする)
CPUレジスタ…色はそのままで太字にする
組み込み関数…色はそのままで太字にする
気に入らなかったら自分の好みで変更してくれ
>>84 あるある
天敵ができないようにするのが結構大変なんだよね
88エミュからBPLソースを取り出す方法
(かなりローテクだが、たぶんこれしかない)
(1) X88000 で COMSIGHT を起動する
(2) X88000メニューの「システム」→「パラレルポート」で「PC-PR201」を選択する
(3) X88000メニューの「システム」→「パラレルポート」→「デバイスの設定」で、用紙サイズを「15インチ連続紙」にする
(4) CREATE でタンク作成モードに入る
(5) LLIST を実行する
(6) X88000メニューの「システム」→「パラレルポート」→「デバイスの設定」でページ番号を選択した後、「コピー」ボタンを押す
(7) 「テキスト抽出」を選択して「OK」を押す
(8) メモ帳なりエディタなりを開いて、貼り付けする
(9) ページ数分 (6)〜(8) を繰り返す
(10) 用紙幅を超える行は改行されてしまうので、目視で修正する
注意点を書き忘れた。
2回目以降のLLISTを実行する前には、「システム」→「パラレルポート」→「デバイスの設定」で
「用紙削除」ボタンを押して、全ページを削除しておくこと。
さもないと、以前のページの後に追加されてしまう。
あと、残念ながらX88000ではタンクの開発はできない。
プログラムの入力だけならできるが、実行するとエラーになって自爆してしまう。
>>81 一撃で倒そうとするとその通りなんだけど、
エネルギー1のミサイルを連続で当ててもダメージが入る仕組みが
よくわからなくてね
デバッグ画面で検証してとりあえずわかったこと
・ミサイルのダメージはDLにのみ影響される。タンクのタイプと被弾方向は全く関係ない
・壁に衝突した時のシールド減少量は、VOA, ZAR, WEITZが最も少なく、SIEVA, AGLEX, HOGSが最も多い
・壁に衝突した時のシールド減少量は、全タイプで前面と背面で差がない
・敵に衝突した時のシールド減少量は、SIEVA, WEITZ以外は壁の時と同じ。SIEVAとWEITZのみ背面のときが違う
・壁や敵に衝突した時のシールド減少量は、DLが1増えるごとに2減る
横からぶつけられるケースもあるけどデバッグ画面ではできないので検証してない
この結果は想像していたのと違ってかなりショックだった
実際の戦闘でも本当にこの通りなのか、また今度試してみる
>>89 へー取り出せるのか。
あとクリップボードペースト機能があれば入力もできるな。
>>91 1発目でシールド剥がれてる時に2発目あたるからでは?
>横からぶつけられるケースもあるけどデバッグ画面ではできないので検証してない
敵に横からぶつけて敵のダメージ見ればいいんでは?
大会ベスト10タンク思ったほど強くないみたいだな。
>>94 >敵に横からぶつけて敵のダメージ見ればいいんでは?
その手があったか。やってみたんで前後とあわせて結果を貼っとく。
敵に衝突した時のシールド減少(DL=16の場合)
タイプ 前 後 横
----------------
CIRC___ 18 18 18
MASH_ 22 22 14
SIEVA_ 34 04 18
AGLEX 34 34 34
VOA___ 04 04 04
HOGS_ 34 34 04
ZAR____ 04 04 34
WEITZ_ 04 34 18
壁に衝突した時のシールド減少(DL=16の場合)
タイプ 前 後
-------------
CIRC___ 18 18
MASH_ 22 22
SIEVA_ 34 34
AGLEX 34 34
VOA___ 04 04
HOGS_ 34 34
ZAR____ 04 04
WEITZ_ 04 04
ミサイルの検証が終わったので報告
(1) シールド減少量の計算方法
基本シールド減少量=80-(ディフェンスレベル-1)×2
シールド減少ボーナス=ミサイルのエネルギー÷16(端数切捨て)
最終シールド減少量=基本シールド減少量+シールド減少ボーナス
例1)ディフェンスレベル6のタンクにエネルギー160のミサイルが命中した場合
基本シールド減少量=80-(6-1)*2=70
シールド減少ボーナス=160/16=10
最終シールド減少量=70+10=80
例2)ディフェンスレベル1のタンクにエネルギー1のミサイルが命中した場合
(よくあるパターン)
基本シールド減少量=80-(1-1)*2=80
シールド減少ボーナス=1/16=0.0625 切り捨てて0
最終シールド減少量=80+0=80
(2) ダメージの計算方法
シールド補正値=シールド残量+(ディフェンスレベル-1)×2
ダメージ吸収量=シールド補正値÷5(端数切り上げ)
基本ダメージ=16-ダメージ吸収量(下限は0)
シールド突破エネルギー=(シールド残量-基本シールド減少量)×16(下限は0)
ダメージボーナス=(ミサイルのエネルギー-シールド突破エネルギー)÷80(端数切捨て、下限は0)
最終ダメージ=基本ダメージ+ダメージボーナス
例1)ディフェンスレベル16、シールド残量60のタンクにエネルギー1000のミサイルが命中した場合
シールド補正値=60+(16-1)*2=90
ダメージ吸収量=90/5=18
基本ダメージ=16-18=-2 下限が0なので0
基本シールド減少量=80-(16-1)*2=50
シールド突破エネルギー=(60-50)*16=160
ダメージボーナス=(1000-160)/80=10.5 切り捨てて10
最終ダメージ=0+10=10
例2)ディフェンスレベル1、シールド残量23のタンクにエネルギー1のミサイルが命中した場合
(よくあるパターン)
シールド補正値=23+(1-1)*2=23
ダメージ吸収量=23/5=4.6 切り上げて5
基本ダメージ=16-5=11
基本シールド減少量=80-(1-1)*2=80
シールド突破エネルギー=(23-80)*16 下限が0なので0
ダメージボーナス=(1-0)/80=0.0125 切り捨てて0
最終ダメージ=11+0=11
>>100のエミュでCOMSIGHTが動くことを確認
情報thx
ペーストは完動を確認したが、残念ながらかなり遅い
毎秒2文字くらいなので3000バイトだったら1500秒=25分かかる計算
それだけ遅いと流石に厳しいね
アルゴリズムを変えて気付く、他の参加者の強さ。
今まで喰らってなかっただけでヤバイ決め技持ってたりするな。
DL16のタンクにエネルギー1のビームが命中したときシールド減少量
タイプ 前 斜前 横 斜後 後
------------------------
CIRC___ 26 26 26 26 26 円状均等
MASH_ 32 26 20 26 32 前後楕円状
SIEVA_ 05 11 26 38 50 前方扇状
AGLEX 50 05 50 05 50 斜め四方突出※
VOA___ 05 50 05 50 05 前後左右突出※
HOGS_ 50 26 05 26 50 左右突出※
ZAR____ 05 26 50 26 05 前後突出※
WEITZ_ 50 38 26 11 05 後方扇状
AGLEXとVOA、HOGSとZARは画面で表示される情報と実際の性能が逆
ビーム打たれるのは真正面か側面の場合しかないだろうから、
壁や敵との衝突時の性能とあわせて考えるとVOAが最強か
うーん、シールド性能は実感し辛いだけに
性能が入れ替わってるなんて思いもしなかった。
攻撃関連のルーチンを見直して、今度こそ完成だ!
……と思ったら、全然そんなことは無かったでゴザル。
残り容量も厳しくなってきたから、またスパゲティみたいな
ぐちゃぐちゃソースになっているところを整理しないとダメだ。
壁情報の保持&情報更新は案外長くなってしまうわ。
こっちも壁情報を保持するようにしてみたけどそれをどう活かすかが難しい
色々詰め込んだせいでソースのスペース全部削っても残り100バイトとか厳しすぎる
自分も壁判定付けてたなあ
色々試行錯誤して強くなった、と思いきや勝てない相手が増えてしまった(-_-;
おかしいなぁ
久々にタンクデータうp
http://ll.la/Xh60 TYPE-Xが新作。
攻撃の手数を増やして、致命的なバグもいくつか解消。
必殺技も追加。
まだ意図したのとは違う動きをすることも。
TYPE-0、Skydart、Skydart-2も一緒に入れてます。
ついでにCOMのタンクも入れておきました。
COM vs COMの対戦を眺めてみるのも一興。
MISSILEにはバグがあって、壁の外に向かって撃ちこむと
画面上に出るミサイルの数が減っていき、最終的に撃てなくなる。
MISSILEは敵味方合わせて同時に8発だったかしか存在できなくて、
壁の外に撃ちこまれたMISSILEは着弾せずにそのまま
飛行中のミサイル数としてカウントされてしまっているっぽい。
意図的にMISSILEを封じて、エネルギー勝ちを狙うタンクとか
作られちゃうと、正直対処に困るので今まで黙ってた(^^;
COMのタンクデータは、ディスク1の方に入ってます。
ユーザーディスクのタンクデータの移し変え方法と同様に、
ドライブ2にディスク1を入れて、FILEメニューのCOPYから
PAGE:1のところに合わせることで確認できます。
タンクデータを作成した方を含め、製作スタッフ名も確認できます。
おお、スタッフが見れるのか。メインは知らないメンツだけど。
タンク作った内のFさんはサンダーフォースMDの方の人だな。
STG&あることで話題になったあの人やアルシスのあの人は関与してないみたい。
メインプログラマーのn.araiさんはコンポーザーでもあり、
後のテクノソフト作品ではサウンドドライバーを担当したりしてる。
サンダーフォースシリーズにも関わっているね。
あと、ヘルツォークの名付け親だそうです。
対戦してみたよ
TYPE-X強いねぇ
ミサイル喰らいまくる、こっちのミサイルは当たらない
さてどうしたものか
>>116 ありがとう。
楽しんでくれると嬉しい。
88以外でも98やX1turboなど出てた機種はあるようだけど全然やってたという声は出てこないね。
X68に出てればもうちょっと知られてたかもしれないけど。
移植予定だったけど結局出なかったんじゃなかったかな
中古も存在しないようだし
今の時期ならネット対戦も手軽にできるのにねー。
そういや誰にも聞かれないけど、一応書いておくと
>>110のDL用PWは、
>>60同様に『comsight』です。
>>122 ついに来てしまったかー(><
TYPE-Xは自分なりに色々詰め込んだタンクだっただけに、
攻略されてしまうと次の手に困ってしまう。
まだ見てないので、とにかく対戦させてみる。
当面、負けの原因を確認することからだろうなぁ。
場当たり的な対策は案外簡単だったけど、
根本的な対策が難しい……。
それはそれとして、『そろそろ新たな挑戦者が現れないかなぁ』などと、
かなり起こりそうにもないことを期待してみたり。
同意
でも望み薄そうだなあ
仕事が今月末で一区切りつくので、来月になったら再開できそうだ。
とはいえ、合い間に改良も進めているんだが芳しくない。
ちょこっと弄っただけで7割勝てたのに、今は2割五分しか勝てなくなってる。
改悪バージョンしか残ってなくて凹む。
7割勝ててたってことはやっぱり弱点を突かれたのかな
お馬鹿なところが残ってるからなぁ
なんとかしたい
今月に入って体調崩してました。
またタンクの改良を再開したけど、弄ると余計勝てなくなるの繰り返し。
そちらの戦術に嵌ってしまってるわ。
身体は大事
こっちは5年くらい前からずっと頭痛、首肩の凝りに悩まされてた
原因がわかって今は楽になったけどね
ところで今更な情報だけど、
>>25と
>>38では無駄を切り詰めた時に使用容量が逆転するんだ
スペースとコロンを全部取っ払うと
>>38のほうが26バイト少なくて済む
可読性が激減するけど、そこは
>>85を使えば読めないことはないよ
久々にやったら、どう修正するつもりだったか忘れた。
思ったとおりに動かないパターンがいくつかある。
どうにも修正できない。
根本的に考え違いをしているのかも……。
一旦今の移動部分のアルゴリズムを捨てて、
そこだけ一から構築し直してみる。
懐かしいー
当時からマイナーっぽくて周りにやってる人はいませんでしたw。
大会用に作ったタンクを自信満々で送ったらなんとか9,10位に入ったものの
他の人のタンクの完成度の高さにショックを受けた覚えがあります。
大会ベスト10ディスクは厚紙で補強されて送られてきたのでパッケージ化は
されてなかったはずです。希望者に切手何百円分かで通販してたような記憶があります。
大会ディスクで好敵手をやっと得て色々改良して勝率の高いものを完成させたけど
その後大会はありませんでした・・w
ミサイル壁打ちのバグも当時気づいてそれを利用したタンクも作りました。
名称は覚えてないけどマシン語とBASICみたいなものの2種類でプログラミングできて
もちろんマシン語様の方が効率よく行動するけど相性というか兼ね合いでBASIC様の
方が勝利するという事がよくありました。
現在コムサイトやるにはどうすればいいんですか?
ソフトパッケージをまず入手しなければならないのかな?
>>132 いらっしゃいませ
似たような道を歩んでますな
早速そのタンクをうpして対戦を(ry
>>133 自分がやった方法は、
・5インチFDDを入手してPCに接続
・ゲームディスクのプロテクト解除バックアップのFDをイメージ化
・データディスクのFDをイメージ化
・M88等のPC-88エミュレータ上で実行
って感じでかなり手間がかかります
やったのはWindows 98の時なんで、今のOSでできるかどうかはわからんです
早速のレスどもです。
>>134 ソフトやデータは残念ながら行方不明です。
ただ行動パターンはサーチして敵がいなかったら最寄の壁に進み
全部で8つ存在できるミサイルを壁外に発射してあとは敵の進行ラインから
1つずれたラインをいったりきたりでエナジー切れを狙うというものでした。
ただミサイル全部捨てきれなかったりで残った1,2このミサイルが当たって
負けたりした覚えがあります。
>>135 かなりハードル高いっすね
久しぶりに新タンク作ってみたかったけど残念ながら無理っぽいです。
昔、中古屋で見かけたとき、余分に確保しておけば良かったなぁ。
興味を持ってもらえても、新規参入は期待できないのが辛いところ。
保守
141 :
NAME OVER:2013/11/05(火) 22:23:34.87 ID:+5s+sQ3k
こんなスレがあったのか
今からじゃもう無理だろうな
書き込みないか、たまにチェックはしてますん。
こことかで話題にあがったマリオネットハンドラーというのを中古屋で買ってきたけど
マニュアルがなかったんでやり方はわからなかった
ロボットのパーツを購入したり
移動、索敵、加速、分岐、攻撃、ラベルのチップでプログラム
そして大会に挑戦
そういうの遊んでみたいねぇ。