Skip to content
nkh.do
Go back

Boom clone devlogs #3: Going Online

It’s online. Right now. At boom.nkh.do. Bring a friend, bring an enemy, bring someone you tolerate at work. I have a multiplayer game on the internet. I am a serious person now.

If you missed the earlier devlogs: #1 was rectangles and bots, #2 was sprites and a map editor. This one is the multiplayer one, plus a fistful of mechanics I’m copying straight out of CrazyArcade because the original was right and I am not above stealing from giants.

Multiplayer, finally

Multiplayer

The fixed tick from devlog #1 was always a setup for this. Colyseus does the heavy lifting — authoritative rooms, schema-encoded state diffs, and a websocket protocol I did not have to write. The dream.

Architecture:

One change since #1: the tick is now 60Hz instead of 20Hz. 50ms per frame felt fine when only one character moved. With two humans watching each other slide between tiles, it looked like a flipbook. 16.67ms looks like a movie. The sim math didn’t change — sub-cells per tick scaled down so movement speed stayed identical — only the framerate. Bandwidth tripled in the worst case, which still rounds to “nothing” because Colyseus only ships diffs.

No client-side prediction. Your ping is your ping. If a stranger from across the planet joins my room and tries to dodge a bomb, that’s the day I learn what client-side prediction is. Today is not that day.

Hosting is a single Node process behind nginx on its own VPS — separate box from the one serving this blog, because mixing a websocket game server with a static site is the kind of decision you regret the first time one of them needs a restart. If 200 people show up at once, the box catches fire and you get devlog #4 early.

Joining flow: open boom.nkh.do, enter a superb name, join or create a room, pick class and team, hit ready. Room codes are six alphanumeric characters. Yes, they can spell rude words. No, I will not be filtering them.

Tile pushing, finally for real

Pushable tiles were a flag in the bitmask since #1 but never actually pushed. They sat there, smug and immobile, pushable in spirit. Now they push.

Walk into a SOLID | PUSHABLE tile. If the next tile over is empty, it slides one cell and you continue your motion as if the wall had gotten out of your way. Which it had. Because you bullied it. If the next tile is solid, nothing moves and we all stand in mutual disappointment.

Edge cases, kept boring on purpose:

The map editor got a “Pushable” checkbox with the same auto-constraint as before: pushable requires solid. A pushable non-solid tile is a contradiction my game refuses to entertain.

1/2 bomb placement

If you played CrazyArcade, you already know. If you didn’t, go try it — explaining it in text would do it a disservice and we’d both feel cheated.

Class stats, recalibrated

The class stats table from devlog #2 was a vibe-based guess. Numbers I made up while squinting at the screen. Turns out: the original CrazyArcade balance is, against all odds, good — the result of twenty years of players yelling at the developers — and I am not going to out-design that with a spreadsheet I wrote at midnight.

So I copied the base stats too. Speed, max bombs, max fire — straight from the CrazyArcade character tables. My five classes now map cleanly onto the archetypes from the original, just with Tiny Swords sprites instead. The warrior is balanced because the corresponding CrazyArcade character was balanced. The pawn spams bombs because its CrazyArcade analogue spammed bombs. Twenty years of community-tuned balance, applied via Ctrl+C.

The lesson, repeated for my own benefit: when you’re cloning a thing, clone the thing. Don’t reinvent the parts that are already solved. The parts the original game got wrong are the ones worth changing. Everything else is borrowed time.

New tiles and blocks

New tiles & blocks showcase

The tile palette in #2 was “walls, breakable blocks, bushes.” Functional. Boring. Now:

UI, less embarrassing now

The new lobby UI

The lobby grew up. The HUD grew up. The results screen exists, properly, instead of a single “you won” in Arial.

What’s next

Until then, the game is up at boom.nkh.do, the tiles push, and somewhere a player is realizing they placed the bomb on the wrong sub-cell. See you in #4.


Share this post on:

Previous Post
Boom clone devlogs #4: Ride the Pig
Next Post
Boom clone devlogs #2: The Glow-Up