Profile stats, first-run hints, tiered balance, a wave-driven whip, and more options

- Profile Stats: damage dealt, kills and wins (single player and multiplayer) and the most and least played weapons
  and trinkets, counted from running totals in the simulation so online rewinds correct them. Protocol 6.
- First-run control hints in the sandbox (and Chat in lobbies), each gone for good once used.
- The ready countdown and a timed round's last five seconds beep (new countdown sound), and those seconds show big.
  When time runs out, everyone short of the most health dies.
- Weapon balance tuned into tiers: Whip and Grenade Launcher on top, then melee, ranged, and utility (Vacuum,
  Grapple, Uzi) at the bottom.
- The whip's lash is a chain of links a wave rolls down: windup, loop, crack, then a floppy recoil.
- Muzzles come from Muzzle nulls in weapons.anm2 (read in at build time), for shots and the flash, which now follows
  the weapon.
- Settings: Quit, Scale (1x-4x or Free), FPS meter and limit beside Vsync, Mute on Unfocus, Damage Numbers, Rumble,
  Stick Deadzone, and an Online section (Host, Chat, Ping) shared with the Multiplayer page.
- The menu header lays out tabs and buttons by their names. About is sandbox-only. The score no longer shifts with
  the menu's tab.
- Smaller meters, 90 tips (all ending in !), and a shorter lobby welcome.
This commit is contained in:
shweet committed 2026-11-10 18:32:31 -05:00
1 parent e9d8cac926
commit b96defa1e6
32 files changed
+1368 -396

No files matched your search

+5 -1
View File
@@ -49,6 +49,10 @@ struct Flash
float angle = 0;
float life = 0;
float size = 0;
// The fighter, hand and weapon that fired it, for keeping it on the muzzle (see Scene::flash_follow).
int owner = 0;
int hand = 0;
int weapon = 0;
};
// A fading copy of a sprite left behind by something moving fast, and what its fighter wore (nothing, FASHION_NONE,
@@ -66,7 +70,7 @@ class Effects
public:
void burst(Burst burst, Vec2 position, float angle, Color color);
void afterimage_spawn(Pose pose, int worn);
void flash_spawn(Vec2 position, float angle, float size, Color color);
void flash_spawn(Flash flash);
void afterimage_draw(Game& game);
void number_spawn(Vec2 position, int value, int target, Color color);
void dps_record(int amount);