Clone
3
adding games
Storm Dragon edited this page 2026-05-06 12:30:11 -04:00

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.sh for a Proton bottle with SAPI, .NET, XNA, and an nvdaControllerClient32.dll replacement.
  • Shadow Line.sh for UMU registry tweaks, per-app Windows version, localization file installation, and NVDA controller DLL replacement.
  • Entombed.sh for 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 nvda2speechd before 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.