Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
NoArbitraryIncompatibilityFlag
Removes fake incompatibility flags from RtD mods. Turns out they were never incompatible - who knew? 🤷
| Date uploaded | 3 months ago |
| Version | 1.0.4 |
| Download link | IAmOnTheInternetAndItIsScary-NoArbitraryIncompatibilityFlag-1.0.4.zip |
| Downloads | 66 |
| Dependency string | IAmOnTheInternetAndItIsScary-NoArbitraryIncompatibilityFlag-1.0.4 |
README
NoArbitraryIncompatibilityFlag
Because Gatekeeping is So Last Era 🚫🔒
Ever wanted to use RtD mods with your favorite other mods, but got hit with an "incompatible" error? Yeah, about that... those incompatibility flags were completely arbitrary. This patcher fixes that nonsense.
What Does It Do?
This BepInEx patcher strips the arbitrary [BepInIncompatibility] attributes from ALL RtD mods, allowing them to peacefully coexist with mods they were never actually incompatible with in the first place.
Affected RtD Mods:
- RtDOcean
- RtDVines
- RtDMonsters
- RtDSouls & RtDSouls_Addon
- RtDBiomes
- RtDMonstrum
- RtDDungeons
- RtDFairyTale
- RtDGardening
- RtDHorrors
- RtDItems
- RtDMagic
Previously "Incompatible" Mods (Now Free!):
- CookieMilk.MagicalMounts
- CookieMilk.MajesticChickens
- CookieMilk.BuildPieces
- CookieMilk.CarryMeMaster
- CookieMilk.DiscordControl
- CookieMilk.UltimateServerControl
- Therzie.MonstrumDeepNorth
- Therzie.WarfareFireAndIce
- Therzie.Monstrum
- Therzie.Armory
- Therzie.Wizardry
- Therzie.Warfare
- blacks7ar.MagicPlugin
- blacks7ar.MagicRevamp
- blacks7ar.SeedBed
- blacks7ar.OreMines
- blacks7ar.BowPlugin
- randyknapp.mods.epicloot
Installation
IMPORTANT: This is a PATCHER, not a regular plugin!
- Download
NoArbitraryIncompatibilityFlag.dll - Place it in
BepInEx/patchers/folder (NOT plugins!) - Launch the game
- Enjoy your newfound freedom! 🎉
How It Works
The patcher runs during BepInEx's preloader phase (before plugins are loaded) and uses Mono.Cecil to:
- Strip the incompatibility attributes from RtD mod DLLs
- Neutralize the
Block()method that tries to disable the mod - Rebuild the
Awake()method to remove detection code while keeping initialization
On first launch with a new RtD mod, you'll see something like:
✓ Rebuilt Awake() with X initialization methods (detection removed)
✓ Patching RtD[ModName].dll...
✓ Removed 19 incompatibility flag(s)
✓ Neutralized Block() method
🎉 Removed 19 arbitrary incompatibility flags from 1 RtD mod(s)!
Freedom restored! Your mods can now play nice together. 🤝
On subsequent launches (if already patched):
Patching RtDOcean.dll...
✓ All 1 RtD mod(s) already patched. No arbitrary flags here! 😎
FAQ
Q: Is this safe?
A: Yep! It only removes the incompatibility attributes. The mods work exactly the same, they just don't block other mods anymore.
Q: Will this break my game?
A: Nope! The mods were never actually incompatible - the flags were arbitrary. If you do encounter issues, they're unrelated to this patcher.
Q: Do I need to reinstall after RtD mod updates?
A: Nope! The patcher runs on every launch and automatically patches any new or updated RtD mods.
Q: Can I upgrade from an older version of this patcher?
A: Yes! Just replace the old DLL with the new one. The patcher will automatically re-patch your RtD mods with the latest techniques. It's smart enough to detect what needs patching and skip what's already done.
Q: Will this work with old versions of RtD mods?
A: Yep! The patcher adapts to whatever version you have. Old RtD mods (without detection code) just get their incompatibility flags removed. New RtD mods (with detection code) get the full treatment. Mix and match as you like!
Q: What if I want to restore the original DLLs?
A: Just remove this patcher from the patchers folder and reinstall the RtD mods.
Q: Why were they marked incompatible in the first place?
A: ¯\(ツ)/¯ Your guess is as good as mine.
Q: Wait, did the mod author add an incompatibility flag for THIS patcher?
A: LOL yes! All RtD mods now have [BepInIncompatibility("IAmOnTheInternetAndItIsScary.NoArbitraryIncompatibilityFlag")]. It's like trying to ban the ban-remover. Spoiler: it doesn't work because this patcher runs BEFORE BepInEx checks incompatibilities and strips that flag too. Inception! 🎭
Q: Can't they just check if this patcher is loaded and force quit?
A: They tried! Multiple times! First they added Block() calls, which we neutralized. Then the detection code would still exit Awake() early, preventing initialization. So now we completely REBUILD the Awake() method - we scan for all the legitimate initialization methods, throw away the detection code, and reconstruct a clean Awake() that just does its job. It's like renovating a house and removing all the booby traps! 🏗️
The Ongoing Saga 🍿
This has become a bit of a cat-and-mouse game:
- RtD mods block popular mods for no technical reason
- This patcher removes those blocks
- RtD author adds incompatibility flag for this patcher
- This patcher removes that too (because it runs first)
- RtD author adds runtime detection code that calls
Block()to disable the mod - This patcher REBUILDS the entire Awake() method, removing all detection code and keeping only initialization
- ???
We're just here to let mods coexist peacefully. The patcher completely reconstructs the Awake() method to remove all detection logic while preserving all legitimate initialization code. It's like performing surgery and rebuilding the patient better than before! 🏥✨
Version
1.0.4
Credits
Made by someone who thinks mods should play nice together.
License
Do whatever you want with it. Share it, modify it, upload it to the moon. I don't care. Just let people enjoy their mods in peace.
Need a Universal Solution?
If you need to remove incompatibility flags from mods OTHER than RtD mods, there's a universal patcher available:
UniversalIncompatibilityPatcher: https://thunderstore.io/c/valheim/p/IAmOnTheInternetAndNotScared/UniversalIncompatibilityPatcher/
Note: This universal patcher is NOT made by me (IAmOnTheInternetAndItIsScary). The similar username appears to be someone trolling or making a parody. I have no affiliation with that mod. However, if it works for your needs, feel free to use it!
This patcher (NoArbitraryIncompatibilityFlag) is specifically designed for RtD mods and is the original solution.
CHANGELOG
Changelog
[1.1.2] - 2026-06-18
Changed
- Added support for two newly released RtD mods: RtDLegends and RtDMythics
- Expanded the target list to 15 RtD mods
- Both the GUID detection set and the patched DLL list now cover the new mods
[1.1.1] - 2026-04-06
Changed
- Updated FAQ to address false claims about patcher causing bugs or performance issues
- Clarified that blocked mods work perfectly with RtD mods
- Documentation improvements
[1.1.0] - 2026-04-06
Changed
- Package structure updated for automatic installation with mod managers
- DLL now included in
patchers/folder within the zip file - Mod managers will now automatically place the patcher in the correct
BepInEx/patchers/directory - No more manual file moving required when using mod managers
[1.0.9] - 2026-04-06
Changed
- Implemented dual-layer defense combining Cecil IL patching with Harmony runtime patches
- Cecil layer strips incompatibility attributes and neuters detection code before any plugin loads
- Harmony layer provides fallback protection for runtime detection attempts
Technical Details
This version uses a two-layer defense strategy:
Layer 1: Cecil IL Patching (runs before any code loads)
- Strips all
[BepInIncompatibility]attributes from RtD mod types - Neuters the
Fail()method by replacing its body with justret - Removes throw statements from static constructor integrity checks
- NOPs all
Fail()calls inAwake()method
Layer 2: Harmony Runtime Patches (fallback protection)
- Patches
PluginInfo.Incompatibilitiesgetter to return empty array - Patches
Dictionary.ContainsKeyto hide our GUID - Patches
Assembly.GetName()to return fake name - Patches
AppDomain.GetAssemblies()to filter out our assembly with recursion guard
The Cecil layer handles the heavy lifting by modifying IL before execution. Even if RtD mods add new detection checks, they all ultimately call Fail(), which now does nothing. The Harmony patches remain as a safety net.
All modifications are in-memory only. BepInEx's patcher system loads DLLs into memory, passes them to our Patch() method as AssemblyDefinition objects, we modify the IL, and BepInEx loads the modified version into the CLR. Original DLLs on disk are never touched.
[1.0.8] - 2026-04-06
Changed
- Added runtime detection evasion for RtD mods
- Patcher now hides from all RtD detection mechanisms
- Assembly scanning is cached to prevent performance issues
Technical Details
RtD mods added detection checks in their Awake() method. The patcher uses Harmony to patch .NET runtime methods:
Dictionary<string, PluginInfo>.ContainsKeyreturns false when RtD mods check for our GUIDAssembly.GetName()returns a fake name when RtD mods scan loaded assemblies- Stack trace analysis identifies RtD mods by their "Soloredis." GUID prefix
- All modifications remain in-memory only
[1.0.7] - 2026-04-04
Changed
- Switched to runtime Harmony patching
- All modifications now happen in-memory only
- Patches
PluginInfo.Incompatibilitiesproperty getter at runtime
Technical Details
- Uses Harmony to intercept incompatibility checks
- Patches execute in BepInEx preloader Finish phase
- Returns empty incompatibility array for RtD mods
[1.0.6] - 2026-04-04
Changed
- Updated documentation to be strictly informational
- Removed informal language from documentation
[1.0.5] - 2026-04-04
Changed
- Updated patcher to handle integrity verification in RtD mods
- Modified approach to preserve method structures while bypassing compatibility checks
Technical Details
- RtD mods added integrity checks using IL bytecode inspection
- Patcher preserves original method structures to pass integrity verification
- Initialization flow is modified to skip compatibility checks
[1.0.4] - 2026-04-04
Changed
- Updated README with accurate log output examples
- Documentation improvements for clarity
[1.0.3] - 2026-04-04
Changed
- Rewrote detection code removal approach
- Now rebuilds initialization methods instead of patching IL instructions
- Reconstructs clean initialization flow without compatibility checks
Technical Details
- Rebuilds initialization methods to skip compatibility checks
- Clears problematic method bodies to prevent mod disabling
- More robust approach that works regardless of code structure
[1.0.2] - 2026-04-02
Changed
- Updated README to clarify that all RtD mods include compatibility restrictions
- Documentation accuracy improvements
[1.0.1] - 2026-04-02
Changed
- Updated README with additional documentation
- Added FAQ entries about compatibility handling
[1.0.0] - 2026-04-02
Changed
- Initial release
- Removes
[BepInIncompatibility]attributes from all RtD mods - Supports all 13 RtD mods (Ocean, Vines, Monsters, Souls, Biomes, Monstrum, Dungeons, FairyTale, Gardening, Horrors, Items, Magic, Souls_Addon)
- Removes blocks for 19 popular mods
- Automatic patching on game launch
Technical Details
- Patches DLL files using Mono.Cecil
- Works in BepInEx preloader phase
- Only patches when needed