Play Skyrim with Elden Ring's combat. You explore Skyrim's world, quests and NPCs, but your character fights by Elden Ring's rules: stamina, dodge rolls with i-frames, poise, light/heavy/charged attacks, weapon arts, flasks and runes.
Pre-alpha. Not playable yet. Both games run together and talk to each other every frame. Today, pressing Sprint in Skyrim makes the hidden Elden Ring character dodge, Elden Ring's stamina comes back into Skyrim, and rolling through an enemy's swing makes it miss. Turning that into real combat in Skyrim is next. Live progress:
STATUS.md· Plan:docs/ROADMAP.md· Change log:MODLOG.md
Skyrim and Elden Ring are my two favourite games. I saw the recent trend of people merging games (like SkyCraft, which runs Minecraft inside Skyrim) and wanted to try it with the two games I love most.
I've been using AI for a while, and this is my first attempt at merging games. I build it with Claude Code in my own way of working, which may be different from how other people use their AI. So expect bugs, rough edges and things that change a lot between versions.
Feedback, bug reports and ideas are welcome. You can find me on Discord: bennetteu.
This mod is built with Claude Opus 5.5 in Claude Code, guided by a CLAUDE.md written for this project (rules, safety limits,
build and test commands, and how to run both games for playtests).
Want Claude to work on this project the same way? Get the project's CLAUDE.md, copy it to the repository root
as CLAUDE.md, and start Claude Code in the repo.
Neither game is rewritten. Both run at the same time: Skyrim is the visible host, and Elden Ring runs hidden in the background as a combat engine. A native plugin in each game sends state back and forth through shared memory every frame (the "passthrough" design pioneered by SkyCraft).
flowchart LR
subgraph SKY["Skyrim (visible)"]
S["SkyrimXER.dll<br/>SKSE plugin, C++"]
end
subgraph ER["Elden Ring (hidden, offline via me3)"]
E["skyrimxer_er.dll<br/>me3 plugin, Rust"]
end
S -- "your input (dodge, later attacks)" --> E
E -- "stamina, HP, animation,<br/>i-frames, damage" --> S
| Skyrim owns | Elden Ring owns |
|---|---|
| World, collision, NPC AI, quests, dialogue, player movement | Stamina/FP/HP math, attack and roll timing, i-frames, poise, damage formulas, flasks, runes |
Details: docs/DESIGN.md.
- Elden Ring runs hidden at a full 60 fps while you play Skyrim (it keeps running when its window isn't focused).
- You move like an Elden Ring character. While the link is on, W/A/S/D walk and run with Elden Ring's own animations and speeds, turning toward where you look and press, on Skyrim's ground and walls. Left Shift: tap = roll, hold = sprint (Elden Ring's sprint, which costs stamina in combat). A roll flows straight back into the run. Turning the camera doesn't turn your character. Caps Lock (Skyrim's walk toggle) walks. Jumping, swimming, sneaking, riding, sitting and getting knocked down are plain Skyrim, and your character goes back to Elden Ring's movement as soon as they end. Attacking, blocking, casting and drawing a weapon also use Skyrim's own animations for now (Left Shift still rolls then).
- PS5 DualSense with Elden Ring's buttons (USB or Bluetooth, read by the mod itself, no Steam Input or DS4Windows needed). While the link is on: R1 attack, R2 heavy attack (hold to charge), L1 guard, L2 weapon art: these are Elden Ring's moves, played on your Skyrim character. Circle tap = roll, hold = sprint. Skyrim keeps what Elden Ring has no use for: Cross jump, Triangle talk/loot/open, Square draw/sheathe, L3 sneak, R3 camera view, Options Tween menu, Touchpad map, Create Journal (pause menu), d-pad up shout, d-pad down favorites, d-pad left/right hotkeys. In menus the pad works like an Xbox pad (Circle = back, L1/R1 or L2/R2 switch Journal tabs). On the mouse: left click = Elden Ring attack, right click = guard. A press with your weapon sheathed draws it first. An Xbox controller gets the same layout.
- Your Elden Ring swings hit Skyrim enemies. When the Elden Ring swing reaches its hit frames, whoever is in reach in front of you
takes Elden Ring's damage: your Elden Ring weapon's real attack rating (its upgrade level and your Elden Ring stats count), Elden Ring's
defense formula against the enemy's level and armour, scaled to Skyrim health so enemies take about as many hits as a comparable Elden
Ring enemy. Heavy hits build poise damage that staggers. Skyrim plays the blood, hit reaction, crime and kill like any hit.
SkyrimXER.ini→[Combat] fDamageScaletunes it (Skyrim's difficulty setting still multiplies your damage too). - Your Skyrim weapon picks the Elden Ring weapon and moveset: a dagger swings like an Elden Ring dagger, a sword like a longsword,
war axe → hand axe, mace → mace, greatsword → greatsword, battleaxe → greataxe, warhammer → great hammer. Better Skyrim materials
become higher Elden Ring upgrade levels (iron +0 up to about +25 for dragonbone), so they hit harder the Elden Ring way.
SkyrimXER.ini [Weapons]lets you pick other Elden Ring weapons. - Bows shoot like Elden Ring: with a Skyrim bow, hold R1 to draw (Elden Ring's longbow draw and hold, on your character) and let go to shoot: a real Skyrim arrow flies where the camera aims, using your equipped bow and arrows (Skyrim's damage for now). R2, L1 and L2 don't shoot with a bow (they're Elden Ring's other bow moves). Like in Elden Ring, the bow rides in your right hand while you walk and run and goes to the left hand to draw. Crossbows map to Elden Ring's light crossbow (not tested yet).
- Weapons sit in your hand the Elden Ring way: your right-hand weapon points where Elden Ring's does in every pose instead of Skyrim's own grip angle (checked with a sword; other weapons use the same rule).
- Your health is your Elden Ring HP. Every hit, arrow, spell, fall or potion changes your Elden Ring HP by the same share it would change your Skyrim health, and Skyrim's health bar shows your Elden Ring HP. Rolling through an attack (its i-frames) blocks damage of any kind. When your Elden Ring HP runs out you die in Skyrim, and loading a save refills it.
- Sprint in Skyrim (Left Shift) → the Elden Ring character dodges. Hold a movement key (W/A/S/D) while you tap Sprint and it rolls in that direction; tap Sprint alone and it backsteps. Elden Ring's own rules decide what happens. While the link is active, Skyrim's own sprint is off. F10 turns the link off and on (off = plain Skyrim).
- Elden Ring's state comes back to Skyrim every frame: stamina (a dodge costs stamina in combat), HP, animation.
Skyrim shows a short on-screen message after each dodge, e.g.
ER dodge: anim 27110 | stamina 136->124 | i-frames yes. - Rolls cost stamina only while your Skyrim character is in combat, like in Elden Ring (exploring, they're free).
- Skyrim's stamina bar is Elden Ring's stamina. It drains when you roll or sprint in combat and refills at Elden Ring's pace; when it's empty, Elden Ring decides you can't roll. F10 (link off) gives Skyrim its own stamina back.
- Your Skyrim character moves with the roll, smoothly every frame: the same distance and speed as Elden Ring's roll, in the direction you're looking + holding, stopped by Skyrim's walls (Elden Ring's walls don't matter: the hidden character never leaves its spot). Spamming chains rolls. Tap Sprint to dodge, hold it to sprint.
- Your Skyrim character plays Elden Ring's real roll animation. Elden Ring plays the roll on its hidden character, and its skeleton pose (spine, head, arms, legs) is copied onto your Skyrim character every frame, facing the way you roll. No animation files are converted or shipped. The body blends in and out over a few frames. The same goes for walking, running and sprinting.
- Roll i-frames protect you in Skyrim: during the window (about 0.45 s) in which the Elden Ring roll makes you invincible, enemy melee hits on your Skyrim character are cancelled whole (no damage, no stagger), and damage from anything else is refunded. Hits outside that window land as usual.
- Fail-safe: if either game closes, crashes or pauses, the other one notices within a moment and stops acting on stale input.
Not working yet: Footstep sounds may be missing while Elden Ring moves you, and Skyrim's NPCs still see your character facing the way it last faced in Skyrim (only the body you see turns); a jump can briefly flip the body to that old facing. Shields and left-hand weapons keep Skyrim's grip. The animation copies the main bones (fingers and toes follow their hands and feet); cloth and armour helpers follow Skyrim's own pose, and feet can slide a little (no foot placement yet). How much an enemy hit hurts still comes from Skyrim (your Skyrim armour and perks); Elden Ring armour doesn't count yet. Staves and spells have no Elden Ring counterpart yet. While the link is on, Skyrim spells and shield bashes aren't on any button (F10 gives them back), and Skyrim's Wait has no pad button (keyboard T works).
| Phase | Goal | State |
|---|---|---|
| P0 | Tooling and version research | ✅ done |
| P1 | Both plugins load and log | ✅ done |
| P2 | Shared memory link: handshake, heartbeats, crash fail-safe | ✅ done |
| P3 | Dodge in Skyrim → Elden Ring dodges → its stamina and i-frames come back | ✅ done |
| P4 | Rolls, i-frames, stamina and sprint drive the Skyrim player; controller support | 🔄 in progress (8/8 built, final playtest pending: Sprint = dodge, combat stamina, rolls move you, Elden Ring's roll animation plays in Skyrim; walking, running and sprinting are Elden Ring's; Skyrim's stamina bar shows Elden Ring's; roll i-frames make melee hits miss; DualSense with Elden Ring's buttons) |
| P5 | Damage both ways uses Elden Ring's math (poise, stagger) | 🔄 in progress (your Elden Ring swings hit Skyrim enemies with Elden Ring damage and poise; your Skyrim weapon picks the Elden Ring moveset; your health is your Elden Ring HP) |
| P6 | Elden Ring-style HUD | ⏳ |
| P7 | Runes from kills, leveling, flasks refill at "graces" | ⏳ |
| P8 | Visual polish and performance | ⏳ |
Where this could go after that (Shouts as weapon arts, Standing Stones as Sites of Grace, dragon boss fights with posture breaks, ...):
see "Beyond the roadmap" in docs/ROADMAP.md.
All development and testing happens on this exact setup. Other versions aren't supported yet.
| Version | |
|---|---|
| Input | PS5 DualSense over USB (Elden Ring's layout, see above) or keyboard and mouse. Skyrim keyboard: Sprint (Left Shift) = dodge, F10 = link on/off. |
| Skyrim Special/Anniversary Edition (Steam) | SkyrimSE.exe 1.7.104.0 |
| SKSE64 | 2.3.1 |
| Address Library for SKSE Plugins | v13 (All in One) |
| Elden Ring + Shadow of the Erdtree (Steam) | patch 1.17.1 (eldenring.exe 2.7.1.0) |
| me3 (Elden Ring mod loader) | 0.13.0 |
| OS | Windows 11 x64 |
Controller: Skyrim only understands Xbox-style (XInput) controllers, and Steam Input doesn't apply when SKSE starts Skyrim outside Steam. So the mod reads the DualSense itself and hands Skyrim an Xbox pad with the layout above. While the link is on, Skyrim is the only game that listens to the pad: Elden Ring gets just the moves Skyrim sends it. Tested wired (USB); Bluetooth is supported but untested.
You need your own legal copies of both games. This repository contains no game files.
- Offline only. Modded Elden Ring is launched only through me3, which starts the game without Easy Anti-Cheat and blocks matchmaking. Never use this mod with Elden Ring's online features.
- Your saves are separate. Elden Ring uses a dedicated save file (
skyrimxer.sl2). Your normalER0000.sl2is never touched. - Automatic backups. Every launch through the tools backs up both games' saves first.
Not yet: there's nothing playable to install. A one-step installer with version checks is planned once P4 is playable. Developers can build from source below.
Requires Visual Studio 2026 with C++ (its bundled CMake and vcpkg are used), Rust (stable, MSVC) and Git.
git clone --recursive https://github.com/BennettCode/Skyring.git
cd Skyring
mkdir local; copy config\paths.example.json local\paths.json # then edit the paths for your machine
powershell -ExecutionPolicy Bypass -File tools\setup-check.ps1 # checks versions and toolsEverything else is one command:
| Task | Command |
|---|---|
| Build + deploy + back up saves + launch both games + wait for both plugins | tools\dev.ps1 |
| Same, with the Elden Ring window visible (to watch it react) | tools\dev.ps1 -ErVisible |
| Only the Elden Ring side, restarting it, and wait for you to load in (prints the results) | tools\dev.ps1 -Target er -Game eldenring -Restart -WaitInWorld 20 |
| Build + deploy only | tools\dev.ps1 -NoLaunch |
| Close the games | tools\stop-games.ps1 |
| Protocol + link tests (no game needed, ~25 s) | tests\run-tests.ps1 |
Regenerate the protocol after editing protocol/schema/messages.toml |
cargo run -p protogen |
| Check Address Library ids before using them | tools\addrlib-check.ps1 -Id 208040 |
Run scripts with powershell -ExecutionPolicy Bypass -File <script>. More in tools/README.md.
| Path | What |
|---|---|
skse/ |
Skyrim plugin (C++23, CommonLibSSE-NG) |
er-plugin/ |
Elden Ring plugin (Rust, eldenring-rs) |
protocol/ |
Shared-memory protocol: one TOML schema → generated C++ header + Rust module |
tools/ |
PowerShell dev scripts, protocol generator, fake game peers for testing |
docs/ |
Design, roadmap, research notes (plain-language reverse-engineering notes; no game code) |
docs/ai/ |
The CLAUDE.md this project is built with (copy it to the repo root to use it) |
Built on SKSE, CommonLibSSE-NG, Address Library, me3 and eldenring-rs. Design and code patterns are borrowed (with thanks) from
other game-merge projects (SkyCraft's frame interpolation is adapted in skse/src/bridge/Timeline.cpp its hit call-site check in skse/src/hooks/PlayerHit.cpp and its hit apply in skse/src/bridge/Combat.cpp, FalloutCraft's bar mirror in skse/src/bridge/Stamina.cpp, both MIT): SkyCraft, FalloutCraft,
Killcraft, 2010-rust-rewrite-mashup
and the ideas of GTA San AnSkateas.
Full list and licenses: THIRD-PARTY-NOTICES.md.
Unofficial fan project. Not affiliated with or endorsed by Bethesda Softworks, ZeniMax, FromSoftware or Bandai Namco.
Offline/single-player only. Built with AI coding tools (Claude Code, Claude Opus 5.5).
License: GPL-3.0-or-later (see LICENSE). The Skyrim plugin links CommonLibSSE-NG, which is GPL-3.0-or-later.