#!/usr/bin/env bash # Monta o Focus Hunt (Dimitri Masson, Ludum Dare 57 compo, MIT; p5.js 1.11.3, LGPL-2.1; p5.sound 1.0.1, MIT; p5.palette 0.3.0, MIT) # a partir do commit 67230d3 de github.com/dhmmasson/focusHunt. O autor publica um site Quarto; aqui entra so o jogo, numa pagina # nossa (focus-hunt/index.html) com os mesmos scripts do index.qmd. # # Mudancas no jogo: o placar online (dreamlo.com: pedia o nome com prompt() e enviava o tempo) sai; a tela de abertura usava o # splash.jpg (imagem social com o logo do HTML5) como fundo e passa a usar o clean.png, a propria arte do jogo; o p5.min.js e o p5.sound.min.js # sao os oficiais do pacote p5@1.11.3 do npm (o p5.min.js do repositorio difere em alguns bytes), o p5.palette e o do repositorio (igual ao # do pacote p5.palette@0.3.0). Ficam de fora o splash.jpg/.png, a splash_ai.png (gerada por IA, nao usada), os fontes do Blender/Krita/Audacity # (ressources/), o CHANGELOG e afins. O p5.js e LGPL: o fonte da versao servida (tag v1.11.3 de processing/p5.js) vai junto em "sources". # # src/FredGames.Bundler/Builds/build-focus-hunt.sh # # Saida: artifacts/build/focus-hunt-67230d3/{dist.tar.gz,licenses.txt}; o tar.gz sai igual em dois builds seguidos. set -euo pipefail COMMIT=67230d34a00621c786fd2162ac4de206b8c13bda SHA256=c7104f09500c971833af7a57fe76b2ff77bf47d6f2bf3c3430317d470f16beec P5=1.11.3 P5_NPM_SHA256=37f3014eba97163ffaa9bc9dcc830606f60e52f9f6436bcec38fd8d4e987a59a P5_SRC_SHA256=04cad36b8569837ec7bab61108f1fe902f2eaab728e87733feed900f68a3fda4 SOUND_SRC_SHA256=afea4bb4babd13766a771639bb3fd7bfd6aaca96113fff05f6f36707f6a413b4 PALETTE=0.3.0 PALETTE_NPM_SHA256=7935a421e6222c44387f9f7a15c2f10fbdd08f5d722c5c9e0b1c6c3c835f45c1 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/focus-hunt-${COMMIT:0:7}" cache="$root/artifacts/build/cache" mkdir -p "$cache" fetch() { if [ ! -f "$cache/$2" ]; then curl -fsSL --retry 4 "$1" -o "$cache/$2.partial" && mv "$cache/$2.partial" "$cache/$2" fi echo "$3 $cache/$2" | shasum -a 256 -c - >/dev/null } fetch "https://github.com/dhmmasson/focusHunt/archive/$COMMIT.tar.gz" "dhmmasson_focusHunt-${COMMIT:0:7}.tar.gz" "$SHA256" fetch "https://registry.npmjs.org/p5/-/p5-$P5.tgz" "p5-$P5.tgz" "$P5_NPM_SHA256" fetch "https://registry.npmjs.org/p5.palette/-/p5.palette-$PALETTE.tgz" "p5.palette-$PALETTE.tgz" "$PALETTE_NPM_SHA256" fetch "https://github.com/processing/p5.js/archive/refs/tags/v$P5.tar.gz" "processing_p5.js-v$P5.tar.gz" "$P5_SRC_SHA256" fetch "https://github.com/processing/p5.js-sound/archive/refs/tags/v1.0.1.tar.gz" "processing_p5.js-sound-v1.0.1.tar.gz" "$SOUND_SRC_SHA256" rm -rf "$out"; mkdir -p "$out/tree" "$out/dist/libraries" "$out/dist/src" "$out/dist/assets/audio" "$out/dist/assets/music" "$out/dist/assets/objects" t="$out/tree"; d="$out/dist" tar -xzf "$cache/dhmmasson_focusHunt-${COMMIT:0:7}.tar.gz" -C "$t" --strip-components 1 tar -xzOf "$cache/p5-$P5.tgz" package/lib/p5.min.js > "$d/libraries/p5.min.js" tar -xzOf "$cache/p5-$P5.tgz" package/lib/addons/p5.sound.min.js > "$d/libraries/p5.sound.min.js" tar -xzOf "$cache/p5.palette-$PALETTE.tgz" package/dist/p5.palette.min.js > "$d/libraries/p5.palette.min.js" cmp "$d/libraries/p5.sound.min.js" "$t/libraries/p5.sound.min.js" cmp "$d/libraries/p5.palette.min.js" "$t/libraries/p5.palette.min.js" cp "$here/focus-hunt/index.html" "$d/index.html" cp "$t/src/ui.js" "$d/src/ui.js" cp "$t"/assets/blur.png "$t"/assets/clean.png "$t"/assets/depth.png "$t"/assets/objects.png "$d/assets/" cp "$t"/assets/audio/shutter.mp3 "$t"/assets/audio/shutter.wav "$d/assets/audio/" cp "$t"/assets/music/EasterHunt.mp3 "$d/assets/music/" cp "$t"/assets/objects/*.png "$d/assets/objects/" python3 -I - "$t/src/game.js" "$d/src/game.js" <<'PY' import sys s = open(sys.argv[1], encoding='utf-8').read() # 1. splash background: the game's own art instead of the social image with the HTML5 logo old = 'Splash.logo = loadImage("./assets/splash.jpg");' assert old in s s = s.replace(old, 'Splash.logo = loadImage("./assets/clean.png");') # 2. no online leaderboard (prompt + dreamlo.com) a = s.index(' // Ask the user its name') b = s.index(' }\n }\n }\n },\n getScore') s = s[:a] + ' // FredyGames: the online leaderboard (dreamlo.com) was removed.\n' + s[b:] a = s.index(' getScore: function () {') b = s.index(' removeObject: function') s = s[:a] + ' getScore: function () {\n // FredyGames: the online leaderboard (dreamlo.com) was removed.\n },\n' + s[b:] assert 'dreamlo' not in s.replace('dreamlo.com) was removed', '') and 'fetch(' not in s and 'prompt(' not in s open(sys.argv[2], 'w', encoding='utf-8').write(s) PY { echo "== Focus Hunt (LICENSE do repositorio, MIT)"; cat "$t/LICENSE" echo; echo "== p5.js $P5 (libraries/p5.min.js): license.txt do fonte (LGPL-2.1)" tar -xzOf "$cache/processing_p5.js-v$P5.tar.gz" "p5.js-$P5/license.txt" echo; echo "== p5.sound 1.0.1 (libraries/p5.sound.min.js): LICENSE do fonte (MIT)" tar -xzOf "$cache/processing_p5.js-sound-v1.0.1.tar.gz" p5.js-sound-1.0.1/LICENSE echo; echo "== p5.palette $PALETTE (libraries/p5.palette.min.js): LICENSE do pacote npm (MIT)" tar -xzOf "$cache/p5.palette-$PALETTE.tgz" package/LICENSE } > "$out/licenses.txt" find "$d" -exec touch -t 202510070000 {} + ( cd "$out" && find dist -type f | LC_ALL=C sort > files.txt \ && COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n -cf - -T files.txt \ | gzip -n -9 > dist.tar.gz && rm files.txt ) rm -rf "$t" "$d" ls -l "$out/dist.tar.gz"; shasum -a 256 "$out/dist.tar.gz" "$out/licenses.txt"