Waveforge is the game I'm developing for GitHub Game Off 2025.
Waveforge is a 2D platformer where the player needs to manipulate water waves (and other physical phenomena) to somehow move a rubber duck to the checkpoint in a pixel emulated world with physics simulation (of it's own style, not always realistic though).
For more details about the game physics system, please refer to Physics System Documentation.
The game is finished to a playable state with 18 levels, published as version 0.4 on Itch.io. Try it out and let me know what you think!
The project consists of a C++ core logic with all the game mechanics and a scripting system for defining game UI written in TypeScript. This makes the build process two-fold and may require some setup.
You need to have CMake and a C++23 compatible compiler installed (e.g. GCC 14, Clang 20, MSVC 19.44.35219.0). Then run the following commands in the project root directory:
# Make sure to enter MSVC environment when on Windows
cmake -B build -DCMAKE_BUILD_TYPE=Release .
cmake --build build --config ReleaseChanging Release to Debug will build the debug version for development.
The direct dependencies will be automatically downloaded and built. Find the executable in build directory. The built program can be found at build/waveforge (or build/waveforge.exe on Windows).
For Linux systems, SFML might requires some additional system libraries. The simplest way is to install SFML via your package manager, so that all those internal dependencies are automatically handled. For example:
# Debian/Ubuntu
sudo apt install libsfml-dev
# Arch Linux and dirivatives
sudo pacman -S sfmlYou can also install those dependencies manually if you prefer not to install SFML system-wide. Please refer to SFML's official documentation for more details.
Scripted scenes are written in TypeScript and compiled to JavaScript bundles that are loaded by the QuickJS runtime at runtime.
Prerequisites: pnpm and Node.js.
pnpm install
pnpm buildBundles are output to assets/bundled-js/.
The optional Waveforge MCP server runs the unmodified game in a private Xvfb display and exposes mouse, single-key, screenshot, and batch tools over HTTP. It supports realtime and externally paused turn-based play with native 1x screenshots and isolated temporary saves.
The Pi + Firecracker harness runs the agent inside a microVM while the game stays on the host, and records screenshots, memory files, Pi sessions, compaction and evaluation budgets.
We would like to thank zurry for thier inspiring thoughts on game play, mechanics and level design. We would also like to thank RitaRossweisse301 for early testing and feedback.
We would also like to thank the following open source projects for making this game possible:
-
microsoft/proxy: A C++ library for "Next Generation Polymorphism"
-
SFML: Simple and Fast Multimedia Library for graphics and audio.
-
cpptrace: A simple & self-contained C++ stack trace library.
-
Aseprite: A pixel art tool used for creating pixel art assets.
Additionally, we would like to acknowledge GitHub and Lee Reilly for organizing the GitHub Game Off 2025 game jam, which provided the inspiration and motivation for this project.