使用Goldberg EMU进行依赖Steam的本地联机测试
前言
goldberg emu是一个用来替换steam远程联机成局域网内联机的项目
它能做到的不止这些,实际上这个在国内最广泛的用途应该是作为盗版游戏的绕过steam补丁(同类的还有 ColdClientLoader
我用这个这玩意的起因是我在测试一个unity独游的联机模块
联机模块主机和客户端的通信走到的是steam p2p网络服务,当时最先想到的是在沙盒sandboxie开小号steam,走大名鼎鼎的 Spacewar(详见Steamworks,教程不在这里)实现(没那个经济实力再买一份游戏hh)
跑沙盒实际性能效果堪忧,体验及其繁琐
最后想起了还有goldberg这玩意,但是在同一个主机上跑两个实例的配置过程仍然踩了不少坑,故留文记录
安装
你可以在Gitlab找到下载链接,最大字的那个链接就是
复制一整份游戏到别的位置作为副本
找到两份游戏的steam_api64.dll(steam_api.dll的64位版本,下午文统称后者)或者steam_api.dll,先备份一下,再用里面压缩包同名文件覆盖
steam_appid.txt 要放在steam_api.dll旁边
配置
(下文的“实例”指多份游戏中的单独一份游戏)
两份游戏的 steam_appid.txt 内的appid应该一致
打开 steam_api.dll 旁的 steam_settings 文件夹
在两份游戏间,我们需要配置不同的force_steamid.EXAMPLE.txt(steam用户id)
force_account_name.EXAMPLE.txt(用户名)
custom_broadcasts.EXAMPLE.txt(该实例用于通信的ip)
force_listen_port.EXAMPLE.txt(每个实例的通信端口。可能这项不用)
id随便改两串不同的数
用户名建议不同,用于区分
ip为127.0.0.*,*换成0到255的任意不同数
端口换成0到65535的任意不同数
记得把文件名的.EXAMPLE.删掉
其他游戏可能还有其他选项需要配置,例如可用语言和steamclient配置文件。参见goldberg emu的README
结束
现在同时打开两个游戏,同主机联机应现已可用
若游戏带Steam DRM导致游戏无法脱离steam启动(连界面都不闪一下的那种),用 Steamless 解除即可