CannonSmash-web

indigodaddy1 pts0 comments

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/

![CannonSmash Web screenshot](docs/project/screenshot.png)

![Original CannonSmash screenshot](docs/project/original-screenshot.png)

## 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

cannonsmash original flick game project build

Related Articles