リプレイバグフリーは実現可能か

リプレイバグっていうのは、ゲームのリプレイ機能が正しく働かず、どこかで実際のプレイとのずれが発生してしまうバグのことだ。だいたいのリプレイ機能ってのは、記録されたユーザのパッド入力のみを再生し、あとは通常のゲームと同様の動作を行わせるっていう形で実装されるのが普通なので、その通常ゲーム動作部分が毎回同じ動作をするという保障がないと正しく動作しない。

このバグは直すのが難しい上にしばしば発生する。発生する原因をいくつか挙げると、

  • オブジェクトのフィールド初期化やオブジェクトプールのインデックス初期化が不完全でオブジェクトの振る舞いが一定しない
  • 乱数インスタンスにシードを与えるのを忘れている
  • Drawメソッドの中でカウンタなどを操作してしまいフレーム落ち時にずれる
  • リプレイ用に初期化した後に一回余計にUpdateしてしまい初期フレームがずれる

などがある。どれも発生する確率が低かったり、問題が発生した後にそれがゲームの流れに影響を与えるのがずっと後だったりするために、発見が難しい。

リプレイ実装周りのノウハウがどっかに集まっているといいんだが。

  • リプレイバグを生む原因一覧
  • それらに対処する方法
  • リプレイバグフリーなフレームワーク

あたりの情報が欲しいところだ。