open-sourcegameplatformersonicdoom-legacy3dfangame type: concept 创建: 2026-04-09 更新: 2026-04-09

Sonic Robo Blast 2

3D 索尼克主题同人游戏,基于修改版 Doom Legacy,融合经典平台跳跃与 3D 竞速。

基本信息

项目 内容
GitLab https://git.do.srb2.org/STJr/SRB2
语言 C(211 .c 文件 + 180 .h 文件,约 252K LOC)
构建系统 CMake 3.14+(src/ 子目录模块化)
渲染/引擎 Doom Legacy 分支,OpenGL 硬件渲染 + SDL2 软件渲染双模式
许可 GPLv2
版本 2.2.16 (nightly)

核心技术点

Doom Legacy 血脉

  • 源自 Doom Legacy,保留 Doom 的渲染架构(BSP 树、分区渲染)
  • src/r_main.c/h — 渲染器主入口;src/r_bsp.c — BSP 树遍历;src/r_segs.c/r_plane.c — 线段/平面渲染
  • src/p_setup.c (~8.7K LOC) — 关卡设置;src/p_spec.c (~9K LOC) — 特殊事件处理
  • 继承了 Doom 的 WAD 资源打包格式(src/w_wad.c

双渲染器架构

  • 硬件渲染src/hardware/):OpenGL 1.x/2.x,支持 MD2/MD3 模型(hw_md2load.c/hw_md3load.c)、光照、阴影
  • 软件渲染src/sdl/):SDL2 2D 渲染,适合低配置
  • hw_batching.c — 硬件批次渲染;hw_shaders.c — GLSL Shader 管理

网络代码(独立子系统)

  • src/netcode/ 完整重写,包含专用服务器模式(src/dedicated/
  • d_clisrv.c/h — C/S 架构核心;i_tcp.c — TCP 传输层;d_netfil.c — 文件传输(地图/资产同步)
  • Master Server 支持(mserv.c),通过 HTTP 与主服务器通信(http-mserv.c
  • TicCommand 帧同步(tic_command.c/h
  • 支持最多 8 人局域网/互联网多人

Lua 脚本系统

  • src/deh_lua.c/h — Lua 5.1 集成(blua 子目录)
  • lua_baselib.c — 基础库;lua_mobjlib.c — 对象库;lua_maplib.c — 关卡库;lua_playerlib.c — 玩家库
  • lua_hudlib.c — HUD 绘制 API;lua_hooklib.c — 钩子系统
  • SOC(SONIC OCR)格式支持(deh_soc.c),允许社区扩展

DEHACKED 扩展

  • src/dehacked.c/h — Doom Extended DEHACKED 格式解析
  • src/deh_tables.c — 大量表驱动数据(怪物行为、物品属性等)
  • 支持 MODID 机制,联网时防止版本冲突

数学/物理系统

  • src/m_fixed.c/h — 定点数运算(Doom 传统)
  • src/m_vector.c/hsrc/matrix.c/h — 3D 向量和矩阵
  • src/quaternion.c/h — 四元数(支持 3D 旋转插值)
  • src/p_map.c — 对象碰撞检测;src/p_slopes.c — 斜面物理

关键子系统

  • src/info.c22K LOC,游戏对象(MOBJ)定义表,最大单一文件
  • src/p_mobj.c (~14.5K LOC) — 对象移动、状态机
  • src/p_user.c (~13.3K LOC) — 玩家输入/控制
  • src/p_enemy.c (~15K LOC) — AI 敌人行为
  • src/m_menu.c (~14.4K LOC) — 菜单系统
  • src/t_facon.c (~8.2K LOC) — 扇形(sector)角度计算

玩法特点

  • 3D 平台跳跃:索尼克宇宙的 3D 同人作,包含极速冲刺、环形跳跃、敌人战斗
  • 多人模式:支持 LAN/Internet 竞速和对抗
  • 关卡编辑器:内置关卡编辑,支持社区自制关卡
  • Sonic 宇宙元素:Sonic、Tails、Knuckles 等经典角色及能力
  • Boss 战:每个世界独特的 Boss 设计
  • 收集要素:混沌宝石、试炼令牌等

对公司 AI 游戏的参考价值

方向 启示
引擎继承策略 基于成熟开源引擎(Doom Legacy)二次开发,保留核心渲染/物理,快速构建新产品
双渲染器设计 硬件渲染追求画质,软件渲染保证兼容性,同时维护成本需权衡
Lua 脚本开放 游戏逻辑 Lua 化,使模组社区能扩展内容而不改核心代码
网络同步 TicCommand 帧同步方案适合需要精确物理同步的竞技游戏
DEHACKED 表驱动 大量游戏数据(怪物/道具/关卡)用表驱动而非硬编码,便于内容扩展
定点数数学 继承 Doom 的 fixed_t 定点数系统,保证跨平台 Deterministic 物理

项目结构概览

SRB2/
├── src/               # C 源码(252K LOC)
│   ├── netcode/       # 网络多人(含 dedicated/ 独立服务器)
│   ├── hardware/       # OpenGL 硬件渲染
│   ├── sdl/           # SDL2 软件渲染/平台抽象
│   ├── dedicated/     # 专用服务器入口
│   ├── lua_*.c        # Lua 脚本集成(10+ 文件)
│   ├── deh_*.c        # DEHACKED/SOC 解析
│   ├── p_*.c          # 物理/AI/关卡/玩家
│   ├── r_*.c          # 渲染管线
│   ├── m_*.c          # 菜单/数学/工具
│   └── g_game.c       # 游戏主循环(6K LOC)
├── libs/              # 第三方依赖(SDL2/curl/zlib/libopenmpt/miniupnpc)
├── assets/            # WAD 资产包
├── CMakeLists.txt     # CMake 构建
└── vcpkg.json        # vcpkg 依赖声明

相关页面