终于,我们可以在原版《DOOM》里运行《DOOM》了

前沿科技 2年前 (2022) 虚像
0 0 0
终于,我们可以在原版《DOOM》里运行《DOOM》了

距离在《DOOM》运行的《DOOM》里玩《DOOM》也不远了。

" 你说的这个东西,他能不能运行《DOOM》?"(Will it run Doom?)

自 1993 年《DOOM》初代发售至今,人类一直在挑战这个问题的极限,探索能够运行这部游戏的任何潜在媒介:数码相机,打印机,智能冰箱,ATM 取款机,麦当劳点餐机,电子验孕棒,乐高积木,乃至没有物理实体的《我的世界》和 GIF 动图……

现在,与其问什么东西能运行《DOOM》,不如问什么东西不能运行《DOOM》。

终于,我们可以在原版《DOOM》里运行《DOOM》了

这种探索精神固然值得赞许,但也会让我们好高骛远,进而忽略一个最基础的、本源性的问题:《DOOM》游戏本身,能不能运行《DOOM》?

这个套娃问题已经在改版的《DOOM》—— GZDoom 中得到了解答。早在 2015 年,就有玩家推出了在 GZDoom 里游玩初代《DOOM》的模组。

终于,我们可以在原版《DOOM》里运行《DOOM》了

图源 Youtube@TheZombieKiller

GZDoom 是一个经过玩家爆改的特殊版本,基于初代游戏添加了大量扩展功能,以及一部支持如命名脚本与函数等高级编程操作的改进版编辑器。玩家们已经试过在 GZDoom 里创建和还原各种各样的游戏,重现出一部二十多年前的《DOOM》也不在话下。

终于,我们可以在原版《DOOM》里运行《DOOM》了

" 毁灭战士街机厅 "

图源 Youtube@RJbanshee21

不过,GZDoom 终归是受过大量修改的版本,显然不够原教旨主义,不该是 " 用《DOOM》运行《DOOM》" 这一问题的终极答案。

直到 2022 年 7 月 11 日,一位网名叫做 Kgsws 的技术宅,交上了一部更令人满意的答卷。他在原汁原味的 DOS 版本《DOOM2》里,成功运行了《DOOM2》。

根据 Kgsws 在 Youtube 上传的视频,他在研究《DOOM2》源代码的过程中,留意到了处处可见的 "SpawnMapThing" 命令。这一命令会根据预设的物件 ID,在游戏的关卡 / 地图中生成对应的物件,如武器、敌人、升级道具、背景装饰等。

预设 ID 中的 1 至 4 号,对应着多人模式下的四名玩家。由于生成玩家的代码触发条件是 "ID 小于等于 4",这意味着物件 ID 可以是负数。

终于,我们可以在原版《DOOM》里运行《DOOM》了

生成负数 ID 所对应的 " 不存在 " 物件,就会触发 Bug,覆盖掉游戏运行时内存中的 " 状态 " 一栏(State)。

" 状态 " 会显示一项物件正在播放的动画文件 ID。举个例子,一个敌人可能会故意闪烁吸引玩家注意,射击手上的武器,或者被玩家击杀开始播放死亡动画。至于应该加载哪种动画,均由这个 " 状态 "ID 对应的文件所决定。

终于,我们可以在原版《DOOM》里运行《DOOM》了

主角奔跑的动画对应 ID150-153

物件没有实体模型,因此不必和动画文件匹配,只要修改内存里的 " 状态 ",一个物件就有可能播放另一个物件的动画。

终于,我们可以在原版《DOOM》里运行《DOOM》了

夜视仪变成了主角

动画的内容也没有作文件格式的强制要求,不一定非得是动画文件,完全能够替换为一段可执行的代码或程序——比如另一部《DOOM》。

Kgsws 选择了 " 巧克力版 DOOM"(Chocolate Doom),这套开源版本的游戏,在保留 DOS 版原有代码的基础上,兼容现在的电脑操作系统。

Kgsws 又花了两天时间,添加了大量视频没有提及的代码细节,利用原生编辑器制作了仅有一个房间的关卡,最终在房间的一面墙上成功映出了巧克力版,除了没有声音之外,游戏完美运行,甚至支持输入作弊码。

终于,我们可以在原版《DOOM》里运行《DOOM》了

Kgsws 还添加了一个无缝切换两部游戏按键控制的功能。因为这个 " 关卡 " 同时且独立运行了两部 DOOM,运行设备也需要双倍的内存," 至少 16MB"。

因为自己设计出的房间有点像电影放映室,Kgsws 便结合平日里制作关卡和模组的技术借题发挥,造出了一个和内置 DOOM 配套的 " 电影院 " 完整关卡。影院内设计了多个可交互物件,包括可以切换影院灯光亮度的开关、能够关掉用户界面的按钮,以及通往 " 私人包厢 " 的传送门。

终于,我们可以在原版《DOOM》里运行《DOOM》了
终于,我们可以在原版《DOOM》里运行《DOOM》了

Kgsws 将完整关卡及源代码上传到了 Github。在鼓励玩家们尝试用《DOOM2》运行其他游戏的同时,Kgsws 也指出,这个漏洞仅适用于 DOS 原版,不适用于修改过的版本,比如上文提到的 GZDoom。

好在 Steam 平台上的《DOOM2》就是 DOS 版,任何人都能使用 DOSbox 之类的模拟器运行游戏,体验 Kgsws 的杰作。

终于,我们可以在原版《DOOM》里运行《DOOM》了

Kgsws 的发现看似为玩家们近三十年来的朝圣之旅划上了一个句号,却也打开了新的潘多拉魔盒。在《DOOM》里运行《DOOM》,只是一种 " 开始的结束 ",我们不必再问什么东西还没运行过《DOOM》,而是要问《DOOM》还没运行过什么东西。

原文地址:http://www.myzaker.com/article/62d18ec68e9f0941ed460bc1

版权声明:虚像 发表于 2022年7月16日 am12:24。
转载请注明:终于,我们可以在原版《DOOM》里运行《DOOM》了 | 快导航网

相关文章