Skip to content

Traffic sounds follow the real vehicles, an interstate traffic bed, and three small 1.9.4 fixes - #330

Merged
Orinks merged 5 commits into
devfrom
claude/project-thread-51a2i7
Oct 8, 2026
Merged

Orinks merged 5 commits into
devfrom
claude/project-thread-51a2i7

Conversation

@Orinks

@Orinks Orinks commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Requested by Orinks · project thread

What changed and why

Before: traffic was a one-shot pass recording fired on a 6 second cooldown, so its peak rarely matched the car it stood for. Passes were dropped, and on an exit ramp the held odometer made mainline cars "pass" dead centre. Cross-traffic cues at the ramp end came from placeholder recordings with the wrong lead. Interstates had no sound of distant traffic, and the road noise sat about 15 dB under the engine.

After: each of the three nearest real vehicles gets its own steady loop. Its volume, pan and Doppler rate are set every frame from that vehicle's actual position and speed, and the loop follows the vehicle by id. On a ramp the freeway slides off to the left as you diverge. Cross traffic at the ramp terminal sweeps across in front. A separate traffic bed follows the leg's traffic density, on interstates and divided highways only. Tire noise is 6 dB louder.

How: driving_traffic_sounds.rs replaces driving_traffic_pass.rs. CrossVehicle gained a stable id. TrafficManager::freeway_presence_at drives the bed. There are new pack entries (eight vehicle loops and traffic/highway_bed), rendered with genny from sound-test/traffic_sounds.json, with levels in docs/audio-levels.md.

Also in this PR:

  • The "Engine voice" and "Engine brake voice" settings are renamed "Engine sound" and "Engine brake sound" (Orinks asked for this). Setting keys are unchanged, so saves carry over.
  • Bobtail to a nearby city is refused while the CDL is suspended or disqualified, from the terminal and from an already open bobtail menu. Ported from 2.0's fix(enforcement): point a pulled CDL at waiting, and refuse a bobtail #259; this closes the found-along-the-way roadmap item.
  • The radio status screen names the Playlists folder's full location while no personal playlist is on the dial and streamer-safe mode is off (issue not a bug, just a suggestion.[Bug]: #289, a player who could not find how to add their own music).

What players or maintainers will notice

  • Passing traffic sounds where the vehicle is: it comes up beside you, then fades ahead or behind.
  • On exit ramps, the freeway fades off to the left, and cross traffic at the ramp end sweeps across in front of you.
  • Interstates have a bed of distant traffic, busier where the road is busier.
  • Tire noise is louder.
  • The settings read "Engine sound" and "Engine brake sound".
  • An owner-operator on a pulled CDL hears why they cannot bobtail, and when that ends.
  • With no playlist of their own, the radio status screen tells the player where to put playlist files.

Tests and checks run

  • cargo test -p ff-core -p freight-fate (ci_quick): 3058 passed. One failure, online_presence::test_failed_fallback_replacement_keeps_the_existing_identity, is environmental: the Linux container runs as root, so a read-only directory does not block the write. It skips on Windows CI.
  • New states_driving_traffic_sounds tests cover pan side, fade, Doppler, ramp divergence, cross traffic and the bed only on freeways. There is a new freeway_presence_at test in ff-core, two bobtail refusal tests in states_city, and a playlist-pointer test in synth_music (89 radio and status-screen tests pass).
  • cargo fmt --all --check and cargo clippy --all-targets --locked -- -D warnings are clean.
  • BASS could not be fetched in this container, so the audio-device tests skipped locally. Windows CI has BASS.
  • Adversarial battery: 47 scenarios, 47 clean.

Accessibility impact

Spatial audio only: no speech was added or removed for traffic. The loops do not duck speech any differently than the old pass cues did. The bobtail refusal uses the menu channel with the error tick, the same as the board's suspension refusal. The playlist pointer is one line on an information screen the player opens, and it goes quiet once a playlist loads. The renamed setting labels were checked in states_main_menu_settings. The traffic and bed levels still need Orinks's listening pass at the wheel.

Changelog

  • I added a player-facing bullet under ## Unreleased in CHANGELOG.md, written in plain player language and matching the style of the existing entries.

🤖 Generated with Claude Code

https://claude.ai/code/session_014DuoQRmLEsNcqx7amDGVXS

claude added 4 commits October 8, 2026 04:23
Owner, 2026-10-08: "the sounds aren't synced with the NPC traffic".
The pass whoosh fired when a vehicle crossed the bumper, but the
recordings peak anywhere from 0.1 s to 1.7 s in, so at ten times pacing
the loudest moment came after the car was gone; the six-second cooldown
dropped most passes; and on an exit ramp, where the odometer holds,
every mainline car "passed" the truck dead centre. Ramp-end crossing
cues were led by half the length of the numpy stand-ins they replaced,
not the ElevenLabs takes now shipped.

Now the three nearest vehicles, mainline or crossroad, each run a
steady class loop (rendered with genny, sound-test/traffic_voices.json)
whose level, pan and pitch are set every frame from where the vehicle
is. On a ramp the mainline sits left and fades as the ramp diverges.
Interstates and divided multi-lane highways carry a distant-traffic bed
at the road's real presence (TrafficManager::freeway_presence_at), and
the road bed is 6 dB louder.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014DuoQRmLEsNcqx7amDGVXS
Owner, 2026-10-08: the Engine voice and Engine brake voice settings and
the new traffic loops were named as if they spoke. Player-facing labels,
the manual, the ontology and the sound catalog say sound now; the saved
setting keys stay as they are so settings carry over.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014DuoQRmLEsNcqx7amDGVXS
Ported from 2.0 (PR #259): the terminal's Bobtail to a nearby city and an
already-open bobtail menu now refuse with the date the suspension ends,
the same pulled CDL that already stops the dispatch board.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014DuoQRmLEsNcqx7amDGVXS
@Orinks Orinks self-assigned this Oct 8, 2026
Issue #289: a player saw Shuffle personal playlists in Settings and could
not find how to add music at all. The radio status screen now reads the
folder's full location while no personal playlist is loaded and
streamer-safe mode is off; it goes quiet once one is on the dial.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014DuoQRmLEsNcqx7amDGVXS
@Orinks Orinks changed the title Traffic sounds follow the real vehicles, an interstate traffic bed, and bobtail on a pulled CDL Traffic sounds follow the real vehicles, an interstate traffic bed, and three small 1.9.4 fixes Oct 8, 2026
@Orinks
Orinks merged commit 79db7d2 into dev Oct 8, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants