Here's a 48x48 map with a "Pangea" world type. You can also see the world seed in the messages. There will be a bunch of safe seeds to fall back on in case world generation takes too long. We can expand that list of safe seeds.
Note that the image can be tiled infinitely. This is so in future, if we want the player movement to "wrap" in the world map, the land forms are contiguous at the edges of the map. This was not trivial. Firstly you want Simplex noise, as Perlin noise is somehow flawed (generates artifacts when you try to make it wrap), and second, you need to generate it as a four-vector which maps to a toroid, giving a "seamless" noise map that wraps around the body you are trying to project it on.
This is the bona fide answer:
https://gamedev.stackexchange.com/questions/23625/how-do-you...
With original solution posted here:
https://www.gamedev.net/blog/33/entry-2138456-seamless-noise...
For the life of me, I couldn't work out what x1, x2, y1, y2 were, but I found another clue from a guy who had implemented 4D Simplex noise in the GLSL library:
https://shaderfrog.com/app/view/254?view=shader
The shader is cool, but wtf. The real meat can be found by studying the shader fragment code:
https://shaderfrog.com/app/view/254?view=fragment
In the end I decided to use this C++ library:
https://github.com/Auburns/FastNoise
To get the 4D simplex noise, I had to merge the code from this PR:
https://github.com/Auburns/FastNoise/pull/30
Looking back, it was definitely nuts.
Down the track we may need a recursive floodfill algorithm to detect continents that wrap, but I'll leave that as an exercise for a future dev (please god not me!). This doesn't preclude being able to wrap the player movement, it's just for completeness.
Next I will be busy making it fool proof, so that even this fool cannot crash the game...!