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.
On the radio
What actually happens when somebody cuts in.
Ej, pazi malo! Vidiš da sam tu?
Sorry mate, didn't see you.
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...
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
24 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_INThey moved into your lane 12 m ahead and you lifted off.TAILGATINGSomebody has sat 14 m off your bumper for 40 seconds.NEAR_MISSBodywork clearance dropped under a metre at 90 km/h.CONVOY_FOLLOWYou have run together for six minutes.TRAFFIC_JAMFive vehicles around you, nobody above 10 km/h.BORDER_CROSSEDSI 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.
-
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\pluginsin the game folder. -
Install Roadfolks
git clone https://github.com/DavidKolsek/roadfolks-ets2 cd roadfolks-ets2 py -m venv .venv .venv\Scripts\activate pip install -e . -
Add one API key
setx CLOUDFLARE_ACCOUNT_ID "your-account-id" setx CLOUDFLARE_API_TOKEN "your-token"setxkeeps the key after a restart. Open a new terminal after it. Other providers are in docs/PROVIDERS.md. -
Ask it what is missing
roadfolks doctorOne line per part, and one instruction for each part that is not ready. Start the game first, or the three game items fail.
-
Start it
roadfolks serveThen copy
wingman-skill\roadfolksinto the Wingmanskillsfolder 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 works, and what has not met the real game yet.
| Part | State |
|---|---|
| Traffic tracking and event detection | Done, tested offline |
| Characters, nationality, personality, memory | Done |
| Silence budget and channel rules | Done |
| Language policy and accents | Done |
| Content: 66 characters, 273 beats, 239 topics | Done |
| Talk at red lights and in lay-bys | Done |
| Radio, police, customs, hitchhikers, dispatcher | Done |
| Provider fallback and quota handling | Done |
| Shared memory layout | Taken from ETS2LA source |
| Shared memory against a running game | Not yet run |
| Event thresholds on real traffic | Tuned on synthetic only |
| Heading calibration | Needs one drive |
| Speech in and out through Wingman | Not yet run |
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.