概述
Kenshi 的 MOD 系统在不变更 MOD 列表时,每次新开游戏会产生相同的随机结果(如 NPC 位置、物品掉落等)。本工具通过 DLL 注入替换游戏运行时的随机数种子,以实现每次开档的随机差异化。
实现方式
参考 RE_Kenshi FixRNG 的实现策略,通过 Hook MSVCR100 运行时库与游戏内函数来实现种子替换:
| Hook 目标 | 说明 |
|---|---|
srand | MSVCR100 种子替换(时间戳或自定义值) |
rand | TLS 切换真随机 / 确定性模式 |
randomInt | Building::selectParts +0x113,整数随机 |
random (float) | Building::selectParts +0x26D,浮点随机 |
getFoliageRotation | RVA 0x6CB8A0,植被旋转随机 |
上述 5 个 Hook 均基于逆向工程得到的固定偏移地址实现。
验证方式
- 日志中出现
"Full RNG fix active (RE-style)"表明全部 Hook 生效 - 多次新开档后对比 NPC 位置与物品掉落可验证随机化效果
- 启用
use_custom_seed可在相同种子下复现一致的随机结果
局限
本工具的 Hook 依赖于特定游戏版本的内存偏移,游戏更新后可能需要重新适配偏移地址。