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