Disable treespawning on mapgen
[minetest_hades.git] / mods / default / mapgen.lua
blobfb5c979c131c6620f32d0eceb28a7271f6143b03
1 -- mods/default/mapgen.lua
4 --
5 -- Aliases for map generator outputs
6 --
9 minetest.register_alias("mapgen_stone", "default:stone")
10 minetest.register_alias("mapgen_dirt", "default:sand")
11 minetest.register_alias("mapgen_dirt_with_grass", "default:sand")
12 minetest.register_alias("mapgen_sand", "default:sand")
13 minetest.register_alias("mapgen_water_source", "default:lava_source")
14 minetest.register_alias("mapgen_river_water_source", "default:lava_source")
15 minetest.register_alias("mapgen_lava_source", "default:lava_source")
16 minetest.register_alias("mapgen_gravel", "default:lava_source")
17 minetest.register_alias("mapgen_desert_stone", "default:stone")
18 minetest.register_alias("mapgen_desert_sand", "default:sand")
19 minetest.register_alias("mapgen_dirt_with_snow", "default:sand")
20 minetest.register_alias("mapgen_snowblock", "default:sand")
21 minetest.register_alias("mapgen_snow", "default:sand")
22 minetest.register_alias("mapgen_ice", "default:stone")
23 minetest.register_alias("mapgen_sandstone", "default:tuff")
25 -- Flora
27 minetest.register_alias("mapgen_tree", "air")
28 minetest.register_alias("mapgen_leaves", "air")
29 minetest.register_alias("mapgen_apple", "air")
30 minetest.register_alias("mapgen_jungletree", "air")
31 minetest.register_alias("mapgen_jungleleaves", "air")
32 minetest.register_alias("mapgen_junglegrass", "air")
33 minetest.register_alias("mapgen_pine_tree", "air")
34 minetest.register_alias("mapgen_pine_needles", "air")
36 -- Dungeons
38 minetest.register_alias("mapgen_cobble", "default:cobble")
39 minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble")
40 minetest.register_alias("mapgen_mossycobble", "default:mossycobble")
41 minetest.register_alias("mapgen_sandstonebrick", "default:sandstonebrick")
42 minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebrick")
44 minetest.register_on_mapgen_init(function(mgparams)
45 minetest.set_mapgen_params({mgname="v6", mg_flags={"nodungeons", "notrees", "caves"}, mgv6_spflags={"mudflow", "nosnowbiomes", "notrees", "nojungles"}, "water_level=-5"})
46 end)
49 -- Ore generation
52 minetest.register_ore({
53 ore_type = "scatter",
54 ore = "default:stone_with_emerald",
55 wherein = "default:stone",
56 clust_scarcity = 24*24*24,
57 clust_num_ores = 1,
58 clust_size = 2,
59 y_min = -31000,
60 y_max = 20,
63 minetest.register_ore({
64 ore_type = "scatter",
65 ore = "default:stone_with_emerald",
66 wherein = "default:stone",
67 clust_scarcity =16*16*16,
68 clust_num_ores = 2,
69 clust_size = 3,
70 y_min = -31000,
71 y_max = -50,
72 flags = "absheight",
75 minetest.register_ore({
76 ore_type = "scatter",
77 ore = "default:stone_with_sapphire",
78 wherein = "default:stone",
79 clust_scarcity = 24*24*24,
80 clust_num_ores = 1,
81 clust_size = 2,
82 y_min = -31000,
83 y_max = -300,
86 minetest.register_ore({
87 ore_type = "scatter",
88 ore = "default:stone_with_sapphire",
89 wherein = "default:stone",
90 clust_scarcity =16*16*16,
91 clust_num_ores = 2,
92 clust_size = 3,
93 y_min = -31000,
94 y_max = -550,
95 flags = "absheight",
98 minetest.register_ore({
99 ore_type = "scatter",
100 ore = "default:stone_with_diamond",
101 wherein = "default:stone",
102 clust_scarcity = 24*24*24,
103 clust_num_ores = 1,
104 clust_size = 2,
105 y_min = -31000,
106 y_max = -1200,
109 minetest.register_ore({
110 ore_type = "scatter",
111 ore = "default:stone_with_diamond",
112 wherein = "default:stone",
113 clust_scarcity =16*16*16,
114 clust_num_ores = 2,
115 clust_size = 3,
116 y_min = -31000,
117 y_max = -5000,
118 flags = "absheight",
121 minetest.register_ore({
122 ore_type = "scatter",
123 ore = "default:stone_with_ruby",
124 wherein = "default:stone",
125 clust_scarcity = 24*24*24,
126 clust_num_ores = 1,
127 clust_size = 2,
128 y_min = -31000,
129 y_max = -900,
132 minetest.register_ore({
133 ore_type = "scatter",
134 ore = "default:stone_with_ruby",
135 wherein = "default:stone",
136 clust_scarcity =16*16*16,
137 clust_num_ores = 2,
138 clust_size = 3,
139 y_min = -31000,
140 y_max = -3000,
141 flags = "absheight",
144 minetest.register_ore({
145 ore_type = "scatter",
146 ore = "default:stone_with_coal",
147 wherein = "default:stone",
148 clust_scarcity = 8*8*8,
149 clust_num_ores = 8,
150 clust_size = 3,
151 y_min = -31000,
152 y_max = 64,
153 flags = "absheight",
157 minetest.register_ore({
158 ore_type = "scatter",
159 ore = "default:stone_with_coal",
160 wherein = "default:stone",
161 clust_scarcity = 12*12*12,
162 clust_num_ores = 16,
163 clust_size = 6,
164 y_min = -31000,
165 y_max = 0,
166 flags = "absheight",
169 minetest.register_ore({
170 ore_type = "scatter",
171 ore = "default:stone_with_coal",
172 wherein = "default:stone",
173 clust_scarcity = 24*24*24,
174 clust_num_ores = 27,
175 clust_size = 6,
176 y_min = -31000,
177 y_max = -3000,
178 flags = "absheight",
182 minetest.register_ore({
183 ore_type = "scatter",
184 ore = "default:stone_with_iron",
185 wherein = "default:stone",
186 clust_scarcity = 12*12*12,
187 clust_num_ores = 3,
188 clust_size = 2,
189 y_min = -25,
190 y_max = -2,
194 minetest.register_ore({
195 ore_type = "scatter",
196 ore = "default:stone_with_iron",
197 wherein = "default:stone",
198 clust_scarcity = 9*9*9,
199 clust_num_ores = 3,
200 clust_size = 3,
201 y_min = -63,
202 y_max = -26,
206 minetest.register_ore({
207 ore_type = "scatter",
208 ore = "default:stone_with_iron",
209 wherein = "default:stone",
210 clust_scarcity = 7*7*7,
211 clust_num_ores = 5,
212 clust_size = 3,
213 y_min = -31000,
214 y_max = -64,
215 flags = "absheight",
219 minetest.register_ore({
220 ore_type = "scatter",
221 ore = "default:stone_with_iron",
222 wherein = "default:stone",
223 clust_scarcity = 24*24*24,
224 clust_num_ores = 27,
225 clust_size = 6,
226 y_min = -31000,
227 y_max = -800,
228 flags = "absheight",
232 minetest.register_ore({
233 ore_type = "scatter",
234 ore = "default:stone_with_mese",
235 wherein = "default:stone",
236 clust_scarcity = 18*18*18,
237 clust_num_ores = 2,
238 clust_size = 2,
239 y_min = -355,
240 y_max = -204,
241 flags = "absheight",
245 minetest.register_ore({
246 ore_type = "scatter",
247 ore = "default:stone_with_mese",
248 wherein = "default:stone",
249 clust_scarcity = 14*14*14,
250 clust_num_ores = 3,
251 clust_size = 2,
252 y_min = -31000,
253 y_max = -356,
254 flags = "absheight",
258 minetest.register_ore({
259 ore_type = "scatter",
260 ore = "default:mese",
261 wherein = "default:stone",
262 clust_scarcity = 36*36*36,
263 clust_num_ores = 5,
264 clust_size = 2,
265 y_min = -31000,
266 y_max = -5000,
267 flags = "absheight",
271 minetest.register_ore({
272 ore_type = "scatter",
273 ore = "default:stone_with_gold",
274 wherein = "default:stone",
275 clust_scarcity = 15*15*15,
276 clust_num_ores = 1,
277 clust_size = 2,
278 y_min = -666,
279 y_max = -333,
283 minetest.register_ore({
284 ore_type = "scatter",
285 ore = "default:stone_with_gold",
286 wherein = "default:stone",
287 clust_scarcity = 13*13*13,
288 clust_num_ores = 5,
289 clust_size = 3,
290 y_min = -31000,
291 y_max = -666,
292 flags = "absheight",
295 minetest.register_ore({
296 ore_type = "scatter",
297 ore = "default:stone_with_diamond",
298 wherein = "default:stone",
299 clust_scarcity = 15*15*15,
300 clust_num_ores = 4,
301 clust_size = 3,
302 y_min = -31000,
303 y_max = -10000,
304 flags = "absheight",
307 minetest.register_ore({
308 ore_type = "scatter",
309 ore = "default:stone_with_emerald",
310 wherein = "default:stone",
311 clust_scarcity = 15*15*15,
312 clust_num_ores = 4,
313 clust_size = 3,
314 y_min = -31000,
315 y_max = -10000,
316 flags = "absheight",
319 minetest.register_ore({
320 ore_type = "scatter",
321 ore = "default:stone_with_sapphire",
322 wherein = "default:stone",
323 clust_scarcity = 15*15*15,
324 clust_num_ores = 4,
325 clust_size = 3,
326 y_min = -31000,
327 y_max = -10000,
328 flags = "absheight",
331 minetest.register_ore({
332 ore_type = "scatter",
333 ore = "default:stone_with_ruby",
334 wherein = "default:stone",
335 clust_scarcity = 15*15*15,
336 clust_num_ores = 4,
337 clust_size = 3,
338 y_min = -31000,
339 y_max = -10000,
340 flags = "absheight",
343 minetest.register_ore({
344 ore_type = "scatter",
345 ore = "default:stone_with_copper",
346 wherein = "default:stone",
347 clust_scarcity = 12*12*12,
348 clust_num_ores = 4,
349 clust_size = 3,
350 y_min = -163,
351 y_max = -116,
355 minetest.register_ore({
356 ore_type = "scatter",
357 ore = "default:stone_with_copper",
358 wherein = "default:stone",
359 clust_scarcity = 9*9*9,
360 clust_num_ores = 5,
361 clust_size = 3,
362 y_min = -31000,
363 y_max = -164,
364 flags = "absheight",
367 minetest.register_ore({
368 ore_type = "scatter",
369 ore = "default:stone_with_copper",
370 wherein = "default:stone",
371 clust_scarcity = 9*9*9,
372 clust_num_ores = 5,
373 clust_size = 3,
374 y_min = -31000,
375 y_max = -1900,
376 flags = "absheight",
379 minetest.register_ore({
380 ore_type = "scatter",
381 ore = "default:stone_with_tin",
382 wherein = "default:stone",
383 clust_scarcity = 12*12*12,
384 clust_num_ores = 4,
385 clust_size = 3,
386 y_min = -163,
387 y_max = -116,
391 minetest.register_ore({
392 ore_type = "scatter",
393 ore = "default:stone_with_tin",
394 wherein = "default:stone",
395 clust_scarcity = 9*9*9,
396 clust_num_ores = 5,
397 clust_size = 3,
398 y_min = -31000,
399 y_max = -164,
400 flags = "absheight",
403 minetest.register_ore({
404 ore_type = "scatter",
405 ore = "default:stone_with_tin",
406 wherein = "default:stone",
407 clust_scarcity = 9*9*9,
408 clust_num_ores = 5,
409 clust_size = 3,
410 y_min = -31000,
411 y_max = -1900,
412 flags = "absheight",
415 -- if minetest.setting_get("mg_name") == "indev" then
416 -- Floatlands and high mountains springs
418 minetest.register_ore({
419 ore_type = "blob",
420 ore = "default:lava_source",
421 wherein = {"default:stone"},
422 clust_scarcity = 25* 25 * 25,
423 clust_size = 5,
424 y_min = -10,
425 y_max = 31000,
426 noise_threshold = 0.0,
427 noise_params = {
428 offset = 0.5,
429 scale = 0.2,
430 spread = {x = 5, y = 5, z = 5},
431 seed = 666,
432 octaves = 1,
433 persist = 0.0
438 minetest.register_ore({
439 ore_type = "scatter",
440 ore = "default:sand",
441 wherein = "default:stone",
442 clust_scarcity = 20*20*20,
443 clust_num_ores = 5*5*3,
444 clust_size = 5,
445 y_min = -120,
446 y_max = 31000,
450 minetest.register_ore({
451 ore_type = "scatter",
452 ore = "default:tuff",
453 ore_param2 = 128,
454 wherein = "default:stone",
455 clust_scarcity = 25*25*25,
456 clust_num_ores = 10000,
457 clust_size = 12,
458 y_min = -100,
459 y_max = 31000,
462 minetest.register_ore({
463 ore_type = "scatter",
464 ore = "default:chondrit",
465 ore_param2 = 128,
466 wherein = "default:stone",
467 clust_scarcity = 10*10*10,
468 clust_num_ores = 50,
469 clust_size = 10,
470 y_min = -149,
471 y_max = 10,
472 flags = "absheight",
475 minetest.register_ore({
476 ore_type = "scatter",
477 ore = "default:chondrit",
478 ore_param2 = 128,
479 wherein = "default:stone",
480 clust_scarcity = 20*20*20,
481 clust_num_ores = 550,
482 clust_size = 10,
483 y_min = -31000,
484 y_max = -150,
485 flags = "absheight",
488 minetest.register_ore({
489 ore_type = "scatter",
490 ore = "default:chondrit",
491 ore_param2 = 128,
492 wherein = "default:stone",
493 clust_scarcity = 20*20*20,
494 clust_num_ores = 650,
495 clust_size = 10,
496 y_min = -31000,
497 y_max = -10000,
498 flags = "absheight",
501 minetest.register_ore({
502 ore_type = "scatter",
503 ore = "default:essexit",
504 ore_param2 = 128,
505 wherein = "default:stone",
506 clust_scarcity = 10*10*10,
507 clust_num_ores = 50,
508 clust_size = 5,
509 y_min = -350,
510 y_max = -300,
513 minetest.register_ore({
514 ore_type = "scatter",
515 ore = "default:essexit",
516 ore_param2 = 128,
517 wherein = "default:stone",
518 clust_scarcity = 10*10*10,
519 clust_num_ores = 500,
520 clust_size = 10,
521 y_min = -31000,
522 y_max = -600,
523 flags = "absheight",
526 minetest.register_ore({
527 ore_type = "scatter",
528 ore = "default:essexit",
529 ore_param2 = 128,
530 wherein = "default:stone",
531 clust_scarcity = 20*10*20,
532 clust_num_ores = 950,
533 clust_size = 10,
534 y_min = -31000,
535 y_max = -10000,
536 flags = "absheight",
539 minetest.register_ore({
540 ore_type = "scatter",
541 ore = "default:gravel",
542 ore_param2 = 128,
543 wherein = "default:stone",
544 clust_scarcity = 20*5*20,
545 clust_num_ores = 150,
546 clust_size = 10,
547 y_min = -10,
548 y_max = 0,
551 minetest.register_ore({
552 ore_type = "scatter",
553 ore = "default:gravel",
554 ore_param2 = 128,
555 wherein = "default:stone",
556 clust_scarcity = 20*5*20,
557 clust_num_ores = 350,
558 clust_size = 10,
559 y_min = -70,
560 y_max = -50,
563 minetest.register_ore({
564 ore_type = "scatter",
565 ore = "default:gravel",
566 ore_param2 = 128,
567 wherein = "default:stone",
568 clust_scarcity = 20*10*20,
569 clust_num_ores = 500,
570 clust_size = 10,
571 y_min = -140,
572 y_max = -120,
575 -- Underground springs
576 minetest.register_ore({
577 ore_type = "scatter",
578 ore = "default:water_source",
579 ore_param2 = 128,
580 wherein = "default:stone",
581 clust_scarcity = 25*25*25,
582 clust_num_ores = 8,
583 clust_size = 3,
584 y_min = -10000,
585 y_max = -10,
588 minetest.register_ore({
589 ore_type = "blob",
590 ore = "default:lava_source",
591 wherein = {"default:stone"},
592 clust_scarcity = 25* 25 * 25,
593 clust_size = 10,
594 y_min = -30000,
595 y_max = -10,
596 noise_threshold = 0.2,
597 noise_params = {
598 offset = 0.5,
599 scale = 0.2,
600 spread = {x = 500, y = 500, z = 500},
601 seed = 666,
602 octaves = 1,
603 persist = 0.0
607 --DECO
609 minetest.register_decoration({
610 deco_type = "simple",
611 place_on = {"default:stone"},
612 sidelen = 16,
613 noise_params = {
614 offset = 0.5,
615 scale = 0.2,
616 spread = {x = 5, y = 5, z = 5},
617 seed = 333,
618 octaves = 1,
619 persist = 0.0
621 y_min = 1,
622 y_max = 100,
623 decoration = "default:stone",
624 height = 3,
625 height_max = 4,
628 minetest.register_decoration({
629 deco_type = "simple",
630 place_on = {"default:stone"},
631 sidelen = 16,
632 noise_params = {
633 offset = 0.5,
634 scale = 0.2,
635 spread = {x = 5, y = 5, z = 5},
636 seed = 555,
637 octaves = 1,
638 persist = 0.0
640 y_min = 1,
641 y_max = 100,
642 decoration = "default:sand",
645 function default.make_papyrus(pos, size)
646 for y=0,size-1 do
647 local p = {x=pos.x, y=pos.y+y, z=pos.z}
648 local nn = minetest.get_node(p).name
649 if minetest.registered_nodes[nn] and
650 minetest.registered_nodes[nn].buildable_to then
651 minetest.set_node(p, {name="default:papyrus"})
652 else
653 return
659 function default.make_cactus(pos, size)
660 for y=0,size-1 do
661 local p = {x=pos.x, y=pos.y+y, z=pos.z}
662 local nn = minetest.get_node(p).name
663 if minetest.registered_nodes[nn] and
664 minetest.registered_nodes[nn].buildable_to then
665 minetest.set_node(p, {name="default:cactus"})
666 else
667 return
673 -- facedir: 0/1/2/3 (head node facedir value)
674 -- length: length of rainbow tail
675 function default.make_nyancat(pos, facedir, length)
676 local tailvec = {x=0, y=0, z=0}
677 if facedir == 0 then
678 tailvec.z = 1
679 elseif facedir == 1 then
680 tailvec.x = 1
681 elseif facedir == 2 then
682 tailvec.z = -1
683 elseif facedir == 3 then
684 tailvec.x = -1
685 else
686 --print("default.make_nyancat(): Invalid facedir: "+dump(facedir))
687 facedir = 0
688 tailvec.z = 1
690 local p = {x=pos.x, y=pos.y, z=pos.z}
691 minetest.set_node(p, {name="default:nyancat", param2=facedir})
692 for i=1,length do
693 p.x = p.x + tailvec.x
694 p.z = p.z + tailvec.z
695 minetest.set_node(p, {name="default:nyancat_rainbow", param2=facedir})
700 function generate_nyancats(seed, minp, maxp)
701 local height_min = -31000
702 local height_max = -32
703 if maxp.y < height_min or minp.y > height_max then
704 return
706 local y_min = math.max(minp.y, height_min)
707 local y_max = math.min(maxp.y, height_max)
708 local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
709 local pr = PseudoRandom(seed + 9324342)
710 local max_num_nyancats = math.floor(volume / (16*16*16))
711 for i=1,max_num_nyancats do
712 if pr:next(0, 1000) == 0 then
713 local x0 = pr:next(minp.x, maxp.x)
714 local y0 = pr:next(minp.y, maxp.y)
715 local z0 = pr:next(minp.z, maxp.z)
716 local p0 = {x=x0, y=y0, z=z0}
717 default.make_nyancat(p0, pr:next(0,3), pr:next(3,15))
723 minetest.register_on_generated(function(minp, maxp, seed)
724 -- Generate nyan cats
725 generate_nyancats(seed, minp, maxp)
726 end)