Skip to content

Releases

v1.2.0

Choose a tag to compare

@MyresMkG MyresMkG released this 09 Oct 15:43
d4a175e

以后的发行版都会放到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
  1. 从本目录挑一个 DLL(推荐先试 dxgi.dll,详见v1.1.0的发行版说明);
  2. 复制到游戏根目录;
  3. 正常启动游戏(双击 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

Choose a tag to compare

@MyresMkG MyresMkG released this 29 Sep 05:50
b3d576c

这里是 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 会
优先加载它。它做两件事:

  1. 对游戏冒充那个系统 DLL:所有导出(含序号)都原样转发到
    C:\Windows\System32\ 里的真文件,游戏察觉不到区别;
  2. 加载 injected_mods:等游戏自己起来(加载器线程不再在挂接的一瞬间创建,
    而是等到游戏自己的 CRT 初始化完成),把
    injected_mods\*.dll 按文件名顺序逐个 LoadLibrary 进游戏进程 ——
    和注入器做的事完全一样,只是从进程内部做。

不需要运行 stellaris_mod_injector.exe,不修改游戏的任何文件。
注入器和它也不冲突:LoadLibrary 对已加载的模块直接返回旧句柄,DllMain 只跑一次。

v1.0.0

Choose a tag to compare

@MyresMkG MyresMkG released this 29 Sep 05:47
b3d576c

放在游戏根目录(和 stellaris.exe 同级)就能用:

Stellaris\
├── stellaris.exe
├── stellaris_mod_injector.exe          ← 本工具
└── injected_mods\            ← 把要注入的 DLL 都丢这里
    ├── diplo_action_hook.dll
    └── 其它任意 DLL

双击 stellaris_mod_injector.exe,它会:

  1. 用自己旁边的 stellaris.exe 启动游戏(不修改游戏的任何文件);
  2. 等 700 毫秒,让游戏进程自己把镜像初始化完;
  3. 把 injected_mods\*.dll 逐个注入进游戏进程(按文件名顺序,坏 DLL 跳过但会说明原因);
  4. 打印一行汇总,然后退出——游戏继续跑,注入的 DLL 留在里面。