#!/usr/bin/env bash # Compila o Cultivation do fredygames.com: o jogo de jardinagem em comunidade de Jason Rohrer (2007, # dominio publico) em WebAssembly, com o Emscripten 6.0.10. Este script e os arquivos de # Builds/minorgems-web/ 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-cultivation.sh # # Fonte: o tarball upstream do Debian (cultivation_9+dfsg1.orig.tar.gz: o codigo da versao 9 do autor, # com a biblioteca minorGems dele, sem a pasta do portaudio), conferido pelo SHA-256. O jogo nao leva # nenhuma mudanca de codigo: o que o Emscripten nao tem fica nos arquivos de Builds/minorgems-web/ # (GLUT que falta, portaudio sobre SDL2 audio, GLU e glBegin/glEnd, sleep, ver glut-compat.h). # # Saida: artifacts/build/cultivation-9/cultivation.{js,wasm,data}, que o bundle.yaml confere pelo SHA-256. set -euo pipefail SRC_SHA256=16b8844ffe65264e6d46456b63c3742c6fbc4186c423a0735ee272f4bee3051b here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [ -f "$here/minorgems-web/common.sh" ]; then source "$here/minorgems-web/common.sh"; else source "$here/common.sh"; fi mgw_init cultivation tarball="$(mgw_fetch "https://deb.debian.org/debian/pool/main/c/cultivation/cultivation_9+dfsg1.orig.tar.gz" \ cultivation_9+dfsg1.orig.tar.gz "$SRC_SHA256")" out="$mgw_root/artifacts/build/cultivation-9" rm -rf "$out" mkdir -p "$out/src" "$out/obj" "$out/data" tar xzf "$tarball" -C "$out/src" --strip-components 1 mgw_install_portaudio "$out/src" # Arquivos que o jogo le do diretorio de trabalho. So o ingles: as traducoes do pacote (frances e portugues, # esta de Jose Jorge) ficam de fora, porque o dominio publico e declarado pelo autor e nao ha nada dizendo o mesmo # das traducoes de terceiros. game="src/game2/gameSource" cp "$out/$game/font.tga" "$out/$game/features.txt" "$out/$game/language.txt" "$out/data/" mkdir -p "$out/data/languages" cp "$out/$game/languages/English.txt" "$out/data/languages/" cd "$out" mgw_flags sources=( src/minorGems/graphics/openGL/ScreenGL.cpp src/minorGems/graphics/openGL/SingleTextureGL.cpp src/minorGems/io/linux/TypeIOLinux.cpp src/minorGems/util/stringUtils.cpp src/minorGems/util/StringBufferOutputStream.cpp src/minorGems/graphics/converters/PNGImageConverter.cpp src/minorGems/io/file/linux/PathLinux.cpp src/minorGems/system/unix/TimeUnix.cpp src/minorGems/system/linux/ThreadLinux.cpp src/minorGems/system/linux/MutexLockLinux.cpp src/minorGems/util/TranslationManager.cpp $game/glCommon.cpp $game/features.cpp $game/game.cpp $game/World.cpp $game/Plant.cpp $game/PlantLeaf.cpp $game/PlantFlower.cpp $game/Fruit.cpp $game/Gardener.cpp $game/Portal.cpp $game/GardenerAI2.cpp $game/FlyingObject.cpp $game/emotionIcons.cpp $game/landscape.cpp $game/SoilMap.cpp $game/Seeds.cpp $game/Genetics.cpp $game/GardenerGenetics.cpp $game/PlantGenetics.cpp $game/PortalLayerGenetics.cpp $game/ImmortalGenetics.cpp $game/sound/MusicNoteWaveTable.cpp $game/sound/MusicPart.cpp $game/sound/MusicPlayer.cpp $game/sound/SoundPlayer.cpp $game/sound/SoundSamples.cpp $game/sound/SoundEffectsBank.cpp ) for f in ButtonBase PlantButton PlotButton WaterButton PoisonButton HarvestButton EmotionButton \ PauseButton RestartButton QuitButton TextDisplay ObjectSelector EatButton GiftButton DiscardButton \ MateButton FollowButton TexturedPanel NextTutorialButton TextBlockGL; do sources+=("$game/userInterface/$f.cpp") done mgw_compile_all "${sources[@]}" "$mgw_compat/glut-compat.c" "$mgw_compat/pa_sdl.cpp" em++ "${MGW_LINKFLAGS[@]}" "${MGW_OBJS[@]}" --preload-file data@/ -o cultivation.js rm -rf obj shasum -a 256 cultivation.js cultivation.wasm cultivation.data