Archived discussion

Wilderness Design

Read-only archive · continue on Discord

The Wilderness of Luminari has some very simple design requirements -

1.) It should be tightly integrated with the rest of the mud. No portals, etc. required. Moving though an exit should be enough to move between wilderness and regular zones.

2.) It should be dynamic. The wilderness should show the effect of changing seasons, weather, monster wandering, players, etc. It needs to be a living, breathing part of the mud, more so than even hand built zones.

3.) It should be efficient. There should be no delays when entering or travelling within the wilderness. See point 1.

4.) It should ADD to the fun by providing multiple opportunities for quests, mobile encounters, exploration and crafting.

This is basically it, although once you dive into the details there is a lot more to think about.

So what we have right now, is a wilderness generated by multiple layers of perlin noise. The first layer is a ridged perlin noise which is combined with the second layer, a regular perlin noise. The noise is compressed slightly to give more mountainous terrain and is averaged together to create a height map.

This height map is then normalized over 0-255 and attenuated by a combination of radial and box gradients to ensure that the landmasses are completely surrounded by ocean. Another layer of noise is generated as a moisture map. Finally a gradient is generated to specify the average temperature, and this is attenuated by elevation, creating lower temperatures at higher elevations. These three values are then used to determine the sector type for a given (x,y) location. This gives the base wilderness map.

Storing and retrieving the 4+ million rooms of the wilderness is prohibitive, so we use a generative approach for most of the rooms. When the wilderness is created, a zone is set aside for wilderness use. A portion of the rooms in this zone are reserved for static rooms that will provide entrance into hand-built zones (more on this later) and a portion of the zone is reserved for dynamic use. The first room in the zone is reserved as a 'link' room - Other rooms with that room vnum as an exit redirect anything moving through that exit to the coordinate grid. When a player or a mobile moves through the wilderness, if they attempt to move through one of these exits to the link room the code will check the corresponding coordinate and see if any rooms are assigned to that coordinate. If so, it will move the player into that room. If not, a dynamic room is assigned to that coordinate and an event is added to the room. This event will check every 10 seconds to see if the room is empty. If it is, it will be returned to the dynamic pool, otherwise it remains allocated to that coordinate location. Once the room is assigned the player is moved into the room, along with any followers.

If a static room is assigned to a given coordinate location, the player is moved into that room upon arriving at the coordinate location. Static rooms may link to other zones and provide a seamless method for moving between hand-built zones and the wilderness.

An important part of the wilderness are the concepts of Regions, Features and Landmarks.

Regions define a logical partitioning of locations on the game map. Regions may overlap. Regions do not alter the landscape, but can create various effects.
Examples: Geographic, Encounter, Crafting

Features alter the landscape and provide a way to customize the generated map.
Examples: Rivers, Lakes, Roads, Canals, Magical wasteland, Volcanoes

Landmarks label a particular (x,y) coordinate and provide a frame of reference.
Examples: Waypoint, Geographic, Quest

With these three layers added on top of the generated map, it is possible to shape the generated world to meet our requirements. These will be described in detail in future posts.