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

2016年06月の記事

<< 前のページ

2016年6月30日(木) 21:07

SD慣れ

 奥にぼんやりとヘアピンが確認できる。
 その手前がチェックポイントで、タイムエクステンドでもある。時間切れ前に、無事に通過できそうだ。

 チェックポイントの直後にゴールを設定し、最速到達のスクリプト検索を行う。結果に驚いた。
 このゆるいS字は、最短コースで走り抜けたくなる形状をしている。しかし、最短コースだと遅い。コースの形をなぞるように、中央寄りを走り続けた方が速いのだ。思い切りレースゲーム的本能に反している!
 いかにも無駄っぽい走行ラインで、最後はチェックポイントの左端スレスレに弱い左ハンドルで飛び込む。そう、最後は右ハンドルが当然に感じるが、これも本能に反して左に切るのが速い。

 なぜこんな異常な走行になるかと言えば、それによってSD中の速度が上がるからだ。SD物理は、いろいろおかしい。
 SDを駆使した走りをレースゲーム的視線で見ると、セオリーを守らないヘタクソに見えかねない。それだけに、SDを掛ける瞬間はしっかりインを攻めておきたい。もちろんタイムのためにも。

 コース左端ギリギリが最速というのは渡りに船で、ヘアピンを攻めるにはアウト一杯まで寄せておく必要がある。衝突しない限りにおいて、左端に寄っていれべ寄っているほど、SDは加速が大になる。

 SDが切れる際の最適化を行ったところ、シフトダウンしないのが最速と判明。珍しいパターンを引いた。
 先日、SD走行パターンとSDが切れた直後の速度変動は一体化しており、独立には調整できないと書いた。しかしここまで作って来て、必ずしもそうではないと分かって来た。

 SD終了直後の速度変動は、かなり調整が効く。
 SDが切れる直前のブレーキと、SDが切れてからのタイミングを合わせたシフトダウンの組み合わせにより、大抵は減速からスムーズに回復させられる。
 だから、SDは設定ゴールまで最速で到達することに専念して探索すれば良く、SDが切れた後のことは後から処理すれば良い。

 いよいよPSリッジのハイライト、ヘアピン突入だ。
 アウト一杯に寄せて直進状態とし、最適解を探す準備を整える。

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

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

2016年6月29日(水) 21:35

マイクロソフト活躍

 PSリッジ最大の名所は、灯台ヘアピンだろう。
 その灯台ヘアピンの手前にも、もっと楽だが急コーナーがある。
 いずれも、サイレントドリフトを使って抜けたい。

 手前急コーナーでSDを使うためには、その1つ手前のこの右コーナー付近でSDを終了させねばならない。ただ、フレーム数からみると、コーナーを曲がった直後にSD終了でもクーリングタイムは足りそうだ。
 ここもそれなりに急なコーナーであるため、SD解除後の減速を使ってインベタで抜けるのは有効である。しかし、SDだってドリフトだ。SD解除直前にドリフトでここを曲がり、直後にSD終了というのは非常にカッコ良い。SDがドリフトの仲間入りするカッコ良さである。

 だが、スクリプトで何パターンか候補を得て調べたところ、ドリフト走行でここをカッコ良く抜けた場合はクーリングタイムが不足だと判明。横滑りさせているとクーリングタイムが長くなるという説があり、どうやらその通りみたいだ。
 ここより手前でSDが解除されるパターンを取り出す。スクリプトの吐き出した全解をデーターベースにブチ込んでおくと、別候補を探すのも容易で作業がはかどる。インポートする際にデーターベースは超優秀で重複解を自動的に弾いてくれるので、複数スクリプト並行稼動も好き放題。

 画面左上のフレームカウント数には要注意。

 ここからSDに入って有効な解を2つ3つ残す。
 それを基点にSD中操作のスクリプトを走らせる。異なる初期状態に同一スクリプトを適用して複窓で実行させられるので、TASには不可欠な「どっちが速い?」問題をすぐに判定できる。

 データーベースといえばオラクルや mySql だが、こういった閉じた個人用途には今でも
MS Access 最強である。複数接続が行われると破綻するので業務用には使えないが、1人でデーター管理するなら問題はない。それどころか、

・mdbファイル1本にすべてが入っている。バックアップも一瞬。
・テーブルの構造もコピペで簡単増殖。フィールド削除挿入名称変更自由自在。

 セキュリティーやデーター保護と使い勝手はトレードオフだが、MS Access は使い勝手に全振り状態である。だから、個人が趣味でノート代わりに使うには最高だ。
 これでサクっと最速を選択し、検証する。次に使いたい場所でSDが可能なことを確認したら、選択作業終了。

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

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

2016年6月28日(火) 21:20

SD末期にブレーキ

 重要なことに気付いた。

 SDが解除されたときの速度の落ち込みは、解除時の速度が速いほど大きくなる。よって、SDは一気に速度を上げてからそれをキープし続けるパターンの方が速い。可能であれば、解除間際に一気に速度が落ちるとオトクだ。
 ならば、自分でブレーキを掛けたら?

 SD解除間際にブレーキを掛けると、解除時の速度を落として解除後の速度が落ち込まないようにできる。これによりSD末期の速度は落ちるが、その影響は数フレームである。それに対し解除後の速度落ち込みは、何十フレームにも渡って影響する。
 意図的にブレーキを掛けることで、トータルとしては速くなるんじゃないか?

 似たようなことは F-ZERO の S-JET 噴射でも発生した。加速手段である S-JET なのに、噴射中に適切にブレーキを掛けることで速くなるのだ。

 さっそくスクリプトを組んで調べると、確かにブレーキを掛けることで速くなった。最初のトンネル内ドリフトでは、適切なパターンでブレーキとシフトダウンを行うと、シフトダウンだけで調整した場合に比べて0.15フレーム前後速い。
 レースゲームが普通のTASと異なるのは、1フレーム未満の差にも意味があることだ。

 だが、1フレーム未満の差に意味があっても、実際にタイムに反映されないかもしれない。
 それは、当たり判定は1フレームごとにしか行われないからである。限界ギリギリまで攻めた場合、0.15フレームの差は吸収されるかもしれない。下手すれば当たり判定が運の悪いズレ方をして遅くなるかもしれない。
 実際にSDを掛けるためのスクリプトを動作させたところ、遅い解しか出て来なかった。よって、トンネル直後の右コーナーに関しては、無効である。

 とはいえ、フレーム未満の差が良い方向に作用する場合もあるだろうから、今度は両方試して速い方を採用する慎重さが必要だ。

 この写真は、橋付近の山の景色を観光。
 クルマが真横になってガードに突っ込み、ガードが近過ぎてポリゴン消失している。

 スクリプト修正を繰り返し、ようやく使えそうなパターンを見つけ出した。
 SD中に大きくハンドルを切っても、反映されない。ネジコンを左一杯に切ると0で、ニュートラルが128だが、103未満に大きく切っても曲がり方は103の場合と変わらない。
 ただし、すべてのSDでそうだとは限らない。SDの挙動はコーナー形状に大きく影響を受ける。

 あと念のため、速度計が正確かどうかも確認した。F-ZERO では5秒 S-JET 詐欺があった。SD解除後に速度が落ち込むのが演出であって、実際の速度パターンは異なっている可能性もある。
 結果は、速度計が正確だと判明。実際に速度は落ち込み、速度計がループ状態いなる場合にも実際の速度がループ状態。表示と内部速度は連動し、内部速度と座標移動量も連動している。

 演出が行われていないのはまあ、SDが仕様ではなくバグであるなら当たり前だが。

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

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

2016年6月27日(月) 21:23

 トンネル出口の右コーナーは、最速候補が2つ残った。

 最初は普通にスクリプトを動かしたところ、この後の左コーナーを抜けるうまいパターンが見つからない。SD開始直後のハンドル値がニュートラルではなく129なのが問題かもしれない。
 そこで、SD開始直後のハンドル値が128限定で探索し直したところ、別パターンが出て来た。

 2つの解のどちらが速いのか良く分からないので、両方試す。

 SD中から解除後までに一体化部分をスクリプトで探索するには、ベストに近い可能性がある操作シーケンスが判明していなければならない。なぜなら、操作可能なパターンの組み合わせは膨大であり、何の手がかりも無しに片っ端からやってみるのは、時間的に不可能だからだ。
 組み合わせ問題で良くあるように、全部調べたら宇宙の年齢よりも長時間必要です、ということになる。

 TASとスクリプトがあっても、可能なのは最後の完成度を高めることだ。ある程度の完成度は人間が用意しないと、製作は無理。
 SD中は強いゲームアシストが働くため、通常のレースゲームの常識通りに挙動しない。普通とは逆向きにスピンすることもしばしば。
 SD中の操作はいかにあるべきか。それをしっかりと研究しておかねばならない。2周目3周目は基本的に1周目と同じことをやるのだから、1周目が肝心だ。

 更に、SDをどこで解除するかという問題もある。橋の出口の左コーナーで次のSDを使うため、その手前でさっさと解除させるというのが有力。しかし、SDを長時間持続させ、更に先のコーナーまでSDを続けることは出来ないだろうか?
 SDには終了直後の減速というペナルティーが漏れなく付属するため、SDの回数を減らすことは大きなタイム短縮につながる。SDを解除しなくても走り抜けられるのに気付かずSDを解除してしまうと、TASとしては一巻の終わりである。すべてのコーナーにおいて、SDを解除するのが正しいかどうか検証せねばならない。

 2パターンを2窓でスクリプト探索すると同時に、SDを最大限引き伸ばすとどうなるかも調べる。結果は、どう頑張っても1つ先のコーナーまで持続させるのは無理っぽい。
 橋の出口の左コーナーにゴールラインを設定し、そこそこ手前でSDが解除されてゴールライン時点に速度がかなり復活しているパターンを探す。

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

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

2016年6月26日(日) 20:11

どうやって最適化?

 インベタで最初のコーナーに突入。

 既に予備調査で、ここのSDは壁との距離がほぼゼロでも発動可能なことを確認済みである。そのうえで、改めて突入ラインをインベタに変更している。漫然と突入する場合に比べれば、既に0.1秒ぐらいは違うはず。

 2周目以降は同様の手法は使えないため、恐らく2周目3周目に比べて1周目のラップタイムだけ突出して速いと予想できる。
 1周目の製作が済めば、2周目3周目は0.1秒ずつ余計に必要と想定し、トータルタイムの予想が可能だろう。厳密には、次ラップの都合を考えなくて済む3周目の方が、2周目より僅かに速くなるはず。

 実際には理屈通りにTASが仕上がるかどうかは分からない。だが、少なくとも理論上は1周目が最速。ふつうレースゲームで、1周目が最速ということはない。PSリッジは特殊だ。

 さて、SDを掛けるのはTAS的には容易だ。スクリプトで片っ端から操作を試して、最大速度を出せるパターンを探す。問題は、SDが開始された後。
 SDが終了するとき、速度が出ていれば出ているほど大きく速度が落ち込む。だから、ひたすら速度を上げれば速いというものでもない。落ち込んだ速度がある程度戻るまで、次のSDは使えない。

 SDが使えるように早めにSDを終了させ、速度の落ち込みも小さくしたい。
 だが、早く終了させればタイムロスだし、遅く終了させれば次のSDが使えなかったりSD終了時の減速が大きくなる。
 速度の落ち込みを減らすには終了時の速度は遅い方が良くて、と遅くなった速度を復活させるのも容易な場合と困難な場合がある。遅くなった速度は、タイミング良くシフトダウンすると早期に回復するが、効果があるかどうか、どの程度の効果があるかどうか、は謎が多い。
 いやもうここまで書き出しただけでも、これどうやって最適化するの?と言いたくなる。

 SDで速度を上げるのは、TAS的には難しくない。しかし、330キロ以上出した場合には、トータルでは遅くなるケースが多い。その気になれば340キロ近くまで出せるが、最高速が上がれば良いってものではない。
 PSリッジでは得てしてSDでどこまで速度が上がるかを注目してしまうが、実際の価値は限定的だ。

 厄介なのは、SDが解除されるタイミングがSD中の操作に依存しているらしいこと。そして、いったん解除されたら速度の落ち込みと復活させ易さも決まってしまう。レースゲームのTASというより、戦闘で乱数調整やるのが困難なRPGみたいな気分だ。
 SDの速度上昇と、SDが終了するタイミングと、終了直後の減速と、速度復帰の容易さ。これらはほぼ一体化していて、一部を単独で調整するのは困難だ。

 そこで、SD中のキー操作を変化させ、大量の走行を試行することにした。
 スクリプトで1万通りぐらいのSD走行を発生させ、次コーナー手前まで到達したものを取り出す。SDが解除されたフレームやその時点の速度。解除直前の速度。、到達時のフレームや速度と座標。もろもろのパラメーターをCSVファイルに出力。
 データーベースに読み込んで、あれこれ操作してベストな走行パターンを探す。

 トンネルを抜けた右コーナーは急なので、アウト側に寄せておかないとマズい。それも考慮すべき条件だ。考慮することが多過ぎて、大量のデーターを人間で判断するしかない。

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

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

<< 前のページ

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

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4