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. Open the MCM to tweak settings or set FaceGen priority. 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
- SkyUI (for the MCM menu)
- MCM Helper (for the MCM menu)
The MCM menu is optional. Without SkyUI and MCM Helper, the plugin still works using the INI file.
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 blindly merge face data. Face meshes, morphs, and tints are only changed if you specifically tell it which mod should win, using the Plugin Priority page in the MCM (or the
[FaceGen]INI section). Without that, face data is left alone entirely to avoid the dark face bug. - 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) -- not merged automatically because mixing face data between mods causes the dark face bug. However, you can pick which mod's appearance wins per NPC using the Plugin Priority page in the MCM (or the
[FaceGen]INI section). That copies the full look (head parts, morphs, tints, skin, hair color, face texture) from your preferred mod.
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.
MCM Menu (Recommended)
If you have SkyUI and MCM Helper installed, open the Mod Configuration Menu and look for Dynamic NPCs. Everything is configurable there.
Features Page
Toggle each merge category on or off. All are enabled by default. Changes take effect on the next game startup.
Plugin Priority Page
This page controls which mod's face wins when multiple mods change the same NPC. The plugin auto-detects every mod in your load order that edits NPCs and lists them here with a slider.
- Higher number wins. A mod set to 5 beats a mod set to 1, just like your mod manager load order.
- If two mods are set to the same number, the displaced mod is automatically bumped so every mod gets a unique rank.
- Changes need a game restart to take effect.
Logs Page
Shows a summary of what the plugin did on the last startup: how many NPCs were processed, how many had conflicts, and what was added or removed per category. The bottom section lists the NPCs with the most conflicts, including their FormIDs so you can look them up in xEdit.
The MCM needs a small DynamicNPCs.esp file to work. This ESP only contains a quest that runs the MCM script. It does not change any NPCs or game data. You can create it automatically using the xEdit companion script (select "ESP Creator" mode).
INI Settings (Without MCM)
If you don't have SkyUI or MCM Helper, the plugin falls back to reading Data/SKSE/Plugins/DynamicNPCs.ini. This file is created automatically on first launch.
[General] enablelogs = false [Features] mergeInventories = true mergeSpells = true mergePerks = true mergeOutfits = true mergePackages = true mergeFactions = true mergeStats = true mergeAIData = true mergeTraits = true mergeKeywords = true mergeScripts = true mergeFaceGen = true [FaceGen] ; Paste mod filenames below, one per line. ; Mods lower in the list take priority. ; BijinWarmaidens.esp ; PandorablesNPCs.esp
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).
mergeScripts
Default: true
Merges Papyrus scripts attached to NPCs. If a mod adds a script to an NPC and another mod overwrites that NPC, the script is restored. Works at the whole-script level (adds/removes entire scripts). NPCs that inherit scripts from a template are skipped.
mergeFaceGen
Default: true
Enables the FaceGen override system. When enabled, set your preferred appearance mods on the Plugin Priority page in the MCM (or in the [FaceGen] INI section). The plugin will copy the full look (head parts, face morphs, tint layers, skin, hair color, face texture) from your preferred mod. Higher number wins, just like load order. Only affects NPCs that the listed mod actually changes.
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 fields changed Override Packages: ~1 changed Traits: ~4 fields changed Keywords: +7 added, -0 removed Scripts: +3 added, -1 removed FaceGen: 12 NPCs overridden 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)
~ [SKILLS] healthOffset 0->25 (changed by SpellMod.esp)
+ [KEYWORD] MagicResistance50 [000AA155] (added by SpellMod.esp)
+ [SCRIPT] MyCustomScript (added by SpellMod.esp)
Result: spells(+2 -0), stats(~1 fields, ~0 flags), keywords(+1 -0), scripts(+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:
