I'm trying to create a very modifiable game starting with terrain in the form of a tilemap.
Any type of tile can be removed, modified, or created by the user. The problem is that I can't find a way to properly implement terrain generation for this.
The amount of tile types that can be used is known at run time of course, but I'd like to avoid placing a hard limit or hard coding most numbers. There is no issue with having too many types and generating a nonsensical map.
I've tried Perlin and simplex noise, but, ultimately, there was no real consistency with even 4 tiles.
I've also tried using weights, but couldn't find any relevant resources to smooth it out.
I know that generating multiple noise maps (temperature, for example) is another option, but I wanted to see if there was a better one.
I moved back to Perlin noise and get the following using every possible tile (which is 8 at the moment)
With some tweaking, it looks somewhat okay but still fails to not look like a meteor strike.
With just 3, I get this using ocean, grass, and mountains (blue, green, and black respectively)
And again, tweaking it doesn't help much, most likely due to my method of selecting tiles.
I've tried turning the noise map into a height map, as well as a weight map, among others, but the results are mostly inaccurate or very ugly, even with tuning.
What I'd prefer is the following, assuming hills, forests, grass, water, and surface water are used.