Skip to content

Realm of Thrones 7.1 — crashes before main menu on Linux/Proton (Bannerlord 1.3.15) #458

Description

@MelQ29

Environment

  • Game: Mount & Blade II: Bannerlord v1.3.15, build 110062 (Steam)
  • OS: Nobara/Fedora Linux, NVIDIA RTX 4070 Ti (driver 595.71.05)
  • Proton: proton-cachyos-11.0 (also tested Experimental 11, 9.0, GE — same/earlier crashes)
  • Mods (manual install): Harmony 2.4.2, ButterLib 2.10.4, UIExtenderEx 2.13.2,
    MCM (MBOptionScreen) 5.12.1, ROT 7.1 (ROT-Core/Content/Map/Dragon). No BLSE
    (its .NET Framework launcher can't load net6 0Harmony 2.4.2 under Wine-Mono).
  • Load order correct: Harmony, ButterLib, UIExtenderEx, MCM, Native, SandBoxCore,
    Sandbox, StoryMode, ROT-Core, ROT-Content, ROT-Map, ROT-Dragon.

Summary

On Linux/Proton the modded game never reaches the main menu. Under Proton the game
runs its managed layer on Mono, which diverges from CoreCLR (Windows) and produces
crashes ROT's code doesn't hit on Windows. All dependencies are present and correct.

Crash A — Mono path (default Bannerlord.exe)

Fatal at ROT's Harmony.PatchAll() in OnSubModuleLoad:

HarmonyLib.HarmonyException: Patching exception in method System.Boolean
  TaleWorlds.CampaignSystem.CampaignBehaviors.EncounterGameMenuBehavior::
  game_menu_encounter_capture_the_enemy_on_condition(MenuCallbackArgs)
  ---> System.TypeInitializationException: The type initializer for
  'EncounterGameMenuBehavior' threw an exception.
  ---> System.NullReferenceException
  at TaleWorlds.Core.GameTexts.FindText (System.String id, System.String variation)
  at TaleWorlds.CampaignSystem.CampaignBehaviors.EncounterGameMenuBehavior..cctor ()
  at HarmonyLib.Harmony.PatchAll ()
  at ROT.SubModule.OnSubModuleLoad ()
  at TaleWorlds.MountAndBlade.Module.InitializeSubModuleBases ()

Cause: on Mono, Harmony patching forces the target type's static constructor to run
immediately; EncounterGameMenuBehavior..cctor calls GameTexts.FindText before the
game-text manager is initialized → NRE. CoreCLR (Windows) runs the cctor lazily, so it
doesn't reproduce there. (Timing-dependent: with some Proton builds it slips past this
and renders the menu background, then dies as below.)

Crash B — forced CoreCLR path (Bannerlord.Native.exe, use_coreclr=1)

Passes Crash A, reaches the menu background render, then:

System.Reflection.TargetInvocationException: Exception has been thrown by the
  target of an invocation. ---> System.IndexOutOfRangeException: Index was
  outside the bounds of the array.
  at System.Diagnostics.TraceInternal.get_AppName ()
CoreCLR Version: 6.0.3624.51421 / .NET 6.0.36

Environment.GetCommandLineArgs() is empty because the native host starts CoreCLR via
coreclr_create_delegate (no managed entry/args), so get_AppName throws. Any Trace/
Debug/Assert call at menu init then crashes.

Crash C — ROT-Content ships a STALE shader cache (concrete ROT packaging bug)

Modules/ROT-Content/Shaders/D3D11/compressed_shader_cache.sack is dated 2024-05-03,
while ROT-Map's is 2026-02-28 and is accepted. The 1.3.15 engine logs
"Shader cache version of the external module (ROT-Content) is invalid" then crashes
natively parsing it:

Exception 0xC0000005 (READ) at address 0xFFFFFFFFFFFFFFFF
IP inside TaleWorlds.Native.dll + 0x7437e0 (rglShader_manager, shader-cache parser)

(-1 "not found" sentinel dereferenced.) Workaround: delete/replace
Modules/ROT-Content/Shaders/D3D11. Please ship a ROT-Content shader cache matching the
1.3.15 engine (as ROT-Map already does).

Crash reporter is broken under Wine (hides the real cause)

The in-game/BUTR crash reporter fails with:

  • "Cannot parse dxdiag output. Index was outside the bounds of the array."
  • IndexOutOfRangeException in TraceInternal.get_AppName()
    These mask the true menu-init exception; Wine truncates the managed stack via
    OutputDebugStringA and WER is a stub, so the real exception is unrecoverable. A
    Wine-safe crash reporter (guard dxdiag parsing and GetCommandLineArgs()[0]) would make
    Linux issues diagnosable.

Ask

Is there a known way to run ROT 7.1 on Bannerlord 1.3.15 under Proton/Linux? The two
runtime-path crashes (Mono cctor timing; CoreCLR native-host empty command line) seem to
require ROT patch-timing and/or BUTR/TaleWorlds fixes. Happy to provide full logs and
minidumps.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions