Case Study
A retro browser platformer where the level is whatever you draw. Drag to place collidable platforms, dodge a shooting eye, grab coins, survive. Built for a JS game jam and tuned for mobile and desktop from the same codebase.
Most platformers give you a hand-designed world. Shapescape gives you an empty one and a mouse. The core loop is: the world scrolls, an enemy tracks you, you draw terrain in real time to block projectiles, land jumps, and corral coins. Drawing is the game mechanic, not a level editor mode.
requestAnimationFrame loop drives physics, enemy AI, projectiles, and spawning inside one React state update per frame to keep things predictable.Shipped as a playable game embedded in this site (tap the age counter to open it) and open-sourced as js-gamejam on GitHub. It became a useful testbed for squeezing game-loop logic into a React component without fighting the framework, and a reminder that the best game-jam mechanics are usually the ones that collapse two systems (drawing + physics) into one verb.