- m_iPlayerCurrentStageIndexForCurrentCredit is changed to m_iPlayerStageTokens,
counting the number of stages left. This can be incremented and decremented
(as a bonus or penalty) with no weird side-effects; it is not used to determine
whether the player is on an extra stage. This is less brittle; it eliminates
special cases to avoid incrementing the counter and skipping into an extra stage.
- Stage tokens are subtracted for each song played, and a player is unjoined
when he runs out.
- Stage tokens are subtracted at the start of gameplay. If the player cancels,
they're "refunded". This differs from before, where the stage was incremented
at the end of gameplay. This makes the stage token counter meaningful during
gameplay; if this is done at the end, then it would be too high during gameplay.
- IsFinalStage is gone. If needed, use GetSmallestNumStagesLeftForAnyHumanPlayer.
- Extra stages are awarded by adding a stage token and incrementing
m_iAwardedExtraStages. If m_iAwardedExtraStages is 1, the player is
on his first extra stage; if 2, his second.
in each place gameplay exits. This incremented the stage number in SSM,
and was brittle: FinishStage was sprinkled in many odd places. Do both
in SGameplay.
This increments the stage number as soon as gameplay ends. This only
affects evaluation. Use the stage number from StageStats there, instead
of the current stage, and adjust branches. During evaluation, the
game is on the upcoming stage and displaying old data for the last
stage, instead of the stage continuing through evaluation.
This also moves a bunch of scoring-related stuff out of SEvaluation,
to the end of gameplay, where it belongs. Eval is almost const, and things
won't break like they would before if Eval is not used.
The hack to LoadAllCommands when playing a command was leading to weird interactions: If a theme element contained an OnCommand, it would cause the rest of the commands defined in metrics to not be loaded.