#!/usr/bin/env bash # Compila o Pocket Aquarium (homebrew de Game Boy de Chris e Tyler Jackson / Creative Name Studios, GB Compo # 2025, GPL-3.0) a partir do projeto GB Studio do commit a95f9fd (gbcompo25/pocket-aquarium-gbcompo25), com o # GB Studio 4.1.3 (MIT) em linha de comando (make:rom), sem o Electron (um stub no lugar do pacote, que o CLI # so importa), e o GBDK-2020 que o proprio repositorio do GB Studio traz em buildTools/darwin-arm64. # Mudancas nossas (publicadas junto do fonte): # pocket-aquarium/strip-sound-effects.py tira os efeitos sonoros (o repositorio diz que NAO estao # sob a GPL; ver LICENSE.txt do jogo); a musica fica; # pocket-aquarium/fixed-save-signature.patch no GB Studio: a "assinatura do save" vira um valor fixo (era um # hash do projeto inteiro que muda a cada execucao), para a build # sair igual toda vez. # Precisa de node (artifacts/tools/node-v24.21.0), git e acesso ao registro npm (yarn 1.22.22 + yarn.lock do GB Studio). # # src/FredGames.Bundler/Builds/build-pocket-aquarium.sh # # Saida: artifacts/build/pocket-aquarium/pocket-aquarium.gb set -euo pipefail GAME_COMMIT=a95f9fd0f3570b9175567d5a0e65a41b21632bad GAME_SHA256=577676ce6ca4e3266b04df6b4fb4e0994c26e5a63a08959dc698e15cb7862ef0 GBS=4.1.3 GBS_SHA256=33497ddc44f25ec96756d0af632b50396f99013462c720ed00a3e4c7a87be2f3 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/pocket-aquarium" cache="$root/artifacts/build/cache" export PATH="$root/artifacts/tools/node-v24.21.0/bin:$PATH" mkdir -p "$cache" fetch() { [ -f "$2" ] || curl -fsSL --retry 4 "$1" -o "$2"; echo "$3 $2" | shasum -a 256 -c -; } fetch "https://github.com/chrismaltby/gb-studio/archive/refs/tags/v$GBS.tar.gz" "$cache/gb-studio-$GBS.tar.gz" "$GBS_SHA256" fetch "https://github.com/gbcompo25/pocket-aquarium-gbcompo25/archive/$GAME_COMMIT.tar.gz" "$cache/pocket-aquarium-a95f9fd.tar.gz" "$GAME_SHA256" gbs="$out/gbs" if [ ! -f "$gbs/out/cli/gb-studio-cli.js" ]; then rm -rf "$gbs" && mkdir -p "$gbs" tar -xzf "$cache/gb-studio-$GBS.tar.gz" -C "$gbs" --strip-components 1 patch -d "$gbs" -p1 < "$here/pocket-aquarium/fixed-save-signature.patch" >/dev/null # o webpack do CLI le a versao com "git describe" git -C "$gbs" init -q git -C "$gbs" add -A >/dev/null 2>&1 GIT_AUTHOR_NAME=build GIT_AUTHOR_EMAIL=build@localhost GIT_COMMITTER_NAME=build GIT_COMMITTER_EMAIL=build@localhost \ GIT_AUTHOR_DATE=2025-01-01T00:00:00Z GIT_COMMITTER_DATE=2025-01-01T00:00:00Z git -C "$gbs" commit -q -m "v$GBS" (cd "$gbs" && ELECTRON_SKIP_BINARY_DOWNLOAD=1 npx --yes yarn@1.22.22 install --frozen-lockfile --ignore-scripts --ignore-engines >/dev/null 2>&1) echo 'module.exports = "/nonexistent/electron";' > "$gbs/node_modules/electron/index.js" (cd "$gbs" && NO_TYPE_CHECKING=1 npm run make:cli >/dev/null 2>&1) fi rm -rf "$out/game" "$out/pocket-aquarium.gb" && mkdir -p "$out/game" tar -xzf "$cache/pocket-aquarium-a95f9fd.tar.gz" -C "$out/game" --strip-components 1 rm -rf "$out/game/build" "$out/game/gb-studio-plugins-main" python3 -I "$here/pocket-aquarium/strip-sound-effects.py" "$out/game" node "$gbs/out/cli/gb-studio-cli.js" make:rom "$out/game/Pocket Aquarium.gbsproj" "$out/pocket-aquarium.gb" >/dev/null 2>&1 shasum -a 256 "$out/pocket-aquarium.gb"