Leaderboards
There are six boards, one per lane. A board lists the twelve simulated neighbors who have arrived, other real players whose scores are shared, and the player. Each board is ranked from highest to lowest.
In the shared valley
Section titled “In the shared valley”The shared valley’s boards are built on the server, not by the page. They use the same six measures, with these differences:
| Board | Other players’ figure | Your own row |
|---|---|---|
| Finest homestead | the map’s age for every stand, rounded to 1,500 | exact |
| Timber baron | rounded to 6,200 | exact |
| Merchant of the year | rounded to 3,000 | exact |
| Top sawyer | rounded to 6,200 | exact |
| Best forester | the map’s figure (old growth is not counted, because the map cannot show it), not rounded, marked “about” | exact, with old growth |
| Fair champion | exact (a public contest score) | exact |
The era bar in the valley goes further: the town’s lumber produced is not shown at all, not even whether the goal has been reached, because an average that includes your own output lets you work out the others’ totals from any figure derived from it. The era change itself is announced. The other needs (settlers, businesses, roads) are exact counts.
All figures are made once per ten-minute tick, as of the tick boundary, so a change you make shows at the next tick (the first read after downtime, a rollback or an upgrade can make them from the claims as they are then, up to one tick early, once). Players are ranked on the figure others are shown (rounded where a step applies, the map’s figure for forest): equal figures share a rank (shown “=2”, with the number tied), and the order inside a shared rank is a shuffle that changes every tick and tells nothing about the exact figures. Your own rank comes from the figure others see for you, so your row shows that figure (“about 43,500”) with your exact one under it; they can differ a lot, because the shown figure leaves out old growth. Simulated settlers are listed apart and not ranked. A player who joins in the middle of a tick sees their own row at once, and is ranked for everyone else from the next tick.
Boards
Section titled “Boards”| Board | Unit | Your score is | Base | Rate |
|---|---|---|---|---|
| Finest homestead | bd ft appraised | claimValue() | 16,000 | 700 |
| Timber baron | bd ft produced | produced | 0 | 1,100 |
| Best forester | forest score | forestScore() | 55 | 0.4 |
| Top sawyer | bd ft milled | sawmill made (0 with no sawmill) | 0 | 1,500 |
| Fair champion | contest points | best axe score + best saw score | 0 | 0 |
| Merchant of the year | bd ft earned | sum of business earned figures | 0 | 400 |
Forest score
Section titled “Forest score”land = parcels that are not meadow (61)standing = land parcels with timber plantedold = standing parcels at 40 growth hours or moreforestScore = round( standing / land * 100 + old * 2 + replanted * 3 )The score for a player is not capped. The cap of 160 below applies only to simulated neighbors.
Merchant score
Section titled “Merchant score”The sum of earned across the player’s businesses. Each figure is net of cost of goods and upkeep and can be negative. Farm income is not included.
Simulated neighbors
Section titled “Simulated neighbors”| # | Name | Lane weights | Arrives |
|---|---|---|---|
| 1 | Ingrid Halvorsen | timber 1.3, forest 1.2 | founding |
| 2 | Patrick Mulcahy | timber 1.1, merchant 1.3 | founding |
| 3 | Giuseppe Ferraro | sawyer 1.4 | founding |
| 4 | Anna Lindqvist | forest 1.5 | founding |
| 5 | Otto Brandt | homestead 1.3, sawyer 1 | founding |
| 6 | Mae Whitcomb | merchant 1.5 | founding |
| 7 | Silas Dunbar | timber 1.5 | founding |
| 8 | Rosa Delgado | homestead 1.4, forest 1 | founding |
| 9 | Henrik Nyberg | sawyer 1.2, timber 1.1 | 40 min |
| 10 | Clara Pettibone | merchant 1.2, homestead 1.2 | 80 min |
| 11 | Thomas Ashby | timber 1, homestead 1 | 120 min |
| 12 | Lena Kowalski | forest 1.3, merchant 1 | 160 min |
Lane keys are timber (Timber baron), forest (Best forester), sawyer (Top sawyer), merchant (Merchant of the year) and homestead (Finest homestead). Neighbors 1 to 8 are present from founding. Neighbors 9 to 12 arrive 40, 80, 120 and 160 minutes after it.
hoursSinceArrival h = (now - arrival) / 3600000w = style[board] if present, else 0.6 (0 for sawyer and merchant when not listed, so the neighbor has no row)wobble = 0.85 + 0.3 * hash01(i, len(boardId))
forest board: min( 160, base * w * wobble + rate * h * w )fair board: round( 330 + 520 * hash01(i, 99) ) a constant, no growthall others: round( base * w * wobble + rate * w * wobble * h ^ 0.92 )A neighbor with weight 0 has no score and no row on that board. Scores are deterministic for a given founding time.
Ranking and real players
Section titled “Ranking and real players”rows = simulated neighbors who have arrived and have a score + other players' scores read from the shared "scores" table + you (your live local score)sorted by score, highest firstThe interface shows the top 8 rows and adds your row if you rank lower. Your own entry in the shared table is ignored, so you never appear twice.
A player’s scores are published after each save when their six numbers change: scores/{uid} = { scores: { homestead, timber, forest, sawyer, fair, merchant }, at }, each rounded. Rows from other players are labeled “player” and simulated ones “neighbor”. The header reads “Season 1” and shows the current town milestone; there is no season logic behind it.
Inputs, outputs and state
Section titled “Inputs, outputs and state”Inputs are the player’s counters and claim, the clock, the founding time and the shared scores table. The output is a ranked list per board. The only stored state is the shared scores table and the player’s lastScoresKey for change detection, which is not saved.
For the shared game
Section titled “For the shared game”In the shared game all six should be computed by the server from its own records of the player’s claim, production and contest results. The boards also mix two scales: neighbors’ scores grow without limit as time passes, so a player who stops playing falls down, while the fair board’s neighbors are fixed. Once there are enough real players the simulated neighbors can be retired. A season is a name only; a shared game that wants seasons needs a start and end, a reset rule and a record of past winners.
Source: prototype/index.html · constants BOARDS, NEIGHBORS, SETTLER_EVERY, SETTLER_START in rules.json · logic BOARDS, forestScore, neighborScore, neighborArrived, renderBoards, publishScores, watchScores