Quick answer: Call ProjectSettings.load_resource_pack(path, true) so the pack replaces existing files, and ensure mod resources live under the exact same res:// paths as the originals.
Your mod ships a .pck that should swap a texture or scene, but the base version keeps loading. Godot mounts packs into the virtual res:// filesystem, and without the replace flag a same-path file in the pack is discarded rather than overlaid.
How to fix it
1. Pass replace=true when mounting
Default load_resource_pack(path) keeps existing files when paths collide. Call ProjectSettings.load_resource_pack(path, true) so pack entries replace already-mounted resources at the same path.
2. Match res:// paths exactly
An override only works if the mod file sits at the identical virtual path, e.g. res://textures/hero.png. Build the .pck preserving that folder structure; a file at a different path is added, not overridden.
3. Clear the resource cache for swapped files
Already-loaded resources are cached, so a mid-session swap may show the old asset. Reload affected scenes or call ResourceLoader.load(path, "", CACHE_MODE_IGNORE) after mounting to pick up the replacement.
4. Load packs before first use of the assets
Mount mod packs early in an autoload _ready(), before any scene references the overridden resources, so the engine resolves them through the pack from the start.
Catching the ones you can't reproduce
The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.
Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.
This is where a tool like Bugnet earns its place. Its SDK captures every Godot error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.
Most of the time the fix is small. Seeing the failure clearly is the part that actually costs you.