Skyrim ESP Module
Create, inspect, and modify Skyrim plugin files using the ESP module of Spooky's AutoMod Toolkit.
Prerequisites
Run all commands from the toolkit directory:
cd "<TOOLKIT_PATH>" # Example: cd "C:\Tools\spookys-automod-toolkit"
Command Reference
Create a Plugin
dotnet run --project src/SpookysAutomod.Cli -- esp create "<name>.esp" [options]
| Option | Description |
|---|---|
--light | Create as ESL-flagged light plugin |
--author "Name" | Set author in header |
--output "./path" | Output directory |
Inspect a Plugin
dotnet run --project src/SpookysAutomod.Cli -- esp info "<plugin>" dotnet run --project src/SpookysAutomod.Cli -- esp list-masters "<plugin>"
Add Records
Books (work immediately, no model needed):
dotnet run --project src/SpookysAutomod.Cli -- esp add-book "<plugin>" "<editorId>" --name "Name" --text "Content..." --value 50
Weapons (require --model to be visible):
dotnet run --project src/SpookysAutomod.Cli -- esp add-weapon "<plugin>" "<editorId>" --name "Name" --type sword --damage 25 --model iron-sword
Model presets: iron-sword, steel-sword, iron-dagger, hunting-bow
Armor (require --model to be visible):
dotnet run --project src/SpookysAutomod.Cli -- esp add-armor "<plugin>" "<editorId>" --name "Name" --type heavy --slot body --rating 40 --model iron-cuirass
Model presets: iron-cuirass, iron-helmet, iron-gauntlets, iron-boots, iron-shield
Spells (require --effect to function):
dotnet run --project src/SpookysAutomod.Cli -- esp add-spell "<plugin>" "<editorId>" --name "Name" --effect damage-health --magnitude 50 --cost 45
Effect presets: damage-health, restore-health, damage-magicka, restore-magicka, damage-stamina, restore-stamina, fortify-health, fortify-magicka, fortify-stamina, fortify-armor, fortify-attack
Perks (require --effect to function):
dotnet run --project src/SpookysAutomod.Cli -- esp add-perk "<plugin>" "<editorId>" --name "Name" --description "Effect" --effect weapon-damage --bonus 25 --playable
Effect presets: weapon-damage, damage-reduction, armor, spell-cost, spell-power, spell-duration, sneak-attack, pickpocket, prices
Quests:
dotnet run --project src/SpookysAutomod.Cli -- esp add-quest "<plugin>" "<editorId>" --name "Name" --start-enabled
Globals (configuration variables):
dotnet run --project src/SpookysAutomod.Cli -- esp add-global "<plugin>" "<editorId>" --type float --value 1.5
NPCs (record only - need race/face data for visibility):
dotnet run --project src/SpookysAutomod.Cli -- esp add-npc "<plugin>" "<editorId>" --name "Name" --level 20 --essential
NPC AI Packages (complete behavior system - 36 types supported):
# Basic behaviors dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type sandbox --radius 500 dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type travel --marker "DestRef" dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type sleep --bed "BedRef" --start-hour 22 --duration 8 dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type eat --furniture "ChairRef" --start-hour 12 --duration 2 dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type follow --target "PlayerRef" dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type guard --marker "GuardRef" dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type patrol --marker "PatrolRef" # Activities & actions dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type useitemat --item-ref "ForgeRef" # Crafting dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type sit --furniture "ChairRef" dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type useidlemarker --marker "IdleRef" # Sweeping, hammering dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type wander --marker "CenterRef" --radius 1000 dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type wait --marker "WaitRef" # Combat & magic dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type flee --distance 1500 dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type useweapon --weapon-ref "WeaponRef" --target "TargetRef" dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type usemagic --spell-ref "SpellRef" --target "TargetRef" dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type shout --shout-ref "ShoutRef" # Dialogue & social dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type forcegreet --target "PlayerRef" # Quest interactions dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type greet --target "ActorRef" dotnet run --project src/SpookysAutomod.Cli -- esp add-package "<plugin>" "<editorId>" --type say --topic-ref "TopicRef" # Attach packages to NPCs (evaluated in order) dotnet run --project src/SpookysAutomod.Cli -- esp attach-package "<plugin>" --npc "NpcEditorId" --package "PackageEditorId"
All 36 Types: sandbox, travel, sleep, eat, follow, guard, patrol, useitemat, activate, sit, useidlemarker, wander, wait, relax, flee, ambush, useweapon, usemagic, castmagic, shout, dialogue, forcegreet, greet, say, accompany, escortto, followto, acquire, find, holdposition, keepaneyeon, lockdoors, unlockdoors, dismount, hover, orbit
FormKey Format: Must be "FORMID:MODNAME" with exactly 6 hex digits (e.g., "000007:Skyrim.esm")
Factions (for tracking and organization):
dotnet run --project src/SpookysAutomod.Cli -- esp add-faction "<plugin>" "<editorId>" --name "Name" --flags "HiddenFromPC,TrackCrime"
LeveledItems (for random loot distribution):
# With preset dotnet run --project src/SpookysAutomod.Cli -- esp add-leveled-item "<plugin>" "<editorId>" --preset low-treasure # Custom with entries (format: item,level,count) dotnet run --project src/SpookysAutomod.Cli -- esp add-leveled-item "<plugin>" "<editorId>" --chance-none 15 --add-entry "GoldBase,1,100" --add-entry "LockPick,5,3" # Guaranteed multi-item drop dotnet run --project src/SpookysAutomod.Cli -- esp add-leveled-item "<plugin>" "<editorId>" --use-all --add-entry "Sword,10,1" --add-entry "Shield,10,1"
Presets: low-treasure (25% none), medium-treasure (15% none), high-treasure (5% none), guaranteed-loot (0% none)
FormLists (for script property collections):
# Add vanilla forms by FormKey dotnet run --project src/SpookysAutomod.Cli -- esp add-form-list "<plugin>" "<editorId>" --add-form "Skyrim.esm:0x000896" # Add mod forms by EditorID dotnet run --project src/SpookysAutomod.Cli -- esp add-form-list "<plugin>" "<editorId>" --add-form "MyWeapon01" --add-form "MyWeapon02" # Use in scripts: FormList Property MyList Auto # Set property: --property MyList --value "ModName.esp|0x800"
EncounterZones (for level scaling control):
# With preset dotnet run --project src/SpookysAutomod.Cli -- esp add-encounter-zone "<plugin>" "<editorId>" --preset mid-level # Custom with flags dotnet run --project src/SpookysAutomod.Cli -- esp add-encounter-zone "<plugin>" "<editorId>" --min-level 30 --max-level 50 --never-resets # Fully scaling (1-unlimited) dotnet run --project src/SpookysAutomod.Cli -- esp add-encounter-zone "<plugin>" "<editorId>" --preset scaling
Presets: low-level (1-10), mid-level (10-30), high-level (30-50), scaling (1-unlimited)
Flags: --never-resets (enemies stay dead), --disable-combat-boundary (NPCs pursue anywhere)
Locations (for quest markers and fast travel):
# With preset dotnet run --project src/SpookysAutomod.Cli -- esp add-location "<plugin>" "<editorId>" --name "The Rusty Tankard" --preset inn # With parent location dotnet run --project src/SpookysAutomod.Cli -- esp add-location "<plugin>" "<editorId>" --name "My Shop" --preset dwelling --parent-location "WhiterunHoldLocation" # Custom keywords dotnet run --project src/SpookysAutomod.Cli -- esp add-location "<plugin>" "<editorId>" --name "Special Place" --add-keyword "LocTypeCity"
Presets: inn (LocTypeInn), city (LocTypeCity), dungeon (LocTypeDungeon), dwelling (LocTypeDwelling)
Outfits (for NPC equipment sets):
# With preset dotnet run --project src/SpookysAutomod.Cli -- esp add-outfit "<plugin>" "<editorId>" --preset guard # Custom items dotnet run --project src/SpookysAutomod.Cli -- esp add-outfit "<plugin>" "<editorId>" --add-item "ArmorIronCuirass" --add-item "WeaponIronSword"
Presets: guard (iron armor + sword + shield), farmer (clothes), mage (robes + hood), thief (leather armor)
Quest Aliases
Quest aliases enable dynamic tracking of NPCs, objects, or locations. Essential for follower frameworks.
Add Alias with Script:
dotnet run --project src/SpookysAutomod.Cli -- esp add-alias "<plugin>" --quest "<questId>" --name "<aliasName>" --script "<scriptName>" --flags "Optional,AllowReuseInQuest"
Attach Script to Existing Alias:
dotnet run --project src/SpookysAutomod.Cli -- esp attach-alias-script "<plugin>" --quest "<questId>" --alias "<aliasName>" --script "<scriptName>"
Common flags: Optional, AllowReuseInQuest, AllowReserved, Essential, Protected
Script Management
Attach Script to Quest:
dotnet run --project src/SpookysAutomod.Cli -- esp attach-script "<plugin>" --quest "<questId>" --script "<scriptName>"
Set Script Property Manually:
dotnet run --project src/SpookysAutomod.Cli -- esp set-property "<plugin>" --quest "<questId>" --script "<scriptName>" --property "<propName>" --value "<formId>" --type object
Auto-Fill Properties (RECOMMENDED):
# Single script - parses PSC file and fills vanilla properties dotnet run --project src/SpookysAutomod.Cli -- esp auto-fill "<plugin>" --quest "<questId>" --script "<scriptName>" --psc-file "<path>" --data-folder "<skyrim-data-path>" # Bulk auto-fill ALL scripts (5x faster for multiple scripts) dotnet run --project src/SpookysAutomod.Cli -- esp auto-fill-all "<plugin>" --script-dir "<source-dir>" --data-folder "<skyrim-data-path>"
What Auto-Fill Does:
- •Parses PSC files to extract property names and types
- •Searches Skyrim.esm with type-aware filtering
- •Automatically fills matching vanilla properties
- •Prevents wrong matches (e.g., Location vs Keyword with similar names)
- •Supports array properties (creates ScriptObjectListProperty)
Analysis & Inspection
Basic Info:
dotnet run --project src/SpookysAutomod.Cli -- esp info "<plugin>" dotnet run --project src/SpookysAutomod.Cli -- esp list-masters "<plugin>"
Type Inspection (Debug Mutagen Types):
dotnet run --project src/SpookysAutomod.Cli -- esp debug-types "<pattern>" --json
Examples: QuestAlias, Quest*, --all
Dry-Run Mode
Preview changes without saving:
dotnet run --project src/SpookysAutomod.Cli -- esp add-weapon "<plugin>" "<id>" --name "Test" --damage 30 --model iron-sword --dry-run --json
Available on all add-* commands.
SEQ File Generation
Required for start-enabled quests:
dotnet run --project src/SpookysAutomod.Cli -- esp generate-seq "<plugin>" --output "./SEQ"
Merge Plugins
dotnet run --project src/SpookysAutomod.Cli -- esp merge "<source>.esp" "<target>.esp" --output "Merged.esp"
Record Viewing and Override System
View, analyze, and create override patches for existing records without xEdit.
View Record Details
# View by EditorID (requires --type) dotnet run --project src/SpookysAutomod.Cli -- esp view-record "<plugin>" --editor-id "<id>" --type <type> # View by FormID (type inferred) dotnet run --project src/SpookysAutomod.Cli -- esp view-record "<plugin>" --form-id "<formid>"
Supported Types: spell, weapon, armor, quest, npc, perk, faction, book, miscitem, global, leveleditem, formlist, outfit, location, encounterzone
Create Override Patches
# Create override patch (copies record to new plugin) dotnet run --project src/SpookysAutomod.Cli -- esp create-override "<source>.esp" -o "<patch>.esp" --editor-id "<id>" --type <type>
The patch automatically:
- •Adds source as master reference
- •Preserves FormKey from original
- •Loads after source in load order (wins conflicts)
Search for Records
# Search by pattern dotnet run --project src/SpookysAutomod.Cli -- esp find-record --search "<pattern>" --type <type> --plugin "<plugin>" # Search across all plugins in Data folder dotnet run --project src/SpookysAutomod.Cli -- esp find-record --search "<pattern>" --type <type> --data-folder "C:/Skyrim/Data" --all-plugins
Batch Override Multiple Records
# Create overrides for all matching records dotnet run --project src/SpookysAutomod.Cli -- esp batch-override "<source>.esp" -o "<patch>.esp" --search "<pattern>*" --type <type> # Override specific records by EditorID list dotnet run --project src/SpookysAutomod.Cli -- esp batch-override "<source>.esp" -o "<patch>.esp" --type <type> --editor-ids "ID1,ID2,ID3"
Compare Records
# Compare same record in two plugins dotnet run --project src/SpookysAutomod.Cli -- esp compare-record "<plugin1>.esp" "<plugin2>.esp" --editor-id "<id>" --type <type>
Detect Conflicts
# Find which plugins modify a specific record dotnet run --project src/SpookysAutomod.Cli -- esp conflicts "<data-folder>" --editor-id "<id>" --type <type> # Check all conflicts for a plugin dotnet run --project src/SpookysAutomod.Cli -- esp conflicts "<data-folder>" --plugin "<plugin>.esp"
Condition Management (Perks Only)
Note: Conditions only work on Perk, Package, IdleAnimation, and MagicEffect records.
List Conditions:
dotnet run --project src/SpookysAutomod.Cli -- esp list-conditions "<plugin>" --editor-id "<perkId>" --type perk
Add Condition:
# Add level requirement dotnet run --project src/SpookysAutomod.Cli -- esp add-condition "<source>.esp" -o "<patch>.esp" --editor-id "<perkId>" --type perk --function GetLevel # Common functions: GetLevel, IsSneaking, IsRunning, IsSwimming, IsInCombat
Remove Conditions:
# Remove conditions by index (get indices from list-conditions) dotnet run --project src/SpookysAutomod.Cli -- esp remove-condition "<source>.esp" -o "<patch>.esp" --editor-id "<perkId>" --type perk --indices "0,2"
Common Workflows
Create a Complete Weapon Mod
# 1. Create plugin dotnet run --project src/SpookysAutomod.Cli -- esp create "MyWeaponMod.esp" --light --author "YourName" # 2. Add weapon with model dotnet run --project src/SpookysAutomod.Cli -- esp add-weapon "MyWeaponMod.esp" "MyWeapon_Sword" --name "Blade of Power" --type sword --damage 35 --value 500 --model iron-sword # 3. Verify dotnet run --project src/SpookysAutomod.Cli -- esp info "MyWeaponMod.esp"
Create a Spell Pack
# Create plugin dotnet run --project src/SpookysAutomod.Cli -- esp create "SpellPack.esp" --light # Add damage spell dotnet run --project src/SpookysAutomod.Cli -- esp add-spell "SpellPack.esp" "SP_Fireball" --name "Greater Fireball" --effect damage-health --magnitude 75 --cost 60 # Add healing spell dotnet run --project src/SpookysAutomod.Cli -- esp add-spell "SpellPack.esp" "SP_Heal" --name "Major Healing" --effect restore-health --magnitude 100 --cost 50 # Add buff spell dotnet run --project src/SpookysAutomod.Cli -- esp add-spell "SpellPack.esp" "SP_Fortify" --name "Warrior's Blessing" --effect fortify-health --magnitude 50 --duration 120 --cost 80
Create a Perk Overhaul
# Create plugin dotnet run --project src/SpookysAutomod.Cli -- esp create "PerkMod.esp" --light # Combat perks dotnet run --project src/SpookysAutomod.Cli -- esp add-perk "PerkMod.esp" "PM_WeaponMaster" --name "Weapon Master" --description "+20% weapon damage" --effect weapon-damage --bonus 20 --playable # Magic perks dotnet run --project src/SpookysAutomod.Cli -- esp add-perk "PerkMod.esp" "PM_Efficiency" --name "Magical Efficiency" --description "Spells cost 25% less" --effect spell-cost --bonus 25 --playable # Stealth perks dotnet run --project src/SpookysAutomod.Cli -- esp add-perk "PerkMod.esp" "PM_Assassin" --name "Assassin's Strike" --description "3x sneak attack damage" --effect sneak-attack --bonus 200 --playable
Add Content to Existing Mod
# Check what's in the mod dotnet run --project src/SpookysAutomod.Cli -- esp info "ExistingMod.esp" # Add new content dotnet run --project src/SpookysAutomod.Cli -- esp add-weapon "ExistingMod.esp" "NewWeapon" --name "Added Sword" --damage 30 --model steel-sword # Verify addition dotnet run --project src/SpookysAutomod.Cli -- esp info "ExistingMod.esp"
Create a Dungeon with Level Scaling
# Create plugin dotnet run --project src/SpookysAutomod.Cli -- esp create "DungeonMod.esp" --light # Create location dotnet run --project src/SpookysAutomod.Cli -- esp add-location "DungeonMod.esp" "DM_Crypt" --name "Forgotten Crypt" --preset dungeon # Create encounter zone dotnet run --project src/SpookysAutomod.Cli -- esp add-encounter-zone "DungeonMod.esp" "DM_CryptZone" --preset mid-level --never-resets # Create boss loot dotnet run --project src/SpookysAutomod.Cli -- esp add-leveled-item "DungeonMod.esp" "DM_BossChest" --preset high-treasure # Verify dotnet run --project src/SpookysAutomod.Cli -- esp info "DungeonMod.esp"
Create NPCs with Custom Outfits
# Create plugin dotnet run --project src/SpookysAutomod.Cli -- esp create "NPCMod.esp" --light # Create custom outfit dotnet run --project src/SpookysAutomod.Cli -- esp add-outfit "NPCMod.esp" "NM_GuardOutfit" --preset guard # Create faction dotnet run --project src/SpookysAutomod.Cli -- esp add-faction "NPCMod.esp" "NM_TownGuards" --name "Town Guards" # Create NPC (outfit assigned in Creation Kit) dotnet run --project src/SpookysAutomod.Cli -- esp add-npc "NPCMod.esp" "NM_GuardCaptain" --name "Captain Smith" --level 20 --essential
Create Form List for Script Property
# Create plugin dotnet run --project src/SpookysAutomod.Cli -- esp create "ScriptHelpers.esp" --light # Create form list with weapons dotnet run --project src/SpookysAutomod.Cli -- esp add-form-list "ScriptHelpers.esp" "SH_AllWeapons" --add-form "MyWeapon01" --add-form "MyWeapon02" # In your script, declare: FormList Property AllWeapons Auto # Then auto-fill or manually set: --property AllWeapons --value "ScriptHelpers.esp|0x800"
Important Notes
- •Always use
--modelfor weapons and armor - without it they'll be invisible - •Always use
--effectfor spells and perks - without it they won't function - •EditorIDs must be unique - use a prefix like
MyMod_to avoid conflicts - •Light plugins (.esl) have a 2048 record limit but don't use a load order slot
- •Start-enabled quests require SEQ files - generate with
generate-seqcommand - •Use
--jsonflag for machine-readable output when scripting
JSON Output
All commands support --json for structured output:
dotnet run --project src/SpookysAutomod.Cli -- esp info "MyMod.esp" --json