open-sourcegame-engineunreal-engineue1reverse-engineeringc++ type: concept 创建: 2026-04-09 更新: 2026-04-09

Surreal Engine

Unreal Engine 1 (UE1) 清洁室重实现,支持 Unreal / Unreal Tournament (UT99)

基本信息

项目 内容
GitHub https://github.com/dpjudas/SurrealEngine
语言 C++20(~99K LOC,261 .h + 225 .cpp)
构建系统 CMake 3.15+
渲染 D3D11 + Vulkan 双渲染器(无 OpenGL
许可 BSD(或项目自有许可)
平台 Windows 10+、Linux
状态 活跃开发,Nightly builds 发布

核心技术点

清洁室重实现架构

  • 完全从头重写,不使用原始 Epic 源码
  • SHA1 数据库识别游戏版本(UE1GameDatabase),通过检测 System 目录可执行文件 SHA1 匹配已知游戏版本
  • 支持 10+ 款 UE1 游戏检测,但仅有 UT436 和 Unreal Gold v226 达到可玩状态

双渲染器架构

  • D3D11 (RenderDevice/D3D11/) — Direct3D 11 渲染器
  • Vulkan (RenderDevice/Vulkan/) — 现代 Vulkan 实现
  • 注意:与 UZDoom/ZDoom 不同,没有 OpenGL 渲染器(Status.md 明确标注 "There is no OpenGL renderer")
  • Vulkan 后端使用完整的 DescriptorSet/CommandBuffer/Framebuffer/Sampler 管理层

多窗口系统 (SurrealWidgets)

  • SurrealWidgets/ — 跨平台 UI 组件框架
  • 支持 SDL2 后端和 Wayland 原生后端
  • 三套应用入口:SurrealEngine(游戏)、SurrealEditor(编辑器)、SurrealDebugger(调试器)

Unrealscript VM(部分实现)

  • VM/ — 字节码解释器 (Bytecode.cpp)、表达式求值 (ExpressionEvaluator.cpp)
  • NativeFunc.cpp — 原生函数桩(尚未完整实现)
  • 缺失功能:数组支持、网络条件执行、大量 native 函数桩 → Bot AI 和脚本 Pawn 无法正常工作

模块化子系统

目录 职责
Audio/ 音频系统
Collision/ 碰撞检测
Commandlet/ 命令行工具(CompilerCommandlet、ExportCommandlet 等)
Compiler/ Unrealscript 编译器相关
GC/ 垃圾回收
Math/ 数学库
Package/ UE1 .u/.ukx/.umod 包文件加载
Render/ BSP 渲染管线(BspClipper/Lightmap/RenderCanvas 等)
UObject/ UE1 对象系统(UActor/UClass/UClient 等)
Video/ 视频播放

第三方依赖

  • ZVulkan — Vulkan 头文件/绑定封装(子模块)
  • openmpt — MOD/IT/XM tracker 音乐播放
  • openal-soft — Windows 专用音频后端(Linux 无此依赖)
  • SurrealWidgets — 自包含 UI 组件框架

构建流程

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j 16
# 产出: SurrealEngine, SurrealEditor, SurrealDebugger

当前状态与已知限制

可玩游戏

  • ✅ Unreal Tournament v436 — 相对可玩
  • ✅ Unreal Gold v226 — 相对可玩
  • ⚠️ 其他版本可能崩溃

重大缺失(Status.md 标注)

  • 无 OpenGL 渲染器
  • 无网络支持(完全缺失)
  • Unrealscript VM 未完成(数组/网络条件执行)
  • Mover 物理行为不准确
  • 无动态光照
  • Bot AI 不完整(只有受攻击反击和拾取物品)
  • 反射/Portal 渲染有 bug
  • 存档功能不完整
  • 原生 mod 完全不支持(by design)

对公司 AI 游戏的参考价值

方向 启示
清洁室逆向 不碰原始代码,通过检测游戏版本 + 文档化行为实现重实现,法律风险低
多游戏识别 SHA1Database 模式识别多版本游戏 → 可借鉴用于其他重实现项目的版本检测
Vulkan 现代渲染 Vulkan 完整管线设计(DescriptorSet/CommandBuffer 分离)→ 可参考 Vulkan 渲染器架构
三应用入口 Engine/Editor/Debugger 分离 → 游戏运行时/编辑器/调试器分离架构参考
无网络栈 当前完全无网络,可作为纯单人游戏重实现起点