MonoMod
General purpose .NET assembly modding "basework", powered by cecil.
MIT-licensed.
GitHub: All | NuGet: Patcher | NuGet: Utils | NuGet: RuntimeDetour | NuGet: HookGen |
---|---|---|---|---|
... or download fresh build artifacts for the last commit.
Sections
Introduction
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
,DynDll
and theModInterop
namespace. - 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.
Why?
- 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!
Special thanks to my patrons on Patreon:
- Chad Yates
- Sc2ad
- Raegous
- Chaser6
- Harrison Clarke
- KyleTheScientist
- Renaud Bédard
- leo60228
- Rubydragon
- Holly Magala
- Jimmy Londo (iamdadbod)
- Artus Elias Meyer-Toms