redsky_asteroids.lua 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. if otherworlds.settings.redsky_asteroids.enable then
  2. -- Approximate realm limits
  3. local YMIN = otherworlds.settings.redsky_asteroids.YMIN or 6000
  4. local YMAX = otherworlds.settings.redsky_asteroids.YMAX or 7000
  5. -- Register on_generated function for this layer
  6. minetest.register_on_generated(otherworlds.asteroids.create_on_generated(YMIN, YMAX, {
  7. c_air = minetest.get_content_id("vacuum:vacuum"),
  8. c_obsidian = minetest.get_content_id("default:obsidian"),
  9. c_stone = minetest.get_content_id("asteroid:redstone"),
  10. c_cobble = minetest.get_content_id("vacuum:vacuum"),
  11. c_gravel = minetest.get_content_id("asteroid:redgravel"),
  12. c_dust = minetest.get_content_id("asteroid:reddust"),
  13. c_ironore = minetest.get_content_id("asteroid:ironore"),
  14. c_copperore = minetest.get_content_id("asteroid:copperore"),
  15. c_goldore = minetest.get_content_id("asteroid:goldore"),
  16. c_diamondore = minetest.get_content_id("asteroid:diamondore"),
  17. c_meseore = minetest.get_content_id("asteroid:meseore"),
  18. c_waterice = minetest.get_content_id("default:ice"),
  19. c_snowblock = minetest.get_content_id("default:snowblock"),
  20. }))
  21. -- Deco code for grass and crystal
  22. local TOPDECO = 500 -- how often surface decoration appears on top of asteroid cobble
  23. local grass = {
  24. "mars:grass_1", "mars:grass_2", "mars:grass_3",
  25. "mars:grass_4", "mars:grass_5"
  26. }
  27. local flower = {
  28. "mars:moss", "mars:redweed", "mars:redgrass"
  29. }
  30. local crystal = {
  31. "crystals:ghost_crystal_1", "crystals:ghost_crystal_2",
  32. "crystals:red_crystal_1", "crystals:red_crystal_2",
  33. "crystals:rose_quartz_1", "crystals:rose_quartz_2",
  34. }
  35. -- Add surface decoration
  36. minetest.register_on_generated(function(minp, maxp)
  37. if minp.y < YMIN or maxp.y > YMAX then
  38. return
  39. end
  40. local bpos, ran
  41. local coal = minetest.find_nodes_in_area_under_air(minp, maxp,
  42. {"asteroid:redgravel"})
  43. for n = 1, #coal do
  44. bpos = {x = coal[n].x, y = coal[n].y + 1, z = coal[n].z }
  45. ran = math.random(TOPDECO)
  46. if ran < 100 then -- grass
  47. minetest.swap_node(bpos, {name = grass[ math.random(1, #grass) ] })
  48. elseif ran >= 180 and ran <= 200 then -- other plants
  49. minetest.swap_node(bpos, {name = flower[ math.random(1, #flower) ] })
  50. elseif ran == TOPDECO then -- crystals
  51. minetest.swap_node(bpos, {name = crystal[ math.random(1, #crystal) ] })
  52. end
  53. end
  54. end)
  55. end