General purpose .NET assembly modding "basework", powered by cecil.
MIT-licensed.
| NuGet: Utils | NuGet: RuntimeDetour | NuGet: HookGen |
|--|--|--|--|--|
| |
|
|
|
|
|
|
... or download fresh build artifacts for the last commit.
MonoMod is a modding "basework" (base tools + framework).
Mods / mod loaders for the following games are already using it in one way or another:
- Terraria: tModLoader, TerrariaHooks
- Hollow Knight: HollowKnight.Modding
- Celeste: Everest
- Risk of Rain 2: BepInExPack (BepInEx + MonoMod + R2API)
- Enter the Gungeon: Mod the Gungeon
- Rain World: RainDB via BepInEx
- Totally Accurate Battle Simulator: TABS-Multiplayer
- Salt and Sanctuary: Salt.Modding
- Nimbatus: Nimbatus-Mods via Partiality
- Dungeon of the Endless: DungeonOfTheEndless-Mod via Partiality
- FEZ: FEZMod (defunct)
- And many more! Ping me on Discord if your mod uses MonoMod!
It consists of the following modular components:
- MonoMod.Patcher: The ahead-of-time MonoMod patcher and relinker.
- MonoMod.Utils: Utilities and helpers that not only benefit MonoMod, but also mods in general.
It contains classes such as
PlatformDetection,FastReflectionHelper,DynamicMethodHelper,DynamicMethodDefinition,DynDlland theModInteropnamespace. - MonoMod.DebugIL: Enable IL-level debugging of third-party assemblies in Visual Studio / MonoDevelop.
- MonoMod.Core: The core upon which runtime method detouring is built.
- MonoMod.RuntimeDetour: A flexible and easily extensible runtime detouring library, supporting x86/x86_64 on .NET Framework, .NET Core, and Mono.
- MonoMod.RuntimeDetour.HookGen: A utility to generate a "hook helper .dll" for any IL assembly. This allows you to hook methods in runtime mods as if they were events. Built with MonoMod and RuntimeDetour.
- MonoMod.Backports: A collection of BCL backports, enabling the use of many new language and library features, as far back as .NET Framework 3.5.
- Cross-version compatibility, even with obfuscated assemblies.
- Cross-platform compatibility, even if the game uses another engine (f.e. Celeste uses XNA on Windows, FNA on macOS and Linux).
- Use language features which otherwise wouldn't be supported (f.e. C# 7 in Unity 4.3).
- Patch on the player's machine with a basic mod installer. No need to pre-patch, no redistribution of game data, no copyright violations.
- With HookGen, runtime hooks are as simple as
On.Namespace.Type.Method += (orig, a, b, c) => { /* ... */ } - With HookGen IL, you can manipulate IL at runtime and even inline C# delegate calls between instructions.
- Modularity allows you to mix and match. Use only what you need!