3a00be566139cfba06b3941fb2f8dbbbf4cd4b15
Previously a game that used crazy mode kept its local high score but
skipped the online submission entirely. The requirement changed: crazy
scores should count like any other score, but be recognisable as crazy.
Changes:
- Crazy-mode use is now tracked per player (Player::crazy_mode_used)
rather than per game. Balls dropped during one player's turn cannot
outlive that turn, so only the player who pressed the key is marked;
the other players' scores stay normal.
- Event::HighScoreCandidate carries { score, crazy } so the app knows
which kind of score the name-entry dialog is about to record.
- HighScore gains `crazy: bool` with #[serde(default)]. Save files and
server responses from before this change load as normal scores.
- The high-score table draws a small red "CRAZY" tag in the empty
column right of the score. That column is free regardless of name or
score length, so the tag never overlaps text.
- The browser build submits every score again, flag included. The
companion server change stores it; an older server ignores the field.
Test Plan:
- cargo test
- crazy_scores_are_flagged_on_the_high_score_candidate
- high_scores_without_a_crazy_flag_load_as_normal_scores
- Manual: use crazy mode, finish with a qualifying score, and check the
table (F9) shows the entry with the red CRAZY tag; a normal game's
entry has none.
Languages
C
73.2%
Rust
14.6%
C++
5%
Python
4.1%
Shell
1.4%
Other
1.6%