联机对战 Netplay GGPO 式回滚、最多 16 人联机
RetroArch Netplay 的特点
RetroArch 的联机对战叫 Netplay,核心特点:
- GGPO 式回滚:业界顶级的联机同步技术——双方玩家可以各自有几帧延迟,收到对端的延迟输入后自动回退重放到同步点,整体感觉几乎没有延迟
- 最多 16 人联机 + 观战:支持多人同屏对战,还可以让其他人观战
- 大厅配对:内置的 Netplay Rooms 标签可以浏览公开房间、一键加入
- 需要相同的 ROM:双方必须用完全一样的游戏 ROM(校验值一致),否则无法同步
前置条件
联机前需要确认:
| 条件 | 检查方法 |
|---|---|
| Core 支持序列化 | Netplay 质量高的核心都支持。不支持序列化的核心 Netplay 也能跑,但体验差 |
| 双方用相同的 ROM | ROM 校验值(CRC32)必须完全一致 |
| 双方用相同的 Core 版本 | 尽量都从 Online Updater 更到最新 |
| 网络稳定 | 推荐本地网络(同一 Wi-Fi 或网线)联机,远程联机延迟更高 |
| 路由器支持 UPnP | 开房间需要做端口映射(或手动配) |
大厅配对(最简单)
Main Menu → Netplay Rooms(或标签栏里的 Netplay Rooms 标签):
加入别人开的房间
- 进 Netplay Rooms
- Refresh 刷新房间列表
- 浏览公开房间(显示主机名、游戏名、人数、地域)
- 选中一个房间按确认键加入
- 等主机确认后游戏自动加载,双方进入同一款游戏
自己开房间
- Netplay Rooms 里选 Start Netplay Host 或 Create New Netplay Room
- 游戏加载后会自动公告到大厅(其他人能搜到)
- 等待其他玩家加入
开房间需要路由器支持 UPnP(自动端口映射)。如果你的路由器不支持,进 Settings → Network 手动配 NAT 穿越或端口转发。
手动联机(更可控)
如果大厅找不到合适房间,或想控制更多参数:
Settings → Network → Netplay 里配置(主机和客户端分别配):
| 角色 | 配置 |
|---|---|
| 主机(Server) | 设好 NAT Traversal(UPnP),从 Quick Menu → Netplay → Start Netplay Host 开房间 |
| 客户端(Client) | 设好 Server IP 地址,从 Quick Menu → Netplay → Connect to Netplay Host 加入 |
手动联机适合跨地域联机、或想控制端口的情况。
Netplay 工作原理(深度版)
理解原理对排查联机问题有帮助:
- 双方玩家各自在本地跑同一个游戏 Core
- 每帧输入通过网络发送给对方(带延迟)
- 双方的游戏状态可能暂时不同步
- 收到对方延迟输入后,双方同时回退几帧(用 libretro 序列化快照),用新输入重放
- 双方重新达到同步点
这个机制叫 replay-based synchronization(基于回放的同步),是 GGPO 团队的经典设计,RetroArch 用得很地道。
要求:
- Core 必须支持序列化(否则不能回退重放)
- Core 必须是确定性的(相同输入 → 相同输出)——否则回退后两边可能还是不同步
联机常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
| 大厅列表刷新失败 | 网络到大厅服务器不通 | 换网络环境重试 |
| 开房间没人能加 | 路由器没做端口映射 | 手动配端口转发,或用同一局域网 |
| 联机中途不同步 | 一方 ROM 或 Core 版本不同 | 双方确认 ROM 校验值和 Core 版本一致 |
| 延迟明显 | 远程联机、网络不稳定 | 用局域网联机,或换网络 |
| Core 不支持联机 | 极少数 Core 不支持序列化 | 换同主机其他 Core |
联机实践建议
- 先用局域网联机测试(同一 Wi-Fi / 网线),稳定后再尝试远程
- 用 No-Intro 标准 ROM(校验值确定能匹配)
- 开房间的一方建议用有线网络(比 Wi-Fi 稳定)
- 联机游戏推荐:《马里奥赛车》、《炸弹人》、《快打旋风》、《索尼克 3》、《合金弹头》