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

2017年3月4日(土) 21:05

底無し沼

 S-JET は独特の仕様のせいで最適化が厄介になっていることは、これまで何度も書いている。
 通常状態での最高速度は478キロだが、内部メモリーでは2304という数値になっている。
 S-JET 噴射時の最高速度は562キロであり、これは内部メモリーだと2560になっている。
 速度が2304以下になると、1フレームごとに速度が+256される。
 速度が2304を越えている場合、1フレームごとに速度が-4される。
 これにより、S-JET 噴射中は内部速度が2304から2560の間をループする。

 問題は、ガードビームに接触したりブレーキを掛けたり、あるいは S-JET 噴射前にアクセルを抜いたりして、内部速度が半端な値になっている場合だ。例えば内部速度2302のときに S-JET を噴射すると、+256されて次フレームでは2558になる。これは、本来可能な最高速度2560に足りない。そこからフレームごとに-4されるが、結果として全フレームで速度が2ずつ小さいという羽目になる。
 S-JET は255フレーム持続するため、影響は極めて大きい。
 内部速度を4の倍数に合わせてから S-JET を噴射するのが、極めて重要である。

 更に、最速を狙うとブレーキによる急減速が重要。速度が落ちてくるとブレーキを掛けて早く2304まで速度を落とすことにより、速度が早く2560に復活するので結果的に速くなる。
 ところがブレーキによる減速は4の倍数ではないため、不用意にブレーキを掛けると遅くなりかねない。
 そこで、整数組み合わせ問題を解き、うまく2304へと戻るようにブレーキを掛けるスクリプトを作ってある。これにより、ガードビームをケズりながら半端な速度で抜けるコーナーリングの直後に、ロスの無い S-JET 噴射が可能となった。
 しかし、標準的なパターンから外れた別解も存在する。

 ブレーキによる減速は、速度が速い時は-15であり速度が落ちて来ると-14である。
 正規解だと、ブレーキを掛けつつ速度が2318に落ちて、そこから更に1フレームのブレーキによりピタリ2304へと戻る。
 だが、半端な速度でも例えば2312ならどうだろうか?
 ここでブレーキを掛けると2298に落ちてしまい、次フレームでは2560どころか2554までしか加速しない。更に4の倍数でもないから、大損害である。
 しかし、実はブレーキを掛ける必要はない。そのまま放置すれば次フレームでは2308に落ちて、更にもう1フレームだけ何もしなければ2304に戻る。このように、状況次第では正規解でなくてもロスが小さい場合がある。そのような解がコーナーリングでアドバンテージを持っていたら、正規解より速くなるかもしれない。

 このような別解を拾えるように、スクリプトを改良した。実走することなく計算で S-JET の速遅判定ができるようになったのが理由である。実走は時間を食うが、スクリプトによる計算だけなら単時間で確認できる。そのため、キーの組み合わせを試している途中でチェックしまくれるのである。

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