#!/usr/bin/env bash # Compila o Parallel Overhead 1.2.0 (Linus Vanas, 2020-2026; codigo MIT, arte e sons CC0, musicas "Fast Pulse" # e "Unstable Pulse" de oglsdl, CC0; codeberg.org/Huitsi/ParallelOverhead) em WebAssembly com o Emscripten # 6.0.10 e a porta SDL2 dele. O laco principal do jogo e bloqueante (while(1) com SDL_Delay); o ASYNCIFY o # deixa ceder ao navegador sem mudar o codigo. O contexto GLES 2.0 do jogo vira WebGL 2 (as texturas do # tunel tem tamanho que nao e potencia de 2 e usam REPEAT, que o WebGL 1 nao aceita). # # source /emsdk_env.sh # emsdk install 6.0.10 && emsdk activate 6.0.10 # src/FredGames.Bundler/Builds/build-parallel-overhead.sh # # Fonte: o "source_with_built_assets" do release 1.2.0 (o mesmo codigo da tag, mais os .wav que o autor gera # com LMMS e sfxr-qt, que nao temos). Os dois .wav de musica (20 MB cada, PCM) viram IMA ADPCM com # parallel-overhead/wav2adpcm.py (4x menores; o SDL decodifica na carga); os efeitos (21 e 219 KB) ficam como # estao. parallel-overhead-fredygames.patch: Esc nao fecha o jogo, janela de 720x720, contexto WebGL 2 e o audio num # dispositivo so (os efeitos entram no callback da musica; o navegador abre um dispositivo apenas). # # Saida: artifacts/build/parallel-overhead-1.2.0/{parallel-overhead.js,.wasm,.data}, que o bundle.yaml do jogo # confere pelo SHA-256. set -euo pipefail VERSION=1.2.0 SRC_SHA256=741c80654db214b509eb4cd211887e643703d5da8f0bc49c99008465fc4c3fd7 SRC_URL=https://codeberg.org/Huitsi/ParallelOverhead/releases/download/$VERSION/ParallelOverhead-$VERSION-source_with_built_assets.tar.gz 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/parallel-overhead-$VERSION" cache="$root/artifacts/build/cache" tarball="$cache/ParallelOverhead-$VERSION-source_with_built_assets.tar.gz" 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 parallel-overhead/ (repositorio) ou ao lado do script (pasta de fontes do site). aux() { if [ -f "$here/parallel-overhead/$1" ]; then echo "$here/parallel-overhead/$1"; else echo "$here/$1"; fi } mkdir -p "$cache" if [ ! -f "$tarball" ]; then curl -fsSL --retry 4 -o "$tarball.part" "$SRC_URL" mv "$tarball.part" "$tarball" fi echo "$SRC_SHA256 $tarball" | shasum -a 256 -c - >&2 rm -rf "$out" mkdir -p "$out/tree" "$out/data" tar xzf "$tarball" -C "$out/tree" --strip-components 1 patch -d "$out/tree" -p1 --no-backup-if-mismatch < "$(aux parallel-overhead-fredygames.patch)" # Dados no caminho que o jogo procura (/../share/games/parallel_overhead/; no Emscripten a base e "/"). cp "$out/tree/data/"*.bmp "$out/tree/data/"*.glsl "$out/tree/build/move.wav" "$out/tree/build/death.wav" "$out/data/" for m in fast_pulse unstable_pulse; do python3 -I "$(aux wav2adpcm.py)" "$out/tree/build/$m.wav" "$out/data/$m.wav" done TZ=UTC find "$out/data" -exec touch -t 202001010000 {} + ( cd "$out" emcc -O2 -std=gnu99 -ffile-prefix-map="$out/=" -w -I tree/src -DVERSION="\"$VERSION\"" tree/src/*.c \ -sUSE_SDL=2 -sASYNCIFY -sMAX_WEBGL_VERSION=2 -sALLOW_MEMORY_GROWTH -sENVIRONMENT=web -lm -lidbfs.js \ -sEXPORTED_RUNTIME_METHODS=FS,addRunDependency,removeRunDependency \ --preload-file data@/share/games/parallel_overhead \ -o parallel-overhead.js ) ls -l "$out"/parallel-overhead.* shasum -a 256 "$out"/parallel-overhead.js "$out"/parallel-overhead.wasm "$out"/parallel-overhead.data