N64エミュレータ「m64p」でオンラインプレイ

N64エミュレータ「m64p」でオンラインプレイ
【2022/07/22】更新
  • 「インプットプラグイン設定」を更新

Nintendo64のエミュレータを使用して、オンラインで遊ぼうという企画です。
本記事では、「ゴールデンアイ007」、「パーフェクトダーク」を遊べるようにすることを目的としています。
※現在検証中のため、まだ結論は出ていません!
 記事も一部まだ作成中です。

はじめに

エミュレータを使用したネットプレイについては、過去にも何度か検証していますが、どうしても発生する同期ズレや4人での快適なプレイが課題となっており、新しいエミュレータを見つけるたびに検証しています。

過去には、以下を検証しています。

「m64p」とは

「m64p」は、Mupen64Plusシリーズを1つにまとめた最新版のエミュレータです。
公式サイト:https://m64p.github.io/

元々「Mupen64」というエミュレータが存在していましたが開発は終了し、その後「Mupen64Plus」に開発が引き継がれましたが、GUIがないため別途ツールで用意する必要がありました。
また、「Mupen64Plus」から派生した「Mupen64K」や「Mupen64++」というKailleraによるネットプレイに対応したエミュレータも開発されました。
参考:ねこかぶさんのエミュレータWiki(Mupen64について)

m64pは、これらを統合し、GUI、ネットプレイ機能搭載のエミュレータとなっています。
そして、現在も開発が進んでおり、頻繁にアップデートされています。

ネットプレイ機能の強化

m64pのネットプレイ機能はP2P接続ではなく、サーバベースとなっています。
公開されているサーバにアクセスして部屋を作成する形式となるため、プレイヤー同士のポート開放は不要です。
また、古い技術であるKailleraは使用されておらず、m64p用に新たに開発されたモジュールが使用されています。
入力遅延を考慮して設計されているとのことです。
参考:m64pの公式Wiki(Netplay FAQ)

上記FAQでは以下の質問にも回答しています。
通信量は少なく、遅延も上手いこと管理されているようです。

  • pingが高い人と遊ぶと、入力遅延が発生しますか?
    →m64p netplayは、従来のN64netplayテクノロジーとは異なる方法で入力遅延を管理します。
    誰かのpingが高い場合、その入力レイテンシーのみが影響を受け、他のプレーヤーのレイテンシーには影響しません。
  • 帯域幅の使用量はどのようになっていますか?
    →特定の測定は行われていませんが、m64p netplayはキー入力データのみを送信し、savestatesやグラフィックスは送信しないため、帯域幅の使用量は非常に少なくなります。

また、サーバ用ソフトはオープンソースでGitHub上に公開されており、自分でサーバを建てることも可能です。
https://github.com/m64p/m64p-netplay-server/releases

サーバの建て方についてもそのうち記事にしたいと思います(AWSのEC2上に建てることができました)。

必要スペックの向上

2022/07/18現在の最新バージョン(v2022.07.6)では、ビデオプラグインは「paraLLEl」のみ対応となっています。
このプラグインは、GPUがグラフィックスAPI「Vulkan 1.1」に対応していないと使用することができません。
IntelのCPUの内臓GPU(Intel HD Graphics)を使用している場合は、Skylake(第6世代)以降のCPUが必要となります。
場合によっては、ドライバの更新が必要となります。
参考:https://www.intel.co.jp/content/www/jp/ja/support/articles/000005524/graphics.html

また、NVIDIAのグラフィックボードを使用している場合は、Keplerシリーズ以降である必要があります。
参考:https://ja.wikipedia.org/wiki/NVIDIA_GeForce

ビデオプラグインの再現方法には、HLEとLLEの2種類の方式が存在します。
HLE:描画処理をいくつか省略し再現する(GLideN64等)
LLE:実機の描画処理を正確に再現する(ParaLLEl等)
「ParaLLEl」は、LLE形式のため再現度が実機に近くなりますが、その反面、計算量が多くなるためそれなりのスペックが求められます。

旧バージョンでは「GLideN64」も付属していたのですが、v2021.6.6から削除されました。
「GLideN64」を使用する場合は、v2021.6.6よりも前のバージョンを使用する必要があります。
ただし、ネットプレイを行う場合は、最新のバージョンのサーバには接続できないため、古いバージョンに対応したサーバに接続する必要があります。

v2021.6.6より前の最新バージョンは以下となります。

開発者の方いわく「非常に使いやすく正確なエミュレータ」を目指しており、プラグイン形式は複雑になるため、使いやすさ重視で複雑さを軽減するという方針のためにこのような形式となったようです。

インストール手順(最新バージョン)

2022/07/18現在、最新バージョンは「v2022.07.6」です。

v2021.6.6以降は、ビデオプラグイン「GLideN64」が削除されていますが、「GLideN64」を使用したい方もいらっしゃると思います。
そのため、旧バージョンと最新バージョンの2パターンの手順を記載します

m64pのインストール

  1. m64p公式サイトにアクセスします。
    https://m64p.github.io/
  2. 「Download Emulator」ボタンをクリックします。
  3. Assetsから「m64p-win64-3f1da83.zip」リンクをクリックし、ダウンロードします。
  4. 「m64p-win64-3f1da83.zip」を任意の場所に展開します。
  5. 「mupen64plus-gui.exe」を実行します。

設定ファイル保存場所設定

Settings → Plugin and Path Selection

「Config Dir Path」に設定ファイルの保存先を指定します。
デフォルトは「$CONFIG_PATH$」で、実際の場所は「C:\Users\%username%\AppData\Roaming\Mupen64Plus」となります。

対象となる設定ファイルは以下の3ファイルです。

  • input-profiles.ini
  • input-settings.ini
  • mupen64plus.cfg

例えば、mupen64plus-gui.exeと同じフォルダ内に保存する場合は「$APP_PATH$」と入力します。
「$APP_PATH$/config」と入力すると「config」フォルダ配下に保存されるようになります。

そのまま「×ボタン」で閉じれば設定が保存され、次回起動時に設定ファイルが指定の場所に保存されます。
ただし、元の場所にあったファイルはそのまま残るので、不要であれば削除してください。

セーブファイル等保存場所設定

Settings → Core and Video Settings → 「Core」タブ

スクリーンショット、セーブステート、セーブデータ、共有データファイルの保存先を指定できます。
空欄がデフォルトで実際は「C:\Users\%username%\AppData\Roaming\Mupen64Plus」配下に保存されます。

mupen64plus-gui.exeと同じフォルダ内に保存する場合の設定例
(こちらに関しては$APP_PATH$が認識しませんが、相対パスで指定可能)

  • ScreenshotPath:screenshot
    →フォルダは自動で作成されないため、事前に作成しておく必要があります
  • SaveStatePath:save
  • SaveSRAMPath:save
  • SharedDataPath:shaders

そのまま「×ボタン」で閉じれば設定が保存され、次回起動時にファイルが指定の場所に保存されます。
ただし、元の場所にあったファイルはそのまま残るので、不要であれば削除してください。

ビデオプラグイン設定(paraLLEl)

Settings → Core and Video Settings → 「ParaLLEl Video」タブ

「ScreenWidth」、「ScreenHeight」で横幅、高さを指定します。
また「Fullscreen」にチェックを入れるとフルスクリーンで起動します([Alt] + [Enter] で解除できます)。

それ以外は基本的には、そのままの設定で問題ないです。
現在、設定内容については検証中のため、設定内容が確立したら記載します。

インプットプラグイン設定

Settings → Controller Configulation

最初にプロファイルを作成する必要があります。

  1. 「Manage Profiles」タブを選択します。
  2. キーボードを割り当てる場合は「New Profile (Keyboard)」
    コントローラを割り当てる場合は「New Profile (Gamepad)」ボタンをクリックします。
  3. 「Profile Name」にプロファイル名を入力します。
  4. ボタンの名称の横にあるボタンをクリックしてから、割り当てたいキーやコントローラのボタンを押下し、認識させます。
  5. 「Deadzone」や「Analog Sensitivity」を必要に応じて調整します。
    「DeadZone」は3Dスティックの認識しない範囲です。(5%なら5%倒したところから認識する)。
    「Analog Sensitivity」は3Dスティックの感度です。
  6. 「Save and Close」ボタンをクリックし保存します。
  7. 「Controller 1」タブを選択します。
  8. 以下を設定します。
    Profile:上記で作成したプロファイル
    Gamepad:使用するコントローラ
    Pak:
    ・Memory(コントローラパックを使用する場合)
    ・Rumble(振動パックを使用する場合)
    ・Transfer(64GBパックを使用する場合)
    ・None(使用しない場合)
  9. そのままウィンドウを閉じて完了です。

オーディオプラグイン設定

Emulation → Volume

設定できるのは音量のみです。

インストール手順(旧バージョン)

v2021.6.6以降は、ビデオプラグイン「GLideN64」が削除されています。
「GLideN64」を使用する場合は、v2021.6.6よりも前のバージョンを使用する必要があります。
v2021.6.6より前の最新バージョンは以下ですが、ソース版はビルドが必要となるため、実行ファイルで配布されているv2021.5.12をインストールする手順を記載します。

m64pのインストール

  1. v2021.5.12のダウンロードページにアクセスします。
    https://github.com/m64p/m64p/releases/tag/v2021.5.12
  2. Assetsから「m64p-win64-e6c3600.zip」リンクをクリックし、ダウンロードします。
  3. 「m64p-win64-e6c3600.zip」を任意の場所に展開します。
    ※中のフォルダ名が「mupen64plus」で他のバージョンと同様のため、上書きしないように要注意
  4. 「mupen64plus-gui.exe」を実行します。
  5. バージョンが古いため、アップデートの確認が表示されます(毎回聞かれます)。
    必ず「No」を選択してください。

設定ファイル保存場所設定

Settings → Plugin and Path Selection

「Config Dir Path」に設定ファイルの保存先を指定します。
デフォルトは「$CONFIG_PATH$」で、実際の場所は「C:\Users\%username%\AppData\Roaming\Mupen64Plus」となります。

対象となる設定ファイルは以下の3ファイルです。

  • input-profiles.ini
  • input-settings.ini
  • mupen64plus.cfg

例えば、mupen64plus-gui.exeと同じフォルダ内に保存する場合は「$APP_PATH$」と入力します。
「$APP_PATH$/config」と入力すると「config」フォルダ配下に保存されるようになります。

そのまま「×ボタン」で閉じれば設定が保存され、次回起動時に設定ファイルが指定の場所に保存されます。
ただし、元の場所にあったファイルはそのまま残るので、不要であれば削除してください。

セーブファイル等保存場所設定

Settings → Advanced Settings

スクリーンショット、セーブステート、セーブデータ、共有データファイルの保存先を指定できます。
空欄がデフォルトで実際は「C:\Users\%username%\AppData\Roaming\Mupen64Plus」配下に保存されます。

mupen64plus-gui.exeと同じフォルダ内に保存する場合の設定例
(こちらに関しては$APP_PATH$が認識しませんが、相対パスで指定可能)

  • ScreenshotPath:screenshot
    →フォルダは自動で作成されないため、事前に作成しておく必要があります
  • SaveStatePath:save
  • SaveSRAMPath:save
  • SharedDataPath:shaders

そのまま「×ボタン」で閉じれば設定が保存され、次回起動時にファイルが指定の場所に保存されます。
ただし、元の場所にあったファイルはそのまま残るので、不要であれば削除してください。

ビデオプラグイン設定(GLideN64)

Settings → Video Settings
※GLideN64を使用する場合「LLE Graphics」のチェックを外します。

「Windowed resolution」で横幅、高さを指定します。
また「Full Screen」にチェックを入れるとフルスクリーンで起動します([Alt] + [Enter] で解除できます)。

それ以外は基本的には、そのままの設定で問題ないです。
現在、設定内容については検証中のため、設定内容が確立したら記載します。

インプットプラグイン設定

Settings → Controller Configulation

  1. 「Manage Profiles」タブを選択します。
  2. キーボードを割り当てる場合は「New Profile (Keyboard)」
    コントローラを割り当てる場合は「New Profile (Gamepad)」ボタンをクリックします。
  3. 「Profile Name」にプロファイル名を入力します。
  4. ボタンの名称の横にあるボタンをクリックしてから、割り当てたいキーやコントローラのボタンを押下し、認識させます。
  5. 「Deadzone」や「Analog Sensitivity」を必要に応じて調整します。
    「DeadZone」は3Dスティックの認識しない範囲です。(5%なら5%倒したところから認識する)。
    「Analog Sensitivity」は3Dスティックの感度です。
  6. 「Save and Close」ボタンをクリックし保存します。
  7. 「Controller 1」タブを選択します。
  8. 以下を設定します。
    Profile:上記で作成したプロファイル
    Gamepad:使用するコントローラ
    Pak:
    ・Memory(コントローラパックを使用する場合)
    ・Rumble(振動パックを使用する場合)
    ・Transfer(64GBパックを使用する場合)
    ・None(使用しない場合)
  9. そのままウィンドウを閉じて完了です。

オーディオプラグイン設定

Emulation → Volume

設定できるのは音量のみです。

ネットプレイのやり方

現在、実験用にPD研究室サーバが起動中です(不定期にて起動)。2022/07/18まで。
pdlab.f5.si(最新バージョン用 v2022.07.6)
pdlab.f5.si:46000(旧バージョン用 v2021.6.6より前)

事前のセーブデータの共有は必要なし

基本的に、事前にセーブデータを共有しておく必要はありません。
ゲーム開始時、部屋の作成者(Player 1)のセーブデータが共有されます。
また、セーブデータの共有はされますが、参加者のセーブデータのファイルが置き換わることはありません。

ただし、もし必要なセーブデータがある場合は「Player 1」に共有しましょう。
例えば、パーフェクトダークのコンバット・シミュレータの個人設定を使用する場合は、コントローラパックに保存し「Perfect Dark (J) [!].mpk」を「Player 1」に共有しましょう。

改造コードを使用する場合

改造コードを使用する場合は「mupen64plus.ini」に記載をします。
「mupen64plus.ini」はゲームごとに設定値を管理しているファイルで、その中にCheat(改造コード)が存在します。

改造コードを使用する場合は、参加者全員が「mupen64plus.ini」に同じ記載をするか、「mupen64plus.ini」を共有する必要があります(同期ズレの原因となります)。

書き方の例:
Cheat0=810806F8 0001,810806FA 0184,810806FC 0183,810806FE 013C

Cheat0の「0」の部分は、行ごとに増えます。
1行で1つのグループで、カンマ区切りで複数指定できますが、恐らく認識するのは8つまでなので、8つ以内になるようにした方がいいです。

例えば、パーフェクトダークのキャリントン協会ビルでコンバットの改造コードを記載すると以下のようになります。

[538D2B75945EAE069B29C46193E74790]
GoodName=Perfect Dark (J) [!]
CRC=96747EB4 104BB243
SaveType=Eeprom 16KB
Players=4
Mempak=Yes
Rumble=Yes
Transferpak=Yes
; Cheats
; 1. キャリントン協会ビルでコンバット
; 1-1. キャリントン協会(非任務)の無効化
Cheat0=810806F8 0001,810806FA 0184,810806FC 0183,810806FE 013C
; 1-2. ポインタ固定コード
Cheat1=D0071A2B 0001,81099A7A 00A0,D0071A2B 0002,81099A7A 7980,D0071A2B 0003,81099A7A 5F10,D0071A2B 0004,81099A7A 3930
; 1-3. アリーナ設定ファイル変更
Cheat2=81080888 01E2
; 1-4. 起動アリーナ変更
Cheat3=80085289 002D,8108528C 56A2,810852A4 50FF
; 1-5. ウェポンと弾薬箱の設置
Cheat4=814F5C16 00B3,814F5C7E 00B2,814F5D26 00B4,814F5DCE 0045,814F5E36 0044,814F5EDE 0047,814F5F86 0091,814F5FEE 0090
Cheat5=814F6096 0092,814F613E 001E,814F61A6 000C,814F624E 002A,814F62F6 00F0,814F635E 00F1,814F6406 00EF,814F64AE 00FE
Cheat6=814F6516 010D,814F65BE 0114,814F6666 0059,814F66CE 005A,814F6776 005B,814F681E 00FD,814F6886 0067,814F692E 0066
Cheat7=814F69D6 0031,814F6A3E 002C,814F6AE6 002E,814F6B8E 009B,814F6BF6 009A,814F6C9E 009C
; 1-6. オブジェクトの設置
Cheat8=814F6D54 00C5,814F6D56 0195,814F6DAC 0195,814F6DAE 0196,814F6DF8 00C5,814F6DFA 0193,814F6E50 0193,814F6E52 0194
Cheat9=814F6E8C 0194,814F6E8E 018F,814F6EFC 0020,814F6F68 0194,814F6F6A 0190,814F6FD8 0020,814F7044 014D,814F7046 0186
Cheat10=814F70B6 0020,814F7120 00AE,814F7122 0181,814F7192 0020,814F71FC 00AE,814F71FE 0182,814F726E 0020
Cheat11=814F72D8 00C4,814F72DA 0212,814F72E6 0001,814F7334 00C4,814F7336 0213,814F7342 0001,814F7390 00C4,814F7392 0214
Cheat12=814F739E 0001,814F73EC 00C4,814F73EE 0215,814F73FA 0001,814F7448 00C4,814F744A 0216,814F7456 0001,814F74A4 00C4
Cheat13=814F74A6 0217,814F74B2 0001,804F74FF 0033,814F7500 003A,814F7502 01F9,814F7504 0000,814F750E 0003,804F7613 0001
Cheat14=814F7614 014E,814F7616 0188,804F7727 0001,814F7728 00B3,814F772A 0185,804F783B 0001,814F783C 00B3,814F783E 0187
Cheat15=804F794F 0035,814F7950 005A,814F7952 0140,814F7954 0000,814F795E 0003,814F7A0A 0035,814F7A66 00F2
Cheat16=814F7AC2 00F4,814F7B1E 0016
; 1-7. 復活場所
Cheat17=D14F7B7C 0000,814F7B7E 001C,D14F7B7A 0000,814F7B7C 0057,D14F7B94 0000,814F7B96 00A2,D14F7BA0 0000,814F7BA2 005C
Cheat18=D14F7BAC 0000,814F7BAE 0020,D14F7BB8 0000,814F7BBA 002F,D14F7BC4 0000,814F7BC6 0022,D14F7BD0 0000,814F7BD2 00B5
Cheat19=D14F7BDC 0000,814F7BDE 0077,D14F7BE8 0000,814F7BEA 0069,D14F7BF4 0000,814F7BF6 00F7,D14F7C00 0000,814F7C02 0085
Cheat20=D14F7C0C 0000,814F7C0E 0006,D14F7C18 0000,814F7C1A 0012,D14F7C24 0000,814F7C26 00A1,D14F7C30 0000,814F7C32 00D1
; 1-8. 陣取りの陣の位置(※アタシュケース2と併用不可)
Cheat21=800ACB4D 0009,810ACB52 0016,810ACB54 004B,810ACB56 0006,810ACB58 0057,810ACB5A 00A3,810ACB5C 00B3,810ACB5E 0065
Cheat22=810ACB60 00A1,810ACB62 0076
; 1-9. アタシュケース2の陣の位置(※陣取りと併用不可)
;Cheat23=810ACB58 00F3,810ACB5C 0012,810ACB5E 0013,810ACB60 0015,810ACB62 00E7,810ACB64 00DA,810ACB66 00DC,810ACB68 0152
;Cheat24=810ACB6C 00F7,810ACB6E 0153,810ACB70 0068,810ACB72 0064,810ACB74 005D,810ACB76 005F,810ACB78 0085,810ACB7C 0083
;Cheat25=810ACB7E 0084,810ACB80 0086,810ACB82 0087,810ACB84 0089,810ACB86 008A,810ACB88 0028,810ACB8C 001F,810ACB8E 0021
;Cheat26=810ACB90 0027,810ACB92 0023,810ACB94 0024,810ACB96 0025

部屋を作る

  1. Netplay → Create Room
  2. 以下の項目を入力します。
    Room Name:作成する部屋の名前(日本語は使えません)
    Password:部屋に入るためのパスワードを設定する場合に入力
    Player Name:プレイヤーの名前(日本語は使えません)
  3. 「ROM Path」ボタンをクリックし、プレイするゲームのROMを選択します。
  4. Serverの「Custom」を選択します。
  5. 「pdlab.f5.si」を入力し、「OK」ボタンをクリックします。
    ※旧バージョンの場合:pdlab.f5.si:46000
  6. 「Create Game」ボタンをクリックします。
  7. 全員が揃ったら、「Start Game」ボタンをクリックし、ゲームを開始します。
    テキストボックスに文字を入力し、[Enter]キー押下で文字を送信できます。

部屋に入る

  1. Netplay → Join Room
  2. 右上のサーバ一覧から「Custom」を選択します。
  3. 「pdlab.f5.si」を入力し、「OK」ボタンをクリックします。
    ※旧バージョンの場合:pdlab.f5.si:46000
  4. 左上のテキストボックスにプレイヤーの名前(日本語は使えません)を入力します。
  5. 入る部屋を選択し「Join Game」ボタンをクリックします。
    ※部屋にパスワードが設定されている場合は、左下のテキストボックスにパスワードを入力します。
  6. 部屋と同じゲームのROMを選択します。
    (ROMが一致しないと入ることができません。)
  7. 「Player 1」がゲームを開始するまで待機します。
    (ゲームを開始できるのは「Player 1」のみです。)
    テキストボックスに文字を入力し、[Enter]キー押下で文字を送信できます。

PDオンラインカテゴリの最新記事