Skip to content

Troubleshooting

Chris Knight edited this page Aug 22, 2026 · 1 revision

Troubleshooting

Symptoms first — find the one that matches, then work down.

Everything here has been reproduced on a real, heavily-modded Witcher 3 next-gen install. Where a number is empirical rather than documented by CD PROJEKT RED, it says so.


The game starts, shows the menu background, but no main menu appears

Most likely: too many .bundle files under Mods\.

The engine mounts every mod bundle at startup. Past a certain count it stops being able to build the main menu — you get the background image and nothing else. No error, no log, and the scripts compile fine.

Measured by bisection on one install:

Mods bundles Mod folders Main menu
244 260 works
255 267 works
260 270 fails

Count yours:

# from the game directory, PowerShell
(Get-ChildItem Mods\*\content\*.bundle).Count

Honest caveat: the ceiling is somewhere in 255–259 on that install. 256 is the obvious suspect but CD PROJEKT RED documents nothing here, and this is a single data point. Treat it as "around 256", not gospel.

What matters is bundles, not mods. Removing a 41-script, zero-bundle mod changed nothing; dropping bundle count fixed it immediately. So:

  • Script-only mods are free. They cost no bundle slot at all.
  • Appearance/texture mods are expensive — most ship two (blob0.bundle + buffers0.bundle), so twenty of them can eat forty slots.
  • To fit more, combine several appearance mods into one mod folder. Same content, fewer slots.

Vortex's built-in ModLimitPatcher does not help here — it patches an old-gen executable layout, and neither the patched nor unpatched byte sequence exists in the next-gen DX12 witcher3.exe.

Second possibility: a vanilla function the engine calls went missing from a merged script. See A mod is built for an older game version below — that failure produces exactly this symptom.


Hundreds of script compile errors naming members that should exist

Errors like:

Error [modspawncompanions] ... 'scmcc' is not a member of '&handle:CNewNPC'
Error [modz_sss6] ... Could not find function 'SSS_AddSkillSlot'
Error [modmapquestobjectives] ... 'ALL_QUEST_OBJECTIVES_ON_MAP___ANOTHER_MOD_CHANGES_MAPMENU_WS_FILE___USE_SCRIPT_MERGER_TO_DETECT_AND_FIX_THE_CONFLICT' is not a member of ...

These are mods referencing things the merge is supposed to add to vanilla scripts. If they're all missing at once, your merged mod is empty or absent.

Check it:

Get-ChildItem Mods\mod0000_MergedFiles -Recurse -Filter *.ws | Measure-Object

Zero files, or a directory tree with no files in it, means the merge didn't complete. Run the merge again and confirm it reports Merged N file(s), skipped 0.

That last error is worth knowing on sight: some mods ship a deliberately absurd member name as a tripwire, precisely so this shows up as "use Script Merger" rather than a mystery.


A mod is built for an older game version

Symptom: a merge succeeds, scripts compile, and the game misbehaves in a way that points at vanilla code being gone — most visibly, no main menu.

Cause: a mod that ships a whole-file copy of a vanilla script taken from an older game build simply doesn't contain declarations vanilla added since. A three-way merge can't distinguish "this mod deleted it" from "this mod predates it", so the absence reads as a deletion and wins.

Real examples from one next-gen load order — in every case the declaration was present in vanilla and in the other contributing mod:

Merged file Lost Mod responsible
game/r4Game.ws OnHDRChangedEvent (calls GetGuiManager().OnHDRChanged()) modAlwaysFullExp
game/gui/menus/mapMenu.ws OnFiltersChanged, SetInitialFilters modFastTravelFromAnywhere
game/vehicles/horse/states/exploration.ws CheckVector, DoHorseKick, OnHorseKick modFearlessRoach

How to spot it: compare the merged file's declarations against vanilla's. Anything vanilla declares that the merged output doesn't — and that at least one contributing mod still has — was lost this way.

Fix: remove the outdated mod. These are usually small, old mods whose whole-file copy predates the 4.0 next-gen update.


Expansions show as "not installed" in the main menu

Hearts of Stone / Blood and Wine appearing as available-to-buy rather than installed, despite being present on disk.

Check every folder under dlc\ actually contains a content\ subfolder:

Get-ChildItem dlc -Directory | Where-Object { -not (Test-Path "$($_.FullName)\content") }

A mod that installs with a wrapper folder can leave a malformed entry there — a dlc\ subfolder with no content\ inside it. Remove or correct it.

Zero-byte texture.cache files are normal and not a symptom — several vanilla CDPR DLCs ship them.


The merged mod keeps getting emptied

Vortex's built-in Witcher 3 extension has its own script-merger integration that moves the merged mod folder around: it backs merged scripts up per profile and swaps them in and out on collection install and profile switch (mergeBackup.ts's exportScriptMerges / importScriptMerges).

If a Collection import or profile switch leaves you with an empty Mods\mod0000_MergedFiles, that's what happened. Re-run the merge.

This is also why the companion extension warns "Something other than this extension's own Resolve Script Conflicts action changed your WitcherScriptMerger merge results" — that notice is doing its job.


Re-merging duplicates mod content

If merged files grow every time you re-merge — the same inserted block appearing two, three, six times — the merged mod is being fed back in as a source.

Symptom, measured against the mods' own files:

merged output the mod's own file
modBloodAndSteel insertion in actor.ws

Workaround on affected versions: delete Mods\mod0000_MergedFiles before re-merging, so the merge rebuilds from vanilla plus the real mods only.


merge refuses to start, complaining about QuickBMS or wcc_lite

On older builds the WinForms merge verb required both bundle tools before it would start, even when every conflict was a plain .ws/.xml file. Neither binary ships with this repo.

Use WitcherScriptMerger.Headless merge instead — it gates only on the text-merge engine, which is built in and always available. See Known Limitations.


Getting more detail

Both merge verbs print a per-file audit trail of every non-mechanical decision — every tiebreak, every case where one mod's edit survived another's competing deletion:

function-level: game\player\r4Player.ws: function OnSpawned: kept ...'s version
  (9 changed diff blocks vs. vanilla, more distinct than ...'s 0), discarded ...

That trail is the fastest way to answer "why did my mod's change vanish?". It's also surfaced in the Vortex extension's merge dialog.

Exit codes: 0 everything merged, 1 couldn't start (bad args, config, or dependencies), 2 ran but skipped one or more conflicts.