Skip to content

Wave Jump

Two players, one keyboard, and a wave that won't hold still.

2018 · with Cal Carlson, Daniel Olson and Lisa Mabley

Artist statement

Wave Jump is a race for two people sharing one keyboard. You each ride a white wave across an 80s sunset grid, and whoever dives through the checkered gate first gets the point.

The wave never holds still, and you never get the same one twice, so nobody gets to learn the course.

Play it

Click the game to start. Player 1 uses W A S D, player 2 the arrow keys. It starts muted here; the buttons in the corner turn sound on and go full screen. Open it full screen →

Wave Jump: the sunset title screen, then two players riding a rolling white wave over a blue grid, and a big "Player 1 Wins" screen each time one reaches the checkered gate

How it's made

JavaScript · Phaser · Arcade physics · Vite

The wave is 964 small sprites, and every frame each one gets a new up-and-down speed from a sine curve, with a random strength rolled for the whole wave. We built it in Phaser over the weekend of January 26 to 28, 2018. In 2025 I moved it to a modern build so it still runs in a browser, and in November 2026 I tuned it again: it plays the same in any size window, the wave holds you up even on a slow computer, and it goes full screen.

964 sprites, one every 2 px across a 1920 px world // every frame: amp = random(100, 200) for each sprite i: vy = sin(0.3 × (i × 0.1 + frame)) × amp × 2 RIDE W or ↑ jumps, A D or ← → steer DIVE hold S or ↓ to drop through GATE somewhere in the middle third +1 POINT first through it, then a new round the players land on it
964 sprites, 2 px apart // every frame: amp = random(100, 200) // for each sprite i: vy = sin(0.3 × (i × 0.1 + frame)) × amp × 2 the players land on it RIDE W or ↑ jumps, A D or ← → steer DIVE hold S or ↓ to drop through GATE somewhere in the middle third +1 POINT first through it, then a new round

Lineage

If you liked this project, consider sharing it on Hacker News, Bluesky, LinkedIn, or X.

← All works