Sam Gilson

Surfs Up!

Game

Surfs Up! is Counter-Strike surfing in a browser, on two courses: Panzerhandschuh's surf_utopia_v3 and Arblarg's nine-stage surf_kitsune. Each is read brush by brush from the original map file, so every ramp, seam and gap is where it was. On kitsune a fall sends you back to the start of your stage with the clock still running, and its secret shortcuts still remember who found them. Only the look has changed: a school gym on a Saturday, where the ramps are gym mats, the pits are full of foam cubes, and surfing is just something kids do.

The movement is ported from the Source engine's. Air acceleration is capped at 30 units a second in the wish direction but not in the rate, ramps are too steep to stand on (the 0.7 rule), velocity is clipped along a ramp, and gravity is applied in half-ticks at 64 ticks a second, with CS:GO surf-server settings. Rampbugs are fixed the way surf servers fix them. The clock starts when you leave the start and stops at the course's finish, and it counts sync, strafes and gain as the CS surf timers do.

You start with your palms pressed together. A finish earns a pool noodle; bronze, silver and gold times earn a kickball, a squeaky duck and a foam finger; and the best time in the gym earns the rubber chicken. Click to squeeze what you hold.

Up to eight people can surf together, meeting by room code or by pasted invitation over ptonkle's Ape Race mesh. Each browser re-runs everyone from their inputs and rolls back when inputs arrive late, and each finished run is sent once, whole, and races beside you as a ghost next time. Every rule runs in a Rust core compiled to WebAssembly, and the page draws what the core returns. The art is drawn in TikZ.

Playing it

Pick a course on the title, click Surf, then click the view to capture the mouse. Do not hold W on a ramp: hold A when the ramp rises to your left and D when it rises to your right, and turn the mouse the same way. Space or the scroll wheel jumps, Shift or C ducks, R goes back to the start, Q swaps what you hold, Tab shows the scoreboard, and Escape pauses. Your best run and what you have earned are kept in the browser you played in.

Checked in Chromium, Firefox and WebKit.

Open the project · Source code

All tools and games