キー入力記録方式のリプレイずれ

こちらの続きのようなそうでもないような話。

いりす症候群!のリプレイデータは乱数の種とキー入力を保存して、再生時は同じ乱数の種とキー入力を与えてプレイ状況を再現するという方式です*1

こう書くと簡単そうですがこの方式は意外に落とし穴が多くて、適当に実装していると同じプレイ状況が再現できずに忌まわしきリプレイずれが発生する訳です。

このリプレイ方式はメジャーだけあって検索すると有用なノウハウがまとまっているので大変助かります。

自分が気をつけたことは、

  • 乱数取得元は複数にする

プレイに関わる乱数(例:出現ブロックの色)と、プレイに関わらない乱数(例:パーティクルの飛び散り具合)は分ける。乱数生成のインスタンスがひとつしかないと、パーティクルの飛び散り具合を変更しただけでリプレイデータに互換性がなくなるという困ったことになる。

  • 外部ライブラリに気をつける

いりす症候群!ではBox2Dという2D物理エンジンを使っています。で、Box2Dが持っているオブジェクトを全部解放してから同じことを再現しようとしても、どうも異なる挙動を示すようでリプレイずれました。これは、プレイをまたいでBox2Dのおおもとのインスタンス(world)を使いまわすのをやめて、プレイごとに全部再生成するようにしたらずれなくなりました。


という訳でこういうリプレイバグをひとつずつ潰した結果、リプレイずれはほぼなくなったと思います。なくなったと思ったのですが、テストプレイヤーさんのリプレイデータを自分のPC上で再生するとずれまくるという現象が発生しました。他のテストプレイヤーさんのPCでは再生できるようで、ずれるのは自分だけみたいです。原因はよくわかりません。あきらめました。

そんな訳でいりす症候群!のリプレイデータは記録PC上での再生はまず大丈夫ですが、記録PC以外での再生はすこし怪しいです。すいません。

*1:「愛と勇気とかしわもち」も同じ方式です