Footvolley game

Footlley Smash

A 1v1 arcade footvolley game in 3D, with the speed of Windjammers, on a walled padel-style court. Play the CPU, a friend on the same keyboard or online with a room code.

  • Active
  • Since 2026
  • Built with
    • TypeScript
    • Three.js
    • Vite
    • PeerJS (WebRTC)
    • Vitest

How it plays

Footvolley with the speed of Windjammers: two players, one ball and a closed court.

Three ways to play

Against the CPU at three levels (easy, normal and hard), against a friend on the same keyboard or with gamepads, or online with a room code or an invite link.

Control, charge, release

Press a shot button with the ball in reach to control it, hold to charge the shot and release to fire. Releasing in the golden band gives a perfect shot.

Aim with the stick

The direction you hold when you release picks the side of the court, and pushing towards the net shortens the shot.

Drive, lob, curve and dash

Three shots and a dash to reach a ball at the last moment. The curve bends the ball in the air, and the shots are worked out so the ball bounces where you aimed.

Walls and goals

The court is closed by glass walls, as in padel, and the ball stays in play off them. There is a goal at each end, and inside your small area you can catch the ball with your hands and volley it out.

Points, goals and sets

A fault, the net, a ball out or a double bounce is one point for the rival; a goal is three. Sets go to 11, and the first to two sets wins.

Controls

The Player 2 keys are for two people sharing one keyboard. Any key or button can be changed from the menu, and F1 opens a panel to tune the game live (not online).

Player 1Player 2Gamepad
MoveWASDArrow keysStick or D-pad
DriveJ, or Num1A
LobK. or Num2B
CurveL- or Num3X
DashSpaceRight Shift or Num0RB or Y
PauseEscBackspaceStart

How online play works

A room code, then a direct connection

The host picks a side and gets a five-letter code and a link. A signalling server introduces the two browsers, and from then on they talk directly over WebRTC.

Both sides run the same match

Each browser sends only its inputs and simulates a tick when it has both. The simulation is deterministic, so the same inputs give the same match. Every 60 ticks the two compare a hash of the state, and if they differ, the host sends a snapshot and play goes on.

Drops and pauses

If the connection drops, the match freezes and the guest has 30 seconds to come back. If either player hides the tab, the match pauses on both sides. The ping and the input delay are shown in the corner.

How it's built

  • Everything is code. Geometry, textures, sound and animation are generated in TypeScript with Three.js and WebAudio. The low-poly players are built from 13 joints, with their moves written as key poses.
  • Its own physics, and very little of it. A ball against flat walls, with gravity, drag and the Magnus effect that bends a curve, stepped at a fixed 60 Hz. There is no physics engine.
  • The simulation is separate from the picture. It doesn't depend on Three.js, so the CPU, online play and the tests all run the same match. The tests play full CPU-against-CPU matches with no screen.
  • Determinism down to the last bit. The simulation uses Math.sqrt instead of Math.hypot, which can differ in its last bit between browsers and would make two players' matches drift apart.

Limitations

What Footlley Smash doesn't do, so you can decide before you start.

  • No touch controls yet. You need a keyboard or a gamepad, so it can't be played on a phone.
  • The menus and the in-game help are in Spanish.
  • There is one court, the glass padel court. The other courts in our plans don't exist yet.
  • Online play uses the public PeerJS server to put the two players in touch. If the host reloads the page, the match is lost.
  • Online matches play with a small input delay, which adapts to the connection between points. There is no rollback.
  • The brands on the boards and the scoreboard are invented.
  • It needs a browser with WebGL.

Frequently Asked Questions

Is Footlley Smash free?

Yes. It runs in your browser with no download and no account, and it shows no ads yet. It uses Google's consent banner and, if you accept statistics cookies, Google Analytics, as the privacy policy explains.

How do you score?

A fault, a ball in the net, a ball out or a double bounce gives the rival one point. A goal is worth three. A set is played to 11 points, and the first player to win two sets wins the match.

Can I play with a friend on the same computer?

Yes. Player 1 uses WASD and J, K, L and Space; player 2 uses the arrow keys with , . - and right Shift, or the numeric keypad. Gamepads work too: in the menu, every keyboard and gamepad picks a side, and the side nobody picks is played by the CPU.

How does online play work?

Choose Online in the menu. Whoever creates the room picks a side and gets a five-letter code and a link; the other player types the code or opens the link. After the first contact through a matchmaking server, the two browsers talk to each other directly. When the match ends, both press R for a rematch.

What happens if the connection drops?

The match freezes and says it is reconnecting. The guest has 30 seconds to get back into the room, and play resumes after a three-second countdown. If someone switches tabs, the match pauses on both sides. If the host reloads the page, the match is lost.

Can I play on a phone?

Not yet. There are no touch controls, so you need a keyboard or a gamepad.

Can I change the controls?

Yes, from the menu, for both keyboards and for gamepads. Your controls and the CPU level are saved in your browser.

I found a bug. How do I report it?

Use the contact form. Tell us the mode (CPU, two players or online), whether you were on a keyboard or a gamepad, your browser, and what happened.