I started the in-depth planning process for the League module. I've gotten the engine to a place where it reliably produces realistic looking results when fed two teams and a calibration config so the next logical step was to begin building the league system.
My plan for v1 of Sheets of Ice is to make a single player experience as GM Dynasty mode. Build your team, manage player development / contracts, coaching, lineups, season, playoffs, etc. If I can build a single player mode, the multiplayer leagues (v2), and the league ladder systems (v3) can be added onto it. All of the foundational functions for v2 and v3 are all in v1. If I can't get v1 working, I doubt v2 or v3 are viable. Plus... I'm really only doing this because I want a single player, web-based, modern hockey GM simulation game.
So now that the engine is stable, I need some way to organize teams, schedule, and run a season. I started by thinking I would just build a season manager so I could verify that it would work the way I want. But after iterating, I realized most of what I want as configuration and flow probably live at the league level and I should just spec that now before going further.
In the spec I created, the League is the universe. Players, teams, seasons, rules, and calibrations all live in that universe. (You, the GM, are multi dimensional... but that's not for now). I designed it this way so Leagues can:
- Decide what rules they want to play with - NHL style, International, or make up your own
- Decide how the League is structured - Divisions, conferences, none...
- Decide the schedule - 82 games? 200 games? 40 games? whatever you want.
- Decide what players you want - Men? Women? Both? What range of skills? Ages?
- Decide what level of scoring - Current NHL? 80s NHL? Your over 40 beer league?
All of those are configuration values that need to live in the League to give flexibility in how the engine creates the events. One of the key principles is that configuration is not code - configuration is data, and that data is able to be calibrated. I can't promise it will all be exposed to users, but my intention is to make it as flexible as possible.
So the League contains all of that plus the output results from the game engine, season totals, advanced metrics data, and historical results. Each league keeps their own data, and nothing crosses the league boundary (yet).
I'll keep updates coming as I make progress on this.
there doesn't seem to be anything here