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