Added optional gamemode support.

This commit is contained in:
Storm Dragon
2026-08-25 15:44:07 -04:00
parent db508a46cd
commit b3ac639b45
24 changed files with 32 additions and 24 deletions
@@ -1,6 +1,6 @@
# Linux Game Manager Core Map # Linux Game Manager Core Map
Last refreshed: 2026-04-14 Last refreshed: 2026-07-27
## Top-Level Structure ## Top-Level Structure
@@ -8,6 +8,7 @@ Last refreshed: 2026-04-14
- `.install/`: Per-game installer scripts sourced by `game_installer`. - `.install/`: Per-game installer scripts sourced by `game_installer`.
- `.launch/`: Per-game launch scripts (`.game`) and runnable entries (`.sh`, usually symlinks). - `.launch/`: Per-game launch scripts (`.game`) and runnable entries (`.sh`, usually symlinks).
- `.update/`: Optional per-game update scripts expected to define `run_update()`. - `.update/`: Optional per-game update scripts expected to define `run_update()`.
- `.includes/ipfs.sh`: Central associative array of IPFS download URLs, expanded against the configured gateway at startup.
- `speech/speak_window_title.sh`: Accessibility helper for announcing focused window titles. - `speech/speak_window_title.sh`: Accessibility helper for announcing focused window titles.
- `README.md`: Project summary and high-level behavior notes. - `README.md`: Project summary and high-level behavior notes.
- `.files/`: Game-specific auxiliary assets/scripts used by some installers or launchers. - `.files/`: Game-specific auxiliary assets/scripts used by some installers or launchers.
@@ -16,7 +17,7 @@ Last refreshed: 2026-04-14
- Installers: 42 (`.install/*.sh`) - Installers: 42 (`.install/*.sh`)
- Launcher definitions: 42 (`.launch/*.game`) - Launcher definitions: 42 (`.launch/*.game`)
- Launcher runnable entries: 31 (`.launch/*.sh`, both symlinks and files) - Launcher runnable entries: 32 (`.launch/*.sh`, both symlinks and files)
- Update scripts: 5 (`.update/*.sh`) - Update scripts: 5 (`.update/*.sh`)
Regenerate this snapshot with: Regenerate this snapshot with:
@@ -68,6 +69,7 @@ python3 .codex/skills/linux-game-manager-dev/scripts/audit_game_catalog.py
- Config base: `${XDG_CONFIG_HOME:-$HOME/.config}/storm-games/linux-game-manager` - Config base: `${XDG_CONFIG_HOME:-$HOME/.config}/storm-games/linux-game-manager`
- Settings overrides: `settings.conf` in config base - Settings overrides: `settings.conf` in config base
- Default install root: `${HOME}/.local/games` - Default install root: `${HOME}/.local/games`
- IPFS gateway: `${ipfsGateway:-https://ipfs.stormux.org}`; `.includes/ipfs.sh` is sourced after settings so centralized URLs honor the override.
## Contributor Pitfalls ## Contributor Pitfalls
+2 -1
View File
@@ -1,3 +1,4 @@
# shellcheck shell=bash disable=SC2154 # Variables are set by linux-game-manager.sh
tobyVersion="9.0" tobyVersion="9.0"
mkdir -p "${installPath}/doom" mkdir -p "${installPath}/doom"
doomPath="$(find /usr/share -type d -name "doom" 2> /dev/null)" doomPath="$(find /usr/share -type d -name "doom" 2> /dev/null)"
@@ -19,7 +20,7 @@ fi
doomPath="$(find /usr/share -type d -name "doom" 2> /dev/null | head -1)" doomPath="$(find /usr/share -type d -name "doom" 2> /dev/null | head -1)"
# The url breaks the normal download function # The url breaks the normal download function
download_named "keyshare-universal.pk3" "https://forum.zdoom.org/download/file.php?id=42262" download_named "keyshare-universal.pk3" "https://forum.zdoom.org/download/file.php?id=42262"
download "${ipfsGateway}/ipfs/QmU6REFot8CGVSBy2YWQxnmXoh7M4EF74RxFtLzvtJxoGC?filename=toby_doom_${tobyVersion}_full.zip" download "${ipfs[FreeDoom]}"
unzip -n -d "${installPath}/doom" "${cache}/toby_doom_${tobyVersion}_full.zip" unzip -n -d "${installPath}/doom" "${cache}/toby_doom_${tobyVersion}_full.zip"
# Move contents from nested folder up one directory (including hidden files) # Move contents from nested folder up one directory (including hidden files)
shopt -s dotglob shopt -s dotglob
+1 -1
View File
@@ -64,4 +64,4 @@ configure_audio
configure_webkit configure_webkit
set_sound_device set_sound_device
pushd "${installPath}/AudioQuake" pushd "${installPath}/AudioQuake"
./AudioQuake run_with_optional_gamemode ./AudioQuake
+1 -1
View File
@@ -1,3 +1,3 @@
check_architecture x86_64 check_architecture x86_64
pushd "${installPath}/BallBouncer" pushd "${installPath}/BallBouncer"
${fex}./BallBouncer run_with_optional_gamemode ${fex}./BallBouncer
+1 -1
View File
@@ -11,4 +11,4 @@ fi
pushd "${gameDir}" pushd "${gameDir}"
SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt \ SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt \
REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt \ REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt \
"${gameExecutable}" run_with_optional_gamemode "${gameExecutable}"
+1 -1
View File
@@ -1,4 +1,4 @@
check_architecture x86_64 check_architecture x86_64
gameExecutable="${installPath}/Constant Motion/cm" gameExecutable="${installPath}/Constant Motion/cm"
pushd "${installPath}/Constant Motion" pushd "${installPath}/Constant Motion"
${fex}"${gameExecutable}" run_with_optional_gamemode ${fex}"${gameExecutable}"
+1 -1
View File
@@ -1,2 +1,2 @@
pushd "${installPath}" pushd "${installPath}"
"${installPath}/FS2_3.0_Linux/fs2.x86_64" "-ESpeakApplication=espeak-ng" run_with_optional_gamemode "${installPath}/FS2_3.0_Linux/fs2.x86_64" "-ESpeakApplication=espeak-ng"
+1 -1
View File
@@ -8,4 +8,4 @@ if ! [[ -d "toby-doom-launcher" ]]; then
else else
git -C "${gamePath}/toby-doom-launcher" pull git -C "${gamePath}/toby-doom-launcher" pull
fi fi
"toby-doom-launcher/Toby Doom Launcher.py" run_with_optional_gamemode "toby-doom-launcher/Toby Doom Launcher.py"
+1 -1
View File
@@ -1,2 +1,2 @@
pushd "${installPath}" pushd "${installPath}"
"${installPath}/periphery-synthetic-ep/periphery-synthetic-ep" run_with_optional_gamemode "${installPath}/periphery-synthetic-ep/periphery-synthetic-ep"
+1 -1
View File
@@ -15,4 +15,4 @@ if [[ -d "${hostPythonDir}" ]]; then
fi fi
pushd "${desktopPath}" || exit 1 pushd "${desktopPath}" || exit 1
uv run python client.py run_with_optional_gamemode uv run python client.py
+1 -1
View File
@@ -27,7 +27,7 @@ else
fi fi
pushd "${HOME}/.local/games/SlayTheSpire" pushd "${HOME}/.local/games/SlayTheSpire"
./MTS.sh --profile "$currentProfile" run_with_optional_gamemode ./MTS.sh --profile "$currentProfile"
popd popd
exit 0 exit 0
+1 -1
View File
@@ -1,2 +1,2 @@
pushd "${installPath}" pushd "${installPath}"
"${installPath}/Soulblaze/Soulblaze.x86_64" run_with_optional_gamemode "${installPath}/Soulblaze/Soulblaze.x86_64"
+1 -1
View File
@@ -1,2 +1,2 @@
pushd "${installPath}" pushd "${installPath}"
"${installPath}/StardewValley/StardewValley" run_with_optional_gamemode "${installPath}/StardewValley/StardewValley"
+1 -1
View File
@@ -1,4 +1,4 @@
check_architecture x86_64 check_architecture x86_64
gamePath="${installPath}/Super Liam" gamePath="${installPath}/Super Liam"
pushd "${gamePath}" pushd "${gamePath}"
${fex}./SuperLiam run_with_optional_gamemode ${fex}./SuperLiam
+1 -1
View File
@@ -1,2 +1,2 @@
pushd "${installPath}" pushd "${installPath}"
"${installPath}/System_Fault/system-fault-linux-x86_64.AppImage" run_with_optional_gamemode "${installPath}/System_Fault/system-fault-linux-x86_64.AppImage"
+1 -1
View File
@@ -1,4 +1,4 @@
check_architecture x86_64 check_architecture x86_64
gamePath="${installPath}/The Great Toy Robbery" gamePath="${installPath}/The Great Toy Robbery"
pushd "${gamePath}" pushd "${gamePath}"
${fex}./tgtr run_with_optional_gamemode ${fex}./tgtr
+1 -1
View File
@@ -1,4 +1,4 @@
# shellcheck shell=bash disable=SC2154 # installPath is set by linux-game-manager.sh # shellcheck shell=bash disable=SC2154 # installPath is set by linux-game-manager.sh
gamePath="${installPath}/Omega Reach" gamePath="${installPath}/Omega Reach"
pushd "${gamePath}" || return 1 pushd "${gamePath}" || return 1
"${gamePath}/the-omega-reach" run_with_optional_gamemode "${gamePath}/the-omega-reach"
+1 -1
View File
@@ -1,3 +1,3 @@
check_architecture x86_64 check_architecture x86_64
pushd "${installPath}/The Tornado Chicken" pushd "${installPath}/The Tornado Chicken"
${fex}./Ttc run_with_optional_gamemode ${fex}./Ttc
+1 -1
View File
@@ -11,4 +11,4 @@ if [[ ! -x "$gameExecutable" ]]; then
return 1 return 1
fi fi
pushd "${gameDir}" || return 1 pushd "${gameDir}" || return 1
"${gameExecutable}" run_with_optional_gamemode "${gameExecutable}"
+1 -1
View File
@@ -1,2 +1,2 @@
pushd "${installPath}" pushd "${installPath}"
"${installPath}/Upheaval_Gui/Upheaval" run_with_optional_gamemode "${installPath}/Upheaval_Gui/Upheaval"
+1 -1
View File
@@ -1,3 +1,3 @@
check_architecture x86_64 check_architecture x86_64
pushd "${installPath}/Wheels of Prio" pushd "${installPath}/Wheels of Prio"
${fex}./Wp run_with_optional_gamemode ${fex}./Wp
+1 -1
View File
@@ -4,4 +4,4 @@ if [[ "$arch" == "aarch64" ]]; then
else else
pushd "${installPath}/wicked_quest-linux-x86_64" pushd "${installPath}/wicked_quest-linux-x86_64"
fi fi
./wicked_quest run_with_optional_gamemode ./wicked_quest
+1 -1
View File
@@ -1,2 +1,2 @@
pushd "${installPath}" pushd "${installPath}"
"${installPath}/${pkgname%.*}/Zombowl" run_with_optional_gamemode "${installPath}/${pkgname%.*}/Zombowl"
+5
View File
@@ -950,6 +950,11 @@ unset noCache
export doomLanguage="${doomLanguage:-en}" export doomLanguage="${doomLanguage:-en}"
export installPath="${HOME}/.local/games" export installPath="${HOME}/.local/games"
export ipfsGateway="${ipfsGateway:-https://ipfs.stormux.org}" export ipfsGateway="${ipfsGateway:-https://ipfs.stormux.org}"
# shellcheck source=.includes/ipfs.sh
# shellcheck disable=SC1091 # Source path is resolved from the runtime script location
source "${scriptRoot}/.includes/ipfs.sh"
# shellcheck source=.includes/gamemode.sh
source "${scriptRoot}/.includes/gamemode.sh"
export spd_module="${spd_module:+ -o ${spd_module}}" export spd_module="${spd_module:+ -o ${spd_module}}"
export spd_pitch="${spd_pitch:+ -p ${spd_pitch}}" export spd_pitch="${spd_pitch:+ -p ${spd_pitch}}"
export spd_rate="${spd_rate:+ -r ${spd_rate}}" export spd_rate="${spd_rate:+ -r ${spd_rate}}"