Boss rematches in the style of Sekiro's "Reflections of Strength". Rest at any site of grace, choose Reflections of Battle and fight the main bosses of the base game and Shadow of the Erdtree as often as you like. The world doesn't change: no rewards, no runes, no consequences.
- A new site of grace menu entry with a boss list, sorted alphabetically in the game's language.
- 31 fights: every remembrance boss (base game and DLC), plus Margit, the Godskin Duo, Loretta and Bayle. Radagon and the Elden Beast: Radagon alone, the Elden Beast alone, or the full fight with both, as in the original game.
- Every boss is available right away, even if not defeated yet. DLC bosses are listed only if you own the DLC.
- You appear in front of the arena's fog and can buff in peace. The fight starts when you walk through the fog (or, as in the original game, walk up to the boss).
- Intro cutscenes play in every fight.
- Win or lose, you return to the site of grace you started from. No runes lost, no rewards. A boss dead in your world stays dead, and a living one stays alive.
- Options at the top of the list:
- Journey: the NG cycle (NG … NG+7) that the bosses' strength and health are scaled to.
- Scadutree Blessing (DLC only): the blessing level used in DLC boss fights.
- The mod's texts are available in all 15 game languages (Arabic uses English).
- ELDEN RING on Steam,
eldenring.exeversion 2.7.2.0. Other versions may break or crash. - Mod Engine 2 2.1.0.0 or newer.
- Shadow of the Erdtree is optional.
- Offline only. Mod Engine 2 starts the game without Easy Anti-Cheat. Never go online with mods.
- Back up your saves:
%APPDATA%\EldenRing. - Extract Mod Engine 2 anywhere, for example to the desktop.
- Extract the mod's zip into the Mod Engine 2 folder, so that the
BossReflectionsfolder sits next tomodengine2_launcher.exe. Keep the nameBossReflections. - Start Steam, then start the game with
BossReflections\launch_bossreflections.bat. - Rest at a site of grace and choose Reflections of Battle.
Full instructions, the special fights (Fortissax, Rykard, the Putrescent Knight, Radagon) and troubleshooting are in README_EN.txt inside the zip.
Compatibility: the mod replaces regulation.bin, event\common.emevd, the arena maps and events, the grace menu and the menu texts. Mods that change the same files (most balance mods, randomizers) won't work together with it. Seamless Co-op is not supported.
Needs a UXM-unpacked game, DarkScript3, WitchyBND (Paramdex defs), Smithbox's SoulsFormats and ESDLang sources and the .NET SDK. Their paths are set at the top of build.ps1, tools\gen_bosses.ps1 and tools\gen_scaling.ps1.
powershell -File build.ps1 # builds .\mod from the game files + src\
powershell -File package.ps1 # packs dist\BossReflections_v<version>.zip
src\bosses.json: the bosses. Generated bytools\gen_bosses.ps1from the research scriptstools\scan_*.ps1/pick_spawns.ps1; edit the generator's tables and rerun it.src\event\reflections.js: the reflection logic (common.emevd events 7980000–7980013).src\param\*.rows.xml: our param rows (SpEffects, the "Begin the battle" action button, Rykard's weapon item lot).SpEffectParam.scaling.rows.xmlandsrc\scaling.jsoncome fromtools\gen_scaling.ps1(rerun it when bosses.json changes).tools\EsdUtil: grace menu (ESD), menu texts (FMG), emevd merge.tools\MsbDump: map dump, spawn points, regions and assets added to maps, regulation.bin rows.dist_template\: the launcher, config, language picker and readmes shipped in the zip.
| field | meaning |
|---|---|
| key | id used in logs |
| map, mapId | boss map, as name and as area/block/region/index |
| bossEntity | character whose death sets defeatFlag; with nameId used for the fallback AI/health bar |
| anchorEntity | character present from the start of the fight (phase one), for "player is at the boss" checks |
| defeatFlag | vanilla "boss defeated" flag; its state is saved before the reflection and restored after |
| nameId | NpcName entry: menu text and health bar name |
| banner | TextBannerType of the vanilla defeat banner, shown on a win |
| finalPhaseFlag | vanilla flag on only in the last phase, for bosses whose last-phase character hits 1 HP earlier (Malenia); 0 = none |
| fogFlag | vanilla "player passed the fog" flag; with the player in startRegion it starts the vanilla fight |
| startRegion | vanilla region the fight start waits for |
| fallbackAi | also enable bossEntity's AI + health bar ourselves (only for single-entity bosses) |
| spawn | player spawn point added to the map (entity id, existing spawn point to copy, position, rotation); existing: true = a vanilla spawn point used as is |
| spawn.map, spawn.cloneMap | optional: the spawn point is in another map than the boss (Fire Giant, Radahn), and the map to copy a player spawn point from when that one has none |
| radius | optional "player is at the boss" radius (default 200 m) |
| presenceDelay | optional, seconds the arrival waits for the boss to appear (default 2; Fortissax 60, after the dream cutscene) |
| resetFlags | optional, up to 2 vanilla progress flags switched back off after the reflection (Fortissax's dream flags) |
| hide | characters / assets hidden during the reflection: the map's graces plus things vanilla shows for a defeated boss |
| realDeath | false for all: the boss never dies for real (a real death awards its runes) |
| deathAnim | animation played by the boss on the win (a000_0060xx; 0 = none) |
| clearFlag | optional vanilla "fight started once" flag cleared before the warp (Loretta) |
| variants | optional map variants the boss's entities are copied into (Romina: m61_44_45_10) |
| tempOff | optional vanilla flags off during the reflection and restored after (flag, value + saved = spare flags holding its state): intro cutscene "seen" flags, the Elden Beast's "ending reached" |
| giveWeapon | optional weapon given on arrival through our item lot and taken back after (id, itemLot, given = spare flag): Rykard's Serpent-Hunter |
| fogWalls | optional fog wall assets + SFX forced on; early: 0 = once the fight started, 1 = on arrival, a flag = on arrival if it's on |
| prepFog | optional: the player spawns 2.5 m in front of this fog wall (0 = no fog: the fight starts when walking in) to buff; leaving the region (sphere or cylinder) before the fight ends the reflection; trigger = entity with the "Begin the battle" prompt (Fortissax) |
| dlc | Shadow of the Erdtree boss: listed only when the DLC is owned (flag 6951); left out of the build if its map isn't installed |
| exitSpawn | vanilla spawn point near the arena, used if the return to grace fails |
| flags | request (set by the menu), active, warping, loaded (set by the boss map on load), wasDefeated (world state at the start) |
- No boss dies for real in a reflection: it is kept immortal and the win counts at 1 HP in its last phase, so the vanilla defeat event (remembrance, world and quest changes, autosave, the ending) never runs.
- NG+ / Scadutree Blessing options: the choice is kept in flags 10000900 (custom NG on) + 10000901–908 (NG…NG+7) and 10000910 (custom blessing on) + 10000911–931 (level 0–20). On arrival, events 7980020 (every boss) / 7980021 (DLC bosses) add SpEffects that turn the world's NG cycle / the character's blessing level into the chosen one (events generated by
tools\scaling_events.ps1). - Menu language: the talk script can't tell the game language, so build.ps1 makes one menu per language (
mod\lang\<lang>, sorted alphabetically in that language), andselect_language.ps1, run by the launcher, copies the one for the Steam language intomod\script\talk. - Mod Engine 2 can't resolve a relative mod path, so the shipped launcher rewrites
config_bossreflections.tomlwith the absolute path at every start.