Added game Wickets.
This commit is contained in:
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`).
|
||||||
|
|||||||
@@ -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}"
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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 `#//`.
|
||||||
|
|||||||
Reference in new issue
Block a user