Repository navigation
Releases
Releases · MyresMkG/Stellaris-Mod-Injector
v1.2.0
以后的发行版都会放到N网:https://www.nexusmods.com/stellaris/mods/213
简单来说,本次更新修改了文件加载
注意:现版本所有非Stellaris-Mod-Injector的dll均需放到子目录,具体见下
安装
Stellaris\
├── stellaris.exe
├── dxgi.dll ← 从本目录复制一个过来(这里用 dxgi 举例)
└── injected_mods\ ← mod 文件夹放这里(没有就建一个)
├── diplo_action_hook\
│ └── diplo_action_hook.dll
└── my_mod\
└── 其它任意针对群星的 x64 DLL
- 从本目录挑一个 DLL(推荐先试
dxgi.dll,详见v1.1.0的发行版说明); - 复制到游戏根目录;
- 正常启动游戏(双击
stellaris.exe,或从启动器/快捷方式启动都行)。
新特性:禁用单个 DLL(dllnoinject)
在不想加载的 DLL 同目录创建一个空文件,名称为 DLL 的完整文件名加上 noinject:
injected_mods\my_mod\xxx.dll
injected_mods\my_mod\xxx.dllnoinject
加载器会在打开和检查 xxx.dll 之前跳过它,也不会为它创建或删除 probe 标记。
标记内容不限,只影响同目录同名 DLL;名为 xxx.dllnoinject 的目录不算标记。
日志 injected_mods\stellaris_mod_injector.log 会记录:
[skip] xxx.dll: disabled by xxx.dllnoinject
删除标记后,下次启动恢复加载。此标记不会卸载已经加载的 DLL,也不能阻止其他
模块自行加载它。扫描仅覆盖 injected_mods 的一层子目录,根目录和更深目录仍不扫描。
v1.1.0
这里是 stellaris_mod_injector.exe 的代理 DLL 版,一共五种:
| 文件 | 顶替的系统 DLL | 游戏用它做什么 |
|---|---|---|
dxgi.dll |
显示/DXGI 工厂 | 建 DXGI 工厂 |
d3d11.dll |
Direct3D 11 | 建设备 |
d3dcompiler_47.dll |
DirectX 着色器编译器 | 编译 HLSL(第 4 个导入) |
version.dll |
文件版本信息 | 读 exe 版本号 |
winmm.dll |
多媒体/计时器 | 手柄与计时器(SDL 也用) |
随便挑一个放进游戏根目录(和 stellaris.exe 同级),游戏启动时 Windows 会
优先加载它。它做两件事:
- 对游戏冒充那个系统 DLL:所有导出(含序号)都原样转发到
C:\Windows\System32\里的真文件,游戏察觉不到区别; - 加载
injected_mods:等游戏自己起来(加载器线程不再在挂接的一瞬间创建,
而是等到游戏自己的 CRT 初始化完成),把
injected_mods\*.dll按文件名顺序逐个LoadLibrary进游戏进程 ——
和注入器做的事完全一样,只是从进程内部做。
不需要运行
stellaris_mod_injector.exe,不修改游戏的任何文件。
注入器和它也不冲突:LoadLibrary对已加载的模块直接返回旧句柄,DllMain 只跑一次。
v1.0.0
放在游戏根目录(和 stellaris.exe 同级)就能用:
Stellaris\
├── stellaris.exe
├── stellaris_mod_injector.exe ← 本工具
└── injected_mods\ ← 把要注入的 DLL 都丢这里
├── diplo_action_hook.dll
└── 其它任意 DLL
双击 stellaris_mod_injector.exe,它会:
- 用自己旁边的
stellaris.exe启动游戏(不修改游戏的任何文件); - 等 700 毫秒,让游戏进程自己把镜像初始化完;
- 把
injected_mods\*.dll逐个注入进游戏进程(按文件名顺序,坏 DLL 跳过但会说明原因); - 打印一行汇总,然后退出——游戏继续跑,注入的 DLL 留在里面。