#!/usr/bin/env bash # Gera o panspermia.pgapp do Panspermia (Christopher Night, PyWeek 8, 2009) a partir do zip original do PyWeek (sha256 # abaixo), portado de Python 2 para 3 por um patch (panspermia/web.patch): sintaxe (2to3), divisao inteira, lacos # bloqueantes viram assincronos (exigido pelo pygbag), Esc no titulo nao sai, sem o som que falta e o main.py da raiz # (o do jogo vira gamelib/panspermia_main.py). Fora do .pgapp: os efeitos sonoros (.wav, rain.mp3, thunder.mp3: o README so # diz que foram "resampled from files downloaded from freesound.org", sem a licenca de cada um, e uma das fontes de # origem e CC BY-NC) e a fonte do titulo janken.ttf ("Freeware"); o titulo agora usa a Bangers (SIL OFL 1.1, do # google/fonts, baixada aqui com sha256). As duas musicas de Kevin MacLeod (CC BY) ficam. Zip deterministico. # # src/FredGames.Bundler/Builds/build-panspermia.sh # # Saida: artifacts/build/panspermia/panspermia.pgapp set -euo pipefail SHA256=2ad68a8c1ae930fc73b138f493411ea714ccff4b7bb09c657c09bd7070145ca8 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/panspermia" cache="$root/artifacts/build/cache" mkdir -p "$cache" zip="$cache/panspermia.zip" [ -f "$zip" ] || curl -fsSL "https://s3.eu-west-2.amazonaws.com/media.pyweek.org/8/unifac8/panspermia.zip" -o "$zip" echo "$SHA256 $zip" | shasum -a 256 -c - GF=9862abc066c9b83bf84c3e8ed1fc2d8d48f9bbf0 font="$cache/Bangers-Regular-$GF.ttf" ofl="$cache/Bangers-OFL-$GF.txt" [ -f "$font" ] || curl -fsSL "https://raw.githubusercontent.com/google/fonts/$GF/ofl/bangers/Bangers-Regular.ttf" -o "$font" [ -f "$ofl" ] || curl -fsSL "https://raw.githubusercontent.com/google/fonts/$GF/ofl/bangers/OFL.txt" -o "$ofl" echo "4160a7311de9342674cce9160cde9fcbb30f48190397d86ff1b70b455af65824 $font" | shasum -a 256 -c - echo "630dd5a307c0657b094d324e069b390edf90182fe5003639e06c02a0e5769af7 $ofl" | shasum -a 256 -c - # o SDL_mixer do pygbag nao toca MP3: as duas musicas viram .ogg aqui (mp3towav, que usa o minimp3 CC0, e wav2ogg, da # libvorbis 1.3.7; ver Builds/pygame-music/README para compilar o wav2ogg em artifacts/tools/; mesmos bytes a cada vez) MP3H_SHA=57e437c5c1f0e8b243885d3929c8973b5e6c778451e0100ab4251d19915cb3ad MP3EX_SHA=8437f3fc1d4d8ab2269a1624f5380a08df1967a048f8887789bae6e25db7db79 MP3C=ea99364f61c14656440e8d77e9c233ccf3124633 tools="$root/artifacts/tools/pygame-music" [ -x "$tools/wav2ogg" ] || { echo "Compile antes o wav2ogg: $here/pygame-music/README" >&2; exit 1; } for h in minimp3.h:$MP3H_SHA minimp3_ex.h:$MP3EX_SHA; do f="$cache/${h%%:*}-$MP3C" [ -f "$f" ] || curl -fsSL "https://raw.githubusercontent.com/lieff/minimp3/$MP3C/${h%%:*}" -o "$f" echo "${h##*:} $f" | shasum -a 256 -c - done rm -rf "$out" mkdir -p "$out/tree" "$out/mp3" cp "$cache/minimp3.h-$MP3C" "$out/mp3/minimp3.h" cp "$cache/minimp3_ex.h-$MP3C" "$out/mp3/minimp3_ex.h" cp "$here/panspermia/mp3towav.c" "$out/mp3/" cc -O2 "$out/mp3/mp3towav.c" -I"$out/mp3" -o "$out/mp3/mp3towav" unzip -q "$zip" -d "$out/tree" -x '__MACOSX/*' g="$out/tree/panspermia" rm -rf "$g/data/"*.wav "$g/data/rain.mp3" "$g/data/thunder.mp3" "$g/data/janken.ttf" "$g/run_game.pyw" find "$g" \( -name __pycache__ -o -name .DS_Store -o -name '*.pyc' -o -name '*.swp' \) -prune -exec rm -rf {} + patch -d "$g" -p1 < "$here/panspermia/web.patch" cp "$font" "$g/data/Bangers-Regular.ttf" for n in arcadia ominous-intro; do "$out/mp3/mp3towav" "$g/data/$n.mp3" "$out/mp3/$n.wav" "$tools/wav2ogg" "$out/mp3/$n.wav" "$g/data/$n.ogg" 0.2 rm "$g/data/$n.mp3" done cp "$ofl" "$g/data/Bangers-OFL.txt" python3 -I "$here/pgapp.py" "$g" "$out/panspermia.pgapp" shasum -a 256 "$out/panspermia.pgapp"