NES RNGを既知の状態に設定するにはどうすればよいですか?

Dec 23 2020

クラシックテトリス世界選手権が提供するモッドされているオリジナルのNESコンソール使用して同じRNG両方のプレーヤーのために:

プレーヤーは同じRNGを持ちます

これがどのように行われたのか疑問に思います。したがって、私の質問は2つあります。

  1. NESではどのランダムシードが使用されますか?
  2. このシードはどのように操作できますか?

回答

6 Tommy Feb 11 2021 at 02:26

コミュニティウィキ。必要な手がかりが含まれているように見えるため、@ JaapJorisVensが回答を削除した理由がわかりません。

カートは私たちが作った特別なカートで、1000の選択可能なゲームが含まれています。カートは実際にはアダプター(本質的にはゲームジニー)であり、元のNESTetrisカートが接続されていない限り何もしません。

1000のゲームのそれぞれは、各ゲームのRNGを初期化する一意のランダムシードに対応します。シードは1ピースにつき1回繰り返され、シーケンスが生成されます。..。

カート内のRNGアルゴリズムの一部は、かなり大きなテーブルを使用します...毎年、これらのテーブルの内容をシャッフルして新しいカートを作成します。

そう:

  • オリジナルのテトリスが使用されます。
  • 競技会専用のカートリッジは、テトリスの乱数ジェネレーターを置き換えるパススルーとして機能します。そして
  • 具体的には、そのパススルーデバイスは、テトリスが新しいピースシーケンスを実行しているときにスポットし、その時点で次の乱数を挿入します。

NES自体は本質的に乱数を生成しません。これはゲームごとのプロセスですが、各ゲームが適切であると判断して実装されます。この競争の目的のために、彼らはそれ自身の乱数を代用する仲介者を設計し、それらを正確にオンデマンドで生成しました。

Jaapの答えの他の部分によると:

シードの「反復」に関連する計算はかなり詳細であり、LFSR(標準のNESカートで使用されている)、いくつかのループカウンター、およびいくつかのルックアップテーブルが含まれます。各ゲームの直前に、0から999までの乱数が選択され、カートでどのゲームを選択するかがプレーヤーに通知されます。ゲームがプレイされた後、それが再プレイされることはありません。

したがって、新しい実装と元の実装はどちらも線形フィードバックシフトレジスタ(「LFSR」)です。これは、出力されるビットが現在の状態の他のビットの組み合わせに排他的論理和をとるシフトレジスタです。つまり、nビットレジスタは 、人間がランダムと解釈するのに十分なほど斜めの固定シーケンスで2 n −1の状態を繰り返すことができます。

とはいえ、パススルーデバイスはLFSRを使用して乱数表にインデックスを付けることをさらに進めているように思われるため、従来のリップルカウンターよりも簡単にまとめることができるという理由だけで、LFSRが使用されている可能性があります。

おそらく、オリジナルはソフトウェアLFSRの出力を直接使用しているだけです。