像1997年那样编译Quake!
摘要
一份详细的指南,介绍如何重现使用Windows NT 4和Visual C++ 6等老式工具编译Quake的win32二进制文件的过程(就像1997年所做的那样)。
暂无内容
查看缓存全文
缓存时间: 2026/05/16 03:33
# 让我们像1997年那样编译雷神之锤!
来源:https://fabiensanglard.net/compile_like_1997/index.html
2026年2月5日
让我们像1997年那样编译雷神之锤!
---
第一批*雷神之锤*可执行文件 `quake.exe` 和 `vquake.exe` 是在 HP 712-60(运行 NeXT 系统)上编程,并通过运行在 DEC Alpha 服务器 2100A 上的 DJGPP 进行交叉编译的。1996 年 6 月,在交付游戏后,id Software 担心 NeXT 的发展停滞,于是切换了开发平台。
> 我们在交付雷神之锤后立即转向了运行 Windows NT 的 Intergraph 硬件。
> ——约翰·卡马克 [\[1\]](https://fabiensanglard.net/compile_like_1997/index.html#footnote_1)
接下来的*雷神之锤*版本 —— `winquake.exe`、`glquake.exe` 以及*雷神之锤世界*(`qwcl.exe` 和 `qwsv.exe`)—— 都是在 Windows NT 上使用 Visual C++ 4.X 开发和编译的。
本文描述了如何重现 1997 年构建雷神之锤 Win32 二进制文件的体验。
纯粹主义者的角落
---
根据你想要达到的历史准确性程度,你可以通过四种环境来执行这些步骤。
- 找到一台 Intergraph RealizM 双 P6-200MHz 工作站(祝你好运)。
- 找到一台双 Pentium Pro 机器(再次祝你好运,但找到一块 W6-LI 主板是可行的)。
- 使用一台典型的 90 年代末 PC,比如雷神之锤专用机 (https://fabiensanglard.net/quake_pc)。
- 下载 Oracle 的 VirtualBox 并创建一个虚拟机。
我分别在雷神之锤专用机和 VirtualBox 上测试了这些步骤,操作系统使用了 Windows 98SE 或 Windows NT 4.0。
安装 Windows NT 4
---
安装 Windows NT 4 相当简单,因为光盘是可引导的。安装过程花费了 30 分钟。
[](https://fabiensanglard.net/compile_like_1997/windows_NT_4_startup.webp)
我特别喜欢 Windows NT 启动画面的极简风格。它会自豪地显示检测到了多少个 CPU(Windows 95/98 只支持一个 CPU)以及有多少内存。没有任何愚蠢的动画。
如果系统添加了第二个 CPU,Windows NT 不会自动检测到。你需要重新安装才能获得支持 SMP 系统的 HAL。双 CPU 主板也是如此。在 W6-LI 主板上,你不仅需要添加另一个 Pentium Pro,还需要一个调节器!
[](https://fabiensanglard.net/compile_like_1997/windows_NT_4.webp)
Windows NT 4 使用与 Windows 9X 相同的 UI 主题。第一个版本 Windows NT 3 则使用了与 Windows 3.1 相同的 UI 元素。它看起来 (https://fabiensanglard.net/compile_like_1997/windowsnt3.1.png) 糟糕极了 (https://fabiensanglard.net/compile_like_1997/Winnt31.webp)。
安装 Visual C++ 6
---
雷神之锤的 Win32 版本是在 Visual C++ 4.X 上编写的,因为那是 96 年中期可用的最新版 Microsoft IDE。不过到了 1999 年,项目已经迁移到了 Visual C++ 6。如果你手头没有光盘,很可能可以在 Internet Archive 或 winworldpc.com 上找到。
[](https://fabiensanglard.net/compile_like_1997/1.png)
在“永远在线”互联网出现之前,大多数软件都使用产品 ID 来打击盗版。
[](https://fabiensanglard.net/compile_like_1997/2.png)
安装屏幕也带来了下一代的“Visual Studio”,它整合了多种开发环境。它很快就会成为那个一统天下的 Microsoft IDE。
[](https://fabiensanglard.net/compile_like_1997/3.png)
安装屏幕看起来有点怪。空白区域很多,进度条的位置也很别扭。这是因为微软没料到它会运行在 1280x1024 这种疯狂的高分辨率下(id 的开发者可能在他们 21 英寸的显示器上用了这个分辨率)。它只有在 640x480 或 800x600 下才看起来像原本设计的样子。
[](https://fabiensanglard.net/compile_like_1997/4.png)
[](https://fabiensanglard.net/compile_like_1997/5.png)
安装好 VC++6 后,我们需要获取源代码。**不要**从 GitHub 下载,也不要通过 FTP 传输文件。这会搞乱工作区文件 `.dsw`。然后 VC++6 将无法解析它,而且它甚至不会给你报错,只是打开后不显示任何文件/项目关联。你会浪费半天时间来调试这个问题。
相反,你需要获取 q1source.zip (https://fabiensanglard.net/compile_like_1997/q1source.zip)。它以前在 id Software 的 FTP 服务器上可用,但现在你可以从 Jason Brownless [\[2\]](https://fabiensanglard.net/compile_like_1997/index.html#footnote_2) 维护的 awesome*雷神之锤官方档案*中获取。
[](https://fabiensanglard.net/compile_like_1997/6.png)
使用虚拟机可以通过拖放传输文件。或者你也可以使用*Quick 'n Easy FTP Server*,它在 9X/NT 上都可用。
[](https://fabiensanglard.net/compile_like_1997/7.png)
要解压缩 `q1source.zip`,你需要 WinRar。v2.50 版本在 9X/NT 上仍然运行良好。
[](https://fabiensanglard.net/compile_like_1997/8.png)
现在启动 VC++6。选择“打开工作区”,然后选取“WinQuake.dsw”。
现代版本的 Visual Studio 使用 .sln(解决方案)和 .vcxproj,但 Visual C++ 6 使用 .dsp 和 .dsw。dsp 包含单个项目,而 dsw 是一个指向 dsp 项目的工作区。
[](https://fabiensanglard.net/compile_like_1997/9.png)
使用“全部重新生成”开始构建。
[](https://fabiensanglard.net/compile_like_1997/10.png)
构建会失败,因为 VC6++ 无法汇编所有包含 Michael Abrash 手工优化汇编代码的 `.s` 文件。
[](https://fabiensanglard.net/compile_like_1997/11.png)
`.s` 文件是通过“mycoolbuild”的“自定义生成步骤”构建的,该步骤依赖于 `ml.exe` 汇编器。它随 VC++6 Processor Pack (vcpp5.exe) 一起提供。
[](https://fabiensanglard.net/compile_like_1997/12.png)
首先安装 Visual Studio 6.0 Service Pack 5 (vc6sp5.exe)。当然,直接运行 setupsp5.exe 会失败。这是因为你需要先安装 MDAC 2.5。
[](https://fabiensanglard.net/compile_like_1997/13.png)
不要花一个小时去别处下载 MDAC。你只需要运行 mdac_typ.exe,它就在 vs6spp5.exe 解压后创建的同一个文件夹里。
[](https://fabiensanglard.net/compile_like_1997/14.png)
返回并运行 setupsp5.exe。这次它就能工作了。到这时候,你应该感觉像是在跟着《猴岛小英雄》的攻略走。一切都毫无道理。我们绝对深入到了 90 年代。
[](https://fabiensanglard.net/compile_like_1997/15.png)
又是尴尬的小进度条,但好歹有进展了。
[](https://fabiensanglard.net/compile_like_1997/16.png)
安装 VC++6 Processor Pack (vcpp5.exe)。现在你应该能在 VC++6 的 bin 文件夹中看到 `ml.exe` 和 `cl.exe` 在一起了。用 VC++6 重新打开项目,再次运行“全部重新生成”。这次应该能成功。
[](https://fabiensanglard.net/compile_like_1997/17.png)
是的,它构建成功了!你需要复制 `PmProXX.dll`、`WdirXX.dll` 和 `id1` 文件夹,游戏就能启动了。你甚至可以构建/运行雷神之锤世界 (https://fabiensanglard.net/quakeworld),它和 QSpy 配合得很好!
[](https://fabiensanglard.net/compile_like_1997/19.png)
一个相当不错的 IDE
---
VC++6 对于 1996 年来说非常强大。它具备“转到定义”、断点、堆栈跟踪和变量检查等功能(但还没有智能感知自动补全)。我从未用过它,但在当时它一定感觉像做梦一样。
[](https://fabiensanglard.net/compile_like_1997/20.png)
[](https://fabiensanglard.net/compile_like_1997/21.png)
[](https://fabiensanglard.net/compile_like_1997/vcc2.webp)
[](https://fabiensanglard.net/compile_like_1997/vcc3.webp)
参考
---
---
相似文章
打造一台1997年的Quake PC!
作者记录了打造一台1997-1998年古董PC的过程,用于运行所有版本的Quake,涵盖了硬件选择,如Pentium MMX、3dfx Voodoo2和Socket 7主板。
打造一台1997年雷神之锤PC:雷神之锤基准测试
针对各种1990年代CPU和配置下雷神之锤性能的详细技术分析,比较英特尔、Cyrix、AMD芯片以及DOS和Windows 95下的内存类型。
WinQuake 存在的原因及其工作原理
深入探讨创建 WinQuake(Quake 的 Windows 原生版本)的历史原因,以及它如何在 Windows 95 和 NT 上实现接近 DOS 版本的性能。
打造一台1997年玩《雷神之锤》的PC:VQuake性能基准测试
一篇详细的回顾文章,讲述如何组装一台1997年时代的《雷神之锤》PC,并对硬件加速版VQuake进行基准测试,重点介绍Rendition Verite 1000显卡及其独特功能,包括双线性过滤和全亮度支持。
打造一台1997年的Quake PC:对GLquake进行基准测试
一位开发者讲述了他组装一台配备3dfx Voodoo显卡的复古PC,并对GLQuake进行基准测试的过程,同时讨论了硬件的小问题和性能印象。