open-sourcegameaction-rpgreverse-engineeringwestwoodmultiplayer type: concept 创建: 2026-04-10 更新: 2026-04-10
OpenNox
Westwood Studios Nox (2000) 引擎开源复刻 — 清洁室逆向工程 + SDL2 跨平台移植
基本信息
| 项目 |
内容 |
| GitHub |
https://github.com/noxworld-dev/opennox |
| 语言 |
C/C++ |
| 构建系统 |
CMake 3.11+ |
| 渲染/引擎 |
SDL2 + OpenGL + OpenAL |
| 许可 |
MIT |
| 平台 |
Windows / macOS / Linux / WebAssembly (Emscripten) |
| 源码规模 |
41 源文件 (20 .c/.cpp),13MB 仓库 |
核心技术点
清洁室逆向工程
- 纯 C/C++ 从零重写 Nox 游戏引擎(2000 Westwood Studios)
- 不复用原版源码,通过二进制逆向 + 运行时分析重建逻辑
- compat 层处理平台差异(Windows/macOS/Linux)
SDL2 跨平台抽象
win.c — Windows API 抽象层
compat.c — POSIX/Linux 兼容层
compat_mss.c — Miles Sound System 音频库兼容层
- 所有平台共用同一套渲染/音频/输入代码
32位 + WebAssembly 支持
- 编译标志
-m32(32位内存模型,兼容原版数据布局)
- Emscripten 支持:
#ifdef __EMSCRIPTEN__ 条件编译
- WebAssembly 构建可直接在浏览器运行原版 Nox
VQA 视频解码器
- 自研 VQA (Westwood's Video Quality Assurance) 格式解码器
vqa/ 子目录:C++ 实现 vqa_decode.cpp / vqa_file.cpp / aud_decode.cpp
- 游戏过场动画纯自研解码,不依赖原版 DLL
数据文件驱动
GAME_data.c — 原版游戏数据提取/加载
cdrom.c — CD-ROM 数据流读取(怀旧兼容)
- 需要持有原版 Nox 游戏数据文件
玩法特点
- 动作 RPG:即时动作 + 技能系统,支持单人战役 + 多人对战
- 原版 Nox 剧情:延续 Westwood 的 Nox 世界观(Conquest of the Underworld)
- 跨平台多人:局域网/互联网对战,支持原版协议
对公司 AI 游戏的参考价值
| 方向 |
启示 |
| 清洁室逆向 |
对于已停止维护的游戏,清洁室重实现是延续生命力的有效方式 |
| SDL2 跨平台 |
经典游戏跨平台移植的标准范式:抽象层 + 条件编译 |
| Emscripten 移植 |
浏览器化是延长老游戏生命力的可行路径(无需 Unity/Unreal) |
| 音视频解码 |
自研解码器 vs 第三方库(VQA 自研 vs MSS 兼容层对比) |
架构图
src/
├── main.cpp # 程序入口,Emscripten/Win/Linux/macOS 统一入口
├── GAME[1-5].c # 游戏逻辑主模块(地图/战斗/AI/网络)
├── draw.c # 渲染管线
├── input.c # 输入处理
├── imm.c # IMM (Input Method Manager) 输入法支持
├── movie.c # 视频播放
├── sm.c # 状态机?
├── win.c # Windows API 抽象层
├── cdrom.c # CD-ROM 数据流
├── compat.c # POSIX/Linux 兼容层
├── compat_mss.c # MSS 音频库兼容层
├── GameEx.c/h # Game Extension 扩展
├── vqa/ # VQA 视频解码器子模块
│ ├── vqa_decode.cpp
│ ├── vqa_file.cpp
│ ├── aud_decode.cpp
│ └── ddpf_conversion.cpp
└── ConvertUTF.c # Unicode 编码转换
相关页面