Darkside(リンクエラー修正しました)

2013年11月25日(月) 21:13

TAS補足

 ミサイルコマンドの画面解像度は、256×231という歪なものになっている。当時はアナログモニターだったから縦横比を無段階調整できたが、デジタル動画では困る。正方形ピクセルでは縦長になるしアス調整すれば画質が落ちる。そこで、640×480という縦横2倍overへの拡大を行い、画質劣化を抑えることにした。60fpsだが圧縮は効き易い固定画面ゲームなので問題なし。

 中央からの迎撃ミサイルが倍以上速いと判明したので、使用基地の決定方法を変えた。
 dsync の影響は、フレーム数が少ないほど小さくなる。よって、短時間でターゲットに到達するほどズレ難い。だから、スマートボムは中央から狙う。
 スマートボム以外を狙う場合は、中央を使わない。左右どちらからも狙えないか弾切れしている場合だけ、中央を使う。
 スマートボムを狙う場合は、迎撃位置が最も高くなる基地から発射する。大抵は中央になるけど、違う場合もあり。

 通常ミサイルを撃つ場合の狙い越しは、ずっと20フレームでやっていた。しかし爆煙が最大に広がるまで65フレーム程度を要するので、もっと早めに撃った方が大きな爆煙で迎え撃てる。ミサイルは短時間に集中して攻めて来ることが多いので、最初の爆煙が大きくなっていた方が誘爆させやすい。
 しかし余りに狙い越しを早くすると迎撃位置が低くなり過ぎる。少し試した結果、35フレームが良さそうだと判明。動画だと、いかにも1つの爆煙で複数同時に巻き込むよう狙って迎撃しているように見える。ところが実は、複数のミサイルが接近する座標を狙うアルゴリズムは組み込んでいない。

 爆撃機を除き、あくまで高度が一番低いミサイルを狙う。スマートボムかどうかも区別しない。区別するのは、使用基地を決める場合。
 ただ、標的決定前に、それが既存の爆煙や発射済みの迎撃ミサイルで発生する爆煙で誘爆するかどうかをチェックする。誘爆するなら標的から外し、次の標的候補をチェック。こうして無駄弾を撃たなければ、自然に複数誘爆が多発する。いかにも最適配置を計算しているかのように見える。
 マジメに最適配置を計算するのは、処理が重過ぎる。そこまでしなくても、考えて撃ってるかのような挙動になる。

 誘爆判定は最後の1ドット1フレームまで厳密にやっているため、dsync によって外れる場合がある。判定を少しキツくすれば大丈夫だが、今度は無駄弾が出る。ミサイルコマンドは弾数制限がキツいので、無駄弾を出すよりは撃ち洩らしの方がマシである。撃って外せばアウトだが、撃ってないなら改めて狙えば良いだけだ。
 地上が近い場合は、狙い越しを8フレームに短縮するようにした。

 爆撃機の移動ルーチンは発見したが、想像より遥かに複雑な処理が行なわれている。シミュレートするには想定外に多くのメモリーを追跡せねばならないので、旧来通りの安直判定で済ますことにした。弾切れが発生しないなら、無理にいじってベストを探求するまでもない。

 最後に、lua という言語自体について。
 ミサイルコマンドのようなレトロを扱う場合、整数と実数の区別がないのが逆に恐ろしく使い難い。非力な8ビットCPUでは、整数演算による自然な切捨て現象を積極的に活用しているため、実数演算してしまうと結果が狂いまくる。言語仕様として整数と実数を区別せず数値型として統一に扱う
lua は、エミュレートに向かない。数値が整数であるか実数であるかを常に峻別せねばならない場合、便利ではなくまさに地獄となる。
 それでいて、妙な場合だけ変数の型にこだわってくれやがる。Nという変数に100という数値が入っていれば
N>0 という比較は当然可能だが、N に "100" という文字列が入っているとエラーになる。数値と文字を常に区別するならまだしも、自動変換してくれる場合としてくれない場合がある。

 いいと思った仕様は、関数の返り値を2個以上持てること。return x,y なんて記述の快適さは、他言語も見習って欲しいものだ。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4