1. 首页 > 最新游戏资讯大全

《毁灭战士》连续运行两年后崩溃 毁灭战士uac

作者:admin 更新时间:2025-09-18
摘要:xiayx9月18日消息,1993年12月《毁灭战士》(Doom)正式发布,该游戏不仅奠定了新兴的第一人称射击(FPS)游戏类型的标准,其受欢迎程度更是达到了“毁灭战士克隆品”(Doomclone)一词在发布后的数年里成,《毁灭战士》连续运行两年后崩溃 毁灭战士uac

 

xiayx 9 月 18 日消息,1993 年 12 月《毁灭战士》(Doom)正式公开,该游戏不仅奠定了新兴的第一人称STG(FPS)游戏类型的标准,其受欢迎程度更是达到了“毁灭战士克隆品”(Doom clone)一词在公开后的数年里成为描述全部第一人称STG游戏代名词的地步。自上线以来的近 32 年间,得益于海量的 Mod 和玩家自制关卡,玩家在这款游戏上投入的时长肯定是个惊人的数字,但几乎没人会让游戏连续运行两年以上。不过,还真有人这么做了,而结局是…… 游戏崩溃了。

在 LenOwO 网站上,管理员明基(Minki)发文称,他通过在一台 2003 年款华硕 MyPal A620 掌上PC(Pocket PC)上运行 WinDOOM,复现了这场“预期中的崩溃”。该设备搭载当时刚推出的 Windows Mobile 体系,核心为英特尔 XScale ARMv5 架构的体系级芯片(SoC)。明基表示,他对这台设备进行了改装,为其配备了“基于 18650 锂电池的 DIY 不间断电源(UPS)”,该电源通过路由器的 USB 接口供电,以确保稳定的 5V 电压输入。之后他让体系一直运行,后来几乎忘了这回事,直到昨天,他才发现设备屏幕上弹出了一条应用程序崩溃的提示。

据xiayx了解,和同时代大多数基于源代码移植的版本一样,WinDOOM 源于 1997 年公开的《毁灭战士》原始源代码,因此其不仅复现了原版游戏的大部分功能,也保留了多数漏洞。和多数大型商业软件项目类似,即便是最终的 1.9 版本,《毁灭战士》仍存在诸多已知漏洞。其中壹个奇妙的缺陷和游戏内部“示范文件”(demo)的播放机制有关:通常在游戏“吸引玩法”(attract loop,指无人操作时自动播放示范画面的玩法)下,每次开始播放新的示范文件时,“gametic”(游戏计时单位)数值并不会重置。该数值用于追踪游戏多方面的计时信息,其递增频率为 35 赫兹(即每秒 35 次),且和游戏的渲染循环相互独立。

可以很容易算出,gametic 数值不重置,久而久之必然会累积成壹个极大的数。《毁灭战士》引擎的核心程序员约翰?卡马克(John Carmack)在编写这段代码时,肯定注意到了这一点,但他或许认为这无足轻重 —— 由于该数值被存储为 32 位有符号整数。这意味着它的最大值为 2147483647 个计时单位,达到该数值后便会发生“溢出”。在 C 语言中,整数溢出的行为并无明确定义,但在 x86 架构的PC上,溢出后数值总会跳转为最大负值 - 2147483647。不出所料,游戏无法妥善处理这种情况,结局便是崩溃,至少在 Windows Mobile 2003 体系上是如此。

按照每秒 35 个计时单位计算,gametic 数值溢出大约需要 1.95 年。这比明基的预估时刻略短,但没人了解这台华硕掌上PC在他发现屏幕上的错误提示前,已经保持这种情形多长时间了;从照片来看,这台已有 22 年历史的掌上PC显然不常被关注。另一种也许性是,明基运用的 WinDOOM Windows CE 移植版本(即 Doom4CE)为了实现更稳定的帧率和降低硬件负载,将游戏计时频率降至了 30 赫兹,这种行为在《毁灭战士》的主机移植版中很常见,比如雅达利 Jaguar 和超级任天堂(Super NES)版本。若情况属实,gametic 数值溢出则需要约 2.26 年,和明基所说的“两年半”更为接近。

无论具体缘故怎样,这场实验带来的启示很明确:不要让《毁灭战士》连续运行两年。