一名开发者成功将 1990 年代的 DOS 单人经典游戏《Wing Commander》转变为协作式多人游戏体验。该项目耗时十余年完成,允许两名玩家在同一个游戏世界中同时驾驶不同的飞船。这是通过逆向工程游戏的内部内存来识别其存储飞船坐标和速度的位置,然后构建网络层来实时同步不同机器上的这些数值实现的。
核心技术挑战涉及隔离游戏 640K DOS 内存段中的特定变量。通过在游戏停止时和飞船移动时分别获取内存快照,开发者识别出了负责位置和速度的精确字节。然而,仅向这些内存地址写入数据不足以处理诸如发射激光或寻的导弹等复杂动作。为了解决这个问题,开发者创建了一个“蹦床”系统——一种劫持游戏原始函数的方法。由于游戏使用了 Borland 的动态覆盖技术(根据玩家路径将不同的代码段加载到不同的内存位置),开发者必须找到稳定的位置来插入这些跳转,最终利用游戏 UI 中的特定字符串来托管重定向逻辑。

此图说明了用于识别负责飞船移动的精确字节的内存取证。

此视觉效果展示了通过比较不同飞船状态的内存快照来隔离变量的过程。
为了让现代观众能够体验到这一内容,该项目使用 Emscripten 和名为 lobbylink 的自定义 Go 语言开发的大厅系统移植到了 Web 端。此设置使用 WebRTC 建立点对点连接,允许玩家加入房间并在浏览器中直接共同飞行,而无需共享公共 IP 地址或手动配置复杂的网络端口。虽然系统每帧都能成功同步飞船位置和射击事件,但该项目突显了“操纵”遗留软件的极端复杂性;开发者必须利用原始游戏的物理和战斗代码,而不是仅仅依赖内存写入,以确保最准确的游戏体验。当前的实现支持同步聊天,一名玩家输入的文字会出现在另一名玩家的虚拟显示单元(VDU)上,保留了原著作品的沉浸式氛围。

此图像展示了项目的最终结果:两名玩家在共享的基于浏览器的环境中互动。
这种方法的一个显著限制是依赖于原始游戏数据段的特定内存布局。由于开发者必须手动识别并映射这些地址,该系统高度专门化于《Wing Commander》的特定版本。此外,虽然 WebRTC 和 lobbylink 系统处理网络连接,但“蹦床”系统的稳定性仍是游戏原始执行流与注入的网络命令之间的微妙平衡,仍可能受到遗留代码覆盖不可预测性质的影响。
最终,该项目展示了底层内存取证与现代 Web 技术的精妙融合。通过识别出游戏的摄像机位于实体槽 0x3D(这可能是原始程序员的一个“3D”笑话)并以此作为起点,开发者成功架起了 1990 年代硬件限制与 2020 年代连接性之间的桥梁。其结果是一个可玩的、基于浏览器的协作模式,在保留原游戏机制的同时,实现了原始创作者从未预想过的共享体验。