open-sourcegamediabloengine-portrpgaction type: concept 创建: 2026-04-10 更新: 2026-04-10
Freeablo
Diablo 1 游戏引擎清洁室重实现,现代跨平台开源引擎
基本信息
核心技术点
架构决策
- 双线程架构: 渲染线程 + 游戏逻辑线程分离,模拟速度与帧率独立
- 确定性锁步网络: 弃用原版有问题的多人实现,改用确定性锁步 (类似 OpenTTD, Hypersomnia)
- 整数/定点数数学: 游戏模拟禁用浮点数保证确定性
- 无符号整型禁用: 避免负值转 size_t 的坑
- Nuklear GUI: 弃用 librocket,改用 Nuklear (可皮肤化,贴近原版 Diablo 风格)
- 资源懒加载: 渲染线程按需从原版 Diablo 格式 (CEL, MPQ) 懒加载精灵数据
- StormLib MPQ: 读取原版 Diablo 数据文件 (DIABDAT.MPQ)
- 依赖策略变迁: Hunter 包管理器 → 完全内嵌依赖 (2020年项目归档前)
组件模块
| 组件 |
功能 |
faudio |
音频管理 |
cel |
CEL 格式解码 ( Diablo 精灵动画) |
diabloexe |
解析原始 Diablo.exe 获取数据 |
faio |
异步文件 IO |
Image |
图像处理 |
input |
输入处理 |
level |
关卡系统 |
misc / nuklearmisc |
工具库 |
random |
随机数 (确定性) |
render |
OpenGL 渲染管线 |
serial |
存档序列化 |
settings |
配置管理 |
应用程序
| App |
用途 |
freeablo |
主游戏引擎 |
celview |
CEL 精灵查看器 |
exedump |
从 Diablo.exe 导出数据 |
mpqtool |
MPQ 档案工具 |
launcher |
游戏启动器 (早期版本) |
渲染管线 (render 组件)
- OpenGL 后端 (弃用 SDL2 渲染)
- SpriteGroup 精灵组管理
- AtlasTexture 图集纹理
- 调试渲染器 (DebugRenderer)
- 光标渲染 (Cursor)
- 帧缓冲 (Framebuffer)
- 渲染实例 (RenderInstance)
玩法特点
- 需原版 Diablo 1.09 数据文件 (DIABDAT.MPQ + Diablo.exe)
- 支持城镇+地下城探索
- 玩家/NPC 动画、移动战斗 (近战/远程/魔法)
- 怪物掉落物品系统
- 商店买卖系统
- 调试功能: F10 纹理过滤、F11 调试网格、滚轮缩放
对公司 AI 游戏的参考价值
| 方向 |
启示 |
| 确定性网络同步 |
锁步模型适合强交互游戏 OpenTTD Hypersomnia |
| 双线程渲染/逻辑分离 |
独立模拟 tick 保证一致性 |
| C++17 现代特性 |
智能指针、optional、variant 替代 boost |
| 原版数据复用 |
清洁室逆向+重写需要精细的格式解析 |
| 定点数数学 |
竞技性游戏避免浮点不确定性的范式 |
| Nuklear GUI |
游戏内嵌 UI 可用轻量 Immediate Mode GUI |
局限性与教训
- 项目已归档: 作者 2020 年停止维护,最后一次 commit 2020年2月
- 仅支持 1.09 版本: 原版 Diablo 版本锁定
- 单人游戏为主: 网络功能为确定性锁步但实际可用性有限
- 需原版资产: 无法开箱即用,需持有原版游戏
关联页面