Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

The Elder Scrolls IV: Oblivion Remastered

Oblivion Remastered is a hybrid: an Unreal Engine 5 presentation layer wrapped around the original Gamebryo simulation. modde models that split directly — the plugin recognises both the UE pak ~mods layout (.pak / .ucas / .utoc) and Bethesda-style .esp / .esm plugins, and its scanner walks both the UE pak directory and a Data/ plugin tree. The game id is oblivion-remastered.

Overall status: Partial. Deployment, scanning, conflict classification, Wine DLL-override detection, and save tracking all work, and the title is wired into the install pipeline (Steam/Heroic detection, Nexus, Wabbajack). What keeps it short of Done is the same ceiling as the other UE titles: no bespoke load-order editor for the ESP/ESM side, no pak-internal asset conflict resolution (conflicts are classified by filename, not by archive contents), and the install-method coverage is narrower than the mature Creation Engine games. See Supported games for the status baseline and Parity for the MO2/Vortex/Wabbajack comparison.

Engine and registration

FieldValue
Display nameThe Elder Scrolls IV: Oblivion Remastered
Game idoblivion-remastered
Engine familyUnreal4 (UE5 layout; shares modde’s UE pak handling)
Project folderOblivionRemastered/ (under the install root)
Steam App ID2623190
Steam install dirOblivion Remastered
Heroic (GOG/Epic)not registered
Nexus domainoblivionremastered
Wabbajack nameOblivionRemasteredoblivion-remastered
Save profilesenabled
Plugin systemyes (ESP/ESM are recognised alongside paks)

The plugin is its own GamePlugin implementation rather than a plain instance of the shared UE4 game type — that is what lets it carry the Bethesda plugin extensions, the Gamebryo-style save layout, and the blended content policy.

Install detection

modde finds the install through the launcher integration, keyed on the Steam App ID 2623190 (Steam install dir Oblivion Remastered). There is no registered Heroic/GOG/Epic mapping, so detection is Steam-first; a manually specified install path also works for non-Steam copies.

On Linux and macOS the game runs through Proton/Wine, so modde resolves the prefix-rooted paths (saves, and the Wine DLL overrides described below) under the Steam compat data tree (on Windows these are native paths, no prefix involved):

<steam>/steamapps/compatdata/2623190/pfx/drive_c/...

If you have never launched the game, that prefix will not exist yet. modde’s prefix-dependent lookups return “not found” in that case — launch the game once through Steam/Proton so Proton creates the prefix, then re-run.

Mod directory and deploy strategy

The deploy root for pak-style mods is the UE ~mods directory under the project’s Content/Paks:

<install>/OblivionRemastered/Content/Paks/~mods

The leading tilde is load-bearing: UE’s pak mounter sorts ~mods after the shipping paks, so mod paks override base content. modde deploys mods here the same way it deploys for every other game — a profile’s enabled mods are linked into the live game tree, and switching profiles re-links the set. Plugin-style content (.esp / .esm) belongs in the game’s Data/ tree, which the scanner also walks (see below).

What scanning finds

The scanner inspects two locations:

Content/Paks/~mods     # UE pak mods
Data                   # Bethesda-style plugins
  • Pak mods are discovered by grouping files that share a stem across the .pak / .ucas / .utoc extensions into a single mod (so a .pak and its sidecar .ucas/.utoc count as one mod, not three). These come from the paks-mods source location at confidence 0.9, with mod ids prefixed pak/.
  • Plugins are discovered as one mod per top-level .esp file directly in Data/ (source location Data, confidence 0.8, mod ids prefixed plugin/). No prefixes are ignored, so master files are listed too.

Each discovered mod also has a footprint used for matching against a known mod:

Mod id formFootprint path
pak/<stem>oblivionremastered/content/paks/~mods/<stem>.pak
plugin/<stem>data/<stem>.esp

Conflict classification

Oblivion Remastered uses modde’s pak collision classifier (archive extensions pak / ucas / utoc, default severity table). When two enabled mods write the same relative path, the severity is decided by file type:

Extension(s)Severity
esp, esm, dll, lua, wsDangerous
pak, ucas, utoc (as archive members)Dangerous
ini, json, xmlConfig
dds, png, jpg, tga, nifCosmetic

Conflicts are detected by overlapping deployed paths, not by cracking open pak archives — two paks that touch different in-game assets but never collide on a file path are not flagged. Texture/mesh collisions are reported but treated as cosmetic (last-writer-wins is usually fine); plugin and pak collisions are flagged as dangerous because they can change game logic or load behaviour. See Conflict detection for how severities drive the UI and resolution.

Save-breaking classification

Separately from path collisions, modde classifies each mod’s content to decide whether enabling or disabling it should invalidate save compatibility. For Oblivion Remastered:

  • Save-breaking extensions: esp, esm, pak, ucas, utoc, dll, lua
  • Save-breaking directories: plugins, logicmods
  • Cosmetic extensions: dds, png, jpg, tga, nif

This classification feeds the save-fingerprint logic below: only save-breaking mods contribute to the fingerprint, so swapping a texture pack will not trigger a false “incompatible save” warning, while toggling a plugin or a logic pak will.

Save tracking

Saves live under the Proton prefix, in the remastered Documents tree:

<steam>/steamapps/compatdata/2623190/pfx/drive_c/users/steamuser/Documents/My Games/Oblivion Remastered/Saves

The save tracker is non-recursive over that directory and matches two extensions, .ess and .sav, excluding *.bak. Every match is filed under the manual category and labelled by its relative filename. What the tracker records per save is its path, category, label, and last-modified time — it does not hash individual save files.

Save fingerprinting happens at the vault layer, and it fingerprints your mod set, not the save bytes: modde computes a SHA-256 over the sorted list of enabled save-breaking mods (per the classification above) and embeds it as a git commit trailer in each snapshot:

Mod-Fingerprint: a1b2c3d4e5f6
Save-Breaking-Mods: pak/some-overhaul, plugin/somequest

On restore, modde compares the snapshot’s fingerprint to your current profile and warns if save-breaking mods were added or removed since that save was taken. Oblivion Remastered opts into per-profile save layering, so each profile gets its own branch in the git-backed vault and profile switches capture/restore automatically. See Save management for the full vault, fingerprint, and restore workflow.

Plugins and load order

modde recognises the ESP/ESM plugin system (it is reported as a plugin-capable game) and scans Data/ for plugins, so plugin mods are discovered, classified as save-breaking, and conflict-checked by path. There is no dedicated load-order editor for the Bethesda side of this title in modde today — load order for plugins is managed by the game/community tooling you already use, and pak ordering is governed by UE’s ~mods mounting. Treat plugin ordering as out-of-band for now.

Installer specifics

When you add a downloaded archive, modde’s analyzer picks the layout:

Archive shapeDetected method
.pak / .ucas / .utoc files at the archive rootSingleFileSet — files stage straight into the resolved mod root
A top-level Data/ directoryStripContentRoot { root: "Data" } — the Data/ wrapper is stripped before staging

modde also recognises a bare archive layout for this game: an archive whose root contains any of the directories data, mods, content, paks, or ~mods (matched case-insensitively), or root files with the extensions esp, esm, pak, ucas, or utoc. That recognition lets it accept the loosely packed archives common on Nexus for this title without a wrapper directory.

FOMOD installers are handled by modde’s generic FOMOD pipeline when an archive ships a fomod/ModuleConfig.xml; that path is engine-agnostic and not specific to this game. There is no REDmod or SMAPI path here — those belong to Cyberpunk 2077 and Stardew Valley respectively. See FOMOD installers and the installer pipeline for the staging and uninstall model.

Gaming tools that matter here

Mod loaders, ReShade/ENB-style injectors, and upscalers for this title ship as proxy DLLs dropped next to the shipping executable in:

<install>/OblivionRemastered/Binaries/Win64

modde detects which proxy DLLs are present from this set and surfaces them as Wine DLL overrides (see below):

dwmapi   xinput1_3   d3d11   dxgi   version   winmm

That covers the usual suspects — generic ASI/loader proxies (version, winmm), UE-loader proxies (dwmapi, xinput1_3), and the graphics-swapper slots (d3d11, dxgi) used by ReShade and DLSS/FSR swappers such as OptiScaler.

This game does not ship a curated OptiScaler profile in modde (unlike Stellar Blade), so OptiScaler is installed and tuned manually as a dxgi/d3d11 proxy. The named-executable and proxy-DLL machinery is fully supported regardless — see Tools and executables for adding a launcher executable with arguments, working dir, env, and DLL overrides, and capturing its output.

Linux and Proton notes

These notes cover the game’s runtime on Linux and macOS, where Oblivion Remastered runs through Proton/Wine. On Windows the game runs natively — there is no Wine prefix or WINEDLLOVERRIDES, the save directory is its native Windows location, and proxy DLLs load directly. modde itself runs natively on all three platforms.

  • Run the game once first. The save directory and the proxy-DLL overrides are resolved relative to the Proton prefix at compatdata/2623190/pfx. If you have not launched the game, that prefix does not exist and prefix-rooted lookups will report “not found”.
  • DLL overrides are automatic from what is present. modde builds WINEDLLOVERRIDES from the proxy DLLs it finds in Binaries/Win64 (or in a mod’s staging dir), so Wine loads the native (mod) DLL instead of its built-in stub. You do not hand-write the override string.
  • ~mods ordering is a UE convention, not a modde trick. If a pak mod is not taking effect, confirm it landed in Content/Paks/~mods and not loose in Content/Paks.
  • Texture/mesh collisions are last-writer-wins. They are reported as cosmetic; if a visual mod loses to another, adjust which one deploys, since modde does not merge pak contents.

Worked example

CLI

# Detect installs and confirm the game is found
modde game list

# Install a Nexus pak mod by URL (domain resolves to oblivion-remastered)
modde mod install "https://www.nexusmods.com/oblivionremastered/mods/1234"

# Scan the live install for already-present mods (paks + Data plugins)
modde mod scan --game oblivion-remastered

# Inspect conflicts for the active profile
modde conflicts --game oblivion-remastered

# Adopt existing saves into a profile, then capture
modde save adopt --game oblivion-remastered --profile main
modde save capture --game oblivion-remastered --profile main -m "fresh start"

# Add OptiScaler (or any injector) as a dxgi proxy executable launcher
modde tool add-executable \
  --game oblivion-remastered \
  --name "Oblivion Remastered (modded)" \
  --working-dir "OblivionRemastered/Binaries/Win64"
modde exec --game oblivion-remastered "Oblivion Remastered (modded)"

home-manager profile snippet

A minimal modde profile for this title via the home-manager module:

{
  programs.modde = {
    enable = true;

    profiles.oblivion-remastered = {
      game = "oblivion-remastered";
      mods = [
        # Nexus URLs or local archive paths; paks land in
        # OblivionRemastered/Content/Paks/~mods, plugins in Data/.
        "https://www.nexusmods.com/oblivionremastered/mods/1234"
      ];
    };
  };
}

modde installs the same way for every game — through your platform’s native package manager, a direct download, Cargo, or, if you use Nix, the flake and its home-manager module. The home-manager module additionally lets you declare this profile as code. See Installation for the full set of install channels.

See also