Remove cave ice from creative inventory
[oweals/minetest_game.git] / mods / default / mapgen.lua
1 --
2 -- Aliases for map generators
3 --
4
5 minetest.register_alias("mapgen_stone", "default:stone")
6 minetest.register_alias("mapgen_dirt", "default:dirt")
7 minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass")
8 minetest.register_alias("mapgen_sand", "default:sand")
9 minetest.register_alias("mapgen_water_source", "default:water_source")
10 minetest.register_alias("mapgen_river_water_source", "default:river_water_source")
11 minetest.register_alias("mapgen_lava_source", "default:lava_source")
12 minetest.register_alias("mapgen_gravel", "default:gravel")
13 minetest.register_alias("mapgen_desert_stone", "default:desert_stone")
14 minetest.register_alias("mapgen_desert_sand", "default:desert_sand")
15 minetest.register_alias("mapgen_dirt_with_snow", "default:dirt_with_snow")
16 minetest.register_alias("mapgen_snowblock", "default:snowblock")
17 minetest.register_alias("mapgen_snow", "default:snow")
18 minetest.register_alias("mapgen_ice", "default:ice")
19 minetest.register_alias("mapgen_sandstone", "default:sandstone")
20
21 -- Flora
22
23 minetest.register_alias("mapgen_tree", "default:tree")
24 minetest.register_alias("mapgen_leaves", "default:leaves")
25 minetest.register_alias("mapgen_apple", "default:apple")
26 minetest.register_alias("mapgen_jungletree", "default:jungletree")
27 minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves")
28 minetest.register_alias("mapgen_junglegrass", "default:junglegrass")
29 minetest.register_alias("mapgen_pine_tree", "default:pine_tree")
30 minetest.register_alias("mapgen_pine_needles", "default:pine_needles")
31
32 -- Dungeons
33
34 minetest.register_alias("mapgen_cobble", "default:cobble")
35 minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble")
36 minetest.register_alias("mapgen_mossycobble", "default:mossycobble")
37 minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone")
38 minetest.register_alias("mapgen_sandstonebrick", "default:sandstonebrick")
39 minetest.register_alias("mapgen_stair_sandstone_block", "stairs:stair_sandstone_block")
40
41
42 --
43 -- Register ores
44 --
45
46 -- Mgv6
47
48 function default.register_mgv6_ores()
49
50         -- Blob ore
51         -- These first to avoid other ores in blobs
52
53         -- Clay
54         -- This first to avoid clay in sand blobs
55
56         minetest.register_ore({
57                 ore_type        = "blob",
58                 ore             = "default:clay",
59                 wherein         = {"default:sand"},
60                 clust_scarcity  = 16 * 16 * 16,
61                 clust_size      = 5,
62                 y_max           = 0,
63                 y_min           = -15,
64                 noise_threshold = 0.0,
65                 noise_params    = {
66                         offset = 0.5,
67                         scale = 0.2,
68                         spread = {x = 5, y = 5, z = 5},
69                         seed = -316,
70                         octaves = 1,
71                         persist = 0.0
72                 },
73         })
74
75         -- Sand
76
77         minetest.register_ore({
78                 ore_type        = "blob",
79                 ore             = "default:sand",
80                 wherein         = {"default:stone", "default:desert_stone"},
81                 clust_scarcity  = 16 * 16 * 16,
82                 clust_size      = 5,
83                 y_max           = 0,
84                 y_min           = -31,
85                 noise_threshold = 0.0,
86                 noise_params    = {
87                         offset = 0.5,
88                         scale = 0.2,
89                         spread = {x = 5, y = 5, z = 5},
90                         seed = 2316,
91                         octaves = 1,
92                         persist = 0.0
93                 },
94         })
95
96         -- Dirt
97
98         minetest.register_ore({
99                 ore_type        = "blob",
100                 ore             = "default:dirt",
101                 wherein         = {"default:stone"},
102                 clust_scarcity  = 16 * 16 * 16,
103                 clust_size      = 5,
104                 y_max           = 31000,
105                 y_min           = -31,
106                 noise_threshold = 0.0,
107                 noise_params    = {
108                         offset = 0.5,
109                         scale = 0.2,
110                         spread = {x = 5, y = 5, z = 5},
111                         seed = 17676,
112                         octaves = 1,
113                         persist = 0.0
114                 },
115         })
116
117         -- Gravel
118
119         minetest.register_ore({
120                 ore_type        = "blob",
121                 ore             = "default:gravel",
122                 wherein         = {"default:stone"},
123                 clust_scarcity  = 16 * 16 * 16,
124                 clust_size      = 5,
125                 y_max           = 31000,
126                 y_min           = -31000,
127                 noise_threshold = 0.0,
128                 noise_params    = {
129                         offset = 0.5,
130                         scale = 0.2,
131                         spread = {x = 5, y = 5, z = 5},
132                         seed = 766,
133                         octaves = 1,
134                         persist = 0.0
135                 },
136         })
137
138         -- Scatter ores
139
140         -- Coal
141
142         minetest.register_ore({
143                 ore_type       = "scatter",
144                 ore            = "default:stone_with_coal",
145                 wherein        = "default:stone",
146                 clust_scarcity = 8 * 8 * 8,
147                 clust_num_ores = 9,
148                 clust_size     = 3,
149                 y_max          = 31000,
150                 y_min          = 1025,
151         })
152
153         minetest.register_ore({
154                 ore_type       = "scatter",
155                 ore            = "default:stone_with_coal",
156                 wherein        = "default:stone",
157                 clust_scarcity = 8 * 8 * 8,
158                 clust_num_ores = 8,
159                 clust_size     = 3,
160                 y_max          = 64,
161                 y_min          = -31000,
162         })
163
164         minetest.register_ore({
165                 ore_type       = "scatter",
166                 ore            = "default:stone_with_coal",
167                 wherein        = "default:stone",
168                 clust_scarcity = 24 * 24 * 24,
169                 clust_num_ores = 27,
170                 clust_size     = 6,
171                 y_max          = 0,
172                 y_min          = -31000,
173         })
174
175         -- Iron
176
177         minetest.register_ore({
178                 ore_type       = "scatter",
179                 ore            = "default:stone_with_iron",
180                 wherein        = "default:stone",
181                 clust_scarcity = 9 * 9 * 9,
182                 clust_num_ores = 12,
183                 clust_size     = 3,
184                 y_max          = 31000,
185                 y_min          = 1025,
186         })
187
188         minetest.register_ore({
189                 ore_type       = "scatter",
190                 ore            = "default:stone_with_iron",
191                 wherein        = "default:stone",
192                 clust_scarcity = 7 * 7 * 7,
193                 clust_num_ores = 5,
194                 clust_size     = 3,
195                 y_max          = 0,
196                 y_min          = -31000,
197         })
198
199         minetest.register_ore({
200                 ore_type       = "scatter",
201                 ore            = "default:stone_with_iron",
202                 wherein        = "default:stone",
203                 clust_scarcity = 24 * 24 * 24,
204                 clust_num_ores = 27,
205                 clust_size     = 6,
206                 y_max          = -64,
207                 y_min          = -31000,
208         })
209
210         -- Copper
211
212         minetest.register_ore({
213                 ore_type       = "scatter",
214                 ore            = "default:stone_with_copper",
215                 wherein        = "default:stone",
216                 clust_scarcity = 9 * 9 * 9,
217                 clust_num_ores = 5,
218                 clust_size     = 3,
219                 y_max          = 31000,
220                 y_min          = 1025,
221         })
222
223         minetest.register_ore({
224                 ore_type       = "scatter",
225                 ore            = "default:stone_with_copper",
226                 wherein        = "default:stone",
227                 clust_scarcity = 12 * 12 * 12,
228                 clust_num_ores = 4,
229                 clust_size     = 3,
230                 y_max          = -16,
231                 y_min          = -63,
232         })
233
234         minetest.register_ore({
235                 ore_type       = "scatter",
236                 ore            = "default:stone_with_copper",
237                 wherein        = "default:stone",
238                 clust_scarcity = 9 * 9 * 9,
239                 clust_num_ores = 5,
240                 clust_size     = 3,
241                 y_max          = -64,
242                 y_min          = -31000,
243         })
244
245         -- Tin
246
247         minetest.register_ore({
248                 ore_type       = "scatter",
249                 ore            = "default:stone_with_tin",
250                 wherein        = "default:stone",
251                 clust_scarcity = 10 * 10 * 10,
252                 clust_num_ores = 5,
253                 clust_size     = 3,
254                 y_max          = 31000,
255                 y_min          = 1025,
256         })
257
258         minetest.register_ore({
259                 ore_type       = "scatter",
260                 ore            = "default:stone_with_tin",
261                 wherein        = "default:stone",
262                 clust_scarcity = 13 * 13 * 13,
263                 clust_num_ores = 4,
264                 clust_size     = 3,
265                 y_max          = -32,
266                 y_min          = -127,
267         })
268
269         minetest.register_ore({
270                 ore_type       = "scatter",
271                 ore            = "default:stone_with_tin",
272                 wherein        = "default:stone",
273                 clust_scarcity = 10 * 10 * 10,
274                 clust_num_ores = 5,
275                 clust_size     = 3,
276                 y_max          = -128,
277                 y_min          = -31000,
278         })
279
280         -- Gold
281
282         minetest.register_ore({
283                 ore_type       = "scatter",
284                 ore            = "default:stone_with_gold",
285                 wherein        = "default:stone",
286                 clust_scarcity = 13 * 13 * 13,
287                 clust_num_ores = 5,
288                 clust_size     = 3,
289                 y_max          = 31000,
290                 y_min          = 1025,
291         })
292
293         minetest.register_ore({
294                 ore_type       = "scatter",
295                 ore            = "default:stone_with_gold",
296                 wherein        = "default:stone",
297                 clust_scarcity = 15 * 15 * 15,
298                 clust_num_ores = 3,
299                 clust_size     = 2,
300                 y_max          = -64,
301                 y_min          = -255,
302         })
303
304         minetest.register_ore({
305                 ore_type       = "scatter",
306                 ore            = "default:stone_with_gold",
307                 wherein        = "default:stone",
308                 clust_scarcity = 13 * 13 * 13,
309                 clust_num_ores = 5,
310                 clust_size     = 3,
311                 y_max          = -256,
312                 y_min          = -31000,
313         })
314
315         -- Mese crystal
316
317         minetest.register_ore({
318                 ore_type       = "scatter",
319                 ore            = "default:stone_with_mese",
320                 wherein        = "default:stone",
321                 clust_scarcity = 14 * 14 * 14,
322                 clust_num_ores = 5,
323                 clust_size     = 3,
324                 y_max          = 31000,
325                 y_min          = 1025,
326         })
327
328         minetest.register_ore({
329                 ore_type       = "scatter",
330                 ore            = "default:stone_with_mese",
331                 wherein        = "default:stone",
332                 clust_scarcity = 18 * 18 * 18,
333                 clust_num_ores = 3,
334                 clust_size     = 2,
335                 y_max          = -64,
336                 y_min          = -255,
337         })
338
339         minetest.register_ore({
340                 ore_type       = "scatter",
341                 ore            = "default:stone_with_mese",
342                 wherein        = "default:stone",
343                 clust_scarcity = 14 * 14 * 14,
344                 clust_num_ores = 5,
345                 clust_size     = 3,
346                 y_max          = -256,
347                 y_min          = -31000,
348         })
349
350         -- Diamond
351
352         minetest.register_ore({
353                 ore_type       = "scatter",
354                 ore            = "default:stone_with_diamond",
355                 wherein        = "default:stone",
356                 clust_scarcity = 15 * 15 * 15,
357                 clust_num_ores = 4,
358                 clust_size     = 3,
359                 y_max          = 31000,
360                 y_min          = 1025,
361         })
362
363         minetest.register_ore({
364                 ore_type       = "scatter",
365                 ore            = "default:stone_with_diamond",
366                 wherein        = "default:stone",
367                 clust_scarcity = 17 * 17 * 17,
368                 clust_num_ores = 4,
369                 clust_size     = 3,
370                 y_max          = -128,
371                 y_min          = -255,
372         })
373
374         minetest.register_ore({
375                 ore_type       = "scatter",
376                 ore            = "default:stone_with_diamond",
377                 wherein        = "default:stone",
378                 clust_scarcity = 15 * 15 * 15,
379                 clust_num_ores = 4,
380                 clust_size     = 3,
381                 y_max          = -256,
382                 y_min          = -31000,
383         })
384
385         -- Mese block
386
387         minetest.register_ore({
388                 ore_type       = "scatter",
389                 ore            = "default:mese",
390                 wherein        = "default:stone",
391                 clust_scarcity = 36 * 36 * 36,
392                 clust_num_ores = 3,
393                 clust_size     = 2,
394                 y_max          = 31000,
395                 y_min          = 1025,
396         })
397
398         minetest.register_ore({
399                 ore_type       = "scatter",
400                 ore            = "default:mese",
401                 wherein        = "default:stone",
402                 clust_scarcity = 36 * 36 * 36,
403                 clust_num_ores = 3,
404                 clust_size     = 2,
405                 y_max          = -1024,
406                 y_min          = -31000,
407         })
408 end
409
410
411 -- All mapgens except mgv6
412
413 function default.register_ores()
414
415         -- Stratum ores.
416         -- These obviously first.
417
418         -- Silver sandstone
419
420         minetest.register_ore({
421                 ore_type        = "stratum",
422                 ore             = "default:silver_sandstone",
423                 wherein         = {"default:stone"},
424                 clust_scarcity  = 1,
425                 y_max           = 46,
426                 y_min           = 10,
427                 noise_params    = {
428                         offset = 28,
429                         scale = 16,
430                         spread = {x = 128, y = 128, z = 128},
431                         seed = 90122,
432                         octaves = 1,
433                 },
434                 stratum_thickness = 4,
435                 biomes = {"cold_desert"},
436         })
437
438         minetest.register_ore({
439                 ore_type        = "stratum",
440                 ore             = "default:silver_sandstone",
441                 wherein         = {"default:stone"},
442                 clust_scarcity  = 1,
443                 y_max           = 42,
444                 y_min           = 6,
445                 noise_params    = {
446                         offset = 24,
447                         scale = 16,
448                         spread = {x = 128, y = 128, z = 128},
449                         seed = 90122,
450                         octaves = 1,
451                 },
452                 stratum_thickness = 2,
453                 biomes = {"cold_desert"},
454         })
455
456         -- Desert sandstone
457
458         minetest.register_ore({
459                 ore_type        = "stratum",
460                 ore             = "default:desert_sandstone",
461                 wherein         = {"default:desert_stone"},
462                 clust_scarcity  = 1,
463                 y_max           = 46,
464                 y_min           = 10,
465                 noise_params    = {
466                         offset = 28,
467                         scale = 16,
468                         spread = {x = 128, y = 128, z = 128},
469                         seed = 90122,
470                         octaves = 1,
471                 },
472                 stratum_thickness = 4,
473                 biomes = {"desert"},
474         })
475
476         minetest.register_ore({
477                 ore_type        = "stratum",
478                 ore             = "default:desert_sandstone",
479                 wherein         = {"default:desert_stone"},
480                 clust_scarcity  = 1,
481                 y_max           = 42,
482                 y_min           = 6,
483                 noise_params    = {
484                         offset = 24,
485                         scale = 16,
486                         spread = {x = 128, y = 128, z = 128},
487                         seed = 90122,
488                         octaves = 1,
489                 },
490                 stratum_thickness = 2,
491                 biomes = {"desert"},
492         })
493
494         -- Sandstone
495
496         minetest.register_ore({
497                 ore_type        = "stratum",
498                 ore             = "default:sandstone",
499                 wherein         = {"default:desert_stone"},
500                 clust_scarcity  = 1,
501                 y_max           = 39,
502                 y_min           = 3,
503                 noise_params    = {
504                         offset = 21,
505                         scale = 16,
506                         spread = {x = 128, y = 128, z = 128},
507                         seed = 90122,
508                         octaves = 1,
509                 },
510                 stratum_thickness = 2,
511                 biomes = {"desert"},
512         })
513
514         -- Blob ore.
515         -- These before scatter ores to avoid other ores in blobs.
516
517         -- Clay
518
519         minetest.register_ore({
520                 ore_type        = "blob",
521                 ore             = "default:clay",
522                 wherein         = {"default:sand"},
523                 clust_scarcity  = 16 * 16 * 16,
524                 clust_size      = 5,
525                 y_max           = 0,
526                 y_min           = -15,
527                 noise_threshold = 0.0,
528                 noise_params    = {
529                         offset = 0.5,
530                         scale = 0.2,
531                         spread = {x = 5, y = 5, z = 5},
532                         seed = -316,
533                         octaves = 1,
534                         persist = 0.0
535                 },
536         })
537
538         -- Silver sand
539
540         minetest.register_ore({
541                 ore_type        = "blob",
542                 ore             = "default:silver_sand",
543                 wherein         = {"default:stone"},
544                 clust_scarcity  = 16 * 16 * 16,
545                 clust_size      = 5,
546                 y_max           = 31000,
547                 y_min           = -31000,
548                 noise_threshold = 0.0,
549                 noise_params    = {
550                         offset = 0.5,
551                         scale = 0.2,
552                         spread = {x = 5, y = 5, z = 5},
553                         seed = 2316,
554                         octaves = 1,
555                         persist = 0.0
556                 },
557                 biomes = {"icesheet_ocean", "tundra", "tundra_beach", "tundra_ocean",
558                         "taiga", "taiga_ocean", "snowy_grassland", "snowy_grassland_ocean",
559                         "grassland", "grassland_dunes", "grassland_ocean", "coniferous_forest",
560                         "coniferous_forest_dunes", "coniferous_forest_ocean", "deciduous_forest",
561                         "deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert",
562                         "cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean",
563                         "rainforest", "rainforest_swamp", "rainforest_ocean", "underground",
564                         "floatland_coniferous_forest", "floatland_coniferous_forest_ocean"}
565         })
566
567         -- Dirt
568
569         minetest.register_ore({
570                 ore_type        = "blob",
571                 ore             = "default:dirt",
572                 wherein         = {"default:stone"},
573                 clust_scarcity  = 16 * 16 * 16,
574                 clust_size      = 5,
575                 y_max           = 31000,
576                 y_min           = -31,
577                 noise_threshold = 0.0,
578                 noise_params    = {
579                         offset = 0.5,
580                         scale = 0.2,
581                         spread = {x = 5, y = 5, z = 5},
582                         seed = 17676,
583                         octaves = 1,
584                         persist = 0.0
585                 },
586                 biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest",
587                         "deciduous_forest", "deciduous_forest_shore", "savanna", "savanna_shore",
588                         "rainforest", "rainforest_swamp", "floatland_coniferous_forest"}
589         })
590
591         -- Gravel
592
593         minetest.register_ore({
594                 ore_type        = "blob",
595                 ore             = "default:gravel",
596                 wherein         = {"default:stone"},
597                 clust_scarcity  = 16 * 16 * 16,
598                 clust_size      = 5,
599                 y_max           = 31000,
600                 y_min           = -31000,
601                 noise_threshold = 0.0,
602                 noise_params    = {
603                         offset = 0.5,
604                         scale = 0.2,
605                         spread = {x = 5, y = 5, z = 5},
606                         seed = 766,
607                         octaves = 1,
608                         persist = 0.0
609                 },
610                 biomes = {"icesheet_ocean", "tundra", "tundra_beach", "tundra_ocean",
611                         "taiga", "taiga_ocean", "snowy_grassland", "snowy_grassland_ocean",
612                         "grassland", "grassland_dunes", "grassland_ocean", "coniferous_forest",
613                         "coniferous_forest_dunes", "coniferous_forest_ocean", "deciduous_forest",
614                         "deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert",
615                         "cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean",
616                         "rainforest", "rainforest_swamp", "rainforest_ocean", "underground",
617                         "floatland_coniferous_forest", "floatland_coniferous_forest_ocean"}
618         })
619
620         -- Scatter ores
621
622         -- Coal
623
624         minetest.register_ore({
625                 ore_type       = "scatter",
626                 ore            = "default:stone_with_coal",
627                 wherein        = "default:stone",
628                 clust_scarcity = 8 * 8 * 8,
629                 clust_num_ores = 9,
630                 clust_size     = 3,
631                 y_max          = 31000,
632                 y_min          = 1025,
633         })
634
635         minetest.register_ore({
636                 ore_type       = "scatter",
637                 ore            = "default:stone_with_coal",
638                 wherein        = "default:stone",
639                 clust_scarcity = 8 * 8 * 8,
640                 clust_num_ores = 8,
641                 clust_size     = 3,
642                 y_max          = 64,
643                 y_min          = -127,
644         })
645
646         minetest.register_ore({
647                 ore_type       = "scatter",
648                 ore            = "default:stone_with_coal",
649                 wherein        = "default:stone",
650                 clust_scarcity = 12 * 12 * 12,
651                 clust_num_ores = 30,
652                 clust_size     = 5,
653                 y_max          = -128,
654                 y_min          = -31000,
655         })
656
657         -- Tin
658
659         minetest.register_ore({
660                 ore_type       = "scatter",
661                 ore            = "default:stone_with_tin",
662                 wherein        = "default:stone",
663                 clust_scarcity = 10 * 10 * 10,
664                 clust_num_ores = 5,
665                 clust_size     = 3,
666                 y_max          = 31000,
667                 y_min          = 1025,
668         })
669
670         minetest.register_ore({
671                 ore_type       = "scatter",
672                 ore            = "default:stone_with_tin",
673                 wherein        = "default:stone",
674                 clust_scarcity = 13 * 13 * 13,
675                 clust_num_ores = 4,
676                 clust_size     = 3,
677                 y_max          = -64,
678                 y_min          = -127,
679         })
680
681         minetest.register_ore({
682                 ore_type       = "scatter",
683                 ore            = "default:stone_with_tin",
684                 wherein        = "default:stone",
685                 clust_scarcity = 10 * 10 * 10,
686                 clust_num_ores = 5,
687                 clust_size     = 3,
688                 y_max          = -128,
689                 y_min          = -31000,
690         })
691
692         -- Copper
693
694         minetest.register_ore({
695                 ore_type       = "scatter",
696                 ore            = "default:stone_with_copper",
697                 wherein        = "default:stone",
698                 clust_scarcity = 9 * 9 * 9,
699                 clust_num_ores = 5,
700                 clust_size     = 3,
701                 y_max          = 31000,
702                 y_min          = 1025,
703         })
704
705         minetest.register_ore({
706                 ore_type       = "scatter",
707                 ore            = "default:stone_with_copper",
708                 wherein        = "default:stone",
709                 clust_scarcity = 12 * 12 * 12,
710                 clust_num_ores = 4,
711                 clust_size     = 3,
712                 y_max          = -64,
713                 y_min          = -127,
714         })
715
716         minetest.register_ore({
717                 ore_type       = "scatter",
718                 ore            = "default:stone_with_copper",
719                 wherein        = "default:stone",
720                 clust_scarcity = 9 * 9 * 9,
721                 clust_num_ores = 5,
722                 clust_size     = 3,
723                 y_max          = -128,
724                 y_min          = -31000,
725         })
726
727         -- Iron
728
729         minetest.register_ore({
730                 ore_type       = "scatter",
731                 ore            = "default:stone_with_iron",
732                 wherein        = "default:stone",
733                 clust_scarcity = 9 * 9 * 9,
734                 clust_num_ores = 12,
735                 clust_size     = 3,
736                 y_max          = 31000,
737                 y_min          = 1025,
738         })
739
740         minetest.register_ore({
741                 ore_type       = "scatter",
742                 ore            = "default:stone_with_iron",
743                 wherein        = "default:stone",
744                 clust_scarcity = 7 * 7 * 7,
745                 clust_num_ores = 5,
746                 clust_size     = 3,
747                 y_max          = -128,
748                 y_min          = -255,
749         })
750
751         minetest.register_ore({
752                 ore_type       = "scatter",
753                 ore            = "default:stone_with_iron",
754                 wherein        = "default:stone",
755                 clust_scarcity = 12 * 12 * 12,
756                 clust_num_ores = 29,
757                 clust_size     = 5,
758                 y_max          = -256,
759                 y_min          = -31000,
760         })
761
762         -- Gold
763
764         minetest.register_ore({
765                 ore_type       = "scatter",
766                 ore            = "default:stone_with_gold",
767                 wherein        = "default:stone",
768                 clust_scarcity = 13 * 13 * 13,
769                 clust_num_ores = 5,
770                 clust_size     = 3,
771                 y_max          = 31000,
772                 y_min          = 1025,
773         })
774
775         minetest.register_ore({
776                 ore_type       = "scatter",
777                 ore            = "default:stone_with_gold",
778                 wherein        = "default:stone",
779                 clust_scarcity = 15 * 15 * 15,
780                 clust_num_ores = 3,
781                 clust_size     = 2,
782                 y_max          = -256,
783                 y_min          = -511,
784         })
785
786         minetest.register_ore({
787                 ore_type       = "scatter",
788                 ore            = "default:stone_with_gold",
789                 wherein        = "default:stone",
790                 clust_scarcity = 13 * 13 * 13,
791                 clust_num_ores = 5,
792                 clust_size     = 3,
793                 y_max          = -512,
794                 y_min          = -31000,
795         })
796
797         -- Mese crystal
798
799         minetest.register_ore({
800                 ore_type       = "scatter",
801                 ore            = "default:stone_with_mese",
802                 wherein        = "default:stone",
803                 clust_scarcity = 14 * 14 * 14,
804                 clust_num_ores = 5,
805                 clust_size     = 3,
806                 y_max          = 31000,
807                 y_min          = 1025,
808         })
809
810         minetest.register_ore({
811                 ore_type       = "scatter",
812                 ore            = "default:stone_with_mese",
813                 wherein        = "default:stone",
814                 clust_scarcity = 18 * 18 * 18,
815                 clust_num_ores = 3,
816                 clust_size     = 2,
817                 y_max          = -512,
818                 y_min          = -1023,
819         })
820
821         minetest.register_ore({
822                 ore_type       = "scatter",
823                 ore            = "default:stone_with_mese",
824                 wherein        = "default:stone",
825                 clust_scarcity = 14 * 14 * 14,
826                 clust_num_ores = 5,
827                 clust_size     = 3,
828                 y_max          = -1024,
829                 y_min          = -31000,
830         })
831
832         -- Diamond
833
834         minetest.register_ore({
835                 ore_type       = "scatter",
836                 ore            = "default:stone_with_diamond",
837                 wherein        = "default:stone",
838                 clust_scarcity = 15 * 15 * 15,
839                 clust_num_ores = 4,
840                 clust_size     = 3,
841                 y_max          = 31000,
842                 y_min          = 1025,
843         })
844
845         minetest.register_ore({
846                 ore_type       = "scatter",
847                 ore            = "default:stone_with_diamond",
848                 wherein        = "default:stone",
849                 clust_scarcity = 17 * 17 * 17,
850                 clust_num_ores = 4,
851                 clust_size     = 3,
852                 y_max          = -1024,
853                 y_min          = -2047,
854         })
855
856         minetest.register_ore({
857                 ore_type       = "scatter",
858                 ore            = "default:stone_with_diamond",
859                 wherein        = "default:stone",
860                 clust_scarcity = 15 * 15 * 15,
861                 clust_num_ores = 4,
862                 clust_size     = 3,
863                 y_max          = -2048,
864                 y_min          = -31000,
865         })
866
867         -- Mese block
868
869         minetest.register_ore({
870                 ore_type       = "scatter",
871                 ore            = "default:mese",
872                 wherein        = "default:stone",
873                 clust_scarcity = 36 * 36 * 36,
874                 clust_num_ores = 3,
875                 clust_size     = 2,
876                 y_max          = 31000,
877                 y_min          = 1025,
878         })
879
880         minetest.register_ore({
881                 ore_type       = "scatter",
882                 ore            = "default:mese",
883                 wherein        = "default:stone",
884                 clust_scarcity = 36 * 36 * 36,
885                 clust_num_ores = 3,
886                 clust_size     = 2,
887                 y_max          = -2048,
888                 y_min          = -4095,
889         })
890
891         minetest.register_ore({
892                 ore_type       = "scatter",
893                 ore            = "default:mese",
894                 wherein        = "default:stone",
895                 clust_scarcity = 28 * 28 * 28,
896                 clust_num_ores = 5,
897                 clust_size     = 3,
898                 y_max          = -4096,
899                 y_min          = -31000,
900         })
901 end
902
903
904 --
905 -- Register biomes
906 --
907
908 -- All mapgens except mgv6
909
910 function default.register_biomes(upper_limit)
911
912         -- Icesheet
913
914         minetest.register_biome({
915                 name = "icesheet",
916                 node_dust = "default:snowblock",
917                 node_top = "default:snowblock",
918                 depth_top = 1,
919                 node_filler = "default:snowblock",
920                 depth_filler = 3,
921                 node_stone = "default:cave_ice",
922                 node_water_top = "default:ice",
923                 depth_water_top = 10,
924                 node_river_water = "default:ice",
925                 node_riverbed = "default:gravel",
926                 depth_riverbed = 2,
927                 y_max = upper_limit,
928                 y_min = -8,
929                 heat_point = 0,
930                 humidity_point = 73,
931         })
932
933         minetest.register_biome({
934                 name = "icesheet_ocean",
935                 node_dust = "default:snowblock",
936                 node_top = "default:sand",
937                 depth_top = 1,
938                 node_filler = "default:sand",
939                 depth_filler = 3,
940                 node_water_top = "default:ice",
941                 depth_water_top = 10,
942                 y_max = -9,
943                 y_min = -112,
944                 heat_point = 0,
945                 humidity_point = 73,
946         })
947
948         -- Tundra
949
950         minetest.register_biome({
951                 name = "tundra_highland",
952                 node_dust = "default:snow",
953                 node_riverbed = "default:gravel",
954                 depth_riverbed = 2,
955                 y_max = upper_limit,
956                 y_min = 47,
957                 heat_point = 0,
958                 humidity_point = 40,
959         })
960
961         minetest.register_biome({
962                 name = "tundra",
963                 node_top = "default:permafrost_with_stones",
964                 depth_top = 1,
965                 node_filler = "default:permafrost",
966                 depth_filler = 1,
967                 node_riverbed = "default:gravel",
968                 depth_riverbed = 2,
969                 vertical_blend = 4,
970                 y_max = 46,
971                 y_min = 2,
972                 heat_point = 0,
973                 humidity_point = 40,
974         })
975
976         minetest.register_biome({
977                 name = "tundra_beach",
978                 node_top = "default:gravel",
979                 depth_top = 1,
980                 node_filler = "default:gravel",
981                 depth_filler = 2,
982                 node_riverbed = "default:gravel",
983                 depth_riverbed = 2,
984                 vertical_blend = 1,
985                 y_max = 1,
986                 y_min = -3,
987                 heat_point = 0,
988                 humidity_point = 40,
989         })
990
991         minetest.register_biome({
992                 name = "tundra_ocean",
993                 node_top = "default:sand",
994                 depth_top = 1,
995                 node_filler = "default:sand",
996                 depth_filler = 3,
997                 node_riverbed = "default:gravel",
998                 depth_riverbed = 2,
999                 vertical_blend = 1,
1000                 y_max = -4,
1001                 y_min = -112,
1002                 heat_point = 0,
1003                 humidity_point = 40,
1004         })
1005
1006         -- Taiga
1007
1008         minetest.register_biome({
1009                 name = "taiga",
1010                 node_dust = "default:snow",
1011                 node_top = "default:dirt_with_snow",
1012                 depth_top = 1,
1013                 node_filler = "default:dirt",
1014                 depth_filler = 3,
1015                 node_riverbed = "default:sand",
1016                 depth_riverbed = 2,
1017                 y_max = upper_limit,
1018                 y_min = 4,
1019                 heat_point = 25,
1020                 humidity_point = 70,
1021         })
1022
1023         minetest.register_biome({
1024                 name = "taiga_ocean",
1025                 node_dust = "default:snow",
1026                 node_top = "default:sand",
1027                 depth_top = 1,
1028                 node_filler = "default:sand",
1029                 depth_filler = 3,
1030                 node_riverbed = "default:sand",
1031                 depth_riverbed = 2,
1032                 vertical_blend = 1,
1033                 y_max = 3,
1034                 y_min = -112,
1035                 heat_point = 25,
1036                 humidity_point = 70,
1037         })
1038
1039         -- Snowy grassland
1040
1041         minetest.register_biome({
1042                 name = "snowy_grassland",
1043                 node_dust = "default:snow",
1044                 node_top = "default:dirt_with_snow",
1045                 depth_top = 1,
1046                 node_filler = "default:dirt",
1047                 depth_filler = 1,
1048                 node_riverbed = "default:sand",
1049                 depth_riverbed = 2,
1050                 y_max = upper_limit,
1051                 y_min = 4,
1052                 heat_point = 20,
1053                 humidity_point = 35,
1054         })
1055
1056         minetest.register_biome({
1057                 name = "snowy_grassland_ocean",
1058                 node_dust = "default:snow",
1059                 node_top = "default:sand",
1060                 depth_top = 1,
1061                 node_filler = "default:sand",
1062                 depth_filler = 3,
1063                 node_riverbed = "default:sand",
1064                 depth_riverbed = 2,
1065                 vertical_blend = 1,
1066                 y_max = 3,
1067                 y_min = -112,
1068                 heat_point = 20,
1069                 humidity_point = 35,
1070         })
1071
1072         -- Grassland
1073
1074         minetest.register_biome({
1075                 name = "grassland",
1076                 node_top = "default:dirt_with_grass",
1077                 depth_top = 1,
1078                 node_filler = "default:dirt",
1079                 depth_filler = 1,
1080                 node_riverbed = "default:sand",
1081                 depth_riverbed = 2,
1082                 y_max = upper_limit,
1083                 y_min = 6,
1084                 heat_point = 50,
1085                 humidity_point = 35,
1086         })
1087
1088         minetest.register_biome({
1089                 name = "grassland_dunes",
1090                 node_top = "default:sand",
1091                 depth_top = 1,
1092                 node_filler = "default:sand",
1093                 depth_filler = 2,
1094                 node_riverbed = "default:sand",
1095                 depth_riverbed = 2,
1096                 vertical_blend = 1,
1097                 y_max = 5,
1098                 y_min = 4,
1099                 heat_point = 50,
1100                 humidity_point = 35,
1101         })
1102
1103         minetest.register_biome({
1104                 name = "grassland_ocean",
1105                 node_top = "default:sand",
1106                 depth_top = 1,
1107                 node_filler = "default:sand",
1108                 depth_filler = 3,
1109                 node_riverbed = "default:sand",
1110                 depth_riverbed = 2,
1111                 y_max = 3,
1112                 y_min = -112,
1113                 heat_point = 50,
1114                 humidity_point = 35,
1115         })
1116
1117         -- Coniferous forest
1118
1119         minetest.register_biome({
1120                 name = "coniferous_forest",
1121                 node_top = "default:dirt_with_coniferous_litter",
1122                 depth_top = 1,
1123                 node_filler = "default:dirt",
1124                 depth_filler = 3,
1125                 node_riverbed = "default:sand",
1126                 depth_riverbed = 2,
1127                 y_max = upper_limit,
1128                 y_min = 6,
1129                 heat_point = 45,
1130                 humidity_point = 70,
1131         })
1132
1133         minetest.register_biome({
1134                 name = "coniferous_forest_dunes",
1135                 node_top = "default:sand",
1136                 depth_top = 1,
1137                 node_filler = "default:sand",
1138                 depth_filler = 3,
1139                 node_riverbed = "default:sand",
1140                 depth_riverbed = 2,
1141                 vertical_blend = 1,
1142                 y_max = 5,
1143                 y_min = 4,
1144                 heat_point = 45,
1145                 humidity_point = 70,
1146         })
1147
1148         minetest.register_biome({
1149                 name = "coniferous_forest_ocean",
1150                 node_top = "default:sand",
1151                 depth_top = 1,
1152                 node_filler = "default:sand",
1153                 depth_filler = 3,
1154                 node_riverbed = "default:sand",
1155                 depth_riverbed = 2,
1156                 y_max = 3,
1157                 y_min = -112,
1158                 heat_point = 45,
1159                 humidity_point = 70,
1160         })
1161
1162         -- Deciduous forest
1163
1164         minetest.register_biome({
1165                 name = "deciduous_forest",
1166                 node_top = "default:dirt_with_grass",
1167                 depth_top = 1,
1168                 node_filler = "default:dirt",
1169                 depth_filler = 3,
1170                 node_riverbed = "default:sand",
1171                 depth_riverbed = 2,
1172                 y_max = upper_limit,
1173                 y_min = 1,
1174                 heat_point = 60,
1175                 humidity_point = 68,
1176         })
1177
1178         minetest.register_biome({
1179                 name = "deciduous_forest_shore",
1180                 node_top = "default:dirt",
1181                 depth_top = 1,
1182                 node_filler = "default:dirt",
1183                 depth_filler = 3,
1184                 node_riverbed = "default:sand",
1185                 depth_riverbed = 2,
1186                 y_max = 0,
1187                 y_min = -1,
1188                 heat_point = 60,
1189                 humidity_point = 68,
1190         })
1191
1192         minetest.register_biome({
1193                 name = "deciduous_forest_ocean",
1194                 node_top = "default:sand",
1195                 depth_top = 1,
1196                 node_filler = "default:sand",
1197                 depth_filler = 3,
1198                 node_riverbed = "default:sand",
1199                 depth_riverbed = 2,
1200                 vertical_blend = 1,
1201                 y_max = -2,
1202                 y_min = -112,
1203                 heat_point = 60,
1204                 humidity_point = 68,
1205         })
1206
1207         -- Desert
1208
1209         minetest.register_biome({
1210                 name = "desert",
1211                 node_top = "default:desert_sand",
1212                 depth_top = 1,
1213                 node_filler = "default:desert_sand",
1214                 depth_filler = 1,
1215                 node_stone = "default:desert_stone",
1216                 node_riverbed = "default:sand",
1217                 depth_riverbed = 2,
1218                 y_max = upper_limit,
1219                 y_min = 4,
1220                 heat_point = 92,
1221                 humidity_point = 16,
1222         })
1223
1224         minetest.register_biome({
1225                 name = "desert_ocean",
1226                 node_top = "default:sand",
1227                 depth_top = 1,
1228                 node_filler = "default:sand",
1229                 depth_filler = 3,
1230                 node_stone = "default:desert_stone",
1231                 node_riverbed = "default:sand",
1232                 depth_riverbed = 2,
1233                 vertical_blend = 1,
1234                 y_max = 3,
1235                 y_min = -112,
1236                 heat_point = 92,
1237                 humidity_point = 16,
1238         })
1239
1240         -- Sandstone desert
1241
1242         minetest.register_biome({
1243                 name = "sandstone_desert",
1244                 node_top = "default:sand",
1245                 depth_top = 1,
1246                 node_filler = "default:sand",
1247                 depth_filler = 1,
1248                 node_stone = "default:sandstone",
1249                 node_riverbed = "default:sand",
1250                 depth_riverbed = 2,
1251                 y_max = upper_limit,
1252                 y_min = 4,
1253                 heat_point = 60,
1254                 humidity_point = 0,
1255         })
1256
1257         minetest.register_biome({
1258                 name = "sandstone_desert_ocean",
1259                 node_top = "default:sand",
1260                 depth_top = 1,
1261                 node_filler = "default:sand",
1262                 depth_filler = 3,
1263                 node_stone = "default:sandstone",
1264                 node_riverbed = "default:sand",
1265                 depth_riverbed = 2,
1266                 y_max = 3,
1267                 y_min = -112,
1268                 heat_point = 60,
1269                 humidity_point = 0,
1270         })
1271
1272         -- Cold desert
1273
1274         minetest.register_biome({
1275                 name = "cold_desert",
1276                 node_top = "default:silver_sand",
1277                 depth_top = 1,
1278                 node_filler = "default:silver_sand",
1279                 depth_filler = 1,
1280                 node_riverbed = "default:sand",
1281                 depth_riverbed = 2,
1282                 y_max = upper_limit,
1283                 y_min = 4,
1284                 heat_point = 40,
1285                 humidity_point = 0,
1286         })
1287
1288         minetest.register_biome({
1289                 name = "cold_desert_ocean",
1290                 node_top = "default:sand",
1291                 depth_top = 1,
1292                 node_filler = "default:sand",
1293                 depth_filler = 3,
1294                 node_riverbed = "default:sand",
1295                 depth_riverbed = 2,
1296                 vertical_blend = 1,
1297                 y_max = 3,
1298                 y_min = -112,
1299                 heat_point = 40,
1300                 humidity_point = 0,
1301         })
1302
1303         -- Savanna
1304
1305         minetest.register_biome({
1306                 name = "savanna",
1307                 node_top = "default:dirt_with_dry_grass",
1308                 depth_top = 1,
1309                 node_filler = "default:dirt",
1310                 depth_filler = 1,
1311                 node_riverbed = "default:sand",
1312                 depth_riverbed = 2,
1313                 y_max = upper_limit,
1314                 y_min = 1,
1315                 heat_point = 89,
1316                 humidity_point = 42,
1317         })
1318
1319         minetest.register_biome({
1320                 name = "savanna_shore",
1321                 node_top = "default:dirt",
1322                 depth_top = 1,
1323                 node_filler = "default:dirt",
1324                 depth_filler = 3,
1325                 node_riverbed = "default:sand",
1326                 depth_riverbed = 2,
1327                 y_max = 0,
1328                 y_min = -1,
1329                 heat_point = 89,
1330                 humidity_point = 42,
1331         })
1332
1333         minetest.register_biome({
1334                 name = "savanna_ocean",
1335                 node_top = "default:sand",
1336                 depth_top = 1,
1337                 node_filler = "default:sand",
1338                 depth_filler = 3,
1339                 node_riverbed = "default:sand",
1340                 depth_riverbed = 2,
1341                 vertical_blend = 1,
1342                 y_max = -2,
1343                 y_min = -112,
1344                 heat_point = 89,
1345                 humidity_point = 42,
1346         })
1347
1348         -- Rainforest
1349
1350         minetest.register_biome({
1351                 name = "rainforest",
1352                 node_top = "default:dirt_with_rainforest_litter",
1353                 depth_top = 1,
1354                 node_filler = "default:dirt",
1355                 depth_filler = 3,
1356                 node_riverbed = "default:sand",
1357                 depth_riverbed = 2,
1358                 y_max = upper_limit,
1359                 y_min = 1,
1360                 heat_point = 86,
1361                 humidity_point = 65,
1362         })
1363
1364         minetest.register_biome({
1365                 name = "rainforest_swamp",
1366                 node_top = "default:dirt",
1367                 depth_top = 1,
1368                 node_filler = "default:dirt",
1369                 depth_filler = 3,
1370                 node_riverbed = "default:sand",
1371                 depth_riverbed = 2,
1372                 y_max = 0,
1373                 y_min = -1,
1374                 heat_point = 86,
1375                 humidity_point = 65,
1376         })
1377
1378         minetest.register_biome({
1379                 name = "rainforest_ocean",
1380                 node_top = "default:sand",
1381                 depth_top = 1,
1382                 node_filler = "default:sand",
1383                 depth_filler = 3,
1384                 node_riverbed = "default:sand",
1385                 depth_riverbed = 2,
1386                 vertical_blend = 1,
1387                 y_max = -2,
1388                 y_min = -112,
1389                 heat_point = 86,
1390                 humidity_point = 65,
1391         })
1392
1393         -- Underground
1394
1395         minetest.register_biome({
1396                 name = "underground",
1397                 y_max = -113,
1398                 y_min = -31000,
1399                 heat_point = 50,
1400                 humidity_point = 50,
1401         })
1402 end
1403
1404
1405 -- Biomes for floatlands
1406
1407 -- TODO Temporary simple biomes to be replaced by special floatland biomes later.
1408
1409 function default.register_floatland_biomes(floatland_level, shadow_limit)
1410
1411         minetest.register_biome({
1412                 name = "floatland_grassland",
1413                 node_top = "default:dirt_with_grass",
1414                 depth_top = 1,
1415                 node_filler = "default:dirt",
1416                 depth_filler = 1,
1417                 y_max = 31000,
1418                 y_min = floatland_level + 2,
1419                 heat_point = 50,
1420                 humidity_point = 25,
1421         })
1422
1423         minetest.register_biome({
1424                 name = "floatland_coniferous_forest",
1425                 node_top = "default:dirt_with_coniferous_litter",
1426                 depth_top = 1,
1427                 node_filler = "default:dirt",
1428                 depth_filler = 3,
1429                 y_max = 31000,
1430                 y_min = floatland_level + 2,
1431                 heat_point = 50,
1432                 humidity_point = 75,
1433         })
1434
1435         minetest.register_biome({
1436                 name = "floatland_ocean",
1437                 node_top = "default:sand",
1438                 depth_top = 1,
1439                 node_filler = "default:sand",
1440                 depth_filler = 3,
1441                 y_max = floatland_level + 1,
1442                 y_min = shadow_limit,
1443                 heat_point = 50,
1444                 humidity_point = 50,
1445         })
1446 end
1447
1448
1449 --
1450 -- Register decorations
1451 --
1452
1453 -- Mgv6
1454
1455 function default.register_mgv6_decorations()
1456
1457         -- Papyrus
1458
1459         minetest.register_decoration({
1460                 name = "default:papyrus",
1461                 deco_type = "simple",
1462                 place_on = {"default:dirt_with_grass"},
1463                 sidelen = 16,
1464                 noise_params = {
1465                         offset = -0.3,
1466                         scale = 0.7,
1467                         spread = {x = 100, y = 100, z = 100},
1468                         seed = 354,
1469                         octaves = 3,
1470                         persist = 0.7
1471                 },
1472                 y_max = 1,
1473                 y_min = 1,
1474                 decoration = "default:papyrus",
1475                 height = 2,
1476                 height_max = 4,
1477                 spawn_by = "default:water_source",
1478                 num_spawn_by = 1,
1479         })
1480
1481         -- Cacti
1482
1483         minetest.register_decoration({
1484                 name = "default:cactus",
1485                 deco_type = "simple",
1486                 place_on = {"default:desert_sand"},
1487                 sidelen = 16,
1488                 noise_params = {
1489                         offset = -0.012,
1490                         scale = 0.024,
1491                         spread = {x = 100, y = 100, z = 100},
1492                         seed = 230,
1493                         octaves = 3,
1494                         persist = 0.6
1495                 },
1496                 y_max = 30,
1497                 y_min = 1,
1498                 decoration = "default:cactus",
1499                 height = 3,
1500                 height_max = 4,
1501         })
1502
1503         -- Long grasses
1504
1505         for length = 1, 5 do
1506                 minetest.register_decoration({
1507                         name = "default:grass_"..length,
1508                         deco_type = "simple",
1509                         place_on = {"default:dirt_with_grass"},
1510                         sidelen = 16,
1511                         noise_params = {
1512                                 offset = 0,
1513                                 scale = 0.007,
1514                                 spread = {x = 100, y = 100, z = 100},
1515                                 seed = 329,
1516                                 octaves = 3,
1517                                 persist = 0.6
1518                         },
1519                         y_max = 30,
1520                         y_min = 1,
1521                         decoration = "default:grass_"..length,
1522                 })
1523         end
1524
1525         -- Dry shrubs
1526
1527         minetest.register_decoration({
1528                 name = "default:dry_shrub",
1529                 deco_type = "simple",
1530                 place_on = {"default:desert_sand", "default:dirt_with_snow"},
1531                 sidelen = 16,
1532                 noise_params = {
1533                         offset = 0,
1534                         scale = 0.035,
1535                         spread = {x = 100, y = 100, z = 100},
1536                         seed = 329,
1537                         octaves = 3,
1538                         persist = 0.6
1539                 },
1540                 y_max = 30,
1541                 y_min = 1,
1542                 decoration = "default:dry_shrub",
1543                 param2 = 4,
1544         })
1545 end
1546
1547
1548 -- All mapgens except mgv6
1549
1550 local function register_grass_decoration(offset, scale, length)
1551         minetest.register_decoration({
1552                 name = "default:grass_" .. length,
1553                 deco_type = "simple",
1554                 place_on = {"default:dirt_with_grass"},
1555                 sidelen = 16,
1556                 noise_params = {
1557                         offset = offset,
1558                         scale = scale,
1559                         spread = {x = 200, y = 200, z = 200},
1560                         seed = 329,
1561                         octaves = 3,
1562                         persist = 0.6
1563                 },
1564                 biomes = {"grassland", "deciduous_forest", "floatland_grassland"},
1565                 y_max = 31000,
1566                 y_min = 1,
1567                 decoration = "default:grass_" .. length,
1568         })
1569 end
1570
1571 local function register_dry_grass_decoration(offset, scale, length)
1572         minetest.register_decoration({
1573                 name = "default:dry_grass_" .. length,
1574                 deco_type = "simple",
1575                 place_on = {"default:dirt_with_dry_grass"},
1576                 sidelen = 16,
1577                 noise_params = {
1578                         offset = offset,
1579                         scale = scale,
1580                         spread = {x = 200, y = 200, z = 200},
1581                         seed = 329,
1582                         octaves = 3,
1583                         persist = 0.6
1584                 },
1585                 biomes = {"savanna"},
1586                 y_max = 31000,
1587                 y_min = 1,
1588                 decoration = "default:dry_grass_" .. length,
1589         })
1590 end
1591
1592 local function register_fern_decoration(seed, length)
1593         minetest.register_decoration({
1594                 name = "default:fern_" .. length,
1595                 deco_type = "simple",
1596                 place_on = {"default:dirt_with_coniferous_litter"},
1597                 sidelen = 16,
1598                 noise_params = {
1599                         offset = 0,
1600                         scale = 0.2,
1601                         spread = {x = 100, y = 100, z = 100},
1602                         seed = seed,
1603                         octaves = 3,
1604                         persist = 0.7
1605                 },
1606                 biomes = {"coniferous_forest", "floatland_coniferous_forest"},
1607                 y_max = 31000,
1608                 y_min = 6,
1609                 decoration = "default:fern_" .. length,
1610         })
1611 end
1612
1613
1614 function default.register_decorations()
1615
1616         -- Apple tree and log
1617
1618         minetest.register_decoration({
1619                 name = "default:apple_tree",
1620                 deco_type = "schematic",
1621                 place_on = {"default:dirt_with_grass"},
1622                 sidelen = 16,
1623                 noise_params = {
1624                         offset = 0.024,
1625                         scale = 0.015,
1626                         spread = {x = 250, y = 250, z = 250},
1627                         seed = 2,
1628                         octaves = 3,
1629                         persist = 0.66
1630                 },
1631                 biomes = {"deciduous_forest"},
1632                 y_max = 31000,
1633                 y_min = 1,
1634                 schematic = minetest.get_modpath("default") .. "/schematics/apple_tree.mts",
1635                 flags = "place_center_x, place_center_z",
1636                 rotation = "random",
1637         })
1638
1639         minetest.register_decoration({
1640                 name = "default:apple_log",
1641                 deco_type = "schematic",
1642                 place_on = {"default:dirt_with_grass"},
1643                 place_offset_y = 1,
1644                 sidelen = 16,
1645                 noise_params = {
1646                         offset = 0.0012,
1647                         scale = 0.0007,
1648                         spread = {x = 250, y = 250, z = 250},
1649                         seed = 2,
1650                         octaves = 3,
1651                         persist = 0.66
1652                 },
1653                 biomes = {"deciduous_forest"},
1654                 y_max = 31000,
1655                 y_min = 1,
1656                 schematic = minetest.get_modpath("default") .. "/schematics/apple_log.mts",
1657                 flags = "place_center_x",
1658                 rotation = "random",
1659                 spawn_by = "default:dirt_with_grass",
1660                 num_spawn_by = 8,
1661         })
1662
1663         -- Emergent jungle tree
1664         -- Due to 32 node height, altitude is limited and prescence depends on chunksize
1665
1666         local chunksize = tonumber(minetest.get_mapgen_setting("chunksize"))
1667         if chunksize >= 5 then
1668                 minetest.register_decoration({
1669                         name = "default:emergent_jungle_tree",
1670                         deco_type = "schematic",
1671                         place_on = {"default:dirt_with_rainforest_litter"},
1672                         sidelen = 80,
1673                         noise_params = {
1674                                 offset = 0.0,
1675                                 scale = 0.0025,
1676                                 spread = {x = 250, y = 250, z = 250},
1677                                 seed = 2685,
1678                                 octaves = 3,
1679                                 persist = 0.7
1680                         },
1681                         biomes = {"rainforest"},
1682                         y_max = 32,
1683                         y_min = 1,
1684                         schematic = minetest.get_modpath("default") ..
1685                                         "/schematics/emergent_jungle_tree.mts",
1686                         flags = "place_center_x, place_center_z",
1687                         rotation = "random",
1688                         place_offset_y = -4,
1689                 })
1690         end
1691
1692         -- Jungle tree and log
1693
1694         minetest.register_decoration({
1695                 name = "default:jungle_tree",
1696                 deco_type = "schematic",
1697                 place_on = {"default:dirt_with_rainforest_litter", "default:dirt"},
1698                 sidelen = 80,
1699                 fill_ratio = 0.1,
1700                 biomes = {"rainforest", "rainforest_swamp"},
1701                 y_max = 31000,
1702                 y_min = -1,
1703                 schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts",
1704                 flags = "place_center_x, place_center_z",
1705                 rotation = "random",
1706         })
1707
1708         minetest.register_decoration({
1709                 name = "default:jungle_log",
1710                 deco_type = "schematic",
1711                 place_on = {"default:dirt_with_rainforest_litter"},
1712                 place_offset_y = 1,
1713                 sidelen = 80,
1714                 fill_ratio = 0.005,
1715                 biomes = {"rainforest", "rainforest_swamp"},
1716                 y_max = 31000,
1717                 y_min = 1,
1718                 schematic = minetest.get_modpath("default") .. "/schematics/jungle_log.mts",
1719                 flags = "place_center_x",
1720                 rotation = "random",
1721                 spawn_by = "default:dirt_with_rainforest_litter",
1722                 num_spawn_by = 8,
1723         })
1724
1725         -- Taiga and temperate coniferous forest pine tree, small pine tree and log
1726
1727         minetest.register_decoration({
1728                 name = "default:pine_tree",
1729                 deco_type = "schematic",
1730                 place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"},
1731                 sidelen = 16,
1732                 noise_params = {
1733                         offset = 0.010,
1734                         scale = 0.048,
1735                         spread = {x = 250, y = 250, z = 250},
1736                         seed = 2,
1737                         octaves = 3,
1738                         persist = 0.66
1739                 },
1740                 biomes = {"taiga", "coniferous_forest", "floatland_coniferous_forest"},
1741                 y_max = 31000,
1742                 y_min = 4,
1743                 schematic = minetest.get_modpath("default") .. "/schematics/pine_tree.mts",
1744                 flags = "place_center_x, place_center_z",
1745         })
1746
1747         minetest.register_decoration({
1748                 name = "default:small_pine_tree",
1749                 deco_type = "schematic",
1750                 place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"},
1751                 sidelen = 16,
1752                 noise_params = {
1753                         offset = 0.010,
1754                         scale = -0.048,
1755                         spread = {x = 250, y = 250, z = 250},
1756                         seed = 2,
1757                         octaves = 3,
1758                         persist = 0.66
1759                 },
1760                 biomes = {"taiga", "coniferous_forest", "floatland_coniferous_forest"},
1761                 y_max = 31000,
1762                 y_min = 4,
1763                 schematic = minetest.get_modpath("default") .. "/schematics/small_pine_tree.mts",
1764                 flags = "place_center_x, place_center_z",
1765         })
1766
1767         minetest.register_decoration({
1768                 name = "default:pine_log",
1769                 deco_type = "schematic",
1770                 place_on = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"},
1771                 place_offset_y = 1,
1772                 sidelen = 80,
1773                 fill_ratio = 0.0018,
1774                 biomes = {"taiga", "coniferous_forest", "floatland_coniferous_forest"},
1775                 y_max = 31000,
1776                 y_min = 4,
1777                 schematic = minetest.get_modpath("default") .. "/schematics/pine_log.mts",
1778                 flags = "place_center_x",
1779                 rotation = "random",
1780                 spawn_by = {"default:dirt_with_snow", "default:dirt_with_coniferous_litter"},
1781                 num_spawn_by = 8,
1782         })
1783
1784         -- Acacia tree and log
1785
1786         minetest.register_decoration({
1787                 name = "default:acacia_tree",
1788                 deco_type = "schematic",
1789                 place_on = {"default:dirt_with_dry_grass"},
1790                 sidelen = 16,
1791                 noise_params = {
1792                         offset = 0,
1793                         scale = 0.002,
1794                         spread = {x = 250, y = 250, z = 250},
1795                         seed = 2,
1796                         octaves = 3,
1797                         persist = 0.66
1798                 },
1799                 biomes = {"savanna"},
1800                 y_max = 31000,
1801                 y_min = 1,
1802                 schematic = minetest.get_modpath("default") .. "/schematics/acacia_tree.mts",
1803                 flags = "place_center_x, place_center_z",
1804                 rotation = "random",
1805         })
1806
1807         minetest.register_decoration({
1808                 name = "default:acacia_log",
1809                 deco_type = "schematic",
1810                 place_on = {"default:dirt_with_dry_grass"},
1811                 place_offset_y = 1,
1812                 sidelen = 16,
1813                 noise_params = {
1814                         offset = 0,
1815                         scale = 0.001,
1816                         spread = {x = 250, y = 250, z = 250},
1817                         seed = 2,
1818                         octaves = 3,
1819                         persist = 0.66
1820                 },
1821                 biomes = {"savanna"},
1822                 y_max = 31000,
1823                 y_min = 1,
1824                 schematic = minetest.get_modpath("default") .. "/schematics/acacia_log.mts",
1825                 flags = "place_center_x",
1826                 rotation = "random",
1827                 spawn_by = "default:dirt_with_dry_grass",
1828                 num_spawn_by = 8,
1829         })
1830
1831         -- Aspen tree and log
1832
1833         minetest.register_decoration({
1834                 name = "default:aspen_tree",
1835                 deco_type = "schematic",
1836                 place_on = {"default:dirt_with_grass"},
1837                 sidelen = 16,
1838                 noise_params = {
1839                         offset = 0.0,
1840                         scale = -0.015,
1841                         spread = {x = 250, y = 250, z = 250},
1842                         seed = 2,
1843                         octaves = 3,
1844                         persist = 0.66
1845                 },
1846                 biomes = {"deciduous_forest"},
1847                 y_max = 31000,
1848                 y_min = 1,
1849                 schematic = minetest.get_modpath("default") .. "/schematics/aspen_tree.mts",
1850                 flags = "place_center_x, place_center_z",
1851         })
1852
1853         minetest.register_decoration({
1854                 name = "default:aspen_log",
1855                 deco_type = "schematic",
1856                 place_on = {"default:dirt_with_grass"},
1857                 place_offset_y = 1,
1858                 sidelen = 16,
1859                 noise_params = {
1860                         offset = 0.0,
1861                         scale = -0.0008,
1862                         spread = {x = 250, y = 250, z = 250},
1863                         seed = 2,
1864                         octaves = 3,
1865                         persist = 0.66
1866                 },
1867                 biomes = {"deciduous_forest"},
1868                 y_max = 31000,
1869                 y_min = 1,
1870                 schematic = minetest.get_modpath("default") .. "/schematics/aspen_log.mts",
1871                 flags = "place_center_x",
1872                 rotation = "random",
1873                 spawn_by = "default:dirt_with_grass",
1874                 num_spawn_by = 8,
1875         })
1876
1877         -- Large cactus
1878
1879         minetest.register_decoration({
1880                 name = "default:large_cactus",
1881                 deco_type = "schematic",
1882                 place_on = {"default:desert_sand"},
1883                 sidelen = 16,
1884                 noise_params = {
1885                         offset = -0.0003,
1886                         scale = 0.0009,
1887                         spread = {x = 200, y = 200, z = 200},
1888                         seed = 230,
1889                         octaves = 3,
1890                         persist = 0.6
1891                 },
1892                 biomes = {"desert"},
1893                 y_max = 31000,
1894                 y_min = 4,
1895                 schematic = minetest.get_modpath("default") .. "/schematics/large_cactus.mts",
1896                 flags = "place_center_x",
1897                 rotation = "random",
1898         })
1899
1900         -- Cactus
1901
1902         minetest.register_decoration({
1903                 name = "default:cactus",
1904                 deco_type = "simple",
1905                 place_on = {"default:desert_sand"},
1906                 sidelen = 16,
1907                 noise_params = {
1908                         offset = -0.0003,
1909                         scale = 0.0009,
1910                         spread = {x = 200, y = 200, z = 200},
1911                         seed = 230,
1912                         octaves = 3,
1913                         persist = 0.6
1914                 },
1915                 biomes = {"desert"},
1916                 y_max = 31000,
1917                 y_min = 4,
1918                 decoration = "default:cactus",
1919                 height = 2,
1920                 height_max = 5,
1921         })
1922
1923         -- Papyrus
1924
1925         minetest.register_decoration({
1926                 name = "default:papyrus",
1927                 deco_type = "schematic",
1928                 place_on = {"default:dirt"},
1929                 sidelen = 16,
1930                 noise_params = {
1931                         offset = -0.3,
1932                         scale = 0.7,
1933                         spread = {x = 200, y = 200, z = 200},
1934                         seed = 354,
1935                         octaves = 3,
1936                         persist = 0.7
1937                 },
1938                 biomes = {"savanna_shore"},
1939                 y_max = 0,
1940                 y_min = 0,
1941                 schematic = minetest.get_modpath("default") .. "/schematics/papyrus.mts",
1942         })
1943
1944         -- Bush
1945
1946         minetest.register_decoration({
1947                 name = "default:bush",
1948                 deco_type = "schematic",
1949                 place_on = {"default:dirt_with_grass"},
1950                 sidelen = 16,
1951                 noise_params = {
1952                         offset = -0.004,
1953                         scale = 0.01,
1954                         spread = {x = 100, y = 100, z = 100},
1955                         seed = 137,
1956                         octaves = 3,
1957                         persist = 0.7,
1958                 },
1959                 biomes = {"grassland", "deciduous_forest",
1960                         "floatland_grassland"},
1961                 y_max = 31000,
1962                 y_min = 1,
1963                 schematic = minetest.get_modpath("default") .. "/schematics/bush.mts",
1964                 flags = "place_center_x, place_center_z",
1965         })
1966
1967         -- Acacia bush
1968
1969         minetest.register_decoration({
1970                 name = "default:acacia_bush",
1971                 deco_type = "schematic",
1972                 place_on = {"default:dirt_with_dry_grass"},
1973                 sidelen = 16,
1974                 noise_params = {
1975                         offset = -0.004,
1976                         scale = 0.01,
1977                         spread = {x = 100, y = 100, z = 100},
1978                         seed = 90155,
1979                         octaves = 3,
1980                         persist = 0.7,
1981                 },
1982                 biomes = {"savanna"},
1983                 y_max = 31000,
1984                 y_min = 1,
1985                 schematic = minetest.get_modpath("default") .. "/schematics/acacia_bush.mts",
1986                 flags = "place_center_x, place_center_z",
1987         })
1988
1989         -- Pine bush
1990
1991         minetest.register_decoration({
1992                 name = "default:pine_bush",
1993                 deco_type = "schematic",
1994                 place_on = {"default:dirt_with_snow"},
1995                 sidelen = 16,
1996                 noise_params = {
1997                         offset = -0.004,
1998                         scale = 0.01,
1999                         spread = {x = 100, y = 100, z = 100},
2000                         seed = 137,
2001                         octaves = 3,
2002                         persist = 0.7,
2003                 },
2004                 biomes = {"taiga", "snowy_grassland"},
2005                 y_max = 31000,
2006                 y_min = 4,
2007                 schematic = minetest.get_modpath("default") .. "/schematics/pine_bush.mts",
2008                 flags = "place_center_x, place_center_z",
2009         })
2010
2011         -- Grasses
2012
2013         register_grass_decoration(-0.03,  0.09,  5)
2014         register_grass_decoration(-0.015, 0.075, 4)
2015         register_grass_decoration(0,      0.06,  3)
2016         register_grass_decoration(0.015,  0.045, 2)
2017         register_grass_decoration(0.03,   0.03,  1)
2018
2019         -- Dry grasses
2020
2021         register_dry_grass_decoration(0.01, 0.05,  5)
2022         register_dry_grass_decoration(0.03, 0.03,  4)
2023         register_dry_grass_decoration(0.05, 0.01,  3)
2024         register_dry_grass_decoration(0.07, -0.01, 2)
2025         register_dry_grass_decoration(0.09, -0.03, 1)
2026
2027         -- Ferns
2028
2029         register_fern_decoration(14936, 3)
2030         register_fern_decoration(801,   2)
2031         register_fern_decoration(5,     1)
2032
2033         -- Junglegrass
2034
2035         minetest.register_decoration({
2036                 name = "default:junglegrass",
2037                 deco_type = "simple",
2038                 place_on = {"default:dirt_with_rainforest_litter"},
2039                 sidelen = 80,
2040                 fill_ratio = 0.1,
2041                 biomes = {"rainforest"},
2042                 y_max = 31000,
2043                 y_min = 1,
2044                 decoration = "default:junglegrass",
2045         })
2046
2047         -- Dry shrub
2048
2049         minetest.register_decoration({
2050                 name = "default:dry_shrub",
2051                 deco_type = "simple",
2052                 place_on = {"default:desert_sand",
2053                         "default:sand", "default:silver_sand"},
2054                 sidelen = 16,
2055                 noise_params = {
2056                         offset = 0,
2057                         scale = 0.02,
2058                         spread = {x = 200, y = 200, z = 200},
2059                         seed = 329,
2060                         octaves = 3,
2061                         persist = 0.6
2062                 },
2063                 biomes = {"desert", "sandstone_desert", "cold_desert"},
2064                 y_max = 31000,
2065                 y_min = 2,
2066                 decoration = "default:dry_shrub",
2067                 param2 = 4,
2068         })
2069
2070         -- Marram grass
2071
2072         minetest.register_decoration({
2073                 name = "default:marram_grass",
2074                 deco_type = "simple",
2075                 place_on = {"default:sand"},
2076                 sidelen = 4,
2077                 noise_params = {
2078                         offset = -0.4,
2079                         scale = 3.0,
2080                         spread = {x = 16, y = 16, z = 16},
2081                         seed = 513337,
2082                         octaves = 1,
2083                         persist = 0.5,
2084                         flags = "absvalue"
2085                 },
2086                 biomes = {"coniferous_forest_dunes", "grassland_dunes"},
2087                 y_max = 6,
2088                 y_min = 4,
2089                 decoration = {
2090                         "default:marram_grass_1",
2091                         "default:marram_grass_2",
2092                         "default:marram_grass_3",
2093                 },
2094         })
2095
2096         -- Tundra moss
2097
2098         minetest.register_decoration({
2099                 deco_type = "simple",
2100                 place_on = {"default:permafrost_with_stones"},
2101                 sidelen = 4,
2102                 noise_params = {
2103                         offset = -0.8,
2104                         scale = 2.0,
2105                         spread = {x = 100, y = 100, z = 100},
2106                         seed = 53995,
2107                         octaves = 3,
2108                         persist = 1.0
2109                 },
2110                 biomes = {"tundra"},
2111                 y_max = 50,
2112                 y_min = 2,
2113                 decoration = "default:permafrost_with_moss",
2114                 place_offset_y = -1,
2115                 flags = "force_placement",
2116         })
2117
2118         -- Tundra patchy snow
2119
2120         minetest.register_decoration({
2121                 deco_type = "simple",
2122                 place_on = {
2123                         "default:permafrost_with_moss",
2124                         "default:permafrost_with_stones",
2125                         "default:stone",
2126                         "default:gravel"
2127                 },
2128                 sidelen = 4,
2129                 noise_params = {
2130                         offset = 0,
2131                         scale = 1.0,
2132                         spread = {x = 100, y = 100, z = 100},
2133                         seed = 172555,
2134                         octaves = 3,
2135                         persist = 1.0
2136                 },
2137                 biomes = {"tundra", "tundra_beach"},
2138                 y_max = 50,
2139                 y_min = 1,
2140                 decoration = "default:snow",
2141         })
2142
2143         -- Coral reef
2144
2145         minetest.register_decoration({
2146                 name = "default:corals",
2147                 deco_type = "schematic",
2148                 place_on = {"default:sand"},
2149                 noise_params = {
2150                         offset = -0.15,
2151                         scale = 0.1,
2152                         spread = {x = 100, y = 100, z = 100},
2153                         seed = 7013,
2154                         octaves = 3,
2155                         persist = 1,
2156                 },
2157                 biomes = {
2158                         "desert_ocean",
2159                         "savanna_ocean",
2160                         "rainforest_ocean",
2161                 },
2162                 y_max = -2,
2163                 y_min = -8,
2164                 schematic = minetest.get_modpath("default") .. "/schematics/corals.mts",
2165                 flags = "place_center_x, place_center_z",
2166                 rotation = "random",
2167         })
2168
2169         -- Kelp
2170
2171         minetest.register_decoration({
2172                 name = "default:kelp",
2173                 deco_type = "simple",
2174                 place_on = {"default:sand"},
2175                 place_offset_y = -1,
2176                 sidelen = 16,
2177                 noise_params = {
2178                         offset = -0.04,
2179                         scale = 0.1,
2180                         spread = {x = 200, y = 200, z = 200},
2181                         seed = 87112,
2182                         octaves = 3,
2183                         persist = 0.7
2184                 },
2185                 biomes = {
2186                         "taiga_ocean",
2187                         "snowy_grassland_ocean",
2188                         "grassland_ocean",
2189                         "coniferous_forest_ocean",
2190                         "deciduous_forest_ocean",
2191                         "sandstone_desert_ocean",
2192                         "cold_desert_ocean"},
2193                 y_max = -5,
2194                 y_min = -10,
2195                 flags = "force_placement",
2196                 decoration = "default:sand_with_kelp",
2197                 param2 = 48,
2198                 param2_max = 96,
2199         })
2200 end
2201
2202
2203 --
2204 -- Detect mapgen, flags and parameters to select functions
2205 --
2206
2207 -- Get setting or default
2208 local mgv7_spflags = minetest.get_mapgen_setting("mgv7_spflags") or
2209         "mountains, ridges, nofloatlands, caverns"
2210 local captures_float = string.match(mgv7_spflags, "floatlands")
2211 local captures_nofloat = string.match(mgv7_spflags, "nofloatlands")
2212
2213 -- Get setting or default
2214 -- Make global for mods to use to register floatland biomes
2215 default.mgv7_floatland_level =
2216         minetest.get_mapgen_setting("mgv7_floatland_level") or 1280
2217 default.mgv7_shadow_limit =
2218         minetest.get_mapgen_setting("mgv7_shadow_limit") or 1024
2219
2220 minetest.clear_registered_biomes()
2221 minetest.clear_registered_ores()
2222 minetest.clear_registered_decorations()
2223
2224 local mg_name = minetest.get_mapgen_setting("mg_name")
2225
2226 if mg_name == "v6" then
2227         default.register_mgv6_ores()
2228         default.register_mgv6_decorations()
2229 -- Need to check for 'nofloatlands' because that contains
2230 -- 'floatlands' which makes the second condition true.
2231 elseif mg_name == "v7" and
2232                 captures_float == "floatlands" and
2233                 captures_nofloat ~= "nofloatlands" then
2234         -- Mgv7 with floatlands and floatland biomes
2235         default.register_biomes(default.mgv7_shadow_limit - 1)
2236         default.register_floatland_biomes(
2237                 default.mgv7_floatland_level, default.mgv7_shadow_limit)
2238         default.register_ores()
2239         default.register_decorations()
2240 else
2241         default.register_biomes(31000)
2242         default.register_ores()
2243         default.register_decorations()
2244 end