jak-project · open-goal/jak-project
open-goal/jak-project 是面向 PS2《Jak & Daxter》系列的开源逆向工程与反编译项目,主要语言为 Common Lisp。项目致力于重建该系列原作使用的 GOAL 游戏编程语言(Scheme 系 Lisp 方言),并在此基础上推进游戏代码的反编译。仓库话题...
这个仓库并非可以直接下载来玩的成品游戏,而是 id Software 在 GPL 许可下公开的《雷神之锤》(Quake)整套 C 语言源码集合。仓库包含四套彼此独立的工程:winquake(Windows 平台下的软件渲染单机版)、glquake(OpenGL 渲染的单机版)、quakeworld(软件渲染的联机对战分支)以及 glquakeworld(OpenGL 渲染的联机对战分支)。四个工程共享大量底层代码,但因为渲染后端和游戏逻辑分支不同,在目录结构与编译目标上相互独立。对游戏史和引擎史而言,这次发布是 id Tech 2 引擎第一次以完全开源的形式交给社区,因此在引擎研究、教学和后续社区移植项目中长期被当作参考实现。
从内容边界看,源码开放的是“引擎与游戏逻辑”,不包括游戏资源。README 明确指出,Quake 的全部数据文件仍然受原始版权与许可约束,因此不能重新分发原版游戏的数据;如果想真正跑起来,需要自备合法获得的正版数据,或者使用官方发布的试玩版本数据(其再分发同样附带限制)。作者在信中提到会考虑把共享版(shareware)章节的许可改得更宽松,以便 Linux 发行版打包,但没有给出时间表。另一方面,如果基于这份代码做一个彻底的总转换(total conversion,即把内容全部替换掉),则可以把它做成完全独立的游戏发布——这是很多独立项目选择这条路线的原因。
在技术实现上,代码主体是 C 语言,但并非纯 C:部分关键路径(例如渲染与光栅化的热点代码)以汇编实现,作者坦言不建议任何人去改动这些汇编代码,因为它们既晦涩又高度平台相关。为了让 DOS、Linux 与 Windows 版本共用同一份源码,团队专门写了 gas2masm 工具,把 GNU as 语法的汇编转换成 MASM 语法。构建方式上有两条路:一条是保留汇编文件按官方流程构建,这需要额外安装 masm 汇编器;另一条是修改某个 #define,只使用纯 C 代码构建,这样可以绕开汇编工具链,但代价是软件渲染版本的性能几乎损失一半,而 OpenGL 版本受到的影响则小得多,因为其瓶颈更多在图形 API 与驱动侧。README 还提到,最初的 DOS 版 Quake 理论上也能从这份源码构建,但发布者没有实际验证过。
平台与构建方面,仓库里提供的工程是面向 Visual C++ 6.0 的,README 只说这些工程在 VC++ 6.0 下测试过,并没有给出 Linux 或 macOS 下的构建说明或脚本,因此这两个平台的支持情况需要读者自行评估。对于今天的开发者来说,这意味着要自己准备一个上世纪的编译环境,例如在虚拟机或兼容环境中安装 VC6 与 masm,或者把工程迁移到现代编译器并处理随之而来的语法与类型问题;这部分工作没有任何现成文档,属于二次开发范畴。国内环境下尤其要注意:VC6、MASM 等老工具链的安装包不易获取,且多为非官方镜像,安全性需要自行判断;如果走纯 C 路线可以明显降低依赖复杂度,但仍需准备 32 位构建环境。
许可条款是这份发布的重点之一。代码整体按 GPL 授权,作者用通俗语言解释了其含义:你可以对代码做任何事,包括把修改后的版本拿去卖钱,但一旦分发二进制,就必须把完整的源码免费公开给所有人。他特意对比了 id 以往的许可方式——那些许可禁止商业利用,却不强制开源,结果导致部分 mod 团队把源码封闭甚至最终丢失,社区因此蒙受损失。这次改用 GPL 正是为了纠偏,作者还鼓励团队进一步用公共 CVS 服务器进行开发。他也留了一个例外通道:如果确有商业项目无法接受开源义务,可以另行洽谈付费的独立授权,但他个人仍建议直接接受 GPL。发布说明由 John Carmack 署名,并感谢 Dave “Zoid” Kirsh 与 Robert Duffy 完成了这次发布的大量琐碎工作。
适合从中学习的方向包括:软件光栅化渲染器与 OpenGL 渲染器两条并行的图形路径如何共存,渲染热点的汇编优化思路,以及单机版与 QuakeWorld 联机分支在同一套代码基础上的分化组织方式。由于代码体量大、年代久远、缺少现代构建系统与文档,阅读与编译门槛都偏高,更适合已经具备 C 语言与图形学基础、并愿意投入时间做环境适配的读者;对初学者而言,把它当作“能编译成功的项目”并不现实,更适合当作研读资料。
NBlood 是用 EDuke32 引擎技术与开发思路对 Build 引擎游戏所做的逆向工程移...
Frogatto & Friends 是一款 2D 横版动作冒险游戏,主角是一只青蛙;开发团队...
id Software 以 GPL 许可证发布的《雷神之锤3竞技场》(Quake III Arena)源...