Skip to content

Repository files navigation

marth's Enchanting Overhaul (MEO)

A full replacement for Skyrim SE enchanting that turns enchantments into gems: socketed into your own equipment from a pouch menu anywhere, and leveled through use. Weapons, armor, and jewelry gain sockets; staves, bound weapons, and scripted artifacts are detected and left alone.

Built entirely from Linux with no Creation Kit and no xEdit: the ESP is generated byte-by-byte from Python, the gem catalog is parsed straight out of the game masters, and the native SKSE plugin (CommonLibSSE-NG) builds on GitHub Actions.

Status: 1.0 release candidate (v0.49.4). Feature-complete and validated in-game: the native socket core, all 54 gems (51 normal + 3 support), loot conversion, the installer with per-load-order calibration, the perk tree, menu skins, and controller support all ship and work. Remaining before 1.0.0: final documentation/portability audit and release engineering.

The idea

  • Enchantments become gems. Every generic enchantment collapses into a gem family (the catalog is generated from ~740 ENCH records in the game masters, deduplicated by effect). Weapon gems are on-hit effects; armor gems are constant effects. 51 normal families ship, each at levels I–V, plus 3 support gems (below) at tiers I–III.
  • Socket anywhere, lose nothing. The Gem Pouch power opens the socket menu with no crafting station. Socketing and unsocketing your own gems is always free, lossless, and reversible — an unsocketed gem returns as the same gem, carrying its own level and banked XP. Loose gems live in a hidden pouch container, not your inventory, so they never clutter it and can never be sold by accident (gems have no gold value, deliberately).
  • Gems level I → V through your kills, then a mastered gem births a fresh level-I copy of itself — the only way to replicate one. Enchanting stations get a second life: feed filled soul gems to a socketed gem for XP, or destroy a gem to reclaim part of its essence as a soul gem.
  • Enchanted loot converts. Generic enchanted loot — drops, chests, vendors, world items, all vanilla + Creation Club sources — converts on acquisition into the plain item with the matching gem socketed and active (~87% of generic enchanted gear on the development load order). Uniques, artifacts, and distinctive named sets keep their enchantments and their sockets are sealed.
  • Sockets scale with skill. Gloves are dual-socket by default; perks add a second linked socket to chest armor and weapons. A linked pair means both gems ride one item — and both earn XP from every kill.
  • Support gems (Focus, Conduit, Echo) do nothing alone but transform the normal gem they share a dual-socket item with — magnitude boosts, cross-domain adaptation, AoE procs, follower sharing.
  • Gems never drain. No charge, no recharging. The trade is that power comes from the gem's level, which you earn.
  • The item is the database. Socket state lives on each item instance and in the SKSE co-save — no Papyrus save bloat, no side-table to desync.

Feature summary (all shipped, in-game confirmed)

  • 51 gem families (15 weapon + 36 armor), each level I–V with birthing at V.
  • One combined instance enchantment per item; multi-socket with linked pairs.
  • The hidden Gem Pouch: socket/unsocket/swap anywhere via a native in-game menu (ImGui, drawn inside the game's own renderer), with one-click gem swap for filled sockets.
  • Loot conversion of pre-enchanted gear at spawn/acquire — all acquisition paths (corpses, chests, vendors, world refs, pickups) plus Creation Club content; uniques and artifacts preserved.
  • Per-load-order calibration: the installer derives gem magnitudes, recipe riders, and the conversion table from your winning records — nothing is hardcoded to the dev machine's list.
  • Rank ladders: gem levels climb your list's own enchantment rank ladder, and the ladder is explained in-game on the gem itself.
  • The MEO perk tree, installed into your load order's enchanting tree: Gem Attunement 1–5, Gem Cutter, Soul Feeder, the elemental affinities (Pyrestone / Froststone / Stormstone, +25% each), Facet Insight (+25% skill/attribute armor gems), Twinned Fitting, and Master Jeweler.
  • Support gems: Focus, Conduit, Echo (see "How to play").
  • Enchanting stations: soul feeding, gem destruction, and (by default) full station takeover — the gem menu replaces the vanilla enchanting menu.
  • Temper socketed gear without Arcane Blacksmith (MCM toggle, default on).
  • 2-of-a-kind stacking cap: at most two gems of the same effect count across all worn gear.
  • Circlets are socketable (their own biped slot, distinct from helmets).
  • 4 menu skins (Ebony & Brass, Dwemer Parchment, Soul Cairn, Quicksilver), switchable live from the MCM.
  • Full controller support in the gem menu (stick + d-pad navigation).

Requirements

No other mod is bundled or required. Developed under a Requiem-based list (LoreRim) and on vanilla SE (Steam Deck); the core targets vanilla SE + SKSE.

Installing

Each release zip is a complete MO2 mod — install it like any other. Then one post-install step, run through Synthesis:

  1. Enable the mod (left pane) and MEO.esp (right pane).
  2. In Synthesis, add the MEO patcher — Git Repositoryhttps://github.com/marthofdoom/MEO — and run your group. It reads your actual load order (nothing is hardcoded or assumed), and:
    • rebuilds your enchanting perk tree with its crafting perks replaced by MEO's gem perks, keeping any unrelated perks it finds (staff/wand utility perks and the like);
    • writes meo_calibration.json: per-list gem magnitudes, recipe riders, and the enchanted-loot conversion table, all derived from your winning records. Re-run the patcher after modlist updates.
  3. Enable the patcher's output plugin near the end of your load order (after anything that edits the enchanting perk tree). MEO.esp itself declares a single master (Skyrim.esm) and can sit anywhere. If another enchanting overhaul wins the tree anyway, MEO detects it, says so in MEO.log, and falls back to granting its perks by Enchanting skill.

MEO ships no executable. Synthesis is the only install path; the mod contains nothing runnable but the SKSE plugin itself. Older guides mentioning MEO.Installer.exe describe a retired path (dropped in v1.0.5).

How to play

There is no tutorial quest and no in-game primer — this section is the onboarding.

  1. Open the Gem Pouch — a lesser power granted on first load (the shout/power key also closes the menu). Pick an item, pick a gem, socket it. Free, anywhere, reversible.
  2. Kill things. Every kill feeds Gem XP to every socketed gem in your worn gear (and followers' kills feed their worn gems). Gems climb I → V; magnitude scales with level. Past level V a gem is Mastered and births a fresh level-I copy — the only replication there is.
  3. Loot converts itself. Generic enchanted drops arrive as plain gear with the matching gem already socketed — unsocket it for free and the gem is yours. Uniques and artifacts stay enchanted and sealed.
  4. Enchanting tables now open the gem menu (MCM-toggleable). There you can feed filled soul gems to a socketed gem for instant XP (petty/lesser/common/greater/grand = 1 / 2.5 / 5 / 12 / 40 Gem XP; the Soul Feeder perk doubles it) or destroy a gem to reclaim a tenth of its banked XP as a soul gem.
  5. Dual sockets and support gems. Gloves hold two linked gems from the start; perks unlock second linked sockets on chest and main-hand weapon. A support gem linked to a normal gem transforms it:
    • Focus — a linked elemental gem (Fire/Frost/Shock/Chaos) gains +20/35/50% magnitude by tier.
    • Conduit — a cross-domain adapter: an off-domain gem works through its item-domain sibling (e.g. an armor gem's theme expressed as the weapon-domain equivalent) at a 50/75/100% transfer ratio by tier.
    • Echo — in a weapon: the linked on-hit effect gains an area, hitting hostile/in-combat actors around the target; in armor: the linked gem's effect is shared with your current followers. Support gems level I–III (XP only while linked; they never birth). They are rare: a low-chance drop from boss/dragon kills at player level 15+, plus one guaranteed hand-placed copy each — Focus in Avanchnzel, Conduit in the Midden's Atronach Forge offering box, Echo in Ustengrav Depths.
  6. Perks. After the installer runs, your enchanting perk tree grants the MEO perks: Gem Attunement (magnitude, 5 ranks), Gem Cutter (+50% Gem XP), Soul Feeder (×2 feeding), the three elemental affinities and Facet Insight (+25% to their gem classes), Twinned Fitting and Master Jeweler (second linked sockets). Your Enchanting skill still matters: Gem XP gain scales with it, and Fortify Enchanting potions/gear scale it further.

MCM options

Everything gameplay-tunable is an MCM setting paired with a live-read INI (MCM/Settings/MEO.ini), applied on menu close — no restart:

  • Loot & Spawns: gem drop chance per kill, world-weapon socket chance, level-II spawn chance, enemy socketed-gear chance, vendor gem chance.
  • XP & Balance: Gem XP rate, boss/dragon XP multiplier, gem power scale, enchanting skill XP from souls.
  • UI: Gem XP notifications, "gem menu replaces enchanting table" toggle, temper-without-Arcane-Blacksmith toggle, gem menu style (4 skins).
  • Debug: "Grant all MEO perks (testing)" (bDebugAllPerks) — forces every MEO perk on for testing without spending points; toggling off reverts to what you actually hold.

A few extra tunables are INI-only (same file): support-gem drop chance, support-gem minimum player level, and the dev Gem-XP-per-kill base.

Known issues

  • Some floor items can vanish after save → main menu → load. A suspected engine save-culling issue, external to MEO; socketed items in inventory persist correctly across save/load.
  • Worn gem effects re-arm shortly after loading a save. The engine does not re-register instance enchantments on its own at load; MEO re-applies them automatically within a few seconds of the loading screen closing. If a weapon ever seems inert right after a load, wait a moment or re-equip.
  • World weapons on racks/displays and in NPC hands are not born pre-socketed — the world pre-socket roll applies to loose world references only. (Enchanted-loot conversion is separate and does cover containers, corpses, vendors, and pickups.)
  • A small tail of enchanted loot does not convert (~13% on the dev list): duration-anchored recipes not yet expressible as gem riders (e.g. some paralysis/soul-trap companions) and new-family effects with no gem coverage. These keep spawning as regular enchanted items. Uniques and artifacts are intentionally untouched.
  • MEO replaces enchanting for weapons and armor. Staves, wands, bound weapons, and scripted artifacts keep vanilla behavior end to end.

If something misbehaves, grab SKSE/MEO.log (in your My Games/.../SKSE/ folder) — the first line names the exact build, and every system logs what it does.

Architecture

  • MEO.esp — generated by MEO_GenerateESP.py (never hand-edited): gem MISC items, magic-effect markers, the pouch power + hidden pouch container, perk records, MCM quest. FormIDs are frozen once shipped; the generator is freeze-aware.
  • MEO.dll — CommonLibSSE-NG SKSE plugin, built on GitHub Actions (windows-latest, MSVC): the socket engine, created-enchantment stamping, kill-XP and leveling, loot conversion, support-gem linking, the in-game ImGui gem menu, perk effects, and versioned co-save serialization. Address-Library-based.
  • MCM — MCM Helper config paired with an INI; every gameplay tunable is live-editable in game.
  • Synthesis patcher — C# (Mutagen), built from this repo by Synthesis itself: resolves the load order, derives calibration + conversion from the winning records, and rebuilds the enchanting perk tree. The only install path; nothing runnable ships in the mod. (A standalone MEO.Installer.exe existed before v1.0.5 and is retired — releases must contain no executable, and tools/release_native.sh asserts it.)
  • Papyrus is compile-time only (one empty MCM stub), compiled under Proton wine from Linux.

Repo layout

MEO_GenerateESP.py   generates MEO.esp (never hand-edited)
native/              the SKSE plugin (plugin.cpp, CMake, vcpkg, CI-built)
installer/           C# Mutagen post-install patcher (CI-built win-x64 exe)
data/                gem catalog parsed from the game masters (JSON)
tools/               catalog parser, header generator, compile.sh, release script
Source/Scripts/      MCM stub source (compile-only)
Docs/                START AT Docs/INDEX.md
releases/vX.Y.Z/     immutable release archive (complete standalone zips)
CHANGELOG.md         version history

Documentation

Docs/INDEX.md is the entry point. The docs are written so any capable person or model can continue development from them alone: the design spec (DESIGN.md), balance math (BALANCE.md), verified engine mechanisms (ENGINE_NOTES.md), a binary-format guide, a debugging cookbook, and the in-game test guide.

FAQ

Doesn't socketing anywhere, for free, make enchanting trivial? Socketing is free; power isn't. A fresh gem starts at level I and only levels through kills made with it equipped — the investment moves from the crafting table into actual use. Your Enchanting skill still matters, more directly than in vanilla: it scales every gem's XP gain, and the perk layer adds magnitude, XP, and second-socket unlocks on top.

Isn't a high-level gem overpowered? It's earned. Reaching level V takes a long ladder of kill XP, and a mastered gem's one reward beyond its own power is birthing a single level-I copy. Gem drops follow a tier rarity curve (the strongest families are the rarest), the stacking cap stops single-stat pile-ups, and everything sits behind MCM sliders if your list needs different pacing.

Why don't gems ever drain? Deliberately. Charge maintenance is busywork that punishes using your best gear; MEO removes it and gates power behind gem levels instead. Soul gems keep a role — a better one: feed them to a socketed gem at any enchanting station for permanent Gem XP rather than a temporary refill.

What happens to enchanted loot and artifacts? Generic enchanted loot converts into socketed gear (the gem is the loot); uniques, artifacts, and named sets keep their enchantments, sealed. Items with MagicDisallowEnchanting, staves, bound weapons, and scripted artifacts are detected and excluded.

Will it work with my load order? MEO.esp declares a single master (Skyrim.esm) and references no external records; the DLL is Address-Library-based, and the installer calibrates the numbers to your list's winning records. Socket state lives in a versioned SKSE co-save that migrates itself forward across updates.

Credits

  • marth — design, direction, and all in-game testing
  • Claude (Anthropic) — implementation pair: native plugin, ESP generator, installer, catalog parser, tooling, and documentation
  • Reference sources this project learns from: Skyrim.esm itself, the sibling MRO toolchain, CommonLibSSE-NG, and powerofthree's Papyrus Extender

MIT licensed — see LICENSE.

About

Skyrim SE enchanting overhaul: enchantments become socketable gems that level through use. Python-generated ESP + native CommonLibSSE-NG SKSE plugin, catalog parsed from the game masters, CI-built from Linux.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages