Adding Games
Audiogame-manager now keeps each installer in its own file under the .install
directory in the main repository. The install menu is built automatically from
those files, so most new games need one new installer script and no edit to
audiogame-manager.sh.
The Installer File
Create a file named for the game:
.install/My Awesome Game.sh
The displayed menu title comes from the file name without .sh. Installers are
sorted alphabetically in the menu. To hide a game from the installer menu, put
#// on the first line of its installer script.
Installer scripts are sourced by audiogame-manager.sh, so they can use the
shared helper functions and variables such as download, get_installer,
install_wine_bottle, install_with_progress, add_launcher, cache,
WINEPREFIX, and game.
A Simple Wine Installer
For a normal downloadable setup file, the installer can be short:
download "https://example.com/my_awesome_game_setup.exe"
install_wine_bottle
wine "${cache}/my_awesome_game_setup.exe" /silent
add_launcher "c:\Program Files\My Awesome Game\mag.exe"
install_wine_bottle sets up the shared Wine environment. Current
audiogame-manager uses the system Wine and shared bottles, with win64 as the
default. Do not add old install_wine calls; that helper has been removed.
If the game needs extra winetricks verbs, pass them to install_wine_bottle:
install_wine_bottle vb6run dx8vb quartz
Common base dependencies such as speechsdk, sapi, corefonts, and
isolate_home are already part of bottle setup and are skipped when passed to
install_wine_bottle.
To set the Windows version for the game executable, export winVer before
calling install_wine_bottle:
export winVer="win7"
install_wine_bottle
add_launcher will apply that Windows version to the executable as a per-app
setting.
Compressed Files
Use install_with_progress for archive extraction so dialogs remain usable and
extractors do not wait on invisible overwrite prompts:
download "https://example.com/my_awesome_game.zip"
install_wine_bottle
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/My Awesome Game" "${cache}/my_awesome_game.zip"
add_launcher "c:\Program Files\My Awesome Game\mag.exe"
For archives that cannot be downloaded automatically, use get_installer. It
prompts the user to put the file in Downloads or Desktop and copies it into the
cache:
get_installer "my_awesome_game.zip" "https://example.com/my-awesome-game"
install_wine_bottle
install_with_progress unzip "Extracting game files..." -d "$WINEPREFIX/drive_c/Program Files/My Awesome Game" "${cache}/my_awesome_game.zip"
add_launcher "c:\Program Files\My Awesome Game\mag.exe"
SAPI and nvdaControllerClient.dll
The old advice to remove nvdaControllerClient.dll for 64-bit Wine is no longer
the default approach. Audiogame-manager now starts nvda2speechd when launching
games and refreshes NVDA controller DLLs in the shared Wine bottle before launch.
Only edit or replace nvdaControllerClient*.dll in a game installer when the
game specifically needs a bundled replacement. For current examples, see
A Hero's Call.sh and Shadow Line.sh.
UMU/Proton Installers
Some games work better through UMU/Proton. Those installers use helpers from
.includes/proton.sh.
Minimal pattern:
export game="My Awesome Game"
myAwesomeGameId="my-awesome-game"
myAwesomeGamePath='c:\Program Files\My Awesome Game\mag.exe'
download "https://example.com/my_awesome_game_setup.exe"
install_proton_bottle "$myAwesomeGameId"
umu-run "${cache}/my_awesome_game_setup.exe" /silent
stop_umu_bottle
add_umu_launcher "$myAwesomeGameId" "$myAwesomeGamePath"
Use install_proton_winetricks_verb for Proton-specific winetricks setup:
install_proton_winetricks_verb speechsdk
install_proton_winetricks_verb corefonts
UMU launcher entries use add_umu_launcher, not add_launcher. If the launcher
needs environment flags, pass them as extra arguments:
add_umu_launcher "$myAwesomeGameId" "$myAwesomeGamePath" "export PROTON_USE_XALIA=0"
For detailed current examples, see:
A Hero's Call.shfor a Proton bottle with SAPI, .NET, XNA, and annvdaControllerClient32.dllreplacement.Shadow Line.shfor UMU registry tweaks, per-app Windows version, localization file installation, and NVDA controller DLL replacement.Entombed.shfor a more involved Proton/.NET setup.
Custom Launch Behavior
Most games only need add_launcher or add_umu_launcher. If a game needs a
custom launch path, add it to the custom_launch_parameters function in
audiogame-manager.sh.
That section is still used for things such as:
- starting the Cthulhu WindowTitleReader plugin or the window-title fallback script,
- enabling translation helpers,
- launching from a specific working directory,
- starting
nvda2speechdbefore special launch handling.
Keep changes there narrow and tied to the specific game.
Contributing
Keep installer changes scoped to the new .install/<Game Name>.sh file unless
the game truly needs launcher-specific behavior. Before sending a pull request,
run the installer locally and verify the game installs and launches.