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