Nice screenshot. Is that multiple runs of the terrain generator tiled, or one run?
Thanks. The screenshot is one run of another program making the
generator run repeatedly, then applying a texture heightmap (like,
anything in a certain height range is blue), then blitting the little
maps into a big surface and saving it.
JoN wrote:
By the way -
Given the same input parameters will it generate the same terrain every time, or
is it random ?
Yes. 8)
It uses the function random.randint(), so the numbers involved are as
random as you can get with a computer... but by calling random.seed(),
you can feed the number generator some data and get the same terrain
every time.
In the screenshot: http://kschnee.xepher.net/pics/061025skygold.jpg
You can see what happened when I called seed() using the X,Y coordinates
of a game-world "zone," on the theory that every time you visited zone
(4,2) it'd be the same even though it's "random." But I found there was
this weird repetition. Looking into it, I found that seed() was calling
hash(), and that (say) the values (1,-1) and (1,-2) had the same hash
value, causing copies of the same islands to get generated. Not good.
The solution hashed out was to mess with the data some more, to be
relatively sure of getting unique hash values for each coordinate pair.
The result was this: http://kschnee.xepher.net/pics/061025skygold2.jpg
Which has no obvious repetition. Still, there's an obvious grid of
similarly-sized islands. I tried making bigger zones and found that my
algorithm wasn't very well suited to the 300x300 size, and that it still
gave me an obvious grid. So, what I'm thinking of doing now is to make
some zones more flooded than others, so that some have little or no
land, reducing the sameness of the world and creating more water areas
instead of the street-like NSEW waterways seen above. Another option
would be to somehow alternate semi-randomly between big zones (2x2, 3x3)
and little ones, or to semi-randomly switch between algorithms.
I made this partly in reaction to traditional random dungeon games,
which I dislike (except for "Disgaea!"). By using a seed function it's
possible to avoid the problem that everybody's game is different. I made
fun of the randomness in an article on RPGamer.com: http://www.rpgamer.com/editor/2001/q3/070601ks.html