Description
Spike
This is basically an ADR template to discuss loadouts and how to overcome their limitations
Details:
So far we have been considering loadouts, but should we dismiss the idea of profiles?
What is the difference between loadout and profile:
- Loadouts have separate sets of mods, if a change is made to the contents of a mod, it isn't reflected in the other loadouts. It is important to note that if two loadouts have mods that contain the same exact files, the data in those files is not actually duplicated in our FileStore.
- Profiles on the other hand all have the same mods and contents of mods, what changes is the Priority order and the enabled state of the mods. They can be thought of as lightweight versions of loadouts.
Use cases for Profiles and Loadouts:
What problem are they trying to solve?
- Testing a different configuration of mods without breaking their existing setup
- Having different modded setups for different playthroughs of the game
- Having different modded setups for separate multiplayer playthroughs (need to have exact same mods as other players)
- Having a vanilla or close to vanilla setup playing the game without mods (e.g. check if a bug is caused by mods or by the game)
- Having different configurations for playing at high visual fidelity or higher framerates
- Trying a completely different modded setup using Collections or type of bulk sharing of curated modlist (e.g. wabbajack modlists)
- Debugging broken setup by disabling mods
- Creating "snapshots" of current setup, to fallback to before installing a bunch of more mods.
Loadouts:
Advantages:
- Cleaner and more isolated design, no chance of breaking other loadouts by apporting a change to one of them.
- Configuration changes made to one loadout don't interfere with the other loadouts, avoiding breaking them
- Updating a mod doesn't break other loadouts that still need the old version
- Possible to maintain completely separate game versions as separate loadouts, useful if e.g. multiplayer requires latest version, but none of the mods work on the latest version.
Disadvantages:
- Maintaining multiple loadouts up to date becomes more involved and time consuming, as each loadout needs to be updated.
- Common data like SaveGames is not shared between loadouts, this might be ok for some of the use cases, but extremely annoying for others. Need to move over this data.
- Game settings and configuration is not shared either, could also be desired behavior or be really annoying, if you have to update your button mappings on all 10 of your loadouts.
- Game updates would need to be applied to every loadout that the user doesn't intend to keep outdated.
- Adding a mod to one loadout does not add it to the other loadouts.
- Uninstalling a mod from one loadout doesn't uninstall it from all of them. If a user wants to completely remove the mod they have to do it from every loadout.
- Updating a mod in one loadout doesn't update it in all the others. This might be desired or not desired
To sum up, loadouts are great if you want isolation, as soon as you want to share something or update multiple loadouts, they become unwieldy and cumbersome. This could be solved with ui, but it would be a complicated problem to solve.
As a note for game updates, in some communities (e.g. bethesda games) not updating the game can some times be preferrable to updating it, to avoid mods breaking. But this should not be assumed as the preferred or desired behavior for most games, and even then at some point those users will still want to update as newer mods no longer support the old version of the game.
If the game developers release an update, there are usually good things in there such as bug fixes or new game features that the users want to have. Some games simply can't be played on older versions due to online components as well.
So in either case users will want to update the majority of their loadouts/profiles to the new game version, and with that also update all the mods to match support for that game version. This is where loadouts are the weakest I feel.
Profiles:
Advantages:
- Data such as game settings and SaveGames are shared by default between profiles
- Updating a mod can be done once for all profiles
- Updating the game can be done once for all profiles
- It is still possible to keep Saves and game settings separate per profile, by using separate mods and enabling different ones in different profiles
- Potentially this could apply to the game version as well, you could have two GameFiles mods, with different versions, and having different ones enabled in different profiles
- In theory it is possible to do everything that loadouts do, simply by duplicating mods
- Adding a mod to multiple profiles is automatic
- Removing a mod from multiple profiles is automatic
- Updating a mod on multiple profiles is automatic
Disadvantages:
- Less isolation means that it is much easier to break profiles than loadouts, by making changes to a different profile
- Spam of disabled mods that are being used in other profile but not in the current one
- Updating a mod by default updates it on all profiles, otherwise you need to install the new version as a new mod and disable the old one manually on all profiles or have a custom solution like Vortex (which is also quite bad).
- Managing all the different versions for each profile can become tiring.
- Vanilla profiles can still have hundreds of disabled mods in them
- Can only disable a mod from a profile, not remove it without potentially breaking other profiles. (Could be solved by allowing hiding mods)
To sum up, profiles have the advantage over loadouts that allow sharing data, while still allowing isolation through the creation of separate mods and having them disabled/enabled. This though causes other inconveniences such as spam of disabled mods, while still making it simple for users to break their profiles by changing one of them.
Some of the problems of Profiles could be alleviated by allowing users to hide mods from specific profiles (disabled mods that are specific to other profiles).
Other mod managers:
-
Vortex only supports Profiles. When updating mods, Vortex actually creates a new mod for the new version and disables the old version, allowing multiple profiles to keep different versions of the mod. It also annoyingly asks every single time whether you want to update the mod on all profiles or just the current one, which is the most annoying thing in the world.
-
MO2 supports profiles as the primary solution, but allows users to create multiple "instances" for the same game. Each instance has a completely separate set of downloads and mods. Advanced users may have two instances use the same Downloads folder for example, but there aren't many more supported operations between instances. Profiles are much more used than instances for the disk space implications. Instances are generally used to handle completely separate modlists (e.g. wabbajack modlists). Loadouts can be much more disk space efficient than instances due to how we use a single FileStore.
Proposed Approaches:
Loadouts are very restrictive due the the fact that they don't allow sharing anything between them, so keeping them up to date becomes very hard. While they solve a lot of the classical issues that profiles have, they come with their own set of limitations.
There are three options here I feel:
- 1: Implement both Loadouts and Profiles. A loadout can have multiple profiles. Loadouts offer the isolation, profiles offer the sharing. Would mean yet another level and having to explain to the users the difference, which might be hard, but might be a simple design apart from that, no multiple choices (e.g. remove from all loadouts or not) and consistent behavior.
- 2: Add optional sharing functionality between loadouts, this relaxes the idea that loadouts are completely isolated by allowing users to define what is shared between them. This creates the ui problem of showing which mods are shared and potential user confusion and inconsistent behavior between different mods of the same loadout. This could also increase code and behavior complexity.
- 3: Add functionalities and utilities to manually update and keep loadouts in sync, e.g. Install mod in all loadouts, uninstall from all loadouts, update mod on all loadouts, update game on all loadouts. Also needs a way to synch mod contents to multiple loadouts for Savegames, or game settings. These are all extra functionalities that need to be bolted on a model that works the opposite way, and it is a UI problem to present them to the user without swamping them with options and choices every time they take an action. The model would also still be that of isolation, so we are doing a lot of extra work in code to add these functionality instead of just adopting a shared model that would support the desired behavior directly and more efficiently.
Personally I like option 1. as it would offer a consistent behavior that is matched by how the model behaves underneath it and choices of Update on all loadouts etc are done by the user at the moment of using a loadout over a profile or the other way around.