winget install --id=OmsiLauncher.OmsiLauncher -e
Launcher to manage instances of the popular bus simulator OMSI 2
OMSI-Launcher is a management tool designed to streamline the process of handling multiple instances of OMSI 2, a popular bus simulation game. It offers users an efficient way to organize, configure, and launch different game setups.
Key Features:
Audience & Benefit:
Ideal for bus simulation enthusiasts, modders, and players who enjoy experimenting with different game configurations. By automating tedious tasks and enhancing organization, OMSI-Launcher helps users save time and focus on what matters most: immersive gameplay.
Available via winget for easy installation.
Archived: This project is not maintained anymore, feel free to fork and maintain further while respecting the license
WIP OMSI 2 game launcher & manager built using Kotlin and Compose.
WARNING: This is unstable software. Create Backups of your game files before you use it.
Omsi is optimized extremely poorly for usage with a lot of AddOns, as a single AddOn doesn't exist in a single location, it exists in a lot of locations (maps, Vehicles, Sceneryobjects, Splines, Scripts), this combined with OMSI seemingly checking your entire OMSI folder each time some UI refreshes the game gets increasingly more laggy the more addons/mods you add.
A simple solution is to not have as many addons installed, or having multiple installations of the game itself for different groups of addons.
This tool helps you to create multiple installation, without taking up more storage by symlinking common resources to a base installation of the game, therefore each individual instance just takes the space of the individual addons it has installed
Whilst it is theoretically possible to launch Omsi through Steam, it is recommended to let the launcher call Steam instead.
omsi-launcher elevation helper
is a tool we use to temporarily launch
a elevated process
for some file system
operations, this is required as Windows decided that it is necessary to be an administrator in order
to create symlinks. People interested in source code can
click here
When starting Omsi through Steam, Steam just calls \OMSI 2\Launcher.exe
it doesn't
care what that file
is.
So when starting an instance through the launcher it will create a symlink
at \OMSI 2
pointing to the
instance you want to launch, this way Steam will actually run \Omsi.exe
Nerdy explanation of how we store which AddOns are enabled for each instance
Steam keeps track of which AddOns you have installed at \steamapps\appmanifest_252530.acf
(252530
being
Omsi's Steam id)
Since Steam overwrites this file if it is a symlink, we needed a different approach.
Instead, when creating the base game installation we know copy the base manifest into \game\manifest.acf
,
each time we create a new instance, we copy that file into \manifest.acf
Then if you launch an instance we check:
\OMSI 2
already symlink to that instance
appmanifest_252530.acf
into \manifest.acf
appmanifest_252530.acf
to the resolved instanceappmanifest_252530.acf
appmanifest_252530.acf
That way no only OMSI will only see the selected AddOns (as they're the only addons physically present in the instance folder) also Steam will show them and not download any additional ones
Base game: When starting the launcher for the first time, it asks you to set up your "base game folder", this will contain the actual base game and addons you want to share between all other addons (OmniNavigation, bus DLCs)
Individual Instance: Each instance of Omsi has its own installation folder, during the creation of the instance, the launcher will go through all contents of the base game folder and create a symlink pointing to the base game. The launcher will only symlink files and not directories, those will instead be created and their contents will be symlinked. Using this method addon installers can write to base game locations, without writing their contents to the base game folders
This documents internal configuration files of the launcher, if you are not a dev working on the project, just stop reading
%APPDATA%\omsi-launcher\config.json
: This currently only stores the actual installation location
of the launcher, set
during setup
\instances.json
: This stores all set instances with their launch flags and patch
version
Trivia we found whilst making this
\OMSI 2
to wherever you want and Steam will launch it.OMSI 2
directory and Omsi will load everythingHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Valve\Steam
Value: InstallPath
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\aerosoft\OMSI 2
Value: Product_Path