#!/usr/bin/env bash # Compila o LCD Racer (o Formula 1 de joyrider3774, MIT, com mudancas nossas) para o Vircon32, do repositorio do autor # (github.com/joyrider3774/formula1_vircon32, commit 6cfe82c) com a toolchain oficial pinada (Builds/vircon32/). # Mudancas (ver lcd-racer-vircon32/NOTICE.txt): nome ("Formula 1" e marca registrada: titulo da ROM e uma linha da # abertura, lcd-racer.patch), sons CC BY-NC-ND de terceiros trocados por sons nossos e fundo (foto de origem desconhecida) # trocado por um desenho nosso, ambos de gen-assets.py (precisa do Pillow: artifacts/tools/venv). # Dois builds seguidos; os dois .v32 precisam ter o mesmo SHA-256. # src/FredGames.Bundler/Builds/vircon32/install-toolchain.sh # uma vez # src/FredGames.Bundler/Builds/build-lcd-racer-vircon32.sh # Saida: artifacts/build/lcd-racer-vircon32/lcd-racer-vircon32-6cfe82c.v32 e ...-src.tar.gz set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" . "$here/vircon32/env.sh" [ -x "$V32_TOOLS/compile" ] || "$here/vircon32/install-toolchain.sh" SLUG=lcd-racer-vircon32 SRC_URL=https://github.com/joyrider3774/formula1_vircon32/archive/6cfe82ccd3e645b0fb57a475cdd793de86feb7af.tar.gz SRC_SHA256=6ca22673ec7c7b1a3bae374b5d24f0bd1c67cf97b8bd95f4011f088b8c9e17fb OUT_NAME=lcd-racer-vircon32-6cfe82c PY="$v32_root/artifacts/tools/venv/bin/python" out="$v32_root/artifacts/build/$SLUG" tgz="$out/cache/formula1_vircon32-6cfe82c.tar.gz" mkdir -p "$out/cache" [ -f "$tgz" ] || curl -fsSL "$SRC_URL" -o "$tgz" echo "$SRC_SHA256 $tgz" | shasum -a 256 -c - >/dev/null prepare() { # $1 = pasta rm -rf "$1"; mkdir -p "$1/lcd-racer" tar -xzf "$tgz" -C "$1/lcd-racer" --strip-components 1 local g="$1/lcd-racer" rm -rf "$g/gimp" "$g/screenshots" "$g/README.md" "$g/assets/sounds" ( cd "$g" && patch -p1 -s < "$here/lcd-racer-vircon32/lcd-racer.patch" ) "$PY" -I "$here/lcd-racer-vircon32/gen-assets.py" "$g" cp "$here/lcd-racer-vircon32/NOTICE.txt" "$here/lcd-racer-vircon32/gen-assets.py" "$here/lcd-racer-vircon32/lcd-racer.patch" "$g/" } for i in 1 2; do prepare "$out/tree$i" ( cd "$out/tree$i/lcd-racer"; mkdir -p obj bin export PATH="$V32_TOOLS:$PATH" compile src/formula1.c -o obj/formula1.asm assemble obj/formula1.asm -o obj/formula1.vbin for t in background bigfont lcdfont enemy player; do png2vircon assets/graphics/$t.png -o obj/$t.vtex; done for s in crash tick start gameover; do wav2vircon assets/sounds/$s.wav -o obj/$s.vsnd; done packrom Formula1.xml -o bin/Formula1.v32 ) >"$out/build$i.log" 2>&1 || { tail -20 "$out/build$i.log" >&2; exit 1; } done a="$(shasum -a 256 "$out/tree1/lcd-racer/bin/Formula1.v32" | cut -d' ' -f1)" b="$(shasum -a 256 "$out/tree2/lcd-racer/bin/Formula1.v32" | cut -d' ' -f1)" [ "$a" = "$b" ] || { echo "Dois builds deram ROMs diferentes ($a x $b)" >&2; exit 1; } cp "$out/tree1/lcd-racer/bin/Formula1.v32" "$out/$OUT_NAME.v32" prepare "$out/srctree" files=(); while IFS= read -r -d '' f; do files+=("$f"); done < <(cd "$out/srctree" && find lcd-racer -type f -print0) python3 -I "$here/sprig-web/pack-source.py" "$out/$OUT_NAME-src.tar.gz" "$out/srctree" "${files[@]}" rm -rf "$out/tree1" "$out/tree2" "$out/srctree" echo "$a $out/$OUT_NAME.v32 (dois builds iguais)"