Major overhaul. Separate cave decorations from mapgen.
This commit is contained in:
parent
f8a5339f57
commit
011affc46f
6 changed files with 497 additions and 266 deletions
97
deco_coral.lua
Normal file
97
deco_coral.lua
Normal file
|
@ -0,0 +1,97 @@
|
|||
|
||||
minetest.register_node("fun_caves:pillar_coral", {
|
||||
description = "Pillar Coral",
|
||||
tiles = {"fun_caves_pillar_coral.png"},
|
||||
paramtype = "light",
|
||||
light_source = 2,
|
||||
groups = {cracky = 3, stone=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("fun_caves:brain_coral", {
|
||||
description = "Brain Coral",
|
||||
tiles = {"fun_caves_brain_coral.png"},
|
||||
light_source = 4,
|
||||
groups = {cracky = 3, stone=1,},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("fun_caves:dragon_eye", {
|
||||
description = "Dragon Eye",
|
||||
tiles = {"fun_caves_dragon_eye.png"},
|
||||
light_source = 4,
|
||||
groups = {cracky = 3, stone=1,},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("fun_caves:staghorn_coral", {
|
||||
description = "Staghorn Coral",
|
||||
drawtype = "plantlike",
|
||||
tiles = {"fun_caves_staghorn_coral.png"},
|
||||
waving = false,
|
||||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
light_source = 2,
|
||||
walkable = false,
|
||||
groups = {cracky = 3, stone=1, attached_node=1, sea=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
||||
},
|
||||
})
|
||||
|
||||
function fun_caves.sea_plants()
|
||||
if y >= light_depth and (data[index_3d] == node["sand"] or data[index_3d] == node["dirt"]) and (data[index_3d_above] == node["water_source"] or data[index_3d_above] == node["river_water_source"]) then
|
||||
-- Check the biomes and plant water plants, if called for.
|
||||
biome = valc.biome_ids[biomemap[index_2d]]
|
||||
if y < water_level and data[index_3d_above + ystride] == node["water_source"] and table.contains(coral_biomes, biome) and n21[index_2d] < -0.1 and math_random(1,3) ~= 1 then
|
||||
sr = math_random(1,100)
|
||||
if sr < 4 then
|
||||
data[index_3d_above] = node["brain_coral"]
|
||||
elseif sr < 6 then
|
||||
data[index_3d_above] = node["dragon_eye"]
|
||||
elseif sr < 35 then
|
||||
data[index_3d_above] = node["staghorn_coral"]
|
||||
elseif sr < 100 then
|
||||
data[index_3d_above] = node["pillar_coral"]
|
||||
end
|
||||
elseif surround then
|
||||
for _, desc in pairs(valc.water_plants) do
|
||||
placeable = false
|
||||
|
||||
if not node_match_cache[desc] then
|
||||
node_match_cache[desc] = {}
|
||||
end
|
||||
|
||||
if node_match_cache[desc][data[index_3d]] then
|
||||
placeable = node_match_cache[desc][data[index_3d]]
|
||||
else
|
||||
-- This is a great way to match all node type strings
|
||||
-- against a given node (or nodes). However, it's slow.
|
||||
-- To speed it up, we cache the results for each plant
|
||||
-- on each node, and avoid calling find_nodes every time.
|
||||
pos, count = minetest.find_nodes_in_area({x=x,y=y,z=z}, {x=x,y=y,z=z}, desc.place_on)
|
||||
if #pos > 0 then
|
||||
placeable = true
|
||||
end
|
||||
node_match_cache[desc][data[index_3d]] = placeable
|
||||
end
|
||||
|
||||
if placeable and desc.fill_ratio and desc.content_id then
|
||||
biome = valc.biome_ids[biomemap[index_2d]]
|
||||
|
||||
if not desc.biomes or (biome and desc.biomes and table.contains(desc.biomes, biome)) then
|
||||
if math_random() <= desc.fill_ratio then
|
||||
data[index_3d] = desc.content_id
|
||||
write = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue