# Feely Pona (aka. Terry Cherry) This is the repository for the game Terry Cherry that was developed as part of an impromptu game-jam in September 2023 over 4 weekends to make a hero cross x tower-defense mashup combination game. The game was developed in C++ using Raylib 4.5.0 as the base framework for the game. This game was developed with 3 people - [Doyle](https://doylet.dev): Engine & gameplay programmer - [Joshalosh](https://github.com/joshalosh): Game designer, sound, gameplay programmer - Tom: Art This game is currently available online at [Terry Cherry](https://game.doylet.dev/terry_cherry). ## Building We target Windows and the web via WASM using Emscripten. The game is built using our C++ meta build program (which generates command invocations and forwards them to the command line). ### Windows You must ensure you have MSVC's `cl.exe` on your path to build. This game was tested on MSVC 2023 (v14.34.31933). For most intents and purposes you may simply execute `build_all.bat` on Windows which bootstraps the build program and automatically calls the meta-build program. With fast computers nowadays our default is to build all targets by default (except web due to extra toolchain requirements). The game supports hot-reloading by storing the game code in the DLL. 2 variants of the build are published, the DLL and non-DLL version. The DLL version can be rebuilt whilst running to hot-reload game code whereas the non-DLL variant bakes the entire game into one executable. ### Web A web ready version using WASM can be built by passing `--web` to the meta build program/script. You must have the EMSDK toolchain activated and in your path from [Emscripten SDK](https://github.com/emscripten-core/emsdk). This repository provides a slimmed down version of EMSDK in the `Tools` folder zipped up and served over Git LFS. The slimmed down EMSDK is the official download with a bunch of unused binaries and directories removed that aren't strictly necessary for building the web target (e.g. provide a stub Java version file to skip it, delete unused clang binaries). Unzip the slimmed down EMSDK `Tools/2023-10-10_emsdk_40e9cd8f.7z` or install from Github and download the latest SDK. A full build for the web target can then be done by ``` # Run EMSDK's script to add the toolchain to the path Tools\emsdk\emsdk.bat activate latest # Build the game build_all --web ``` This will produce at `Build\Terry_Cherry_Emscripten` a HTML and WASM file ready to be served by the browser. To test it locally you may start up a local server for that directory, e.g. ``` cd Build\Terry_Cherry_Emscripten python -m http.server ``` ## Asset Packaging Assets are stored in the `Data` folder. In particular, textures are stored as individual sprites and combined using a utility program to pack them into a sprite sheet with their positions annotated into a specification file that is loaded at runtime. Textures are specified in the `sprite_spec.txt` file and given to the sprite packer tool from this repository. The sprite packer will generate the sprite sheet.