SAT 3 OCT 2026

Dev Journal: Bad Friends Bowling

This one came to me as I was coming out of a dream: what if Bowling but Coyote v. Acme? Imagine throwing oil slick on your friend’s lane or turning their ball into the size of a pea?

With this one I wanted to give myself a couple of new challenges. First, I wanted to see if I could build something in 3D with plausible-enough physics. Second, I wanted to see if I could build something multi-player. Bowling, with its naturally “fixed” camera view point and asynchronous gameplay worked well for this. Where “The Bus That Couldn’t Slow Down” centered around the excitement of a near miss, this was going to focus on friendly frustration of friends eff’ing over friends.

Real physics, or it doesn’t count

Nothing about the card layer would work if a clean throw doesn’t knock down pins convincingly. So before any card chaos got built, I started with a “toy” — one lane, one player, no cards, just checking whether pin-on-pin collision chain-reacts convincingly and what a low-poly look can get away with. The controls needed to feel like “real” — not like real bowling or like Wii bowling, but like it really mattered what angle I chose, how hard I threw, and how much spin I added. The pins were the first giveaway: the first pin shape had the taper backwards, wide at the base instead of narrow, and a glancing hit produced zero rotation, no chain reaction, nothing. Swap in five stacked segments shaped like an actual pin’s base-belly-neck taper, same throw, same angle, and it topples the whole rack. That’s when it started to feel like a toy worth building a game on top of.

Vibe: a blacklight lounge that never existed

“Low-poly” couldn’t mean “no personality”. A cel-shaded approach got me thinking about 1950s Cartoon Modern, kitschy voodoo lounge, swag, and space-age bachelor pad styles, the ones that were already waning once again when I lived in Los Angeles in the early aughts. On screen that meant thick black ink outlines, a fluorescent palette, a magenta haze hugging the floor. The outlines took two tries: Three.js’s built-in outline post-process rendered with zero visible effect, because its edge color composites additively, a mode built for bright highlights that does almost nothing to a near-black line. The fix was a small duplicate mesh per object, slightly inflated, rendered back-face-only in solid black. It reads as an ink line because it physically is one.

What the cards are for

As essential as the physics and the vibe were, the heart of the game was in the cards. Players needed to be able to “read” them as instantly as they could read Coyote’s traps in the Chuck Jones cartoons. When cards were placed, the effect needed to feel real, in a kind of cartoon logic way — glue needed to slow a ball down in a kind of unpredictable way. An anvil needed to block the lane, but just enough that maybe you could throw around it. And these cards needed to stack, so friends could layer pain on pain and sabotage each other collectively.

Even playing the alpha release by myself is enough to make me giggle, but the real hook only shows up with real people in the room, sabotaging each other on purpose.