Possible applications:
- FZC's site-wide Overall Ladder
- Game-wide ladders: GX overall ladder, Climax overall ladder, etc.
- Ladders aggregating certain games: 2D F-Zero ladder, 3D F-Zero ladder
1 is the first priority, but I think the initial database design should at least make an effort to support 2 and 3.
FZC's Overall ladder works by counting scores of the 'primary' ladder for each game, or in GX's case, each player's best score among the Open / Max speed / Snaking ladders. I think it's probably cleanest if it's each game's responsibility to define an 'overall ladder formula' - X says "use the Open ladder", GX says "use the best of Open/MS/Snaking", etc. Then the Overall ladder would just be defined as "use the overall ladder formula of every game."
A GX overall ladder would probably count all 5 of the main GX ladders, either equally, or weighted based on popularity (ideally the formula would be configurable and not hard-coded). This could serve as motivation to learn all the major GX categories, as well as Story. Similarly, a Climax overall ladder would be motivation to excel at all the game's modes.
2D and 3D ladders could be a way to encourage branching out to other games while being a little less daunting than the site-wide Overall Ladder. I could see the formula going either way, counting all the relevant ladders or just one primary ladder for each game.
Perhaps each game could have 'game tags' which help to group them for super ladders or other purposes. For example: tag X and GX as 3D games, tag GX Unleashed as a mod, potentially tag AX and BS F-Zero 2 as... something indicating that they're exceedingly hard to find the official hardware for. So the site-wide Overall Ladder could exclude mods, and perhaps initially exclude AX/BS, but then there could be discussion about including them or not.
Expect super ladder calculations to take a while. If worst case is on the order of 15 seconds, consider caching the view result. If it's on the order of 1 minute or more, best to compute the stats asynchronously. Updates would either happen periodically, and/or only after submissions are made. For async task logistics, Celery is one idea, or maybe there's a newer/simpler package out there.
Possible applications:
1 is the first priority, but I think the initial database design should at least make an effort to support 2 and 3.
FZC's Overall ladder works by counting scores of the 'primary' ladder for each game, or in GX's case, each player's best score among the Open / Max speed / Snaking ladders. I think it's probably cleanest if it's each game's responsibility to define an 'overall ladder formula' - X says "use the Open ladder", GX says "use the best of Open/MS/Snaking", etc. Then the Overall ladder would just be defined as "use the overall ladder formula of every game."
A GX overall ladder would probably count all 5 of the main GX ladders, either equally, or weighted based on popularity (ideally the formula would be configurable and not hard-coded). This could serve as motivation to learn all the major GX categories, as well as Story. Similarly, a Climax overall ladder would be motivation to excel at all the game's modes.
2D and 3D ladders could be a way to encourage branching out to other games while being a little less daunting than the site-wide Overall Ladder. I could see the formula going either way, counting all the relevant ladders or just one primary ladder for each game.
Perhaps each game could have 'game tags' which help to group them for super ladders or other purposes. For example: tag X and GX as 3D games, tag GX Unleashed as a mod, potentially tag AX and BS F-Zero 2 as... something indicating that they're exceedingly hard to find the official hardware for. So the site-wide Overall Ladder could exclude mods, and perhaps initially exclude AX/BS, but then there could be discussion about including them or not.
Expect super ladder calculations to take a while. If worst case is on the order of 15 seconds, consider caching the view result. If it's on the order of 1 minute or more, best to compute the stats asynchronously. Updates would either happen periodically, and/or only after submissions are made. For async task logistics, Celery is one idea, or maybe there's a newer/simpler package out there.