First pass at much needed wiki updates.
+8
-4
@@ -6,10 +6,11 @@ If you are on an x86_64 machine you will need to make sure multilib is enabled.
|
|||||||
|
|
||||||
If your computer is x86_64, edit your /etc/pacman.conf file as root and uncomment the multilib repository. Note that there are both multilib and multilib testing repositories, you want just multilib, and not the testing repository.
|
If your computer is x86_64, edit your /etc/pacman.conf file as root and uncomment the multilib repository. Note that there are both multilib and multilib testing repositories, you want just multilib, and not the testing repository.
|
||||||
|
|
||||||
Before installing packages, make sure repositories are all updated with the command:
|
Before installing packages, make sure the system and package database are updated
|
||||||
|
with the command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pacman -Syy
|
pacman -Syu
|
||||||
```
|
```
|
||||||
|
|
||||||
## Packages
|
## Packages
|
||||||
@@ -17,9 +18,13 @@ pacman -Syy
|
|||||||
Here is a list of packages required for both audiogame-manager and games installed by it to work optimally:
|
Here is a list of packages required for both audiogame-manager and games installed by it to work optimally:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pacman -S curl dialog cabextract gawk dos2unix unzip w3m wine winetricks wine_gecko wine-mono sdl2 ncurses mpg123 libpulse libpng libjpeg-turbo gnutls alsa-plugins alsa-lib mesa openal xz gst-plugins-bad gst-plugins-good gst-plugins-ugly gst-libav p7zip sox sqlite3 translate-shell unrar xclip
|
pacman -S curl dialog cabextract gawk dos2unix unzip w3m wine winetricks wine_gecko wine-mono umu-launcher yad ocrdesktop qjoypad xdotool sdl2 ncurses mpg123 libpulse libpng libjpeg-turbo gnutls alsa-plugins alsa-lib mesa openal xz gst-plugins-bad gst-plugins-good gst-plugins-ugly gst-libav 7zip sox sqlite3 translate-shell unrar xclip perl
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`umu-launcher` is needed for games that use the UMU/Proton backend. `yad` is used
|
||||||
|
for graphical dialogs when available. `ocrdesktop` and `qjoypad` are optional but
|
||||||
|
recommended by the dependency checker.
|
||||||
|
|
||||||
In addition, if you are on an x86_64 machine, you will need the following lib32 packages:
|
In addition, if you are on an x86_64 machine, you will need the following lib32 packages:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -108,4 +113,3 @@ Check dependencies:
|
|||||||
```bash
|
```bash
|
||||||
./audiogame-manager.sh -c
|
./audiogame-manager.sh -c
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+9
-5
@@ -3,14 +3,14 @@ Here are instructions for setting up audiogame-manager on several distros. If yo
|
|||||||
|
|
||||||
## 2025 Tag
|
## 2025 Tag
|
||||||
|
|
||||||
Audiogame-manager has undergone nearly a complete rewrite in order to keep up with changes in wine. If you are happy with your current gaming setup and do not have latest wine, at the time of writing, 10.13, you can check out the 2025 tag:
|
Audiogame-manager has undergone nearly a complete rewrite in order to keep up with changes in Wine. Current development expects a recent system Wine and also supports some games through UMU/Proton. If you are happy with your current gaming setup and do not want to migrate to the newer bottle layout, you can check out the 2025 tag:
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
cd audiogame-manager
|
cd audiogame-manager
|
||||||
git checkout 2025
|
git checkout 2025
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that the tag means no further development will be done. No games added, no bugs fixed. Basically this is done for those who have older, less up to date systems with working game installs who do not want to migrate to the new version.
|
Note that the tag means no further development will be done on that code line. No games added, no bugs fixed. Basically this is done for those who have older, less up to date systems with working game installs who do not want to migrate to the new version.
|
||||||
|
|
||||||
|
|
||||||
## End of Mac Support
|
## End of Mac Support
|
||||||
@@ -26,13 +26,17 @@ Please note that this will be a static checkout, so new games will not be added.
|
|||||||
|
|
||||||
## Installing Extra Software
|
## Installing Extra Software
|
||||||
|
|
||||||
If you want to install something into a wine bottle created by audiogame-manager, you will need to launch it from within the wine bottle itself. This is because the bottles are sand boxed now. So please copy the software to:
|
If you want to install something into the shared Wine bottle created by audiogame-manager, copy the software to:
|
||||||
|
|
||||||
~/.local/wine/<bottle-name>/drive_c/
|
~/.local/wine64/drive_c/
|
||||||
|
|
||||||
Then, to run the installer or software, you would do something like the following:
|
Then, to run the installer or software, you would do something like the following:
|
||||||
|
|
||||||
WINEPREFIX=~/.local/wine/<bottle-name>/ wine "c:\<software name>.exe"
|
WINEPREFIX=~/.local/wine64 wine "c:\<software name>.exe"
|
||||||
|
|
||||||
|
Some newer games use UMU/Proton bottles instead. Those are stored under:
|
||||||
|
|
||||||
|
~/.local/share/audiogame-manager/protonBottles/<game-id>/
|
||||||
|
|
||||||
|
|
||||||
Want to donate to audiogame-manager? You can do so by becoming a [Stormux patron](https://patreon.com/stormux).
|
Want to donate to audiogame-manager? You can do so by becoming a [Stormux patron](https://patreon.com/stormux).
|
||||||
|
|||||||
+113
-76
@@ -1,118 +1,155 @@
|
|||||||
# Adding Games
|
# Adding Games
|
||||||
|
|
||||||
Because of the size of the audiogame-manager.sh file, adding new titles may seem like a daunting task. For most games, however, the process is not terribly difficult. The majority of them require two edits.
|
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
|
||||||
|
|
||||||
### The Menu Section
|
Create a file named for the game:
|
||||||
|
|
||||||
You need to add the game title as it appears in the menu when you launch audiogame-manager.sh. Let's use the fictitious title "My Awesome Game" in the following example.
|
```bash
|
||||||
|
.install/My Awesome Game.sh
|
||||||
|
```
|
||||||
|
|
||||||
First, find the list of games. This is easily done by searching for the comment:
|
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.
|
||||||
|
|
||||||
# The list of games available for installation.
|
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`.
|
||||||
|
|
||||||
You will notice an array called gameList. Add the title, in quotes, to the array. Use the existing list as a guide to keep things formatted similarly. Games are approximately alphabetized, although I did add some of them prior to coffee, so that doesn't always hold true. So for our example, the entry here would be:
|
## A Simple Wine Installer
|
||||||
|
|
||||||
"My Awesome Game"
|
For a normal downloadable setup file, the installer can be short:
|
||||||
|
|
||||||
That's it for the menu. It's worth noting that to disable a game from showing up in the installation menu, just add a # to comment out the entry.
|
```bash
|
||||||
|
download "https://example.com/my_awesome_game_setup.exe"
|
||||||
### Installing the Game
|
|
||||||
|
|
||||||
In most cases, the process to install a game is straight forward. If the game in question is self-voiced, it is very easy in deed. The only difficult part may be finding out what, if any wine packages are needed. Continuing with the example game, let's say for the time being that it is a self-voiced game that is 32 bit and will work on any version of wine, so we don't care about setting it.
|
|
||||||
|
|
||||||
Once again, you can search for a string to get you to the top of the installation section. As before, the installers are approximately alphabetically ordered. So moving down to the "M" section, let's add the installer. find the string:
|
|
||||||
|
|
||||||
# Install game based on the selection above.
|
|
||||||
|
|
||||||
Then in the appropriate area, add the installer code. The example will have comments explaining what's going on.
|
|
||||||
|
|
||||||
# Add the game title to the case statement
|
|
||||||
"My Awesome Game")
|
|
||||||
# Set up the wine prefix in ~/.local/wine/my-awesome-game
|
|
||||||
install_wine_bottle
|
install_wine_bottle
|
||||||
# Get the game's installation file
|
|
||||||
download "http://.example.com/my_awesome_game_setup.exe"
|
|
||||||
# run the installer with the silent flag so that it installs without any prompts which are inaccessible to screen readers on Linux.
|
|
||||||
wine "${cache}/my_awesome_game_setup.exe" /silent
|
wine "${cache}/my_awesome_game_setup.exe" /silent
|
||||||
# Create the launcher entry so audiogame manager knows how to start the game.
|
|
||||||
add_launcher "c:\Program Files\My Awesome Game\mag.exe"
|
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.
|
||||||
|
|
||||||
### Dealing with nvdaControllerClient.dll and SAPI
|
If the game needs extra winetricks verbs, pass them to `install_wine_bottle`:
|
||||||
|
|
||||||
Note that currently the 64 bit wine version of SAPI does not work. Games that include the nvdaControllerClient will work, but in order for wine to process the speech with SAPI, the dll file needs to be removed. Let's change the above example because the imaginary developer of My Awesome Game got tired of recording all of those voice clips and changed the game to use SAPI instead. Here is the updated code with comments.
|
```bash
|
||||||
|
install_wine_bottle vb6run dx8vb quartz
|
||||||
|
```
|
||||||
|
|
||||||
# Add the game title to the case statement
|
Common base dependencies such as `speechsdk`, `sapi`, `corefonts`, and
|
||||||
"My Awesome Game")
|
`isolate_home` are already part of bottle setup and are skipped when passed to
|
||||||
# Set up the wine prefix in ~/.local/wine/my-awesome-game and install speechsdk
|
`install_wine_bottle`.
|
||||||
install_wine_bottle speechsdk
|
|
||||||
# Get the game's installation file
|
To set the Windows version for the game executable, export `winVer` before
|
||||||
download "http://.example.com/my_awesome_game_setup.exe"
|
calling `install_wine_bottle`:
|
||||||
# run the installer with the silent flag so that it installs without any prompts which are inaccessible to screen readers on Linux.
|
|
||||||
wine "${cache}/my_awesome_game_setup.exe" /silent
|
```bash
|
||||||
# Remove the nvdaControllerClient.dll file
|
export winVer="win7"
|
||||||
# Note that it may just becalled nvdaControllerClient.dll or nvdaControllerClient32.dll
|
install_wine_bottle
|
||||||
find "${WINEPREFIX}" -type f -name "nvdaControllerClient32.dll" -exec rm -fv "{}" \;
|
```
|
||||||
# Create the launcher entry so audiogame manager knows how to start the game.
|
|
||||||
|
`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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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"
|
add_launcher "c:\Program Files\My Awesome Game\mag.exe"
|
||||||
;;
|
```
|
||||||
|
|
||||||
In some cases, however, this will cause the game to not function at all. For these cases, we have a fake dll that can take the place of the original. You just need to make sure the fake dll is downloaded during game installation and then move it into place. For an example of how this works, please take a look at the "A Hero's Call" entry in audiogame-manager.sh.
|
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:
|
||||||
|
|
||||||
### Dealing with compressed files
|
```bash
|
||||||
|
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"
|
||||||
|
```
|
||||||
|
|
||||||
This is actually pretty easy. Just change the wine command to the command to extract the file to the proper location. If the "My Awesome Game" developer got tired of dealing with setup files and switched to zip, for instance, the new line would look like this.
|
## SAPI and nvdaControllerClient.dll
|
||||||
|
|
||||||
unzip -d "$WINEPREFIX/drive_c/Program Files" "${cache}/my_awesome_game.zip"
|
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.
|
||||||
|
|
||||||
Some games just extract to the current directory, which can make "Program Files" all cluttered. If you find this is the case, just add a directory name on to the end and it will be created, like so.
|
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`.
|
||||||
|
|
||||||
unzip -d "$WINEPREFIX/drive_c/Program Files/My Awesome Game" "${cache}/my_awesome_game.zip"
|
## UMU/Proton Installers
|
||||||
|
|
||||||
|
Some games work better through UMU/Proton. Those installers use helpers from
|
||||||
|
`.includes/proton.sh`.
|
||||||
|
|
||||||
### When Things Get Complicated
|
Minimal pattern:
|
||||||
|
|
||||||
If your game requires some extra setup before launching, there is a section to add code for it. As usual, there is a comment at the start of the section. Look for the string.
|
```bash
|
||||||
|
export game="My Awesome Game"
|
||||||
|
myAwesomeGameId="my-awesome-game"
|
||||||
|
myAwesomeGamePath='c:\Program Files\My Awesome Game\mag.exe'
|
||||||
|
|
||||||
# for games that require custom scripts before launch or custom launch parameters
|
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"
|
||||||
|
```
|
||||||
|
|
||||||
There are some tools available for getting games to speak that do not use any of the methods listed above. Look in the speech directory and you will find a clipboard translator and a script to read the current window title when it changes.
|
Use `install_proton_winetricks_verb` for Proton-specific winetricks setup:
|
||||||
|
|
||||||
If your game is 64 bit only, you will need to add a section here to launch it with the nvda2speechd setup. For a detailed example of this, check out the "Code Dungeon" installer. This is a good one too because it demonstrates an oddity required to get the keyboard working as well as setting the Windows version and architecture. It also shows how to prompt the user for a file that cannot be downloaded automatically, e.g. something from Itch.
|
```bash
|
||||||
|
install_proton_winetricks_verb speechsdk
|
||||||
|
install_proton_winetricks_verb corefonts
|
||||||
|
```
|
||||||
|
|
||||||
That covers most things. If the game happens to require dotnet, it can really get complicated indeed. For an example of this, take a look at the "Entombed" installer.
|
UMU launcher entries use `add_umu_launcher`, not `add_launcher`. If the launcher
|
||||||
|
needs environment flags, pass them as extra arguments:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
add_umu_launcher "$myAwesomeGameId" "$myAwesomeGamePath" "export PROTON_USE_XALIA=0"
|
||||||
|
```
|
||||||
|
|
||||||
### Specific Versions of Wine
|
For detailed current examples, see:
|
||||||
|
|
||||||
Some games work better with specific versions of wine. In fact, some games will not work at all with the latest version. If your game requires a specific version of wine, make sure to call the install_wine function. This takes two parameters, the version of wine and the architecture. For an example of how this works, take a look at Swamp. It requires 7.7 because any later version will constantly get "connection interrupted" messages and kick you from the game.
|
- `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.
|
||||||
|
|
||||||
export version="7.7"
|
## Custom Launch Behavior
|
||||||
install_wine "${version}" "32"
|
|
||||||
export bottle="aprone". Because there are multiple games from this author, they are combined into a single bottle. If you take a look at the case statement in get_bottle, you will notice at the end there is a call to install_wine to set the version and install it.
|
|
||||||
|
|
||||||
export version="7.7"
|
Most games only need `add_launcher` or `add_umu_launcher`. If a game needs a
|
||||||
install_wine "${version}" "32"
|
custom launch path, add it to the `custom_launch_parameters` function in
|
||||||
export bottle="aprone"
|
`audiogame-manager.sh`.
|
||||||
|
|
||||||
This sets the wine version, and calls install_wine which will check for and install the required version, in this case 7.7. Also, it sets the required bottle, in this case, "aprone". Because there are multiple games, get_bottle has an entry. At the end of the entry is a call to:
|
That section is still used for things such as:
|
||||||
|
|
||||||
install_wine "7.7" "32"
|
- starting the Cthulhu WindowTitleReader plugin or the window-title fallback
|
||||||
export WINEPREFIX="${HOME}/.local/wine/aprone" ;;
|
script,
|
||||||
|
- enabling translation helpers,
|
||||||
If your game is not in a specific bottle, there is a section at the end of get_bottle for adding the wine version if needed. For an example of this, take a look at the RS Games entery:
|
- launching from a specific working directory,
|
||||||
|
- starting `nvda2speechd` before special launch handling.
|
||||||
if [[ "$game" =~ rs-games ]]; then
|
|
||||||
install_wine "7.0" "32"
|
|
||||||
fi
|
|
||||||
|
|
||||||
To quickly get to this section, you can search for the comment:
|
|
||||||
|
|
||||||
# Wine version for bottles
|
|
||||||
|
|
||||||
|
Keep changes there narrow and tied to the specific game.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
If you would like to contribute, please try to keep the code formatted like it is currently. Please make sure that your additions work on your computer before doing a pull request.
|
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.
|
||||||
|
|||||||
Reference in New Issue
Block a user