C&C Generals + Zero Hour (EA Source Release)
EA 官方源码发布:C&C Generals + Zero Hour,含 2700+ .cpp 文件,双游戏目录架构
基本信息
| 项目 | 内容 |
|---|---|
| GitHub | https://github.com/electronicarts/CnC_Generals_Zero_Hour |
| 语言 | C/C++ (Visual Studio C++ 6.0 .dsp/.dsw) |
| 构建系统 | MSVC 6.0 (SP6) 或 MSVC 2015+ (需大量改造) |
| 渲染/引擎 | W3DDevice (Westwood 3D) + DirectX 9 |
| 许可 | GPL v3 + 附加条款 |
| 源码规模 | Generals ~1280 .cpp / GeneralsMD ~1421 .cpp |
项目结构
Generals/
├── Code/
│ ├── GameEngine/ # 核心游戏引擎
│ │ ├── Source/
│ │ │ ├── Common/ # 通用基础类型
│ │ │ ├── GameClient/ # 客户端渲染/UI/输入
│ │ │ ├── GameLogic/ # 游戏逻辑核心
│ │ │ │ ├── AI/ # AI (AIPathfind/AIGroup/AIPlayer/AISkirmishPlayer等)
│ │ │ │ ├── Map/ # 地图系统
│ │ │ │ ├── Object/ # 对象系统 (Armor/Weapon/Locomotor/Behavior/Body/Collide等)
│ │ │ │ ├── ScriptEngine/ # 脚本引擎
│ │ │ │ └── System/ # 核心系统
│ │ │ └── GameNetwork/ # 网络同步 (FrameDataManager/Connection/GameSpy)
│ │ └── Include/
│ ├── GameEngineDevice/ # 平台/渲染设备抽象
│ │ ├── W3DDevice/ # Westwood 3D 渲染器 (Common/GameClient/GameLogic)
│ │ ├── Win32Device/ # Win32 平台实现
│ │ ├── MilesAudioDevice/# Miles 音频设备
│ │ └── VideoDevice/ # 视频设备 (含 Bink 集成)
│ ├── Libraries/ # 第三方依赖 (STLport-4.5.3/DX9SDK/Max4SDK等)
│ └── Main/ # WinMain 入口 (RTS.RC/resource.h/WinMain.cpp)
├── Run/ # 编译输出目录
└── stlport.diff # STLport 4.5.3 补丁文件
GeneralsMD/ # Zero Hour 扩展包 (独立平行结构)
├── Code/ (类似 Generals/Code/,1421 .cpp)
└── Run/
核心技术点
W3DDevice 渲染架构
- Westwood 自研 3D 渲染管道,DirectX 9 为主要后端
- W3DDevice/ 包含 Common/GameClient/GameLogic 三个子目录
- VideoDevice/ 含 Bink 视频解码集成
对象系统 (Object/)
Object.cpp— 基础游戏对象Armor.cpp,Weapon.cpp,WeaponSet.cpp,Locomotor.cpp— 属性系统ObjectCreationList.cpp— 对象创建列表(数据驱动)ObjectTypes.cpp— 类型元数据PartitionManager.cpp— 空间分区(加速碰撞查询)Damage.cpp,Destroy.cpp,Die.cpp— 伤害/死亡处理ExperienceTracker.cpp,FiringTracker.cpp— 经验追踪GhostObject.cpp— 幽灵对象(网络同步用)- Behavior/Update/Contain/SpecialPower/Upgrade/ — 丰富行为组件
AI 系统 (AI/)
AI.cpp,AIPlayer.cpp,AISkirmishPlayer.cpp— 分层 AI 玩家AIGroup.cpp,AIGuard.cpp,AISquad.cpp,AITNGuard.cpp— 单位组/守卫/阵型AIPathfind.cpp— 寻路系统AIStates.cpp— AI 状态机TurretAI.cpp— 炮塔专用 AI
网络系统 (GameNetwork/)
FrameData.cpp,FrameDataManager.cpp— 帧同步数据管理Connection.cpp,ConnectionManager.cpp— 连接管理GameSpy*.cpp— GameSpy SDK 集成(已过时)NAT.cpp— NAT 穿透LANAPI*.cpp— LAN 发现协议FileTransfer.cpp,DownloadManager.cpp— 文件传输/下载管理FirewallHelper.cpp— 防火墙助手- WOLBrowser/ — 局域网浏览器
数据驱动设计
ObjectCreationList.cpp— 对象创建列表(类似 CommandEngine 的对象创建描述)ScriptEngine/— 脚本系统Map/— 地图数据结构Upgrade/— 升级系统
依赖问题(最大痛点)
源码发布不含以下必要库,必须自行寻找或移除:
- DirectX SDK 9.0+ → Code/Libraries/DX90SDK/
- STLport 4.5.3 → Code/Libraries/STLport-4.5.3/ (stlport.diff 补丁)
- 3DSMax 4 SDK → Code/Libraries/max4sdk/
- NVASM → Code/Tools/NVASM/
- GameSpy SDK → Code/Libraries/Source/GameSpy/
- RAD Miles Sound System SDK → Code/Libraries/Source/WWVegas/Miles6/
- RAD Bink SDK → Code/GameEngineDevice/Include/VideoDevice/Bink/
- SafeDisk API → Code/GameEngine/Include/Common/SafeDisk/
- ZLib 1.1.4 / LZH-Light 1.0
编译门槛极高:MSVC 6.0 SP6 是最匹配版本,现代 MSVC 2015+ 需要大量改造。
对公司 AI 游戏的参考价值
| 方向 | 启示 |
|---|---|
| 帧同步网络 | FrameDataManager 帧同步架构,Connection 分层连接管理 |
| AI 分层设计 | AIPlayer→AISkirmishPlayer→AISquad→AITurret 多层抽象 |
| 对象组件系统 | Behavior/Body/Collide/Contain/Locomotor 分组件设计(类似 ECS 雏形) |
| 数据驱动对象创建 | ObjectCreationList 列表式对象生成描述 |
| W3DDevice 抽象 | 渲染设备与游戏逻辑分离架构 |
| 脚本引擎 | ScriptEngine/ 嵌入式游戏脚本系统 |
备注
- 非清洁室实现:这是 EA 官方直接发布的原始源码,不是社区清洁室重写
- 无维护支持:EA 明确标注"归档保存目的,无支持"
- 游戏数据分离:需持有原版游戏(C&C Ultimate Collection on Steam/EA App)
- Steam Workshop:EA 提供了 Workshop 支持(Generals appid=2229870 / Zero Hour appid=2732960)
- 对比 CnC Remastered:CnC_Remastered_Collection 是 C&C TD+RA 的源码,本项目是 Generals+Zero Hour 的源码,两者是不同游戏