05d7b2b9cf8ede652c8d6ae1b44ab1928fe384a1
[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_beach",
383                 --node_dust = "",
384                 node_top = "default:gravel",
385                 depth_top = 1,
386                 node_filler = "default:gravel",
387                 depth_filler = 2,
388                 --node_stone = "",
389                 --node_water_top = "",
390                 --depth_water_top = ,
391                 --node_water = "",
392                 --node_river_water = "",
393                 y_min = -3,
394                 y_max = 1,
395                 heat_point = 15,
396                 humidity_point = 35,
397         })
398
399         minetest.register_biome({
400                 name = "tundra_ocean",
401                 --node_dust = "",
402                 node_top = "default:sand",
403                 depth_top = 1,
404                 node_filler = "default:sand",
405                 depth_filler = 3,
406                 --node_stone = "",
407                 --node_water_top = "",
408                 --depth_water_top = ,
409                 --node_water = "",
410                 --node_river_water = "",
411                 y_min = -112,
412                 y_max = -4,
413                 heat_point = 15,
414                 humidity_point = 35,
415         })
416
417
418         minetest.register_biome({
419                 name = "taiga",
420                 node_dust = "default:snow",
421                 node_top = "default:dirt_with_snow",
422                 depth_top = 1,
423                 node_filler = "default:dirt",
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 = 2,
431                 y_max = 31000,
432                 heat_point = 15,
433                 humidity_point = 65,
434         })
435
436         minetest.register_biome({
437                 name = "taiga_ocean",
438                 --node_dust = "",
439                 node_top = "default:sand",
440                 depth_top = 1,
441                 node_filler = "default:sand",
442                 depth_filler = 3,
443                 --node_stone = "",
444                 --node_water_top = "",
445                 --depth_water_top = ,
446                 --node_water = "",
447                 --node_river_water = "",
448                 y_min = -112,
449                 y_max = 1,
450                 heat_point = 15,
451                 humidity_point = 65,
452         })
453
454         -- Temperate
455
456         minetest.register_biome({
457                 name = "stone_grassland",
458                 --node_dust = "",
459                 node_top = "default:dirt_with_grass",
460                 depth_top = 1,
461                 node_filler = "default:dirt",
462                 depth_filler = 1,
463                 --node_stone = "",
464                 --node_water_top = "",
465                 --depth_water_top = ,
466                 --node_water = "",
467                 --node_river_water = "",
468                 y_min = 6,
469                 y_max = 31000,
470                 heat_point = 40,
471                 humidity_point = 35,
472         })
473
474         minetest.register_biome({
475                 name = "stone_grassland_dunes",
476                 --node_dust = "",
477                 node_top = "default:sand",
478                 depth_top = 1,
479                 node_filler = "default:sand",
480                 depth_filler = 2,
481                 --node_stone = "",
482                 --node_water_top = "",
483                 --depth_water_top = ,
484                 --node_water = "",
485                 --node_river_water = "",
486                 y_min = 5,
487                 y_max = 5,
488                 heat_point = 40,
489                 humidity_point = 35,
490         })
491
492         minetest.register_biome({
493                 name = "stone_grassland_ocean",
494                 --node_dust = "",
495                 node_top = "default:sand",
496                 depth_top = 1,
497                 node_filler = "default:sand",
498                 depth_filler = 3,
499                 --node_stone = "",
500                 --node_water_top = "",
501                 --depth_water_top = ,
502                 --node_water = "",
503                 --node_river_water = "",
504                 y_min = -112,
505                 y_max = 4,
506                 heat_point = 40,
507                 humidity_point = 35,
508         })
509
510
511         minetest.register_biome({
512                 name = "coniferous_forest",
513                 --node_dust = "",
514                 node_top = "default:dirt_with_grass",
515                 depth_top = 1,
516                 node_filler = "default:dirt",
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 = 6,
524                 y_max = 31000,
525                 heat_point = 40,
526                 humidity_point = 65,
527         })
528
529         minetest.register_biome({
530                 name = "coniferous_forest_dunes",
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 = 5,
542                 y_max = 5,
543                 heat_point = 40,
544                 humidity_point = 65,
545         })
546
547         minetest.register_biome({
548                 name = "coniferous_forest_ocean",
549                 --node_dust = "",
550                 node_top = "default:sand",
551                 depth_top = 1,
552                 node_filler = "default:sand",
553                 depth_filler = 3,
554                 --node_stone = "",
555                 --node_water_top = "",
556                 --depth_water_top = ,
557                 --node_water = "",
558                 --node_river_water = "",
559                 y_min = -112,
560                 y_max = 4,
561                 heat_point = 40,
562                 humidity_point = 65,
563         })
564
565
566         minetest.register_biome({
567                 name = "sandstone_grassland",
568                 --node_dust = "",
569                 node_top = "default:dirt_with_grass",
570                 depth_top = 1,
571                 node_filler = "default:dirt",
572                 depth_filler = 1,
573                 node_stone = "default:sandstone",
574                 --node_water_top = "",
575                 --depth_water_top = ,
576                 --node_water = "",
577                 --node_river_water = "",
578                 y_min = 6,
579                 y_max = 31000,
580                 heat_point = 60,
581                 humidity_point = 35,
582         })
583
584         minetest.register_biome({
585                 name = "sandstone_grassland_dunes",
586                 --node_dust = "",
587                 node_top = "default:sand",
588                 depth_top = 1,
589                 node_filler = "default:sand",
590                 depth_filler = 2,
591                 node_stone = "default:sandstone",
592                 --node_water_top = "",
593                 --depth_water_top = ,
594                 --node_water = "",
595                 --node_river_water = "",
596                 y_min = 5,
597                 y_max = 5,
598                 heat_point = 60,
599                 humidity_point = 35,
600         })
601
602         minetest.register_biome({
603                 name = "sandstone_grassland_ocean",
604                 --node_dust = "",
605                 node_top = "default:sand",
606                 depth_top = 1,
607                 node_filler = "default:sand",
608                 depth_filler = 3,
609                 node_stone = "default:sandstone",
610                 --node_water_top = "",
611                 --depth_water_top = ,
612                 --node_water = "",
613                 --node_river_water = "",
614                 y_min = -112,
615                 y_max = 4,
616                 heat_point = 60,
617                 humidity_point = 35,
618         })
619
620
621         minetest.register_biome({
622                 name = "deciduous_forest",
623                 --node_dust = "",
624                 node_top = "default:dirt_with_grass",
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 = 1,
634                 y_max = 31000,
635                 heat_point = 60,
636                 humidity_point = 65,
637         })
638
639         minetest.register_biome({
640                 name = "deciduous_forest_swamp",
641                 --node_dust = "",
642                 node_top = "default:dirt",
643                 depth_top = 1,
644                 node_filler = "default:dirt",
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 = -3,
652                 y_max = 0,
653                 heat_point = 60,
654                 humidity_point = 65,
655         })
656
657         minetest.register_biome({
658                 name = "deciduous_forest_ocean",
659                 --node_dust = "",
660                 node_top = "default:sand",
661                 depth_top = 1,
662                 node_filler = "default:sand",
663                 depth_filler = 3,
664                 --node_stone = "",
665                 --node_water_top = "",
666                 --depth_water_top = ,
667                 --node_water = "",
668                 --node_river_water = "",
669                 y_min = -112,
670                 y_max = -4,
671                 heat_point = 60,
672                 humidity_point = 65,
673         })
674
675         -- Hot
676
677         minetest.register_biome({
678                 name = "desert",
679                 --node_dust = "",
680                 node_top = "default:desert_sand",
681                 depth_top = 1,
682                 node_filler = "default:desert_sand",
683                 depth_filler = 1,
684                 node_stone = "default:desert_stone",
685                 --node_water_top = "",
686                 --depth_water_top = ,
687                 --node_water = "",
688                 --node_river_water = "",
689                 y_min = 5,
690                 y_max = 31000,
691                 heat_point = 85,
692                 humidity_point = 20,
693         })
694
695         minetest.register_biome({
696                 name = "desert_ocean",
697                 --node_dust = "",
698                 node_top = "default:sand",
699                 depth_top = 1,
700                 node_filler = "default:sand",
701                 depth_filler = 3,
702                 node_stone = "default:desert_stone",
703                 --node_water_top = "",
704                 --depth_water_top = ,
705                 --node_water = "",
706                 --node_river_water = "",
707                 y_min = -112,
708                 y_max = 4,
709                 heat_point = 85,
710                 humidity_point = 20,
711         })
712
713
714         minetest.register_biome({
715                 name = "savanna",
716                 --node_dust = "",
717                 node_top = "default:dirt_with_dry_grass",
718                 depth_top = 1,
719                 node_filler = "default:dirt",
720                 depth_filler = 1,
721                 --node_stone = "",
722                 --node_water_top = "",
723                 --depth_water_top = ,
724                 --node_water = "",
725                 --node_river_water = "",
726                 y_min = 1,
727                 y_max = 31000,
728                 heat_point = 85,
729                 humidity_point = 50,
730         })
731
732         minetest.register_biome({
733                 name = "savanna_swamp",
734                 --node_dust = "",
735                 node_top = "default:dirt",
736                 depth_top = 1,
737                 node_filler = "default:dirt",
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 = -3,
745                 y_max = 0,
746                 heat_point = 85,
747                 humidity_point = 50,
748         })
749
750         minetest.register_biome({
751                 name = "savanna_ocean",
752                 --node_dust = "",
753                 node_top = "default:sand",
754                 depth_top = 1,
755                 node_filler = "default:sand",
756                 depth_filler = 3,
757                 --node_stone = "",
758                 --node_water_top = "",
759                 --depth_water_top = ,
760                 --node_water = "",
761                 --node_river_water = "",
762                 y_min = -112,
763                 y_max = -4,
764                 heat_point = 85,
765                 humidity_point = 50,
766         })
767
768
769         minetest.register_biome({
770                 name = "rainforest",
771                 --node_dust = "",
772                 node_top = "default:dirt_with_grass",
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 = 1,
782                 y_max = 31000,
783                 heat_point = 85,
784                 humidity_point = 80,
785         })
786
787         minetest.register_biome({
788                 name = "rainforest_swamp",
789                 --node_dust = "",
790                 node_top = "default:dirt",
791                 depth_top = 1,
792                 node_filler = "default:dirt",
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 = -3,
800                 y_max = 0,
801                 heat_point = 85,
802                 humidity_point = 80,
803         })
804
805         minetest.register_biome({
806                 name = "rainforest_ocean",
807                 --node_dust = "",
808                 node_top = "default:sand",
809                 depth_top = 1,
810                 node_filler = "default:sand",
811                 depth_filler = 3,
812                 --node_stone = "",
813                 --node_water_top = "",
814                 --depth_water_top = ,
815                 --node_water = "",
816                 --node_river_water = "",
817                 y_min = -112,
818                 y_max = -4,
819                 heat_point = 85,
820                 humidity_point = 80,
821         })
822
823         -- Underground
824
825         minetest.register_biome({
826                 name = "underground",
827                 --node_dust = "",
828                 --node_top = "",
829                 --depth_top = ,
830                 --node_filler = "",
831                 --depth_filler = ,
832                 --node_stone = "",
833                 --node_water_top = "",
834                 --depth_water_top = ,
835                 --node_water = "",
836                 --node_river_water = "",
837                 y_min = -31000,
838                 y_max = -113,
839                 heat_point = 50,
840                 humidity_point = 50,
841         })
842 end
843
844
845 --
846 -- Register decorations
847 --
848
849 -- Mgv6
850
851 function default.register_mgv6_decorations()
852         minetest.clear_registered_decorations()
853
854         -- Papyrus
855
856         minetest.register_decoration({
857                 deco_type = "simple",
858                 place_on = {"default:dirt_with_grass"},
859                 sidelen = 16,
860                 noise_params = {
861                         offset = -0.3,
862                         scale = 0.7,
863                         spread = {x = 100, y = 100, z = 100},
864                         seed = 354,
865                         octaves = 3,
866                         persist = 0.7
867                 },
868                 y_min = 1,
869                 y_max = 1,
870                 decoration = "default:papyrus",
871                 height = 2,
872                 height_max = 4,
873                 spawn_by = "default:water_source",
874                 num_spawn_by = 1,
875         })
876
877         -- Cacti
878
879         minetest.register_decoration({
880                 deco_type = "simple",
881                 place_on = {"default:desert_sand"},
882                 sidelen = 16,
883                 noise_params = {
884                         offset = -0.012,
885                         scale = 0.024,
886                         spread = {x = 100, y = 100, z = 100},
887                         seed = 230,
888                         octaves = 3,
889                         persist = 0.6
890                 },
891                 y_min = 1,
892                 y_max = 30,
893                 decoration = "default:cactus",
894                 height = 3,
895                 height_max = 4,
896         })
897
898         -- Long grasses
899
900         for length = 1, 5 do
901                 minetest.register_decoration({
902                         deco_type = "simple",
903                         place_on = {"default:dirt_with_grass"},
904                         sidelen = 16,
905                         noise_params = {
906                                 offset = 0,
907                                 scale = 0.007,
908                                 spread = {x = 100, y = 100, z = 100},
909                                 seed = 329,
910                                 octaves = 3,
911                                 persist = 0.6
912                         },
913                         y_min = 1,
914                         y_max = 30,
915                         decoration = "default:grass_"..length,
916                 })
917         end
918
919         -- Dry shrubs
920
921         minetest.register_decoration({
922                 deco_type = "simple",
923                 place_on = {"default:desert_sand", "default:dirt_with_snow"},
924                 sidelen = 16,
925                 noise_params = {
926                         offset = 0,
927                         scale = 0.035,
928                         spread = {x = 100, y = 100, z = 100},
929                         seed = 329,
930                         octaves = 3,
931                         persist = 0.6
932                 },
933                 y_min = 1,
934                 y_max = 30,
935                 decoration = "default:dry_shrub",
936         })
937 end
938
939 -- All mapgens except mgv6 and singlenode
940
941 local function register_grass_decoration(offset, scale, length)
942         minetest.register_decoration({
943                 deco_type = "simple",
944                 place_on = {"default:dirt_with_grass", "default:sand"},
945                 sidelen = 16,
946                 noise_params = {
947                         offset = offset,
948                         scale = scale,
949                         spread = {x = 200, y = 200, z = 200},
950                         seed = 329,
951                         octaves = 3,
952                         persist = 0.6
953                 },
954                 biomes = {"stone_grassland", "sandstone_grassland",
955                         "deciduous_forest", "coniferous_forest",
956                         "stone_grassland_dunes", "sandstone_grassland_dunes",
957                         "coniferous_forest_dunes"},
958                 y_min = 1,
959                 y_max = 31000,
960                 decoration = "default:grass_"..length,
961         })
962 end
963
964 local function register_dry_grass_decoration(offset, scale, length)
965         minetest.register_decoration({
966                 deco_type = "simple",
967                 place_on = {"default:dirt_with_dry_grass"},
968                 sidelen = 16,
969                 noise_params = {
970                         offset = offset,
971                         scale = scale,
972                         spread = {x = 200, y = 200, z = 200},
973                         seed = 329,
974                         octaves = 3,
975                         persist = 0.6
976                 },
977                 biomes = {"savanna"},
978                 y_min = 1,
979                 y_max = 31000,
980                 decoration = "default:dry_grass_"..length,
981         })
982 end
983
984 function default.register_decorations()
985         minetest.clear_registered_decorations()
986
987         -- Apple tree and log
988
989         minetest.register_decoration({
990                 deco_type = "schematic",
991                 place_on = {"default:dirt_with_grass"},
992                 sidelen = 16,
993                 noise_params = {
994                         offset = 0.04,
995                         scale = 0.02,
996                         spread = {x = 250, y = 250, z = 250},
997                         seed = 2,
998                         octaves = 3,
999                         persist = 0.66
1000                 },
1001                 biomes = {"deciduous_forest"},
1002                 y_min = 1,
1003                 y_max = 31000,
1004                 schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts",
1005                 flags = "place_center_x, place_center_z",
1006         })
1007
1008         minetest.register_decoration({
1009                 deco_type = "schematic",
1010                 place_on = {"default:dirt_with_grass"},
1011                 sidelen = 16,
1012                 noise_params = {
1013                         offset = 0.002,
1014                         scale = 0.001,
1015                         spread = {x = 250, y = 250, z = 250},
1016                         seed = 2,
1017                         octaves = 3,
1018                         persist = 0.66
1019                 },
1020                 biomes = {"deciduous_forest"},
1021                 y_min = 1,
1022                 y_max = 31000,
1023                 schematic = {
1024                         size = { x = 3, y = 3, z = 1},
1025                         data = {
1026                                 { name = "air", prob = 0 },
1027                                 { name = "air", prob = 0 },
1028                                 { name = "air", prob = 0 },
1029                                 { name = "default:tree", param2 = 12, prob = 191 },
1030                                 { name = "default:tree", param2 = 12 },
1031                                 { name = "default:tree", param2 = 12, prob = 127 },
1032                                 { name = "air", prob = 0 },
1033                                 { name = "flowers:mushroom_brown", prob = 63 },
1034                                 { name = "air", prob = 0 },
1035                         },
1036                 },
1037                 flags = "place_center_x",
1038                 rotation = "random",
1039         })
1040
1041         -- Jungle tree and log
1042
1043         minetest.register_decoration({
1044                 deco_type = "schematic",
1045                 place_on = {"default:dirt_with_grass", "default:dirt"},
1046                 sidelen = 80,
1047                 fill_ratio = 0.09,
1048                 biomes = {"rainforest", "rainforest_swamp"},
1049                 y_min = 0,
1050                 y_max = 31000,
1051                 schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts",
1052                 flags = "place_center_x, place_center_z",
1053                 rotation = "random",
1054         })
1055
1056         minetest.register_decoration({
1057                 deco_type = "schematic",
1058                 place_on = {"default:dirt_with_grass", "default:dirt"},
1059                 sidelen = 80,
1060                 fill_ratio = 0.01,
1061                 biomes = {"rainforest", "rainforest_swamp"},
1062                 y_min = 1,
1063                 y_max = 31000,
1064                 schematic = {
1065                         size = { x = 3, y = 3, z = 1},
1066                         data = {
1067                                 { name = "air", prob = 0 },
1068                                 { name = "air", prob = 0 },
1069                                 { name = "air", prob = 0 },
1070                                 { name = "default:jungletree", param2 = 12, prob = 191 },
1071                                 { name = "default:jungletree", param2 = 12 },
1072                                 { name = "default:jungletree", param2 = 12, prob = 127 },
1073                                 { name = "air", prob = 0 },
1074                                 { name = "flowers:mushroom_brown", prob = 127 },
1075                                 { name = "air", prob = 0 },
1076                         },
1077                 },
1078                 flags = "place_center_x",
1079                 rotation = "random",
1080         })
1081
1082         -- Taiga and temperate coniferous forest pine tree and log
1083
1084         minetest.register_decoration({
1085                 deco_type = "schematic",
1086                 place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
1087                 sidelen = 16,
1088                 noise_params = {
1089                         offset = 0.04,
1090                         scale = 0.02,
1091                         spread = {x = 250, y = 250, z = 250},
1092                         seed = 2,
1093                         octaves = 3,
1094                         persist = 0.66
1095                 },
1096                 biomes = {"taiga", "coniferous_forest"},
1097                 y_min = 2,
1098                 y_max = 31000,
1099                 schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts",
1100                 flags = "place_center_x, place_center_z",
1101         })
1102
1103         minetest.register_decoration({
1104                 deco_type = "schematic",
1105                 place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
1106                 sidelen = 80,
1107                 fill_ratio = 0.003,
1108                 biomes = {"taiga", "coniferous_forest"},
1109                 y_min = 1,
1110                 y_max = 31000,
1111                 schematic = {
1112                         size = { x = 3, y = 3, z = 1},
1113                         data = {
1114                                 { name = "air", prob = 0 },
1115                                 { name = "air", prob = 0 },
1116                                 { name = "air", prob = 0 },
1117                                 { name = "default:pine_tree", param2 = 12, prob = 191 },
1118                                 { name = "default:pine_tree", param2 = 12 },
1119                                 { name = "default:pine_tree", param2 = 12, prob = 127 },
1120                                 { name = "air", prob = 0 },
1121                                 { name = "flowers:mushroom_red", prob = 63 },
1122                                 { name = "air", prob = 0 },
1123                         },
1124                 },
1125                 flags = "place_center_x",
1126                 rotation = "random",
1127         })
1128
1129         -- Acacia tree and log
1130
1131         minetest.register_decoration({
1132                 deco_type = "schematic",
1133                 place_on = {"default:dirt_with_dry_grass"},
1134                 sidelen = 16,
1135                 noise_params = {
1136                         offset = 0,
1137                         scale = 0.002,
1138                         spread = {x = 250, y = 250, z = 250},
1139                         seed = 2,
1140                         octaves = 3,
1141                         persist = 0.66
1142                 },
1143                 biomes = {"savanna"},
1144                 y_min = 1,
1145                 y_max = 31000,
1146                 schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts",
1147                 flags = "place_center_x, place_center_z",
1148                 rotation = "random",
1149         })
1150
1151         minetest.register_decoration({
1152                 deco_type = "schematic",
1153                 place_on = {"default:dirt_with_dry_grass"},
1154                 sidelen = 16,
1155                 noise_params = {
1156                         offset = 0,
1157                         scale = 0.001,
1158                         spread = {x = 250, y = 250, z = 250},
1159                         seed = 2,
1160                         octaves = 3,
1161                         persist = 0.66
1162                 },
1163                 biomes = {"savanna"},
1164                 y_min = 1,
1165                 y_max = 31000,
1166                 schematic = {
1167                         size = { x = 3, y = 2, z = 1},
1168                         data = {
1169                                 { name = "air", prob = 0 },
1170                                 { name = "air", prob = 0 },
1171                                 { name = "air", prob = 0 },
1172                                 { name = "default:acacia_tree", param2 = 12, prob = 191 },
1173                                 { name = "default:acacia_tree", param2 = 12 },
1174                                 { name = "default:acacia_tree", param2 = 12, prob = 127 },
1175                         },
1176                 },
1177                 flags = "place_center_x",
1178                 rotation = "random",
1179         })
1180
1181         -- Aspen tree and log
1182
1183         minetest.register_decoration({
1184                 deco_type = "schematic",
1185                 place_on = {"default:dirt_with_grass"},
1186                 sidelen = 16,
1187                 noise_params = {
1188                         offset = 0.0,
1189                         scale = -0.03,
1190                         spread = {x = 250, y = 250, z = 250},
1191                         seed = 2,
1192                         octaves = 3,
1193                         persist = 0.66
1194                 },
1195                 biomes = {"deciduous_forest"},
1196                 y_min = 1,
1197                 y_max = 31000,
1198                 schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts",
1199                 flags = "place_center_x, place_center_z",
1200                 rotation = "random",
1201         })
1202
1203         minetest.register_decoration({
1204                 deco_type = "schematic",
1205                 place_on = {"default:dirt_with_grass"},
1206                 sidelen = 16,
1207                 noise_params = {
1208                         offset = 0.0,
1209                         scale = -0.0015,
1210                         spread = {x = 250, y = 250, z = 250},
1211                         seed = 2,
1212                         octaves = 3,
1213                         persist = 0.66
1214                 },
1215                 biomes = {"deciduous_forest"},
1216                 y_min = 1,
1217                 y_max = 31000,
1218                 schematic = {
1219                         size = { x = 3, y = 3, z = 1},
1220                         data = {
1221                                 { name = "air", prob = 0 },
1222                                 { name = "air", prob = 0 },
1223                                 { name = "air", prob = 0 },
1224                                 { name = "default:aspen_tree", param2 = 12 },
1225                                 { name = "default:aspen_tree", param2 = 12 },
1226                                 { name = "default:aspen_tree", param2 = 12, prob = 127 },
1227                                 { name = "flowers:mushroom_red", prob = 63 },
1228                                 { name = "flowers:mushroom_brown", prob = 63 },
1229                                 { name = "air", prob = 0 },
1230                         },
1231                 },
1232                 flags = "place_center_x",
1233                 rotation = "random",
1234         })
1235         -- Large cactus
1236
1237         minetest.register_decoration({
1238                 deco_type = "schematic",
1239                 place_on = {"default:desert_sand"},
1240                 sidelen = 16,
1241                 noise_params = {
1242                         offset = -0.0003,
1243                         scale = 0.0009,
1244                         spread = {x = 200, y = 200, z = 200},
1245                         seed = 230,
1246                         octaves = 3,
1247                         persist = 0.6
1248                 },
1249                 biomes = {"desert"},
1250                 y_min = 5,
1251                 y_max = 31000,
1252                 schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts",
1253                 flags = "place_center_x",
1254                 rotation = "random",
1255         })
1256
1257         -- Cactus
1258
1259         minetest.register_decoration({
1260                 deco_type = "simple",
1261                 place_on = {"default:desert_sand"},
1262                 sidelen = 16,
1263                 noise_params = {
1264                         offset = -0.0003,
1265                         scale = 0.0009,
1266                         spread = {x = 200, y = 200, z = 200},
1267                         seed = 230,
1268                         octaves = 3,
1269                         persist = 0.6
1270                 },
1271                 biomes = {"desert"},
1272                 y_min = 5,
1273                 y_max = 31000,
1274                 decoration = "default:cactus",
1275                 height = 2,
1276                 height_max = 5,
1277         })
1278
1279         -- Papyrus
1280
1281         minetest.register_decoration({
1282                 deco_type = "schematic",
1283                 place_on = {"default:dirt"},
1284                 sidelen = 16,
1285                 noise_params = {
1286                         offset = -0.3,
1287                         scale = 0.7,
1288                         spread = {x = 200, y = 200, z = 200},
1289                         seed = 354,
1290                         octaves = 3,
1291                         persist = 0.7
1292                 },
1293                 biomes = {"savanna_swamp"},
1294                 y_min = 0,
1295                 y_max = 0,
1296                 schematic = minetest.get_modpath("default").."/schematics/papyrus.mts",
1297         })
1298
1299         -- Grasses
1300
1301         register_grass_decoration(-0.03,  0.09,  5)
1302         register_grass_decoration(-0.015, 0.075, 4)
1303         register_grass_decoration(0,      0.06,  3)
1304         register_grass_decoration(0.015,  0.045, 2)
1305         register_grass_decoration(0.03,   0.03,  1)
1306
1307         -- Dry grasses
1308
1309         register_dry_grass_decoration(0.01, 0.05,  5)
1310         register_dry_grass_decoration(0.03, 0.03,  4)
1311         register_dry_grass_decoration(0.05, 0.01,  3)
1312         register_dry_grass_decoration(0.07, -0.01, 2)
1313         register_dry_grass_decoration(0.09, -0.03, 1)
1314
1315         -- Junglegrass
1316
1317         minetest.register_decoration({
1318                 deco_type = "simple",
1319                 place_on = {"default:dirt_with_grass"},
1320                 sidelen = 80,
1321                 fill_ratio = 0.1,
1322                 biomes = {"rainforest"},
1323                 y_min = 1,
1324                 y_max = 31000,
1325                 decoration = "default:junglegrass",
1326         })
1327
1328         -- Dry shrub
1329
1330         minetest.register_decoration({
1331                 deco_type = "simple",
1332                 place_on = {"default:desert_sand", "default:dirt_with_snow"},
1333                 sidelen = 16,
1334                 noise_params = {
1335                         offset = 0,
1336                         scale = 0.02,
1337                         spread = {x = 200, y = 200, z = 200},
1338                         seed = 329,
1339                         octaves = 3,
1340                         persist = 0.6
1341                 },
1342                 biomes = {"desert", "tundra"},
1343                 y_min = 2,
1344                 y_max = 31000,
1345                 decoration = "default:dry_shrub",
1346         })
1347 end
1348
1349
1350 --
1351 -- Generate nyan cats
1352 --
1353
1354 -- All mapgens except singlenode
1355
1356 function default.make_nyancat(pos, facedir, length)
1357         local tailvec = {x = 0, y = 0, z = 0}
1358         if facedir == 0 then
1359                 tailvec.z = 1
1360         elseif facedir == 1 then
1361                 tailvec.x = 1
1362         elseif facedir == 2 then
1363                 tailvec.z = -1
1364         elseif facedir == 3 then
1365                 tailvec.x = -1
1366         else
1367                 facedir = 0
1368                 tailvec.z = 1
1369         end
1370         local p = {x = pos.x, y = pos.y, z = pos.z}
1371         minetest.set_node(p, {name = "default:nyancat", param2 = facedir})
1372         for i = 1, length do
1373                 p.x = p.x + tailvec.x
1374                 p.z = p.z + tailvec.z
1375                 minetest.set_node(p, {name = "default:nyancat_rainbow", param2 = facedir})
1376         end
1377 end
1378
1379 function default.generate_nyancats(minp, maxp, seed)
1380         local height_min = -31000
1381         local height_max = -32
1382         if maxp.y < height_min or minp.y > height_max then
1383                 return
1384         end
1385         local y_min = math.max(minp.y, height_min)
1386         local y_max = math.min(maxp.y, height_max)
1387         local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
1388         local pr = PseudoRandom(seed + 9324342)
1389         local max_num_nyancats = math.floor(volume / (16 * 16 * 16))
1390         for i = 1, max_num_nyancats do
1391                 if pr:next(0, 1000) == 0 then
1392                         local x0 = pr:next(minp.x, maxp.x)
1393                         local y0 = pr:next(minp.y, maxp.y)
1394                         local z0 = pr:next(minp.z, maxp.z)
1395                         local p0 = {x = x0, y = y0, z = z0}
1396                         default.make_nyancat(p0, pr:next(0, 3), pr:next(3, 15))
1397                 end
1398         end
1399 end
1400
1401
1402 --
1403 -- Detect mapgen to select functions
1404 --
1405
1406 -- Mods using singlenode mapgen can call these functions to enable
1407 -- the use of minetest.generate_ores or minetest.generate_decorations
1408
1409 local mg_params = minetest.get_mapgen_params()
1410 if mg_params.mgname == "v6" then
1411         default.register_ores()
1412         default.register_mgv6_decorations()
1413         minetest.register_on_generated(default.generate_nyancats)
1414 elseif mg_params.mgname ~= "singlenode" then
1415         default.register_biomes()
1416         default.register_ores()
1417         default.register_decorations()
1418         minetest.register_on_generated(default.generate_nyancats)
1419 end