Elite (1984)
Elite, created by Ian Bell and David Braben and released on the Acorn BBC Micro, defined a generation of British games and started a history of procedural generation.
Elite is a game that arguably started a genre and is one of a handful of games that often come up as examples of procedural generation. Elite, for those of you who haven’t played it, is a trading game wrapped in a space sim. You fly your ship from star to star, buying and selling various commodities. Those star systems were procedurally generated from a fixed seed, which generated the description of the star system, including its economy, government, and population. There were 8 galaxies of stars in the original Elite, each with 256 generated stars.
There were originally going to be 282 trillion galaxies in the game, but Acornsoft, the publisher, convinced the developers to trim it down to a manageable eight, each with 256 stars. Running your generator too many times often results in less interesting results. This balance is important: big enough to explore for a long time, but small enough that the generator can keep everything relatively unique, and Elite found a good balance of size and density.
The original set of stars–Lave, Zaonce, Diso, Leesti, Reorte, and of course the lawless anarchy of Riedquat–became iconic the starting area, making it a rare instance of the starting level of a legendary game being curated rather than designed: their existence arises from the algorithm, rather than being hand-crafted.
Part of the original system creation algorithm, translated to C by Ian Bell:
thissys.x=(((*s).w1)>>8);
thissys.y=(((*s).w0)>>8);
if (thissys.govtype <=1)
{ thissys.economy = ((thissys.economy)|2);
}
thissys.techlev +=((thissys.govtype)>>1);
if (((thissys.govtype)&1)==1) thissys.techlev+=1;
/* C simulation of 6502’s LSR then ADC */
thissys.govtype =((((*s).w1)>>3)&7); /* bits 3,4 &5 of w1 */
thissys.economy =((((*s).w0)>>8)&7); /* bits 8,9 &A of w0 */
thissys.techlev =((((*s).w1)>>8)&3)+((thissys.economy)^7);
(The original source code is also available, if you can read the assembly for a BBC Micro.)
It takes the base seed for the system and generates the location, government, economy, tech level, and so on. Perhaps the most memorable part of the generation is the so-called “goat soup” strings, which used a mad-libs system to generate brief, Hitchhiker-style descriptions of each planet: Lave’s rain forests and tree grubs, Leestian Evil Juice, the civil war in Reidquat. While this didn’t have any in-game effect, the descriptions served the important purpose of making each planet memorable and added a bit of whimsical imagination to the otherwise fairly dry trading and fighting game.
IBM PC Elite (1991)
The other interesting thing about the procedural generation in Elite is the way it uses emergence to multiply the effects of the generation. The planet stats have in-game effects: the government type, for example, affects how likely a pirate attack is, which makes Reidquat good for bounty hunting. The variables also sometimes feed into each other, so that the government and economy type influence the tech level. The locations of the systems and the 7 lightyear maximum jump range mean that different combinations of systems produce very different trading networks, so trading can be very different in different parts of the galaxy. Generating things that combine their effects emergently is a powerful technique.
Though we can quibble about the definitions used, Elite does hold a procedural generation Guinness world record, for earliest procedurally generated world. It’s certain few games of its era matched its scale or scope.
Ian Bell has an online archive with many, many ports of the original Elite, plus more information about the game.