open-sourcegamefpsbuild-enginedos90sreverse-engineering type: concept 创建: 2026-04-09 更新: 2026-04-09

Duke Nukem 3D

3D Realms 经典 FPS 游戏源码,Ken Silverman Build Engine 驱动的 1996 年招牌作品,2003 年 GPLv2 开源

基本信息

项目 内容
GitHub https://github.com/videogamepreservation/dukenukem3d
原始开发商 3D Realms (Apogee Software)
源码发布 2003-04-01(Charlie Wiederhold 整理)
语言 C(主体)+ 少量汇编
构建系统 Watcom C/C++(Open Watcom 可免费编译)
渲染引擎 Ken Silverman's Build Engine(含预编译 .OBJ)
许可 GPLv2(源码)/ 3D Realms 保留游戏数据版权

核心技术点

Build Engine 架构

Duke Nukem 3D 构建于 Ken Silverman 的 Build Engine(KenBuild)之上,这是同时期比 id Tech 1(BSP 树)更灵活的 sector-portal 渲染引擎:

  • Sector/Portal 模型:世界由最多 1024 个 sector(区域)和 8192 面墙构成,portal 连接实现层叠空间
  • MAXSPRITES 4096:单关卡最多 4096 个精灵实体
  • 预编译引擎:build engine 以预编译 .OBJ 形式提供(ENGINE.OBJ),而非源码分发;完整 Build Engine 源码需单独从 Ken Silverman 网站获取
  • 分辨率支持:从 320×200 到 1600×1200,动态视频模式切换

游戏逻辑模块化

文件 职责
GAME.C 主循环、版本判断、DEMO 录制/回放、初始化
ACTORS.C 角色 AI、碰撞检测、游戏对象行为
PLAYER.C 玩家输入处理、运动逻辑
SECTOR.C Sector 事件(电梯、门、陷阱等)
PREMAP.C 关卡加载前的初始化逻辑
MENUES.C 菜单系统 UI
CONFIG.C 配置文件读/写(.CFG)
MULTI.C / MMULTI.C 多人网络(IPX 原始包交换)

音频系统

  • Jim Dose 音频库audiolib/):同样用于 Rise of the Triad,包含 GUS(Gravis UltraSound)支持
  • FX_MAN.H 音效管理器 + MUSIC.H MIDI 音乐接口
  • RTS.C:运行时音效合成系统(Run-Time Sound)

网络与演示

  • 原始版本支持 16 玩家(MAXPLAYERS=16)
  • 底层使用原始 IPX 包交换(d_net.c 风格),现代系统需模拟层
  • DEMO 录制系统:firstdemofile[],原始 .DMO 文件与新版不兼容

移植注意事项

  • 原始编译目标:DOS 32-bit + DOS/4GW extender
  • Open Watcom 1.0/11.0c 可免费编译,官方推荐
  • 游戏数据(.GRP/.DAT)与源码分离,需持有原版 Duke 3D 1.5 才可合法运行
  • 声音系统对现代系统兼容性差(与原版 DOS 行为一致)
  • CTW 注释标记(// CTW):Charlie Wiederhold 的所有修改用此标记

玩法特点

  • 3D Realms 招牌 FPS:美式幽默台词、关卡编辑器(BUILD)、MOD 支持
  • Atomic Edition(1.5):最终发行版,包含完整战役和多玩家模式
  • 可玩数据分离:源码 + 原版数据文件 = 可运行游戏(与 Chocolate Doom 哲学相似)

对公司 AI 游戏的参考价值

方向 启示
引擎/游戏数据分离 预编译引擎 .OBJ + 游戏逻辑源码的架构模式,可用于模块化解耦
Sector-Portal 渲染 比 BSP 更适合动态关卡改造,适合 AI 生成关卡的运行时编辑
数据驱动游戏设计 sector 事件系统(电梯/门/陷阱)完全由数据触发,与 AI 游戏任务系统相似
多游戏共用引擎 Build Engine 同时驱动 Duke Nukem 3D / Shadow Warrior / Blood,引擎可配置化思路值得借鉴
历史代码维护 2003 年整理 1996 年代码并保持可编译性,大型项目长周期维护参考

相关页面