Page 1 of 1
Sheet ore generation

Posted:
Tue Apr 15, 2014 23:39
by SegFault22
I'm trying to get Minetest to generate a bunch of different ores in sheet formations. However, this often results in extremely huge lodes, or miniscule lodes.
So, I want to know what variables can control the frequency of lodes and the size of lodes. My experiments with such have failed horribly.

Posted:
Wed Apr 16, 2014 01:09
by Evergreen
An answer I put together a while ago:
Evergreen wrote:Okay, here is some example code for an ore.
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
minetest.register_ore({
ore_type = "scatter",
ore = "mod:stone_with_ore",
wherein = "default:stone",
clust_scarcity = 8*8*8,
clust_num_ores = 8,
clust_size = 3,
height_min = -31000,
height_max = 64,
})
To quote the dev wiki:
ore_type: See Ore types
ore: The name of the ore node
wherein: The node that the ore will generate inside of
clust_scarcity: Ore has a 1 out of clust_scarcity chance of spawning in a node.
clust_num_ores: Number of ores in a cluster
clust_size: Size of the bounding box of the cluster
height_min: The lowest level that the ore will generate at
height_max: The highest level that the ore will generate at
noise_threshhold: If noise is above this threshold, ore is placed. Not needed for a uniform distribution
noise_params: NoiseParams structure describing the perlin noise used for ore distribution
Also, the possible ore types are:
scatterYour phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
Randomly chooses a location and generates a cluster of ore.
If noise_params is specified, the ore will be placed if the 3d perlin noise at
that point is greater than the noise_threshhold, giving the ability to create a non-equal
distribution of ore.
sheetYour phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
Creates a sheet of ore in a blob shape according to the 2d perlin noise described by noise_params.
The relative height of the sheet can be controlled by the same perlin noise as well, by specifying
a non-zero 'scale' parameter in noise_params. IMPORTANT: The noise is not transformed by offset or
scale when comparing against the noise threshhold, but scale is used to determine relative height.
The height of the blob is randomly scattered, with a maximum height of clust_size.
clust_scarcity and clust_num_ores are ignored.
This is essentially an improved version of the so-called "stratus" ore seen in some unofficial mods.
EDIT: Remember to register the ore as a node first.
Like so:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
minetest.register_node("yourmod:stone_with_yourore", {
description = "Your Ore",
tiles = {"default_stone.png^yourmod_mineral_yourore.png"},
groups = {cracky=3},
drop = 'yourmod:yourore_lump',
sounds = default.node_sound_stone_defaults(),
})
Also remember to change "yourmod" with your mod name, and "youore" with the name of your ore.
Hope that answers your question.

Posted:
Wed Apr 16, 2014 01:36
by SegFault22
Evergreen wrote:An answer I put together a while ago:
Evergreen wrote:Okay, here is some example code for an ore.
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
minetest.register_ore({
ore_type = "scatter",
ore = "mod:stone_with_ore",
wherein = "default:stone",
clust_scarcity = 8*8*8,
clust_num_ores = 8,
clust_size = 3,
height_min = -31000,
height_max = 64,
})
To quote the dev wiki:
ore_type: See Ore types
ore: The name of the ore node
wherein: The node that the ore will generate inside of
clust_scarcity: Ore has a 1 out of clust_scarcity chance of spawning in a node.
clust_num_ores: Number of ores in a cluster
clust_size: Size of the bounding box of the cluster
height_min: The lowest level that the ore will generate at
height_max: The highest level that the ore will generate at
noise_threshhold: If noise is above this threshold, ore is placed. Not needed for a uniform distribution
noise_params: NoiseParams structure describing the perlin noise used for ore distribution
Also, the possible ore types are:
scatterYour phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
Randomly chooses a location and generates a cluster of ore.
If noise_params is specified, the ore will be placed if the 3d perlin noise at
that point is greater than the noise_threshhold, giving the ability to create a non-equal
distribution of ore.
sheetYour phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
Creates a sheet of ore in a blob shape according to the 2d perlin noise described by noise_params.
The relative height of the sheet can be controlled by the same perlin noise as well, by specifying
a non-zero 'scale' parameter in noise_params. IMPORTANT: The noise is not transformed by offset or
scale when comparing against the noise threshhold, but scale is used to determine relative height.
The height of the blob is randomly scattered, with a maximum height of clust_size.
clust_scarcity and clust_num_ores are ignored.
This is essentially an improved version of the so-called "stratus" ore seen in some unofficial mods.
EDIT: Remember to register the ore as a node first.
Like so:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
- Code: Select all
minetest.register_node("yourmod:stone_with_yourore", {
description = "Your Ore",
tiles = {"default_stone.png^yourmod_mineral_yourore.png"},
groups = {cracky=3},
drop = 'yourmod:yourore_lump',
sounds = default.node_sound_stone_defaults(),
})
Also remember to change "yourmod" with your mod name, and "youore" with the name of your ore.
Hope that answers your question.
Indeed, it does help greatly. Thank you.
However, I would also like to know which variables to edit so that the frequency of lodes is changed.

Posted:
Wed Apr 16, 2014 02:05
by SegFault22
Scatter distribution on a large scale creates ugly cubes, so that is out. Sheet distribution is the only option.
But to use it properly, we have to be able to change the scarcity of the lodes. Every page I have found fails to explain that, although such is critically important. No wonder nobody uses it except for that technic guy.

Posted:
Wed Apr 16, 2014 21:11
by SegFault22
Hybrid Dog wrote:SegFault22 wrote:Scatter distribution on a large scale creates ugly cubes, so that is out. Sheet distribution is the only option.
But to use it properly, we have to be able to change the scarcity of the lodes. Every page I have found fails to explain that, although such is critically important. No wonder nobody uses it except for that technic guy.
there:
http://dev.minetest.net/oreI have problems with the sheet ore, too. For any reason it always generates much and big chunks. Changing the spread didn't help.
Sorry, I have already seen that article. It is not informative enough.
I guess I'll just have to stick to standard ore generation, then...

Posted:
Thu Apr 17, 2014 01:33
by paramat
Despite being confident with noise sheet ores confuse me, it needs more explanation.

Posted:
Thu Apr 17, 2014 09:24
by Hybrid Dog
SegFault22 wrote:It is not informative enough.
I know, it's not more informative than lua_api.txt.
EDIT:
https://github.com/minetest/minetest/blob/master/src/mapgen.cpp#L182

Posted:
Thu Apr 17, 2014 23:02
by SegFault22
Sorry, I don't speak C++.

Posted:
Fri Apr 18, 2014 10:10
by paramat
I speak a little, i may be able to see how it works ... *looks*

Posted:
Fri Apr 18, 2014 19:07
by Hybrid Dog
paramat wrote:I speak a little, i may be able to see how it works ... *looks*
What's the meaning of nthresh?

Posted:
Sat Apr 19, 2014 10:55
by paramat
Noise threshold, so line 202 means 'if noise value < noise threshold'