Dynamic Leveled Lists Wiki

An SKSE plugin that merges leveled list records (LVLI) from all mods at runtime. When multiple mods edit the same leveled list, Skyrim's last-loaded-wins rule discards changes from all but the final override. Dynamic Leveled Lists merges the lost items back in automatically, and respects intentional removals.

Quick Start: Install via your mod manager and launch the game. The plugin runs automatically on data load. Check Data/SKSE/Plugins/DynamicLeveledLists.log to see what was merged.

The Problem

Skyrim uses a "last writer wins" rule for records. If three mods edit the same leveled list (e.g. LItemWeaponGreatSword), only the last mod in your load order keeps its changes. Items added by the other mods are silently lost. This affects loot tables, vendor inventories, encounter zones, and anything else driven by leveled lists.

This is why compatibility patches exist for nearly every weapon/armor mod. Without them, half of the items you installed never actually drop.

The Solution

Dynamic Leveled Lists reads the original leveled list definition from every plugin that touches it, computes what each "loser" mod added or removed, and merges those deltas into the winning record at runtime. The result is the same as if you had built a manual patch, but fully automatic.

How It Works

Key Features

Fully automatic
No ESP required
Works with all mods
SE + AE + VR support
Additions merged
Removals respected
Duplicate weighting preserved
Overflow sublists for 255+ entries
Circular reference breaking

Overflow Sublists (255 Entry Limit)

Skyrim's engine stores the entry count for leveled lists as a single byte, limiting each list to 255 entries. When many mods add items to popular lists like LItemWeaponGreatSword, the merged result can easily exceed this limit.

Dynamic Leveled Lists solves this by creating overflow sublists at runtime. The engine natively supports nested leveled lists (a leveled list containing other leveled lists), so excess entries are distributed into sublists that the engine resolves recursively. No existing Skyrim mod does this.

UseAll Lists

When a list has the UseAll flag (every entry produces an item), direct entries are kept in the parent and overflow entries go into sublists with the same flag. Every item still appears.

Random Pick Lists

When a list picks one random entry, all entries are distributed evenly across sublists. The engine picks one sublist, then the sublist picks one item. Equal probability is preserved.

Circular Reference Breaking

Leveled lists can reference other leveled lists (nested lists). If the merge creates a circular reference where List A contains List B and List B contains List A, the engine follows the cycle infinitely when resolving loot, causing a crash. This is rare (two unrelated mods would have to independently create both halves of the cycle), but it's a real risk with automatic merging.

After all merges complete, Dynamic Leveled Lists builds a directed graph of every leveled list reference and runs cycle detection across the entire graph. When a circular reference is found, the plugin breaks the cycle at runtime by removing the back-edge entry from the parent list. This is an in-memory change only. Your plugin files on disk are never modified.

Each broken cycle is logged with the full path, the entry that was removed, and instructions for creating a permanent fix in xEdit:

Circular leveled list reference detected: 00035319 -> 000A1234 -> 00035319
Broke circular reference: removed SomeSublist [LVLI:000A1234] from MainList [LVLI:00035319]
  To permanently fix: open MyMod.esp in xEdit, find MainList [LVLI:00035319], and remove the entry pointing to SomeSublist [LVLI:000A1234]

Always logged: Cycle warnings are always written to the log with readable names regardless of the enablelogs setting, since they indicate crash risk.

Duplicate Weighting

Some mods use duplicate entries to weight drop probabilities. For example, an Iron Bow appearing 3 times in a list gives it 3x the drop chance. Dynamic Leveled Lists tracks multiplicity (how many times an identical entry appears) and preserves it correctly during merges. If Mod A adds 3 copies and Mod B adds 2 copies of the same item, the larger count (3) wins.

INI Settings

Configuration is at Data/SKSE/Plugins/DynamicLeveledLists.ini. If the file doesn't exist, it will be auto-generated with defaults on first launch.

[General]
;Enable detailed merge logging (true/false)
enablelogs = false

Settings Reference

enablelogs

Default: false
When enabled, logs every individual item added, removed, or skipped per leveled list with form type tags, a final state snapshot, and an aggregate summary of most frequently added items. Useful for debugging but adds startup time due to EditorID lookup.

Reading the Log

The log at Data/SKSE/Plugins/DynamicLeveledLists.log always shows a summary:

=== DynamicLeveledLists: Merge complete ===
  Total leveled lists: 4821
  With overrides (base + winner only): 312
  With conflicts (3+ sources): 87
  Actually merged: 41
  Total entries added: 156
  Total entries removed: 12
  Overflow sublists created: 3
  Circular references broken: 1

The cycle line always appears: "No circular references detected" when clean, or "Circular references broken: N" when cycles were found. Each cycle is logged individually with the full path, and the entry that was removed to break it:

Circular leveled list reference detected: 00035319 -> 000A1234 -> 00035319
Broke circular reference: removed SomeSublist [LVLI:000A1234] from MainList [LVLI:00035319]
  To permanently fix: open MyMod.esp in xEdit, find MainList [LVLI:00035319], and remove the entry pointing to SomeSublist [LVLI:000A1234]

With enablelogs=true, each merged list also gets detailed output:

  LItemWeaponGreatSword [LVLI:00035319]
    Sources: Skyrim.esm, ImmersiveWeapons.esp, HeavyArmory.esp
    -- Changes --
      + [WEAP] GreatSwordOfMight x1 @lvl1 [0A012345] (1x, added by ImmersiveWeapons.esp)
      + [WEAP] SteelClaymore x1 @lvl6 [0B023456] (2x, added by ImmersiveWeapons.esp)
    -- Carried forward --
      . [WEAP] NordicGreatsword x1 @lvl12 [0B034567] (1x)
    Result: +3 added, -0 removed
    -- Final state --
      * [WEAP] IronGreatsword x1 @lvl1 [00012EB7]
      * [WEAP] GreatSwordOfMight x1 @lvl1 [0A012345]
      * [WEAP] SteelClaymore x1 @lvl6 [0B023456]
      * [WEAP] NordicGreatsword x1 @lvl12 [0B034567]
    (4 entries total)

At the end of the merge, an aggregate summary shows the most frequently added items:

=== Most frequently added items (top 15) ===
  [WEAP] SteelClaymore [0B023456] - added to 12 leveled lists (from ImmersiveWeapons.esp)
  [ARMO] NordicShield [0B034568] - added to 8 leveled lists (from HeavyArmory.esp)

Performance note: Detailed logging requires scanning every loaded mod's LVLI records from disk to build an EditorID cache. This adds noticeable startup time. Keep enablelogs=false for normal play.

Compatibility

Requirements

Link to This Page

Copy a link to share this wiki from your Nexus description or documentation:

Support me on Ko-fi