Giving Every League Its Own Kickoff Time

Until this change, every match in every one of Goal Legends' eight countries kicked off at the same fixed time. It worked, but it flattened something that should feel different: Saturday afternoon football and Tuesday night European nights don't feel the same in real life, and they shouldn't here either.

Spreading the day out

Each league now has its own default kickoff hour, spread from 8am through 11pm CET across the eight countries, so matchdays overlap the way a real football weekend does rather than firing all at once. On top of that, a manager can set their own preferred kickoff hour for their club's home matches specifically, in Manager Settings: league, Domestic Cup, and Elite Champions Cup fixtures each have their own setting. Away fixtures are deliberately untouched by a manager's preference; only the home team's setting (or their league's default, if they haven't set one) decides when a match kicks off. Anything else would let two managers' preferences fight over the same match.

The DST bug that almost shipped

The game world runs on real UTC time internally but every kickoff hour is meant in CET/CEST, Central European time, which shifts by an hour twice a year. Cup competitions schedule their rounds several days apart, and the first version of this feature computed each round's kickoff by just adding a fixed TimeSpan to the previous round's DateTime. That's correct until a daylight-saving transition happens to fall inside that gap, at which point the "same" kickoff hour silently drifts by an hour for every round scheduled afterward, a bug that wouldn't show up in testing unless you happened to test across a DST boundary, and would otherwise have surfaced quietly, once or twice a year, as matches simulating an hour early or late.

We caught it during review before it ever reached the live game, and fixed it by never doing kickoff-time arithmetic in raw UTC. Every date calculation now goes through a small CET-aware clock helper that converts to a calendar date, adds whole days, and converts back: DST-safe by construction, because the hour is always resolved fresh against the target date rather than carried forward through arithmetic.

← Back to the devlog

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.