決定性
同じシードのレベルは、どのデバイスでも、どのフレームレートでも同じように再生されます。ランダム性はシードから計算され、プレイヤーの行動はレベルに影響しません
レベルは時間の関数
レベルはタイムライン上に作られます。どのオブジェクトもフレームのスパンの中で存在し、キーフレームに沿って動きます
レベルはプレイヤーの行動を読み取りません。そのため、生きていても、死んでいても、ダッシュ中でも、ボットが代わりにプレイしていても、フレーム1200の見た目は同じです
影響は一方向です。レベルはアバターのサイズを変えたり、遅くしたり、操作を取り上げたり、衝突をオフにしたりできます。アバターからレベルへ戻る経路はありません
トリガーはありません。将来のバージョンに向けて議論されていますが、何も決まっていません
レベルは実時間で進みます。フレームレートが決めるのは、画面を描き直す頻度だけです。同じプレイは、毎秒30フレームでも144フレームでも同じように進みます
シード
シードは、設定されている最初の場所から取られます:
- レベル画面の
プレイヤーシード(ランダム化で新しいシードを選び、消去で消します) - 作者が設定したレベル自身のシード
- このプレイ用の新しいシード
0は「未設定」を意味します。そのため、通常のレベルは読み込むたびに新しいシードを使います
結果ウィンドウにはプレイのシードが表示され、記録にも保存されます。こうして運の良かったプレイを再現できます
ランダム性の仕組み
レベル内のランダム値は、状態を覚えている生成器から取り出されるのではありません。そのアドレスから計算されます:
Hash(seed, keyframe frame, layer, start frame, track, channel)
同じアドレスからは常に同じ数が得られます。どのデバイスでも、どの順番で計算しても同じです。アドレスのどの部分も、作者が編集するものです。そのため、同じ配置なら同じプレイが繰り返されます
これで何ができるか
- Warmボットは、プレイが始まる前にレベル全体を通るルートを計画します。これができるのは、計画したのとまったく同じレベルが再生されるからです
- Reflexボットは、現在のフレームより先のフレームを作り、それを見て回避します
- チェックポイントへの巻き戻しは、何かを取り消すのではなく、必要なフレームを作り直します
- エディターはどのフレームでもゼロから作れるので、スクラブが即座に反映されます
- 記録と統計は、どのデバイスでも同じ意味を持ちます
既知の制限
レベル側は決定的です。アバター側には、まだ修正されていない既知の欠陥があります:
- 2つの障害物が同じフレームでアバターに当たった場合、どちらがノックバックの方向を決めるかがプレイごとに異なることがあります
- レベル開始時にアバターの時計がリセットされません。レベルの読み込みにかかった時間によって、ダッシュが1フレーム長く、または短く続くことがあります
同じビルドで同じボットのプレイを繰り返した測定では、最後の桁まで一致しました。つまり、これらの欠陥はすべてのレベルで発生するわけではありません。これらがあるため、プレイは実際には再現できますが、保証はされません