僵毁B42双人联机指南
本文实现双人联机的方式是基于B42中并未移除的本地分屏合作游玩方式,如果你和你的小伙伴具备线下联机的条件,十分推荐你们直接查看第三部分如何进入分屏合作。此外由于分屏合作的特殊性,游戏会直接播放两位玩家能听到的声音,对于需要听声辨位潜行或者害怕开门杀的玩家不太友好,同时需要一位玩家使用手柄游玩(没有手柄可以用手机模拟),在合成、放置等行动比较麻烦。最后,串流,特别是僵毁需要串流同时赋予键鼠或手柄操作权限,不可避免的带来网络信息安全风险,本文不对风险防护作出任何保证,请大家自行甄别,如果指南中出现明显漏洞也可以在评论区中指出。
由于串流只需要在一台电脑上实际运行游戏,因此只需要游戏启动方使用windows系统,另一方可以使用任意能够支持后文提到的软件的设备,如Mac、安卓平板等。同理,也只需要一位玩家的 steam 购买了僵尸毁灭工程,即可分屏合作游玩,也不会出现模组冲突等联机常见情况。
第一部分 如何实现两台主机的低延迟串流
本文给出的解决方案为私有服务器搭建zerotier中转moon服务器,通过sunshine和moonlight进行串流传输。服务器的成本为79元/年,除了zerotier中转外也可用于TS语音服务器等用途,通过各种促销、首次购买等方式也可以降低成本。如果实在不方便支付,可以使用蒲公英、radminlan等组网软件代替zerotier;如果缺乏动手能力,建议使用贝锐向日葵替代这一部分。
1.1 zerotier组网
此部分使用Jonnyan制作的zerotier-planet内网穿透软件,内容参考下列链接
环境为阿里云轻量服务器,系统镜像ubuntu
下面所有与指令相关的部分如果有任何疑问或报错,建议先向任意AI提问,通常能够给出有价值的回应。
首先需要给服务器安装 Docker,这里推荐使用阿里云自带网页端控制台,使用root权限登录,也可以使用xshell等方式。登录界面如下图所示。

第一步,更新系统软件包并安装依赖工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg lsb-release
第二步,添加 Docker 官方 GPG 密钥和仓库
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
第三步,安装 Docker 引擎
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
第四步,验证 Docker 安装
启动 Docker 服务并设置开机自启:
sudo systemctl enable --now docker
运行测试容器:
sudo docker run hello-world
可以看到类似下图的输出:

还可以通过下面的代码检测 Docker 状态:
docker --version # 查看 Docker 版本
docker info # 查看 Docker 详细信息
docker ps -a # 查看容器列表
第五步,安装 Docker Compose
sudo apt install -y docker-compose-plugin
验证安装是否成功:
docker compose version
接下来是给服务器安装zerotier中转服务。
请先参考上文,确认已经成功安装docker和docker-compose。然后进入阿里云服务器管理界面,选择防火墙模板>>创建模板,填写便于记忆的模板名称和描述,在下方规则中添加TCP端口 4000/9993/3180 和UDP端口 9993 的开放权限。在本指南中实际上只需要开启TCP 4000端口,可自行抉择。


然后请通过命令 pwd 和 ls ,确认当前所处目录和目录下的文件信息,如果不在
/home 目录下,请使用 cd /home 命令进入。

下载zerotier-planet库有两条途径,建议国内用户使用gitee源。
git clone https://github.com/Jonnyan404/zerotier-planet
git clone https://gitee.com/Jonnyan404/zerotier-planet
下载好后即可在 /home 路径下通过 ls 命令看到 zerotier-planet 文件夹,也可先在 home 目录下创建 zerotier 文件夹,然后 cd /home/zerotier 再使用 git clone 下载。
接下来使用 cd zerotier-planet 或者 cd /home/zerotier/zerotier-planet 进入刚刚 git clone 下载的项目文件夹中,运行:
docker cp mkmoonworld-x86_64 ztncui:/tmp
docker cp patch.sh ztncui:/tmp
docker exec -it ztncui bash /tmp/patch.sh
docker restart ztncui
获取密码:
docker exec -it ztncui cat /var/log/docker-ztncui.log|grep Password
下面提到的ip请用你购买的服务器提供的公网ip替代,比如http://111.111.111.111:4000/,这通常可以在服务器控制台处查看,下图中(公)前面的点分十进制ip即为服务器的公网ip。

使用本地计算机浏览器登录 http://ip:4000 打开web控制台界面, 用户名为admin。
登录之后请立刻重设密码,由于web控制台端口暴露在公网,弱密码有可能被攻破,届时网络中设备将面临严重网络安全风险!
选择上方功能栏中的 Add Network 创建第一个私有网络,按照个人喜好命名。


创建好之后,选择easy-setup对网络地址进行配置,使用generate network address对IP地址进行自动配置。请复制Network名称右侧括号中的ID以便于后续客户端连接该网络。

浏览器访问 http://ip:3180 打开planet和moon文件下载页面(亦可在项目根目录的./ztncui/etc/myfs/里获取)。将planet和moon文件下载到方便复制的地方。如果只开启了TCP 4000端口,可以使用XFTP软件在项目目录下子文件夹 ./ztncui/etc/myfs/ 中下载。
XFTP配置和具体路径参考如下:


最后是在本地设备上部署 zerotier 客户端。
这里给出最常用的windows设备部署方法,MacOS和安卓系统可参考下面链接中的方法,经过测试均可生效。
https://www.mrdoc.fun/doc/443/
首先从 zerotier 官网(https://www.zerotier.com/download/)下载windows客户端,安装也是无脑默认下一步即可。
然后将刚才从服务器上下载的planet文件拷贝到C:\ProgramData\ZeroTier\One文件夹中,替换原有的planet文件。如果遇到资源管理器中看不到这个文件夹,可以通过显示隐藏文件夹的方式解决。

最后打开服务页面(可以通过 win+R 打开运行,输入 services.msc 打开,或者用win+S 打开搜索栏搜索服务),选中 ZeroTier One,右键选择重启服务。

重启后使用 win+X 打开终端管理员,执行:
zerotier-cli.bat join 网络id
看到“200 join OK”,说明链接成功。
此时进入 zerotier web 控制台,选择功能栏中的 Networks,选择对应名称的网络,此时 Members 栏中将会出现刚刚请求链接的设备信息。填写便于记忆的设备名称,并勾选 Authorized 单选框即可将设备加入网络。
不要把任何来历不明的设备加入网络!
任何认证行为之前都要尽可能确保申请者的身份!

1.2 部署 Sunshine 服务
内容参考下列链接:
这里推荐使用集成了虚拟显示器等功能的 Sunshine Foundation 版本,下载链接为
选择最新版本 Assets 下拉框中对应的windows-installer.exe下载安装即可,注意安装时请不要更改默认安装位置,否则会导致虚拟显示器功能失效。
安装过程中无脑选择下一步即可,完成后选择启动 Sunshine 就能在任务栏看到其图标。下图中前两个分别为虚拟显示器托盘图标和 Sunshine 托盘图标。右键 Sunshine 托盘图标选择 Open Sunshine 即可打开 webui 控制界面。首次打开需要设置用户名和密码。
Sunshine 串流设置有大量可供参照的教程和高度的自定义能力,这里只给出界面语言修改和主机名称修改的部分。选择上方功能栏中 Configuration,进入第一个功能页面 General,即可看到 Language 和 Sunshine Name 选项,选择简体中文并把主机名称修改为便于记忆的即可,保存后选择应用等待 Sunshine 重启,重新打开 webui 即可。


1.3 部署Moonlight服务
内容参考下列链接:
这里也同样推荐使用和 Sunshine Foundation 相适配的 Moonlight 增强版,实测使用官方提供的标准 Moonlight 也能够完成本指南中的全部需求,请自行抉择。
Moonlight 增强版链接:https://github.com/qiin2333/moonlight-qt
Moonlight 官网链接:https://moonlight-stream.org/
Moonlight 安装也是一如既往的无脑默认即可,如果两台设备都已经成功链接到 zerotier 网络中,安装好之后打开 Moonlight 将会自动扫描当前网络中的 Sunshine 服务提供者。如果无法搜索到,可以使用右上角“手动添加计算机”功能,将对应IP填入即可尝试连接。
zerotier网络给成员设备提供的虚拟公网IP地址可以在两个地方看到。第一处从 zerotier web 控制台的 Networks 选项卡下进入对应网络信息页面,可以查看到全部成员设备的分配IP。第二处是对应设备的zerotier客户端,右键zerotier托盘图标,选择当前连接的 zerotier 网络id,选择 Managed Address,左键单击出现的点分十进制IP即可复制到剪切板,把这个IP发给 Moonlight 连接者即可。

Moonlight 搜索到主机之后,第一次连接需要在主机上输入对应pin码来确认身份。点选右下角弹出的信息即可进入pin码界面。
不要允许任何来历不明的设备连接!
任何认证行为之前都要尽可能确保申请者的身份!
第二部分 如何解决串流中语音的回声
这里简单说明一下串流中为什么会出现回声,下面将使用 Moonlight 连接的设备称为 M,提供 Sunshine 服务的设备称为 S。默认情况下 Sunshine 会将设备 S 上当前使用的音频通道串流给 M,这样 M 就可以听到 S 上运行的游戏输出的音频。但是语音软件也会把语音输出到这个通道中,这种情况下 M 就会听到自己说话的回音。
如果你们不介意,或者一方能够忍受静音游玩,或者你们选择使用其他设备语音通信,那么可以直接跳过这个部分。下面是给完美主义者提供一个解决方案。
这一部分参考链接如下: https://www.bilibili.com/video/BV1W8411u7tJ/?vd_source=dcb475bb2afe283e88afbadb7dd36a17
使用音频通道管理软件 VoiceMeeter Banana,软件可从官网免费下载最新版本:https://voicemeeter.com/
注意,下载安装之后会提供 VoiceMeeter Standard 和 VoiceMeeter Banana 两个软件,其图标相同,不要启动错了!VoiceMeeter Standard 功能较少,无法区分语音和游戏音频。下图给出了 VoiceMeeter Banana(下面简称Banana)的设置参考,再次注意,如果红圈处没有两个虚拟音频通道说明你打开的是 Standard 版本!

右键任务栏中音量图标,打开声音设置。在输出一栏中选择所有带有中文的输出设备,进入属性页面,全部重命名为英文,这是为了后续使用脚本获取输出设备id时不会报错。
接下来把声音设置拉到底,在高级栏中选择更多声音设置,进入高级设置中。


进入 Banana 界面,点击右上角的A1按钮,在出现的新窗口中选择你当前使用的音频输出设备,比如耳机、扬声器。

至此已经完成了对串流时桌面音频和语音音频的隔离。
第三部分 如何进行本地分屏游玩
由于分屏游玩的特殊性,是无法支持两套键鼠共同操作的,因此需要一方使用手柄输入游玩。如果当前没有手柄,也可以使用手机、键鼠安装模拟软件充当手柄,不过还是建议使用物理手柄。
进入游戏选择单人游戏,流程与单人游玩完全相同,直到进入世界。可以先使用键鼠闲逛一下,使键鼠和1P绑定。接着手柄玩家按A键,会看到屏幕左上角出现加入选项。选择添加新玩家,并在出生点选择玩家1即可在玩家1旁边出生。
下图是我和朋友联机游玩的存档,加入玩家1则是手柄和键鼠均控制1P,添加新玩家则是捏一个新小人,添加XXX则是加载之前存档的2P人物。

最后给出手柄操作的简单图示,祝大家都能和朋友玩上b42联机。





