AX 爱鲜报

Quake II Rerelease 游戏源码

id Software 官方开源的《雷神之锤2》2023 重制版游戏逻辑代码,包含 baseq2、ctf、rogue、xatrix 等模块,供玩家制作 MOD 与学习经典 FPS 游戏架构。

爱鲜报评分

0.0

0 人评分

2.2k

星数

否

中文

C

主语言

是

活跃

1

贡献者

人工分析

EDITORIAL

推荐理由

这是 id Software 官方放出的商业级 FPS 游戏逻辑源码,包含完整的武器、怪物、AI、物理与网络同步实现,是学习 C/C++ 游戏编程的珍贵资料。代码从 C 迁移到 C++17/20,并引入 cgame 模块与 40Hz tickrate 等现代化改造,对 MOD 开发者和引擎研究者都很有价值。

适用场景

  • Quake II 重制版 MOD 开发
  • 经典 FPS 游戏逻辑与 AI 研究
  • C++ 游戏引擎架构学习
  • 多人联机网络同步机制分析
  • 复古游戏逆向与二次创作

优点

  • id Software 官方开源,代码质量与工程结构权威可靠
  • 涵盖武器、怪物、物理、网络等完整游戏逻辑,学习价值高
  • 已迁移到 C++17/20,支持现代编译器与格式化库
  • 引入 cgame 模块与 40Hz tickrate,扩展性与手感更佳
  • GPL-2.0 许可,可自由学习、修改与分发

缺点

  • 需要自行准备 Quake II 重制版游戏本体与资源文件
  • 构建依赖 fmtlib、jsoncpp 等第三方库,环境配置略繁琐
  • 旧 MOD 因 API 与结构大改,迁移成本较高
  • 官方不提供技术支持,遇到问题需依赖社区
  • 代码规模较大,新手直接上手有一定门槛
上手难度 较难

项目简介

本仓库是 id Software 官方开源的《雷神之锤2》(Quake II)2023 重制版游戏逻辑源码,主要面向希望制作 MOD 的玩家与研究者。仓库同时保留了原始游戏代码作为参考。

重制版使用新版 API 在服务端与游戏模块之间通信,并引入了类似《雷神之锤3》cgame 的「客户端游戏」模块,让此前硬编码的客户端行为也能被 MOD 修改。网络协议版本更新为 2023。

代码结构

  • 合并了原版的多个独立模块:baseq2、ctf、rogue、xatrix
  • 需要 C++17 编译器
  • 因 spawnflags 冲突,部分地图被修改,原版资料片地图可能无法直接加载
  • 附带开发用 FGD 与修改过的 TrenchBroom gameconfig.cfg

编译要点

官方仅在 Clang、VS2019、VS2022 上测试过,C++17 与 C++20 均可编译。

必须定义的预处理宏:

  • GAME_INCLUDE:声明当前编译的是游戏 DLL
  • KEX_Q2GAME_EXPORTS:导出 GetGameAPI 函数
  • KEX_Q2GAME_DYNAMIC:PC 平台始终动态链接
  • NO_FMT_SOURCE:内部构建系统限制所需

依赖库:

  • fmtlib:未定义 USE_CPP20_FORMAT 时需要
  • jsoncpp:需放入 json 子目录

两者也可通过 vcpkg 安装:

vcpkg install jsoncpp:x64-windows fmt:x64-windows

Windows 下建议把源码放入 MOD 目录的子文件夹(如 mymod/src),再打开 game.sln 构建。

主要技术变化

40Hz Tickrate

游戏逻辑由原版 10Hz 提升到 40Hz,即 25ms 步进,兼顾带宽与 CPU 开销,让地图与逻辑运行更精细。

打印与格式化

游戏 DLL 不再使用可变参数,改由调用方负责格式化,并几乎全面使用 fmt。edict_t、vec3_t 等内置类型可直接格式化。

数学与类型

数学函数在合适处改为 constexpr,并用运算符重载贴近 QuakeC 写法,例如 VectorMA(a, s, b, c) 可写成 c = a + (b * s)。qboolean 由 int32_t 改为 bool。

Info Keys 与 UTF-8

重制版引擎支持 UTF-8 玩家名,info key 解析交由引擎负责。分屏支持使变量带编号后缀,如 name_0、skin_1。

玩家移动(pmove)

pmove 同时作为 game_export_t 与 cgame_export_t 的导出,允许 MOD 修改物理同时兼容客户端预测。保留了大量原版移动特性,并将 trick jump 明确为一种移动类型。

扩展机制

所有引擎接口都预留了 GetExtension 桩函数,便于未来社区引擎返回命名结构体,类似 QuakeC 中常见的 getextension。

适用人群

适合熟悉 C/C++、对经典 FPS 游戏逻辑与 MOD 开发感兴趣的开发者。由于 API 与结构变动较大,旧 MOD 迁移到新代码库可能需要重写。

评论

登录后才可评论与评分

0 条评论

  • 暂无评论,来写第一条吧。