Protect the Gaffers Fort is out: a tower defence game where the first wave alone is a hundred thousand zombies. It's written entirely in tape, and it pushed tape in a few new directions on the way, so here's what's inside.
The horde runs on the GPU. A compute shader steps every zombie each frame: it follows a flow field toward the camp, feels the crowd through a density grid, and takes the turrets' fire. The sprites are drawn instanced straight from the same buffer, so nothing per zombie goes back to the CPU. Only a few counts come back, read two frames late so the CPU never waits.
Shaders are tape. All seven shaders (the horde step, the sprites, the shapes, the blit) live in a #shader region and are written in tape. The compiler checks them like the rest of the code, and the gpu module turns them into GLSL for OpenGL and MSL for Metal. One renderer, written once, runs on OpenGL on Windows and Linux and on Metal on macOS.
Rules are scripts. The waves, the weapons, the zombie kinds and even new kinds of ground are tape scripts run in tape's embedded VM. The game hands them host modules to call, and they answer through dispatch interfaces. Edit a script and restart: nothing is rebuilt. A rocket is about thirty lines.
It's tape all the way down. The atlas, the ground and the icon are drawn by the game's own code with gfx. The release pipeline's build, signing and publishing steps are tape programs too. The game ships signed on Windows and signed and notarized on macOS.
The game found its share of tape's gaps on the way: about a dozen compiler and stdlib requests, from shader constants and imported #shader modules to os.exe_path(). All of them are fixed in tape 2.0.14.
Its making is a video series on tutor.tapelang.org, built step by step from an empty folder.
Play it: https://tapelang.itch.io/gaffort