Workshop save folder name vs. SessionName mismatch breaks mod Storage lookup (SE1)

cptnoname shared this bug 3 hours ago
Submitted

First Observed: Update 1.207 (persists through subsequent updates as of 28 July 2026)

Category: Save/Load, Workshop worlds, Mod API

Severity: High for worlds that ship per-save mod configuration in `Storage\`

When a player starts a new local instance of a subscribed workshop world, the game creates a save folder named after the workshop title, but writes <SessionName> in Sandbox.sbc and Sandbox_config.sbc with a (Workshop) prefix. These names diverge immediately.

Mods that store per-world settings under Storage\ (via IMyUtilities / WorldSavePath) look in a path derived from <SessionName>, not the actual folder on disk. They fail to find the author's bundled configuration, create a fresh Storage\ tree with defaults, and gameplay differs from what the world author intended (e.g. Realistic Gravity / Real Orbits speed limits).

This is a vanilla game bug, not a mod bug.


Here's the mismatch bug chain:


`Sandbox.Engine.Networking.MyWorkshop`:

line 50-57: source of Workshop prefix


public static MyWorkshopPathInfo CreateWorldInfo()
{
   return new MyWorkshopPathInfo
  {
      Path = m_workshopWorldsPath,
      Suffix = m_workshopWorldSuffix,
      NamePrefix = "Workshop" // source of Workshop prefix
  };
}

1. Mismatch is introduced when the save is created:

`Sandbox.Engine.Networking.MyWorkshop.TryCreateWorldInstanceBlocking`:

1722: string text = MyUtils.StripInvalidChars(world.Title);
...
1734: sessionPath = MyLocalCache.GetSessionSavesPath(text, contentFolder: false, createIfNotExists: false); // creates folder from world.Title (NO prefix)
...
1784: myObjectBuilder_Checkpoint.SessionName = $"({pathInfo.NamePrefix}) {world.Title}"; // NamePrefix = "Workshop" from CreateWorldInfo()
...
1791: MyLocalCache.SaveCheckpoint(myObjectBuilder_Checkpoint, sessionPath);
Folder on disk: `Proper Solar System with Asteroid Belt, Trojans (Real Solar Systems World)`

<SessionName> in sbc: `(Workshop) Proper Solar System with Asteroid Belt, Trojans (Real Solar Systems World)`


2. On load, WorldSavePath is overwritten to follow SessionName, not the actual folder:

`Sandbox.Game.World.MySession.Load`:

3194: Static = new MySession
      {
         // ...
3200:    CurrentPath = sessionPath // folder actually written by the game, no prefix
      };
      // ... load sector data from sessionPath ...
3244 Static.WorldSavePath = Path.Combine(MyFileSystem.SavesPath, checkpoint.SessionName.Replace(':', '-')); // WorldSavePath is overwritten to follow SessionName, but CurrentPath is the actual folder written by the game, no prefix
line 503-514: setting CurrentPath also sets WorldSavePath (they're linked)

public string CurrentPath
{
   get
   {
      return m_currentPath;
   }
   set
   {
      m_currentPath = value;
      WorldSavePath = value;
   }
}

3. Mods use `WorldSavePath`, not `CurrentPath`

`Sandbox.ModAPI.MyAPIUtilities` — all per-world storage goes through `WorldSavePath`:

219: TextReader IMyUtilities.ReadFileInWorldStorage(string file, Type callingType)
     {
        // ...
225     string text = Path.Combine(MySession.Static.WorldSavePath, "Storage", StripDllExtIfNecessary(callingType.Assembly.ManifestModule.ScopeName));

So, for instance, Real Orbits looks in:

`...\Saves\<steamid>\(Workshop) Proper Solar System... \Storage\2609118808.sbm_RealisticGravity\Config.xml`
While the workshop-copied config actually lives in:


`...\Saves\<steamid>\Proper Solar System... \Storage\2609118808.sbm_RealisticGravity\Config.xml`
The mod doesn't find it, creates a fresh `Storage\` tree with defaults (`<GlobalMaxSpeedMultiplier_LargeGrid>-1</GlobalMaxSpeedMultiplier_LargeGrid>`), and the player gets vanilla 100 m/s.

It also breaks campaign data for Proper Fleet Encounters, possibly breaks filters & blacklists in MES, custom configs in AiEnabled/CrewEnabled, world-author-configured consumable item returns in BB's Consumable Loot Items, and any other world-author-set custom (non-default) mod settings that are saved within any submitted community world.

Replies (2)

photo
1

Steps to reproduce

  1. Subscribe to a workshop world that includes mod Storage\ data (example: Proper Solar System https://steamcommunity.com/sharedfiles/filedetails/?id=3389510302).
  2. From the main menu, start a new local instance of that workshop world.
  3. After the world is created, exit to the main menu (or inspect files while the game is closed).
  4. Compare:The save folder name under %AppData%\SpaceEngineers\Saves\<SteamID>\The <SessionName> value inside Sandbox.sbc and Sandbox_config.sbc
  5. Load the world and observe mod behavior that depends on per-save config (e.g. large-grid speed cap). There are several other things broken by this, but this is the easiest of the custom config settings to quickly check.

photo
1

Workaround that currently works:

  1. Save and Exit the world immediately after loading.
  2. Enter the `Load Game` menu.
  3. Click "Edit Settings"
  4. Rename the save. This aligns both the folder name and the <SessionName>. The original author's custom settings are already present in the actual save folder, but the mods cannot find them, because they use WorldSavePath, not CurrentPath.

Leave a Comment
 
Attach a file