From 19a6da4f783b792948df9586f78562ec63789508 Mon Sep 17 00:00:00 2001 From: FaceDeer Date: Fri, 9 Aug 2019 21:51:39 -0600 Subject: [PATCH] fungal ceiling decorations --- df_caverns/primordial.lua | 53 ++++++++++-- df_primordial_items/ceiling_fungus.lua | 111 +++++++++++++++++++++++++ df_primordial_items/fungal_nodes.lua | 49 +---------- df_primordial_items/init.lua | 1 + 4 files changed, 157 insertions(+), 57 deletions(-) create mode 100644 df_primordial_items/ceiling_fungus.lua diff --git a/df_caverns/primordial.lua b/df_caverns/primordial.lua index 4568864..fc34a30 100644 --- a/df_caverns/primordial.lua +++ b/df_caverns/primordial.lua @@ -7,7 +7,7 @@ end local perlin_cave_primordial = { offset = 0, scale = 1, - spread = {x=df_caverns.config.horizontal_cavern_scale, y=df_caverns.config.vertical_cavern_scale, z=df_caverns.config.horizontal_cavern_scale}, + spread = {x=df_caverns.config.horizontal_cavern_scale, y=df_caverns.config.vertical_cavern_scale*0.5, z=df_caverns.config.horizontal_cavern_scale}, seed = 14055553, octaves = 3, persist = 0.67 @@ -16,7 +16,7 @@ local perlin_cave_primordial = { local perlin_wave_primordial = { offset = 0, scale = 1, - spread = {x=df_caverns.config.horizontal_cavern_scale, y=df_caverns.config.vertical_cavern_scale, z=df_caverns.config.horizontal_cavern_scale}, + spread = {x=df_caverns.config.horizontal_cavern_scale, y=df_caverns.config.vertical_cavern_scale*0.5, z=df_caverns.config.horizontal_cavern_scale}, seed = 923444, octaves = 6, persist = 0.63 @@ -27,17 +27,41 @@ local mushroom_cavern_floor = function(abs_cracks, vi, area, data, data_param2) local ystride = area.ystride end +local c_orb = minetest.get_content_id("df_primordial_items:glow_orb_hanging") +local c_mycelial_dirt = minetest.get_content_id("df_primordial_items:dirt_with_mycelium") local mushroom_cavern_ceiling = function(abs_cracks, vi, area, data, data_param2) + local ystride = area.ystride + if abs_cracks < 0.4 then + data[vi] = c_mycelial_dirt + if abs_cracks < 0.3 then + if math.random() < 0.2 then + data[vi-ystride] = c_orb + elseif math.random() < 0.03 then + df_primordial_items.spawn_ceiling_spire_vm(vi, area, data) + end + end + end +end +local mushroom_warren_ceiling = function(abs_cracks, vi, area, data, data_param2) + local ystride = area.ystride + if abs_cracks < 0.3 then + data[vi] = c_mycelial_dirt + if abs_cracks < 0.2 then + if math.random() < 0.2 then + data[vi-ystride] = c_orb + end + end + end end - local jungle_cavern_floor = function(abs_cracks, vi, area, data, data_param2) local ystride = area.ystride end -local jungle_cavern_ceiling = function(abs_cracks, vert_rand, vi, area, data, data_param2) +local jungle_cavern_ceiling = function(abs_cracks, vi, area, data, data_param2) +end +local jungle_warren_ceiling = function(abs_cracks, vi, area, data, data_param2) end - local decorate_primordial = function(minp, maxp, seed, vm, node_arrays, area, data) math.randomseed(minp.x + minp.y*2^8 + minp.z*2^16 + seed) -- make decorations consistent between runs @@ -73,11 +97,11 @@ local decorate_primordial = function(minp, maxp, seed, vm, node_arrays, area, da local abs_cracks = math.abs(cracks) local jungle = nvals_cave[cave_area:transform(area, vi)] < 0 - if jungle then - jungle_cavern_ceiling(abs_cracks, vi, area, data, data_param2) - else +-- if jungle then +-- jungle_cavern_ceiling(abs_cracks, vi, area, data, data_param2) +-- else mushroom_cavern_ceiling(abs_cracks, vi, area, data, data_param2) - end +-- end end @@ -98,6 +122,17 @@ local decorate_primordial = function(minp, maxp, seed, vm, node_arrays, area, da -- Warren ceiling for _, vi in ipairs(node_arrays.warren_ceiling_nodes) do + local index2d = mapgen_helper.index2di(minp, maxp, area, vi) + local cracks = nvals_cracks[index2d] + local abs_cracks = math.abs(cracks) + local jungle = nvals_cave[cave_area:transform(area, vi)] < 0 + +-- if jungle then +-- jungle_warren_ceiling(abs_cracks, vi, area, data, data_param2) +-- else + mushroom_warren_ceiling(abs_cracks, vi, area, data, data_param2) +-- end + end ---------------------------------------------- diff --git a/df_primordial_items/ceiling_fungus.lua b/df_primordial_items/ceiling_fungus.lua new file mode 100644 index 0000000..23194c9 --- /dev/null +++ b/df_primordial_items/ceiling_fungus.lua @@ -0,0 +1,111 @@ +-- internationalization boilerplate +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +--------------------------------------------------------------------------------------- +-- Glownode and stalk + +minetest.register_node("df_primordial_items:glownode", { + description = S("Primordial Fungal Lantern"), + _doc_items_longdesc = df_primordial_items.doc.glownode_desc, + _doc_items_usagehelp = df_primordial_items.doc.glownode_usage, + drawtype = "glasslike", + tiles = {"dfcaverns_mush_glownode.png"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), + light_source = default.LIGHT_MAX, +}) + +minetest.register_node("df_primordial_items:glownode_stalk", { + description = S("Primordial Fungal Lantern Stalk"), + _doc_items_longdesc = df_primordial_items.doc.glownode_stalk_desc, + _doc_items_usagehelp = df_primordial_items.doc.glownode_stalk_usage, + tiles = {"dfcaverns_mush_stalk_top.png", "dfcaverns_mush_stalk_top.png", "dfcaverns_mush_stalk_side.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + on_place = minetest.rotate_node +}) + +minetest.register_node("df_primordial_items:glow_orb_hanging", { + description = S("Primordial Fungal Orb"), + _doc_items_longdesc = df_primordial_items.doc.glow_orb_desc, + _doc_items_usagehelp = df_primordial_items.doc.glow_orb_usage, + tiles = {"dfcaverns_mush_orb_vert.png"}, + inventory_image = "dfcaverns_mush_orb_vert.png", + wield_image = "dfcaverns_mush_orb_vert.png", + groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 1}, + paramtype = "light", + drawtype = "plantlike", + buildable_to = true, + walkable = false, + light_source = 6, + sounds = default.node_sound_leaves_defaults(), + use_texture_alpha = true, + sunlight_propagates = true, +}) + +local c_stalk = minetest.get_content_id("df_primordial_items:glownode_stalk") +local c_node = minetest.get_content_id("df_primordial_items:glownode") +local c_air = minetest.get_content_id("air") + +df_primordial_items.spawn_ceiling_spire_vm = function(vi, area, data) + local spire_height = math.random(1,10) + + local ystride = area.ystride + local zstride = area.zstride + + for i = 0, spire_height do + if data[vi-i*ystride] == c_air then + data[vi-i*ystride] = c_stalk + end + end + local bottom = vi - (spire_height +1) * ystride + if data[bottom] == c_air then + data[bottom] = c_node + end + + if spire_height > 4 then -- thicken it all up + for i = 0, math.floor(spire_height/2) do + local current_vi = vi-i*ystride + if data[current_vi+1] == c_air then + data[current_vi+1] = c_stalk + end + if data[current_vi-1] == c_air then + data[current_vi-1] = c_stalk + end + if data[current_vi+zstride] == c_air then + data[current_vi+zstride] = c_stalk + end + if data[current_vi-zstride] == c_air then + data[current_vi-zstride] = c_stalk + end + end + + if spire_height > 7 then + bottom = bottom-ystride + if data[bottom] == c_air then + data[bottom] = c_node + end + if data[bottom-ystride] == c_air then + data[bottom-ystride] = c_node + end + if data[bottom+1] == c_air then + data[bottom+1] = c_node + end + if data[bottom-1] == c_air then + data[bottom-1] = c_node + end + if data[bottom+zstride] == c_air then + data[bottom+zstride] = c_node + end + if data[bottom-zstride] == c_air then + data[bottom-zstride] = c_node + end + end + end +end \ No newline at end of file diff --git a/df_primordial_items/fungal_nodes.lua b/df_primordial_items/fungal_nodes.lua index 047a43e..975bc94 100644 --- a/df_primordial_items/fungal_nodes.lua +++ b/df_primordial_items/fungal_nodes.lua @@ -2,35 +2,6 @@ local MP = minetest.get_modpath(minetest.get_current_modname()) local S, NS = dofile(MP.."/intllib.lua") ---------------------------------------------------------------------------------------- --- Glownode and stalk - -minetest.register_node("df_primordial_items:glownode", { - description = S("Primordial Fungal Lantern"), - _doc_items_longdesc = df_primordial_items.doc.glownode_desc, - _doc_items_usagehelp = df_primordial_items.doc.glownode_usage, - drawtype = "glasslike", - tiles = {"dfcaverns_mush_glownode.png"}, - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - groups = {cracky = 3, oddly_breakable_by_hand = 3}, - sounds = default.node_sound_glass_defaults(), - light_source = default.LIGHT_MAX, -}) - -minetest.register_node("df_primordial_items:glownode_stalk", { - description = S("Primordial Fungal Lantern Stalk"), - _doc_items_longdesc = df_primordial_items.doc.glownode_stalk_desc, - _doc_items_usagehelp = df_primordial_items.doc.glownode_stalk_usage, - tiles = {"dfcaverns_mush_stalk_top.png", "dfcaverns_mush_stalk_top.png", "dfcaverns_mush_stalk_side.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), - on_place = minetest.rotate_node -}) - ----------------------------------------------------------------------------------------------- -- Plants @@ -91,24 +62,6 @@ minetest.register_node("df_primordial_items:glow_orb", { sunlight_propagates = true, }) -minetest.register_node("df_primordial_items:glow_orb_hanging", { - description = S("Primordial Fungal Orb"), - _doc_items_longdesc = df_primordial_items.doc.glow_orb_desc, - _doc_items_usagehelp = df_primordial_items.doc.glow_orb_usage, - tiles = {"dfcaverns_mush_orb_vert.png"}, - inventory_image = "dfcaverns_mush_orb_vert.png", - wield_image = "dfcaverns_mush_orb_vert.png", - groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 1}, - paramtype = "light", - drawtype = "plantlike", - buildable_to = true, - walkable = false, - light_source = 6, - sounds = default.node_sound_leaves_defaults(), - use_texture_alpha = true, - sunlight_propagates = true, -}) - minetest.register_node("df_primordial_items:glow_orb_stalks", { description = S("Primordial Fungal Orb"), _doc_items_longdesc = df_primordial_items.doc.glow_orb_desc, @@ -151,7 +104,7 @@ minetest.register_node("df_primordial_items:glow_pods", { minetest.register_node("df_primordial_items:dirt_with_mycelium", { description = S("Dirt With Primordial Mycelium"), tiles = {"dfcaverns_mush_soil.png"}, - groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + groups = {crumbly = 3, soil = 1}, drops = "default:dirt", sounds = default.node_sound_dirt_defaults(), light_source = 3, diff --git a/df_primordial_items/init.lua b/df_primordial_items/init.lua index 8be0c01..439221c 100644 --- a/df_primordial_items/init.lua +++ b/df_primordial_items/init.lua @@ -8,4 +8,5 @@ dofile(MP.."/jungle_tree.lua") dofile(MP.."/jungle_mushroom.lua") dofile(MP.."/giant_fern.lua") dofile(MP.."/fungal_nodes.lua") +dofile(MP.."/ceiling_fungus.lua") dofile(MP.."/primordial_mushroom.lua")