Here is actual OpenSimCity project:
https://github.com/nicholas-ochoa/OpenSC2KIt doesn't have any map generator (loads pre-made maps) and doesn't appear to be a serious reverse engineering project, as it is in JS and rewrites everything from scratch. So it can't be used as a source on anything and I'm too lazy to reverse the generator myself
guess for now it will remain a mystery, how SimCity did it. Still SimCity generators don't appear to be using a simple perlin noise or voronoi, because rivers actually look like rivers, plus a few ponds, because real cities are built along rivers and have bridges, so a river is a must. And it also has island maps (obviously a special case)
https://www.youtube.com/watch?v=eUaCyUkC_jMWhat about a gradient-descent model combined with a small amount of umbrella sampling? If the map has a large elevation feature like a mountain, have a weighted decision to source water there. Otherwise, build a very rough estimate of which edge of the map and where on that edge is the most elevated, then use a coarsely-sampled version of your map to determine where the flow goes, allowing for some "erosion" to occur so it doesn't just get stuck at a local minimum. Maybe let it run this a small number of times and pick an averaged or most likely route for the water from that.
That is what I already do for world map. In a non-toy 3d apps it is also used for erosion (they pick random points and then descend from them, subtracting from heightmap), but it takes a few seconds even on modern GPUs. But in my case, I build from the data passed from world map. I.e. if player explores a site with a river at corner, there should be a river there. If it is near ocean, there should be an ocean. I also pass world map seed to the local site generator. Otherwise players will complain that they entered camping site exploration on the edge of forest, but there is no forest to be seen, so world map serves no purpose.
I'm planning to introduce some poaching into game, so there will be some incentive to explore even non-quest sites, therefore I need the generation be tangible and well integrate with world map. There is also a system, which favors using a few leader units, but still allows having grander battles. Similar to Lords of Magic followers vs mercenaries system.
Anyway, one problem, is that fractal generation requires power of 2 map dimension (i.e. 32,64,128,256), because it subdivides the fractal by 2 each step, so in the end it produces say 64x64 map, while I need 50x50, because such chunks are more user friendly. Say I have 1000x500 pixels world map, which are subdivided into 10x10 chunks, which then provide enough features for the site 50x50 generator. I could either downscale the map, getting some nasty results or cut out the require 50x50 chunk out of 64x64 map, risking to miss some features from the world map, which can be avoided by passing 13x13 world map samples to generator, instead of 10x10.