Game Mower wiki

Game

Weather: fronts and forecastsWE

Semi-realistic weather you plan around. Fronts from the save seed, an honest forecast per period, wet lawns, rain that grows grass, wind, and bookings you move when rain is likely.

Weather you plan around. A front rolls in, the forecast says 70% tonight, so you mow Mrs. Higgins' lawn after lunch and let the wet morning go. The percentage is honest: a 30% afternoon rains about 3 times in 10. And the weather makes work as well as blocking it: rain grows grass, so clients call back sooner.

The player's view

Checking the sky. Over breakfast you open Cloud Nine on the old computer, or read the weather box in the morning paper: fog this morning, a fair afternoon, showers in the evening, rain overnight. Grandma's sticky note says it for you: mow after lunch, home before the rain.

A soaked morning. It rained in the night while you slept, so at 7:00 the lawn is soaking and wrapped in fog. Mow now and the grass is heavy, the clippings clump and the bag fills in no time. Wait for the fog to burn off and the sun to dry the lawn, and the same job goes light.

Rain on the way. In a client's garden you can't check the computer, so the sky warns you: the clouds build for an hour or two, and the clock line on the HUD says rain is coming. A client looks up: "Looks like rain, dear." When it starts you choose: keep mowing in the wet, or stop and get paid for what you finished, with no bad review.

A washout. The evening before a booked visit, the forecast is grim and the client calls to move it. On a merely rainy day you can call to move it yourself, or go anyway. A washout isn't a lost day: you fix the mower at home, make a store run, or knock on doors, where people are home because of the rain.

A wet week. After a week of showers every lawn on your list has shot up, and the phone rings with clients who want you back sooner. After a dry week, things are quiet.

Wind. The trees sway and the rain slants. Blow leaves with the wind and the pile flies across the lawn; blow against it and the leaves barely move and drift back. Clippings drift downwind onto the patio and into the pool.

Later. Thunderstorms stop work and leave fallen branches and clean-up calls behind them. Seasons bring frost mornings, heat waves that brown the lawns, autumn leaves and snow.

An example day in Cloud Nine, with grandma's note

Ideas

WE1: the model and the forecast numbers

The weather replaces the one roll per day of Calendar.WeatherOn(day) (three types, a hash of the day number, so day 12 had the same weather in every save). It is a pure function of the save seed and the hour, so every sibling computes the same sky and nothing is synced.

Fronts, not dice

  • A hidden hourly curve per save, a pure function of (State.seed, hour). Fair spells sit between fronts. A front arrives every 3-6 days, builds cloud for a few hours, rains for 6-24 h, then clears with a wind shift. Warm fair afternoons can pop a shower. A clear, calm night after rain leaves fog the next morning (it burns off by ~10:00 and leaves the lawn soaked).
  • Cloud cover, rain chance, rain amount, fog, wind and temperature are all read from the curve, so changes are gradual and streaks are realistic (a wet week, a dry week).
  • Periods: simulated every hour, shown as morning (7-11), afternoon (11-15), evening (15-19) and night (19-7). Night isn't played but is shown small: rain overnight means a soaked lawn at 7:00.
  • The first 3 days are dry (grandma's garden, Mrs. Higgins are learned on dry grass): fair weather forced, 0% shown.
How it works: the seed and the hour make the curve; the forecast and the truth come from the same chance

An honest forecast

  • The curve gives each period a rain chance; whether it actually rains is then rolled from that chance (SimRandom.Value(seed, period index, salt), a named salt, SD2). "30%" rains about 3 times in 10. A rare shower under a "clear, 2%" forecast is fair and funny. The forecast can be wrong; the percentage is always true.
  • The percentage comes first and the icon is drawn from it. If the percentage only followed the icon, it would add nothing. A player who mows anyway under 30% wins 7 times in 10, and knew the risk.
  • Today and tomorrow are shown per period. Days 3-7 show one icon, the day's rain chance (1 − the product of the morning, afternoon and evening "no rain" chances), high/low and wind.
  • The forecast never changes as the day gets closer (revisions are WE15).
A week of weather: two fronts, a 30% afternoon that rained and a 35% one that stayed dry
Honest odds: ten 30% afternoons, and the calibration test over 10,000 periods

Sky types

Stored as values (cloud cover, rain chance and amount, fog, wind, temperature); the icon is derived, so the sky changes gradually instead of switching between presets.

TypeCloudRain chanceNotes
Clear< 20%0-5%dew burns off by 11:00; heavy dew after a clear calm night
Partly cloudy20-50%5-15%fair; afternoon cumulus can grow into a shower
Cloudy> 60%10-40%slower drying, often ahead of a front
Morning foglow0-10%after rain + a clear calm night; burns off by ~10:00; soaked lawn
Showersbroken30-60%rain on and off (the existing shower drift in Weather.cs)
Rainovercast60%+the front itself: wet grass, growth boost, booking moves

Thunderstorms (WE7) and snow (WE13) come later.

The weather icons, the later ones dashed

Season, temperature, wind

  • Season: the code is season-ready (a season table, 14-day seasons, a 56-day year) but runs one endless late spring: growth ×1.2, lows ~50 °F, highs ~70 °F. Calendar.SeasonsEnabled = false. Filling the table is WE9.
  • Temperature: for now it only sets the dew (clear calm nights = heavy dew). Shown in °F (WE4).
  • Wind: mph, a direction (8 points) and gusts. Ambiance (trees, rain slant) plus the two effects in WE3.

Climate targets (late spring)

What the generator is tuned and tested against, over a 56-day run:

  • A washout every 2 weeksAbout one, by the washout rule (WE4: ≥70% in both the morning and the afternoon).
  • 1-2 rainy days a weekThe day's rain chance is 40% or more.
  • Fog 1-2 mornings a weekAfter rain and a clear, calm night.
  • Streaks of 6 days at mostNo dry or wet run longer than that.

Hooks built now, empty

So later weather is data, not a rewrite:

  • Season table (SeasonClimate): front frequency, front strength, temperature range, shower odds, fog odds, growth, dew. Only the late-spring row is filled.
  • Weather events on top of the front curve: {type, start hour, length, strength}, decided by the seed. None yet; thunderstorms, heat waves, cold snaps and droughts plug in here (WE7, WE10, WE11).
  • AftermathWhen an event ends, a hook can drop garden debris, pool leaves, a headline and client calls (WE8).

Replacing the old calendar

  • WeatherModel (Sim, pure) gives the hourly state; the forecast per period and the truth rolled from it; the daily chance for days 3-7.
  • It replaces Calendar.WeatherOn / HumidityAt for every caller (Company, ClientTexts, HubComputer, GarageUI, HudController, MissionController, GarageController, EgoReactions). A WeatherType-style summary stays for the old callers until each one is moved.
  • ForceWeatherCommand (host-only, debug) sets a day's weather.
  • Tests: determinism (same seed → same week); calibration (each 10% bucket rains within ±3 points over 10,000 periods); the climate targets over a 56-day run; days 1-3 dry.

Needs: SD2 · Done when: the tests pass, and the old UI still shows sensible weather from the new model.

WE2: the sky follows the game clock

  • Weather.cs takes continuous values (overcast, rain, fog, wind) interpolated between hours instead of three presets. Its visuals stay (smooth blending, showers, wet ground, rain slant), fed by the model.
  • Clouds build 1-2 h before rain: the sky is the first warning in the field.
  • Morning fog (URP fog density) is new.
  • The HUD clock line shows the current period's icon and the next one ("rain from 15:00"). A client may say it ("Looks like rain, dear", through VoiceLines with WE4's lines).
  • The same continuous values feed SoundWeather (SN1): rain and wind are heard from them, and the rain edge's position (rain sweeps in down the street) comes from the same seed and clock.
  • DY1's running clock comes first; DY3 and this idea both edit the sky, so they're built back to back.

Needs: WE1, DY1 · Done when: on two instances a "60%" afternoon turns grey and rains (or not) at the same minute.

WE3: the weather in the work

Wet grass

  • Lawn wetness = dew + recent rain − drying (sun, wind). It drives the existing humidity (heavier load, more clogs). Above ~50% wet clippings stick and drop as clumps (counted as clippings left) and the bag fills faster. These effects are read through grass condition: WE3 writes wetness into LawnWeather (GR2), whose wet row gives bag fill ×1.5 and clumps above 0.5, and MO6 drops the clumps.
  • Dew dries by the sun (day.md): shaded cells stay wet longer.
  • Shapes of a day, for the same lawn: a dry, clear day loses its dew by 11:00; after rain overnight the lawn stays above 50% until about 10:00; a 15:00 shower soaks it again for an hour or two. So the best plan differs: mow any time after 11:00 on the dry day, wait until the afternoon after a wet night, start early when a 15:00 shower is forecast.
Lawn wetness through three days: rain overnight, a 15:00 shower, a dry day

Rain grows grass

  • Soil moisture (derived from the last days' rain, never stored) multiplies daily growth by 0.8 + 0.5 × moisture in Company.GrassHeightFor (dry week ×0.85, average week ×1.05, wet week ×1.25). A wet week puts on ~2 cm more than a dry one, so clients call back sooner a few days later. Example: a lawn that grows 0.6 cm a day in late spring (×1.2) puts on 4.3 cm in a dry week (moisture 0.1), 5.3 cm in an average one (0.5) and 6.3 cm in a wet one (0.9).
  • Soil moisture also goes into LawnWeather (GR2: lush grass, scorch).
Growth over 7 days in a dry, an average and a wet week

Wind

  • The leaf blower pushes further with the wind and barely works against it. Target: with the same blower in a 12 mph wind, a pile lands ~6 m away blown with the wind, ~2 m against it, and some leaves drift back.
  • Mower and trimmer clippings drift downwind (onto patios, into pools).
  • Leaf blows are replayed on every machine, so the wind must be the same everywhere: it is, because it comes from the seed.
Blowing leaves with the wind and against it, top-down

Rain starts mid-job

  • You can always keep working; it just gets wetter (heavier load, clumps, the bag fills fast).
  • In heavy rain you may also stop: the client pays for the share done, no abandon review, no reputation loss. The rest can be booked again. Leaving a dry job early still gets the usual "left halfway through" review (AbandonReview).
A job day: fair, clouds build while the HUD warns, then rain: keep working or stop

Tests: the growth multiplier, the stop-in-rain settlement.

Needs: WE1, GR2 · Done when: a wet week makes clients call back sooner, and blowing against the wind is visibly worse on both instances.

WE4: where players see it, and bookings

Where it shows

  • Cloud NineThe computer's weather app, next to Mail, Starzly and Hedge Fund Bank, on the old beige PC: 7 days, today and tomorrow by period, rain %, temperature, wind.
  • The Daily ClippingThe morning paper's weather column becomes a 3-day box with icons, printed in black ink.
  • The clock lineThe hub and HUD clock line show the current period, plus the next one in the field (WE2).
  • °F or °C°F by default, °C in Settings (per player, PlayerPrefs, display only).
The paper's 3-day box and Cloud Nine on the old PC

Bookings

You pick the day when you book a newspaper client, and you can move a visit when rain is likely. The forecast the evening before decides:

The booked dayWhat happensReputation
Washout: rain ≥ 70% in both the morning and the afternoonthe client calls the evening before to move itno loss
Rainy: the day's rain chance ≥ 40%you may call to move it, or go anywayno loss either way
Fair: below 40%you goa missed visit costs reputation and an angry review, as today
  • Anyone can make the call (MoveBookingCommand, actor recorded), from the phone.
  • The washout call and "Looks like rain" lines go through VoiceLines.
  • Tests: the washout rule; moving a booking costs no reputation.
The three kinds of booked day, as the forecast stands the evening before

Needs: WE1 · Done when: a guest moves a rainy booking and the host's calendar shows it, with no reputation lost.

WE5: rainy days have things to do

A washout must not be a skipped day: repairs and maintenance at home, a store run, and canvassing works better in the rain (people are home), once canvassing exists (J37b). The bonus's size is still to set.

WE6: ironing at home

Indoor work for rainy days and evenings, a small trade of its own: clients drop laundry baskets at grandma's house, you iron in the evening or while it rains, and in co-op one sibling can stay home ironing while the others go out (once siblings can split up, DY5). Housekeeping in clients' homes is EC12.

WE7: thunderstorms

A weather event (WE1's events list) with lightning and synthesized thunder (SN6). Work stops and the job pauses; a storm on a booked day makes the client call to move it, like a washout. Its icon is a cloud with a bolt.

WE8: storm aftermath

When a storm ends (WE1's aftermath hook): fallen trees and branches (the wood job exists), debris in gardens and pools, a headline, and storm clean-up calls, the big paydays. Rain-flattened grass comes with it (GR2's lodging).

WE9: seasons

Fill the season table (SeasonClimate): 14-day seasons in a 56-day year, each with its front frequency and strength, temperature range, shower and fog odds, growth and dew. Turns Calendar.SeasonsEnabled on. Frost, heat, leaves and snow (WE10-WE13) hang off it.

WE10: frost mornings and cold snaps

No mowing frozen grass until it thaws; mowing or walking on it anyway blackens it (GR2's frost row). Cold snaps are a weather event.

WE11: heat waves and droughts

Weather events. Heat waves make grass go dormant, scalping burns it, clients don't book, and sun-exposed cells scorch (GR2's scorch: heat 1 in a heat wave). Droughts dry the soil and bring watering jobs (WE14).

WE12: autumn leaves

Leaf fall in autumn: leaves cover lawns and pools (the leaf task; GR2's leaf cover), written into LawnWeather.

WE13: winter and snow

Snow cover on lawns (the snow icon), and a winter trade: shovelling, salting driveways.

WE14: weather-aware services

Lawn feed works better before rain and burns in heat; patch seeding needs rain or watering; watering jobs in droughts; gutter clearing in autumn. The treatments themselves are GA2's.

WE15: forecasts that shift

The forecast moves as the day gets closer ("rain moved to Thursday"), still honest about its odds.

WE16: more ways to hear the forecast

Grandma's knee (always right), the living-room TV, a phone radar. The car radio reading the weather is day.md's.

WE17: after the rain

A rainbow after rain, puddles on paving, snails and worms in Critters, rain on grandma's windows and roof, steam off a drying lawn.

WE18: rain gear

A raincoat or poncho (with the safety gear plan) and a tarp for the van.

WE19: clients and the rain

Tips and complaints for working in the rain.

WE20: weather in the other trades

Rain on fresh glass cleaning, diluted pool chemicals, ladder and chainsaw risk in gusts.

WE21: microclimates per district

Different weather per district, only if districts become real places.

Tuning

Starting numbers, tuned against the climate targets.

NameValueIdeaWhat it does / why
Front spacingevery 3-6 daysWE1fair spells between fronts
Front build-upa few hours of cloudWE1the warning before rain
Front rain6-24 hWE1then it clears with a wind shift
Fogafter rain + a clear calm night; gone by ~10:00WE1a soaked lawn the morning after
Periodsmorning 7-11, afternoon 11-15, evening 15-19, night 19-7WE1simulated hourly, shown by period
Forced fair daysdays 1-3, 0% shownWE1the tutorial gardens are learned dry
Daily rain chance1 − (1 − morning)(1 − afternoon)(1 − evening)WE1one number for days 3-7
Forecast reachtoday and tomorrow by period, days 3-7 one iconWE1
Sky typescloud and rain-chance bands in the sky-type tableWE1the icon is derived from the values
Seasons14-day seasons, 56-day year (off)WE1season-ready code
Late springgrowth ×1.2, lows ~50 °F, highs ~70 °FWE1the one endless season for now
Dewburns off by 11:00 on a clear day; heavy after a clear calm nightWE1
Windmph, 8 directions, gustsWE1
Climate targets1 washout / 2 weeks; 1-2 rainy days / week; fog 1-2 mornings / week; streaks ≤ 6 daysWE1over a 56-day run
Calibration±3 points per 10% bucket over 10,000 periodsWE1the honest-odds test
Cloud build-up1-2 h before rainWE2the sky warns you in the field
Clump thresholdlawn wetness above ~50%WE3clumps and a faster bag
Growth by moisture×(0.8 + 0.5 × moisture): ×0.85 dry week, ×1.25 wet weekWE3a wet week puts on ~2 cm more
Blower and wind~6 m with a 12 mph wind, ~2 m against itWE3a target, not a formula yet
Washout≥ 70% rain in both the morning and the afternoonWE4the client calls to move it
Rainy daythe day's rain chance ≥ 40%WE4free to move

Co-op

Weather is a pure function of (seed, hour), and the clock is already synced, so every sibling sees the same sky and the same wind (leaf-blow replays stay identical).

  1. State: WeatherModel in Scripts/Sim, pure; the only new commands are MoveBookingCommand and the debug ForceWeatherCommand.
  2. Ownership: everything is shared and derived; °F/°C is per player (PlayerPrefs, not the save).
  3. Host-only: ForceWeatherCommand. MoveBookingCommand is anyone's (actor recorded).
  4. Randomness: SimRandom from State.seed only, with named salts (SD2).
  5. Channel: deterministic generation from seeds; bookings through company state.
  6. Packets: nothing new is sent.
  7. Late joiners: compute the same weather from the seed and the synced clock.
  8. Secrets: none.
  9. Cinematics: none.
  10. Save: no new field (State.seed exists); ForceWeatherCommand stores a day override (a save version bump only if it ships outside debug). Data version unchanged.
  11. Voice lines: the washout call and "Looks like rain" go through VoiceLines.
  12. Tests: the ones in each idea, plus a two-instance run: the same forecast, the same rain at the same minute, mismatches=0.

Tech

Who owns what

This page owns what the weather is (the hourly curve, the forecast and the truth), what it does to the work (wetness, soil moisture, wind on leaves and clippings, stopping in the rain) and the booking rules.

  • The day (day.md, DY1-DY4): the clock, the sun, dew drying by the sun, the car radio. WE2 needs DY1.
  • Grass (grass.md, GR2): reads the weather only through LawnWeather. WE3 writes wetness and soil moisture; frost, heat and leaf fall come later (WE10-WE12). Until WE3, LawnWeather comes from the calendar.
  • Sound (SN1): reads only SoundWeather, filled from WE2's continuous values; storms, seasons and snow add fields later.
  • The mower (mowing.md): humidity loads the deck; MO6 drops the wet clumps.
  • Demand and moneyJobs.md and work.md read the day's rain (growth, demand); garden.md and economy.md keep weather moves free. difficulty.md has no weather row: the forecast stays honest on every preset.
  • Seeds (seeds.md): the save seed and named salts (SD2).

The code

  • Today: Calendar.WeatherOn(day), HumidityAt(day, minute) and WeatherLabel in Sim/Company/VanPacking.cs (one roll per day, three types); the visuals in Ambiance/Weather.cs.
  • New: WeatherModel (Scripts/Sim, pure: hourly state from (State.seed, hour)), SeasonClimate, the events list and the aftermath hook, ForceWeatherCommand, MoveBookingCommand; growth in Company.GrassHeightFor; the lawn's values in Sim/Mowing/LawnWeather.cs; sound's in SoundWeather.
  • Files the early-game steps also edit: Company.cs, ClientTexts.cs, HubComputer.cs, HubPaperPhone.cs, GarageUI.cs, HudController.cs, MissionController.cs. WE1 and WE2 are mostly new files plus Calendar and Weather.cs; WE4 touches the computer and the paper.
  • Sandbox: wind and a weather override independent of the day (docs/dev/sandbox.md).

Save

No new field: the save seed already exists, and everything else is recomputed. °F/°C lives in PlayerPrefs.

Tests

  • WE1: determinism (same seed → same week); calibration (±3 points per 10% bucket over 10,000 periods); climate targets over a 56-day run; days 1-3 dry.
  • WE3: the growth multiplier; the stop-in-rain settlement.
  • WE4: the washout rule; moving a booking costs no reputation.
  • Co-op: two instances show the same forecast and the same rain at the same minute, mismatches=0.

Open questions

  • The canvassing bonus in the rain (WE5): how much better, and in which form (more doors answered, warmer replies)?
  • The wind's push on the blower (WE3): the 6 m / 2 m example is a target; the force formula isn't decided.
  • Pollen and sun: the skills page wants high-pollen days (hay fever) and sunny days (sunburn) from the weather; neither is in this spec yet.

Rejected

  • One roll per day from the day number (the old Calendar.WeatherOn): the same weather in every save, no forecast, no streaks. Replaced by fronts from the save seed.
  • A percentage that follows the icon: it would add nothing. The chance comes first, the icon from it.
  • Syncing the weather over the network: not needed; it is a pure function of the seed and the synced clock.
  • Three sky presets in Weather.cs: the sky switched instead of changing gradually; continuous values instead.
  • A difficulty dial for the weather (difficulty.md): the forecast stays honest on every preset.
Source docs/game/weather.mdEdited 2026-10-03