-
Notifications
You must be signed in to change notification settings - Fork 0
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.
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.
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.
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.
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.
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.
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
|
6× | 1× |
Workaround on affected versions: delete Mods\mod0000_MergedFiles before re-merging,
so the merge rebuilds from vanilla plus the real mods only.
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.
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.
WitcherScriptMerger