Game Mower wiki

Game

Sound: every sound comes from somethingSN

How the game sounds, and above all where each sound comes from. Placed sounds with real distances, walls and echo, ears that adapt and ring, the neighbors' noise, music in the world, voices, weather you hear.

Every sound starts at a thing in the world: the mower, the dog next door, your brother two lanes over, the radio in the kitchen. How far it is, which way you face and what stands between you decide what reaches your ears. The neighbors hear with the same ears, so a loud mower at 7 am is a real problem.

The player's view

Your own mower. You push the mower and its engine sits in front of you, on the engine; turn round to look back at the lawn and it's behind you. The cut chatters from the deck under it, the tall grass rustles at your feet. A stone clanks in the deck and the caption says where: "CLANK, ahead".

Your brother, two lanes over. His mower is a real mower: you hear it across the yard, still a hum from the far end of the street, dull when a house stands between you. When he hits a stone, the clank comes from his deck, not from your head.

Stepping inside. You walk into the house for a drink. The mowers outside go dull and seem to come from the open door; the radio fills the kitchen with a little echo. Shut the door and the yard nearly disappears.

Cutting the engine. After an hour of mowing you let go of the bar. For a moment it's quiet, then the world comes back: the blackbird on the fence, the street, the client calling from the porch, swelling in over a few seconds.

The neighbors listen. It's 7:40 and you start the petrol mower next to the fence. Next door a baby is asleep; keep it up and they knock, then the HOA writes, then the city fines you. Mow the far side first, or take the quiet battery mower. On a rainy morning the windows are shut and the rain covers you: you can start a little earlier.

Your ears. A day of the string trimmer without ear defenders and your ears ring until bedtime, the highs dull; the next morning it's gone. With the defenders on, the world goes muffled and you miss the quiet cues, so the captions matter more.

Rain sweeps in. You hear it before it reaches you: the drops start on the roofs and trees upwind and sweep down the street toward you over a minute or so. Then it's soft on the lawn, splashy on the drive, drumming on the van's roof. Afterwards the trees drip, the gutters gurgle and the birds burst into song.

Music lives in the world. No score while you mow: the engine and the neighborhood are the music. The car radio on the way to a job, the boombox in the garage, Chad's car arriving with music blasting. Clients chatter in a gibberish of their own under their text; the story cast is fully voiced.

Walk round a yard with eight sound sources and hear today's audio against the planned one (headphones)

Ideas

SN1: sounds have places

Every world sound has a place and is heard from it, for every player. Your own sounds stop playing in your head.

Rules for every sound

  • A world sound needs a placeEvery call names a thing to follow (a Transform) or a point. A sound with no place is UI only: clicks, the payday sting, the composed score.
  • One path for everyoneYour sounds and your brother's go through the same call. Co-op sends the event; each machine places it. No more "mine in my head, theirs in the world".
  • Sounds follow what makes themThe stone's whistle flies with the stone, the dog barks from its mouth, the engine sits on the engine, the cut comes from the deck. Moving sounds are attached, not left at the start point.
  • Loudness lives in the sound listEach sound has a loudness at 1 m, a size and a caption; how far it carries comes from that, never from per-source range sliders.
  • The listener is your headThe camera, not the body, so Alt free-look turns the world around you. A phone voice sits at the ear holding the phone.
  • Inside your head on purposeUI, the composed score, stingers, and the ringing in your ears.

How a sound reaches your ears

The same steps for every world sound, in this order. Each is something the game already knows (positions, walls, rooms, gear), so no sound needs hand tuning.

  1. The sourceA place, a loudness (dB at 1 m), a size (a point; a line like a road; an area like rain or a hedge full of birds), a direction if it has one (a voice, an exhaust: louder in front).
  2. Distance−6 dB each time the distance doubles; far away, the highs fade first (SN2).
  3. In the wayWalls, glass, fences, hedges, the van's body dull and lower it; open doors and windows let it through (SN2).
  4. The roomThe echo of where you stand (SN2).
  5. Your headDirection from the camera.
  6. Your earsEar defenders, the headphones item, the day's ringing (SN3).
  7. The mixGameplay sounds duck the ambience; captions show what you heard and where from.

Where each sound sits

  • Your hits, debris, flowers, breakdowns: from where they happened, the same call for everyone (about 20 garden events: hard hits, debris, flowers, a broken mower, wood, the pool).
  • Your mower's engine: fully placed at the engine, about 1 m ahead; it turns with your head.
  • The cut: from the deck under the mower. The tall-grass rustle: at your feet and the wheels.
  • The other player's mower and hits: heard across the block like a real mower; muffled behind houses (SN2).
  • Voices: from the speaker's mouth (the story cast, scene voices and the intro); a phone voice at one ear. Your own character's quips (mowing's ego quips) sit at your own head, centred, but get the room's echo.
  • Ambience beds (day, wind, rain) stay everywhere, but louder from their side (the street, the trees) and through open doors.

Distance: real distances

One rule for every sound: a petrol mower carries across the block, as a real one does.

  • Level at your ear = loudness at 1 m − 20·log10(distance) − what's in the way. Under 1 m counts as 1 m (0.5 m for things in your hands).
  • The game's reference: a petrol mower at arm's length (about 1 m, 90 dB) plays at about −4 dB on the effects bus; everything else follows from its own loudness. One-shot clips are normalized to the same reference so the dB number alone sets the level: no per-call volume fudging (per-call volume is kept only for variation, e.g. a harder hit).
  • Dropping a sound: a sound stops playing when it falls 10 dB under the background where you stand (day street ~45 dB, night ~35, rain ~55, indoors ~30), or when the voice cap needs room (lowest priority, then quietest first).
  • Spread: big sources (the road, rain, a flock) are wide rather than a point, so they don't swing hard left and right when you pass right by them (TrafficAudio already uses spread 60 on drive-bys).
  • Doppler: off (recordings carry their own); maybe a touch on the thrown stone's whistle.
Level against distance: today's five fades against the one planned rule

Starting loudness (dB at 1 m), to tune in the sandbox:

SounddBBlends into a 45 dB street at
Talking (a client, your brother)60~6 m (a shout, 80: ~55 m)
Footsteps on paving55~3 m
Sprinkler64~9 m
Kitchen radio72~22 m
Blackbird76~35 m
Battery mower75~32 m
Clank of a stone in the deck85~100 m
Dog barking86~110 m
Car passing (at 1 m)88~140 m
Petrol mower90~180 m
Hedge trimmer92~220 m
String trimmer, pressure washer95~320 m
Leaf blower (GreenCorp crews)100~560 m
Glass breaking100~560 m
Chainsaw, car alarm110far: the whole street hears it
How far each sound carries before it blends into a daytime street

Ears adapt: long sessions

Real distances put a 90 dB engine at arm's length for hours. Real ears deal with that by adapting; the game copies it, so mowing stays comfortable and stopping the engine becomes a moment.

  • Adaptation: a slow gain on everything you hear from the world, driven by the level at your ear over the last ~20 s. Above ~70 dB it settles down by up to 8 dB (attack ~8 s: you don't notice it happening); when the loud sound stops it recovers in ~2-3 s (release), so the world comes back after you cut the engine: the birds, the street, the client's voice swell in.
  • Masking: a sound 10 dB or more under the loudest sound at your ear (usually your own engine) stops playing, as "dropping under the background" already does for the street; it comes back when the engine stops. This also saves voices.
  • Gameplay cues are exempt: they sit after the adaptation and keep their ducking, so a clank, glass, an alarm or someone calling you is never lost (captions too).
  • Ringing is separate: the ears gauge (SN3) reads the real level at your ear, before adaptation. Adapting is comfort, ringing is the consequence.
  • Loudness target: the whole mix aims at about −18 LUFS for a typical minute of mowing (a common PC level), true peaks under −1 dB; checked with the offline loudness check.
  • Dynamic range setting: Full (headphones, a quiet room: the default), Reduced (speakers, TV: loud things squeezed, quiet things lifted), Night (narrow: nothing startles). A compressor on the master and a deeper adaptation; gameplay cues keep their priority in all three.
One minute of mowing: your hearing settles under the engine, the blackbird is masked, and the world comes back when you stop

The mix

  • One AudioMixer: Master > Music, Voice, Effects (Machines, World, UI), Ambience. Settings get a slider per group (today: master, voices, effects).
  • Presets (snapshots): outdoors, indoors, in the car, on the phone (everything else ducks), pause, slow-mo (the thrown stone: lower pitch, long echo), results.
  • Ducking: gameplay sounds (a clank, glass, an alarm, the phone ringing, a client calling you) briefly lower the ambience and music, so a cue is never masked.
  • Voice cap and priority: a cap on copies per sound (three clanks at once, not twelve) and a global cap; low priority ambience goes first. Unity plays 32 real voices by default (more are virtual: tracked, silent); the caps and priorities keep the important ones real, and the budget is raised only if the sandbox's sound view shows real cues being dropped.
  • Variation: several takes per sound, small random pitch and volume, no same take twice in a row.

The sound list

One data file of every sound, like the voices' lines.json (format in Tech). Each entry: an id, its kind and mixer group, the loudness at 1 m, size, direction, takes, variation, priority, cap, the caption and what it ducks.

  • Missing clips are flagged (like hasClip for voices); ElevenLabs sound-effect generation fills them (the "Game Mower – Ambience" flow; ~3.3 credits/s, not free), downloaded, converted to WAV, normalized to the reference.
  • Sfx keeps working: SfxType entries become ids in the list.

One call for world sounds

Sound.At(id, point) / Sound.On(id, transform) (names decided when built); Sfx.Play without a place is kept for UI only. Moved onto it: every garden event (about 20 call sites), your mower's engine and cut (full 3D, on the engine and the deck), the tall-grass rustle, scene voices and the intro. The "remote only" PlayAt branches go.

Captions and settings

  • Captions for gameplay sounds, with direction ("CLANK, left", "dog barking, behind"): sound carries a lot of information here, so deaf and hard-of-hearing players need it. The text comes from the sound list.
  • Subtitles for voices (they exist); a mono switch; a slider per mixer group. The Gauges setting (mowing) stays the visual fallback for sound-first mower cues.
  • A "mute when the game is in the background" setting, on by default.

Weather through one input: SoundWeather

Sound never reads WeatherModel. WE1 and WE2's values (rain rate, wind speed, direction and gust, temperature, cloud, fog) and WE3's wetness (lawn and paving, which lasts after the rain) fill one SoundWeather, interpolated between hours as WE2 does for the sky, like the mower reads only LawnWeather (GR2). Today's Weather.Rain01 and Wind are its stub until WE2. Storms (WE7), seasons (WE9) and snow (WE13) add fields later; no sound code reads the weather any other way.

  • The background follows the weather: rain (~55 dB in steady rain, more in a downpour) and strong wind raise the background where you stand, so dropping under the background removes distant birds and traffic with no special case, and the ears adapt to a downpour the way they do to an engine.

Under the hood

  • Clip import: short one-shots decompressed on load; long beds and music streamed from disk; voice lines compressed in memory. 3D world sounds are mono (Unity's "force to mono"); beds and music stay stereo.
  • The offline loudness check reads every clip: its level against its loudness entry, clicks at loop points, true peak.
  • Rumble follows the same events: gamepad rumble is triggered by the same events as the sounds (a hit, a stall, the bent blade's wobble), scaled by the level at your ear, so the two always agree.
  • Sandbox: an F1 sound board (play any sound at a distance and direction) and a sound view that draws lines from each playing sound to you, like the yard figure.

Needs: SB1 · Done when: a clank from your mower and from your brother's comes from the deck on both machines, a petrol mower is still heard far down the street, the birds and the street swell back within a few seconds of cutting the engine while a clank is never masked, every gameplay sound shows a caption with its direction, and the seed fingerprints are unchanged.

SN2: the world acts on sound

Walls, rooms and weather shape what reaches you.

In the way: walls, glass, doors

Starting values (the loss, then the low-pass that comes with it), to tune:

Between you and itLossHighs cut above
House wall30 dB350 Hz
Closed window (glass)20 dB1.5 kHz
Open window4 dB6 kHz
Closed door18 dB800 Hz
Wooden fence3 dB6 kHz
Hedge6 dB3 kHz
Van or car body (you inside)15 dB1 kHz
  • Losses add up per crossing on the straight line.
  • Doors and windows as openings: when the straight line is blocked, the sound also tries the way through the nearest open door or window (the path length via the opening, a small loss), and the louder way wins. Heard that way, it comes from the opening: indoors, a mower outside sounds like it's at the door.
  • Indoors becomes a result, not a switch: AmbientAudio.Muffle01 and BaseRoom.Covers go away; walls do it. The van and car interiors too.
  • Which sounds check: rays are cast for the few sounds that matter (machines, voices, hits, alarms, the radio) a few times per second, not every frame; ambience beds use the room-level answer (indoors or out, which openings are open).
  • Highs fading with distance: far away the highs go first, so a distant mower is a hum (a low-pass per source).

The room: echo

  • Echo zones to start: the garage (bare, tiled: bright, short), dad's house and grandma's house (small, soft rooms), the hardware store (a big hall), under a carport, between two houses (a slap off the walls), outdoors (almost dry).
  • An echo zone is a box with a preset; the zone you stand in sets the echo for everything you hear (the plain way). Steam Audio would compute it from the geometry instead.

Rain: you hear where the drops land

Today AmbientAudio plays rain and wind as two loops in your head whose volume follows Weather.Rain01 and Wind.Strength / Gust (birds thin out in rain and wind, crickets fade in rain, both muffled indoors): a volume knob, the same over the lawn, under a tree or in the van. Instead:

  • Surfaces around you, one layer each: soft on the lawn, splashy on paving and puddles, loud under a tree's leaves, drumming on a roof above you (the garage, a carport, the van, a car). Each layer's level comes from how much of that surface is around you (the lawn grid's surfaces and the colliders overhead), not from a single bed.
  • Indoors: rain on the roof above, on each window (a placed sound at the window, through the glass), and louder through an open door; the walls handle the rest.
  • Strength: recorded drizzle, rain and downpour loops crossfaded by the rain rate (the engine's RPM idea).
  • Wet, not rain: what follows wetness lasts after the rain stops: cars hiss on a wet road (wet drive-by takes), the mower's cut changes (GR2's matrix), clumps thud, puddles splash.
  • After the rain: drips from trees and eaves for a few minutes, gutters gurgling at the downspouts, then a burst of birdsong.

Wind: you hear what it moves

  • Trees as placed area sounds, each rustling at its own gust strength; a gust crosses the yard in the wind's direction, so you hear it come through the trees upwind before it reaches you.
  • Things it moves: wind chimes on a client's porch, a flag rope ringing on its pole, a gate banging, a bin lid, the van's tarp, a whistle through fence gaps in strong wind (each a placed sound that fires on gusts).
  • In your ears: a soft buffeting on the side facing the wind (subtle; off with ear defenders).
  • Gusts come from the seed and the clock (not a local random), so both players hear the same gust in the same trees.

Unity or Steam Audio

Steam Audio (Valve; free, open source, not tied to the Steam store; Windows and macOS) plugs into Unity as the spatializer: it replaces the last step of each AudioSource. SN1's work (places, the distance rule, the mixer, captions, the sound list) stays either way.

Unity's own audioSteam Audio
Left / rightyesyes
Ahead / behind, above / belowno: a clank behind sounds like one in frontyes: head-shaped filtering (HRTF), on headphones
Walls and glassour own rays + a low-passbuilt in, from the meshes, with per-material loss (brick, glass, wood)
Around corners, through doorsour door openingspathing: real routes through openings (baked ahead of time)
Echoecho zones we place by hand (boxes with presets)computed from the room's shape and materials
Highs fading with distanceour own low-passbuilt in (air absorption)
Seed-generated gardensno problemto check: baked pathing and echo want fixed levels; live occlusion and echo cost CPU
Our synthesized engine and cutworksto check: must still pass through the spatializer
SpeakersfineHRTF can sound colored: a setting falls back to panning
Costnonea native plugin per platform, CPU per source, more to learn
  • Why it would be worth it: first person on headphones lives on front/back cues (the clank behind you, the mower behind the hedge); every room and gap gets its own echo and muffling without hand tuning; less code of our own for what you hear. The noise checks stay ours either way (SN3: sim, host-side, tested, no audio).
  • The trial: SN1 runs on Unity's own audio. SN2 tries Steam Audio in the sandbox on your mower, the hits and a voice, with live occlusion and HRTF. Keep it if the engine still works through it, generated gardens work and the CPU cost is small; otherwise our own rays and echo zones. The go / no-go is written here.
  • Headphones / speakers setting: speakers turn off HRTF if Steam Audio is used.

Needs: SN1 · Done when: standing indoors, a mower outside sounds dull and comes from the open door, shutting the door nearly silences it, the garage echoes and the lawn doesn't, rain sounds different on the lawn, on the drive and under a tree, and the Steam Audio go / no-go is written in this spec.

SN3: loudness becomes noise

The neighbors use the same ears, and so do you.

Noise: the neighbors listen

  • A neighbor is a listening point at a window of a household (Where work comes from: the market) with a limit for the hour: quiet hours (DY4: 21:00-8:00, Sunday mornings) ~45-50 dB, a sleeping baby 50 dB, a night-shift worker 50 dB until noon, a weekday afternoon 60 dB.
  • The same loudness and the same rule as your ears, simplified in the sim: distance plus a count of walls and windows on the straight line (no audio, no Unity: it runs on the host, in tests, the same on every machine).
  • Over the limit for long enough (a sum over a few game minutes, not one loud second) brings the next step: a knock or a text, then an HOA letter (neighborhoods that have one), then a city fine. Reputation on that street follows (WORK and ECONOMY own the amounts).
  • Each neighborhood has its own rules: strict near the mansion, lax on grandma's street.
  • Tactics that fall out of it: mow the far side of the lawn first; the battery mower at 75 dB is under most limits (DY4's "battery mower exempt" becomes a result instead of a rule); close the van's doors; save the leaf blower for the afternoon. If your mower sounds loud through their glass, it is.
  • Dogs bark at engines: a dog within its hearing range of a tool above ~80 dB at the dog barks; a dog can set off the next dog. Barking is a sound with its own loudness, so the neighbors hear that too.

Rain helps with noise

  • Windows close in rain and cold (a household's windows are open on warm dry days, shut otherwise): the neighbors' listening points get the closed-glass loss.
  • Masking at the window: a complaint needs your machines to be over the limit and clearly above the background at that window. Steady rain lifts that background, so a rainy morning lets you start a little earlier.

Your ears

  • Ear defenders (safety gear): the world −20 dB with dulled highs; UI, captions and the phone (at your ear, through the cup) stay clear. You miss quiet cues (the clank, a dog), so captions matter more. The ringing gauge stops filling.
  • The headphones itemYour music (the radio) in your head; the world −12 dB and dulled. Music while you work, at the price of missed cues.
  • The ringing (a hidden ears gauge): time spent above 85 dB at your ear fills it; every +3 dB halves the time to fill (the real rule for hearing damage, squeezed into a game day: about 1 game hour at 85 dB fills it). Full: a faint ringing tone and dulled highs for the rest of the day; the next morning it's gone.
  • Difficulty: Mishaps off (Relaxed) means no gauge (Difficulty). SK8 keeps a longer memory of many ringing days.

Needs: SN1, households (Where work comes from: the market) · Done when: mowing near the neighbor's fence before 8:00 brings the same knock on host and guest, the battery mower stays under the limit where the petrol one doesn't, and a day of loud tools without ear defenders leaves a ringing that's gone the next morning.

SN4: machines that sound real

Hybrid machines, replacing mowing's "procedural first" rule: recorded engine loops at 3-4 speeds (idle, blades on, full, bogging) crossfaded by RPM, like racing games, with synthesized layers on top for what the sim knows: misfire pops, bog, the bent-blade wobble, knocking from low oil, the sputter of an empty tank. EngineAudio becomes the layer driver; recordings replace its base tone. The cut stays synthesized (it follows the grass matrix cell by cell); recorded grass textures may be layered. Everything mowing lists under its sounds to make (Mowing: the mower bible › assets-to-make: pull cord, choke, run-down, brake clunk, gravel stream, ricochet whistle, glass, car alarm...) goes into the sound list with a loudness.

SN5: rain sweeps in

Rain falls in a front that crosses the neighborhood with the wind. Before it reaches you, you hear it starting on roofs and trees upwind, and it sweeps toward you over a minute or so. The first warning is a sound; the HUD's "rain from 15:00" stays as the backup. Needs WE2's continuous sky: the rain edge's position comes from the seed and the clock, so both players hear it arrive at the same moment.

A rain front moving down the street: you hear it on the roofs upwind before it reaches you

SN6: storm sounds

With WE7's storms. Thunder: lightning has a position; thunder arrives ~3 s per km later, a sharp crack close, a low roll far; each player hears it with the delay for where they stand. Dogs whine; a close strike sets off a car alarm. Hail drums on car roofs and the van.

SN7: seasons, fog and temperature

  • Snow hushes everything: a lower background, a drier echo, crunching underfoot.
  • Fog: a hushed morning bed (fewer birds, a softer street).
  • Crickets chirp faster when it's warm (Dolbear's law: chirps per minute ≈ 4 × (°F − 50) + 40).
  • Cicadas only in hot afternoons and heat waves.
  • Autumn leaves crunch underfoot and under the mower.

SN8: the neighborhood you hear

  • The clock you hear (DY7 owns the schedule): the dawn chorus, the school bell, the garbage truck on trash day, the ice cream truck mid-afternoon, church bells on the hour, sprinklers at dusk, the street going quiet at 22:00, crickets; grandma's cuckoo at home. Scheduled sounds fire from the game clock, so co-op players hear them at the same moment (DY7).
  • GreenCorp's crews: leaf blowers droning a couple of lots over, annoying on purpose.

SN9: music in the world

No score while working: the engine, the cut and the neighborhood carry the mood. Music comes from things: the car radio (DY2: it reads the weather), a boombox in the garage, Chad's car arriving with music blasting, a neighbor's barbecue, the insurer's hold music (Insurance: accidents and who pays). Each is a placed sound with a loudness: walls and distance apply. The headphones item (SN3) plays the same radio in your head.

SN10: the composed score

A composed score only where nothing in the world plays: the title, payday and results, story beats (dad, grandma, mom, the ending), and short stingers (a perfect lawn, a new client, a broken window). It plays in your head.

SN11: radio stations

Stations with an announcer: DJ lines, Chad ads, GreenCorp jingles. A voice-content decision.

SN13: proximity voice

Your brother's real voice is a placed sound on his avatar's mouth: distance, walls and echo apply; two engines running drown you out (you have to shout or stop); when far apart, the phone or the car radio relays it (a phone filter, at one ear). Steam voice through the existing Steam co-op.

SN14: comedy, rarely

Real sounds by default; comedy is rare punctuation on true gags only: a slide whistle (a stone in slow-mo heading for glass), a boing, a sad trombone (a bent crank), a record scratch (a stall in front of the client), poop.

SN15: talking over the engine

Clients can't hear you (or you them) while the engine runs; shut it off to talk, or they wave at you and the caption says "(can't hear over the engine)". The same rule for proximity voice (SN13).

SN16: surfaces underfoot

Footsteps and wheels per material and wetness (grass, wet grass, gravel, paving, deck boards, garage concrete, mud), for you, NPCs and the mower; the same material tags as SN2's walls. SN16a is the first step.

SN16a: footsteps

Every sibling's feet make a sound: two sets, grass and hard ground (paving, the road, the garage and house floors), picked by what's under the foot (the lawn or not). A few variations per set so no two steps repeat, timed on the walk cycle (PL1's speeds: faster when you jog, softer with Ctrl). They go through SN1's one path, so you hear your sibling's steps from where they walk. Client NPCs use the same sets.

Needs: SN1 · Done when: walking on the lawn and on the sidewalk sounds different, a jog steps faster, and on two instances each player hears the other's steps from their place.

SN17: the phone and UI in the world

The phone buzzes at your hip and rings from your pocket, the computer's clicks come from the computer, the paper rustles in your hands; one family for reward sounds (ka-ching, chimes, payday).

SN18: places sound like their state

Dad's dirty house drips, buzzes with flies and echoes empty, and gets softer as you clean and furnish it; grandma's ticking clock; the store's music and announcements; the mansion's grand echo.

SN19: musical identity

A short sound logo, a payday motif, short themes for dad and grandma reused in the score (SN10) and on the radio.

SN20: wind carries sound

A few dB further downwind, shorter upwind, for your ears and the neighbors' (mow while the wind blows away from the baby's window).

SN21: calm mornings carry

On clear, calm early mornings sound carries farther (a temperature inversion), so quiet hours bite harder on exactly those mornings.

SN22: streamer-safe music

If the radio ever plays licensed tracks, a streamer mode mutes them (our own composed music is always safe). Matters before any licensed music goes in.

Tuning

Starting numbers, tuned in the sandbox by ear on headphones and speakers. The loudness table (SN1) and the losses table (SN2) are their own tables.

NameValueIdeaWhat it does / why
Distance rule−6 dB per doubling (20·log10 d)SN1one rule for every sound
Closest distance1 m (0.5 m in your hands)SN1no infinite levels
Referencepetrol mower at ~1 m (90 dB) ≈ −4 dB on the effects busSN1the dB number alone sets the level
Drop under the background10 dBSN1
Backgroundday street ~45, night ~35, rain ~55, indoors ~30 dBSN1
Spread for big sourcese.g. 60 (drive-bys)SN1no hard left/right swing
Adaptationabove ~70 dB, up to 8 dB, attack ~8 s, release ~2-3 s, window ~20 sSN1comfort; the world comes back
Masking10 dB under the loudest sound at your earSN1cues exempt
Loudness target~−18 LUFS, true peak < −1 dBSN1a typical minute of mowing
Voice cape.g. 3 copies per sound; 32 real voicesSN1
Ray checksa few times per second, important sounds onlySN2CPU
Neighbor limitsquiet hours ~45-50, baby 50, night shift 50 until noon, weekday afternoon 60 dBSN3
Dogs barka tool above ~80 dB at the dogSN3
Ear defenders / headphones−20 dB / −12 dB, dulledSN3
Ringing gaugefills in ~1 game hour at 85 dB; +3 dB halves itSN3the real hearing rule, squeezed
Steady rain~55 dBSN2raises the background
Rain frontsweeps over ~a minuteSN5
Thunder delay~3 s per kmSN6
Crickets4 × (°F − 50) + 40 chirps a minuteSN7Dolbear's law
Sound-effect generation~3.3 ElevenLabs credits/sSN1not free

Co-op

  1. State: no new state for what you hear: events are already sent (GardenEvents, HubEvents) and each machine places the sound from the same position. The "remote only" PlayAt branches disappear: everyone uses the placed call.
  2. The other sibling's machines are synthesized locally from synced state (as NetAvatar does today), with the same loudness and rules as your own.
  3. Host-only: noise is decided on the host (the sim model, SN3), so both players get the same knock at the same time.
  4. Randomness: take choice, pitch and volume variation use their own random, never the seeded sim streams. Gusts and the rain edge come from the seed and the clock, so both players hear the same gust and the same front.
  5. Timed sounds fire from the game clock, so both players hear the cuckoo at the same moment.
  6. Late joiners: nothing to send; sounds start from the state they get.
  7. Checks: a guest hears the host's clank from the host's mower; the same complaint on host and guest.
  8. Proximity voice: SN13.

Tech

Who owns what

This page owns how sound is placed, carried, blocked, mixed and captioned, the sound list, music and the noise model (loudness at a neighbor's window). Days: the clock, the sun and the hours owns when quiet hours are (21:00-8:00, DY4) and the clock sounds' schedule (DY7); Weather: fronts and forecasts owns which weather plays; Mowing: the mower bible owns what state the mower is in (this page says how that state sounds); Where work comes from: the market owns households (who lives behind which window); Difficulty owns the Mishaps switch. The voices' generation pipeline is in Architecture › voices.

What the code has today

  • Synthesized at runtime: EngineAudio (small-engine pulses, bog, misfire; mowers and hand tools), CutAudio (grass through the blade, brightness from the grass matrix), Sfx (17 one-shots: pop, clank, tink, splat, crunch, hiss... and pentatonic chimes), AmbientSynth (fallback ambience).
  • Recorded (ElevenLabs): ambience beds and one-shots in Resources/Ambience (AmbientAudio: day, wind, rain, crickets, birds, dogs, kids), the street (TrafficAudio: a distant bed, drive-bys timed so the loudest moment lands on the car's closest pass, idling cars), 66 voice lines (Voice).
  • Placement: your own sounds play in your head; only the other player's are placed. Of 102 Sfx calls, 16 are placed (Sfx.PlayAt): 12 only when the event came from the other player, 4 always (the thrown stone's tink, the geyser's pop and hiss, the answering machine's ring). The rest are UI (right as it is) and about 20 garden events.
  • Indoors: AmbientAudio.Muffle01 closes a low-pass (22 kHz to 900 Hz) on the ambience and traffic only, in hub scenes only (BaseRoom.Covers). Nothing else knows about walls.
  • Missing: an AudioMixer, music, echo (no reverb anywhere), walls and doors for anything but ambience, captions, a sound list (sounds are code enums and Resources names), a cap on how many copies play.
  • Settings: master, voices, effects (Settings.cs, SettingsPanel).
  • Unity doesn't process audio while the editor is unfocused, so play-mode level checks through the MCP read silence.
SoundTodayPlanned
Your hits, debris, flowers, breakdownsin your head (Sfx.Play); placed only for the other playerfrom where it happened (SN1)
Your mower's enginehalf in your head: EngineAudio spatial blend 0.5placed at the engine (SN1)
The cutmostly in your head: CutAudio blend 0.4from the deck (SN1)
Tall-grass rustlein your head (TallGrass, 2D)at your feet and the wheels (SN1)
The other player's mower and hits (NetAvatar)straight-line fade from 4 m, silent past 45 m, no wallsreal distances, walls (SN1, SN2)
Scene voices (Voice.PlayAt)straight-line fade, silent past 18 m; the intro (Voice.Say) is 2Dfrom the mouth (SN1)
Birds, dogs, kids, trafficnatural (logarithmic) fade: ambience one-shots 6-90 m, traffic 7-80 m; muffled indoorsthe same, plus walls, doors and distance dulling (SN2)
Rain and windtwo loops in your head, a volume knobplaced by surface and by what the wind moves (SN2)
Walls and doorsonly the ambience is muffled, only in the hubeverything (SN2)
Roomsno echo anywhereecho zones (SN2)

The sound list format

Location decided in SN1: probably ArtSource/audio/sounds.json exported to a ScriptableObject.

{
  "id": "stone_clank",
  "kind": "world",
  "group": "Effects/World",
  "loudness": 85,
  "size": "point",
  "direction": "none",
  "takes": ["synth:clank", "clank_2", "clank_3"],
  "pitch": 0.08, "volume": 0.1,
  "priority": "gameplay",
  "cap": 3,
  "caption": "CLANK",
  "ducks": ["Ambience", "Music"]
}

kind: world, ui, music or voice. group: the mixer group. loudness: dB at 1 m. size: point, line (a road) or area (rain). direction: none or a forward cone. takes: clip names, or synth: for synthesized ones. priority "gameplay" ducks the ambience. The caption is shown with its direction ("CLANK, left").

Determinism

Randomness never touches the sim: take choice, pitch and volume variation use their own random, never the seeded sim streams (Salts.cs and the seed fingerprint tests stay unchanged). The noise model (SN3) is plain sim code on the host.

Sandbox pieces (Sandbox)

  • SN1: the F1 sound board and the sound view.

Tests

Levels, occlusion, masking, adaptation and captions are tested as plain code (no audio needed); the offline loudness check reads every clip; each idea ends with a short listening checklist in the sandbox, by ear, on headphones and speakers.

  • SN1: the level from loudness and distance; dropping under the background; caps; the caption direction from positions; every SfxType has a list entry; adaptation settles and recovers at the set speeds; a masked sound returns when the engine stops; cues are never masked; seed fingerprints unchanged; co-op: a guest hears the host's clank from the host's mower.
  • SN2: occlusion sums per crossing; the opening path wins when louder; indoors and outdoors from geometry.
  • SN3: the level at a window through walls; quiet-hours limits; a battery mower stays under; the exposure sum; the same complaint on host and guest.

Open questions

  • Radio stations with an announcer (DJ lines, ads, jingles): a voice-content decision (SN11).
  • Where the sound list lives: JSON in ArtSource exported to a ScriptableObject, or a ScriptableObject only?
  • All starting numbers (loudness, losses, the ears gauge, neighbor limits) to tune in the sandbox.
  • The minimum-spec machine (shared with Grass: the lawn itself): it sets the ray budget and whether Steam Audio's live echo fits.

Rejected

  • Clients speaking gibberish (was SN12: syllables per client, a few voiced signature lines): clients' lines are voiced and subtitled like everyone's (UI7), from the client voice pool (the user, 2026-10-03).
  • Your own sounds in your head, the other player's placed: today's split; one placed path for everyone instead.
  • A fade to silence per kind of sound (today's five curves: silent at 45 m, at 18 m...): sounds vanished too early and too suddenly; a real mower carries 200 m down a street. One real distance rule instead.
  • Per-source range sliders: loudness lives in the sound list; range follows from it.
  • A score while mowing: the engine and the neighborhood are the music; the score is kept for the menu, payday and story beats.
  • Procedural-only engines (mowing's old "procedural first" rule): recorded loops with synthesized state layers instead (SN4).
  • Fully voiced clients: gibberish under the text plus a few signature lines; the story cast stays fully voiced.
  • Comedy sounds by default: real sounds; comedy only on true gags.
  • Indoors as a switch (Muffle01): walls and openings do it.
  • Weather as two loops in your head: rain is heard where it lands, wind in what it moves.
  • Doppler on everything: the recordings carry their own.
Source docs/game/sound.mdEdited 2026-10-03