From 2b75ac00da20a13ab5dbbf713bbe7b7998b2af2e Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Wed, 14 Aug 2019 15:13:18 +0100 Subject: [PATCH] Biomes and Decorations: Improve and fix errors --- .vscode/spellright.dict | 3 + _en/advmap/biomesdeco.md | 161 +++++++++++++++++++------------------- _sass/_content.scss | 6 ++ static/biomes_voronoi.png | Bin 0 -> 27758 bytes 4 files changed, 89 insertions(+), 81 deletions(-) create mode 100644 static/biomes_voronoi.png diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict index dc3bab5..e905279 100644 --- a/.vscode/spellright.dict +++ b/.vscode/spellright.dict @@ -4,3 +4,6 @@ metatable singleplayer Staticdata +biomes + +Voronoi diff --git a/_en/advmap/biomesdeco.md b/_en/advmap/biomesdeco.md index 1ca24ef..64f669f 100644 --- a/_en/advmap/biomesdeco.md +++ b/_en/advmap/biomesdeco.md @@ -1,5 +1,6 @@ --- title: Biomes and Decorations +author: Shara layout: default root: ../.. idx: 6.1 @@ -13,32 +14,36 @@ interesting and varied in-game environment. This chapter teaches you how to register biomes, how to control biome distribution, and how to place decorations in biomes. - [What are Biomes?](#what-are-biomes) -- [Heat and Humidity](#heat-and-humidity) - - [Biome Locations](#biome-locations) -- [Visualising Biome Boundaries](#visualising-biome-boundaries) -- [Mapgen Aliases](#mapgen-aliases) +- [Biome Placement](#biome-placement) + - [Heat and Humidity](#heat-and-humidity) + - [Visualising Boundaries using Voronoi Diagrams](#visualising-boundaries-using-voronoi-diagrams) + - [Creating a Voronoi Diagram using Geogebra](#creating-a-voronoi-diagram-using-geogebra) - [Registering a Biome](#registering-a-biome) - [What are Decorations?](#what-are-decorations) - [Registering a Simple Decoration](#registering-a-simple-decoration) - [Registering a Schematic Decoration](#registering-a-schematic-decoration) +- [Mapgen Aliases](#mapgen-aliases) ## What are Biomes? -A Minetest biome is a specific in-game environment. When registering biomes you +A Minetest biome is a specific in-game environment. When registering biomes, you can determine the types of nodes that appear in them during map generation. Some of the most common types of node that may vary between biomes include: * Top node: This is the node most commonly found on the surface. A well-known - example would be Dirt with Grass from Minetest Game. + example would be "Dirt with Grass" from Minetest Game. * Filler node: This is the layer immediately beneath the top node. In biomes with grass, it will often be dirt. * Stone node: This is the node you most commonly see underground. * Water node: This is usually a liquid and will be the node that appears - where you expect bodies of water. Other types of node can also vary between - biomes, providing an opportunity to create vastly different environments - within the same game. + where you would expect bodies of water. -## Heat and Humidity +Other types of node can also vary between biomes, providing an opportunity +to create vastly different environments within the same game. + +## Biome Placement + +### Heat and Humidity It is not enough to simply register a biome; you must also decide where it can occur in game. This is done by assigning a heat and a humidity value to each biome. @@ -48,8 +53,6 @@ be neighbours to each other. Poor decisions could result in what is meant to be a hot desert sharing a border with a glacier, and other improbable combinations which you may prefer to avoid. -### Biome Locations - In game, heat and humidity values at any point of the map will usually be between 0 and 100. The values gradually change, increasing or decreasing as you move around the map. The biome at any given point will be determined by which of the @@ -63,30 +66,37 @@ biome’s environment. For example: * A snowy forest might have low heat and a medium humidity value. * A swamp biome would generally have high humidity. * -In practice this means that, as long as you have a diverse range of biomes, you +In practice, this means that, as long as you have a diverse range of biomes, you are likely to find that the biomes which border each other form a logical progression. -## Visualising Biome Boundaries +### Visualising Boundaries using Voronoi Diagrams
- Vernoi + Vernoi
- Voronoi diagram + Voronoi diagram, showing the closest point. + By Balu Ertl, CC BY-SA 4.0.
-Visualising Biome Boundaries Fine tuning heat and humidity values for biomes is +Fine-tuning heat and humidity values for biomes is easier if you can visualise the relationship between the biomes you are using. This is most important if you are creating a full set of your own biomes, but can also be helpful if you are adding a biome to an existing set. -The simplest way to visualise which biomes may share borders with one another -is to create a Voronoi diagram, which can be used to show which of a number of -points on a 2-dimensional diagram any given position is closest to. +The simplest way to visualise which biomes may share borders is to create a +Voronoi diagram, which can be used to show which point on a 2-dimensional +diagram any given position is closest to. -To do this, mark a point for each biome based on heat and humidity values, +A Voronoi diagram can reveal where biomes that should border each other do not, +and where biomes that should not border each other do. It can also give a +general insight into how common biomes will be in-game, with larger and more +central biomes being more common than smaller biomes or biomes that are located +on the outer edge of the diagram. + +This is done by marking a point for each biome based on heat and humidity values, where the x-axis is heat and the y-axis is humidity. The diagram is then -divided into areas, so that every position in a given area is closer to the +divided into areas, such that every position in a given area is closer to the point inside that area than it is to any other point on the diagram. Each area represents a biome. If two areas share a border, the biomes they @@ -94,36 +104,25 @@ represent in-game can be located next to each other. The length of the border shared between two areas, compared to the length shared with other areas, will tell you how frequently two biomes are likely to be found next to each other. -A Voronoi diagram can reveal: +### Creating a Voronoi Diagram using Geogebra -* Where biomes that should border each other do not. -* Where biomes that should not border each other do. +As well as drawing them by hand, you can also create Voronoi diagrams using +programs such as [Geogebra](https://www.geogebra.org). -It can also give a general insight into how common biomes will be in-game, with -larger and more central biomes being more common than smaller biomes and biomes -that are located on the outer edge of the diagram. +1. Create points by selecting the point tool in the toolbar (icon is a point with 'A'), + and then clicking the chart. You can drag points around or explicitly set their + position in the left sidebar. You should also give each point a label, to make things clearer. +1. Next, create the voronoi by entering the following function into the + input box in the left sidebar: -## Mapgen Aliases + ```cpp + Voronoi({ A, B, C, D, E }) + ``` -Existing games should already include suitable mapgen aliases, so you only need -to consider registering mapgen aliases of your own if you are making your own game. + Where the each point is inside the curly brackets, separated by commas. You should now -Mapgen aliases provide information to the core mapgen, and can be registered in the form: - -```lua -minetest.register_alias("mapgen_stone", "base:smoke_stone") -``` - -At a minimum you should register: - -* mapgen_stone -* mapgen_water_source -* mapgen_river_water_source - -If you are not defining cave liquid nodes for all biomes, you should also register: - -* mapgen_lava_source +3. Profit! You should now have a voronoi diagram with all draggable points. ## Registering a Biome @@ -132,7 +131,7 @@ The following code registers a simple biome named grasslands biome: ```lua minetest.register_biome({ - name = grasslands, + name = "grasslands", node_top = "default:dirt_with_grass", depth_top = 1, node_filler = "default:dirt", @@ -146,53 +145,31 @@ minetest.register_biome({ This biome has one layer of Dirt with Grass nodes on the surface, and three layers of Dirt nodes beneath this. It does not specify a stone node, so the node defined -in the mapgen alias registration for mapgen_stone will be present underneath the dirt. +in the mapgen alias registration for `mapgen_stone` will be present underneath the dirt. -There are many options when registering a biome. The following can be included in -the registration: +There are many options when registering a biome, and these are documented +in the [Minetest Lua API Reference](https://minetest.gitlab.io/minetest/definition-tables/#biome-definition), +as always. -* name: The biome’s name. -* node_dust: A layer of this node is placed after everything else. It is often used to add snow. -* node_top: Type of node on the surface, but underneath node_dust. -* depth_top: Number of nodes deep the surface layer is. -* node_filler: Type of node directly under the surface layer. -* depth_filler: Number of nodes deep the filler layer is. -* node_stone: Type of node under the filler layer, extending down to y_min. -* node_water_top: Type of node appearing above surface water. It is often used to add ice. -* depth_water_top: Number of nodes deep the water top layer is. -* node_water: Type of node in surface level bodies of liquid. -* node_river_water: Type of node that appears in rivers. Note that this is not used for all mapgens available in the Minetest engine. -* node_riverbed: Type of node in riverbeds. -* depth_riverbed: Number of nodes deep the riverbed layer is. -* node_cave_liquid: Type of node in underground cave liquid. -* node_dungeon: Type of node used in underground dungeon walls. -* node_dungeon_alt: Alternative type of node used in dungeon walls. -* node_dungeon_stair: Stairs node used in dungeons. -* vertical_blend: Number of nodes above y_max over which the biome will blend with the next biome. This can be used to prevent abrupt biome changes. -* y_max: Maximum height of the biome. -* y_min: Minimum height of the biome. -* heat_point: Heat value for the biome. -* humidity_point: Humidity value for the biome - -You don’t need to define every option for every biome you, but in some cases failure -to define eithe a specific option, or a suitable mapgen alias, can result in map generation errors. +You don’t need to define every option for every biome you create, but in some cases failure +to define either a specific option, or a suitable mapgen alias, can result in map generation errors. ## What are Decorations? Decorations are either nodes or schematics that can be placed on the map at mapgen. -Some common examples include flowers, bushes and trees. Other more creative uses -may include hanging icicles or stalagmites in caves, underground crystal formations +Some common examples include flowers, bushes, and trees. Other more creative uses +may include hanging icicles or stalagmites in caves, underground crystal formations, or even the placement of small buildings. Decorations can be restricted to specific biomes, by height, or by which nodes -they can be placed on They are often used to develop the environment of a biome +they can be placed on. They are often used to develop the environment of a biome by ensuring it has specific plants, trees or other features. ## Registering a Simple Decoration Simple decorations are used to place single node decorations on the map during map generation. You must specify the node that is to be placed as a decoration, -and details for where it can be placed, and how frequently. +details for where it can be placed, and how frequently it occurs. For example: @@ -209,8 +186,8 @@ minetest.register_decoration({ }) ``` -In this example, the node named plants:grass will be placed in the biome named -grassy_plains on top of base:dirt_with_grass nodes, between the heights of y = 1 and y = 200. +In this example, the node named `plants:grass` will be placed in the biome named +grassy_plains on top of `base:dirt_with_grass` nodes, between the heights of `y = 1` and `y = 200`. The fill_ratio value determines how frequently the decoration appears, with higher values up to 1 resulting in a great number of decorations being placed. It is possible @@ -242,3 +219,25 @@ a path to a schematic, which in this case is stored in a dedicated schematic dir This example also sets flags to center the placement of the schematic, and the rotation is set to random. The random rotation of schematics when they are placed as decorations helps introduce more variation when asymmetrical schematics are used. + + +## Mapgen Aliases + +Existing games should already include suitable mapgen aliases, so you only need +to consider registering mapgen aliases of your own if you are making your own game. + +Mapgen aliases provide information to the core mapgen, and can be registered in the form: + +```lua +minetest.register_alias("mapgen_stone", "base:smoke_stone") +``` + +At a minimum you should register: + +* mapgen_stone +* mapgen_water_source +* mapgen_river_water_source + +If you are not defining cave liquid nodes for all biomes, you should also register: + +* mapgen_lava_source diff --git a/_sass/_content.scss b/_sass/_content.scss index 4a5eca9..a6a3843 100644 --- a/_sass/_content.scss +++ b/_sass/_content.scss @@ -10,10 +10,16 @@ img { figure { padding: 0; margin: 0; + + .credit { + display: block; + font-size: 70%; + } } .right_image { float: right; + text-align: right; margin: 0 0 0 10px; padding: 0; } diff --git a/static/biomes_voronoi.png b/static/biomes_voronoi.png new file mode 100644 index 0000000000000000000000000000000000000000..9707ce9f90e28262592b5d2384b490940978ebf3 GIT binary patch literal 27758 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