Wing Commander Together:DOS经典游戏联机合作
Show HN: After a decade of reversing, I got co-op working in DOS Wing Commander

经过11年对DOS版Wing Commander的逆向工程,我成功实现了多人联机合作模式。通过内存分析、代码注入和网络协议设计,我们让玩家能像童年梦想那样,一人操控战机,一人负责武器与推进,真正体验翼友并肩作战的乐趣。项目基于DOSBox,支持浏览器直接运行,无需复杂配置。
我们一直梦想能作为翼友一起驾驶Wing Commander,而不是像双头怪物一样共用一架战机。
HN 评论区
15- daniel_rh
作者在此:2015 年,我在 DOSBox 里玩经典的 Wing Commander,突然意识到游戏状态竟然能塞进 64k 的数据段里。
十多年来,我和哥哥进行了一系列实验(走走停停、转向、沟通),同时探查内存。我们摸清了变量位置,学会了如何向游戏函数注入调用,以及如何通过网络同步游戏状态,从而让我们能一起飞故事战役。
我最喜欢的发现是摄像头位于实体槽位 0x3D,这很可能是原作者留下的一个“3D”彩蛋。
你可以在 https://fireflyk64.github.io/dosbox 在浏览器中游玩。如果你拥有 Wing Commander,请拖入安装程序,因为页面不托管任何游戏文件。如果你没有,页面会加载原始的 DOS/3Dfx 版 Vega Strike,在我将其开源之前。我用 AI 对 DOS 版 Vega Strike 的美术进行了升级重绘,现在它支持多人联机,手感也很相似。
接下来的几个小时我会在大厅里,如果有人想一起飞的话。
声明:最后一步我也用了 AI,帮助编译到浏览器,将我们的 TCP 网络栈移植到带语音功能的 WebRTC,并解决了一些遗留的 Bug。
- EmX_3000
这让我想起了 8 位机时代我作弊的方式。你可以一次改一个东西,保存,然后检查磁盘看看哪里变了。最终你能找出所有存放物品栏、属性、位置、任务阶段、NPC 状态等值的地址。之后你只需要修改这些地址——希望能成功——你就全属性爆表了。用 WozMon 的话,你甚至有时能在内存里找到这些位置,比如随时打开监控器直接修改 RAM 里的值,就能获得“免费”的治疗法术。在我们这个年龄段的人里,这通常是接触类似黑客行为的入门方式。看来作者做的也是这类事情。
这也是游戏作弊码和训练器(trainers)的基础。动作游戏通常更容易,可能只有几个标志和变量,所以作弊菜单很实用。RPG 的作弊码通常表现为磁盘上的地址列表,不过后来某些游戏也出现了基于磁盘的完整角色编辑器。大约在同一时期,一些开发者开始不择手段地防止人们篡改存档文件来作弊。到了 32 位时代,这在行业内已经相当普遍。
补充:我要指出的是,随着时间的推移,人们经常会给电脑杂志投稿,列出热门游戏的内存地址。但这可能需要几个月……
- Tepix
真酷!你用的是数据通道(data channel)来传语音吗?为什么不用 rtc 流?