Added game Wickets.

This commit is contained in:
Storm Dragon committed 2026-10-30 14:33:02 -04:00
1 parent aafc97ee58
commit 17c1f0f77d
7 files changed
+91 -5

No files matched your search

@@ -1,6 +1,6 @@
# Linux Game Manager Core Map # Linux Game Manager Core Map
Last refreshed: 2026-10-04 Last refreshed: 2026-10-30
## Top-Level Structure ## Top-Level Structure
@@ -9,16 +9,17 @@ Last refreshed: 2026-10-04
- `.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. - `.includes/ipfs.sh`: Central associative array of IPFS download URLs, expanded against the configured gateway at startup.
- `.includes/wickets.sh`: Shared Wickets installer/updater; resolves the latest GitHub release and preserves portable saves.
- `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.
## Catalog Snapshot ## Catalog Snapshot
- Installers: 46 (`.install/*.sh`) - Installers: 49 (`.install/*.sh`)
- Launcher definitions: 46 (`.launch/*.game`) - Launcher definitions: 49 (`.launch/*.game`)
- Launcher runnable entries: 36 (`.launch/*.sh`, both symlinks and files) - Launcher runnable entries: 11 (`.launch/*.sh`, both symlinks and files; varies with local installations)
- Update scripts: 9 (`.update/*.sh`) - Update scripts: 11 (`.update/*.sh`)
Regenerate this snapshot with: Regenerate this snapshot with:
@@ -34,6 +35,7 @@ python3 .codex/skills/linux-game-manager-dev/scripts/audit_game_catalog.py
- Monkey Spank clones its required submodules recursively and stops installation if cloning fails. - Monkey Spank clones its required submodules recursively and stops installation if cloning fails.
- Shared downloads try `curl` first, fall back to `wget` when available, validate archive payloads before install, and reject obvious HTML error pages for unknown file types. - Shared downloads try `curl` first, fall back to `wget` when available, validate archive payloads before install, and reject obvious HTML error pages for unknown file types.
- `download_named()` shares the same cache validation path as `download()`, so resolved asset URLs must still produce a valid payload for their file extension. - `download_named()` shares the same cache validation path as `download()`, so resolved asset URLs must still produce a valid payload for their file extension.
- Wickets resolves the latest stable GitHub release on each install/update, extracts its Linux x64 tarball into staging, and overlays `${installPath}/Wickets` while preserving `saves`. A `.lgm-version` marker records the release installed by the manager.
- If `.launch/<game>.game` exists and `.launch/<game>.sh` does not, the manager creates a symlink using the repository root, even if the installer changed directories. - If `.launch/<game>.game` exists and `.launch/<game>.sh` does not, the manager creates a symlink using the repository root, even if the installer changed directories.
2. **Launch flow** 2. **Launch flow**
@@ -52,6 +54,7 @@ python3 .codex/skills/linux-game-manager-dev/scripts/audit_game_catalog.py
- `game_update` lists `.update/*.sh`. - `game_update` lists `.update/*.sh`.
- Selected updater is sourced. - Selected updater is sourced.
- `run_update()` is called and must exist. - `run_update()` is called and must exist.
- Wickets requires an existing installation, refreshes release metadata even with cached archives, and exits after an up-to-date notice if `.lgm-version` matches. Its own in-game updater is also available from 1.2.0 onward.
## CLI Surface ## CLI Surface
@@ -106,6 +106,7 @@ python3 .codex/skills/linux-game-manager-dev/scripts/audit_game_catalog.py
- Keep scripts robust when sourced in the manager shell. - Keep scripts robust when sourced in the manager shell.
- Clone games with required submodules using `git clone --recurse-submodules` and stop installation on clone failure. - Clone games with required submodules using `git clone --recurse-submodules` and stop installation on clone failure.
- Launch games that load relative assets from their own directory. Monkey Spank uses `${installPath}/monkeyspank` as its working directory and removal root. - Launch games that load relative assets from their own directory. Monkey Spank uses `${installPath}/monkeyspank` as its working directory and removal root.
- Wickets shares install/update logic in `.includes/wickets.sh`; its versioned tarball has one top-level directory, and portable saves must survive updates. Always refresh GitHub release metadata rather than reusing a cached latest-release response.
- Avoid introducing unnecessary colorized output. - Avoid introducing unnecessary colorized output.
- For edited bash scripts, run shellcheck and fix all errors. - For edited bash scripts, run shellcheck and fix all errors.
- If `shellcheck` is not installed, prompt the user to install it first (see `references/tooling-prereqs.md`). - If `shellcheck` is not installed, prompt the user to install it first (see `references/tooling-prereqs.md`).
+57
View File
@@ -0,0 +1,57 @@
#!/usr/bin/env bash
# shellcheck disable=SC2154 # Paths and download helpers are supplied by the manager.
install_wickets() {
check_architecture x86_64
check_dependencies tar
local updateOnly="${1:-false}"
local gamePath="${installPath}/Wickets"
local metadataFile="Wickets-latest.json"
local releaseVersion assetName assetUrl stagingPath
if [[ "${updateOnly}" == true ]] && [[ ! -f "${gamePath}/wickets" ]]; then
ui_msgbox "Wickets" "Linux Game Manager" "Wickets is not installed. Please install it with -i first."
return 1
fi
# Always resolve the current release, even when the archive is cached.
rm -f "${cache}/${metadataFile}" || return 1
download_named "${metadataFile}" "https://api.github.com/repos/orinks-games/wickets/releases/latest" || return 1
if ! releaseVersion="$(jq -er '.tag_name | select(test("^v[0-9]+\\.[0-9]+\\.[0-9]+$"))' "${cache}/${metadataFile}")"; then
ui_msgbox "Wickets" "Linux Game Manager" "Could not determine the latest Wickets release. Please try again later."
return 1
fi
assetName="wickets-${releaseVersion#v}-linux-x64.tar.gz"
if ! assetUrl="$(jq -er --arg name "${assetName}" '.assets[] | select(.name == $name) | .browser_download_url' "${cache}/${metadataFile}")" ||
[[ "${assetUrl}" != "https://github.com/orinks-games/wickets/releases/download/${releaseVersion}/${assetName}" ]]; then
ui_msgbox "Wickets" "Linux Game Manager" "The latest Wickets release has no supported Linux x64 archive."
return 1
fi
if [[ "${updateOnly}" == true ]] && [[ -f "${gamePath}/.lgm-version" ]] &&
[[ "$(< "${gamePath}/.lgm-version")" == "${releaseVersion}" ]]; then
ui_msgbox "Wickets" "Linux Game Manager" "Wickets ${releaseVersion#v} is already up to date."
# The manager otherwise displays a generic update-success message.
exit 0
fi
download_named "${assetName}" "${assetUrl}" || return 1
stagingPath="$(mktemp -d "${cache}/wickets.XXXXXX")" || return 1
if ! tar -xzf "${cache}/${assetName}" --strip-components=1 -C "${stagingPath}" ||
[[ ! -f "${stagingPath}/wickets" ]] || [[ ! -f "${stagingPath}/sounds.pak" ]]; then
rm -rf "${stagingPath}"
ui_msgbox "Wickets" "Linux Game Manager" "Could not extract the Wickets archive. The installed game has not been changed."
return 1
fi
# Overlay release files so the portable saves directory is preserved.
if ! mkdir -p "${gamePath}" || ! cp -a "${stagingPath}/." "${gamePath}/" ||
! chmod +x "${gamePath}/wickets" ||
! printf '%s\n' "${releaseVersion}" > "${gamePath}/.lgm-version"; then
rm -rf "${stagingPath}"
ui_msgbox "Wickets" "Linux Game Manager" "Could not install Wickets. Please check free space and directory permissions, then try again."
return 1
fi
rm -rf "${stagingPath}"
}
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
# shellcheck disable=SC2154 # scriptRoot is supplied by the manager.
# shellcheck source=.includes/wickets.sh
source "${scriptRoot}/.includes/wickets.sh"
install_wickets false || exit 1
+4
View File
@@ -0,0 +1,4 @@
# shellcheck shell=bash disable=SC2154 # installPath is supplied by the manager.
gamePath="${installPath}/Wickets"
cd "${gamePath}" || exit 1
run_with_optional_gamemode ./wickets
+8
View File
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
run_update() {
# shellcheck disable=SC2154 # scriptRoot is supplied by the manager.
# shellcheck source=.includes/wickets.sh
source "${scriptRoot}/.includes/wickets.sh"
install_wickets true || exit 1
}
+8
View File
@@ -9,6 +9,14 @@ As the project grows, more dependencies will most likely be added. When LGM is l
Current base dependencies checked on launch: `7z`, `curl`, `dialog`, `jq`, `yad`, and `unzip`. Current base dependencies checked on launch: `7z`, `curl`, `dialog`, `jq`, `yad`, and `unzip`.
## Wickets
Install Wickets on x86_64 Linux by selecting it under `./linux-game-manager.sh -i`.
Both installation and updating (`./linux-game-manager.sh -u`, then select Wickets)
query GitHub for the latest stable release, so versioned download links do not
need to be tracked manually. Updating preserves the portable `saves` directory
under `~/.local/games/Wickets`. Wickets 1.2.0 also includes its own updater.
## Disabling game entries ## Disabling game entries
To disable a game entry without deleting its script, set the first line of the script to start with `#//`. To disable a game entry without deleting its script, set the first line of the script to start with `#//`.