尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何用 REFramework 改写 RE 引擎游戏的运行逻辑

如何用 REFramework 改写 RE 引擎游戏的运行逻辑 如何用 REFramework 改写 RE 引擎游戏的运行逻辑【免费下载链接】REFrameworkMod loader, scripting platform, and VR support for all RE Engine games项目地址: https://gitcode.com/GitHub_Trending/re/REFramework给《生化危机2》加一个自由视角 mod按 F8 从第三人称切换到可任意平移旋转的相机松键还原视角不再受模型穿模限制。这是 REFramework 最典型的 mod 需求。REFramework 是面向所有 RE 引擎游戏的 mod 加载器、Lua 脚本平台与 VR 支持框架覆盖 RE2 到 RE9、鬼泣 5、怪物猎人崛起、街头霸王 6 等注入 dinput8.dll 进游戏进程用 D3D11/D3D12 hook 接管渲染帧在 Present 回调里驱动 Lua 脚本、ImGui UI 和游戏类型反射。一、先搞清楚REFramework 在 RE 引擎里卡在哪一层REFramework 以 dinput8.dll 形式注入游戏进程靠 D3D11/D3D12 hook 拿到每帧渲染回调脚本执行、UI 绘制、对象反射全部挂在这条渲染回调链上。也就是说它不替换引擎而是在引擎的每帧渲染和输入两个节点上做拦截与扩展hook 层负责函数包装脚本层负责逻辑变更渲染层负责画 UI 与特效类型反射层负责跨游戏版本读对象内存布局。打开项目先看src/Mod.hpp每个功能模块都继承Mod基类实现on_frame()、on_draw_ui()、on_present()等生命周期方法再在src/Mods.cpp的构造函数里注册。渲染层看src/D3D11Hook.cpp、src/D3D12Hook.cpp和src/mods/BackBufferRenderer.cpp脚本层在src/mods/ScriptRunner.cpp游戏对象的类型定义集中在shared/sdk/REType、REManagedObject和每个游戏一份的ReClass_Internal_*.hpp都在这里。二、跟着一个真实需求走REFramework 插件开发一个 FreeCam目标给 RE2 加一个自由视角。按四步走每步都有明确的代码入口。1. 定位目标对象为什么写代码前先确认改谁。开开发者模式用src/mods/tools/ObjectExplorer.cpp的 ObjectExplorer 工具浏览场景里的 GameObject、Transform、Component确认相机挂点与玩家对象及其 REType。2. 理解类型与内存布局为什么不硬编码地址才能跨版本存活。shared/sdk/REType.cpp的REType提供运行时反射字段偏移和成员列表来自游戏自身类型数据库按类型名查对象比写死偏移安全得多。3. 写 hook 或脚本为什么hook 改引擎行为Lua 改玩法逻辑。C 侧用shared/sdk/下的FunctionHook包装目标函数前置后置逻辑各写各的脚本侧在插件里声明 Lua 环境句柄extern lua_State* g_lua;REFramework 的 Lua 脚本系统与 C 共享这份状态脚本里改的值下一帧 C 代码就能读到。4. 接入渲染为什么视角开关得有个 UI。src/mods/FreeCam.cpp的on_draw_ui()用 ImGui 画控制面板BackBufferRenderer负责把 UI 画到游戏后缓冲区D3D11 与 D3D12 后端都走Mods统一的帧回调。这张节点编辑器截图展示的是 Graph Editor 的节点与连线机制每个节点是一块逻辑右侧端口是输入输出连线即数据流。REFramework 的 ChainViewer 工具用同一套机制把游戏对象关系画成图理解节点 逻辑单元、端口 依赖之后看对象关系链就不会迷路。5. 跑通编译插件 dll 放进游戏目录的 mods 下src/mods/PluginLoader.cpp会扫描并加载生命周期由Mods的帧回调统一调度。三、你大概率会踩的坑REFramework 排错速查游戏更新后 hook 全部失效→ 大版本更新后特征码pattern变了函数位置移动 → 在src/HookManager.cpp与src/mods/MethodDatabase.cpp里重新核对特征码而不是改硬编码地址。overlay 或 UI 完全不出现→ 游戏当前用的是 D3D11 还是 D3D12 后端两个后端的 hook 入口不同 → 对照src/D3D11Hook.cpp/src/D3D12Hook.cpp确认注入的 dll 与游戏实际渲染后端匹配不匹配时整个框架不会初始化。访问对象时崩溃、指针指向旧数据→ 悬垂指针对象已被游戏 GC 释放你却跨帧缓存了裸指针 → 看shared/sdk/intrusive_ptr.hpp的侵入式智能指针用法REFramework 管理游戏对象引用计数靠它。跨游戏行为不一致→ 不同 RE 引擎版本类型定义漂移RE2 与 RE9 的字段偏移完全不同 → 先确认目标游戏对应哪份shared/sdk/ReClass_Internal_*.hppLua 脚本里的字段名也要对应目标游戏类型。四、从使用者到贡献者下一步往哪走逆向工具链想看懂游戏数据格式与类型 dump从reversing/scripts/下的 rsz_dumper.py 和 IDA Pro 命名脚本入手。渲染管线扩展从src/mods/BackBufferRenderer.cpp入手学习拦截 Present 并绘制 UI 的机制是做任何屏幕特效 mod 的前置。为新游戏添加支持看shared/sdk/下的ReClass_Internal_*.hpp系列每个游戏一份定制类型定义照着一份抄结构即可。跑通 FreeCam 之后你手里有了一条完整链路定位对象、读类型布局、包 hook、画 UI、加载插件。这套流程在 REFramework 支持的每款 RE 引擎游戏上都能复用。clone 仓库 https://gitcode.com/GitHub_Trending/re/REFramework编译examples/example_plugin/把 dll 放进游戏目录加载改第一行自己的逻辑。【免费下载链接】REFrameworkMod loader, scripting platform, and VR support for all RE Engine games项目地址: https://gitcode.com/GitHub_Trending/re/REFramework创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表