Fix an issue with scoring
In order for the scoring system to be both flexible and able to present the floating numbers where an asteroid gets destroyed, it's implemented as a series of modifier functions in a list. Currently, the hit streak multiplier is the only one implemented. It watches bullet expiration events, and if it sees 8 "bullet_hit" events in a row without seeing any "bullet_miss" events, it increases the global score multiplier up to a limit of 8x.
Each time an asteroid is destroyed, the score manager runs through its table of score modifiers and applies each one in turn. The hit streak multiplier modifier looks at the global multiplier, applies it, and returns the score so the score manager can apply the next modifier in the list.
When I added in the ability to start a new game while a game was already in progress, some of the normal cleanup that happens when a "game_over" event fires didn't happen. Including clearing the score modifier list. So a new game would add another hit streak multiplier modifier, so the points for an asteroid became points x multiplier x multiplier instead of just points x multiplier. Normally, a small asteroid at 8x multiplier is 640 points, but this made a small asteroid worth 5120 points, or even more if the user selected New Game from the pause screen multiple times. In testing, it was pretty easy to get the score to wrap around to negative numbers multiple times per stage.
The fix was more complicated than I thought, as much of the new game/end game logic wasn't designed to run without also running some of the end game animations. It's fixed in this update, which should be live for everyone by the time this post goes live.
Upon inspecting the leaderboard, I was the only person to have discovered this issue before this fix was pushed live, so I reset my own score and left the rest as they were.
