如何把 ASI 插件加载进任意游戏:Ultimate ASI Loader 配置与使用
【免费下载链接】Ultimate-ASI-LoaderThe Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process.项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate-ASI-Loader
MOD 作者让你往游戏目录里放 .asi 文件时,游戏本身并不知道怎么加载这个扩展名。Ultimate ASI Loader 是一个代理 DLL,它进入游戏进程后会接管 .asi 插件的扫描和加载,你只需把它放进游戏目录,之后每个插件都会随游戏启动自动生效。全程不改游戏原始文件。
选一个 DLL 名字,放进游戏目录
发布包提供 Win32 和 x64 两套代理 DLL,文件名对应游戏会调用的系统库:d3d9.dll、d3d11.dll、dxgi.dll、dinput8.dll、dsound.dll、version.dll、winmm.dll、wininet.dll、xinput1_3.dll 等。默认用 dinput8.dll 即可;如果游戏不调用它,就把 DLL 重命名成上表中的其它名字再放。
两个容易踩的细节:
- 代理替换了游戏原有 DLL 时,把原 DLL 重命名为
<原文件名>Hooked.dll,例如 d3d12Hooked.dll,再放入代理; - binkw32.dll 和 vorbisFile.dll 两种情况都可以,但替换前务必备份原文件。
想自己编译的话,先克隆仓库:
git clone https://gitcode.com/gh_mirrors/ul/Ultimate-ASI-Loader仓库内 premake5.exe 生成 Visual Studio 解决方案(需 VS 2022),release.bat 会把编译出的 dinput8.dll 打包成 zip。当前仓库最新 tag 为 v9.7.2。
把 .asi 放进正确目录
加载器默认扫描四处:游戏根目录,以及 scripts、plugins、update 三个文件夹。推荐把插件统一放在 scripts 下:
游戏目录\ dinput8.dll ← 重命名后的加载器 scripts\某插件.asi ← 放这里 plugins\ update\不想扫根目录时在 ini 里设LoadFromScriptsOnly=1,不想递归扫描子目录时设LoadRecursively=0。
用 global.ini 控制加载行为
global.ini 放在 scripts 或 plugins 文件夹即可;想只对某个代理名生效,可以用 DLL 名作文件名,例如 version.dll 对应 version.dll\version.ini。最小可用版本:
[GlobalSets] UseD3D8to9=0 [FileLoader] OverloadFromFolder=update常用开关两个:
UseD3D8to9=1启用内置的 d3d8to9 转换层,给依赖 DirectX 8 的老 MOD 用,且加载器必须改名为 d3d8.dll 才生效;DisableCrashDumps=1关闭崩溃转储。默认情况下,你在 DLL 所在目录建一个 CrashDumps 文件夹,游戏崩溃时加载器会自动写入 minidump 和日志,方便定位问题。
用 update 文件夹替换游戏文件
OverloadFromFolder 功能让加载器在游戏请求文件时改从替换目录读取,原文件一个都不用动。比如某 MOD 要替换nativePC_MT\Image\Archive\ChapterEnd11.arc,就把替换文件按同样子路径放进 update 文件夹:update\nativePC_MT\Image\Archive\ChapterEnd11.arc。想还原游戏,删掉 update 文件夹即可。
注意 update 是相对加载器 DLL 的位置,DLL 放在子目录里时子路径要跟着调整。从 7.9.0 起可以指定多个文件夹,游戏启动时弹出选择框:
[FileLoader] OverloadFromFolder=update | nightmare文件夹里再放一个 update.txt、写一行自定义名字,就会显示在弹窗标题中。
用示例插件验证加载链路
发布包带有 MessageBox 演示插件:解压后放进 scripts,游戏启动时弹出 "ASI Loader works correctly." 对话框,说明代理 DLL、扫描、加载整条链路都通了。以后排查"插件没生效"时,先跑一次这个对照实验,再谈具体插件的问题。
仓库里另有几个可参考的插件源码:RE7Demo.InfiniteAmmo(给演示版游戏加功能)、MonoLoader(加载 .NET 插件)、VirtualFileServer(配合虚拟文件测试)。
查问题:不生效、崩溃、UWP 游戏
- 放进去没反应:先确认游戏实际调用哪个库,换 d3d9.dll、d3d11.dll、dxgi.dll 等名字逐个试;
- 启动即崩:建好 CrashDumps 文件夹拿 dump,再逐个移出插件做二分定位;
- 32 位游戏窗口化异常:在加载器目录建一个空的 wndmode.ini,首次运行会自动填入示例配置,内置 wndmode 仅 x86 版支持;
- UWP 版游戏:需要先用 UWPDumper 把游戏文件 dump 出来,注册表文件重命名后才能按普通游戏流程放插件,步骤较长,参考仓库 readme 的 Using with UWP games 一节。
进阶:写自己的 ASI 插件
ASI 本质是一个实现了 DllMain 的 DLL。仓库里的 MessageBox 示例只有十几行,在 DLL_PROCESS_ATTACH 时执行逻辑。插件内部可以通过IsModuleUAL判断进程里有没有加载器,用GetOverloadPathA/GetOverloadPathW导出函数拿到当前的替换目录路径。
动手前建议先看 tests/ 下的五组测试场景(普通加载、文件夹替换、虚拟文件、zip 文件、虚拟路径)和 source/demo_plugins/ 的四个示例插件,它们覆盖了加载器对外提供的主要行为。
【免费下载链接】Ultimate-ASI-LoaderThe Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process.项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate-ASI-Loader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考