news 2026/8/22 9:45:28

如何用 REFramework 做出你的第一个 RE 引擎游戏 mod?搞懂这 3 层架构就够

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 REFramework 做出你的第一个 RE 引擎游戏 mod?搞懂这 3 层架构就够

如何用 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_luaPlugin.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

  1. 复制examples/example_plugin/作为骨架——官方模板,构建配置已验证
  2. Plugin.cpp中加 ImGui 绘制代码——渲染集成已就绪,只需画文字
  3. 集成QueryPerformanceCounter或 DirectX 计时器——自己测帧数,不依赖游戏自带计数器
  4. 通过REFrameworkConfig暴露显示位置和样式——让用户可配置
  5. 分别在 D3D11 和 D3D12 的游戏里跑一遍——确认两种渲染后端都没问题

做完帧率显示,你已经过了一遍 REFramework 的核心链路:插件结构、渲染集成、配置系统、性能测量。下一步可以挑一个自己常玩的游戏加个小功能,或者把项目源码里没看懂的某个文件读透,这就是从使用者变成贡献者的路径。

【免费下载链接】REFrameworkMod loader, scripting platform, and VR support for all RE Engine games项目地址: https://gitcode.com/GitHub_Trending/re/REFramework

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 9:44:54

太阳黑子预测:物理约束驱动的时序建模方法

1. 这不是一道“算数题”,而是一场太阳活动周期的推演实验“2023认证杯A题:太阳黑子预测”——看到这个标题,很多刚接触数学建模的同学第一反应是:“又要调sklearn、跑LSTM、画个loss曲线交差?”但真正做过这道题的人会…

作者头像 李华
网站建设 2026/8/22 9:44:11

从克隆到即时生效:COM3D2 实时编辑器 Maid Fiddler 完整使用指南

从克隆到即时生效:COM3D2 实时编辑器 Maid Fiddler 完整使用指南 【免费下载链接】COM3D2.MaidFiddler Maid Fiddler for COM3D2 -- a real-time value editor for COM3D2 项目地址: https://gitcode.com/gh_mirrors/co/COM3D2.MaidFiddler 想培养的性格等得…

作者头像 李华
网站建设 2026/8/22 9:44:07

拉格朗日乘数法原理与Python实战:从KKT条件到资源优化调度

最近在项目开发中,经常遇到需要处理复杂约束条件下的最优解问题,尤其是在资源分配、路径规划等场景。传统的暴力搜索或简单贪心算法往往效率低下或无法找到满意解。这时,拉格朗日乘数法(Lagrange Multiplier Method)作…

作者头像 李华
网站建设 2026/8/22 9:40:54

Java面试进阶:从JVM到微服务的核心技术解析

1. 项目概述"互联网大厂Java面试:从Java SE到微服务的技术探险"这个标题精准概括了当前Java开发者职业发展路径中的关键节点。作为从业十余年的Java技术专家,我完整经历了从基础Java SE到分布式微服务架构的技术演进过程,也参与过数…

作者头像 李华
网站建设 2026/8/22 9:39:54

KKCE: 网站测速、TCPING、在线ping、DNS查询-快快测

一、引言:为什么域名解析时而正常、时而跳转到非法页面?在域名安全运维中,我们常以为只要权威 DNS 配置正确,递归服务器就能返回预期 IP。运维在本地用 nslookup 或 dig 查询,看到返回正确的 A 记录,便认为…

作者头像 李华
网站建设 2026/8/22 9:38:15

Flowable工作流引擎适配达梦数据库:从原理到实战的完整指南

1. 项目概述:当Flowable遇见达梦最近在几个国产化替代的项目里,我被问得最多的问题之一就是:“Flowable工作流引擎,能跑在达梦数据库上吗?” 这确实是个非常实际且迫切的需求。Flowable作为一款优秀的开源BPMN流程引擎…

作者头像 李华