


A BepInEx patcher that removes incompatibility restrictions from RtD mods, allowing them to work alongside other popular Valheim mods.
This patcher removes [BepInIncompatibility] attributes from RtD mods, enabling you to use them together with mods that were previously blocked. The mods themselves work fine together - this simply removes the restrictions.
IMPORTANT: This is a PATCHER, not a regular plugin!
NoArbitraryIncompatibilityFlag.dllBepInEx/patchers/ folder (NOT plugins!)The patcher runs during BepInEx's preloader phase and uses Harmony to patch .NET runtime methods:
PluginInfo.Incompatibilities property getter to return empty array for RtD modsDictionary.ContainsKey to hide our GUID when RtD mods check for usAssembly.GetName() to return a fake name when RtD mods scan loaded assembliesAll modifications are in-memory only and temporary. No files are ever modified on disk.
On launch, you'll see:
✓ Ready to bypass incompatibility checks for RtD mods
✓ Ready to hide from RtD mod detection
✓ Ready to hide assembly name from RtD mod detection
✓ Found RtD mod: RtDOcean
✓ Successfully bypassed incompatibility checks for 1 RtD mod(s)
RtD mods added three detection checks in their Awake() method:
IL Bytecode Integrity Check: Verifies their "Block" method hasn't been modified
MethodInfo method = typeof(RtDMod).GetMethod("Block", ...);
byte[] ilAsByteArray = method?.GetMethodBody()?.GetILAsByteArray();
if (method == null || ilAsByteArray == null || ilAsByteArray.Length <= 2)
Fail();
PluginInfo Dictionary Check: Looks for our GUID in BepInEx's plugin registry
if (Chainloader.PluginInfos.ContainsKey("IAmOnTheInternetAndItIsScary.NoArbitraryIncompatibilityFlag"))
Fail();
Assembly Name Scan: Searches all loaded assemblies for our name
if (AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name.Contains("NoArbitraryIncompatibilityFlag")))
Fail();
The patcher uses Harmony to patch .NET runtime methods at the lowest level:
Incompatibility Bypass: Patch PluginInfo.Incompatibilities getter to return empty array for RtD mods
ContainsKey Stealth: Patch Dictionary<string, PluginInfo>.ContainsKey to return false when RtD mods check for our GUID
Assembly Name Hiding: Patch Assembly.GetName() to return fake name when RtD mods scan assemblies
IL Check Passes Automatically: We don't modify RtD mod code at all, so their bytecode integrity check passes naturally
Q: Is this safe?
A: Yes. The patcher only removes compatibility restrictions. The mods function normally, they just don't block other mods anymore.
Q: Will this break my game?
A: No. If you encounter any issues, they would be unrelated to this patcher. You can always remove the patcher to restore original behavior.
Q: Do I need to reinstall after RtD mod updates?
A: No. The patcher runs on every launch and automatically handles any RtD mod version.
Q: Can I upgrade from an older version of this patcher?
A: Yes. Just replace the old DLL with the new one in the patchers folder.
Q: Will this work with old versions of RtD mods?
A: Yes. The patcher works with all current RtD mod versions.
Q: What if I want to stop using this patcher?
A: Simply remove the DLL from the patchers folder. RtD mods will return to their original behavior.