Skip to content

roadgen: The Map Generator We're Building for Proton Bus Simulator

Proton Bus Mods Research Team 9 min read
An articulated Caio bus on a generated street in Proton Bus Simulator, passing a generated pharmacy and butcher shopfront

We have been building a map generator for Proton Bus Simulator. It is called roadgen, it runs in a browser, and it does one thing: you give it a street layout, and it hands back a textured 3D city you can drive a bus through. No 3DMAP. No modelling a neighbourhood street by street in Blender.

It is not finished, and there is no release date. This post is the honest state of it — what already works, what still breaks on camera, and where the data actually comes from. Every screenshot here is our own, pulled from the three devlogs on our channel.

Draw a street, get a drivable city

The idea is simple. You mark out where the roads go. roadgen turns that into geometry: carriageway, sidewalks, curbs, lane markings and welded intersections, exported as a 3D file you finish in Blender and load into the game.

This matters because of a lopsided problem in the hobby. There are hundreds of community buses and almost no cities to drive them in. A bus is one object; a map is a whole world, and building one has always meant weeks of manual modelling. That gap is exactly why bus sims have the biggest modding scenes and still run short of maps — the tooling never matched the ambition.

The door has been open for years. MEP opened up map modding back in 2020, which is rare enough for a mobile game. What has been missing since is not permission — it is a way to build a city without modelling every kerb by hand.

A generated street sign reading Rua Damiana da Cunha 160 beside generated shopfronts in Proton Bus Simulator
Not a placeholder. The sign carries the real street name, and the shopfronts behind it were generated too — this whole corner came out of a drawing.

Two ways to start a map

You do not have to draw anything if you do not want to. roadgen opens with two buttons: import the real street network, or draw the roads by hand over the map.

Importing pulls the actual road layout of a real place. Drawing by hand is for when you want control — a fictional town, a simplified version of a real one, or a route that only exists in your head. Both paths end at the same generate button.

The roadgen editor with a street being drawn over a real map, and the control panel showing layer, normalize and grade profile settings
The editor mid-drawing. The panel on the right is where the real decisions live — layers, smoothing, the grade profile, and whether to pull real elevation.

How a drawing becomes a road network

Streets are layers, not just lines

Every road you add is a layer, and a layer carries two things that matter to a driver: direction (one-way or two-way) and lane count. A lane is 3.5 metres, so a two-way single-lane local street comes out 7 metres wide. Change the lane count and the road physically widens in the output.

Crossing lines become welded junctions

You do not place intersections. You just let two strokes cross, and roadgen welds a junction there when it generates — even when the two roads sit on different layers. Bring a road's endpoint near another road and it resolves into a corner instead.

There is a catch we learned the hard way: the drawing cannot have gaps. A line that looks connected but stops a pixel short is not connected, and the generation will show it. Closing every junction before hitting generate is the difference between a clean run and a broken one.

Smoothing a shaky hand

Hand-drawn roads wobble. There is a normalize setting for exactly that, which averages out the tremor so a street you traced with a mouse comes out straight instead of lumpy. Small feature, but it is the one that makes hand-drawing usable at all.

Where the city actually comes from

This is the part worth getting right, because two different data sources do two different jobs.

OpenStreetMap: streets, buildings and names

The street layout, the building footprints and the names all come from OpenStreetMap. OSM records a building as the outline of a structure with a roof, and those outlines can carry height, floor count and a name. That is why generated buildings land with believable proportions and in the right places — a tall block appears where a tall block exists, and a shop keeps its corner.

Generated buildings of varying heights along a street in Proton Bus Simulator, matching real-world proportions
One block is huge, the next is small. The dimensions and positions are read from real map data, not invented.

AWS Terrain Tiles: the elevation

The terrain is a separate source. Real elevation is an opt-in checkbox, and it reads from Terrain Tiles, an open dataset described as "a global dataset providing bare-earth terrain heights, tiled for easy usage." Leave it off and you get a flat map. Turn it on and the road climbs and drops where the real city does.

A generated road network following real terrain elevation, viewed in Blender
The same street network with real elevation switched on. The hills are not decoration — the bus has to climb them.

A grade profile built for buses

Here is the setting we are proudest of, and it only exists because the map is meant to be driven. When real elevation is on, roadgen computes a vertical grade profile — a curve tuned for buses, with a spline that smooths out undulation.

Raw elevation data is noisy. Dropped straight onto a road it produces a rippled surface that a 15-tonne vehicle bucks over. The grade profile is what turns a noisy height sample into a road a bus can actually hold speed on. It is the one feature in the whole tool that would make no sense if you were only building scenery to look at.

The roadgen control panel showing the real elevation option, building generation and the generate button
Real elevation is opt-in, and the grade profile only becomes available when it is on. Building generation has its own seed, so a layout is reproducible.

What roadgen generates today

Buildings are procedural and seeded — the lot generator takes a seed number, so the same drawing produces the same city every time. What comes out is a mix: apartment blocks, rendered and bare houses, and commercial frontages with generated names.

Generated commercial frontages with signs including a pharmacy, an optician and a bakery
Generated commerce: an optician, a pharmacy, a bakery. Rooftop water tanks and air-conditioning units come along with them.
Generated utility poles carrying overhead wiring along a generated street
Poles and overhead wiring are generated along the road, not placed by hand.
Generates todayNot yet
Carriageway, sidewalks, curbs, lane markingsVegetation, trees and woodland
Welded intersections and cornersStreams and water features
Terrain with real elevationTunnels
Buildings, houses and shopfronts with namesA mobile version
Poles with wiring, traffic lightsFully hands-off intersections
Optional street signs with real street namesA public release

The output is a plain OBJ, which is worth noting: it is not locked to Proton Bus Simulator. You import it into Blender, adjust, and export to the game's native format — but nothing stops that same file going somewhere else entirely.

What still breaks

We would rather show this than write around it. These are all from the latest devlog, unfixed.

A generated utility pole standing in the middle of a traffic lane in Proton Bus Simulator
A pole planted in the traffic lane. On an aerial screenshot it is invisible; from the driver's seat it is an obstacle.
A generated house partly sunk into the terrain beside a road
Houses sinking into the ground where the building footprint and the terrain height disagree.
Generated buildings filling only the block face along the drawn road, leaving the interior empty
The building generator currently closes the block face along the road and leaves the interior bare.
A generated intersection with geometry that still requires manual correction
Some intersections still need a human in Blender. On a flat map they come out clean; add hills and the corners get harder.

There is a size limit to respect as well. When we exported a map with full terrain, we had to split it into pieces — a single mesh that large runs into a triangle ceiling on the way into the game. Flat maps stay well clear of it.

How a generated map drives

A generated map does not feel like a hand-built one, and the difference is the terrain. A hand-made map is usually flat because flat is cheap to build. Real elevation means the bus works: it loses speed on the climb and gathers it on the way down, in the same places the real city would make it.

The flip side shows up too. Where the height data is noisy, the road surface comes out uneven, and you feel every ripple through a heavy vehicle. That is not a rendering artefact — it is real geometry, and it is exactly what the grade profile exists to tame.

A bus on a generated road that rises and falls with the real terrain elevation
The road follows the ground. Driving it is the only way to tell whether the elevation came out right.

Want to feel the contrast? Drive the real cities the community already built — the hand-crafted Projeto SP map of São Paulo's Zona Sul is the benchmark we keep measuring against, and it pairs well with any of our Brazilian bus mods.

Generating a district from scratch

The clearest test we have run so far: pick a neighbourhood we had never generated before, draw its streets, and let the tool build it. It threw errors on the first attempt — the first time generating somewhere new always surfaces something — but after fixing those, the district came out clean in Blender, intersections included.

A newly generated city district with roads and buildings, opened in Blender
A district that did not exist twenty minutes earlier. Generation takes a few minutes, not a few weeks.

When can you get it?

There is no release date. That is the honest answer, and we would rather give it than invent a month we then miss.

What we can say: the first version will be for PC. A mobile version is not planned yet, because we have not worked out how it would run there. Before any release we want the worst of the bugs above cleaned up — poles out of the road, houses out of the ground.

Every update on roadgen goes to our YouTube channel first — that is where the devlogs are published and where the release will be announced. Subscribe there if you want to know the moment it ships. You can also join our Discord, where the community talks through what it wants the tool to do next. Several features on our list came straight from devlog comments.

FAQ

When will the map generator be released?
There is no release date yet. We are still fixing generation bugs — poles landing in the road, houses sinking into the terrain, and intersections that need manual correction. The release will be announced on our YouTube channel first.
Can it generate vegetation, streams, woodland or tunnels?
Not automatically, not today. roadgen currently generates roads, terrain, buildings, poles, traffic lights and street signs. Trees, water features and tunnels have to be added by hand in Blender afterwards. It is one of the most requested additions.
Will it work on Android, or is it PC only?
The first version will be PC only. Mobile is undecided — we have not worked out how the generation step would run on a phone. Proton Bus Simulator itself keeps working normally on Android regardless.
Do I still need Blender?
Yes. roadgen exports a standard OBJ file; you import that into Blender, make any corrections, and export to the game's native format. Some intersections still need manual cleanup there, especially on maps with hills.
Does it only work for Proton Bus Simulator?
The generator outputs a plain OBJ, so the geometry is not tied to any one game. We build and test it for Proton Bus Simulator, but the exported file can be taken elsewhere.

Sources

  1. Devlog 1 — the editor that draws the map (12 July 2026) — the drawing workflow, layers, lane counts, and the OBJ-to-Blender-to-game pipeline.
  2. Devlog 2 — terrain and buildings (23 July 2026) — terrain elevation, building and shopfront generation, poles and traffic lights, and splitting the export.
  3. Devlog 3 — driving the generated map (24 July 2026) — first gameplay inside a generated map, street signs with real names, the unfixed bugs, and generating a new district from scratch.
  4. OpenStreetMap Wiki — Key:building — building outlines and the height, level and name attributes roadgen reads.
  5. Terrain Tiles on the AWS Registry of Open Data — the bare-earth global elevation dataset behind the real-elevation option.

Related on Proton Bus Mods

More by Proton Bus Mods Research Team

A Pegaso 6035 bus, number 2221 of Transports de Barcelona, inside the Borbón depot in 1988. Bus history

Pegaso: The State Factory That Built Spain's Buses

A state-owned Spanish factory built 350,000 vehicles, the city bus that defined Franco-era Spain, and — for one strange year — the fastest production car in the world. This is the Pegaso story.

Proton Bus Mods Research Team 12 min read