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

2016年11月15日(火) 21:45

更なるバグ

 直進部分の S-JET 最適化に、更なるバグが潜んでいた。

 しかもこのバグは、怪我の功名が無ければ発覚しなかった。
 うっかり古いスクリプトを実行してしまったのだ。そして、古いスクリプトでは第1周期でガードビーム減速4フレーム連続の解が出力されたのに、最新スクリプトを走らせ直したら3フレーム連続解しか出力されなかったのである。

 出力した解を再生して確認すると、連続4フレームの解は間違っていなかった。つまり正解なのであり、それが出力されなかった最新スクリプトはバグってるということになる。
 再現性は100%なので、正解がどこで捨てられたのかを調べる。

 ガードビームに接触させて急減速させる操作は、直進→右重心移動→直進→左重心移動というシーケンスになっている。それぞれの段階を何フレーム連続させるかを変数とし、組み合わせを片っ端から実行。速度変化が理想パターンに一致するものを解候補とする。
 ガードビームから離脱する動作となる最後の左重心移動が焦点である。左重心移動の連続フレーム数は、最大12フレームまで順番に増やして行く。その途中のどこかで、内部速度が 2304 に戻っていることを確認している。単純に1フレームずつ操作を増やして確認するため、どのタイミングで 2304 に戻っても解候補として合格する・・・と誤解していた。

 しかし、最終チェックのことを失念していた。

 速度変化パターンが理想的に推移しても、直後にまたガードビームに突っ込む場合が良くある。そこで、更に10フレーム直進してもガードビームと接触しないことを確認のうえで、解候補にしていたのである。
 問題の4フレーム連続解は、左重心移動を2フレーム連続したところで速度 2304 に戻っていた。しかしそこから直進させると、ガードビームに突っ込んでしまう。突っ込まないためには、7フレーム連続で左重心移動をさせねばならない。だが、7フレーム続けた後では既に速度は 2304 ではなくなっている。これでチェックを通らなかったのだ。

 左重心移動の途中どこかで 2304 に戻っていればパスするよう修正を行った。実際は左重心移動より前に 2304 に戻る場合もあるから、記述コードは遥かに複雑である。
 ともあれこれで、正解を正解として認識できるようになった。3周期分の最適化が終了したところで再生確認すると、完全に想定通りの速度変化になっていた。

 S-JET 最適化のノウハウはずっと活用できるし、初代 F-ZERO のTASでは非常に影響が大きい。しっかりとスクリプトの完成度を上げておくと、TAS製作者としての強力な武器になる。

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