Inspiration
I'm from Armenia. And if you grow up here, you don't need statistics to know how many people get cancer. A lot of it traces back to the environment: gold and mineral mines all over the country, air you can sometimes taste. It's the kind of thing you don't notice until it's someone in your own family.
I was turning all of that over one night - thinking about life, honestly, in the heavy sense - and somehow landed on Conway's Game of Life. That 1970 cellular automaton. One rule about neighbours, and out of it comes a whole living, dying world. The connection stuck, and it gave the project its name: Every Cell Counts. Every cell on the grid, and every person too.
What it does
It's a duel. Conway's Life turned into a 1v1 (or 2v2) fight, played inside a Reddit post.
You drop anchors - permanent seed cells that never die. Every anchor kicks off a cascade: the Life rules spread out from it and your colour grows across the board. You're trying to out-grow the other player and choke out their core before they do it to yours. Nothing on the board moves on its own - it only ever reacts to a move someone made. That's kind of the whole feel of it.
Playing a friend is dead simple, and very Reddit: the match is the post. You open a room post, your friend opens the same post, and that's it - same game. No room codes, no sign-up, nothing to paste. (There's solo stuff too if nobody's around - a bot to fight, some training tasks, and three little demos that teach you the rules.)
A quick note on the rules
Under the hood it's plain B3/S23 Life. A dead cell comes alive if exactly three of its neighbours are alive:
Σ alive(neighbours) = 3
and a living cell hangs on with two or three:
Σ alive(neighbours) ∈ {2, 3}
How I built it
The original game runs on a WebGL client with a Go + WebSocket + SQLite server. None of that is allowed on Devvit, so I had to rethink the backend from scratch. The thing that saved me: the client already simulates the entire world, deterministically. So the server doesn't have to simulate anything at all.
That's really the trick the whole port leans on. I reused the Life engine and the whole UI as-is inside the Devvit web view. The server (Hono) is just Redis for state and Realtime for passing messages around. A friend match is lockstep - the server only forwards anchor placements and keeps the room's phase in sync (lobby -> setup -> run -> done). Since both players run the exact same engine, they land on the exact same result without the server ever running a single tick. Player identity is just the Reddit account, which honestly was a relief after hand-rolling my own login for the standalone build.
Built With
- canvas
- cellular-automata
- conways-game-of-life
- deterministic-lockstep
- devvit
- esbuild
- hono
- html5
- javascript
- multiplayer
- node.js
- realtime
- redis
- typescript
- vite
- webgl
- webview
Log in or sign up for Devpost to join the conversation.