Ores: Allow dirt and sand blob ore in sandstone, desert stone
[oweals/minetest_game.git] / mods / default / mapgen.lua
1 --
2 -- Aliases for map generator outputs
3 --
4
5 minetest.register_alias("mapgen_stone", "default:stone")
6 minetest.register_alias("mapgen_dirt", "default:dirt")
7 minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass")
8 minetest.register_alias("mapgen_sand", "default:sand")
9 minetest.register_alias("mapgen_water_source", "default:water_source")
10 minetest.register_alias("mapgen_river_water_source", "default:river_water_source")
11 minetest.register_alias("mapgen_lava_source", "default:lava_source")
12 minetest.register_alias("mapgen_gravel", "default:gravel")
13 minetest.register_alias("mapgen_desert_stone", "default:desert_stone")
14 minetest.register_alias("mapgen_desert_sand", "default:desert_sand")
15 minetest.register_alias("mapgen_dirt_with_snow", "default:dirt_with_snow")
16 minetest.register_alias("mapgen_snowblock", "default:snowblock")
17 minetest.register_alias("mapgen_snow", "default:snow")
18 minetest.register_alias("mapgen_ice", "default:ice")
19 minetest.register_alias("mapgen_sandstone", "default:sandstone")
20
21 -- Flora
22
23 minetest.register_alias("mapgen_tree", "default:tree")
24 minetest.register_alias("mapgen_leaves", "default:leaves")
25 minetest.register_alias("mapgen_apple", "default:apple")
26 minetest.register_alias("mapgen_jungletree", "default:jungletree")
27 minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves")
28 minetest.register_alias("mapgen_junglegrass", "default:junglegrass")
29 minetest.register_alias("mapgen_pine_tree", "default:pine_tree")
30 minetest.register_alias("mapgen_pine_needles", "default:pine_needles")
31
32 -- Dungeons
33
34 minetest.register_alias("mapgen_cobble", "default:cobble")
35 minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble")
36 minetest.register_alias("mapgen_mossycobble", "default:mossycobble")
37 minetest.register_alias("mapgen_sandstonebrick", "default:sandstonebrick")
38 minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebrick")
39
40
41 --
42 -- Register ores
43 --
44
45 -- All mapgens except singlenode
46 -- Blob ore first to avoid other ores inside blobs
47
48 function default.register_ores()
49
50         -- Clay
51
52         minetest.register_ore({ 
53                 ore_type        = "blob",
54                 ore             = "default:clay",
55                 wherein         = {"default:sand"},
56                 clust_scarcity  = 16 * 16 * 16,
57                 clust_size      = 5,
58                 y_min           = -15,
59                 y_max           = 0,
60                 noise_threshold = 0.0,
61                 noise_params    = {
62                         offset = 0.5,
63                         scale = 0.2,
64                         spread = {x = 5, y = 5, z = 5},
65                         seed = -316,
66                         octaves = 1,
67                         persist = 0.0
68                 },
69         })
70
71         -- Sand
72
73         minetest.register_ore({ 
74                 ore_type        = "blob",
75                 ore             = "default:sand",
76                 wherein         = {"default:stone", "default:sandstone",
77                         "default:desert_stone"},
78                 clust_scarcity  = 16 * 16 * 16,
79                 clust_size      = 5,
80                 y_min           = -31,
81                 y_max           = 4,
82                 noise_threshold = 0.0,
83                 noise_params    = {
84                         offset = 0.5,
85                         scale = 0.2,
86                         spread = {x = 5, y = 5, z = 5},
87                         seed = 2316,
88                         octaves = 1,
89                         persist = 0.0
90                 },
91         })
92
93         -- Dirt
94
95         minetest.register_ore({
96                 ore_type        = "blob",
97                 ore             = "default:dirt",
98                 wherein         = {"default:stone", "default:sandstone"},
99                 clust_scarcity  = 16 * 16 * 16,
100                 clust_size      = 5,
101                 y_min           = -31,
102                 y_max           = 31000,
103                 noise_threshold = 0.0,
104                 noise_params    = {
105                         offset = 0.5,
106                         scale = 0.2,
107                         spread = {x = 5, y = 5, z = 5},
108                         seed = 17676,
109                         octaves = 1,
110                         persist = 0.0
111                 },
112         })
113
114         -- Gravel
115
116         minetest.register_ore({
117                 ore_type        = "blob",
118                 ore             = "default:gravel",
119                 wherein         = {"default:stone"},
120                 clust_scarcity  = 16 * 16 * 16,
121                 clust_size      = 5,
122                 y_min           = -31000,
123                 y_max           = 31000,
124                 noise_threshold = 0.0,
125                 noise_params    = {
126                         offset = 0.5,
127                         scale = 0.2,
128                         spread = {x = 5, y = 5, z = 5},
129                         seed = 766,
130                         octaves = 1,
131                         persist = 0.0
132                 },
133         })
134
135         -- Coal
136
137         minetest.register_ore({
138                 ore_type       = "scatter",
139                 ore            = "default:stone_with_coal",
140                 wherein        = "default:stone",
141                 clust_scarcity = 8 * 8 * 8,
142                 clust_num_ores = 8,
143                 clust_size     = 3,
144                 y_min          = -31000,
145                 y_max          = 64,
146         })
147
148         minetest.register_ore({
149                 ore_type       = "scatter",
150                 ore            = "default:stone_with_coal",
151                 wherein        = "default:stone",
152                 clust_scarcity = 24 * 24 * 24,
153                 clust_num_ores = 27,
154                 clust_size     = 6,
155                 y_min          = -31000,
156                 y_max          = 0,
157         })
158
159         -- Iron
160
161         minetest.register_ore({
162                 ore_type       = "scatter",
163                 ore            = "default:stone_with_iron",
164                 wherein        = "default:stone",
165                 clust_scarcity = 12 * 12 * 12,
166                 clust_num_ores = 3,
167                 clust_size     = 2,
168                 y_min          = -15,
169                 y_max          = 2,
170         })
171
172         minetest.register_ore({
173                 ore_type       = "scatter",
174                 ore            = "default:stone_with_iron",
175                 wherein        = "default:stone",
176                 clust_scarcity = 9 * 9 * 9,
177                 clust_num_ores = 5,
178                 clust_size     = 3,
179                 y_min          = -63,
180                 y_max          = -16,
181         })
182
183         minetest.register_ore({
184                 ore_type       = "scatter",
185                 ore            = "default:stone_with_iron",
186                 wherein        = "default:stone",
187                 clust_scarcity = 7 * 7 * 7,
188                 clust_num_ores = 5,
189                 clust_size     = 3,
190                 y_min          = -31000,
191                 y_max          = -64,
192         })
193
194         minetest.register_ore({
195                 ore_type       = "scatter",
196                 ore            = "default:stone_with_iron",
197                 wherein        = "default:stone",
198                 clust_scarcity = 24 * 24 * 24,
199                 clust_num_ores = 27,
200                 clust_size     = 6,
201                 y_min          = -31000,
202                 y_max          = -64,
203         })
204
205         --Mese
206
207         minetest.register_ore({
208                 ore_type       = "scatter",
209                 ore            = "default:stone_with_mese",
210                 wherein        = "default:stone",
211                 clust_scarcity = 18 * 18 * 18,
212                 clust_num_ores = 3,
213                 clust_size     = 2,
214                 y_min          = -255,
215                 y_max          = -64,
216         })
217
218         minetest.register_ore({
219                 ore_type       = "scatter",
220                 ore            = "default:stone_with_mese",
221                 wherein        = "default:stone",
222                 clust_scarcity = 14 * 14 * 14,
223                 clust_num_ores = 5,
224                 clust_size     = 3,
225                 y_min          = -31000,
226                 y_max          = -256,
227         })
228
229         minetest.register_ore({
230                 ore_type       = "scatter",
231                 ore            = "default:mese",
232                 wherein        = "default:stone",
233                 clust_scarcity = 36 * 36 * 36,
234                 clust_num_ores = 3,
235                 clust_size     = 2,
236                 y_min          = -31000,
237                 y_max          = -1024,
238         })
239
240         -- Gold
241
242         minetest.register_ore({
243                 ore_type       = "scatter",
244                 ore            = "default:stone_with_gold",
245                 wherein        = "default:stone",
246                 clust_scarcity = 15 * 15 * 15,
247                 clust_num_ores = 3,
248                 clust_size     = 2,
249                 y_min          = -255,
250                 y_max          = -64,
251         })
252
253         minetest.register_ore({
254                 ore_type       = "scatter",
255                 ore            = "default:stone_with_gold",
256                 wherein        = "default:stone",
257                 clust_scarcity = 13 * 13 * 13,
258                 clust_num_ores = 5,
259                 clust_size     = 3,
260                 y_min          = -31000,
261                 y_max          = -256,
262         })
263
264         -- Diamond
265
266         minetest.register_ore({
267                 ore_type       = "scatter",
268                 ore            = "default:stone_with_diamond",
269                 wherein        = "default:stone",
270                 clust_scarcity = 17 * 17 * 17,
271                 clust_num_ores = 4,
272                 clust_size     = 3,
273                 y_min          = -255,
274                 y_max          = -128,
275         })
276
277         minetest.register_ore({
278                 ore_type       = "scatter",
279                 ore            = "default:stone_with_diamond",
280                 wherein        = "default:stone",
281                 clust_scarcity = 15 * 15 * 15,
282                 clust_num_ores = 4,
283                 clust_size     = 3,
284                 y_min          = -31000,
285                 y_max          = -256,
286         })
287
288         -- Copper
289
290         minetest.register_ore({
291                 ore_type       = "scatter",
292                 ore            = "default:stone_with_copper",
293                 wherein        = "default:stone",
294                 clust_scarcity = 12 * 12 * 12,
295                 clust_num_ores = 4,
296                 clust_size     = 3,
297                 y_min          = -63,
298                 y_max          = -16,
299         })
300
301         minetest.register_ore({
302                 ore_type       = "scatter",
303                 ore            = "default:stone_with_copper",
304                 wherein        = "default:stone",
305                 clust_scarcity = 9 * 9 * 9,
306                 clust_num_ores = 5,
307                 clust_size     = 3,
308                 y_min          = -31000,
309                 y_max          = -64,
310         })
311 end
312
313
314 --
315 -- Register biomes
316 --
317
318 -- All mapgens except mgv6 and singlenode
319
320 function default.register_biomes()
321         minetest.clear_registered_biomes()
322
323         -- Permanent ice
324
325         minetest.register_biome({
326                 name = "glacier",
327                 node_dust = "default:snowblock",
328                 node_top = "default:snowblock",
329                 depth_top = 1,
330                 node_filler = "default:snowblock",
331                 depth_filler = 3,
332                 node_stone = "default:ice",
333                 node_water_top = "default:ice",
334                 depth_water_top = 10,
335                 --node_water = "",
336                 node_river_water = "default:ice",
337                 y_min = -8,
338                 y_max = 31000,
339                 heat_point = 0,
340                 humidity_point = 50,
341         })
342
343         minetest.register_biome({
344                 name = "glacier_ocean",
345                 node_dust = "default:snowblock",
346                 node_top = "default:sand",
347                 depth_top = 1,
348                 node_filler = "default:sand",
349                 depth_filler = 3,
350                 --node_stone = "",
351                 --node_water_top = "",
352                 --depth_water_top = ,
353                 --node_water = "",
354                 --node_river_water = "",
355                 y_min = -112,
356                 y_max = -9,
357                 heat_point = 0,
358                 humidity_point = 50,
359         })
360
361         -- Cold
362
363         minetest.register_biome({
364                 name = "tundra",
365                 --node_dust = "",
366                 node_top = "default:dirt_with_snow",
367                 depth_top = 1,
368                 node_filler = "default:dirt",
369                 depth_filler = 1,
370                 --node_stone = "",
371                 --node_water_top = "",
372                 --depth_water_top = ,
373                 --node_water = "",
374                 --node_river_water = "",
375                 y_min = 2,
376                 y_max = 31000,
377                 heat_point = 15,
378                 humidity_point = 35,
379         })
380
381         minetest.register_biome({
382                 name = "tundra_ocean",
383                 --node_dust = "",
384                 node_top = "default:sand",
385                 depth_top = 1,
386                 node_filler = "default:sand",
387                 depth_filler = 3,
388                 --node_stone = "",
389                 --node_water_top = "",
390                 --depth_water_top = ,
391                 --node_water = "",
392                 --node_river_water = "",
393                 y_min = -112,
394                 y_max = 1,
395                 heat_point = 15,
396                 humidity_point = 35,
397         })
398
399
400         minetest.register_biome({
401                 name = "taiga",
402                 node_dust = "default:snow",
403                 node_top = "default:dirt_with_snow",
404                 depth_top = 1,
405                 node_filler = "default:dirt",
406                 depth_filler = 3,
407                 --node_stone = "",
408                 --node_water_top = "",
409                 --depth_water_top = ,
410                 --node_water = "",
411                 --node_river_water = "",
412                 y_min = 2,
413                 y_max = 31000,
414                 heat_point = 15,
415                 humidity_point = 65,
416         })
417
418         minetest.register_biome({
419                 name = "taiga_ocean",
420                 --node_dust = "",
421                 node_top = "default:sand",
422                 depth_top = 1,
423                 node_filler = "default:sand",
424                 depth_filler = 3,
425                 --node_stone = "",
426                 --node_water_top = "",
427                 --depth_water_top = ,
428                 --node_water = "",
429                 --node_river_water = "",
430                 y_min = -112,
431                 y_max = 1,
432                 heat_point = 15,
433                 humidity_point = 65,
434         })
435
436         -- Temperate
437
438         minetest.register_biome({
439                 name = "stone_grassland",
440                 --node_dust = "",
441                 node_top = "default:dirt_with_grass",
442                 depth_top = 1,
443                 node_filler = "default:dirt",
444                 depth_filler = 1,
445                 --node_stone = "",
446                 --node_water_top = "",
447                 --depth_water_top = ,
448                 --node_water = "",
449                 --node_river_water = "",
450                 y_min = 6,
451                 y_max = 31000,
452                 heat_point = 40,
453                 humidity_point = 35,
454         })
455
456         minetest.register_biome({
457                 name = "stone_grassland_dunes",
458                 --node_dust = "",
459                 node_top = "default:sand",
460                 depth_top = 1,
461                 node_filler = "default:sand",
462                 depth_filler = 2,
463                 --node_stone = "",
464                 --node_water_top = "",
465                 --depth_water_top = ,
466                 --node_water = "",
467                 --node_river_water = "",
468                 y_min = 5,
469                 y_max = 5,
470                 heat_point = 40,
471                 humidity_point = 35,
472         })
473
474         minetest.register_biome({
475                 name = "stone_grassland_ocean",
476                 --node_dust = "",
477                 node_top = "default:sand",
478                 depth_top = 1,
479                 node_filler = "default:sand",
480                 depth_filler = 3,
481                 --node_stone = "",
482                 --node_water_top = "",
483                 --depth_water_top = ,
484                 --node_water = "",
485                 --node_river_water = "",
486                 y_min = -112,
487                 y_max = 4,
488                 heat_point = 40,
489                 humidity_point = 35,
490         })
491
492
493         minetest.register_biome({
494                 name = "coniferous_forest",
495                 --node_dust = "",
496                 node_top = "default:dirt_with_grass",
497                 depth_top = 1,
498                 node_filler = "default:dirt",
499                 depth_filler = 3,
500                 --node_stone = "",
501                 --node_water_top = "",
502                 --depth_water_top = ,
503                 --node_water = "",
504                 --node_river_water = "",
505                 y_min = 6,
506                 y_max = 31000,
507                 heat_point = 40,
508                 humidity_point = 65,
509         })
510
511         minetest.register_biome({
512                 name = "coniferous_forest_dunes",
513                 --node_dust = "",
514                 node_top = "default:sand",
515                 depth_top = 1,
516                 node_filler = "default:sand",
517                 depth_filler = 3,
518                 --node_stone = "",
519                 --node_water_top = "",
520                 --depth_water_top = ,
521                 --node_water = "",
522                 --node_river_water = "",
523                 y_min = 5,
524                 y_max = 5,
525                 heat_point = 40,
526                 humidity_point = 65,
527         })
528
529         minetest.register_biome({
530                 name = "coniferous_forest_ocean",
531                 --node_dust = "",
532                 node_top = "default:sand",
533                 depth_top = 1,
534                 node_filler = "default:sand",
535                 depth_filler = 3,
536                 --node_stone = "",
537                 --node_water_top = "",
538                 --depth_water_top = ,
539                 --node_water = "",
540                 --node_river_water = "",
541                 y_min = -112,
542                 y_max = 4,
543                 heat_point = 40,
544                 humidity_point = 65,
545         })
546
547
548         minetest.register_biome({
549                 name = "sandstone_grassland",
550                 --node_dust = "",
551                 node_top = "default:dirt_with_grass",
552                 depth_top = 1,
553                 node_filler = "default:dirt",
554                 depth_filler = 1,
555                 node_stone = "default:sandstone",
556                 --node_water_top = "",
557                 --depth_water_top = ,
558                 --node_water = "",
559                 --node_river_water = "",
560                 y_min = 6,
561                 y_max = 31000,
562                 heat_point = 60,
563                 humidity_point = 35,
564         })
565
566         minetest.register_biome({
567                 name = "sandstone_grassland_dunes",
568                 --node_dust = "",
569                 node_top = "default:sand",
570                 depth_top = 1,
571                 node_filler = "default:sand",
572                 depth_filler = 2,
573                 node_stone = "default:sandstone",
574                 --node_water_top = "",
575                 --depth_water_top = ,
576                 --node_water = "",
577                 --node_river_water = "",
578                 y_min = 5,
579                 y_max = 5,
580                 heat_point = 60,
581                 humidity_point = 35,
582         })
583
584         minetest.register_biome({
585                 name = "sandstone_grassland_ocean",
586                 --node_dust = "",
587                 node_top = "default:sand",
588                 depth_top = 1,
589                 node_filler = "default:sand",
590                 depth_filler = 3,
591                 node_stone = "default:sandstone",
592                 --node_water_top = "",
593                 --depth_water_top = ,
594                 --node_water = "",
595                 --node_river_water = "",
596                 y_min = -112,
597                 y_max = 4,
598                 heat_point = 60,
599                 humidity_point = 35,
600         })
601
602
603         minetest.register_biome({
604                 name = "deciduous_forest",
605                 --node_dust = "",
606                 node_top = "default:dirt_with_grass",
607                 depth_top = 1,
608                 node_filler = "default:dirt",
609                 depth_filler = 3,
610                 --node_stone = "",
611                 --node_water_top = "",
612                 --depth_water_top = ,
613                 --node_water = "",
614                 --node_river_water = "",
615                 y_min = 1,
616                 y_max = 31000,
617                 heat_point = 60,
618                 humidity_point = 65,
619         })
620
621         minetest.register_biome({
622                 name = "deciduous_forest_swamp",
623                 --node_dust = "",
624                 node_top = "default:dirt",
625                 depth_top = 1,
626                 node_filler = "default:dirt",
627                 depth_filler = 3,
628                 --node_stone = "",
629                 --node_water_top = "",
630                 --depth_water_top = ,
631                 --node_water = "",
632                 --node_river_water = "",
633                 y_min = -3,
634                 y_max = 0,
635                 heat_point = 60,
636                 humidity_point = 65,
637         })
638
639         minetest.register_biome({
640                 name = "deciduous_forest_ocean",
641                 --node_dust = "",
642                 node_top = "default:sand",
643                 depth_top = 1,
644                 node_filler = "default:sand",
645                 depth_filler = 3,
646                 --node_stone = "",
647                 --node_water_top = "",
648                 --depth_water_top = ,
649                 --node_water = "",
650                 --node_river_water = "",
651                 y_min = -112,
652                 y_max = -4,
653                 heat_point = 60,
654                 humidity_point = 65,
655         })
656
657         -- Hot
658
659         minetest.register_biome({
660                 name = "desert",
661                 --node_dust = "",
662                 node_top = "default:desert_sand",
663                 depth_top = 1,
664                 node_filler = "default:desert_sand",
665                 depth_filler = 1,
666                 node_stone = "default:desert_stone",
667                 --node_water_top = "",
668                 --depth_water_top = ,
669                 --node_water = "",
670                 --node_river_water = "",
671                 y_min = 5,
672                 y_max = 31000,
673                 heat_point = 85,
674                 humidity_point = 20,
675         })
676
677         minetest.register_biome({
678                 name = "desert_ocean",
679                 --node_dust = "",
680                 node_top = "default:sand",
681                 depth_top = 1,
682                 node_filler = "default:sand",
683                 depth_filler = 3,
684                 node_stone = "default:desert_stone",
685                 --node_water_top = "",
686                 --depth_water_top = ,
687                 --node_water = "",
688                 --node_river_water = "",
689                 y_min = -112,
690                 y_max = 4,
691                 heat_point = 85,
692                 humidity_point = 20,
693         })
694
695
696         minetest.register_biome({
697                 name = "savanna",
698                 --node_dust = "",
699                 node_top = "default:dirt_with_dry_grass",
700                 depth_top = 1,
701                 node_filler = "default:dirt",
702                 depth_filler = 1,
703                 --node_stone = "",
704                 --node_water_top = "",
705                 --depth_water_top = ,
706                 --node_water = "",
707                 --node_river_water = "",
708                 y_min = 1,
709                 y_max = 31000,
710                 heat_point = 85,
711                 humidity_point = 50,
712         })
713
714         minetest.register_biome({
715                 name = "savanna_swamp",
716                 --node_dust = "",
717                 node_top = "default:dirt",
718                 depth_top = 1,
719                 node_filler = "default:dirt",
720                 depth_filler = 3,
721                 --node_stone = "",
722                 --node_water_top = "",
723                 --depth_water_top = ,
724                 --node_water = "",
725                 --node_river_water = "",
726                 y_min = -3,
727                 y_max = 0,
728                 heat_point = 85,
729                 humidity_point = 50,
730         })
731
732         minetest.register_biome({
733                 name = "savanna_ocean",
734                 --node_dust = "",
735                 node_top = "default:sand",
736                 depth_top = 1,
737                 node_filler = "default:sand",
738                 depth_filler = 3,
739                 --node_stone = "",
740                 --node_water_top = "",
741                 --depth_water_top = ,
742                 --node_water = "",
743                 --node_river_water = "",
744                 y_min = -112,
745                 y_max = -4,
746                 heat_point = 85,
747                 humidity_point = 50,
748         })
749
750
751         minetest.register_biome({
752                 name = "rainforest",
753                 --node_dust = "",
754                 node_top = "default:dirt_with_grass",
755                 depth_top = 1,
756                 node_filler = "default:dirt",
757                 depth_filler = 3,
758                 --node_stone = "",
759                 --node_water_top = "",
760                 --depth_water_top = ,
761                 --node_water = "",
762                 --node_river_water = "",
763                 y_min = 1,
764                 y_max = 31000,
765                 heat_point = 85,
766                 humidity_point = 80,
767         })
768
769         minetest.register_biome({
770                 name = "rainforest_swamp",
771                 --node_dust = "",
772                 node_top = "default:dirt",
773                 depth_top = 1,
774                 node_filler = "default:dirt",
775                 depth_filler = 3,
776                 --node_stone = "",
777                 --node_water_top = "",
778                 --depth_water_top = ,
779                 --node_water = "",
780                 --node_river_water = "",
781                 y_min = -3,
782                 y_max = 0,
783                 heat_point = 85,
784                 humidity_point = 80,
785         })
786
787         minetest.register_biome({
788                 name = "rainforest_ocean",
789                 --node_dust = "",
790                 node_top = "default:sand",
791                 depth_top = 1,
792                 node_filler = "default:sand",
793                 depth_filler = 3,
794                 --node_stone = "",
795                 --node_water_top = "",
796                 --depth_water_top = ,
797                 --node_water = "",
798                 --node_river_water = "",
799                 y_min = -112,
800                 y_max = -4,
801                 heat_point = 85,
802                 humidity_point = 80,
803         })
804
805         -- Underground
806
807         minetest.register_biome({
808                 name = "underground",
809                 --node_dust = "",
810                 --node_top = "",
811                 --depth_top = ,
812                 --node_filler = "",
813                 --depth_filler = ,
814                 --node_stone = "",
815                 --node_water_top = "",
816                 --depth_water_top = ,
817                 --node_water = "",
818                 --node_river_water = "",
819                 y_min = -31000,
820                 y_max = -113,
821                 heat_point = 50,
822                 humidity_point = 50,
823         })
824 end
825
826
827 --
828 -- Register decorations
829 --
830
831 -- Mgv6
832
833 function default.register_mgv6_decorations()
834         minetest.clear_registered_decorations()
835
836         -- Papyrus
837
838         minetest.register_decoration({
839                 deco_type = "simple",
840                 place_on = {"default:dirt_with_grass"},
841                 sidelen = 16,
842                 noise_params = {
843                         offset = -0.3,
844                         scale = 0.7,
845                         spread = {x = 100, y = 100, z = 100},
846                         seed = 354,
847                         octaves = 3,
848                         persist = 0.7
849                 },
850                 y_min = 1,
851                 y_max = 1,
852                 decoration = "default:papyrus",
853                 height = 2,
854                 height_max = 4,
855                 spawn_by = "default:water_source",
856                 num_spawn_by = 1,
857         })
858
859         -- Cacti
860
861         minetest.register_decoration({
862                 deco_type = "simple",
863                 place_on = {"default:desert_sand"},
864                 sidelen = 16,
865                 noise_params = {
866                         offset = -0.012,
867                         scale = 0.024,
868                         spread = {x = 100, y = 100, z = 100},
869                         seed = 230,
870                         octaves = 3,
871                         persist = 0.6
872                 },
873                 y_min = 1,
874                 y_max = 30,
875                 decoration = "default:cactus",
876                 height = 3,
877                 height_max = 4,
878         })
879
880         -- Long grasses
881
882         for length = 1, 5 do
883                 minetest.register_decoration({
884                         deco_type = "simple",
885                         place_on = {"default:dirt_with_grass"},
886                         sidelen = 16,
887                         noise_params = {
888                                 offset = 0,
889                                 scale = 0.007,
890                                 spread = {x = 100, y = 100, z = 100},
891                                 seed = 329,
892                                 octaves = 3,
893                                 persist = 0.6
894                         },
895                         y_min = 1,
896                         y_max = 30,
897                         decoration = "default:grass_"..length,
898                 })
899         end
900
901         -- Dry shrubs
902
903         minetest.register_decoration({
904                 deco_type = "simple",
905                 place_on = {"default:desert_sand", "default:dirt_with_snow"},
906                 sidelen = 16,
907                 noise_params = {
908                         offset = 0,
909                         scale = 0.035,
910                         spread = {x = 100, y = 100, z = 100},
911                         seed = 329,
912                         octaves = 3,
913                         persist = 0.6
914                 },
915                 y_min = 1,
916                 y_max = 30,
917                 decoration = "default:dry_shrub",
918         })
919 end
920
921 -- All mapgens except mgv6 and singlenode
922
923 local function register_grass_decoration(offset, scale, length)
924         minetest.register_decoration({
925                 deco_type = "simple",
926                 place_on = {"default:dirt_with_grass", "default:sand"},
927                 sidelen = 16,
928                 noise_params = {
929                         offset = offset,
930                         scale = scale,
931                         spread = {x = 200, y = 200, z = 200},
932                         seed = 329,
933                         octaves = 3,
934                         persist = 0.6
935                 },
936                 biomes = {"stone_grassland", "sandstone_grassland",
937                         "deciduous_forest", "coniferous_forest",
938                         "stone_grassland_dunes", "sandstone_grassland_dunes",
939                         "coniferous_forest_dunes"},
940                 y_min = 1,
941                 y_max = 31000,
942                 decoration = "default:grass_"..length,
943         })
944 end
945
946 local function register_dry_grass_decoration(offset, scale, length)
947         minetest.register_decoration({
948                 deco_type = "simple",
949                 place_on = {"default:dirt_with_dry_grass"},
950                 sidelen = 16,
951                 noise_params = {
952                         offset = offset,
953                         scale = scale,
954                         spread = {x = 200, y = 200, z = 200},
955                         seed = 329,
956                         octaves = 3,
957                         persist = 0.6
958                 },
959                 biomes = {"savanna"},
960                 y_min = 1,
961                 y_max = 31000,
962                 decoration = "default:dry_grass_"..length,
963         })
964 end
965
966 function default.register_decorations()
967         minetest.clear_registered_decorations()
968
969         -- Apple tree
970
971         minetest.register_decoration({
972                 deco_type = "schematic",
973                 place_on = {"default:dirt_with_grass"},
974                 sidelen = 16,
975                 noise_params = {
976                         offset = 0.04,
977                         scale = 0.02,
978                         spread = {x = 250, y = 250, z = 250},
979                         seed = 2,
980                         octaves = 3,
981                         persist = 0.66
982                 },
983                 biomes = {"deciduous_forest"},
984                 y_min = 1,
985                 y_max = 31000,
986                 schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts",
987                 flags = "place_center_x, place_center_z",
988         })
989
990         -- Jungle tree
991
992         minetest.register_decoration({
993                 deco_type = "schematic",
994                 place_on = {"default:dirt_with_grass", "default:dirt"},
995                 sidelen = 80,
996                 fill_ratio = 0.09,
997                 biomes = {"rainforest", "rainforest_swamp"},
998                 y_min = 0,
999                 y_max = 31000,
1000                 schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts",
1001                 flags = "place_center_x, place_center_z",
1002                 rotation = "random",
1003         })
1004
1005         -- Taiga and temperate coniferous forest pine tree
1006
1007         minetest.register_decoration({
1008                 deco_type = "schematic",
1009                 place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
1010                 sidelen = 16,
1011                 noise_params = {
1012                         offset = 0.04,
1013                         scale = 0.02,
1014                         spread = {x = 250, y = 250, z = 250},
1015                         seed = 2,
1016                         octaves = 3,
1017                         persist = 0.66
1018                 },
1019                 biomes = {"taiga", "coniferous_forest"},
1020                 y_min = 2,
1021                 y_max = 31000,
1022                 schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts",
1023                 flags = "place_center_x, place_center_z",
1024         })
1025
1026         -- Acacia tree
1027
1028         minetest.register_decoration({
1029                 deco_type = "schematic",
1030                 place_on = {"default:dirt_with_dry_grass"},
1031                 sidelen = 16,
1032                 noise_params = {
1033                         offset = 0,
1034                         scale = 0.002,
1035                         spread = {x = 250, y = 250, z = 250},
1036                         seed = 2,
1037                         octaves = 3,
1038                         persist = 0.66
1039                 },
1040                 biomes = {"savanna"},
1041                 y_min = 1,
1042                 y_max = 31000,
1043                 schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts",
1044                 flags = "place_center_x, place_center_z",
1045                 rotation = "random",
1046         })
1047
1048         -- Large cactus
1049
1050         minetest.register_decoration({
1051                 deco_type = "schematic",
1052                 place_on = {"default:desert_sand"},
1053                 sidelen = 16,
1054                 noise_params = {
1055                         offset = -0.0003,
1056                         scale = 0.0009,
1057                         spread = {x = 200, y = 200, z = 200},
1058                         seed = 230,
1059                         octaves = 3,
1060                         persist = 0.6
1061                 },
1062                 biomes = {"desert"},
1063                 y_min = 5,
1064                 y_max = 31000,
1065                 schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts",
1066                 flags = "place_center_x",
1067                 rotation = "random",
1068         })
1069
1070         -- Cactus
1071
1072         minetest.register_decoration({
1073                 deco_type = "simple",
1074                 place_on = {"default:desert_sand"},
1075                 sidelen = 16,
1076                 noise_params = {
1077                         offset = -0.0003,
1078                         scale = 0.0009,
1079                         spread = {x = 200, y = 200, z = 200},
1080                         seed = 230,
1081                         octaves = 3,
1082                         persist = 0.6
1083                 },
1084                 biomes = {"desert"},
1085                 y_min = 5,
1086                 y_max = 31000,
1087                 decoration = "default:cactus",
1088                 height = 2,
1089                 height_max = 5,
1090         })
1091
1092         -- Papyrus
1093
1094         minetest.register_decoration({
1095                 deco_type = "schematic",
1096                 place_on = {"default:dirt"},
1097                 sidelen = 16,
1098                 noise_params = {
1099                         offset = -0.3,
1100                         scale = 0.7,
1101                         spread = {x = 200, y = 200, z = 200},
1102                         seed = 354,
1103                         octaves = 3,
1104                         persist = 0.7
1105                 },
1106                 biomes = {"savanna_swamp"},
1107                 y_min = 0,
1108                 y_max = 0,
1109                 schematic = minetest.get_modpath("default").."/schematics/papyrus.mts",
1110         })
1111
1112         -- Grasses
1113
1114         register_grass_decoration(-0.03,  0.09,  5)
1115         register_grass_decoration(-0.015, 0.075, 4)
1116         register_grass_decoration(0,      0.06,  3)
1117         register_grass_decoration(0.015,  0.045, 2)
1118         register_grass_decoration(0.03,   0.03,  1)
1119
1120         -- Dry grasses
1121
1122         register_dry_grass_decoration(0.01, 0.05,  5)
1123         register_dry_grass_decoration(0.03, 0.03,  4)
1124         register_dry_grass_decoration(0.05, 0.01,  3)
1125         register_dry_grass_decoration(0.07, -0.01, 2)
1126         register_dry_grass_decoration(0.09, -0.03, 1)
1127
1128         -- Junglegrass
1129
1130         minetest.register_decoration({
1131                 deco_type = "simple",
1132                 place_on = {"default:dirt_with_grass"},
1133                 sidelen = 80,
1134                 fill_ratio = 0.1,
1135                 biomes = {"rainforest"},
1136                 y_min = 1,
1137                 y_max = 31000,
1138                 decoration = "default:junglegrass",
1139         })
1140
1141         -- Dry shrub
1142
1143         minetest.register_decoration({
1144                 deco_type = "simple",
1145                 place_on = {"default:desert_sand", "default:dirt_with_snow"},
1146                 sidelen = 16,
1147                 noise_params = {
1148                         offset = 0,
1149                         scale = 0.02,
1150                         spread = {x = 200, y = 200, z = 200},
1151                         seed = 329,
1152                         octaves = 3,
1153                         persist = 0.6
1154                 },
1155                 biomes = {"desert", "tundra"},
1156                 y_min = 2,
1157                 y_max = 31000,
1158                 decoration = "default:dry_shrub",
1159         })
1160 end
1161
1162
1163 --
1164 -- Generate nyan cats
1165 --
1166
1167 -- All mapgens except singlenode
1168
1169 function default.make_nyancat(pos, facedir, length)
1170         local tailvec = {x = 0, y = 0, z = 0}
1171         if facedir == 0 then
1172                 tailvec.z = 1
1173         elseif facedir == 1 then
1174                 tailvec.x = 1
1175         elseif facedir == 2 then
1176                 tailvec.z = -1
1177         elseif facedir == 3 then
1178                 tailvec.x = -1
1179         else
1180                 facedir = 0
1181                 tailvec.z = 1
1182         end
1183         local p = {x = pos.x, y = pos.y, z = pos.z}
1184         minetest.set_node(p, {name = "default:nyancat", param2 = facedir})
1185         for i = 1, length do
1186                 p.x = p.x + tailvec.x
1187                 p.z = p.z + tailvec.z
1188                 minetest.set_node(p, {name = "default:nyancat_rainbow", param2 = facedir})
1189         end
1190 end
1191
1192 function default.generate_nyancats(minp, maxp, seed)
1193         local height_min = -31000
1194         local height_max = -32
1195         if maxp.y < height_min or minp.y > height_max then
1196                 return
1197         end
1198         local y_min = math.max(minp.y, height_min)
1199         local y_max = math.min(maxp.y, height_max)
1200         local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
1201         local pr = PseudoRandom(seed + 9324342)
1202         local max_num_nyancats = math.floor(volume / (16 * 16 * 16))
1203         for i = 1, max_num_nyancats do
1204                 if pr:next(0, 1000) == 0 then
1205                         local x0 = pr:next(minp.x, maxp.x)
1206                         local y0 = pr:next(minp.y, maxp.y)
1207                         local z0 = pr:next(minp.z, maxp.z)
1208                         local p0 = {x = x0, y = y0, z = z0}
1209                         default.make_nyancat(p0, pr:next(0, 3), pr:next(3, 15))
1210                 end
1211         end
1212 end
1213
1214
1215 --
1216 -- Detect mapgen to select functions
1217 --
1218
1219 -- Mods using singlenode mapgen can call these functions to enable
1220 -- the use of minetest.generate_ores or minetest.generate_decorations
1221
1222 local mg_params = minetest.get_mapgen_params()
1223 if mg_params.mgname == "v6" then
1224         default.register_ores()
1225         default.register_mgv6_decorations()
1226         minetest.register_on_generated(default.generate_nyancats)
1227 elseif mg_params.mgname ~= "singlenode" then
1228         default.register_ores()
1229         default.register_biomes()
1230         default.register_decorations()
1231         minetest.register_on_generated(default.generate_nyancats)
1232 end