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

+2 -4
View File
@@ -144,8 +144,7 @@ static bool frame_run(bool isDrawn = true)
{
Fighter& own = game.local_get();
bool isHeld = game.menu.isOpen || game.chat.isOpen || session.is_watching();
Controls controls =
game.input.controls_get(DEVICE_KEYBOARD, game.camera, own.center_get(), own.slot, isHeld);
Controls controls = game.input.controls_get(DEVICE_KEYBOARD, game.camera, own, isHeld);
session.update(game, controls);
game.input.tick_end();
if (session.isViewChanged)
@@ -161,8 +160,7 @@ static bool frame_run(bool isDrawn = true)
Fighter& fighter = game.sim.fighters[i];
bool isMenuOpen = game.menu.isOpen && i == game.local;
if (game.is_local(i))
fighter.controls = game.input.controls_get(game.devices[i], game.camera, fighter.center_get(),
fighter.slot, isMenuOpen);
fighter.controls = game.input.controls_get(game.devices[i], game.camera, fighter, isMenuOpen);
}
game.rollback.update(game);
presentation_update(game);