
Grid Survivors is my take on the Risk of Rain / Vampire Survivors style of roguelike after being inspired playing way too much Megabonk. Goal with it is a wide bredth of items that play on a fun twist- the order you stack items in your inventory changes their effects and effectiveness.

You pick a grid runner (each with it’s own unique scaling stat, like Hydra’s +1 projectile per level up) and a starting weapon (you can get more as the run goes), then survive as long as you can and try and earn the leaderboard (something I borrowed from Megabonk). Weapons and items are Tetris-like shapes you place in a fixed size grid inventory, and adjacency amplifiers chain multiplicative bonuses across cells- some even double the effect of other items they are next to


A run in progress, and the same run once the build gets going:


The build
I went with a PixiJS canvas for the actual game world (was pretty performant, I needed to improve performance a few times when the late game proved to be a lot on a phone), React for all the menus, and used object pools + spatial hashing so for the game state so when it hits thousands of enemies it wouldn’t break. In March I came back to it and added the leaderboard and code-split the bundle, which cut the initial load by 93%. April was mostly mobile work: PWA safe areas, a tutorial, 25 achievements, six new runners, and crash recovery that auto-saves interrupted runs and submits them still to the leaderboard.
The leaderboard
Flash games used to have leaderboard submissions without needing an account, and tbh I missed those days. I hooked this up so on your first submission you pick a callsign, the game generates a device UUID, and both live in localStorage. Runs are HMAC-signed and posted to a Cloudflare Worker backed by a D1 database, which checks the stats against sanity bounds and rate-limits each device to one submission per minute. Failed submissions queue offline and retry on the next load. Boards reset monthly, and the top 10 shows each player’s best run. I did the monthly reset because like Megabonk I think that encourages competition and keeps things fresh between updates.

Mobile
Had some fun making the joystick for mobile, also small things like the minimap collapses, and every overlay respects iOS safe-area insets so nothing hides under the notch when you run it as a PWA.



Links
Live at grid-survivors.asynchronous.winG