#!/usr/bin/env bash # Compila o Faustian Sands (jogo de eventos de texto de Seb Jones, Ludum Dare 44; Unlicense; fonte de bitmap de # dominio publico do OpenGameArt) em WebAssembly, a partir do commit fc0340a de github.com/seb-jones/ld44, com o # Emscripten 6.0.10 e o SDL2 das "ports" dele (zlib). Os mesmos comandos do "make web-prod" do autor # (emcc -O3 -sUSE_SDL=2 --preload-file assets), so que com a pasta assets/ reduzida aos arquivos que o codigo # carrega (sem original_font.bmp e foo.bmp). # # source /emsdk_env.sh # emsdk install 6.0.10 && emsdk activate 6.0.10 # src/FredGames.Bundler/Builds/build-faustian-sands.sh # # Mudanca no jogo (faustian-sands/faustian-sands-fredygames.patch): na web, a tecla Q (que fecha o jogo na versao # de desktop) nao faz nada, porque sair do laco congelaria a pagina. # # Saida: artifacts/build/faustian-sands-fc0340a/{ld44.js,ld44.wasm,ld44.data,licenses.txt}, que o bundle.yaml # confere pelo SHA-256 (dois builds seguidos dao os mesmos bytes). set -euo pipefail COMMIT=fc0340a0fba734cbda909472248bd406b90ad8bb SHA256=80210960e435a6a7bcadaa398d0bdaeec37fc222958765fc2e889b1d55da45bf 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/faustian-sands-${COMMIT:0:7}" cache="$root/artifacts/build/cache" 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 mkdir -p "$cache" if [ ! -f "$cache/faustian-sands-${COMMIT:0:7}.tar.gz" ]; then curl -fsSL --retry 4 "https://github.com/seb-jones/ld44/archive/$COMMIT.tar.gz" -o "$cache/faustian-sands-${COMMIT:0:7}.tar.gz.partial" mv "$cache/faustian-sands-${COMMIT:0:7}.tar.gz.partial" "$cache/faustian-sands-${COMMIT:0:7}.tar.gz" fi echo "$SHA256 $cache/faustian-sands-${COMMIT:0:7}.tar.gz" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" "$out/pack/assets" tar -xzf "$cache/faustian-sands-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 patch -s -p1 -d "$out/tree" < "$here/faustian-sands/faustian-sands-fredygames.patch" for f in font player player_alt_frame player_alt_frame_monochrome player_monochrome devil devil_monochrome blood left_eye_gone sun; do cp "$out/tree/assets/$f.bmp" "$out/pack/assets/" done # Todo arquivo que o codigo carrega tem que estar no pacote. for f in $(grep -oh 'assets/[a-z_]*\.bmp' "$out/tree/code/"*.c | sort -u); do [ -f "$out/pack/$f" ] || { echo "falta $f" >&2; exit 1; }; done ( cd "$out/pack" emcc -O3 -sENVIRONMENT=web -sUSE_SDL=2 -sALLOW_MEMORY_GROWTH=1 --preload-file assets \ "$out/tree/code/main.c" -o "$out/ld44.js" ) { echo "== Faustian Sands (LICENSE do repositorio, Unlicense)" cat "$out/tree/LICENSE" echo echo "== CREDITS do repositorio" cat "$out/tree/CREDITS" echo echo "== SDL2 2.32.10 (porta do Emscripten $EMSCRIPTEN, LICENSE.txt do fonte; zlib)" cat "$(em-config CACHE)/ports/sdl2/SDL-release-2.32.10/LICENSE.txt" echo echo "== Emscripten (LICENSE, MIT / UIUC)" cat "$(dirname "$(command -v emcc)")/LICENSE" } > "$out/licenses.txt" rm -rf "$out/tree" "$out/pack" shasum -a 256 "$out/ld44.js" "$out/ld44.wasm" "$out/ld44.data" "$out/licenses.txt"