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