- Tomato splats are kept in the match, so everyone sees everyone's
(others' arrive in replays, which play no effects), each splatting
with juice and a sound once.
- The sandbox's first player (solo or hosting) spawns on the arena's
P1 mark.
- A thrown flail ball or grapple stays out when switching weapons, and
another weapon fires while a grapple hangs on. Mines, flail balls and
grapples go once their slot no longer holds the weapon that put them
out (mines fizzling).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tomatoes fly on the round-over screen as well as the results. Bots'
throws count while their attack is held, as their controls land after
the match reads presses each tick.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
- Readying in a countdown deals any empty slots at random right away,
and the countdown reads "Starting..." once everyone is ready.
- /pvp toggles PvP in the sandbox, offline or in a lobby.
- Rival windows sit at half opacity (half again when knocked out, and
when hovered), show no item tooltips, and drop to small icons past
two full-size rows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
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>
Profile, member join/leave and building a fresh game move into the sim library,
and the packet reader and writer into protocol.h, so the server can run lobbies
exactly as clients do.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>