murder-mod-install
0.1.11
dotnet tool install --global murder-mod-install --version 0.1.11
dotnet new tool-manifest
dotnet tool install --local murder-mod-install --version 0.1.11
#tool dotnet:?package=murder-mod-install&version=0.1.11
nuke :add-package murder-mod-install --version 0.1.11
murder-mod-loader
Mod loader for Murder Engine games. Uses Harmony for runtime method patching.
Requirements
- murder-unpack (
uv tool install murder-unpack) - .NET 8 SDK matching the game's architecture (x64 game needs x64 SDK)
Installation
Install the tools
# Install murder-unpack (bundle extraction)
uv tool install murder-unpack
# Install the mod loader installer
dotnet tool install -g murder-mod-install
Install into a game
# Auto-detects SDK, extracts bundle, sets up mod loader
murder-mod-install "/path/to/game"
# macOS .app bundles are also supported
murder-mod-install "/path/to/Game.app"
# Specify .NET SDK path manually if needed
murder-mod-install "/path/to/game" "/path/to/dotnet-sdk-8.0"
Launch
/path/to/game/launch-modded.sh # Linux / macOS
/path/to/game/launch-modded.bat # Windows
Steam Proton / Wine (Linux playing Windows-only games)
Some Murder Engine games only ship a Windows build. The mod loader supports these via Proton by using a Windows .NET 8 runtime to run the extracted bundle inside Wine.
Download the Windows x64 .NET 8 runtime (zip) from Microsoft and extract it.
Install the mod loader (auto-detects Proton when it finds a
.exegame):murder-mod-install "/path/to/game" "/path/to/dotnet-runtime-win-x64"Set Steam launch options (right-click game > Properties > Launch Options):
./launch-modded.sh %command%
Installing Mods
# From NuGet
murder-mod-install add nuget:MyMod "/path/to/game"
murder-mod-install add nuget:MyMod@1.0.0 "/path/to/game"
# From a git repository
murder-mod-install add git:https://github.com/user/my-mod "/path/to/game"
# From a zip URL (e.g., GitHub release)
murder-mod-install add https://github.com/user/my-mod/releases/download/v1.0/my-mod-windows.zip "/path/to/game"
# From a local zip file
murder-mod-install add ./my-mod.zip "/path/to/game"
Git sources are built automatically if the repository contains a .csproj.
Disabling a mod
Place a .disabled file in the mod's directory, or set Enabled: false in mod.yaml.
Creating a Mod
Create a directory with mod.yaml and a C# project:
# mod.yaml
Id: my-mod
Name: My Mod
Version: 1.0.0
DLL: MyMod.dll
using HarmonyLib;
using MurderModLoader.API;
public class MyMod : IMurderMod
{
private Harmony? _harmony;
public void OnLoad(ModContext context)
{
_harmony = new Harmony(context.HarmonyId);
_harmony.PatchAll(context.ModAssembly);
}
public void OnUnload() => _harmony?.UnpatchAll(_harmony.Id);
}
Reference the mod API in your .csproj:
<PackageReference Include="MurderModLoader.API" Version="0.1.*" />
For game type references (Murder, Bang, FNA), set GameAssemblyPath in your .csproj to the game's .modded/ directory, or let the build command handle it.
Build and install from source
murder-mod-install build <mod-dir> <game-dir>
Publishing a mod
Mods can be distributed as:
- NuGet package -- include
mod.yamland DLLs in a NuGet package - Git repository -- include
mod.yamland either source (.csproj) or pre-built DLLs - Zip file -- zip the mod folder containing
mod.yamland DLLs
Building from Source
git clone https://github.com/yuna0x0/murder-mod-loader.git
cd murder-mod-loader
dotnet build
# Run the installer directly from source
dotnet run --project src/MurderModLoader.Installer -- <game-dir>
dotnet run --project src/MurderModLoader.Installer -- build <mod-dir> <game-dir>
dotnet run --project src/MurderModLoader.Installer -- add <source> <game-dir>
Limitations
- SingleFileBundle only -- NativeAOT games can't be patched at runtime
- Architecture match -- the .NET SDK must match the game (x64 game needs x64 SDK)
AI Disclosure
AI was used to assist in the creation of some of this tool's base code.
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.