WorldForge Editing Tool Suite

(Concept document)

Part 3: World Editing Tools

This chapter deals with tools used to create and set up the game world; it's geography, ecology, cultures, and incoming player characters.

The map editor tool in particular seems a bit crowded as presented here, it would probably best be separated into different editors for the geography, ecology, and culture. These different tools would still share most of the same framework, with visualization and editing of areas with different attributes and local strength on the map.

The universe tool also could be separated into different sub-tools for solar system and other scales of editing, but should still allow easy switching between these editing levels, and planet level editing too.

Universe Editor

This tool allows the user to create a whole universe by tweaking various parameters such as age of the universe, strength of forces and values of natural constants, spatial distribution and amount of matter, distribution of different types of matter, and so on. The constants that can be tweaked are provided by the physics module (other modules such as the magic module might also have such constants, but if they affect the physics of the universe, then the physics module would have to know about them, and can report them when asked about natural constants).

The universe is generated from one random seed, but the resulting universe can be edited at many different levels.

First, the larger structures of the universe can be edited, such as reducing the amount of matter in some area, or changing the fractalness of the distribution in a galaxy cluster, or adjusting the materials in a galaxy, or adjusting the average age of stars in a stellar cloud. This astronomical engineering is not very relevant for planetary based games, except for providing a varying night sky to look at. Games with space travel will probably use it more. The editor allows editing the properties of the universe at large, large areas of it, megaclusters, clusters, galaxies, stellar clusters, and solar systems. (Of the top of my memory. I know there are more exact terms for the different levels. TODO: find names for universe structural levels). Higher levels in the structure contain the lower levels. Properties that can be changed are age, fractal distribution of matter, material type distribution, position, relative velocity compared to the level above, etc.

For a solar system, we can change the properties of the sun(s) and the planets, such as their position, velocity, size, composition at different depths, magnetic fields, seismic activity, core temperature, and so on. Asteroid belts and comets can be defined. The solar system can be simulated at high speed for some time (a simulated time attribute can be used for this, it differs from the age attribute in that the planets and suns are actually moved as a result of the gravitational forces in short iterations (if a realistic solar system physics is used, fun with triple star systems), or along fixed tracks. The age attribute doesn't move the planets and stars, it just affects their initial positions and properties), to see how the dynamics works out (we don't want the planet to arc into the sun in the third game year, do we? On the other hand, that would be a very interesting plot device... Build a spaceship in three game years, or the civilization is doomed). ;-)

The universe generator will also provide a random seed for the creation of the geology and possibly biosphere of a planet, but those can also be edited in separate tools, which can be opened from the Universe Editor.

Map Editor

The map editor is used to edit the geology of a planet, and also parts of the biosphere, because it is often so strongly intertwined to the landscape.

Initially a planet has an automatically generated landscape. A number of parameters controls the generation of the landscape. These can be tweaked with to get the rough idea right first, before going in and fine tuning continents and smaller areas. The parameters include things like average incoming radiation from the sun, heat loss to space, materials in the crust, age of the planet, seismic activity and volcanoes, amount of water, etc. These parameters can also be edited from the universe editor.

When the overall conditions have been tweaked as desired the user can define areas on the map and apply different effects to them. Initially there are also some areas with different effects defined by the planet generation code. Areas can overlap, and in that case the overlapping areas effect is applied after the underlying areas. The effects can be just changing parameters, such as rising the land height smoothly towards the center of the area, or covering the area in a thick layer of quartz sand, or they can be more complicated, such as modifying the area as after a glacier (smooth U valleys, mountain tops sticking up above glacier not smoothed, bands of moraine along the old glacier edges, lots of small lakes on the ground, big boulders deposited here and there in the landscape, and so on). Forests might also be treated as a special type of effect an area can have. In addition to the vegetation and soil layers, tropical forests also have a large impact on the ground, by increasing the chemical and biological erosion.

In addition to two dimensional areas, one dimensional lines can also be used for applying effects. Examples of such effects would be rivers, roads, or the edges between tectonic plates. Even if the line is one dimensional, the effect can extend to either side for some distance. Any area effect can be used for a line, area or even point, the effects always extend some distance past the edges of the area/line/dot. However, some effects can only be applied to lines, as they use the distance from the center axis and the position along the center axis as parameters (for example, to put out milestones along a road). Some point effects could also unsuitable for lines or areas.

It would be nice if effects could be stored in media repositories too, but it might be necessary to add them as code modules to the map generation module because of speed requirements on them.

The landscape can consist of one or more layers of material. The thickness and surface structure of the layers vary, according to parameters specified by area effects. The layer thickness is often fractal, using a Perlin noise function that allows the fractal dimensions of different size scales to be specified.

Negative, or 'digger' layers can be used to create caves, or adjust the landscape in case of river erosion and such.

Typical weather and climate could also be edited in the map editor.

Animals come next. For these we can edit the populations in different areas, and migration patterns where necessary. When the game is running the populations in different habitats, and the movement between habitats will be simulated. The habitats will be defined as homogenous areas where the same birth and mortality values can be applied, so if a forest gets partly chopped down then the habitat is split in two, as the conditions will likely differ inside the forest and out. Wether the same areas used for effects can directly be used for habitats is not clear, it's up to the ecology module designers to decide.

Countries and cultural areas can also be edited in the map editor. Cultural areas can stretch across country borders, and can overlap and vary in intensity. The population intensity in an area is determined in the ecology editing mentioned above. Based on the population intensity and culture, cities, villages, farms, roads, paths, and other things built by people are automatically placed on the map. The architectural styles used in the cities are defined by the culture. Subcultures could be used to modify culture properties for some areas. The location of cities and roads are determined by the preferences of the culture and the population intensity at the location. Some cultures might prefer roads going along rivers or streams, while other like arrow straight stone roads between important nodes, and wagon roads staying on level ground to smaller nodes. A node connected to a road can be a city, village, temple, trading place, harbor, etc, or just a crossroad.

In addition to the architecture and infrastructure, a culture also has a number of parameters describing the people (what species they tend to be and typical attributes), what they work with (different professions practiced in the culture), what they like (music style, writing style, painting style), their religious beliefs (gods their worship, how they worship them, whether the religion is controlled by priests or more personal, and what commandments and rules the religion has), famous people (leaders, historical persons, artists, influential people, various NPCs (these are defined in a character editing tool)), and what they teach to their children (their attitudes towards other people and different things, typical skills that most know, attributes that are valued, and various tidbits of knowledge and beliefs (memes)).

These cultural attributes affect what the people of the culture are like. People can be multicultural too, when they live in such an area, or have parents or friends of different cultures. The cultures a character belongs to shape their body and mind. People are generated into the cities and assigned professions depending on the resources available. They are assigned parents and sometimes children, friends, a home, and so on.

The people and other things that are automatically generated are not necessarily "instantiated" unless there is an observer nearby; they just live as possibilities defined by a random seed, the current time, the culture, the city or area that they live in, etc. Likewise, cities are not necessarily instantiated unless there's an observer or interactions with other cities. The idea here is that if there are cultures and people on far away places or other planets, the server doesn't need to simulate them at all, unless a player(?) character makes contact with them. However, the exact mechanics of that can be designed later, and initially we can instantiate everything in a small game world.

The user can browse through lists of people or creatures living in an area, and edit them, but that happens in another tool. Perhaps editing cultures, and their spreading and infrastructure should happen in another tool, too. Likewise for editing populations of creatures and plants. These tools can include a map component too.

After using the map editor, we now have a planet, with weather, mountains, forests, grasslands, seas, and possibly also ecology and a population of cultural people, if those aspects aren't moved to their own tools.

Player Avatar Creation Setup

An important part of a dynamic world is of course the players playing in it. They need to be able to create characters to play, and to enter into the game with those characters somewhere.

We need a way to set up the character creation process, what races are allowed, what professions can be selected, what skills can be selected, how many points can be distributed to different skills and attributes, and what other things can be acquired for the character at startup. We also need to be able to specify a good set of off-line scripts for the players to select from and configure.

The character editor described in the previous chapter provides the actual editor for configuring the character, but we need a tool to set up the limitations, a.k.a. rules, of player creation. Not every game will work similarly, some will want to restrict the available races and the available professions based on the race, some will roll attributes randomly while others allow the player to distribute some sort of points. The rules are best located in a CharacterCreationRIM (which also could perhaps be used for NPC creation), of which a flexible default implementation would be provided initially.

So one part of the Player Avatar Creation Setup tool is to configure the CharacterCreationRIM. The other part will be to specify how the player should enter the game world. There's a few different alternatives here. One is to spawn the player out of thin air, preferably in some not too dangerous city area, but also not in the exact same location always, to avoid crowding, newbie camping, etc. Another way is to replace an existing, suitable NPC with the players character, possibly changing the attributes of the NPC somewhat to those of the player character.

The player can have the opportunity to chose a general area where to start, or select some friend(s) that he/she would like to be close to at the start. It has also been suggested that a guild or other group of people that play together could get the opportunity to spawn on an immigrant ship or caravan bound for the game world. This might also be used for individual players that don't know each other from before. Alternatively the starting point can be guided by world statistics, such as placing new players in areas that have some existing human players already, but not too many of them.

The starting point selection would be guided by a PlayerCharacterSpawningRIM or similar, guided by parameters specifying policy, possible starting points or areas in the world, or world scripts to run to set up incoming caravans, ships, or such for groups of player characters.