2 -- Aliases for map generator outputs
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")
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")
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")
45 -- All mapgens except singlenode
46 -- Blob ore first to avoid other ores inside blobs
48 function default.register_ores()
52 minetest.register_ore({
55 wherein = {"default:sand"},
56 clust_scarcity = 16 * 16 * 16,
60 noise_threshhold = 0.0,
64 spread = {x = 5, y = 5, z = 5},
73 minetest.register_ore({
76 wherein = {"default:stone"},
77 clust_scarcity = 16 * 16 * 16,
81 noise_threshhold = 0.0,
85 spread = {x = 5, y = 5, z = 5},
94 minetest.register_ore({
97 wherein = {"default:stone"},
98 clust_scarcity = 16 * 16 * 16,
102 noise_threshhold = 0.0,
106 spread = {x = 5, y = 5, z = 5},
115 minetest.register_ore({
117 ore = "default:gravel",
118 wherein = {"default:stone"},
119 clust_scarcity = 16 * 16 * 16,
123 noise_threshhold = 0.0,
127 spread = {x = 5, y = 5, z = 5},
136 minetest.register_ore({
137 ore_type = "scatter",
138 ore = "default:stone_with_coal",
139 wherein = "default:stone",
140 clust_scarcity = 8 * 8 * 8,
147 minetest.register_ore({
148 ore_type = "scatter",
149 ore = "default:stone_with_coal",
150 wherein = "default:stone",
151 clust_scarcity = 24 * 24 * 24,
160 minetest.register_ore({
161 ore_type = "scatter",
162 ore = "default:stone_with_iron",
163 wherein = "default:stone",
164 clust_scarcity = 12 * 12 * 12,
171 minetest.register_ore({
172 ore_type = "scatter",
173 ore = "default:stone_with_iron",
174 wherein = "default:stone",
175 clust_scarcity = 9 * 9 * 9,
182 minetest.register_ore({
183 ore_type = "scatter",
184 ore = "default:stone_with_iron",
185 wherein = "default:stone",
186 clust_scarcity = 7 * 7 * 7,
193 minetest.register_ore({
194 ore_type = "scatter",
195 ore = "default:stone_with_iron",
196 wherein = "default:stone",
197 clust_scarcity = 24 * 24 * 24,
206 minetest.register_ore({
207 ore_type = "scatter",
208 ore = "default:stone_with_mese",
209 wherein = "default:stone",
210 clust_scarcity = 18 * 18 * 18,
217 minetest.register_ore({
218 ore_type = "scatter",
219 ore = "default:stone_with_mese",
220 wherein = "default:stone",
221 clust_scarcity = 14 * 14 * 14,
228 minetest.register_ore({
229 ore_type = "scatter",
230 ore = "default:mese",
231 wherein = "default:stone",
232 clust_scarcity = 36 * 36 * 36,
241 minetest.register_ore({
242 ore_type = "scatter",
243 ore = "default:stone_with_gold",
244 wherein = "default:stone",
245 clust_scarcity = 15 * 15 * 15,
252 minetest.register_ore({
253 ore_type = "scatter",
254 ore = "default:stone_with_gold",
255 wherein = "default:stone",
256 clust_scarcity = 13 * 13 * 13,
265 minetest.register_ore({
266 ore_type = "scatter",
267 ore = "default:stone_with_diamond",
268 wherein = "default:stone",
269 clust_scarcity = 17 * 17 * 17,
276 minetest.register_ore({
277 ore_type = "scatter",
278 ore = "default:stone_with_diamond",
279 wherein = "default:stone",
280 clust_scarcity = 15 * 15 * 15,
289 minetest.register_ore({
290 ore_type = "scatter",
291 ore = "default:stone_with_copper",
292 wherein = "default:stone",
293 clust_scarcity = 12 * 12 * 12,
300 minetest.register_ore({
301 ore_type = "scatter",
302 ore = "default:stone_with_copper",
303 wherein = "default:stone",
304 clust_scarcity = 9 * 9 * 9,
317 -- All mapgens except mgv6 and singlenode
319 function default.register_biomes()
320 minetest.clear_registered_biomes()
324 minetest.register_biome({
326 node_dust = "default:snowblock",
327 node_top = "default:snowblock",
329 node_filler = "default:snowblock",
331 node_stone = "default:ice",
332 node_water_top = "default:ice",
333 depth_water_top = 10,
335 node_river_water = "default:ice",
342 minetest.register_biome({
343 name = "glacier_ocean",
344 node_dust = "default:snowblock",
345 node_top = "default:gravel",
347 node_filler = "default:gravel",
350 --node_water_top = "",
351 --depth_water_top = ,
353 --node_river_water = "",
362 minetest.register_biome({
364 node_dust = "default:snow",
365 node_top = "default:dirt_with_snow",
367 node_filler = "default:dirt",
370 --node_water_top = "",
371 --depth_water_top = ,
373 --node_river_water = "",
380 minetest.register_biome({
381 name = "tundra_ocean",
383 node_top = "default:sand",
385 node_filler = "default:sand",
388 --node_water_top = "",
389 --depth_water_top = ,
391 --node_river_water = "",
398 minetest.register_biome({
400 node_dust = "default:snow",
401 node_top = "default:snowblock",
403 node_filler = "default:dirt",
406 --node_water_top = "",
407 --depth_water_top = ,
409 --node_river_water = "",
416 minetest.register_biome({
417 name = "taiga_ocean",
419 node_top = "default:sand",
421 node_filler = "default:sand",
424 --node_water_top = "",
425 --depth_water_top = ,
427 --node_river_water = "",
436 minetest.register_biome({
437 name = "stone_grassland",
439 node_top = "default:dirt_with_grass",
441 node_filler = "default:dirt",
444 --node_water_top = "",
445 --depth_water_top = ,
447 --node_river_water = "",
454 minetest.register_biome({
455 name = "stone_grassland_ocean",
457 node_top = "default:sand",
459 node_filler = "default:sand",
462 --node_water_top = "",
463 --depth_water_top = ,
465 --node_river_water = "",
472 minetest.register_biome({
473 name = "coniferous_forest",
475 node_top = "default:dirt_with_grass",
477 node_filler = "default:dirt",
480 --node_water_top = "",
481 --depth_water_top = ,
483 --node_river_water = "",
490 minetest.register_biome({
491 name = "coniferous_forest_ocean",
493 node_top = "default:sand",
495 node_filler = "default:sand",
498 --node_water_top = "",
499 --depth_water_top = ,
501 --node_river_water = "",
510 minetest.register_biome({
511 name = "sandstone_grassland",
513 node_top = "default:dirt_with_grass",
515 node_filler = "default:dirt",
517 node_stone = "default:sandstone",
518 --node_water_top = "",
519 --depth_water_top = ,
521 --node_river_water = "",
528 minetest.register_biome({
529 name = "sandstone_grassland_ocean",
531 node_top = "default:sand",
533 node_filler = "default:sand",
535 node_stone = "default:sandstone",
536 --node_water_top = "",
537 --depth_water_top = ,
539 --node_river_water = "",
546 minetest.register_biome({
547 name = "deciduous_forest",
549 node_top = "default:dirt_with_grass",
551 node_filler = "default:dirt",
554 --node_water_top = "",
555 --depth_water_top = ,
557 --node_river_water = "",
564 minetest.register_biome({
565 name = "deciduous_forest_ocean",
567 node_top = "default:sand",
569 node_filler = "default:sand",
572 --node_water_top = "",
573 --depth_water_top = ,
575 --node_river_water = "",
584 minetest.register_biome({
587 node_top = "default:desert_sand",
589 node_filler = "default:desert_sand",
591 node_stone = "default:desert_stone",
592 --node_water_top = "",
593 --depth_water_top = ,
595 --node_river_water = "",
602 minetest.register_biome({
603 name = "desert_ocean",
605 node_top = "default:sand",
607 node_filler = "default:sand",
609 node_stone = "default:desert_stone",
610 --node_water_top = "",
611 --depth_water_top = ,
613 --node_river_water = "",
620 minetest.register_biome({
623 node_top = "default:dirt_with_dry_grass",
625 node_filler = "default:dirt",
628 --node_water_top = "",
629 --depth_water_top = ,
631 --node_river_water = "",
638 minetest.register_biome({
639 name = "savanna_ocean",
641 node_top = "default:sand",
643 node_filler = "default:sand",
646 --node_water_top = "",
647 --depth_water_top = ,
649 --node_river_water = "",
656 minetest.register_biome({
659 node_top = "default:dirt_with_grass",
661 node_filler = "default:dirt",
664 --node_water_top = "",
665 --depth_water_top = ,
667 --node_river_water = "",
674 minetest.register_biome({
675 name = "rainforest_swamp",
677 node_top = "default:dirt",
679 node_filler = "default:dirt",
682 --node_water_top = "",
683 --depth_water_top = ,
685 --node_river_water = "",
692 minetest.register_biome({
693 name = "rainforest_ocean",
695 node_top = "default:sand",
697 node_filler = "default:sand",
700 --node_water_top = "",
701 --depth_water_top = ,
703 --node_river_water = "",
712 minetest.register_biome({
713 name = "underground",
720 --node_water_top = "",
721 --depth_water_top = ,
723 --node_river_water = "",
733 -- Register decorations
738 function default.register_mgv6_decorations()
739 minetest.clear_registered_decorations()
743 minetest.register_decoration({
744 deco_type = "simple",
745 place_on = {"default:dirt_with_grass"},
750 spread = {x = 100, y = 100, z = 100},
757 decoration = "default:papyrus",
760 spawn_by = "default:water_source",
766 minetest.register_decoration({
767 deco_type = "simple",
768 place_on = {"default:desert_sand"},
773 spread = {x = 100, y = 100, z = 100},
780 decoration = "default:cactus",
788 minetest.register_decoration({
789 deco_type = "simple",
790 place_on = {"default:dirt_with_grass"},
795 spread = {x = 100, y = 100, z = 100},
802 decoration = "default:grass_"..length,
808 minetest.register_decoration({
809 deco_type = "simple",
810 place_on = {"default:desert_sand", "default:dirt_with_snow"},
815 spread = {x = 100, y = 100, z = 100},
822 decoration = "default:dry_shrub",
826 -- All mapgens except mgv6 and singlenode
828 local function register_grass_decoration(offset, scale, length)
829 minetest.register_decoration({
830 deco_type = "simple",
831 place_on = {"default:dirt_with_grass", "default:sand"},
836 spread = {x=200, y=200, z=200},
842 "stone_grassland", "stone_grassland_ocean",
843 "sandstone_grassland", "sandstone_grassland_ocean",
844 "deciduous_forest", "deciduous_forest_ocean",
845 "coniferous_forest", "coniferous_forest_ocean",
849 decoration = "default:grass_"..length,
853 local function register_dry_grass_decoration(offset, scale, length)
854 minetest.register_decoration({
855 deco_type = "simple",
856 place_on = {"default:dirt_with_dry_grass"},
861 spread = {x=200, y=200, z=200},
866 biomes = {"savanna"},
869 decoration = "default:dry_grass_"..length,
873 function default.register_decorations()
874 minetest.clear_registered_decorations()
878 minetest.register_decoration({
879 deco_type = "schematic",
880 place_on = {"default:dirt_with_grass"},
885 spread = {x=250, y=250, z=250},
890 biomes = {"deciduous_forest"},
893 schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts",
894 flags = "place_center_x, place_center_z",
899 minetest.register_decoration({
900 deco_type = "schematic",
901 place_on = {"default:dirt_with_grass", "default:dirt"},
904 biomes = {"rainforest", "rainforest_swamp"},
907 schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts",
908 flags = "place_center_x, place_center_z",
911 -- Taiga and temperate forest pine tree
913 minetest.register_decoration({
914 deco_type = "schematic",
915 place_on = {"default:snowblock", "default:dirt_with_grass"},
920 spread = {x=250, y=250, z=250},
925 biomes = {"taiga", "coniferous_forest"},
928 schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts",
929 flags = "place_center_x, place_center_z",
934 minetest.register_decoration({
935 deco_type = "schematic",
936 place_on = {"default:dirt_with_dry_grass"},
941 spread = {x=250, y=250, z=250},
946 biomes = {"savanna"},
949 schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts",
950 flags = "place_center_x, place_center_z",
956 minetest.register_decoration({
957 deco_type = "schematic",
958 place_on = {"default:desert_sand"},
963 spread = {x=200, y=200, z=200},
971 schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts",
972 flags = "place_center_x",
978 minetest.register_decoration({
979 deco_type = "simple",
980 place_on = {"default:desert_sand"},
985 spread = {x=200, y=200, z=200},
993 decoration = "default:cactus",
1000 minetest.register_decoration({
1001 deco_type = "schematic",
1002 place_on = {"default:sand"},
1007 spread = {x=200, y=200, z=200},
1012 biomes = {"savanna_ocean", "desert_ocean"},
1015 schematic = minetest.get_modpath("default").."/schematics/papyrus.mts",
1020 register_grass_decoration(-0.03, 0.09, 5)
1021 register_grass_decoration(-0.015, 0.075, 4)
1022 register_grass_decoration(0, 0.06, 3)
1023 register_grass_decoration(0.015, 0.045, 2)
1024 register_grass_decoration(0.03, 0.03, 1)
1028 register_dry_grass_decoration(0.01, 0.05, 5)
1029 register_dry_grass_decoration(0.03, 0.03, 4)
1030 register_dry_grass_decoration(0.05, 0.01, 3)
1031 register_dry_grass_decoration(0.07, -0.01, 2)
1032 register_dry_grass_decoration(0.09, -0.03, 1)
1036 minetest.register_decoration({
1037 deco_type = "simple",
1038 place_on = {"default:dirt_with_grass"},
1041 biomes = {"rainforest"},
1044 decoration = "default:junglegrass",
1049 minetest.register_decoration({
1050 deco_type = "simple",
1051 place_on = {"default:desert_sand", "default:dirt_with_snow"},
1056 spread = {x=200, y=200, z=200},
1061 biomes = {"desert", "tundra"},
1064 decoration = "default:dry_shrub",
1070 -- Generate nyan cats
1073 -- All mapgens except singlenode
1075 function default.make_nyancat(pos, facedir, length)
1076 local tailvec = {x = 0, y = 0, z = 0}
1077 if facedir == 0 then
1079 elseif facedir == 1 then
1081 elseif facedir == 2 then
1083 elseif facedir == 3 then
1089 local p = {x = pos.x, y = pos.y, z = pos.z}
1090 minetest.set_node(p, {name = "default:nyancat", param2 = facedir})
1091 for i = 1, length do
1092 p.x = p.x + tailvec.x
1093 p.z = p.z + tailvec.z
1094 minetest.set_node(p, {name = "default:nyancat_rainbow", param2 = facedir})
1098 function default.generate_nyancats(minp, maxp, seed)
1099 local height_min = -31000
1100 local height_max = -32
1101 if maxp.y < height_min or minp.y > height_max then
1104 local y_min = math.max(minp.y, height_min)
1105 local y_max = math.min(maxp.y, height_max)
1106 local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
1107 local pr = PseudoRandom(seed + 9324342)
1108 local max_num_nyancats = math.floor(volume / (16 * 16 * 16))
1109 for i = 1, max_num_nyancats do
1110 if pr:next(0, 1000) == 0 then
1111 local x0 = pr:next(minp.x, maxp.x)
1112 local y0 = pr:next(minp.y, maxp.y)
1113 local z0 = pr:next(minp.z, maxp.z)
1114 local p0 = {x = x0, y = y0, z = z0}
1115 default.make_nyancat(p0, pr:next(0, 3), pr:next(3, 15))
1122 -- Detect mapgen to select functions
1125 -- Mods using singlenode mapgen can call these functions to enable
1126 -- the use of minetest.generate_ores or minetest.generate_decorations
1128 local mg_params = minetest.get_mapgen_params()
1129 if mg_params.mgname == "v6" then
1130 default.register_ores()
1131 default.register_mgv6_decorations()
1132 minetest.register_on_generated(default.generate_nyancats)
1133 elseif mg_params.mgname ~= "singlenode" then
1134 default.register_ores()
1135 default.register_biomes()
1136 default.register_decorations()
1137 minetest.register_on_generated(default.generate_nyancats)