textures | ||
a.txt | ||
coal-pane0.png | ||
depends.txt | ||
geologicaLayers.lua | ||
geologicaStrata.lua | ||
geologicaVeins.lua | ||
init.lua | ||
layers0.png | ||
readme.md | ||
sed.lua | ||
testing.lua | ||
vein0.png |
Geological layer generator for [Minetest] "rocks"
Aim of this mod is to replace all generic stone (default:stone) and generate underground layers of different rocks.
Currently everithing generated above ground, in air. This is for debugging.
Features
- layers of different rocks: sort of working
- ore veins: nothing
- extensibility, api: ok
** Work in progress! **
- Git clone: https
Screenshots
Documentation
How the underground is generated: todo.
Underground is divided into horizontal layers. Bottom of each layer is at fixed height and moved up or down by 2d perlin noise.
In every layer there can be multiple veins. Veins are blob-shaped volumes of different rocks. Borders of vein are defined by 3d perlin noise. Veins often contain ores.
In every vein, ores are distributed randomly. Some ores may occur in specific areas of the vein (where noise is higher than treshold) or distributed randomly in specific amount (chance based on pseudorandom number) or combination of both.
There is 1 2d perlin noise per layer, 1 3d perlin noise per vein and 1 pseudorandom number generator per ore.
Modding Interface
"Rocks" exposes api to add new ores, veins and layers. The api is defined in register.
Register layer
rocks.register_layer=function(name,params,rock)
This function registers a layer. Layer is identified by unique string name. Location of layer is specified in params and node, the layer should be composed of is defined by rock.
Field "params.gain" sets how height of the layer should vary. Field "params.height" sets height of bottom of the layer. Field "params.limit" is value of noise above which the layer is not generated. Set to 2 to disable this feature. Last field "params.seed" is offset to world seed to seed the noise.
Register vein
rocks.register_vein=function(name,params)
This function registers a vein with name "name" to be generated according to params.
Field "params.spread" {x,y,z} defines how the vein should look like. X shoudd be equal to z. If y=x=z then the vein is equal in all directions. To make the vein taller, set y to higher value. Larger values make larger and less frequent veins.
Field "params.treshold" specifies rarity of the vein. It should be betveen -2 and +2, mapgen will use this or per-ore treshold if per-ore treshold is larger.
- 2 never generate
- 1 extremly rare
- 0 50% chance
- less than 0 = SPAM
Field "params.seed" is added to world seed to form seed for noise function.
Depths, where the wein should generate can be controlled by fields hmin and hmax. They can be set to nil to generate everywhere.
Layers, where the vein should generate in must be listed in Field "params.layer".
Register ore
rocks.register_ore=function( vein, node, params )
This function registers ore or rock to be generated in vein "vein". Node to be generated is "node". Params specify parameters, where the rock should spawn.
If noise is larger than Params.treshold, the ore is spawned (set to 2 to spawn everywhere in the vein, 0.8=only in middle). Params.chance specify the chance (/100%) of ore being spawned (0=never 1=always 0.5=50%).
If multiple ores pass the treshhold and chance tests, ore with highest treshold and smallest chance is spawned.