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>
This commit is contained in:
shweetandClaude Opus 5.5 committed 2026-11-08 18:11:06 -05:00
1 parent cdb0845da2
commit 9a41474069
29 files changed
+295 -79

No files matched your search

+14
View File
@@ -58,6 +58,18 @@ struct Ring
float radius = 0;
};
constexpr int SPLAT_BLOBS = 6;
// A tomato's splat: blobs of colour round where it landed, fading out.
struct Splat
{
Color color;
Vec2 position;
Vec2 blobs[SPLAT_BLOBS];
float sizes[SPLAT_BLOBS];
float life = 0;
};
// A fading copy of a sprite left behind by something moving fast.
struct Afterimage
{
@@ -73,6 +85,7 @@ public:
void afterimage_spawn(Pose pose);
void flash_spawn(Vec2 position, float angle, float size, Color color);
void ring_spawn(Vec2 position, float radius, Color color);
void splat_spawn(Vec2 position, Color color);
void afterimage_draw(Game& game);
void number_spawn(Vec2 position, int value, int target, Color color);
void dps_record(int amount);
@@ -91,6 +104,7 @@ private:
std::vector<Particle> particles;
std::vector<Popup> popups;
std::vector<Ring> rings;
std::vector<Splat> splats;
float shake = 0;
int ticks = 0;
};