Arcade · Sports

Fluid Table Tennis

A Plasma Pong-inspired table tennis rally over a real-time Navier-Stokes fluid solver: paddles push jets of colored dye out and suck the ball in for a charged return.

Overview

Beneath each rally runs a real-time Navier-Stokes fluid solver rather than a static table: the whole play area is a grid of flowing colored dye, and every paddle action injects currents straight into it. Fluid Table Tennis is Anirudh Joshi's 2012 open-source HTML5 canvas demo, a tribute to Steve Taylor's Plasma Pong assembled on top of Jos Stam's Stable Fluids algorithm, with Oliver Hunt's monochrome solver and R. J. Marsan's RGB dye work stitched in. It renders a Pong-style rally over that simulation at a 60 FPS target, so the swirling color field behind the ball is the actual physics grid, not decorative wallpaper. The twist that sets it apart is the push/suck paddle: hold push and your paddle streams jets of colored fluid out into the field; hold suck and it vacuums the ball onto itself, charging a release that comes back far faster than a plain block. Each side starts with five lives, and the first to drain the other to zero wins. It is a tech-demo-flavored sports piece aimed at players who enjoy physics toys and Pong variants, running in Chrome and Firefox straight from a GitHub Pages link.

How to Play

The game is keyboard-driven. Press W and S to slide your left paddle up and down, hold D to push a continuous stream of colored dye out of the paddle into the fluid, and hold A to suck — once the ball is near, suck pins it against the paddle and charges a release that fires it back as a fast return. Each side starts with five lives; if the ball passes your edge you lose one, and the first side to reach zero loses the match. A 3-2-1-GO countdown precedes each rally, the top bar tracks suck charge and the bottom bar tracks lives. The default mode is single-player against an AI; click Begin Multiplayer for local two-player on one keyboard, where player two moves with I/K, pushes with J, and sucks with L. Pause and Restart round out the controls.

Tips & Strategy

Suck is a metered resource, not a free action: the top power bar drains while the ball is pinned to your paddle and refills slowly when it is not, so a whiffed suck at the wrong instant leaves you disarmed for the next shot. The strongest returns come from catching and releasing rather than letting the ball passively bounce, so prioritize lining up a clean suck over chasing every ball. Where the ball meets the paddle sets the rebound angle — catching near an edge redirects the return up or down instead of straight back, which is the main tool for wrong-footing the AI. Push is the cheaper, always-available action: it keeps your color streaming into the field while you hold your paddle in position. Against the AI, read its rhythm — it only fires suck once its charge rebuilds to ninety, so watch its power bar and reposition in the beat before its powered shot lands.

Controls

Keyboard
W / S — move left paddle up and downD — hold to push a stream of colored dye outward into the fluidA — hold to suck the ball onto the paddle and charge a powered releaseI / K — player 2 move up and down (multiplayer)J — player 2 push, L — player 2 suck (multiplayer)
Mouse
Not used for gameplay; on-screen buttons handle Pause, Restart, and Begin Multiplayer.

Features

  • Rally rendered over a real-time Navier-Stokes fluid solver at a 60 FPS target
  • Push streams colored dye into the field; suck catches the ball and releases a fast charged return
  • Metered suck charge shown in a top power bar; five lives per side shown in a bottom bar
  • Single-player AI opponent plus local two-player multiplayer on one keyboard
  • Open-source 2012 tribute to Plasma Pong, built on Jos Stam's Stable Fluids algorithm