Date: 1996-01-09
From: Paul
Subject: URGENT: Seeking details on "phased" world generation algorithm

Back in the old days, world generation was easy: plop some land sparks in the SparkList; pick one at random, assign its 8 nearest neighbors as land or sea and add them to the SparkList; drop the random spark from the list. Iterate on this until the SparkList is empty, and voila! - you just created a world.

But this isn't how the code works any more, and here is my problem: I've forgotten many of the details of our new three-phase world generation algorithm. Following are some details, and some related questions:

Instead of individual land sparks, we now start with clumps of Mountain sparks, I think. Mountain sparks generate either mountains or land, but not water - right? This is how my printout of the (hopefully latest) code looks, but it seems appropriate to re-visit the topic and consider if the behavior is sensible. Also, my code listing is truncated at 80 columns or so, and is therefore missing some essential details.

Finally, all startup conditions (like the default probability that a mountain spark will generate a mountain for its neighbor) are lost to me, being stored in a resource rather than code. Any details you have on these sorts of items would be quite useful to me.

Other than the addition of mountains, I think Phase 1 of the new algorithm works about the same as the old algorithm (by "new," I mean, of course, the algorithm from 1-1/2 years ago).

Phase II (when's a good time to start it?) just dumps a bunch of sea sparks into the spark list and then continues with world generation. I'm not sure, but I guess this is supposed to be a performance enhancement of some sort.

Phase III (when's a good time to start it?) throws out the SparkList and assigns everything left as sea. This probably knocks a bunch of cycles off the generation time.

This is actually all pretty interesting; I'd forgotten much of it. Too bad there's *no* documentation in the code. I'm hoping that you have carefully filed away some document proposing the implementation of this, so I can get a memory refresher. And of course we should consider spiffing up the elevation algorithm considerably, right?