Dynamic NPCs Wiki
When multiple mods change the same NPC (adding spells, changing stats, giving new items, etc.), Skyrim only keeps the last mod's version and throws away everyone else's changes. This plugin fixes that. It finds the missing changes and merges them back in. Install it, forget about it.
Quick Start: Install with your mod manager, launch the game. That's it. Check Data/SKSE/Plugins/DynamicNPCs.log if you want to see what it did.
Requirements
- Skyrim SE (1.5.97+), AE (1.6.x), or VR
- SKSE64 (matching your game version)
- Address Library for SKSE Plugins
What This Mod Does
When multiple mods change the same NPC, Skyrim only keeps the last mod's version. Every other mod's changes are silently deleted. This plugin checks every mod that edited each NPC, figures out what was added, removed, or changed, and merges it all together at startup. Think of it like an automatic Bashed Patch for NPCs.
- Restores lost changes. Mod A gives an NPC new spells. Mod B changes the same NPC's outfit but doesn't include the spells. Normally the spells are gone. This plugin adds them back.
- Respects removals. If a mod specifically removed a spell, perk, or faction from an NPC, it stays removed.
- Handles conflicts gracefully. When two mods change the same field (e.g. both change an NPC's combat style), the last mod in your load order wins, just like vanilla. No crashes, no weirdness.
- Every mod gets a say. Skyrim normally only listens to one mod per NPC. This plugin makes sure all of them are heard.
What This Mod Does NOT Do
This comes up a lot, so let's be clear:
- This is NOT SPID. It does not distribute items, spells, or perks to NPCs. It only restores changes that were already supposed to be there but got lost due to mod conflicts.
- It does NOT touch face data. Face meshes, face tints, and face morphs are never merged. Changing face data between mods causes the dark face bug, so this plugin leaves it alone entirely.
- It does NOT touch scripts. Script data (VMAD) is never merged. Merging scripts from different mods is unsafe and can cause crashes.
- It does NOT replace Wrye Bash or Mator Smash. Those tools build patches ahead of time. This does the same job automatically at startup for anything they missed.
- It does NOT "smash" records together blindly. It compares each mod's changes against the original and only carries over what each mod specifically added, removed, or changed. It's a smart merge, not a dumb copy-paste.
- It does NOT create dirty edits. Nothing is written to disk. All merging happens in memory while the game loads. Your plugin files are never touched.
The Problem
Skyrim has a simple rule: if two mods edit the same thing, the last one in your load order wins and the other gets thrown out. So if Mod A adds new spells to an NPC and Mod B changes that same NPC's outfit, you only get the outfit change. The spells are gone. No warning, no error. Just silently deleted.
This gets worse with popular NPCs. Followers, faction leaders, and named characters are commonly edited by many mods at once. The more mods you have, the more changes vanish.
The Fix
Dynamic NPCs looks at every mod that touched each NPC, figures out what each one added, removed, or changed, and merges all those changes together. The result is the same as if you had manually built a compatibility patch for every NPC conflict in your load order, except you don't have to do anything.
How It Works (Simple Version)
- Runs once when the game starts, before you reach the main menu
- Finds every NPC that more than two mods tried to change
- Reads each mod's version of that NPC to see what they added, removed, or changed
- Merges all the changes together so nothing gets lost
- Done. You play the game normally.
What Gets Merged
What Does NOT Get Merged (and Why)
- Face data (face meshes, morphs, tints) — Merging face data between mods causes the dark face bug. Left alone entirely.
- Scripts (VMAD) — Merging scripts from different mods is unsafe and can cause crashes or broken quests.
Template Flags
Some NPCs use templates to inherit data from another NPC (like a template for all bandits). When an NPC has a template flag set for a category (e.g. "use template for inventory"), this plugin skips merging that category since the data comes from the template, not the NPC record itself. This is automatic and requires no configuration.
INI Settings
The config file is at Data/SKSE/Plugins/DynamicNPCs.ini. If it doesn't exist, it gets created automatically the first time you launch the game.
[General] ;Write detailed per-NPC merge info to the log file. Useful for troubleshooting. enablelogs = false [Features] ;Merge NPC inventory mergeInventories = true ;Merge NPC spells, shouts, and leveled spells mergeSpells = true ;Merge NPC perks mergePerks = true ;Merge outfit item lists (what NPCs wear) mergeOutfits = true ;Merge NPC AI packages (schedules, travel, patrol, etc.) mergePackages = true ;Merge NPC faction memberships and ranks mergeFactions = true ;Merge NPC stats: health/magicka/stamina offsets, level, speed, skills, and actor flags mergeStats = true ;Merge NPC AI behavior: aggression, confidence, mood, morality, and override package lists mergeAIData = true ;Merge NPC traits: race, class, outfit, combat style, voice type, height, weight, name, and more mergeTraits = true ;Merge NPC keywords (used by perks, abilities, and other systems to identify NPC types) mergeKeywords = true
Settings Reference
enablelogs
Default: false
Logs every single change for each NPC: items added/removed, spells merged, stats changed, conflicts detected, etc. Helpful if you want to see exactly what was merged, but makes startup slower. Leave it off unless you're curious or troubleshooting.
mergeInventories
Default: true
Merges the items an NPC carries. If a mod adds items to an NPC and another mod overwrites that NPC, the items are restored.
mergeSpells
Default: true
Merges spells, shouts, and leveled spells. Additions and removals from all mods are combined.
mergePerks
Default: true
Merges perks and perk ranks. Lost perk additions are restored, rank changes are carried forward.
mergeOutfits
Default: true
Merges outfit item lists (what NPCs wear) and sleep outfits. Items added to outfits by overridden mods are restored.
mergePackages
Default: true
Merges AI packages (schedules, patrols, travel routines, etc.). Lost packages are added back, removed packages stay removed.
mergeFactions
Default: true
Merges faction memberships and ranks. If a mod adds an NPC to a faction and another mod overwrites that NPC, the faction membership is restored.
mergeStats
Default: true
Merges NPC stats: health/magicka/stamina offsets, level, speed multiplier, bleedout override, skills, and actor flags (Essential, Protected, Unique, etc.).
mergeAIData
Default: true
Merges AI behavior settings: aggression, confidence, mood, morality, assistance, and override package lists (spectator, observe corpse, guard warn, enter combat).
mergeTraits
Default: true
Merges NPC traits: default outfit, race, combat style, class, crime faction, gift filter, voice type, height, weight, and display name.
mergeKeywords
Default: true
Merges NPC keywords. Keywords are used by perks, abilities, and game systems to identify NPC types (e.g. ActorTypeUndead, MagicResistance).
Reading the Log
The log at Data/SKSE/Plugins/DynamicNPCs.log always shows a summary of what happened:
=== DynamicNPCs: Merge complete === NPCs: 2847 total, 64 with conflicts, 31 merged Inventory: +18 added, -2 removed, ~3 count changed Spells: +12 added, -1 removed Perks: +5 added, -0 removed, ~1 rank changed Packages: +8 added, -3 removed Factions: +4 added, -1 removed, ~0 rank changed Stats: ~6 fields changed, ~2 flags changed AI Data: ~3 AIDT fields changed, ~1 override packages changed Traits: ~4 fields changed Keywords: +7 added, -0 removed Outfits: 412 total, 11 with conflicts, 5 merged Outfit items: +9 added, -1 removed
If you turn on enablelogs, you also get a detailed breakdown for each NPC:
Lydia [NPC_:000A2C94]
Winner: FollowerOverhaul.esp | Sources: Skyrim.esm, SpellMod.esp, FollowerOverhaul.esp
-- Changes --
+ [SPEL] Fireball [00012FD0] (added by SpellMod.esp)
+ [SPEL] Healing [000B62EF] (added by SpellMod.esp)
~ [STAT] healthOffset 0->25 (changed by SpellMod.esp)
+ [KYWD] MagicResistance50 [000AA155] (added by SpellMod.esp)
Result: spells(+2 -0), stats(~1 fields, ~0 flags), keywords(+1 -0)
Heads up: Detailed logging makes startup noticeably slower because it has to look up the name of every form. Keep it off for normal play.
Compatibility
- Wrye Bash / Mator Smash: Works fine alongside them. They patch things ahead of time, this catches whatever they missed at startup.
- SPID (Spell Perk Item Distributor): Fully compatible. SPID distributes through scripts, this merges NPC records. Different systems, no overlap.
- Dynamic Container Loot / Dynamic Leveled Lists: Companion mods. DCL handles containers, DLL handles leveled lists, this handles NPCs. They work on completely different record types and do not interfere.
- Load order: Doesn't matter. Safe with any load order. It just reads your mods, it doesn't change them.
- Other SKSE plugins: No conflicts. This plugin doesn't hook into any game functions, so it won't fight with anything.
Credits
- CommonLibSSE-NG for making SKSE plugins possible across SE, AE, and VR
- SKSE Team for the Script Extender that none of this works without
- powerof3 for CLib utility library
- herumi for xbyak (JIT assembler)
- brofield for SimpleINI (config file parsing)
Link to This Page
Copy a link to share this wiki from your Nexus description or documentation:
