Assuming in your array you use:
0 for air
1 for dirt
2 for stone
You could do the following as sub-events to a start of layout to populate the array:
for "y" from 0 to 32
for "x" from 0 to array.width-1
--- set array at (loopindex("x"), loopindex("y")) to 0
for "y" from 33 to 64
for "x" from 0 to array.width-1
--- set array at (loopindex("x"), loopindex("y")) to 1
for "y" from 65 to 80
for "x" from 0 to array.width-1
--- set array at (loopindex("x"), loopindex("y")) to choose(1,2)
I don't know how you're placing the tiles so you can see them but the usual way would be to loop over the array and create the correct tile based on the value in the array. Say your tile size is 32x32 you'd create the tile with something like "create dirt at (array.curx*32, array.cury*32)".
It will be slow if you use a sprite per tile so a better way would be to use the tilemap object instead and set the tiles from the array.
For hills and whatnot this post could be helpful, it also shows the use of the third party noise plugin:
1.
It all depends on how you're doing the trees, like will they be blocky or sprites. Either way you could loop over the surface tiles and occasionally grow a tree. One way would be to spawn random seeds in the air, let them fall and have them grow where they hit.
2.
For that perlin noise could be useful. Or you could use some oddly shaped and randomly placed sprites during the generate stage, and set all the tiles it overlaps to ore or something.
3.
The tilemap object will be your biggest friend for this as it's very efficient at drawing only what's on the screen regardless of how big the world is.
4.
I don't know of any off hand but I know there are lots of tutorials and examples to study. Do a search, I'm pretty sure there are examples that do as you describe.
5.
There are many ways to do it, but your idea and the approach you used in gm will most likely work here.
As for 5 minute loading, I haven't ever encountered such a delay. If use a massive array it could take some time to loop over to generate, but otherwise I have no idea.