如何用 REFramework 做出你的第一个 RE 引擎游戏 mod?搞懂这 3 层架构就够
【免费下载链接】REFrameworkMod loader, scripting platform, and VR support for all RE Engine games项目地址: https://gitcode.com/GitHub_Trending/re/REFramework
REFramework 不是简单的 mod 加载器,而是一套完整的脚本平台和 VR 支持系统,覆盖全部 RE 引擎游戏。想改一款 RE 引擎游戏里的角色行为,却发现内存布局不透明、没有官方扩展点、硬编码地址一更新就失效——这个项目就是为此准备的。下面按层拆开它,再走一遍完整开发流程,最后做一个帧率显示 mod。
架构全景——REFramework 是怎么跑起来的
REFramework 本质是三层结构,底层 hook 层是地基:C++ 编写,核心逻辑在src/,接管游戏的 Direct3D 设备、窗口消息循环和输入。这些路径以每秒 60 帧的速度执行,多一毫秒都会有感,所以这里不存在脚本语言。
中间是脚本层,由src/mods/目录下的ScriptRunner.cpp挂载,完整的 Lua 5.4 运行时和标准库来自dependencies/lua/src/。你写的游戏行为逻辑跑在这一层,改行为不用重编译。
顶层是插件扩展层:PluginLoader.cpp扫描插件目录并加载 C++ 插件,框架自带的 20 多个模块(第一人称、自由摄像机、VR 等)和第三方插件走的是同一条通道。
C++ 与 Lua 的集成入口
extern lua_State* g_lua;插件从框架直接拿到全局 Lua 状态指针(见examples/example_plugin/Plugin.hpp),就能读写游戏对象、调用脚本函数,这是两种语言之间唯一的桥梁。
开发工作流:从想法到可运行的 mod
第一步是定位目标对象。开发者工具里的ObjectExplorer.cpp让你实时浏览游戏场景中的全部对象,ChainViewer.cpp展示对象之间的引用链,再配合RETypeDB.cpp的类型反射,就能查清某个对象有哪些字段,不用猜内存偏移。
C++ 与 Lua 的分工策略
定位之后先定分工:每帧的矩阵运算、内存读写这类性能敏感操作放 C++;游戏行为、参数配置、经常改动的逻辑放 Lua。两边分开,mod 才好维护。
D3D11 和 D3D12 双后端怎么适配
一个常见的坑是渲染后端:有的 RE 引擎游戏用 D3D11,有的用 D3D12,Graphics.cpp提供统一抽象接口。如果 mod 要直接操作渲染资源,参照src/mods/vr/下 D3D11、D3D12 两个 Component 实现处理。
Graph Editor 是可视化构建逻辑链的辅助工具,适合梳理复杂的对象关系:
起步模板直接复制examples/example_plugin/:Plugin.hpp声明插件类与g_lua,Plugin.cpp实现生命周期回调,自己的逻辑挂进去即可。
让 mod 活过游戏更新:健壮性设计
游戏一更新地址就变,挂掉的 mod 多半输在硬编码上。
特征码扫描 vs 硬编码地址
优先用特征码扫描。HookManager.cpp的 hook 系统按特征码定位函数,更新挪动函数后只要逻辑不变,mod 照常工作;只有在特征码确实写不出来时才退而求其次用固定地址,并在代码里留注释。
侵入式智能指针持有游戏对象
游戏 GC 随时可能回收对象,裸指针必崩。用shared/sdk/intrusive_ptr.hpp的侵入式指针持有对象,引用计数会自动阻止对象被提前回收。
多游戏支持:ReClass_Internal 文件体系
想让 mod 跑在多款游戏上,看shared/sdk/下的ReClass_Internal_*.hpp系列:RE2、RE3、DMC5、SF6 各自一份类型定义文件,这是框架区分各游戏差异的锚点,也是新增游戏支持的入口。
超越基础:逆向工具链与渲染管线
想做视觉特效 mod、修改最终渲染结果时,入口是BackBufferRenderer.cpp——它拦截游戏回缓冲输出,适合在游戏画面上叠加自己的内容。
类型反射信息不够、需要翻函数内部时,用reversing/下的工具链:rsz_dumper.py转储游戏资源文件,ida_namer/里的脚本给 IDA Pro 批量命名符号。
排查性能瓶颈看两处:Scene.cpp的场景管理定位帧内执行热点,MethodDatabase.cpp的调用统计告诉你哪个游戏函数被调用得最频繁。
动手:用 REFramework 做一个帧率显示 mod
- 复制
examples/example_plugin/作为骨架——官方模板,构建配置已验证 - 在
Plugin.cpp中加 ImGui 绘制代码——渲染集成已就绪,只需画文字 - 集成
QueryPerformanceCounter或 DirectX 计时器——自己测帧数,不依赖游戏自带计数器 - 通过
REFrameworkConfig暴露显示位置和样式——让用户可配置 - 分别在 D3D11 和 D3D12 的游戏里跑一遍——确认两种渲染后端都没问题
做完帧率显示,你已经过了一遍 REFramework 的核心链路:插件结构、渲染集成、配置系统、性能测量。下一步可以挑一个自己常玩的游戏加个小功能,或者把项目源码里没看懂的某个文件读透,这就是从使用者变成贡献者的路径。
【免费下载链接】REFrameworkMod loader, scripting platform, and VR support for all RE Engine games项目地址: https://gitcode.com/GitHub_Trending/re/REFramework
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考