2 -- Aliases for map generator outputs
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")
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")
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")
46 -- All mapgens except singlenode
47 -- Blob ore first to avoid other ores inside blobs
49 function default.register_ores()
53 minetest.register_ore({
56 wherein = {"default:sand"},
57 clust_scarcity = 16 * 16 * 16,
61 noise_threshold = 0.0,
65 spread = {x = 5, y = 5, z = 5},
74 minetest.register_ore({
77 wherein = {"default:stone", "default:sandstone",
78 "default:desert_stone"},
79 clust_scarcity = 16 * 16 * 16,
83 noise_threshold = 0.0,
87 spread = {x = 5, y = 5, z = 5},
96 minetest.register_ore({
99 wherein = {"default:stone", "default:sandstone"},
100 clust_scarcity = 16 * 16 * 16,
104 noise_threshold = 0.0,
108 spread = {x = 5, y = 5, z = 5},
117 minetest.register_ore({
119 ore = "default:gravel",
120 wherein = {"default:stone"},
121 clust_scarcity = 16 * 16 * 16,
125 noise_threshold = 0.0,
129 spread = {x = 5, y = 5, z = 5},
138 minetest.register_ore({
139 ore_type = "scatter",
140 ore = "default:stone_with_coal",
141 wherein = "default:stone",
142 clust_scarcity = 8 * 8 * 8,
149 minetest.register_ore({
150 ore_type = "scatter",
151 ore = "default:stone_with_coal",
152 wherein = "default:stone",
153 clust_scarcity = 24 * 24 * 24,
162 minetest.register_ore({
163 ore_type = "scatter",
164 ore = "default:stone_with_iron",
165 wherein = "default:stone",
166 clust_scarcity = 12 * 12 * 12,
173 minetest.register_ore({
174 ore_type = "scatter",
175 ore = "default:stone_with_iron",
176 wherein = "default:stone",
177 clust_scarcity = 9 * 9 * 9,
184 minetest.register_ore({
185 ore_type = "scatter",
186 ore = "default:stone_with_iron",
187 wherein = "default:stone",
188 clust_scarcity = 7 * 7 * 7,
195 minetest.register_ore({
196 ore_type = "scatter",
197 ore = "default:stone_with_iron",
198 wherein = "default:stone",
199 clust_scarcity = 24 * 24 * 24,
208 minetest.register_ore({
209 ore_type = "scatter",
210 ore = "default:stone_with_mese",
211 wherein = "default:stone",
212 clust_scarcity = 18 * 18 * 18,
219 minetest.register_ore({
220 ore_type = "scatter",
221 ore = "default:stone_with_mese",
222 wherein = "default:stone",
223 clust_scarcity = 14 * 14 * 14,
230 minetest.register_ore({
231 ore_type = "scatter",
232 ore = "default:mese",
233 wherein = "default:stone",
234 clust_scarcity = 36 * 36 * 36,
243 minetest.register_ore({
244 ore_type = "scatter",
245 ore = "default:stone_with_gold",
246 wherein = "default:stone",
247 clust_scarcity = 15 * 15 * 15,
254 minetest.register_ore({
255 ore_type = "scatter",
256 ore = "default:stone_with_gold",
257 wherein = "default:stone",
258 clust_scarcity = 13 * 13 * 13,
267 minetest.register_ore({
268 ore_type = "scatter",
269 ore = "default:stone_with_diamond",
270 wherein = "default:stone",
271 clust_scarcity = 17 * 17 * 17,
278 minetest.register_ore({
279 ore_type = "scatter",
280 ore = "default:stone_with_diamond",
281 wherein = "default:stone",
282 clust_scarcity = 15 * 15 * 15,
291 minetest.register_ore({
292 ore_type = "scatter",
293 ore = "default:stone_with_copper",
294 wherein = "default:stone",
295 clust_scarcity = 12 * 12 * 12,
302 minetest.register_ore({
303 ore_type = "scatter",
304 ore = "default:stone_with_copper",
305 wherein = "default:stone",
306 clust_scarcity = 9 * 9 * 9,
319 -- All mapgens except mgv6 and singlenode
321 function default.register_biomes()
322 minetest.clear_registered_biomes()
326 minetest.register_biome({
328 node_dust = "default:snowblock",
329 node_top = "default:snowblock",
331 node_filler = "default:snowblock",
333 node_stone = "default:ice",
334 node_water_top = "default:ice",
335 depth_water_top = 10,
337 node_river_water = "default:ice",
344 minetest.register_biome({
345 name = "glacier_ocean",
346 node_dust = "default:snowblock",
347 node_top = "default:sand",
349 node_filler = "default:sand",
352 --node_water_top = "",
353 --depth_water_top = ,
355 --node_river_water = "",
364 minetest.register_biome({
367 node_top = "default:dirt_with_snow",
369 node_filler = "default:dirt",
372 --node_water_top = "",
373 --depth_water_top = ,
375 --node_river_water = "",
382 minetest.register_biome({
383 name = "tundra_ocean",
385 node_top = "default:sand",
387 node_filler = "default:sand",
390 --node_water_top = "",
391 --depth_water_top = ,
393 --node_river_water = "",
401 minetest.register_biome({
403 node_dust = "default:snow",
404 node_top = "default:dirt_with_snow",
406 node_filler = "default:dirt",
409 --node_water_top = "",
410 --depth_water_top = ,
412 --node_river_water = "",
419 minetest.register_biome({
420 name = "taiga_ocean",
422 node_top = "default:sand",
424 node_filler = "default:sand",
427 --node_water_top = "",
428 --depth_water_top = ,
430 --node_river_water = "",
439 minetest.register_biome({
440 name = "stone_grassland",
442 node_top = "default:dirt_with_grass",
444 node_filler = "default:dirt",
447 --node_water_top = "",
448 --depth_water_top = ,
450 --node_river_water = "",
457 minetest.register_biome({
458 name = "stone_grassland_dunes",
460 node_top = "default:sand",
462 node_filler = "default:sand",
465 --node_water_top = "",
466 --depth_water_top = ,
468 --node_river_water = "",
475 minetest.register_biome({
476 name = "stone_grassland_ocean",
478 node_top = "default:sand",
480 node_filler = "default:sand",
483 --node_water_top = "",
484 --depth_water_top = ,
486 --node_river_water = "",
494 minetest.register_biome({
495 name = "coniferous_forest",
497 node_top = "default:dirt_with_grass",
499 node_filler = "default:dirt",
502 --node_water_top = "",
503 --depth_water_top = ,
505 --node_river_water = "",
512 minetest.register_biome({
513 name = "coniferous_forest_dunes",
515 node_top = "default:sand",
517 node_filler = "default:sand",
520 --node_water_top = "",
521 --depth_water_top = ,
523 --node_river_water = "",
530 minetest.register_biome({
531 name = "coniferous_forest_ocean",
533 node_top = "default:sand",
535 node_filler = "default:sand",
538 --node_water_top = "",
539 --depth_water_top = ,
541 --node_river_water = "",
549 minetest.register_biome({
550 name = "sandstone_grassland",
552 node_top = "default:dirt_with_grass",
554 node_filler = "default:dirt",
556 node_stone = "default:sandstone",
557 --node_water_top = "",
558 --depth_water_top = ,
560 --node_river_water = "",
567 minetest.register_biome({
568 name = "sandstone_grassland_dunes",
570 node_top = "default:sand",
572 node_filler = "default:sand",
574 node_stone = "default:sandstone",
575 --node_water_top = "",
576 --depth_water_top = ,
578 --node_river_water = "",
585 minetest.register_biome({
586 name = "sandstone_grassland_ocean",
588 node_top = "default:sand",
590 node_filler = "default:sand",
592 node_stone = "default:sandstone",
593 --node_water_top = "",
594 --depth_water_top = ,
596 --node_river_water = "",
604 minetest.register_biome({
605 name = "deciduous_forest",
607 node_top = "default:dirt_with_grass",
609 node_filler = "default:dirt",
612 --node_water_top = "",
613 --depth_water_top = ,
615 --node_river_water = "",
622 minetest.register_biome({
623 name = "deciduous_forest_swamp",
625 node_top = "default:dirt",
627 node_filler = "default:dirt",
630 --node_water_top = "",
631 --depth_water_top = ,
633 --node_river_water = "",
640 minetest.register_biome({
641 name = "deciduous_forest_ocean",
643 node_top = "default:sand",
645 node_filler = "default:sand",
648 --node_water_top = "",
649 --depth_water_top = ,
651 --node_river_water = "",
660 minetest.register_biome({
663 node_top = "default:desert_sand",
665 node_filler = "default:desert_sand",
667 node_stone = "default:desert_stone",
668 --node_water_top = "",
669 --depth_water_top = ,
671 --node_river_water = "",
678 minetest.register_biome({
679 name = "desert_ocean",
681 node_top = "default:sand",
683 node_filler = "default:sand",
685 node_stone = "default:desert_stone",
686 --node_water_top = "",
687 --depth_water_top = ,
689 --node_river_water = "",
697 minetest.register_biome({
700 node_top = "default:dirt_with_dry_grass",
702 node_filler = "default:dirt",
705 --node_water_top = "",
706 --depth_water_top = ,
708 --node_river_water = "",
715 minetest.register_biome({
716 name = "savanna_swamp",
718 node_top = "default:dirt",
720 node_filler = "default:dirt",
723 --node_water_top = "",
724 --depth_water_top = ,
726 --node_river_water = "",
733 minetest.register_biome({
734 name = "savanna_ocean",
736 node_top = "default:sand",
738 node_filler = "default:sand",
741 --node_water_top = "",
742 --depth_water_top = ,
744 --node_river_water = "",
752 minetest.register_biome({
755 node_top = "default:dirt_with_grass",
757 node_filler = "default:dirt",
760 --node_water_top = "",
761 --depth_water_top = ,
763 --node_river_water = "",
770 minetest.register_biome({
771 name = "rainforest_swamp",
773 node_top = "default:dirt",
775 node_filler = "default:dirt",
778 --node_water_top = "",
779 --depth_water_top = ,
781 --node_river_water = "",
788 minetest.register_biome({
789 name = "rainforest_ocean",
791 node_top = "default:sand",
793 node_filler = "default:sand",
796 --node_water_top = "",
797 --depth_water_top = ,
799 --node_river_water = "",
808 minetest.register_biome({
809 name = "underground",
816 --node_water_top = "",
817 --depth_water_top = ,
819 --node_river_water = "",
829 -- Register decorations
834 function default.register_mgv6_decorations()
835 minetest.clear_registered_decorations()
839 minetest.register_decoration({
840 deco_type = "simple",
841 place_on = {"default:dirt_with_grass"},
846 spread = {x = 100, y = 100, z = 100},
853 decoration = "default:papyrus",
856 spawn_by = "default:water_source",
862 minetest.register_decoration({
863 deco_type = "simple",
864 place_on = {"default:desert_sand"},
869 spread = {x = 100, y = 100, z = 100},
876 decoration = "default:cactus",
884 minetest.register_decoration({
885 deco_type = "simple",
886 place_on = {"default:dirt_with_grass"},
891 spread = {x = 100, y = 100, z = 100},
898 decoration = "default:grass_"..length,
904 minetest.register_decoration({
905 deco_type = "simple",
906 place_on = {"default:desert_sand", "default:dirt_with_snow"},
911 spread = {x = 100, y = 100, z = 100},
918 decoration = "default:dry_shrub",
922 -- All mapgens except mgv6 and singlenode
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"},
932 spread = {x = 200, y = 200, z = 200},
937 biomes = {"stone_grassland", "sandstone_grassland",
938 "deciduous_forest", "coniferous_forest",
939 "stone_grassland_dunes", "sandstone_grassland_dunes",
940 "coniferous_forest_dunes"},
943 decoration = "default:grass_"..length,
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"},
955 spread = {x = 200, y = 200, z = 200},
960 biomes = {"savanna"},
963 decoration = "default:dry_grass_"..length,
967 function default.register_decorations()
968 minetest.clear_registered_decorations()
970 -- Apple tree and log
972 minetest.register_decoration({
973 deco_type = "schematic",
974 place_on = {"default:dirt_with_grass"},
979 spread = {x = 250, y = 250, z = 250},
984 biomes = {"deciduous_forest"},
987 schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts",
988 flags = "place_center_x, place_center_z",
991 minetest.register_decoration({
992 deco_type = "schematic",
993 place_on = {"default:dirt_with_grass"},
996 biomes = {"deciduous_forest"},
1000 size = { x = 3, y = 3, z = 1},
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 },
1013 flags = "place_center_x",
1014 rotation = "random",
1017 -- Jungle tree and log
1019 minetest.register_decoration({
1020 deco_type = "schematic",
1021 place_on = {"default:dirt_with_grass", "default:dirt"},
1024 biomes = {"rainforest", "rainforest_swamp"},
1027 schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts",
1028 flags = "place_center_x, place_center_z",
1029 rotation = "random",
1032 minetest.register_decoration({
1033 deco_type = "schematic",
1034 place_on = {"default:dirt_with_grass", "default:dirt"},
1037 biomes = {"rainforest", "rainforest_swamp"},
1041 size = { x = 3, y = 3, z = 1},
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 },
1054 flags = "place_center_x",
1055 rotation = "random",
1058 -- Taiga and temperate coniferous forest pine tree and log
1060 minetest.register_decoration({
1061 deco_type = "schematic",
1062 place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
1067 spread = {x = 250, y = 250, z = 250},
1072 biomes = {"taiga", "coniferous_forest"},
1075 schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts",
1076 flags = "place_center_x, place_center_z",
1079 minetest.register_decoration({
1080 deco_type = "schematic",
1081 place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
1084 biomes = {"taiga", "coniferous_forest"},
1088 size = { x = 3, y = 3, z = 1},
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 },
1101 flags = "place_center_x",
1102 rotation = "random",
1105 -- Acacia tree and log
1107 minetest.register_decoration({
1108 deco_type = "schematic",
1109 place_on = {"default:dirt_with_dry_grass"},
1114 spread = {x = 250, y = 250, z = 250},
1119 biomes = {"savanna"},
1122 schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts",
1123 flags = "place_center_x, place_center_z",
1124 rotation = "random",
1127 minetest.register_decoration({
1128 deco_type = "schematic",
1129 place_on = {"default:dirt_with_dry_grass"},
1134 spread = {x = 250, y = 250, z = 250},
1139 biomes = {"savanna"},
1143 size = { x = 3, y = 2, z = 1},
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 },
1153 flags = "place_center_x",
1154 rotation = "random",
1159 minetest.register_decoration({
1160 deco_type = "schematic",
1161 place_on = {"default:desert_sand"},
1166 spread = {x = 200, y = 200, z = 200},
1171 biomes = {"desert"},
1174 schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts",
1175 flags = "place_center_x",
1176 rotation = "random",
1181 minetest.register_decoration({
1182 deco_type = "simple",
1183 place_on = {"default:desert_sand"},
1188 spread = {x = 200, y = 200, z = 200},
1193 biomes = {"desert"},
1196 decoration = "default:cactus",
1203 minetest.register_decoration({
1204 deco_type = "schematic",
1205 place_on = {"default:dirt"},
1210 spread = {x = 200, y = 200, z = 200},
1215 biomes = {"savanna_swamp"},
1218 schematic = minetest.get_modpath("default").."/schematics/papyrus.mts",
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)
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)
1239 minetest.register_decoration({
1240 deco_type = "simple",
1241 place_on = {"default:dirt_with_grass"},
1244 biomes = {"rainforest"},
1247 decoration = "default:junglegrass",
1252 minetest.register_decoration({
1253 deco_type = "simple",
1254 place_on = {"default:desert_sand", "default:dirt_with_snow"},
1259 spread = {x = 200, y = 200, z = 200},
1264 biomes = {"desert", "tundra"},
1267 decoration = "default:dry_shrub",
1273 -- Generate nyan cats
1276 -- All mapgens except singlenode
1278 function default.make_nyancat(pos, facedir, length)
1279 local tailvec = {x = 0, y = 0, z = 0}
1280 if facedir == 0 then
1282 elseif facedir == 1 then
1284 elseif facedir == 2 then
1286 elseif facedir == 3 then
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})
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
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))
1325 -- Detect mapgen to select functions
1328 -- Mods using singlenode mapgen can call these functions to enable
1329 -- the use of minetest.generate_ores or minetest.generate_decorations
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)