Keep track of whether each stage in StageStats was an extra stage.
GAMESTATE->m_vPassedStageStats now holds all played songs,
including failed ones (renaming in a moment).
GameState::GetFinalEvalStatsAndSongs logic was weird. Simplify.
unlock system now supports clear and failed extra stages
songs unlocked by roulette are no longer unlocked by selecting them as extra stage
'fixed' survived time for extra stage when failing
Voltage - ratio of perfects to total tap notes
Stream - ratio of player max combo to possible max combo
Air - ratio of jumps to total possible jumps
Freeze - ratio of freeze arrows to total freeze arrows
Chaos - dance points percentage
Note: Multidimensional array stageStats.fRadarActual[p][r] is now a %, not width.
Quick 6am (zzzz) tips:
If a block is more than a few lines long, always bracket {} it, even if you
don't have to. Large unbracketed expressions get hard to follow.
Don't do this:
while(stuff) {
if(x) {
do lots of stuff;
}
}
Instead, do this:
while(stuff) {
if(!x)
continue;
do lots of stuff;
}
This simplifies program flow; the former makes me scroll down the page
to see if there's anything after the "if" before it comes around the loop
again. It also reduces indentation.
XXX's are things that I'm not going to try to do at 6am ...
DP - dance points, what Miryokuteki had in place
AP - arcade points, like MAX2 arcade
SP - song points, like MAX2 home (though I don't know the exact system)
CS - clear stages, like 5th home
Somewhat strewn but not supported yet:
!! - Toastys seen
EC - cleared extra stages
EF - fail extra stage (don't quote me on these two yet, I haven't tried them yet)
RO - roulette (theres fifteen roulette slots, but its not implemented yet)
Also updated the INI to store values for these means of unlocking. The system
still isn't "optimized" yet, though.
In Short: A sound plays each time a judgement appears on the screen. I've made a fair few options available for themers on this one... hence so many redir files.