Hacker News 中文摘要

RSS订阅

让我们像1997年那样编译《雷神之锤》 -- Let's compile Quake like it's 1997

文章摘要

这篇文章介绍了如何像1997年那样编译《雷神之锤》游戏的Windows版本。最初游戏是在NeXT系统上开发的,后来id Software改用Windows NT和Visual C++ 4.X进行开发。作者详细描述了重现当年编译环境的步骤,包括寻找原始硬件等不同级别的历史准确性要求。

文章总结

以1997年的方式编译《雷神之锤》

背景介绍

《雷神之锤》最初的可执行文件(quake.exe和vquake.exe)是在HP 712-60工作站上使用NeXT系统开发的,并通过DEC Alpha 2100A服务器上的DJGPP进行交叉编译。1996年6月,id Software在游戏发布后,因担心NeXT平台的发展停滞,将开发环境迁移至Windows NT系统。

"我们在发布《雷神之锤》后立即转向了使用Windows NT的Intergraph硬件。" —— John Carmack

随后的版本(winquake.exe、glquake.exe和QuakeWorld)均在Windows NT上使用Visual C++ 4.X开发和编译。

复现1997年的编译环境

本文详细介绍了如何在现代环境中复现1997年编译《雷神之锤》Win32版本的过程。根据对历史准确性的需求,可以选择以下四种环境之一: 1. 使用Intergraph RealizM Dual P6-200MHz工作站(难度极高) 2. 使用双路Pentium Pro机器(较难但可行) 3. 使用90年代末的普通PC(如"Quake PC") 4. 在Oracle Virtualbox中创建虚拟机

作者测试了在"Quake PC"和Virtualbox(运行Windows 98SE或Windows NT 4.0)上的编译过程。

安装Windows NT 4.0

Windows NT 4.0的安装相对简单,CD可直接引导安装,耗时约30分钟。系统启动界面简洁明了,直接显示检测到的CPU数量和内存容量,没有多余的动画效果。

需要注意的是: - 添加第二颗CPU需要重新安装系统以支持SMP - 双CPU主板还需要额外安装稳压器

安装Visual C++ 6.0

虽然《雷神之锤》最初使用Visual C++ 4.X开发,但到1999年项目已迁移至VC++ 6.0。安装过程中需要注意: - 需要产品ID(90年代反盗版措施) - 界面设计针对640x480或800x600分辨率优化,在高分辨率下显示异常 - 安装包可从Internet Archive或winworldpc.com获取

获取并编译源代码

关键步骤: 1. 必须使用原始的q1source.zip文件(可从Quake官方存档获取) 2. 使用WinRAR 2.50解压文件 3. 在VC++6中打开WinQuake.dsw工作区文件

编译过程中会遇到汇编文件(.s)无法编译的问题,需要安装VC++6 Processor Pack(需先安装MDAC 2.5)。这一过程充满90年代特色,如同解决《猴岛小英雄》的谜题一般曲折。

VC++6的强大功能

尽管是1996年的产品,VC++6已经具备了许多现代IDE的功能: - 跳转到定义 - 断点调试 - 堆栈跟踪 - 变量检查 (但还没有智能感知自动补全功能)

参考资料

  1. 与John Carmack的对话
  2. Jason Brownless维护的Quake官方存档

通过这一系列步骤,开发者可以体验90年代末的游戏开发环境,感受那个年代的技术特点和工作方式。

评论总结

以下是评论内容的总结:

  1. 对软件考古学的兴趣
  • 有评论者提到类似的研究,如早期GCC版本的引导过程及其中发现的代码生成bug "love software archaeology like this" "there was a bug in the codegen"
  1. 构建环境的重要性
  • 强调精确重现工具链的必要性,指出现代CI的局限性 "Build environment archaeology like this matters more than people realize" "Exact toolchain reproduction...the only way to validate"
  1. 关于Quake编译历史的讨论
  • 对Quake是否使用DJGPP在Alpha服务器上交叉编译提出质疑 "Is that accurate? I thought DJGPP only ran on...x86" "Was DJGPP able to run on Alpha for cross compilation?"
  1. 早期开发环境的回忆
  • 分享使用Visual C++ 6的经历,讨论其性能优势 "Visual C++ 6...had auto completion" "debugger ran faster on hardware from the era"
  1. 个人项目经验
  • 讲述因编译器版本导致二进制大小变化而引发的生产问题 "a newer C compiler...increased it to 2300 bytes" "tweaking the assembly file...praying there would be no more changes"
  1. 现代开发者接触老代码的体验
  • 描述在2023年修改1996年Quake代码的新鲜体验 "working on a code base from 1996-2000...in pure C" "C feels so foreign to me...but it was still really fun"
  1. 其他相关提议
  • 建议重现早期Linux源代码 "build the Linux source code leak"
  • 期待关于Quake的新书 "Quake book incoming from Fabien?"

注:所有评论均无评分信息。总结保持了不同观点的平衡,每个主要观点都引用了2-3条原始评论的关键内容。