ReleaseCrash Doctor2.1.0.0

Crash Doctor 2.1.0.0 — nine new protections

Nine new protections, an honest prevented-crash counter, dump analysis and our own extended stack in the report. One install for Bannerlord 1.2 / 1.3.15 / 1.4.x.

In short

  • Nine new protections — from a day change tripping on a previous campaign's item to an execution without an executioner on 1.5+
  • Fixed our own bug on 1.2.10: the Doctor broke wage calculation and counted it as "prevented crashes"
  • Report: our own extended stack and native crash analysis from the dump
  • The Mods tab scans in the background and warns about problems before launch

Already on Steam Workshop — it updates itself. RickLauncher delivers it automatically. Everything done since 29 August in one release. Bannerlord 1.2 / 1.3.15 / 1.4.x — one install for all versions.

⚠️ Our own bug first

On Bannerlord 1.2.10 the Doctor itself broke the wage calculation. A protection installed in the main menu ran a piece of game code too early — the game remembered the failure for good, and every party’s wages read as zero until a restart. Meanwhile the mod counted the consequences as 94,332 “prevented crashes”. Clean 1.2.10 with only Harmony and the Doctor; without the Doctor everything was fine.

Fixed at the level of how the mod is built: protections are no longer installed that early at all, and a dedicated test guards it. Such a failure is now reported once and in honest words — not “crash prevented”, but what is broken and until when.

Two more fixes in the same direction: the encounter-menu protection no longer spins in a loop (one log had 3,223 triggers in two minutes, each counted as a save; repeats are now recognised and reported once), and two protections that swallowed any error now claim a prevented crash only for their own.

🛡 Nine new protections

On by default, each with its own switch on the Crash Fixes tab.

  • Day change on an item whose category comes from a previous campaign. Once a day the game sells goods from markets and looks up each item’s category in the demand table without checking the row exists. Exactly one kind of item has no row — the ones a mod kept from the previous campaign in the same game session. Advice that closes the whole class: restart the game before loading a save.
  • First reinforcement wave when a mod added a team after the battle started. Deployment plans are built once at the start and looked up live on every wave — a late team has no plan, and the game crashes on it every tick. The protection builds the plan the way the game itself would.
  • Banner icon above troops sharing a banner. The game looks up the cached material by one texture but stores it under another; a group with a shared banner (siege deployment, for example) killed the tick.
  • A merchant sending out a caravan — a regression in the game itself since the naval update: four values are read without a single check. The crash came back a minute after every load, because the same merchant shows up every day.
  • Settlement without an owner clan. A settlement added to the game after the save was created stays ownerless forever — together with its militia, which crashed the map every tick. The protection does not assign an owner: that would change a town’s lord mid-campaign.
  • Execution without an executioner (Bannerlord 1.5+). The “executed, executioner unknown” mark is left by a mod that executes heroes without naming the executioner; the blood-feud system reads the executioner’s clan without a check — a crash seconds after every load.
  • Birth to a parent without appearance data. The old protection gave a value to the first reader and left the object broken — the crash moved two lines down, and rolling back the save did not help. The new one repairs the whole family.
  • Siege start: a roster whose counter lists troops while the list is empty. Left behind by a mod that edits rosters around the API. The counter is recalculated from the real entries, as on save load.
  • A banner texture arriving on armour that was destroyed with its wearer. There is nothing to cancel the background banner render at the end of a battle, and the first call on a dead model is a memory access violation nobody can catch. The protection does not apply the texture once the battle is over and catches the “mid-battle” variant (a mod re-dressed a soldier on spawn).

📄 Crash report

  • Our own extended stack: for every frame — the position inside the method, the nearest call and the owners of every patch on that method. That is what tells apart two identical throws in one method. A third-party report collector is no longer needed.
  • Native crashes are read from the dump: a verdict by the crashed library — GPU driver, overlay (Steam / Discord / RTSS / Nahimic), sound engine or a mod’s native DLL. Along the way we found out why this did not work before: the mod deleted the dump itself without reading it.
  • Crash folders are matched with the mod’s record in any time zone — the engine names them in UTC, and outside UTC+0 the record with the stack did not attach to the folder.
  • The module list names mod ids, not folder names; the report lists mod pairs their authors declared incompatible; troops with data that failed to load name the guilty mod.

🔎 Mods tab

  • Scans in the background with progress and remembers the result until files change (it used to freeze the game for the whole analysis).
  • Manifests are read the way the game reads them — and file checks by hash from the compatibility base finally work.
  • Reported before launch: a module listed twice in the load order (kills the game before the menu), a manifest the game will not read, a translation placed above its mod, and an author’s load-order wish the current order contradicts.
  • The game is no longer blamed for missing its own PlayStation and Game Pass DLLs.

🧰 Interface and details

  • The shader cache button touches only the generated cache — never game or mod files. The diagnosis advice that told you to delete them is rewritten.
  • A fix waiting for a game session shows as “Deferred”, not “Not needed”.
  • Long texts (save analysis, setting details) scroll instead of shrinking to an unreadable size.
  • The Prevented tab folds repeats into one line and switches language with the game.
  • The What’s New window appears as soon as the menu is built.
  • Fixed French strings that silently fell back to English.

Crashed? Click “Open folder” on the card and send both files: report.txt and crashdoctor_at_crash.log.

Crash Doctor → Discuss on Telegram