OpenYR 是由 sovietianqi 发起并维护的《命令与征服:尤里的复仇》开源引擎实现项目。项目基于对原版 gamemd.exe 可执行文件的二进制逆向分析,结合 YRpp(https://github.com/Phobos-developers/YRpp) 库的接口定义与数据结构研究成果,对原版引擎的核心逻辑进行独立重建与重新实现。OpenYR 旨在摆脱原版二进制文件的封闭性约束,为社区提供一个开放、可扩展、可移植的引擎替代方案,同时为 MOD 开发、工具链集成及跨平台适配提供更广阔的技术空间。
🚧 早期开发阶段,持续建设中 —— 项目刚刚完成初始提交,核心架构与基础组件正在逐步搭建。由于基于逆向分析的重建工作存在固有的不确定性与理解偏差,当前版本尚未实现完整的游戏可玩性,且可能存在与原版行为不符的逻辑错误。欢迎开发者参与代码审查与测试反馈,共同完善引擎实现。
OpenYR 从架构设计的源头出发,对原版引擎进行了全面重构,主要技术方向包括:
项目采用模块化分层架构,各核心子系统独立封装,包括但不限于:
- Core:引擎核心基础设施
- Game:游戏主循环与状态管理
- Combat:战斗逻辑与伤害计算
- AI:人工智能决策系统
- Audio:音频播放与管理
- FileFormats:Mix / INI / SHP / VXL 等资源文件解析
各模块间通过清晰的接口交互,降低耦合度,便于独立测试与替换。
- 采用 CMake 作为构建系统,支持多平台编译配置
- 使用 C++ 作为开发语言,充分利用现代 C++ 特性提升代码表达力与安全性
- 依赖管理清晰,便于集成第三方库
- 游戏逻辑完全由源代码实现,不再受限于原版硬编码行为
- 为 MOD 作者提供更直接的逻辑修改入口,无需依赖注入或 Hook 手段
- 便于实现原版引擎难以支持的新机制与新玩法
通过独立于 Windows 专有 API 的抽象层设计,OpenYR 具备向其他操作系统(如 Linux、macOS)移植的潜力,为更广泛的玩家群体提供原生体验的可能。
| 组件 | 说明 |
|---|---|
| 开发语言 | C++ |
| 构建系统 | CMake |
| 逆向分析基础 | gamemd.exe(尤里的复仇 1.001) |
| 参考实现 | YRpp 支持库(https://github.com/Phobos-developers/YRpp) |
| 目标游戏 | 命令与征服:尤里的复仇 |
| 许可协议 | GNU General Public License v3.0 |
OpenYR/
├── src/
│ ├── AI/ # 人工智能系统
│ ├── Abstract/ # 抽象基类与接口定义
│ ├── Animations/ # 动画系统
│ ├── Audio/ # 音频引擎
│ ├── COM/ # 组件对象模型
│ ├── Combat/ # 战斗逻辑
│ ├── Containers/ # 容器与数据结构
│ ├── Core/ # 引擎核心
│ ├── FileFormats/ # 资源文件格式解析
│ ├── Game/ # 游戏主逻辑
│ └── Helpers/ # 辅助工具与实用函数
├── CMakeLists.txt # CMake 构建配置
└── README.md # 项目说明
构建指南
环境要求
· 支持 C++17 或更高版本的编译器(MSVC / GCC / Clang) · CMake 3.10 或更高版本 · 游戏原版资源文件(用于测试与运行)
构建步骤
git clone https://github.com/Sovietianqi/OpenYR.git
cd OpenYR
mkdir build && cd build
cmake ..
cmake --build . --config Release具体构建细节将在项目稳定后补充完善。
免责声明
本项目为开源学习与研究工作的一部分,旨在促进对经典游戏引擎的技术理解与社区创新。使用者需明确知晓以下条款:
· 非官方性质:OpenYR 并非 Electronic Arts 或其关联公司的官方产品,亦未经授权或认可。 · 逆向工程风险:项目基于对原版二进制文件的逆向分析,可能涉及法律灰色地带。使用本项目的源代码或编译产物所产生的任何法律后果,由使用者自行承担。 · 不保证兼容性:由于逆向分析存在固有误差,OpenYR 的实现可能与原版行为存在差异,也可能导致游戏资源不兼容、存档损坏或其他不可预见的问题。项目团队不对因使用本软件而产生的任何损失负责。 · 仅供研究目的:建议使用者仅将本项目用于技术学习、个人研究或非商业用途,严禁用于侵犯任何第三方权益的行为。
贡献与支持
OpenYR 目前处于早期开发阶段,诚邀社区开发者参与共建。
· 问题反馈:请通过本仓库 Issues 提交 · 代码贡献:欢迎提交 Pull Request · 讨论交流:欢迎通过 Issues 或邮件与作者沟通
项目仍在快速发展中,后续将陆续补充设计文档、API 参考与完整的构建指南。
