Daily Seed and Leaderboard

In short

The DAILY CHALLENGE gives everyone the same run seed for a UTC date, which picks the map (any map, even a locked one) and the innings and pitches, always on Normal. It pays points and XP but unlocks nothing. Scores go to a local leaderboard on this machine: an all-time board and one board per day. There is no online leaderboard yet.

How it works

Daily run (RunManager.StartDailyRun):

  1. Seed = DailySeed.Today, the UTC date as a number (yyyyMMdd, e.g. 20261022).
  2. Map = ballparks[Derive(Today, 0xDA11) % ballparks.Count], from all run maps, unlocked or not.
  3. Difficulty = Normal. Batter = your selected batter.
  4. The run is marked IsDaily. At the end it skips RecordMap, so no map unlocks and no map best; it still pays meta points and XP and can set your overall best score.
  5. The results card shows a DAILY RUN pill, and RUN IT BACK starts the same daily again.

The title screen’s daily card shows TODAY, DAILY CHALLENGE and SEED yyyy-MM-dd and starts the run on click, skipping map select.

Leaderboards (ILeaderboardService, implemented by LocalLeaderboardService):

  1. Every solo run that ends (won, lost or abandoned) submits a LeaderboardEntry (player name, score, batter id, date) to the board all-time. A daily run also submits to daily-yyyy-MM-dd.
  2. Entries live in SaveData.leaderboard. After each submit, only the top 20 of that board are kept.
  3. The title screen shows the top 5 of TODAY’S DAILY and ALL-TIME, each row with a medal number, the batter’s name and the score. An empty board says “No scores yet - be the first!”

Numbers

WhatValueWhere to tune
Daily seedUTC date as yyyyMMddDailySeed.Today
Daily date keyyyyy-MM-dd (UTC)DailySeed.DateKey
Daily map stream id0xDA11RunManager.DailyParkStream
Daily difficultyNormalRunManager.StartDailyRun
Entries kept per board20LocalLeaderboardService.MaxEntriesPerBoard
Rows shown per board5MainMenuView.DrawBoard
Board namesall-time, daily-<date>Boards

In the code

FileWhat it does
Assets/_Project/Scripts/Progression/DailySeed.csToday (seed) and DateKey
Assets/_Project/Scripts/Progression/Leaderboard.csBoards, ILeaderboardService, LocalLeaderboardService (Submit, GetTop)
Assets/_Project/Scripts/Run/RunManager.csStartDailyRun, DailyPark, leaderboard submits in EndRun
Assets/_Project/Scripts/UI/MainMenuView.csDaily card and the two boards
Assets/_Project/Scripts/Progression/SaveData.csLeaderboardEntry, SaveData.leaderboard, playerName (default “You”)

Gotchas

  • “Same run for everyone” covers the map, pitchers, goals and pitches. Shop offers come from the same seed but are drawn from each player’s unlocked upgrades, and each player uses their own batter, levels and perks, so builds can differ.
  • The daily can be replayed any number of times on the same day; every attempt is posted.
  • A daily checkpoint can only be resumed on its own UTC day; after midnight UTC it is deleted.
  • The leaderboard rows show the batter, not the player name, even though the name is stored.
  • Co-op runs never post to the leaderboard.
  • The daily run plays the match intro and the end-of-game cutscenes like any solo run (Cutscenes). The leaderboard entry is already posted when the outro starts.
  • Every run map now has its own inning-9 boss, so the seed-picked map also decides the final boss (Run Structure).
  • Losses and abandoned runs are posted too, so the all-time board is “best runs”, not “best wins”.
  • Friends or online leaderboards would be a new ILeaderboardService created in GameRoot. Not built.

Online leaderboard

Only the local service exists. The README lists a friends leaderboard as not started.