← All work

Shapes

A twin-stick roguelike where you are a polygon and the number of sides you have is your health. Solo, or two people in one run over a relay I wrote.

Status
In progress
Year
2026
Role
Solo
Built with
Godot, GDScript, Cloudflare Workers, TypeScript
Shapes in play: a white triangle and a hexagon outlined on a dim blue arena floor, with the player's sides, armor, damage and speed listed in the top left and a minimap top right.

The idea

You play a polygon, and the side count is the character sheet. A triangle is fast, fragile, and hits for very little. A decagon has more than three times the health and damage, moves slower, and is a much larger target. Every combat stat in the game is derived from that one number, so growing a side is the main reward in a run and it is never free.

A run

Ten stages, each one a grid of arenas joined by corridors and generated fresh. The layout is built by a random walk across grid neighbors, so the walk is its own spanning tree and every arena is reachable by construction rather than by a check afterward.

  • Five rooms before the boss, drawn from combat, treasure, shop and challenge
  • One weapon, one ability, one set of armor, with no backpack: picking something up swaps it and drops the old one at your feet
  • Passive items stack, and proc chances stack hyperbolically, so no number of copies ever reaches certainty
  • Elite prefixes bolted onto ordinary enemies, armored through to splitting, always visibly marked
  • Ten biomes told apart by the color and reach of their light rather than by their floor tiles

Two people in one run

Co-op can run through Steam or through a WebSocket relay I wrote for Cloudflare Workers. Both feed into the same multiplayer layer, so the game does not need a separate set of rules depending on how the two players connected.

The host owns the world: enemies, damage, rooms and floor progression all come from there, while each player owns their own movement. Joining late, changing floors, losing a connection and leaving a run all turned out to matter just as much as getting two polygons to move around on the same screen.

Where it stands

This is what I am working on now, and nothing is public yet. The parts that are pure arithmetic run headless under unit tests: stat derivation, armor layers, the item table, and the floor layout.