
距離在《DOOM》運(yùn)行的《DOOM》里玩《DOOM》也不遠(yuǎn)了。
" 你說(shuō)的這個(gè)東西,他能不能運(yùn)行《DOOM》?"(Will it run Doom?)
自 1993 年《DOOM》初代發(fā)售至今,人類(lèi)一直在挑戰(zhàn)這個(gè)問(wèn)題的極限,探索能夠運(yùn)行這部游戲的任何潛在媒介:數(shù)碼相機(jī),打印機(jī),智能冰箱,ATM 取款機(jī),麥當(dāng)勞點(diǎn)餐機(jī),電子驗(yàn)孕棒,樂(lè)高積木,乃至沒(méi)有物理實(shí)體的《我的世界》和 GIF 動(dòng)圖……
現(xiàn)在,與其問(wèn)什么東西能運(yùn)行《DOOM》,不如問(wèn)什么東西不能運(yùn)行《DOOM》。

這種探索精神固然值得贊許,但也會(huì)讓我們好高騖遠(yuǎn),進(jìn)而忽略一個(gè)最基礎(chǔ)的、本源性的問(wèn)題:《DOOM》游戲本身,能不能運(yùn)行《DOOM》?
這個(gè)套娃問(wèn)題已經(jīng)在改版的《DOOM》—— GZDoom 中得到了解答。早在 2015 年,就有玩家推出了在 GZDoom 里游玩初代《DOOM》的模組。

圖源 Youtube@TheZombieKiller
GZDoom 是一個(gè)經(jīng)過(guò)玩家爆改的特殊版本,基于初代游戲添加了大量擴(kuò)展功能,以及一部支持如命名腳本與函數(shù)等高級(jí)編程操作的改進(jìn)版編輯器。玩家們已經(jīng)試過(guò)在 GZDoom 里創(chuàng)建和還原各種各樣的游戲,重現(xiàn)出一部二十多年前的《DOOM》也不在話下。

" 毀滅戰(zhàn)士街機(jī)廳 "
圖源 Youtube@RJbanshee21
不過(guò),GZDoom 終歸是受過(guò)大量修改的版本,顯然不夠原教旨主義,不該是 " 用《DOOM》運(yùn)行《DOOM》" 這一問(wèn)題的終極答案。
直到 2022 年 7 月 11 日,一位網(wǎng)名叫做 Kgsws 的技術(shù)宅,交上了一部更令人滿意的答卷。他在原汁原味的 DOS 版本《DOOM2》里,成功運(yùn)行了《DOOM2》。
根據(jù) Kgsws 在 Youtube 上傳的視頻,他在研究《DOOM2》源代碼的過(guò)程中,留意到了處處可見(jiàn)的 "SpawnMapThing" 命令。這一命令會(huì)根據(jù)預(yù)設(shè)的物件 ID,在游戲的關(guān)卡 / 地圖中生成對(duì)應(yīng)的物件,如武器、敵人、升級(jí)道具、背景裝飾等。
預(yù)設(shè) ID 中的 1 至 4 號(hào),對(duì)應(yīng)著多人模式下的四名玩家。由于生成玩家的代碼觸發(fā)條件是 "ID 小于等于 4",這意味著物件 ID 可以是負(fù)數(shù)。

生成負(fù)數(shù) ID 所對(duì)應(yīng)的 " 不存在 " 物件,就會(huì)觸發(fā) Bug,覆蓋掉游戲運(yùn)行時(shí)內(nèi)存中的 " 狀態(tài) " 一欄(State)。
" 狀態(tài) " 會(huì)顯示一項(xiàng)物件正在播放的動(dòng)畫(huà)文件 ID。舉個(gè)例子,一個(gè)敵人可能會(huì)故意閃爍吸引玩家注意,射擊手上的武器,或者被玩家擊殺開(kāi)始播放死亡動(dòng)畫(huà)。至于應(yīng)該加載哪種動(dòng)畫(huà),均由這個(gè) " 狀態(tài) "ID 對(duì)應(yīng)的文件所決定。

主角奔跑的動(dòng)畫(huà)對(duì)應(yīng) ID150-153
物件沒(méi)有實(shí)體模型,因此不必和動(dòng)畫(huà)文件匹配,只要修改內(nèi)存里的 " 狀態(tài) ",一個(gè)物件就有可能播放另一個(gè)物件的動(dòng)畫(huà)。

夜視儀變成了主角
動(dòng)畫(huà)的內(nèi)容也沒(méi)有作文件格式的強(qiáng)制要求,不一定非得是動(dòng)畫(huà)文件,完全能夠替換為一段可執(zhí)行的代碼或程序——比如另一部《DOOM》。
Kgsws 選擇了 " 巧克力版 DOOM"(Chocolate Doom),這套開(kāi)源版本的游戲,在保留 DOS 版原有代碼的基礎(chǔ)上,兼容現(xiàn)在的電腦操作系統(tǒng)。
Kgsws 又花了兩天時(shí)間,添加了大量視頻沒(méi)有提及的代碼細(xì)節(jié),利用原生編輯器制作了僅有一個(gè)房間的關(guān)卡,最終在房間的一面墻上成功映出了巧克力版,除了沒(méi)有聲音之外,游戲完美運(yùn)行,甚至支持輸入作弊碼。

Kgsws 還添加了一個(gè)無(wú)縫切換兩部游戲按鍵控制的功能。因?yàn)檫@個(gè) " 關(guān)卡 " 同時(shí)且獨(dú)立運(yùn)行了兩部 DOOM,運(yùn)行設(shè)備也需要雙倍的內(nèi)存," 至少 16MB"。
因?yàn)樽约涸O(shè)計(jì)出的房間有點(diǎn)像電影放映室,Kgsws 便結(jié)合平日里制作關(guān)卡和模組的技術(shù)借題發(fā)揮,造出了一個(gè)和內(nèi)置 DOOM 配套的 " 電影院 " 完整關(guān)卡。影院內(nèi)設(shè)計(jì)了多個(gè)可交互物件,包括可以切換影院燈光亮度的開(kāi)關(guān)、能夠關(guān)掉用戶界面的按鈕,以及通往 " 私人包廂 " 的傳送門(mén)。


Kgsws 將完整關(guān)卡及源代碼上傳到了 Github。在鼓勵(lì)玩家們嘗試用《DOOM2》運(yùn)行其他游戲的同時(shí),Kgsws 也指出,這個(gè)漏洞僅適用于 DOS 原版,不適用于修改過(guò)的版本,比如上文提到的 GZDoom。
好在 Steam 平臺(tái)上的《DOOM2》就是 DOS 版,任何人都能使用 DOSbox 之類(lèi)的模擬器運(yùn)行游戲,體驗(yàn) Kgsws 的杰作。

Kgsws 的發(fā)現(xiàn)看似為玩家們近三十年來(lái)的朝圣之旅劃上了一個(gè)句號(hào),卻也打開(kāi)了新的潘多拉魔盒。在《DOOM》里運(yùn)行《DOOM》,只是一種 " 開(kāi)始的結(jié)束 ",我們不必再問(wèn)什么東西還沒(méi)運(yùn)行過(guò)《DOOM》,而是要問(wèn)《DOOM》還沒(méi)運(yùn)行過(guò)什么東西。
原文地址:http://www.myzaker.com/article/62d18ec68e9f0941ed460bc1
轉(zhuǎn)載請(qǐng)注明:終于,我們可以在原版《DOOM》里運(yùn)行《DOOM》了 | 快導(dǎo)航網(wǎng)