Go to file
doyle 03920e311c fp: Update website directory to 'Terry_Cherry' 2024-01-21 00:37:07 +11:00
Data tely: Add a way to stop music from playing 2023-11-14 08:44:10 +11:00
External fp: Update build script for new tely 2023-12-01 16:46:58 +11:00
Tools fp: Add emsdk 2023-10-25 21:56:19 +11:00
.clangd fp: Get closer to supporting web deployment 2023-10-15 01:31:33 +11:00
.gitattributes fp: Add readme 2023-10-25 21:55:19 +11:00
.gitignore fp: Start working on linux support 2023-11-24 00:22:07 +11:00
.gitmodules git: Re-add TELY as submodule 2023-09-17 18:24:33 +10:00
_clang-format fp: Make transported entities adopt the new mob spawner waypoints 2023-10-14 12:01:22 +11:00
build.bat build: Fix compile errors on Windows from Linux changes 2023-11-26 14:03:46 +11:00
build.sh build: Get changes for linux 2023-11-26 18:43:04 +11:00
build_all.bat fp: Add quick tutorial at beginning of game 2023-10-29 17:30:08 +11:00
build_assets.bat fp: Integrate perry assets 2023-10-21 16:30:15 +11:00
deploy_website.bat fp: Update website directory to 'Terry_Cherry' 2024-01-21 00:37:07 +11:00
feely_pona.cpp fp: Update build script for new tely 2023-12-01 16:46:58 +11:00
feely_pona.h fp: Improve tutorial, add a wave break every 3 waves 2023-10-29 23:45:45 +11:00
feely_pona_build.cpp fp: Update build script for new tely 2023-12-01 16:46:58 +11:00
feely_pona_emscripten_shell.html fp: Tweak html to had description 2023-10-25 22:39:55 +11:00
feely_pona_entity.cpp fp: Integrate new billboard 2023-10-23 22:13:03 +11:00
feely_pona_entity.h fp: Rename String8 to Str8 2023-10-24 23:41:15 +11:00
feely_pona_entity_create.cpp fp: Do some wave balancing 2023-11-02 08:30:37 +11:00
feely_pona_game.cpp fp: Update build script for new tely 2023-12-01 16:46:58 +11:00
feely_pona_game.h fp: Update build script for new tely 2023-12-01 16:46:58 +11:00
feely_pona_misc.cpp fp: Upgrade TELY and simplify build 2023-10-29 15:14:16 +11:00
feely_pona_sprite_packer.cpp fp: Update build script for new tely 2023-12-01 16:46:58 +11:00
feely_pona_stdlib.h fp: Prepare for emscripten (web) support 2023-10-14 17:21:23 +11:00
feely_pona_unity.cpp fp: Upgrade TELY and simplify build 2023-10-29 15:14:16 +11:00
feely_pona_unity.h fp: Update build script for new tely 2023-12-01 16:46:58 +11:00
project.rdbg fp: Async load audio 2023-11-26 23:45:50 +11:00
readme.md fp: Update readme for new build details 2023-10-29 23:47:50 +11:00


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: Engine & gameplay programmer
  • Joshalosh: Game designer, sound, gameplay programmer
  • Tom: Art

This game is currently available online at Terry Cherry.


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).


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.


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. 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.