In the middle of playing my very first round with one of my adult children, the other adult child audio recorded part of our game and started replaying their recording to disrupt the rest of our game. All in good fun and we laughed pretty hard. Also, we had fun with the game.
I don't think that could be prevented, either. You could have the protocol exchange signing keys at the start and sign every message, but it's stretching the amount you can do with available audio bandwidth already so I expect that either wouldn't work or would become unbearably slow.
you use a cyclic sequence counter and a rolling replay protection window to avoid overflow with the signature. use an epoch counter for rollovers after as long a period as you can stuff into the value.
you'll end up being protected from overflow for a practically-forever length of time with fairly few bits as long as the game isn't polling extremely fast.
it's not foolproof, and it's to thwart a kid, so ehh i'm not that into it.
I wonder if the game state could be sent in an analog/continuous encoding rather than as encoding of a digital state. So that the human player could learn to roughly interpret the sounds, or at least figure out that the sounds are correlated with what’s happening.
That might have a different, possibly satisfying feel compared to the current bloops.
State would not be reconstructed bit-perfect but for a model of a physical system like pong, approximate might be ok.
Another game experiment - I wanted to see if it was feasible to have a two player game on two separate phones running in static HTML where the networking code uses chirps sent via the microphone. It seems to work!
Build a two player competitive pong like game where two players use their phones close to each other and the game state is sent via audio noises which the web microphone API can interpret - but add graphical and gameplay twists to make it a lot more fun and intertwine than pong
Go ahead and do it, it's honestly just a single prompt.
(It's pretty loud and annoying, so sitting next to someone having your phones chirp at each other would be more of a social commentary than anything else.)
In the middle of playing my very first round with one of my adult children, the other adult child audio recorded part of our game and started replaying their recording to disrupt the rest of our game. All in good fun and we laughed pretty hard. Also, we had fun with the game.
That's excellent!
I don't think that could be prevented, either. You could have the protocol exchange signing keys at the start and sign every message, but it's stretching the amount you can do with available audio bandwidth already so I expect that either wouldn't work or would become unbearably slow.
Signing the transmission isn't enough to prevent a replay attack.
It should be if each message includes an incrementing counter and the clients keep track of which counters they have already seen.
You don't actually need the signing if you have the counters (if your ~only goal is to prevent replay attacks of that form).
Yes, exactly, signing the transmission is not enough.
You've just added a nontrivial amount of memory usage as well that will look a lot like a memory leak as it grows.
you use a cyclic sequence counter and a rolling replay protection window to avoid overflow with the signature. use an epoch counter for rollovers after as long a period as you can stuff into the value.
you'll end up being protected from overflow for a practically-forever length of time with fairly few bits as long as the game isn't polling extremely fast.
it's not foolproof, and it's to thwart a kid, so ehh i'm not that into it.
Fun idea, Simon!
I wonder if the game state could be sent in an analog/continuous encoding rather than as encoding of a digital state. So that the human player could learn to roughly interpret the sounds, or at least figure out that the sounds are correlated with what’s happening.
That might have a different, possibly satisfying feel compared to the current bloops.
State would not be reconstructed bit-perfect but for a model of a physical system like pong, approximate might be ok.
Simon Willison:
Another game experiment - I wanted to see if it was feasible to have a two player game on two separate phones running in static HTML where the networking code uses chirps sent via the microphone. It seems to work!
Build a two player competitive pong like game where two players use their phones close to each other and the game state is sent via audio noises which the web microphone API can interpret - but add graphical and gameplay twists to make it a lot more fun and intertwine than pong
Claude Opus 5.5 Extra in Claude Code.
Tags: game-design, ai, generative-ai, llms, claude-code
Super! Is it open source?
It's in my simonw/tools repo which uses Apache 2.0 for everything (bar some vendored libraries which maintain their original license.)
Here's the Chirp Pong code: https://github.com/simonw/tools/blob/main/chirp-pong.html
Very cool! How much bandwidth can you get using this method?
I have an experimental page to test that here but I've not run it yet because I'm on a plane and don't want to bother the other passengers: https://static.simonwillison.net/static/2026/radio-probe.htm... (may make very annoying noises.)
Why not use this technology to build a chat application?
Go ahead and do it, it's honestly just a single prompt.
(It's pretty loud and annoying, so sitting next to someone having your phones chirp at each other would be more of a social commentary than anything else.)
How many tokens was that in the end?
[dead]