Skip to content

jgbrwn/cannonsmash-web

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CannonSmash Web

A browser-based, mobile-first remake of Cannon Smash (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/

CannonSmash Web screenshot

Original CannonSmash screenshot

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 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 for full terms.

See NOTICE for attribution of the original Cannon Smash game, three.js, and other third-party dependencies.

About

A browser-based, mobile-first remake of CannonSmash (the classic open-source 3D table tennis game), true to the original's physics and assisted-control feel, rebuilt around touch.

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors