Mode-based stat per player (freestyle, dropless grey, etc.)
Overall stat per player (updated with each game completion, regardless of game mode)
Dynamic K value (in Elo, "K" represents "stat velocity", the speed at which stats are changed per game)
for new players, their stat velocity is doubled
for experienced players, their stat velocity is halved when playing a new player
for experienced player vs experienced player, stat velocity is normal
Number of games per mode is stored as part of ratings data
Number of games played overall is stored as part of ratings data
Timestamps of last completed game stored as part of ratings data
The comments addressed in the previous pull request
What this change does not implement
The requirement to block boosters by checking history between the two players (will be done in upcoming change)
Exposing stats to users via UI in any way (will be done in upcoming change)
Ratings for four-player games (out of scope and will not be done)
Logic to raise stat velocity if the time since last completed game is large (this is done in some ELO systems, not sure whether we will ever need it here - not currently in scope)
Testing
Played around 20 games across various modes.
Tested draw, saw a small change in ratings
Tested win result among two new players -- both had relatively large rating changes
Tested win result among new and experienced players - the new player had a big rise, experienced player had a small loss
Tested win result among two experience players - normal change in stats, not too big or small
Verified ratings update separately for different modes (dropless grey, freestyle, etc.)
What this change implements
What this change does not implement
Testing
Played around 20 games across various modes.
Two resulting stat files: player_f920786e-7567-422f-8712-a9906bc3ae94_stats.json player_3c6ea214-d5f6-4cb4-9e0b-c87a52e21bd2_stats.json