Pokémon Platinum / Nintendo WFC
公式のニンテンドーWi-Fiコネクションは2014年5月に止まりました。有志のサーバーが今も動いているので、エミュレータのまま、実機もパッチもなしで通信対戦ができます。2人で読む手順です。
スタンドアロン版の melonDS を使う場合だけは実機からの吸い出しが要ります。ここでは使いません。RetroArch の melonDS DS コアは内蔵BIOSのまま接続できて、接続先サーバーも最初から設定済みだからです。
PC は公式サイトから、Android と iOS はそれぞれのストアから。
RetroArch 本体だけではDSは動きません。コアを別途ダウンロードします。名前が似た旧コア「melonDS」が併存しているので、末尾に DS が付いた方を選んでください。
ここがこの手順で唯一、2人で違う値を入れる場所です。次の項目で詳しく書きます。
ROMを一度起動してから、クイックメニューのコアオプションを開きます。MAC address mode を Derive from libretro username に変更してください。初期値のままだと全員が同じ端末に見えてしまいます。
接続先は Kaeru WFC が既定値で入っています。DNSを手で設定する必要はありません。
設定 → ユーザー → ユーザー名
このユーザー名からMACアドレスが作られます。2人が同じ名前だと同一の端末として扱われ、対戦相手として認識されません。中身は何でもいいので、重複しないことだけ確認してください。
ここからが実は一番時間がかかります。ポケモンプラチナのWi-Fi機能は、ゲームを少し進めないと解放されません。2人ともこの状態まで進める必要があります。
バッジが1個もないとパルパッドがもらえません。
ポケモンセンターの地下へ降りて、受付の女性に話しかけます。
地下にいる左から2番目の女性に話しかけると接続します。ここで自分のフレンドコードが発行されます。
お互いのコードをパルパッドに入れます。片方だけでは成立しません。2人とも相手のコードを登録して、はじめて相手が見えるようになります。
レベル50フラット、レベル100、制限なしの3つから選べます。レベル50戦なら手持ちが50未満でも自動的に揃うので、育成の手間はいくらか減ります。
2人が同時にオンラインでないと繋がりません。それぞれポケモンセンター地下のWi-Fiクラブに入り、相手が入ってくるのを待ちます。シングルかダブル、ルールを選んで開始です。
閉じた対戦になる理由
第4世代のWi-Fi対戦は、パルパッドに登録した相手としか成立しません。公開サーバーに接続していても、見知らぬ他人と当たることはない仕組みです。自前でサーバーを建てなくても、対戦相手は登録した相手だけに限られます。
| 症状 | 見るところ |
|---|---|
| 相手が出てこない | 2人ともユーザー名を別にしたか。2人とも相手のフレンドコードを登録したか。この2つがほぼ全てです。 |
| 接続テストが通らない | コアが melonDS DS であることを確認してください。名前の近い旧コアだとWi-Fi周りの作りが違います。 |
| Error 20110 service has been halted |
Kaeru WFC 側で報告のあるエラーです。時間を置くか、コアオプションで接続先サーバーを Wiimmfi や AltWFC に切り替えて試します。 |
| Wi-Fi設定が見つからない | DSのWi-Fi設定はゲーム内から開きます。RetroArch側ではなく、エミュレートされたDSの設定メニューです。 |
公式サービスの停止直後から Wiimmfi が代替サーバーとして立ち上がり、現在まで動き続けています。今は役割が3層に分かれていて、Wiimmfi が汎用のWFCエミュレーション、Kaeru WFC がSSL部分、Poké Classic Network が第4・第5世代ポケモン向けのGTSやバトルビデオを担当しています。
かつてはROMにパッチを当てるのが必須でした。DSは接続先のサーバー証明書を検証するので、公開鍵を差し替えないと別のサーバーに繋げなかったためです。2018年にDSのSSL実装の欠陥が見つかって、これが不要になりました。DS本体に入っているNintendo署名のクライアント証明書が、サーバー証明書と同じCAで署名されていて、しかもDSは「クライアント証明書が別の証明書に署名している」ことを検証せずに通してしまう。つまり誰でもDSから見て正当なサーバー証明書を作れます。この発見を使っているのが Kaeru WFC で、リポジトリ名は "Because Nintendo can't do SSL properly" です。
ついでに言うと、DS同士の「ローカル通信」の方はエミュレータ間では実現できません。あちらのプロトコルはパケットの遅延到着を許容しない作りで、ネットワーク越しに延ばすこと自体が不可能だからです。インターネット対戦の方が通常のTCP/IP通信なぶん、かえって素直に動きます。