1993年发布的经典射击游戏《DOOM》的源代码于1997年公开。近日,一位玩家Minki将《DOOM》安装在一台2003年的华硕PDA上,并对其进行了电源改装以保证长时间运行。在游戏运行了大约2.5年后,Minki发现游戏崩溃了。崩溃的原因源于《DOOM》的一个BUG:在回放游戏内的“demo”文件时,“gametic”值(用于跟踪游戏时间,每秒增加35次)在开始新的演示回放时不会重置。这个32位整数“gametic”值最终会因溢出导致游戏崩溃。在Windows Mobile 2003系统上,游戏无法处理这种数值异常。若游戏频率被降低至30Hz以优化帧率,溢出时间会相应延长。
💾 经典游戏《DOOM》的源代码于1997年公开,使其得以在各种平台上运行。本次事件中,该游戏被成功安装在一台2003年的华硕MyPal A620 PDA上,该设备运行Windows Mobile系统并搭载英特尔XScale ARMv5芯片,展现了老游戏的生命力和移植潜力。
⚡️ 为了确保PDA能够长时间稳定运行《DOOM》,Minki对其进行了电源改装,使用了一个基于“DIY 18650锂电池”的不间断电源系统,并连接到路由器USB接口以提供稳定的5V电源,为游戏的长时间运行提供了硬件保障。
⏳ 《DOOM》游戏出现崩溃的原因是其内部一个鲜为人知的BUG:在回放游戏内的“demo”文件时,“gametic”值(用于跟踪游戏时间,每秒增加35次)在开始新的演示回放时不会重置。这个32位整数值最终会溢出,导致游戏崩溃,在Windows Mobile 2003系统上尤为明显。
🕰️ 理论上,“gametic”值每秒增加35次,大约需要1.95年才能溢出。然而,若游戏频率被降低到30Hz以获得更好的帧率(在主机版本中常见),溢出时间则会延长至约2.26年,这与Minki观察到的约2.5年时间吻合,为崩溃原因提供了有力证据。
快科技9月18日消息,1993年12月发布的《DOOM》是第一人称射击游戏的开山之作,其源代码于1997年公开。
Minki在LenOwO上发帖称,他将WinDOOM安装在一台2003年的华硕MyPal A620 PDA上,这台设备搭载了当时新兴的Windows Mobile系统和英特尔XScale ARMv5芯片。
为了保证设备长时间运行,Minki对其进行了改装,使用了一个基于“DIY 18650锂电池” 的不间断电源系统,并将其连接到路由器的USB接口,以提供稳定的5V电源。
随后,他启动了游戏,便将其搁置一旁,直到最近才发现设备上弹出了一个应用崩溃的提示。
《DOOM》存在一个有趣的漏洞:在回放游戏内部的“demo”文件时,“gametic”值在开始新的演示回放时不会重置,这个值用于跟踪游戏时间,每秒增加35次。
“gametic”值不重置最终会导致数值巨大最终溢出,但该值使用的是32位整数,最大值为2147483647,不出所料,游戏在Windows Mobile 2003系统上无法处理这种情况,也就是说它会崩溃。
每秒35次的增加速度,大约需要1.95年才能使“gametic”值溢出。有可能Minki使用的 Doom4CE版本,将游戏频率降低到30Hz,以获得更好的帧率和降低硬件需求。
在《DOOM》的主机版本中这种做法很常见,如果是这样,那么“gametic”值溢出大约需要2.26年,这更接近Minki所说的2.5年。
当然除此之外,还有很多其他原因会导致《DOOM》崩溃,而且由于Minki中间几乎忘了这件事,也没法确定游戏崩溃的确切时间。