As a result, I've decided to start working on some scripts to maintain farms of bind-mounts on my linux system that enable me to maintain named "virtually parallel" factorio installations. It occurs to me that although this will probably work and nicely meet my own needs, it will not benefit the vast majority of non-linux-using folks out there, and that a better solution would be if the game could effectively do this for me.
So, here is what I'm envisioning:
- The game maintains the installed mods as usual, mostly.
- A new pre-game UI entity is created: the "Mod Profile" is basically just a mod pack -- it describes a bundle of mods, all implicitly enabled.
- Internally, Mod Profiles contain a list of "Mod References", which, in turn, point either to private filesystem locations or public mod-portal uri's (or whatever uniquely identifies mods in the portal, i.e., for purposes of upgrade checking). They should be small enough to boil down to a snippet of i.e., xml, that could be conveniently exported to a clipboard or file and shared out-of-band.
- When saves are created, a corresponding Mod Profile is implicitly stored with the game.
- When saves are loaded, or upon manual user request, the Mod Profile is checked. If it differs from what is active in the game, the user is prompted to either: (a) keep the current mod configuration or (b) activate the requested mod profile. If the new Mod Profile contains invalid file-system references, the user is given the opportunity to fix this by providing the files and trying again, uninstalling the mod from the Mod Profile being loaded, or giving up the ghost and reverting to the Mod Profile as it stood before the load attempt. Mods which were active in the game but do not appear in the profile would remain installed but become disabled, and the latest version of missing portal mods would be automatically downloaded from the portal.
- When loading a profile/save a checkbox could be provided to enable automatic checking for out-of-date portal mods and upgrading during the Mod Profile activation process.