HOLY @#$%!

That's seriously impressive work.
Is there any easy way to check the location type? With the ContentReader I can check if there is a location, but I want to know if it's a dungeon, city or any other type. This will make it easier to paint roads only between cities when using the editor.
It sounds like you already know how to use ContentReader.HasLocation(). This is a fast dictionary check for any given coordinates and returns a compact struct in the form of ContentReader.MapSummary. We can then use MapSummary.RegionIndex and MapSummary.MapIndex to find more information about that location.
With those indices, you can use ContentReader.MapFileReader.GetLocation(regionIndex, mapIndex) to return a
DFLocation struct. There are two overloads of GetLocation(), one for indices and one for strings if you need it.
Now, DFLocation probably contains a lot more information than you need, including the map layouts, but it's only a small amount of data and should be quite quick to read even hundreds of locations at a time. Let me know if you need something a bit leaner and I'll code it up in the API. I can probably stick more info in MapSummary without any problems.
Once you have it, here are the members you'll be most interested in DFLocation.
DFLocation.Loaded (this will be true if location loaded OK, otherwise something went wrong, like bad indices or strings not found).
DFLocation.HasDungeon (true if this location has a dungeon - also true for large cities like Daggerfall, Wayrest, Sentinel, but usually only true for dungeons).
DFLocation.MapTableData (another struct with more details about map).
DFLocation.MapTableData.Type (a DFRegion.LocationType enum which tells you the exact location type from game data).
DFLocation.MapTableData.DungeonType (a DFRegion.DungeonType enum which tells you the exact dungeon type).
Minor tip: The MapPixelX and MapPixelY coordinates correspond to a unique location ID. See MapsFile.GetMapPixelID() and it's close relatives to convert between IDs, coordinates, latitude, longitude, etc. This might come in handy later.
How does the DaggerFall Terrain billbords work? I want to find a way so that trees and other details doesn't appear on roads.
The wilderness nature flats are just a grid of billboards placed at the vertex point of each texture tile. Check TerrainHelper.LayoutNatureBillboards() for examples of where I reject nature billboards inside location rects (which define their own nature layouts) and weight based on tile type. For example, water has a zero percent chance. If we're able to push the road tiles into the tilemap array
before it hits LayoutNatureBillboards() it should be pretty easy to reject road tiles just like water.
I would also like to find a way to smooth/flatten roads on the terrain. Any suggestion on how I could achieve this?
This should be possible, but will need to think about best place to inject code. Take a look at TerrainHelper.FlattenLocationTerrain() for how I do this for locations. We basically just need to deform/smooth the height at road tiles before it gets promoted to terrain data. I'm already doing something similar for water tiles.
Sorry for the short answers on the last two. Hopefully that's enough to get you started. Just fire any more questions you have my way and I'd be happy to try and help.
