The truck that cut you off has a name

A mod for Euro Truck Simulator 2 that turns the traffic into people.

Roadfolks reads the actual traffic around you and gives it drivers. The lorry that overtook you on the left is a Croatian driver called Marko with patchy English and a short temper. He might call you on the CB about it. He might not.

In development. The traffic reader has not run against the real game yet. See Status before you expect it to work.

Who talks to you, and how

Nine kinds of speaker, on five channels. Every one of them is a person the simulation decided exists, not a line picked from a list.

Other truck drivers

CB

Generated from the lorries actually around you. Nationality follows where you are driving: in Slovenia mostly Slovenians, then Austrians and Croatians, then the Polish and Lithuanian plates that run half the continent.

Written characters

CB

66 people written by hand, each with a route, a lorry, a reason to be on that road and a story that moves one beat per conversation. About one truck in six can be one, if their corridor covers the country you are in.

Car drivers

Horn

One burst out of a window and gone. They are never stored: a motorist who shouts once is not worth a database row.

Radio presenters

Radio

30 invented stations that change when you cross a border, each in the local language. Traffic bulletins are built only from incidents the simulation actually saw.

Traffic police

CB

Three speeding events inside fifteen minutes earns a stop, and the officer tells you which one. Speaks the language of the country you are in.

Border and customs staff

CB

Stop within 6 km of a crossing and somebody asks for your documents.

Roadside mechanics

CB

Called out when the truck is damaged enough to need them.

Hitchhikers

Cabin

They have a real destination on the map and they get out when you reach it. You can refuse the lift.

Your dispatcher

Phone

Knows the cargo, the deadline and the damage report before you say a word. When a written dispatcher fits your company, you get that person permanently.

The channels

ChannelWhat it isUsed by
CBTruck-to-truck radio. Short, clipped, and you cannot see who is speaking.Other truckers, written characters
HornA car driver cannot call you, so they shout out of the window alongside.Motorists
PhoneA call into the cab. You can answer it.Your dispatcher
CabinSomebody in the passenger seat.Hitchhikers
RadioA broadcast. You listen; you cannot reply.Radio presenters

How you reply

You press the push-to-talk key and speak. Wingman AI turns that into text and hands it to Roadfolks, which gives it to whoever is currently in range on that channel. You can also start a conversation rather than wait for one.

A car driver shouting through a window cannot hear an answer, and a radio broadcast is one-way. Everything else can be answered.

On the radio

What actually happens when somebody cuts in.

Marko hr-HR, CB

Ej, pazi malo! Vidiš da sam tu?

You push to talk

Sorry mate, didn't see you.

Marko

Is okay. You go Koper too? Big queue today.

Marko answered in Croatian first because his English is poor and the simulation knows it. When you answered in English he switched, and his reply is short and missing an article, because that is what a 0.42 English speaker sounds like. A Croatian voice reads it, so the accent is real rather than spelled out.

Four hundred kilometres later a Croatian truck passes you near Graz. There is a chance it is Marko again. If it is, he remembers the overtake, and he is one step further along his story than last time.

Most of the time, nothing happens

A mod where every incident triggers AI chatter becomes unbearable within ten minutes. Roadfolks enforces silence: a global cooldown, a per-driver cooldown, a personality roll, and a hard ceiling of six unprompted lines per ten minutes. The default preset averages under 15 lines an hour on a busy motorway, and a test fails the build if that number creeps up.

When people do talk

Mostly not at 90 km/h. The best conversation in the game happens at a red light: you are stopped, you have nothing to do, and the light ends the conversation for you. Roadfolks reads the real traffic lights, including the seconds left on them, so nobody starts something the light will cut off, and each junction speaks once.

The same goes for a lay-by. Roadfolks reads the parked vehicles around you, so the lorry beside you at midnight is really there. Twenty seconds after you stop, somebody in it might say something. Get talked at the moment you pull up and you know it was scripted, so it waits.

Talk to a driver

Eight written characters, live, in your browser.

Pick a driver and say something. This is the dialogue part only: no game, no voice, no memory between visits. The replies come from a language model on Cloudflare Workers AI, built from the same character sheets the mod uses.

Runs containers between Koper and Munich. Twenty-two years on the road. Loathes the Karawanken queue and says so every time.

Checking whether the demo is on...

English, Slovenian and Croatian are the three languages the project stands behind today; try Slovenian or Croatian with Bojan or Marko. Limits: six messages a minute for you, and a fixed number a day for everybody together, so the free allowance lasts.

How it works

The simulation decides the facts. The model only writes the words.

Ask a model to "invent an interesting trucker" and you get a different disposable person every time. Hand it a driver who exists, an overtake that happened, and a grudge from last Tuesday, and you get somebody the player recognises.

ETS2LA plugin

Up to 39 nearby vehicles, the parked lorries and the traffic lights, read from shared memory.

SCS telemetry

Your own position, the job, the cargo and the clock.

Tracker

Keeps one vehicle as one track, through the dropouts ETS2 produces.

Event detector

28 event types from geometry alone. No randomness, no model calls.

World engine

Who exists, what they remember, and whether anybody speaks at all.

Wingman AI

Microphone, speech recognition, voices and playback.

What the detector sees

  • CUT_IN They moved into your lane 12 m ahead and you lifted off.
  • TAILGATING Somebody has sat 14 m off your bumper for 40 seconds.
  • NEAR_MISS Bodywork clearance dropped under a metre at 90 km/h.
  • CONVOY_FOLLOW You have run together for six minutes.
  • TRAFFIC_JAM Five vehicles around you, nobody above 10 km/h.
  • BORDER_CROSSED SI to AT.

Who else is out there

  • The radio. 30 invented stations, each in the right language. Traffic bulletins are built only from incidents the simulation saw.
  • Police. Three speeding events in fifteen minutes earns a stop, and the officer says so.
  • Customs. Stop within 6 km of a border crossing and somebody wants your documents.
  • Hitchhikers. A real destination, and they get out when you reach it.
  • Your dispatcher. Knows the cargo, the deadline and the damage report before you say a word.

Who you meet

Most drivers are generated from where you are. In rural Slovenia you mostly meet Slovenians, then Austrians and Croatians, then the Polish and Lithuanian plates that run half the continent.

Roughly one truck in six is written by hand: a route, a specific lorry, a reason to be on this road, and a story that moves one step each time you talk. The steps are stored in a database, not in the model's context, so a restart does not lose them and a chatty player cannot rush somebody through a whole story in one afternoon.

109
places on the map
66
written characters
273
story beats
239
conversation topics
105
easter eggs
361
tests, all offline

What it costs

About half a cent per hour of play, usually nothing.

Each line is a small request: under 2,500 tokens in and usually under 80 out. Speech recognition runs on your own PC through Wingman. The voices use Edge TTS, which is free.

Five providers are tried in order. A provider that hits its limit sits out for as long as it asks, or for a cooldown that doubles each time. A key that is refused sits out for six hours. The game keeps talking through whichever provider still answers.

Cloudflare Workers AI   primary
Groq                    low latency
Gemini Flash-Lite       free tier
OpenRouter /free        zero cost
OpenAI GPT-5 nano       paid fallback

If every provider fails, the driver says something short and fixed rather than nothing. Silence caused by a fault looks the same as silence by design, and nobody can debug that from inside the game.

Install

About fifteen minutes on a Windows game PC.

  1. Get the pieces

    Euro Truck Simulator 2, ETS2LA with its game plugin, the SCS telemetry plugin, Python 3.11 or later, and Wingman AI for voice. Put both plugin DLLs in bin\win_x64\plugins in the game folder.

  2. Install Roadfolks

    git clone https://github.com/DavidKolsek/roadfolks-ets2
    cd roadfolks-ets2
    py -m venv .venv
    .venv\Scripts\activate
    pip install -e .
  3. Add one API key

    setx CLOUDFLARE_ACCOUNT_ID "your-account-id"
    setx CLOUDFLARE_API_TOKEN "your-token"

    setx keeps the key after a restart. Open a new terminal after it. Other providers are in docs/PROVIDERS.md.

  4. Ask it what is missing

    roadfolks doctor

    One line per part, and one instruction for each part that is not ready. Start the game first, or the three game items fail.

  5. Start it

    roadfolks serve

    Then copy wingman-skill\roadfolks into the Wingman skills folder and turn the skill on.

No game handy? roadfolks demo runs a whole encounter with real dialogue and nothing else installed. The step-by-step first run on a game PC is in docs/GAME_PC.md.

Status

What is done, and what has not met the real game yet.

PartStateNote
Traffic tracking and event detection Done Tested offline against synthetic scenarios and recordings.
Characters, nationality, personality, memory Done
Silence budget and channel rules Done
Language policy and profanity levels Done
Content library Done 66 characters, 273 beats, 239 topics, 105 easter eggs, 109 places.
Radio, police, customs, hitchhikers, dispatcher Done
Provider fallback and quota handling Done No model ID has been called with a real key.
Shared-memory layouts Done Transcribed from ETS2LA's own C# readers, not guessed.
Shared memory against a running game Not verified Never run. First attempt is planned for 2026-09-20.
Event thresholds on real traffic Not verified Tuned on synthetic data only.
Heading calibration Not verified Decides whether “ahead” means ahead. Needs one drive.
Speech in and out through Wingman Not verified Never run against a live Wingman.
Live demo on Cloudflare Not verified Built and dry-run validated. Not deployed.

The shared memory layout is not a guess. It comes from ETS2LA's own reader: three bare arrays of fixed records, with no header and no player position in any of them. It has still never touched a running game, so roadfolks diagnose checks it against the real data using physics rather than field names.

The full to-do list is in the repository.