Windows 上でゲームキューブ版 PSO ep1&2 plus のオンラインモードをローカルでプレイする
[環境]
- OS = windows10
- Gamecube Emulator = Dolphin 5.0-21088
- Server Emulator = newserv (2024-02-10)
- Game = PSO ep1&2 plus v05
[手順]
なんとなく下図になるように設定する
+-------------------+ +------------------+ +------------------+
| 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 |
+-------------------+ +------------------+ +------------------+
- Windows の ネットワーク設定をいじる。ネットワークアダプタのプロパティを開き、さらに TCP/IPv4 のプロパティを開く。IP アドレスとサブネットマスクを手動設定する。 ( ex. 192.168.1.40/255.255.255.0 )
- そこから詳細設定を開き、サブネットの異なる IP アドレスを追加する。( ex. 192.168.2.40/255.255.255.0 )
- newserv の config.example.json を config.json にコピーして、これを編集する。LocalAddress を設定する。windows で設定したネットワークアドレスのうちの片方を設定する。( ex. 192.168.2.40 )
- Dolphin を起動して、設定→Dolphinの設定→ゲームキューブ、を開く。スロットA の割当をメモリカードにする(gci フォルダだとネットワーク情報のセーブに失敗する)
- その下の「シリアルポート1」を、ブロードバンドアダプタ(HLE) に設定し、DNS server を設定する。windows で設定したネットワークアドレスのうちの片方を設定する。( ex. 192.168.2.40 )
- newserv を起動する
- Dolphin で PSO を起動する。オプション→ネットワークの設定→ユーザープロバイダの設定を選び、接続設定は「IPアドレスを自動取得せずに自分で設定する」を選ぶ。続いて以下のように設定する。
- IPアドレス = windows で設定した2つの IP アドレスのうち Dolphin で指定した DNS server と異なるサブネットにある、適当なアドレス(newserv が ping を打つことがあるので、インターフェイスの実体があるIPアドレスがいいかも)
- サブネットマスク = 上で設定した IP アドレスに対応するもの
- デフォルトルーター = windows で設定した2つの IP アドレスのうち、Dolphin で指定した DNS server と異なるサブネットにあるもの
- プライマリDNSサーバー = Dolphin で指定した DNS server のアドレス
つまり、PSO クライアントが、自身のサブネットと異なるサブネットの DNS server を参照するように設定する。以下は例。
- IPアドレス = 192.168.1.40
- サブネットマスク = 255.255.255.0
- デフォルトルーター = 192.168.1.40
- プライマリDNSサーバー = 192.168.2.40
- 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
------
[覚え書き・ゲーム内容]
- オフラインクエストは、一度クリアするとその難易度のクエストを全部クリアしないと再プレイできない。全クリせずに周回したい場合、クエストをキャンセルする。
- ガロンズショップは EP2 のオンラインクエスト。交換アイテムはここ。
- Ep2 オンラインクエスト Phantasmal World = 幻界の果てに
- 幻界の果てに1 の海岸でギ・グーとめっちゃ戦える。
[覚え書き・ソフトウェア環境]
- newserv はデフォルトではアイテム生成を DC/GC版ではクライアント側で、BBではサーバー側で行う。config.json で設定できる。
- dolphin はオプション "-d" を指定して実行すると、エミュレーションコアの詳細設定やメモリ・レジスタ等のモニタリングができる
[覚え書き・レアアイテム発掘]
HUnewearl [REARIA]
以下相応に実用的なレアもの
- キュア・ショック (運良くヒルデブルーに出会った)
- ダブルセイバー
- ゴッド・ボディ (リューカー法)
- シノワビートブレード
- ヤマト (シルドラゴンよりも西天の塔のメリカロル(だっけ?)でよく拾った)
- デビル・バトル (意外と西天の塔のシノワゾワ(だっけ?)が落とした)
- ゴッド・ラック (リューカー法)
- ゴッド・バトル (かなりめげそうになった)
- 赤のハンドガン (リューカー法。Hit付きまでに10本以上拾った)
- セイクリッドクロス (実用的かどうかは怪しい)
- デモリションコメット (運良くオブリリーが出た)
- スピリット・ガーメント (西天の塔。輝石ムーラを拾うのはなかなかしんどそう。オンラインでガロンズショップを使えば魔石ハートキーはそれなりに時間をかければ用意できるだろう)
- ルミナスフィールド (ゴッドバトル以上にめたくそめげそうになった)
[覚え書き・トラブル]
オンラインモードで動かすと、たまに dolphin の CPU エミュレーションコアが0番地にアクセスして止まる。
以下気づいたこと
- オンラインでハングアップしたことがある。オフラインではハングアップしたことはない。
- ハングアップするときは、部屋を作って冒険を開始してからわりと早い段階でハングしてる気がする。ハングしないときは全然ハングしない。
- 攻撃が当たったときにハングしてる気がする。
- 一つオンラインクエストを終えて部屋を抜け、再度部屋を作ってクエストを始めたら早い段階でハングアップした。部屋/クエストの作成に問題がある?
- 上記が2回連続して起きた。
- 3度連続して起きた。なるほど。
- newserv 起動→チーム作成→ロビーに戻る→チーム作成→クエスト開始→クエストクリア
- newserv 起動→チーム作成→クエスト開始→即クエストキャンセル→チーム作成→クエスト開始→クエストクリア
- newserv 起動→チーム作成→クエスト開始→ハングアップ。今度は一度目でハングアップして、規則性がよくわからない。しかし、ハングアップするときはクエスト開始序盤というのは変わらない。
以下試したこと
- 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 を試したほうがいいかも。
ネットワーク設定を見返して、これって間違ってね?ってなったので直した。これで安定するかどうか。→安定しない。わからんので放置。