3424a557b0ccd8deb1482b3a50871fe9d4a5fd44
[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.036,
995                         scale = 0.022,
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.0018,
1014                         scale = 0.0011,
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.036,
1090                         scale = 0.022,
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                 noise_params = {
1108                         offset = 0.0018,
1109                         scale = 0.0011,
1110                         spread = {x = 250, y = 250, z = 250},
1111                         seed = 2,
1112                         octaves = 3,
1113                         persist = 0.66
1114                 },
1115                 biomes = {"taiga", "coniferous_forest"},
1116                 y_min = 1,
1117                 y_max = 31000,
1118                 schematic = {
1119                         size = {x = 3, y = 3, z = 1},
1120                         data = {
1121                                 {name = "air", prob = 0},
1122                                 {name = "air", prob = 0},
1123                                 {name = "air", prob = 0},
1124                                 {name = "default:pine_tree", param2 = 12, prob = 191},
1125                                 {name = "default:pine_tree", param2 = 12},
1126                                 {name = "default:pine_tree", param2 = 12, prob = 127},
1127                                 {name = "air", prob = 0},
1128                                 {name = "flowers:mushroom_red", prob = 63},
1129                                 {name = "air", prob = 0},
1130                         },
1131                 },
1132                 flags = "place_center_x",
1133                 rotation = "random",
1134         })
1135
1136         -- Acacia tree and log
1137
1138         minetest.register_decoration({
1139                 deco_type = "schematic",
1140                 place_on = {"default:dirt_with_dry_grass"},
1141                 sidelen = 16,
1142                 noise_params = {
1143                         offset = 0,
1144                         scale = 0.002,
1145                         spread = {x = 250, y = 250, z = 250},
1146                         seed = 2,
1147                         octaves = 3,
1148                         persist = 0.66
1149                 },
1150                 biomes = {"savanna"},
1151                 y_min = 1,
1152                 y_max = 31000,
1153                 schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts",
1154                 flags = "place_center_x, place_center_z",
1155                 rotation = "random",
1156         })
1157
1158         minetest.register_decoration({
1159                 deco_type = "schematic",
1160                 place_on = {"default:dirt_with_dry_grass"},
1161                 sidelen = 16,
1162                 noise_params = {
1163                         offset = 0,
1164                         scale = 0.001,
1165                         spread = {x = 250, y = 250, z = 250},
1166                         seed = 2,
1167                         octaves = 3,
1168                         persist = 0.66
1169                 },
1170                 biomes = {"savanna"},
1171                 y_min = 1,
1172                 y_max = 31000,
1173                 schematic = {
1174                         size = {x = 3, y = 2, z = 1},
1175                         data = {
1176                                 {name = "air", prob = 0},
1177                                 {name = "air", prob = 0},
1178                                 {name = "air", prob = 0},
1179                                 {name = "default:acacia_tree", param2 = 12, prob = 191},
1180                                 {name = "default:acacia_tree", param2 = 12},
1181                                 {name = "default:acacia_tree", param2 = 12, prob = 127},
1182                         },
1183                 },
1184                 flags = "place_center_x",
1185                 rotation = "random",
1186         })
1187
1188         -- Aspen tree and log
1189
1190         minetest.register_decoration({
1191                 deco_type = "schematic",
1192                 place_on = {"default:dirt_with_grass"},
1193                 sidelen = 16,
1194                 noise_params = {
1195                         offset = 0.0,
1196                         scale = -0.015,
1197                         spread = {x = 250, y = 250, z = 250},
1198                         seed = 2,
1199                         octaves = 3,
1200                         persist = 0.66
1201                 },
1202                 biomes = {"deciduous_forest"},
1203                 y_min = 1,
1204                 y_max = 31000,
1205                 schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts",
1206                 flags = "place_center_x, place_center_z",
1207                 rotation = "random",
1208         })
1209
1210         minetest.register_decoration({
1211                 deco_type = "schematic",
1212                 place_on = {"default:dirt_with_grass"},
1213                 sidelen = 16,
1214                 noise_params = {
1215                         offset = 0.0,
1216                         scale = -0.0008,
1217                         spread = {x = 250, y = 250, z = 250},
1218                         seed = 2,
1219                         octaves = 3,
1220                         persist = 0.66
1221                 },
1222                 biomes = {"deciduous_forest"},
1223                 y_min = 1,
1224                 y_max = 31000,
1225                 schematic = {
1226                         size = {x = 3, y = 3, z = 1},
1227                         data = {
1228                                 {name = "air", prob = 0},
1229                                 {name = "air", prob = 0},
1230                                 {name = "air", prob = 0},
1231                                 {name = "default:aspen_tree", param2 = 12},
1232                                 {name = "default:aspen_tree", param2 = 12},
1233                                 {name = "default:aspen_tree", param2 = 12, prob = 127},
1234                                 {name = "flowers:mushroom_red", prob = 63},
1235                                 {name = "flowers:mushroom_brown", prob = 63},
1236                                 {name = "air", prob = 0},
1237                         },
1238                 },
1239                 flags = "place_center_x",
1240                 rotation = "random",
1241         })
1242         -- Large cactus
1243
1244         minetest.register_decoration({
1245                 deco_type = "schematic",
1246                 place_on = {"default:desert_sand"},
1247                 sidelen = 16,
1248                 noise_params = {
1249                         offset = -0.0003,
1250                         scale = 0.0009,
1251                         spread = {x = 200, y = 200, z = 200},
1252                         seed = 230,
1253                         octaves = 3,
1254                         persist = 0.6
1255                 },
1256                 biomes = {"desert"},
1257                 y_min = 5,
1258                 y_max = 31000,
1259                 schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts",
1260                 flags = "place_center_x",
1261                 rotation = "random",
1262         })
1263
1264         -- Cactus
1265
1266         minetest.register_decoration({
1267                 deco_type = "simple",
1268                 place_on = {"default:desert_sand"},
1269                 sidelen = 16,
1270                 noise_params = {
1271                         offset = -0.0003,
1272                         scale = 0.0009,
1273                         spread = {x = 200, y = 200, z = 200},
1274                         seed = 230,
1275                         octaves = 3,
1276                         persist = 0.6
1277                 },
1278                 biomes = {"desert"},
1279                 y_min = 5,
1280                 y_max = 31000,
1281                 decoration = "default:cactus",
1282                 height = 2,
1283                 height_max = 5,
1284         })
1285
1286         -- Papyrus
1287
1288         minetest.register_decoration({
1289                 deco_type = "schematic",
1290                 place_on = {"default:dirt"},
1291                 sidelen = 16,
1292                 noise_params = {
1293                         offset = -0.3,
1294                         scale = 0.7,
1295                         spread = {x = 200, y = 200, z = 200},
1296                         seed = 354,
1297                         octaves = 3,
1298                         persist = 0.7
1299                 },
1300                 biomes = {"savanna_swamp"},
1301                 y_min = 0,
1302                 y_max = 0,
1303                 schematic = minetest.get_modpath("default").."/schematics/papyrus.mts",
1304         })
1305
1306         -- Grasses
1307
1308         register_grass_decoration(-0.03,  0.09,  5)
1309         register_grass_decoration(-0.015, 0.075, 4)
1310         register_grass_decoration(0,      0.06,  3)
1311         register_grass_decoration(0.015,  0.045, 2)
1312         register_grass_decoration(0.03,   0.03,  1)
1313
1314         -- Dry grasses
1315
1316         register_dry_grass_decoration(0.01, 0.05,  5)
1317         register_dry_grass_decoration(0.03, 0.03,  4)
1318         register_dry_grass_decoration(0.05, 0.01,  3)
1319         register_dry_grass_decoration(0.07, -0.01, 2)
1320         register_dry_grass_decoration(0.09, -0.03, 1)
1321
1322         -- Junglegrass
1323
1324         minetest.register_decoration({
1325                 deco_type = "simple",
1326                 place_on = {"default:dirt_with_grass"},
1327                 sidelen = 80,
1328                 fill_ratio = 0.1,
1329                 biomes = {"rainforest"},
1330                 y_min = 1,
1331                 y_max = 31000,
1332                 decoration = "default:junglegrass",
1333         })
1334
1335         -- Dry shrub
1336
1337         minetest.register_decoration({
1338                 deco_type = "simple",
1339                 place_on = {"default:desert_sand", "default:dirt_with_snow"},
1340                 sidelen = 16,
1341                 noise_params = {
1342                         offset = 0,
1343                         scale = 0.02,
1344                         spread = {x = 200, y = 200, z = 200},
1345                         seed = 329,
1346                         octaves = 3,
1347                         persist = 0.6
1348                 },
1349                 biomes = {"desert", "tundra"},
1350                 y_min = 2,
1351                 y_max = 31000,
1352                 decoration = "default:dry_shrub",
1353         })
1354 end
1355
1356
1357 --
1358 -- Generate nyan cats
1359 --
1360
1361 -- All mapgens except singlenode
1362
1363 function default.make_nyancat(pos, facedir, length)
1364         local tailvec = {x = 0, y = 0, z = 0}
1365         if facedir == 0 then
1366                 tailvec.z = 1
1367         elseif facedir == 1 then
1368                 tailvec.x = 1
1369         elseif facedir == 2 then
1370                 tailvec.z = -1
1371         elseif facedir == 3 then
1372                 tailvec.x = -1
1373         else
1374                 facedir = 0
1375                 tailvec.z = 1
1376         end
1377         local p = {x = pos.x, y = pos.y, z = pos.z}
1378         minetest.set_node(p, {name = "default:nyancat", param2 = facedir})
1379         for i = 1, length do
1380                 p.x = p.x + tailvec.x
1381                 p.z = p.z + tailvec.z
1382                 minetest.set_node(p, {name = "default:nyancat_rainbow", param2 = facedir})
1383         end
1384 end
1385
1386 function default.generate_nyancats(minp, maxp, seed)
1387         local height_min = -31000
1388         local height_max = -32
1389         if maxp.y < height_min or minp.y > height_max then
1390                 return
1391         end
1392         local y_min = math.max(minp.y, height_min)
1393         local y_max = math.min(maxp.y, height_max)
1394         local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
1395         local pr = PseudoRandom(seed + 9324342)
1396         local max_num_nyancats = math.floor(volume / (16 * 16 * 16))
1397         for i = 1, max_num_nyancats do
1398                 if pr:next(0, 1000) == 0 then
1399                         local x0 = pr:next(minp.x, maxp.x)
1400                         local y0 = pr:next(minp.y, maxp.y)
1401                         local z0 = pr:next(minp.z, maxp.z)
1402                         local p0 = {x = x0, y = y0, z = z0}
1403                         default.make_nyancat(p0, pr:next(0, 3), pr:next(3, 15))
1404                 end
1405         end
1406 end
1407
1408
1409 --
1410 -- Detect mapgen to select functions
1411 --
1412
1413 -- Mods using singlenode mapgen can call these functions to enable
1414 -- the use of minetest.generate_ores or minetest.generate_decorations
1415
1416 local mg_params = minetest.get_mapgen_params()
1417 if mg_params.mgname == "v6" then
1418         default.register_ores()
1419         default.register_mgv6_decorations()
1420         minetest.register_on_generated(default.generate_nyancats)
1421 elseif mg_params.mgname ~= "singlenode" then
1422         default.register_biomes()
1423         default.register_ores()
1424         default.register_decorations()
1425         minetest.register_on_generated(default.generate_nyancats)
1426 end