Windows 上でゲームキューブ版 PSO ep1&2 plus のオンラインモードをローカルでプレイする

[環境]

[手順]
なんとなく下図になるように設定する
+-------------------+                    +------------------+                     +------------------+
| PSO client        | ---->DNS req ----> | Dolphin BBA      | ----> DNS req ----> | newserv          |
| IP  192.168.1.40  | <----DNS resp<---- | IP  192.168.1.40 | <---- DNS resp <--- | IP  192.168.2.40 |
+-------------------+                    +------------------+                     +------------------+
  1. Windows の ネットワーク設定をいじる。ネットワークアダプタのプロパティを開き、さらに TCP/IPv4 のプロパティを開く。IP アドレスとサブネットマスクを手動設定する。 ( ex. 192.168.1.40/255.255.255.0 )
  2. そこから詳細設定を開き、サブネットの異なる IP アドレスを追加する。( ex. 192.168.2.40/255.255.255.0 )
  3. newserv の config.example.json を config.json にコピーして、これを編集する。LocalAddress を設定する。windows で設定したネットワークアドレスのうちの片方を設定する。( ex. 192.168.2.40 )
  4. Dolphin を起動して、設定→Dolphinの設定→ゲームキューブ、を開く。スロットA の割当をメモリカードにする(gci フォルダだとネットワーク情報のセーブに失敗する)
  5. その下の「シリアルポート1」を、ブロードバンドアダプタ(HLE) に設定し、DNS server を設定する。windows で設定したネットワークアドレスのうちの片方を設定する。( ex. 192.168.2.40 )
  6. newserv を起動する
  7. Dolphin で PSO を起動する。オプション→ネットワークの設定→ユーザープロバイダの設定を選び、接続設定は「IPアドレスを自動取得せずに自分で設定する」を選ぶ。続いて以下のように設定する。 つまり、PSO クライアントが、自身のサブネットと異なるサブネットの DNS server を参照するように設定する。以下は例。
  8. PSO のタイトル画面に戻り、オンラインゲームを選ぶ。
[おまけ]
windows のネットワーク設定はバッチファイルで自動化できる。以下、name= で指定するのは、ipconfig とかで表示されるインターフェイス名
  • ゲームプレイ用に設定する
    ------
    @echo off
    net session >nul 2>nul
    if %errorlevel% neq 0 (
      @powershell start-process %~0 -verb runas
     exit
    )
    
    netsh interface ipv4 set address name="イーサネット 1" source=static address=192.168.1.40 mask=255.255.255.0
    netsh interface ipv4 add address name="イーサネット 1" address=192.168.2.40 mask=255.255.255.0
    ------
    

  • DHCPを使うように設定する
    ------
    @echo off
    net session >nul 2>nul
    if %errorlevel% neq 0 (
      @powershell start-process %~0 -verb runas
     exit
    )
    
    netsh interface ipv4 set address name="イーサネット 1" source=dhcp
    netsh interface ipv4 set dnsservers name="イーサネット 1" source=dhcp
    ------
    

    [覚え書き・ゲーム内容]

    [覚え書き・ソフトウェア環境]

    [覚え書き・レアアイテム発掘]

    HUnewearl [REARIA]
    以下相応に実用的なレアもの

    [覚え書き・トラブル]

    オンラインモードで動かすと、たまに dolphin の CPU エミュレーションコアが0番地にアクセスして止まる。
    以下気づいたこと

  • 以下試したこと
    • newserv の system/client-functions ディレクトリをそのまま or 空にする → どちらも止まったことがある
    • dolphin の設定 direct 3D 12 or 11 → どちらも止まったことがある
    • dolphin の設定 DSP HLE or LLE → どちらも止まったことがある
    • IPルーティングを有効 or 無効 → どちらも止まったことがある
    • CPU エミュを cached interpreter にしてみたけど遅すぎてゲームにならない
    • CPU コアの MMU を無効 or 有効 → どちらも止まったことがある
    考え
    • newserv にも dolphin にも問題がないと仮定すると、1台の PC にサブネットの異なる IP アドレスが2つあるというネットワーク環境が怪しい気がする
    • 攻撃が当たったときにハングするというのは、もしかしてアイテムがフロアにドロップした時にハングしてるのかもしれない → アイテムがいくつか落ちた後にハングアップしたので、ちょっと違う気もする
    やってみようか
    • newserv のソースをもっと読む?→部屋・クエストの削除・作成がどうなってるのか
    • dolphin の公式に報告してみる?
    • newserv のログを DEBUG レベルにして眺める?
    • 他の server emulator を試したほうがいいかも。
    ネットワーク設定を見返して、これって間違ってね?ってなったので直した。これで安定するかどうか。→安定しない。わからんので放置。