CannonSmash Web by jgbrwnFollow jgbrwnFollowFollowing jgbrwnFollowing<br>Add To CollectionCollection<br>Comments<br>Related gamesRelated<br>CannonSmash Web
Restore game<br>" class="iframe_placeholder"> Run game
# CannonSmash Web
See GitHub project page: https://github.com/jgbrwn/cannonsmash-web
A browser-based, mobile-first remake of [Cannon Smash](https://sourceforge.net/projects/cannonsmash/)
(the classic open-source 3D table tennis game), true to the original's physics
and assisted-control feel, rebuilt around touch.
archive.org original website link: https://web.archive.org/web/20220130185354/http://cannonsmash.sourceforge.net/
**Play:** https://cannonsmash.exe.xyz/


## Controls (touch / mouse)
| Gesture | Action |
|---|---|
| **Drag left/right** | Move your player/paddle laterally (finger = paddle) |
| **Flick up** | Swing. Flick angle aims left/right, flick speed & length = power, upward flick = topspin drive |
| **Flick down** | Backspin push |
| **Flick (on your serve)** | Toss + serve |
| **✕ (top center)** | Quit match, back to menu |
| **Tap (after match)** | Return to menu |
The ball must actually be within paddle reach when it arrives — if you're out
of position, you whiff. When you're not dragging, a positioning assist drifts
you toward the predicted contact point (the original game also auto-positioned
during the backswing); the assist gets slower on higher difficulties, so
manual positioning matters more.
## Rules
11-point games, deuce (win by 2), serve rotation every 2 points (every point at
deuce), best of 3 games.
## Development
```
npm install
npm run dev # vite dev server on :8000
npm run build # production build to dist/
npm run typecheck
npx tsx test/sim.ts # headless full-match simulation
npx tsx test/human.ts # sloppy-human sim across all difficulties
```
Deployed as a static build served by **nginx** with gzip compression and
aggressive caching (immutable cache headers for content-hashed assets,
short-lived cache for HTML). After building:
```
npm run build
sudo systemctl restart cannonsmash # syncs build to nginx serve dir (rsync)
```
See `cannonsmash.service` for the deployment process and the nginx config at
`/etc/nginx/sites-available/cannonsmash` for server tuning.
See [docs/DESIGN.md](docs/DESIGN.md) for architecture, physics notes, tuning
rationale, and the project plan/history.
## License
This project is licensed under the **GNU General Public License v2**.
See [LICENSE](LICENSE) for full terms.
See [NOTICE](NOTICE) for attribution of the original Cannon Smash game,
three.js, and other third-party dependencies.
More information<br>Published 13 days agoStatusIn developmentPlatformsHTML5AuthorjgbrwnGenreSimulation, SportsTagsAI Generated, ping-pong, table-tennisAI DisclosureAI Assisted, Code, Graphics, Sounds, Text
Leave a comment<br>Log in with itch.io to leave a comment.
itch.io·View all by jgbrwn·Report·Embed·Updated 13 days ago<br>Games › Simulation › Free