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
Last refreshed: 2026-04-14
Last refreshed: 2026-07-27
## Top-Level Structure
@@ -8,6 +8,7 @@ Last refreshed: 2026-04-14
- `.install/`: Per-game installer scripts sourced by `game_installer`.
- `.launch/`: Per-game launch scripts (`.game`) and runnable entries (`.sh`, usually symlinks).
- `.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.
- `README.md`: Project summary and high-level behavior notes.
- `.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`)
- 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`)
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`
- Settings overrides: `settings.conf` in config base
- 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
+2 -1
View File
@@ -1,3 +1,4 @@
# shellcheck shell=bash disable=SC2154 # Variables are set by linux-game-manager.sh
tobyVersion="9.0"
mkdir -p "${installPath}/doom"
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)"
# The url breaks the normal download function
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"
# Move contents from nested folder up one directory (including hidden files)
shopt -s dotglob
+1 -1
View File
@@ -64,4 +64,4 @@ configure_audio
configure_webkit
set_sound_device
pushd "${installPath}/AudioQuake"
./AudioQuake
run_with_optional_gamemode ./AudioQuake
+1 -1
View File
@@ -1,3 +1,3 @@
check_architecture x86_64
pushd "${installPath}/BallBouncer"
${fex}./BallBouncer
run_with_optional_gamemode ${fex}./BallBouncer
+1 -1
View File
@@ -11,4 +11,4 @@ fi
pushd "${gameDir}"
SSL_CERT_FILE=/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
gameExecutable="${installPath}/Constant Motion/cm"
pushd "${installPath}/Constant Motion"
${fex}"${gameExecutable}"
run_with_optional_gamemode ${fex}"${gameExecutable}"
+1 -1
View File
@@ -1,2 +1,2 @@
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
git -C "${gamePath}/toby-doom-launcher" pull
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}"
"${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
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
pushd "${HOME}/.local/games/SlayTheSpire"
./MTS.sh --profile "$currentProfile"
run_with_optional_gamemode ./MTS.sh --profile "$currentProfile"
popd
exit 0
+1 -1
View File
@@ -1,2 +1,2 @@
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}"
"${installPath}/StardewValley/StardewValley"
run_with_optional_gamemode "${installPath}/StardewValley/StardewValley"
+1 -1
View File
@@ -1,4 +1,4 @@
check_architecture x86_64
gamePath="${installPath}/Super Liam"
pushd "${gamePath}"
${fex}./SuperLiam
run_with_optional_gamemode ${fex}./SuperLiam
+1 -1
View File
@@ -1,2 +1,2 @@
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
gamePath="${installPath}/The Great Toy Robbery"
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
gamePath="${installPath}/Omega Reach"
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
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
fi
pushd "${gameDir}" || return 1
"${gameExecutable}"
run_with_optional_gamemode "${gameExecutable}"
+1 -1
View File
@@ -1,2 +1,2 @@
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
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
pushd "${installPath}/wicked_quest-linux-x86_64"
fi
./wicked_quest
run_with_optional_gamemode ./wicked_quest
+1 -1
View File
@@ -1,2 +1,2 @@
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 installPath="${HOME}/.local/games"
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_pitch="${spd_pitch:+ -p ${spd_pitch}}"
export spd_rate="${spd_rate:+ -r ${spd_rate}}"