#!/usr/bin/env bash # Compila o Amoebax do fredygames.com: o jogo de puzzle de blocos que caem do Emma's Software (codigo sob a # GPL-2.0-or-later; sons, musica e graficos sob a Free Art License 1.2) em WebAssembly, com o Emscripten # 6.0.10 e as portas SDL2 2.32.10, SDL2_image 2.6.0 (PNG), SDL2_mixer 2.8.0 (OGG) dele. Este script e o # patch fazem parte do codigo-fonte publicado junto do jogo. # # source /emsdk_env.sh # emsdk install 6.0.10 && emsdk activate 6.0.10 # src/FredGames.Bundler/Builds/build-amoebax.sh # # Fonte: amoebax_0.2.1+dfsg.orig.tar.bz2 do Debian (a versao 0.2.1 do autor sem os arquivos que o Debian # tira), conferido pelo SHA-256 e guardado em artifacts/cache/amoebax/. O jogo usa o SDL 1.2. O patch # (amoebax/amoebax-fredygames.patch): # - acrescenta src/amxsdl12.h/.c, o pedaco do SDL 1.2 que o jogo usa sobre o SDL2 (tela de 32 bits em # memoria mostrada numa textura, alfa por superficie, color key, sem repeticao de tecla); o SDL_Delay do # limitador de quadros devolve a vez ao navegador (Asyncify); # - System.cxx: o texto digitado (nomes nos recordes) chega por SDL_TEXTINPUT, o SDL2 nao tem # keysym.unicode; sem o evento de janela minimizada; a cada 20 s grava as opcoes e os recordes; # - UnixOptions: flush() existe sempre (nunca grava antes de ler) e fredygames_save(), que a pagina chama # quando a aba some ou fecha; # - File.cxx: os dados ficam na raiz do sistema de arquivos do navegador (sem o binreloc). # graphics/, fonts/, music/ e sfx/ vao num amoebax.data (--preload-file), na raiz, que e a pasta de trabalho # do jogo. As opcoes e os recordes ficam em /home/web_user/.config/amoebax. # # Saida: artifacts/build/amoebax-0.2.1/amoebax.{js,wasm,data}, que o bundle.yaml confere pelo SHA-256. set -euo pipefail VERSION=0.2.1 SRC_SHA256=9e22d5bc14286338f4955a1143c81d3e2d61a7bb33a9b4fb8b7a6418728ed564 EMSCRIPTEN=6.0.10 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/amoebax-$VERSION" cache="$root/artifacts/cache/amoebax" tarball="amoebax_$VERSION+dfsg.orig.tar.bz2" if ! emcc --version 2>/dev/null | head -1 | grep -q " $EMSCRIPTEN "; then echo "Precisa do Emscripten $EMSCRIPTEN no PATH (source /emsdk_env.sh)." >&2 exit 1 fi # Arquivo auxiliar: em amoebax/ (repositorio) ou ao lado do script (pasta de fontes do site). aux() { if [ -f "$here/amoebax/$1" ]; then echo "$here/amoebax/$1"; else echo "$here/$1"; fi } if [ -f "$here/$tarball" ]; then src_tar="$here/$tarball" else src_tar="$cache/$tarball" if [ ! -f "$src_tar" ]; then mkdir -p "$cache" curl -fsSL -o "$src_tar.part" "https://deb.debian.org/debian/pool/main/a/amoebax/$tarball" mv "$src_tar.part" "$src_tar" fi fi echo "$SRC_SHA256 $src_tar" | shasum -a 256 -c - >&2 rm -rf "$out" mkdir -p "$out/obj" s=amoebax mkdir "$out/$s" tar xjf "$src_tar" -C "$out/$s" --strip-components 1 patch -d "$out/$s" -p1 --quiet --no-backup-if-mismatch < "$(aux amoebax-fredygames.patch)" cat > "$out/$s/config.h" <