open-sourcegamearpgdiabloreverse-engineeringnetwork-multiplayer type: concept 创建: 2026-04-10 更新: 2026-04-10

DevilutionX

Diablo + Hellfire 开源端口,提供引擎改进、bug修复和可选的QoL功能

基本信息

项目 内容
GitHub https://github.com/diasurgical/devilutionX
语言 C/C++ (259 .cpp + 163 .h,约 54K LOC)
构建系统 CMake 3.22+,支持 vcpkg
渲染 SDL2/SDL3 + DirectX(平台相关)
许可 MIT
版本 1.6.0-dev
原版依赖 需要原始 Diablo/Hellfire 游戏数据(DIABDAT.MPQ / hellfire.mpq)

核心技术点

清洁室逆向工程

  • 从原始 Diablo 1.09b 二进制逆向反编译而来,保留原版逻辑
  • 不包含原始 Blizzard 代码,合法开源
  • 需用户提供原版游戏数据文件(MPQ 包)

多平台端口架构

  • 支持的平台:Linux (x86_64/aarch64/x86/SDL1)、macOS、Windows (MinGW/MSVC)、Android、iOS、PS4、Switch、PS Vita、3DS、Amiga M68K、Xbox(Original/One/Series)
  • GitHub Actions CI 覆盖所有主流平台构建
  • 平台抽象层:SDL2/SDL3 作为跨平台基础,storm/ 目录处理 Windows 平台细节

渲染引擎(engine/ 子目录)

  • surface.cpp 曲面/blitting 系统
  • dx.cpp DirectX 渲染后端
  • load_cel.cpp / load_cl2.cpp / load_clx.cpp 专用sprite格式加载器(CEL/CL2/CLX)
  • palette.cpp 调色板系统
  • lighting.cpp 光照系统(Dungeon/GLYPH/SPECIAL)
  • render/ 子目录:软件/DX 渲染管线
  • 64K LOC engine 模块处理所有渲染逻辑

游戏逻辑(Source/ 根目录)

  • diablo.cpp (3.5K) — 主循环与初始化
  • player.cpp (3.5K) — 玩家实体,HP/MP/等级/属性系统
  • monster.cpp (5K) — 怪物AI,攻击/寻路/行为状态机
  • items.cpp (5K) — 物品系统,装备/消耗品/符文
  • objects.cpp (4.9K) — 场景物体(门/宝箱/祭坛/书架等)
  • missiles.cpp (4.3K) — 弹道/法术投射物系统
  • stores.cpp (2.8K) — 商店系统(识别/重铸/赌博)
  • inv.cpp (2.3K) — 背包/装备管理 UI
  • automap.cpp (2K) — 自动地图功能
  • lighting.cpp — 动态光照

关卡生成(levels/ 子目录)

  • drlg_l1.cpp ~ drlg_l4.cpp — 四个难度地下城的程序化生成
  • crypt.cpp — 奶牛关(Crypt)生成
  • gendung.cpp — 地下城主数据结构与布局
  • themes.cpp — 房间主题系统(教堂/墓穴/恶魔等)
  • setmaps.cpp — 固定特殊房间

网络系统(dvlnet/ 子目录)

  • abstract_net.h/cpp — 抽象网络接口
  • base_protocol.h/cpp — 模板协议基类(帧同步 Tick 架构)
  • tcp_client.cpp / tcp_server.cpp — TCP P2P 连接
  • protocol_zt.cpp — ZeroTier VPN 支持(异地局域网穿透)
  • loopback.cpp — 本地回环(单机双人)
  • cdwrap.cpp — 连接建立包装器
  • frame_queue.cpp — 数据包队列与帧同步
  • packet.h — PACKET_ENCRYPTION 可选加密(libsodium)
  • 帧同步多人:类似 Hypersomnia/OpenTTD 的确定性锁步模型

Lua 脚本系统(lua/ 子目录)

  • lua_event.cpp/hpp — 事件驱动 Lua 绑定
  • lua_global.cpp/hpp — 全局 API 暴露
  • repl.cpp/hpp — 运行时 REPL(read-eval-print loop)
  • autocomplete.cpp/hpp — REPL 自动补全
  • modules/ — 模块化 Lua API 扩展

DiabloUI(DiabloUI/ 子目录)

  • 菜单/角色创建/保存/加载 UI 系统
  • diabloui.cpp/h — 核心 UI 引擎
  • button.cpp/h — 按钮控件
  • scrollbar.cpp/h — 滚动条
  • hero/ — 角色创建相关 UI

存档系统

  • loadsave.cpp (2.9K) — 二进制序列化 SaveGame 格式
  • pfile.cpp/h — 玩家存档管理
  • multi.cpp (973) — 多人游戏存档同步

输入与控制

  • controls/ 子目录:键盘/手柄映射
  • control_mode.hpp — 键盘/触屏/控制器模式切换
  • keymapper.hpp — 按键映射配置
  • cursor.cpp/h — 鼠标光标系统

第三方依赖(3rdParty/)

  • asio — 异步网络 I/O
  • libfmt — 格式化字符串
  • libpng — PNG 图像
  • libsodium — 加密(packet encryption)
  • libsmackerdec — Smacker 视频解码
  • googletest — 单元测试
  • bzip2 — 压缩

玩法特点

  • 核心玩法:暗黑破坏神1(1996)完整可玩,含 Hellfire 资料片
  • 支持原版全部内容:4难度×16层地下城 + Crypt + 奶牛关
  • 可选改进:按键重映射、拉伸宽屏、帧率解锁、音质改进
  • 多人模式:TCP P2P / ZeroTier VPN / 本地回环,最多4人
  • 作弊菜单(debug mode):ctrl+alt+del 唤出
  • Mod 支持:Lua 脚本扩展,提供了 modding 工具

对公司 AI 游戏的参考价值

方向 启示
帧同步网络 dvlnet/base_protocol.h 模板化的帧同步协议,支持 ZeroTier 穿透,可参考用于确定性多人游戏
逆向工程 清洁室重实现需将原版逻辑完全重写而非复制粘贴,规避版权
多平台适配 SDL2/SDL3 抽象层 + 平台特定 storm/ 代码,可参考跨平台适配模式
Lua 脚本 内嵌 Lua REPL + 模块化 API 设计,可为游戏提供运行时脚本扩展能力
存档序列化 loadsave.cpp 的二进制 SaveGame 格式设计,可参考确定性存档方案
CI/CD GitHub Actions 多平台构建矩阵(17+ 平台),可参考构建自动化