https://discord.com/channels/465585922579103744/466418871210082325/928542950814810153
通信ケーブルは、ロックステップや巻き戻しによって最も正確にエミュレートされることが多いのですが、これは恐ろしいことです。例えば、ゲームボーイなどでは、オリジナルのシリアルプロトコルが毎回片道1バイトを送信するため、転送のたびに通信の返信を期待するゲームがあります。
また、ゲームのプロトコルを直接ハイジャックして、ネット対戦の余計な遅延を無視できるような、(テトリスのオンラインプロジェクトのように)明確な「通信不可」バイトを持つものもあります。
しかし、双方向転送の結果、99.9%のゲームボーイなどのゲームのエミュレーションは、以下のいずれかの方法で行われています。
- ホスト上で両方のゲームを完全にロックステップで実行し、2番目のプレーヤーからの入力をホストに送信し、クライアント上でゲームのステートを再構築するのに十分な量を送信します。常に正確ですが、プレイヤー2には入力の遅延が発生します。ちなみに、これはopenttd(PCゲーム)のマルチプレイヤーの仕組みです。
- ホストとクライアントをほぼ同期して動作させることで、ホストとクライアントは1つのシリアル転送の時間以上に先に進むことができず、どのバイトがいつ転送を開始したかを相手が教えてくれるのを待ちます。これは低レイテンシーを必要とするため、確かLAN上でよりよく機能します。技術的には、転送が部分的に完了したときに、転送レジスタの正しい状態を持たないので、正確性に欠けますが、これはおそらく問題ないでしょう。
- 転送が入ってきたときに各エミュレータを巻き戻し、転送すべきだった時点から再実行する。これにより、両方のプレーヤーが過去の正しい時点で転送を考慮しながら、入力の遅延なしにローカルで「最新」の状態にすることができます。ただしより多くの処理が必要です。この方法は最も先進的なもので、オンラインPCゲームの遅延補正に似ています。