0bbda38a6e74c34209615195427c1bfbc0ee199d8eaa1ff821cadbe7b3a93894
27dae9b619c182acd7a8df750ad78b5389e7868fbd88e025d35b7754f89ff381
dinput8.dll next to the game's .exeMods/ folder in the game root — two levels up from Binaries/Win64/Mods/MyGame/Binaries/Win64/dinput8.dllMyGame/Mods/ExampleMod/mod.toml
Three things, done in memory, at runtime.
Ships as dinput8.dll. Windows loads it in place of the system library and every call is forwarded once setup finishes.
Overrides are intercepted at Preload time. Nothing in the game's shipped package files is ever modified on disk.
A mod.toml, a few binary export overrides, an optional main.lua. Drop it in and the loader finds it at startup.
The loader gives your mod a way to run, not just a way to replace bytes.
An embedded Lua 5.4 VM with a ue3 table — load objects, intern names, run console commands, rewrite localization, all from main.lua.
Launch with -cu3ml-manager for a window that opens before the engine does. Toggle mods and loader settings, then hit launch.
Not limited to replacing what's already there — a mod can append entirely new exports to a package's export map at load time.
No engine SDK, no repacking pipeline, no waiting for a modding toolkit that never ships.
No hardcoded offsets, no per-title support list. The loader disassembles the game to find the engine's layout the first time it runs.
Everything it works out is cached against that exact executable, so only the first launch pays for it. Patch the game and it re-scans itself.
Delete the DLL, delete the Mods folder, and the game is exactly like it was. Nothing gets baked into your install.
Runtime disassembly, hook internals, the mod manifest format, the full Lua API — it's all written up.
Built solo, in spare time. If CU3ML saved you a repacking headache, a coffee goes a long way.
Built solo, in spare time. Keeping an open-source project alive while dealing with life's challenges and mental health struggles is not always easy. If CU3ML saved you a repacking headache, a coffee goes a long way.