像1997年那样编译Quake!

Fabien Sanglard 工具

摘要

一份详细的指南,介绍如何重现使用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!

Fabien Sanglard

作者记录了打造一台1997-1998年古董PC的过程,用于运行所有版本的Quake,涵盖了硬件选择,如Pentium MMX、3dfx Voodoo2和Socket 7主板。

WinQuake 存在的原因及其工作原理

Fabien Sanglard

深入探讨创建 WinQuake(Quake 的 Windows 原生版本)的历史原因,以及它如何在 Windows 95 和 NT 上实现接近 DOS 版本的性能。