11 Commits
Author SHA1 Message Date
shweet 7b98ff1d6b Everything ricochets, desync resync, aim previews that fall, and suffocation
- Ricochet now bounces every attack that moves. Swings sweep back, the uppercut bounces its fighter, punches and Lance
  pokes come loose and thrust again from the wall, then a held Lance turns and flies home. A whip lash's crack glances
  the reach a wall cut off as a strand. Vacuum cones glance into further cones that suck around corners. Bolts, grapple
  hooks and charged cracks bounce, and so do shots heading home (boomerangs, flail balls, hooks).
- Every ricochet plays its sound (flames too), adds its damage (the charged crack's blast too), and gives the attack
  its hits back. With bounces left, a bouncing shot hops off anything it touches, even at rest, until they're spent.
  Rays fired from inside a wall back out first instead of bouncing on the spot.
- Aim previews: falling shots arc at their real speed, instants (beams, cracks) take their real path and full range
  per bounce, Vacuum cones show their glances, and every cone draws at its spread width.
- A client out of step with the server asks for its room again and resyncs. The checksum covers much more of the
  match. Protocol 12.
- Fighters stuck inside solid ground slowly suffocate (not in the sandbox or races).
- Sword slashes smaller (basic 25%, charged slash scales halved). The Good Stuff: "Aye, me bottle o'scrumpy!"
2026-11-11 00:56:16 -05:00
shweet 37560547d4 Lobby browser, names and passwords, The Good Stuff, smarter queues, and a balance pass
- Lobbies: a name (default "Lobby <code>"), Unlisted or Public, and an optional password. The Multiplayer page
  scrolls: a Browser of public lobbies (name, count, padlock, code, little player previews, Join with a password
  field when locked), Join by code, Create, then Settings. Errors show under whatever caused them. Links take
  ?pass= (and --pass), and Copy Link includes it. Protocol 11.
- Queue areas center on their host along the floor's flat stretch, squeezing their slots to fit, and move to a nearby
  surface when the host's is too short.
- An airblast steals an enemy's flail ball onto its own chain for a while. Flail balls reel themselves back after 15
  seconds. Doubler echoes of the Grimoire teleport move you too.
- The Good Stuff: a new trinket, the inverse of Diazepam (more spread). Spread is now a multiplier, and it widens or
  narrows the Vacuum's cone.
- Balance: Sword basic slash 25% smaller and charged slash half the size, Whip basic lash half the damage and reach,
  Recoil Coil recoil halved, Speedometer no longer speeds you up.
- Fixes: fashions survive coming back from a game, Quit shows only in the sandbox menu, and the chat log keeps above
  the menu's tip.
2026-11-10 23:01:32 -05:00
shweet 93cdf46d5a Room and lobby chat, /host, /fashion, player-colored lines, context tips, and American spelling
- Chat goes to your room (the sandbox, or your game) by default, and to the whole lobby with /all or a leading !.
  Lines from elsewhere say where they came from ([Sandbox], [Game 2]), lobby-wide ones from your room say [All].
  Typing shows only to your room. Protocol 8.
- Hosting: everyone is told who hosts now, and the host can hand it over with /host "player".
- /fashion <item> wears a fashion locally, like /color.
- Lines that mention a player show in that player's color, looked up as they draw.
- Tips are tagged with the item and situations they fit, and those that fit are 1.5x as likely. They turn over every
  10 seconds on one continuous run, show under the menu too, and can be turned off with Tips in HUD / Gameplay. The
  HUD hotbars hide while the menu is up (except on its item tabs).
- American spelling throughout: color, center, gray, mustache, and so on.
2026-11-10 19:37:19 -05:00
shweet e9d8cac926 Weapons built from traits, fashion, Hourglass, About tab, and Ithaca
- Every attack is now assembled from traits on its definition instead
  of per-weapon code: an anchor and path (thrusts, out-and-back, arcs),
  shared flight physics (gravity, drag, acceleration, homing, and one
  wall response: end, burst, stick, crawl, bounce, stop, pass, return,
  latch), and flags like bouncy, drifting, tethered, orbiting, instant
  and arming. Melee are projectiles too.
- Shots have a lifetime and a fade (when damage bottoms out). Range is
  speed times lifetime. Ricochets and the Vacuum wind lifetime back.
- The Vacuum pulls anyone's shots, and its airblast flips them out
  along the aim, claiming enemies' (fading into your colour).
- New trinket: Hourglass, longer projectile lifetime and range. Ropes
  and chains lengthen with it and the Accelerator.
- Fashion: 23 items worn on the head, face or torso, chosen in Profile.
- Flamethrower flames hit continuously, the whip coils and sweeps,
  bouncing shots roll over ramps, and Ricochet relights grenade fuses.
- Profile tab, colour tooltips, option hints on every setting, an
  About tab with credits and links, and the Ithaca font.
- Loadouts lock once readied, tomatoes clear with the match, and the
  round-over pause is 4 seconds.
- CC0 license. Tools and CLAUDE.md are no longer tracked, and the web
  shell moves to web/.
2026-11-10 15:27:12 -05:00
shweetandClaude Opus 5.5 9a41474069 Tomatoes, match tabs, shared pings, and a round of fixes
- On the results, everyone but the winner splats tomatoes where they
  click (bots aim at the winner), with a new splat sound.
- During a match the menu has the item tabs (choosing when the
  countdown allows, and otherwise levelling the sandbox's levels for
  when you're back), Play (the game's rules) and Settings.
- Pings are shared through the server (protocol 4), so other players'
  connection bars show over their heads and on their windows.
- PvP comes into lobbies with your profile and is saved.
- The choice menu opens by itself however the countdown began.
- Knocked-out fighters keep their buttons current, so Ready on the
  results toggles once per press.
- The weapon wheel wraps both ways. Readying with empty slots plays
  the equip sound for your own fighter.
- Shock Absorber: up to 50% less weapon movement and 33% less
  knockback. Only the catalog previews the next level.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 18:11:06 -05:00
shweetandClaude Opus 5.5 6003175173 Raise online play to 16-player lobbies and 8-player games
Lobbies hold 16 players and the sandbox 16 fighters, games up to 8. The arena
gets spawns 5-8 (outer ledges and middle platforms) and the race start eight
places. The sandbox adds eight more spawns, each the open spot farthest from
the rest. Rival cards wrap into rows of four, the lobby's player list goes to
two tiny columns when crowded, and the server keeps frame packets to one
datagram. Formatted with clang-format.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 02:33:20 -05:00
shweetandClaude Opus 5.5 56af1c357c Remove the input delay setting and players being away
Neither does anything with the server running the games. Counting down to play
again moves into the match, so the server and every player agree on it and the
results show it starting again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 02:21:57 -05:00
shweetandClaude Opus 5.5 dadfff189d Play over WebRTC to the server
The server answers each player's WebRTC offer (signaled over the socket) with a
connection of its own: frames go on a lossy channel, everything else on a
reliable one, and the socket carries them until both open or where UDP is
blocked. The client's Net now holds one link to the server instead of one per
player. WebRTC takes UDP 47810-47899 by default, set on the command line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 02:09:21 -05:00
shweetandClaude Opus 5.5 655332778c Run lobbies' games on the server
The server now runs every lobby's sandbox and queued games as rooms, stepped at
the tick rate on one thread. Players send controls ahead of time, late ones repeat
their last, and everyone in a room gets back the controls it played, its events
and checksums. Games start from sandbox queues, players return when they leave,
and play-again moves them to a fresh room. Protocol version 3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 02:04:36 -05:00
shweetandClaude Opus 5.5 465f75f6d7 Split the simulation from presentation into an SDL-free library
Sim holds one whole game (tick, snapshots, checksum) and talks to the screen only
through Cues, which the client's Scene plays and the server ignores. All drawing
moved to scene.cpp. Match takes this screen's wishes as request flags instead of
reading the menu, input and settings. The sim library builds without SDL and the
server links it, ready to run games itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 01:46:07 -05:00
shweetandClaude Opus 5.5 2007fb7edc Initial commit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 01:30:33 -05:00