RetroArch(旧SSNES)は、CまたはC++で書かれた、オープンソースでマルチプラットフォームのlibretroフロントエンドです。高速、軽量、移植性に優れた設計になっています。
- 複数のプラットフォームで一貫性があり、同じUI構造と完全な機能を持つコマンドラインインターフェースを使用しています。
- ゲームパッドで操作可能なメニューシステムで、XMBやMaterial UIなど複数のスタイルが用意されています。
- ゲームパッドの自動設定プロファイルにより、接続時にゲームパッドが自動的にマッピングされます。XInputコントローラの自動設定は、アプリケーションに組み込まれており、他のタイプのコントローラは外部プロファイルとして利用できます。
- コアごと、ゲームごとの設定をオーバーライド可能です。
- ビデオ出力の解像度とリフレッシュレートをカスタマイズでき、専用のフルスクリーンモードとマルチモニター設定用のモニターインデックスを備えています。
- DRCにより、ゲームの出力レートがシステムと異なる場合でも、音声と映像をスムーズに再生できます。GBAのように60Hzに対応していないシステムでは特に顕著です。
- 基本的な早送り、SRAMセーブ、セーブステートなどが実装されています。リアルタイムの巻き戻しやネットプレイに使用されるエミュレーション状態のシリアライズをサポートしています。
- 主にCgとGLSLを使用したピクセルシェーダーで、Xbox 360ではHLSLを使用しています。使用しているシェーダーフォーマットは柔軟で、かなり使いやすく、ランタイムパラメーターを調整して複雑なマルチパスエフェクトを実現することができます。また、ソフトウェアで実行される従来のビデオフィルタプラグインにも対応しています。
- .dsp設定ファイルによるオーディオDSPフィルタープラグインに対応。
- カスタムオーバーレイ対応。
- FFmpegの記録と再生に対応。コアのネイティブ解像度の出力か、フロントエンドのポストプロセスされた出力のどちらかを記録することができます。再生は、内部のFFmpeg libretroコアを介して処理されます。
- ストリーミング対応。RetroArchにTwitchアカウントを追加し、ちょっとした設定をすることで、プレイしたゲームの内容をTwitchで配信することができます。
- GGPOのようなネットプレイ(レイテンシ隠しのロールバック搭載)。参加者全員がフルスピードでエミュレートし、地理的に遠いところ(世界の裏側くらい)に住んでおらず、適切なインターネット速度を持っていれば、ラグを感じないプレイが可能になるはずです。P2PのUDPを使用し、2人プレイをサポートします。ロールバックのため、動作にはかなりのCPUパワーが必要で、シリアル化をサポートするコアでのみ動作します。
- ビデオドライバによるバッファリングを排除することで、vsyncに関連する入力レイテンシーを低減するオプションや、フレームディレイを使用して、ディスプレイ上でvsyncが発生する直前まで入力のポーリングを遅延させるオプションがあります。
- レイテンシを減らすために先取り実行を備えています。この設定では、サイクル精度の高いエミュレータが、必須の1~2フレームの入力ラグを先取りして実行します。これにより、エミュレータはオリジナルのハードウェアよりも優れたレイテンシを達成することができます。
Netplayは、現在のビルドでは、「Settings > Netplay」オプションでメニューから使用できるようになりました。古いビルドでは、コマンドラインやRetroArch-Phoenix Launcherでも動作するようになっています。
ゲームをホスト(サーバー)するのか、参加(クライアント)するのかを指定する必要があります。参加する場合は、下のフィールドにホストのIPアドレスを入力する必要があります。ファイアウォールでポート55435が開かれていること(デフォルト、変更可能)、ルーターでポートが転送されていること(該当する場合)を確認してください。また、「スペクテイター・モード」を指定すると、任意の数の観客が参加でき、自分ではプレイできずにあなたのプレイを見ることができます。
遅延フレームとは、実際のネットワーク遅延のために、RetroArchのlibretroコアが同期を維持するために一度にエミュレートする必要のあるフレーム数の最大値です。この数は、相手にpingを打って、その時間(ミリ秒)を16で割ると、だいたいの目安になります(だいたい60fpsのゲームの1フレームのミリ秒数です)。ゲームプレイが少しぎこちない場合は、遅延フレームの数を少し増やしてみてください。
GGPOプラットフォームと同様に、RetroArchでは、ボタンを押したときに発生するセーブステートの一定の流れを、サーバーとクライアントのマシン間で交換・比較します。セーブステートが乖離し始めると、ゲームは両者が一致するところまで時間を巻き戻し、その後、libretroコアが不足しているフレームを一斉にエミュレートして適切な場所に戻します。これにより、完全にラグのない入力をしているかのような錯覚に陥り、ヒネリの効いた細かい操作には非常に有効です。
サーバーに接続しようとすると、すぐにclient disconnected
と表示される場合は、ログを開いてROMが完全に一致していることを確認してください(一致していない場合は、ハッシュの不一致を訴えます)。
奇妙なタイムアウトエラーが出た場合は、ウィンドウを閉じてからもう一度接続してみると、自然に解決するはずです(ネットワーク遅延の過度の急増により、状態が壊滅的に乖離し、このエラーが発生することがあります)。