diff --git a/LICENSE.txt b/LICENSE.txt index 293aacf..a246569 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -985,8 +985,42 @@ GNU Lesser General Public License v2.1 or later - everness_ceramic_sherds_ore.png - everness_pick_archeological.png - everness_logo.png -- textures/everness_fence_coral_wood.png -- textures/everness_fence_rail_coral_wood.png +- everness_fence_coral_wood.png +- everness_fence_rail_coral_wood.png +- everness_bucket_lava.png +- everness_door_lava_tree_wood.png +- everness_door_lava_tree_wood_item.png +- everness_door_trapdoor_lava_tree_wood.png +- everness_door_trapdoor_lava_tree_wood_side.png +- everness_fence_lava_tree_wood.png +- everness_fence_rail_lava_tree_wood.png +- everness_lava_flowing_animated.png +- everness_lava_source_animated.png +- everness_lava_tree.png +- everness_lava_tree_animated.png +- everness_lava_tree_leaves.png +- everness_lava_tree_sapling.png +- everness_lava_tree_top.png +- everness_lava_tree_wood.png +- everness_mcl_bucket_lava.png +- everness_mineral_cave_moss.png +- everness_mineral_cave_moss_grass.png +- everness_mineral_cave_moss_side.png +- everness_mineral_cobblestone_under.png +- everness_mineral_lava_stone_animated.png +- everness_mineral_lava_stone_bottom.png +- everness_mineral_lava_stone_side.png +- everness_mineral_stone_under.png +- everness_mineral_stone_under_top.png +- everness_mtg_bucket_lava.png +- everness_wall_vine_cave_blue.png +- everness_wall_vine_cave_blue_item.png +- everness_wall_vine_cave_cyan.png +- everness_wall_vine_cave_cyan_item.png +- everness_wall_vine_cave_green.png +- everness_wall_vine_cave_green_item.png +- everness_wall_vine_cave_violet.png +- everness_wall_vine_cave_violet_item.png **CC-BY-SA-4.0, Pixel Perfection by XSSheep**, https://minecraft.curseforge.com/projects/pixel-perfection-freshly-updated @@ -1498,6 +1532,14 @@ https://freesound.org/people/Rudmer_Rotteveel/sounds/590950/ - everness_water_geyser.1.ogg +**CC0-1.0, by Fission9**, https://freesound.org/people/Fission9/sounds/474850/ + +- everness_lava_1.ogg + +**CC0-1.0, by morganpurkis**, https://freesound.org/people/morganpurkis/sounds/385098/ + +- everness_lava_2.ogg + ### Models **CC-BY-SA-4.0, by SaKeL** diff --git a/api.lua b/api.lua index 7fbde41..140c3bb 100644 --- a/api.lua +++ b/api.lua @@ -969,6 +969,8 @@ end function Everness.register_ore(self, def) local _def = table.copy(def) + -- @TOTO using `ore` as name here will override the entry when there are multiple ore registrations for the same ore (different noise) + -- using indexed table would be more appropriate here local _name = _def.ore self.registered_ores[_name] = _def @@ -1503,7 +1505,12 @@ end -- `dtime_s` is the in-game time (in seconds) elapsed since the block -- was last active function Everness.cool_lava(pos, node, dtime_s, prev_cool_lava_action) - if node.name == 'default:lava_source' or node.name == 'mcl_core:lava_source' then + -- Variant Obsidian + if + node.name == 'default:lava_source' + or node.name == 'mcl_core:lava_source' + or node.name == 'everness:lava_source' + then if math.random(1, 10) == 1 then local obi_nodes = { { name = 'everness:blue_crying_obsidian', color = '#2978A6'}, @@ -1559,6 +1566,12 @@ function Everness.cool_lava(pos, node, dtime_s, prev_cool_lava_action) } }) end + elseif node.name == 'everness:lava_source' then + -- Lava flowing + minetest.set_node(pos, {name = 'default:obsidian'}) + elseif node.name == 'everness:lava_flowing' then + -- Lava flowing + minetest.set_node(pos, {name = 'default:stone'}) else prev_cool_lava_action(pos, node, dtime_s) end @@ -2155,23 +2168,6 @@ function Everness.add_to_queue_on_generated(self, def) table.insert(self.on_generated_queue, def) end -function Everness.find_irecursive(table, c_id) - local found = false - - for i, v in ipairs(table) do - if type(v) == 'table' then - Everness.find_irecursive(v, c_id) - end - - if c_id == v then - found = true - break - end - end - - return found -end - ---Merge two tables with key/value pair ---@param t1 table ---@param t2 table diff --git a/assets/schematics/everness_lava_tree.lua b/assets/schematics/everness_lava_tree.lua new file mode 100644 index 0000000..dfe24d7 --- /dev/null +++ b/assets/schematics/everness_lava_tree.lua @@ -0,0 +1,657 @@ +schematic = { + size = {x=7, y=13, z=7}, + yslice_prob = { + {ypos=0, prob=254}, + {ypos=1, prob=254}, + {ypos=2, prob=254}, + {ypos=3, prob=254}, + {ypos=4, prob=254}, + {ypos=5, prob=254}, + {ypos=6, prob=254}, + {ypos=7, prob=254}, + {ypos=8, prob=254}, + {ypos=9, prob=254}, + {ypos=10, prob=254}, + {ypos=11, prob=254}, + {ypos=12, prob=254}, + }, + data = { + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0, force_place=true}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=126, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=126, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="everness:lava_tree_leaves", prob=254, param2=0}, + {name="everness:lava_tree_leaves", prob=126, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + {name="air", prob=0, param2=0}, + }, +} diff --git a/buckets.lua b/buckets.lua index a594f96..a54ba74 100644 --- a/buckets.lua +++ b/buckets.lua @@ -220,3 +220,19 @@ bucket.register_liquid( S('Mineral') .. ' ' .. S('Water') .. ' ' .. S('Bucket'), { tool = 1, water_bucket = 1 } ) + +bucket.register_liquid( + 'everness:lava_source', + 'everness:lava_flowing', + 'everness:bucket_lava', + 'everness_bucket_lava.png', + S('Lava Bucket'), + { tool = 1 } +) + +minetest.register_craft({ + type = 'fuel', + recipe = 'everness:bucket_lava', + burntime = 370, + replacements = {{ 'everness:bucket_lava', 'everness:bucket_empty' }}, +}) diff --git a/crafting.lua b/crafting.lua index 08cdf21..2a52db1 100644 --- a/crafting.lua +++ b/crafting.lua @@ -122,6 +122,15 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = 'everness:trapdoor_lava_tree 2', + recipe = { + { 'everness:lava_tree_wood', 'everness:lava_tree_wood', 'everness:lava_tree_wood' }, + { 'everness:lava_tree_wood', 'everness:lava_tree_wood', 'everness:lava_tree_wood' }, + { '', '', '' }, + } +}) + minetest.register_craft({ output = 'everness:bamboo_mosaic_wood', recipe = { @@ -310,6 +319,20 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = 'everness:lava_tree_wood 4', + recipe = { + { 'everness:lava_tree' }, + } +}) + +minetest.register_craft({ + output = 'everness:lava_tree_wood 4', + recipe = { + { 'everness:lava_tree_with_lava' }, + } +}) + minetest.register_craft({ output = 'everness:coral_sandstone 4', recipe = { @@ -895,6 +918,12 @@ minetest.register_craft({ burntime = 15, }) +minetest.register_craft({ + type = 'fuel', + recipe = 'everness:lava_tree_wood', + burntime = 30, +}) + minetest.register_craft({ type = 'fuel', recipe = 'everness:bamboo_item', @@ -971,6 +1000,18 @@ minetest.register_craft({ recipe = 'everness:forsaken_tundra_cobble', }) +minetest.register_craft({ + type = 'cooking', + output = 'everness:mineral_cave_stone', + recipe = 'everness:mineral_cave_cobblestone', +}) + +minetest.register_craft({ + type = 'cooking', + output = 'everness:mineral_lava_stone', + recipe = 'everness:mineral_lava_stone_dry', +}) + minetest.register_craft({ type = 'cooking', output = 'everness:bamboo_dry_block', diff --git a/doors.lua b/doors.lua index cdccfe7..4bea2e4 100644 --- a/doors.lua +++ b/doors.lua @@ -89,7 +89,7 @@ doors.register('everness:door_crystal_wood', { tiles = { 'everness_door_crystal_wood.png' }, inventory_image = 'everness_door_crystal_wood_item.png', use_texture_alpha = 'blend', - groups = { node = 1, cracky = 3, oddly_breakable_by_hand = 3, door = 1 }, + groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 }, sounds = Everness.node_sound_glass_defaults(), sound_open = 'everness_door_glass_open', sound_close = 'everness_door_glass_close', @@ -114,7 +114,7 @@ doors.register_trapdoor('everness:trapdoor_crystal_wood', { sound_close = 'everness_door_glass_close', gain_open = 0.2, gain_close = 0.15, - groups = { node = 1, cracky = 3, oddly_breakable_by_hand = 3, door = 1 }, + groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 }, }) doors.register_fencegate('everness:gate_crystal_wood', { @@ -129,7 +129,7 @@ doors.register('everness:door_cursed_wood', { tiles = { 'everness_door_cursed_wood.png' }, inventory_image = 'everness_door_cursed_wood_item.png', use_texture_alpha = 'blend', - groups = { node = 1, cracky = 3, oddly_breakable_by_hand = 3, door = 1 }, + groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 }, sounds = Everness.node_sound_wood_defaults(), sound_open = 'everness_creaky_door_open', sound_close = 'everness_creaky_door_close', @@ -153,7 +153,7 @@ doors.register_trapdoor('everness:trapdoor_cursed_wood', { sound_close = 'everness_creaky_door_close', gain_open = 0.15, gain_close = 0.15, - groups = { node = 1, cracky = 3, oddly_breakable_by_hand = 3, door = 1 }, + groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 }, }) -- Palm Wood @@ -163,7 +163,7 @@ doors.register('everness:door_palm_wood', { tiles = { 'everness_door_palm_wood.png' }, inventory_image = 'everness_door_palm_wood_item.png', use_texture_alpha = 'blend', - groups = { node = 1, cracky = 3, oddly_breakable_by_hand = 3, door = 1 }, + groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 }, sounds = Everness.node_sound_wood_defaults(), recipe = { { 'everness:palm_tree_wood', 'everness:palm_tree_wood' }, @@ -179,7 +179,7 @@ doors.register_trapdoor('everness:trapdoor_palm_wood', { tile_front = 'everness_door_trapdoor_palm_wood.png', tile_side = 'everness_door_trapdoor_palm_wood_side.png', sounds = Everness.node_sound_wood_defaults(), - groups = { node = 1, cracky = 3, oddly_breakable_by_hand = 3, door = 1 }, + groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 }, }) doors.register_fencegate('everness:gate_palm_wood', { @@ -197,3 +197,36 @@ doors.register_fencegate('everness:gate_coral_wood', { material = 'everness:coral_wood', groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 } }) + +-- Lava Tree Wood + +doors.register('everness:door_lava_tree', { + description = S('Lava Tree Wood Door'), + tiles = { 'everness_door_lava_tree_wood.png' }, + inventory_image = 'everness_door_lava_tree_wood_item.png', + use_texture_alpha = 'blend', + groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 }, + sounds = Everness.node_sound_wood_defaults(), + recipe = { + { 'everness:lava_tree_wood', 'everness:lava_tree_wood' }, + { 'everness:lava_tree_wood', 'everness:lava_tree_wood' }, + { 'everness:lava_tree_wood', 'everness:lava_tree_wood' }, + } +}) + +doors.register_trapdoor('everness:trapdoor_lava_tree', { + description = S('Lava Tree Wood Trapdoor'), + inventory_image = 'everness_door_trapdoor_lava_tree_wood.png', + wield_image = 'everness_door_trapdoor_lava_tree_wood.png', + tile_front = 'everness_door_trapdoor_lava_tree_wood.png', + tile_side = 'everness_door_trapdoor_lava_tree_wood_side.png', + sounds = Everness.node_sound_wood_defaults(), + groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 }, +}) + +doors.register_fencegate('everness:gate_lava_tree_wood', { + description = S('Lava Tree Wood Fence Gate'), + texture = 'everness_lava_tree.png^[sheet:2x2:1,1', + material = 'everness:lava_tree', + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 } +}) diff --git a/env_sounds.lua b/env_sounds.lua index dffce5e..fc83109 100644 --- a/env_sounds.lua +++ b/env_sounds.lua @@ -980,6 +980,110 @@ local SOUND_DEFS = { }, } }, + ['everness:mineral_waters_under'] = { + day = { + { + name = 'everness_ambience_monster_sigh_cave', + length = 2, + gain = 0.6, + }, + { + name = 'everness_ambience_rocks_falling_cave', + length = 12, + gain = 0.6, + }, + { + name = 'everness_ambience_water_drips_cave_1', + length = 11, + gain = 0.6, + }, + { + name = 'everness_ambience_water_drips_cave_2', + length = 13, + gain = 0.6, + }, + { + name = 'everness_ambience_wind_cave_1', + length = 15, + gain = 0.6, + }, + { + name = 'everness_ambience_wind_cave_2', + length = 8, + gain = 0.6, + }, + { + name = 'everness_ambience_wind_cave_3', + length = 8, + gain = 0.6, + }, + { + name = 'everness_ambience_wind_cave_4', + length = 8, + gain = 0.6, + }, + { + name = 'everness_ambience_wind_cave_5', + length = 7.5, + gain = 0.6, + }, + { + name = 'everness_ambience_cave_1', + length = 9, + gain = 0.6, + }, + { + name = 'everness_ambience_cave_2', + length = 9, + gain = 0.6, + }, + { + name = 'everness_ambience_cave_3', + length = 5, + gain = 0.6, + }, + { + name = 'everness_ambience_cave_4', + length = 8, + gain = 0.6, + }, + { + name = 'everness_ambience_cave_5', + length = 8.5, + gain = 0.6, + }, + { + name = 'everness_ambience_cave_6', + length = 9, + gain = 0.6, + }, + { + name = 'everness_ambience_cave_7', + length = 9, + gain = 0.6, + }, + { + name = 'everness_ambience_cave_8', + length = 9, + gain = 0.6, + }, + { + name = 'everness_ambience_cave_9', + length = 10, + gain = 0.6, + }, + { + name = 'everness_lava_1', + length = 10, + gain = 1.0, + }, + { + name = 'everness_lava_2', + length = 10, + gain = 2.0, + }, + } + }, } local PLAYER_SOUNDS = {} diff --git a/fences.lua b/fences.lua index ccb8368..94bfadb 100644 --- a/fences.lua +++ b/fences.lua @@ -106,7 +106,7 @@ default.register_fence_rail('everness:fence_rail_crystal_wood', { sounds = Everness.node_sound_wood_defaults() }) -default.register_mesepost('everness:mese_post_light_bamboo_wood', { +default.register_mesepost('everness:mese_post_light_crystal_wood', { description = S('Crystal Wood Mese Post Light'), texture = 'everness_fence_crystal_wood.png^[transformFY', material = 'everness:crystal_wood', @@ -138,7 +138,7 @@ default.register_fence_rail('everness:fence_rail_palm_wood', { sounds = Everness.node_sound_wood_defaults() }) -default.register_mesepost('everness:mese_post_light_bamboo_wood', { +default.register_mesepost('everness:mese_post_light_palm_wood', { description = S('Palm Wood Mese Post Light'), texture = 'everness_fence_palm_wood.png^[transformFY', material = 'everness:palm_tree_wood', @@ -170,8 +170,40 @@ default.register_fence_rail('everness:fence_rail_coral_wood', { sounds = Everness.node_sound_wood_defaults() }) -default.register_mesepost('everness:mese_post_light_bamboo_wood', { +default.register_mesepost('everness:mese_post_light_coral_wood', { description = S('Coral Wood Mese Post Light'), texture = 'everness_fence_coral_wood.png^[transformFY', material = 'everness:coral_wood', }) + +-- Lava Tree Wood + +default.register_fence('everness:fence_lava_tree_wood', { + description = S('Lava Tree Wood Fence'), + texture = 'everness_fence_lava_tree_wood.png', + inventory_image = 'default_fence_overlay.png^everness_lava_tree_wood.png^' .. + 'default_fence_overlay.png^[makealpha:255,126,126', + wield_image = 'default_fence_overlay.png^everness_lava_tree_wood.png^' .. + 'default_fence_overlay.png^[makealpha:255,126,126', + material = 'everness:lava_tree_wood', + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, + sounds = Everness.node_sound_wood_defaults() +}) + +default.register_fence_rail('everness:fence_rail_lava_tree_wood', { + description = S('Lava Tree Wood Fence Rail'), + texture = 'everness_fence_rail_lava_tree_wood.png^[transformR90', + inventory_image = 'default_fence_rail_overlay.png^everness_lava_tree_wood.png^' .. + 'default_fence_rail_overlay.png^[makealpha:255,126,126', + wield_image = 'default_fence_rail_overlay.png^everness_lava_tree_wood.png^' .. + 'default_fence_rail_overlay.png^[makealpha:255,126,126', + material = 'everness:lava_tree_wood', + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, + sounds = Everness.node_sound_wood_defaults() +}) + +default.register_mesepost('everness:mese_post_light_lava_tree_wood', { + description = S('Lava Tree Wood Mese Post Light'), + texture = 'everness_fence_lava_tree_wood.png^[transformFY', + material = 'everness:lava_tree_wood', +}) diff --git a/functions.lua b/functions.lua index 6ce9d85..230ae3a 100644 --- a/functions.lua +++ b/functions.lua @@ -35,6 +35,7 @@ local grass_covered_mapping_under = { ['everness:soul_sandstone'] = { 'everness:soul_sandstone_veined' }, ['everness:crystal_cave_dirt'] = { 'everness:crystal_cave_dirt_with_moss' }, ['everness:mold_cobble'] = { 'everness:mold_stone_with_moss' }, + ['everness:mineral_lava_stone_dry'] = { 'everness:mineral_lava_stone_with_moss' }, } -- Spread grass on dirt @@ -121,6 +122,7 @@ Everness:register_abm({ 'everness:soul_sandstone', 'everness:crystal_cave_dirt', 'everness:mold_cobble', + 'everness:mineral_lava_stone_dry', }, neighbors = { 'air', @@ -128,6 +130,7 @@ Everness:register_abm({ 'group:cursed_grass_under', 'group:crystal_grass_under', 'group:forsaken_tundra_grass_under', + 'group:mineral_waters_grass_under', }, interval = 6, chance = 50, @@ -171,6 +174,8 @@ Everness:register_abm({ minetest.set_node(pos, { name = 'everness:crystal_cave_dirt_with_moss' }) elseif minetest.get_item_group(name, 'forsaken_tundra_grass_under') ~= 0 and node.name == 'everness:mold_cobble' then minetest.set_node(pos, { name = 'everness:mold_stone_with_moss' }) + elseif minetest.get_item_group(name, 'mineral_waters_grass_under') ~= 0 and node.name == 'everness:mineral_lava_stone_dry' then + minetest.set_node(pos, { name = 'everness:mineral_lava_stone_with_moss' }) end end }) @@ -222,6 +227,8 @@ Everness:register_abm({ minetest.set_node(pos, { name = 'everness:crystal_cave_dirt' }) elseif node.name == 'everness:mold_stone_with_moss' then minetest.set_node(pos, { name = 'everness:mold_cobble' }) + elseif node.name == 'everness:mineral_lava_stone_with_moss' then + minetest.set_node(pos, { name = 'everness:mineral_lava_stone_dry' }) end end end @@ -239,7 +246,9 @@ Everness:register_leafdecay({ 'everness:willow_tree', 'everness:sequoia_tree', 'everness:mese_tree', - 'everness:palm_tree' + 'everness:palm_tree', + 'everness:lava_tree', + 'everness:lava_tree_with_lava' }, leaves = { 'everness:coral_leaves', @@ -249,7 +258,8 @@ Everness:register_leafdecay({ 'everness:mese_leaves', 'everness:mese_tree_fruit', 'everness:palm_leaves', - 'everness:coconut' + 'everness:coconut', + 'everness:lava_tree_leaves' }, radius = 3 }) @@ -922,6 +932,136 @@ Everness:register_abm({ end }) +-- Lava spitting +Everness:register_abm({ + label = 'everness:lava_spitting', + description = 'Lava bursts in to air.', + nodenames = { 'everness:lava_source' }, + neighbors = { 'air' }, + interval = 10, + chance = 200, + catch_up = false, + action = function(pos, node) + local burst_colors = { + '#FF5400', + '#DD2005' + } + local partcile_time = math.random(3, 5) + + -- particles + local particlespawner_def = { + amount = 10, + time = partcile_time, + minpos = vector.new(pos.x - 0.1, pos.y + 0.5, pos.z - 0.1), + maxpos = vector.new(pos.x + 0.1, pos.y + 1, pos.z + 0.1), + minvel = vector.new(0, 1, 0), + maxvel = vector.new(0, 3, 0), + minacc = vector.new(0, -3, 0), + maxacc = vector.new(0, -6, 0), + minexptime = 3, + maxexptime = 5, + minsize = 3, + maxsize = 10, + texture = ('everness_water_geyser_particle.png^[multiply:%s'):format(burst_colors[math.random(1, #burst_colors)]), + vertical = true, + collisiondetection = true, + collision_removal = true + } + local particlespawner_def2 = { + amount = 40, + time = partcile_time, + minpos = vector.new(pos.x, pos.y + 0.5, pos.z), + maxpos = vector.new(pos.x, pos.y + 1, pos.z), + minvel = vector.new(0, 1, 0), + maxvel = vector.new(0, 3, 0), + minacc = vector.new(-1, -3, -1), + maxacc = vector.new(1, -6, 1), + minexptime = 3, + maxexptime = 5, + minsize = 3, + maxsize = 10, + node = node, + vertical = true, + collisiondetection = true, + collision_removal = true + } + + if minetest.has_feature({ dynamic_add_media_table = true, particlespawner_tweenable = true }) then + -- new syntax, above v5.6.0 + particlespawner_def = { + amount = 10, + time = partcile_time, + size = { + min = 1, + max = 2, + }, + exptime = { + min = 3, + max = 5 + }, + pos = { + min = vector.new(pos.x - 0.1, pos.y + 0.5, pos.z - 0.1), + max = vector.new(pos.x + 0.1, pos.y + 1, pos.z + 0.1) + }, + vel = { + min = vector.new(0, 1, 0), + max = vector.new(0, 3, 0) + }, + acc = { + min = vector.new(0, -3, 0), + max = vector.new(0, -6, 0) + }, + texture = { + name = ('everness_water_geyser_particle.png^[multiply:%s'):format(burst_colors[math.random(1, #burst_colors)]), + scale_tween = { + 10, 3, + style = 'fwd', + reps = 1 + } + }, + vertical = true, + collisiondetection = true, + collision_removal = true + } + + particlespawner_def2 = { + amount = 40, + time = partcile_time, + size = { + min = 1, + max = 2, + }, + exptime = { + min = 3, + max = 5 + }, + pos = { + min = vector.new(pos.x, pos.y + 0.5, pos.z), + max = vector.new(pos.x, pos.y + 1, pos.z) + }, + vel = { + min = vector.new(0, 1, 0), + max = vector.new(0, 3, 0) + }, + acc = { + min = vector.new(-1, -3, -1), + max = vector.new(1, -6, 1) + }, + node = node, + vertical = true, + collisiondetection = true, + collision_removal = true + } + end + + if math.random(0, 100) <=50 then + minetest.add_particlespawner(particlespawner_def2) + else + minetest.add_particlespawner(particlespawner_def) + end + end +}) + -- Generate bamboo tops after mineral waters biome generates decorations Everness:register_lbm({ -- Descriptive label for profiling purposes (optional). @@ -1141,12 +1281,18 @@ Everness:register_abm({ end }) +-- +-- Lavacooling +-- + -- Override lava cooling to include some variations of obsidian minetest.register_on_mods_loaded(function() for _, abm in pairs(minetest.registered_abms) do if abm.label == 'Lava cooling' and abm.action ~= nil then local prev_cool_lava_action = abm.action + table.insert_all(abm.nodenames, { 'everness:lava_source', 'everness:lava_flowing' }) + abm.action = function(pos, node, dtime_s) Everness.cool_lava(pos, node, dtime_s, prev_cool_lava_action) end diff --git a/init.lua b/init.lua index 6573c60..e581ecd 100644 --- a/init.lua +++ b/init.lua @@ -31,10 +31,14 @@ end dofile(path .. '/api.lua') dofile(path .. '/nodes.lua') dofile(path .. '/nodes_farming.lua') +if Everness.settings.biomes.everness_mineral_waters_under.enabled then + dofile(path .. '/nodes_mineral_waters_under.lua') +end dofile(path .. '/bamboo.lua') dofile(path .. '/functions.lua') dofile(path .. '/trees.lua') dofile(path .. '/vines.lua') +dofile(path .. '/vines_wall.lua') dofile(path .. '/chests.lua') dofile(path .. '/torches.lua') diff --git a/mapgen_after.lua b/mapgen_after.lua index 3ae35e4..49f336a 100644 --- a/mapgen_after.lua +++ b/mapgen_after.lua @@ -87,7 +87,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed) for _, def in ipairs(Everness.on_generated_queue) do if def.can_run(biomemap) and def.after_write_to_map then shared_args[def.name] = shared_args[def.name] or {} - def.after_write_to_map(shared_args[def.name], gennotify) + def.after_write_to_map(shared_args[def.name], gennotify, rand) end end diff --git a/mapgen_mineral_waters.lua b/mapgen_mineral_waters.lua index 4e45ce6..bff987a 100644 --- a/mapgen_mineral_waters.lua +++ b/mapgen_mineral_waters.lua @@ -172,6 +172,23 @@ Everness:register_decoration({ -- On Generated -- +local function find_irecursive(table, c_id) + local found = false + + for i, v in ipairs(table) do + if type(v) == 'table' then + find_irecursive(v, c_id) + end + + if c_id == v then + found = true + break + end + end + + return found +end + -- Get the content IDs for the nodes used local c_everness_mineral_water_source = minetest.get_content_id('everness:mineral_water_source') local c_everness_mineral_stone = minetest.get_content_id('everness:mineral_stone') @@ -246,23 +263,6 @@ local size = { x = 7, y = 16, z = 9 } local size_x = math.round(size.x / 2) local size_z = math.round(size.z / 2) -local function find_irecursive(table, c_id) - local found = false - - for i, v in ipairs(table) do - if type(v) == 'table' then - find_irecursive(v, c_id) - end - - if c_id == v then - found = true - break - end - end - - return found -end - local function place_decoration(pos, vm, area, data, deco_id, callback) local deco_def = minetest.registered_decorations[deco_id] diff --git a/mapgen_mineral_waters_under.lua b/mapgen_mineral_waters_under.lua index 884ee81..113a8d9 100644 --- a/mapgen_mineral_waters_under.lua +++ b/mapgen_mineral_waters_under.lua @@ -25,7 +25,10 @@ local y_min = Everness.settings.biomes.everness_mineral_waters_under.y_min Everness:register_biome({ name = 'everness:mineral_waters_under', - node_cave_liquid = 'air', + node_stone = 'everness:mineral_cave_stone', + node_filler = 'everness:mineral_cave_stone', + node_cave_liquid = 'everness:lava_source', + node_water = 'air', node_dungeon = 'everness:mineral_stone_brick', node_dungeon_alt = 'everness:mineral_stone_brick_with_growth', node_dungeon_stair = 'stairs:stair_mineral_stone_brick', @@ -40,13 +43,40 @@ Everness:register_biome({ -- Ores -- +minetest.register_on_mods_loaded(function() + local c_mapgen_stone = minetest.get_content_id('mapgen_stone') + local mapgen_stone_itemstring = minetest.get_name_from_content_id(c_mapgen_stone) + + for name, def in pairs(minetest.registered_ores) do + local wherein = def.wherein + local biomes = def.biomes + + if type(def.wherein) == 'string' then + wherein = { wherein } + end + + -- Register the same ores what are defined for `mapgen_stone` + if + table.indexof(wherein, mapgen_stone_itemstring) > -1 + and not biomes + then + def.wherein = { 'everness:mineral_cave_stone' } + def.biomes = { 'everness:mineral_waters_under' } + def.y_max = y_max + def.y_min = y_min + + Everness:register_ore(def) + end + end +end) + -- Blob ore. -- These before scatter ores to avoid other ores in blobs. Everness:register_ore({ ore_type = 'blob', ore = 'everness:mineral_stone', - wherein = { 'mapgen_stone' }, + wherein = { 'everness:mineral_cave_stone' }, clust_scarcity = 16 * 16 * 16, clust_size = 5, y_max = y_max, @@ -67,8 +97,653 @@ Everness:register_ore({ -- Register decorations -- +Everness:register_decoration({ + name = 'everness:mineral_waters_under_floors', + deco_type = 'simple', + place_on = { 'everness:mineral_cave_stone' }, + sidelen = 16, + place_offset_y = -1, + fill_ratio = 10, + biomes = { 'everness:mineral_waters_under' }, + y_max = y_max, + y_min = y_min, + flags = 'all_floors, force_placement', + decoration = { + 'everness:mineral_lava_stone' + }, +}) +-- +-- Floors +-- + +Everness:register_decoration({ + name = 'everness:mineral_waters_under_volcanic_spike', + deco_type = 'simple', + place_on = { + 'everness:mineral_lava_stone', + 'everness:mineral_cave_stone' + }, + sidelen = 16, + noise_params = { + offset = -0.03, + scale = 0.09, + spread = { x = 200, y = 200, z = 200 }, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = { 'everness:mineral_waters_under' }, + spawn_by = 'air', + check_offset = 0, + num_spawn_by = 1, + decoration = { + 'everness:marker' + }, + y_max = y_max, + y_min = y_min, + flags = 'all_floors', +}) + +Everness:register_decoration({ + name = 'everness:mineral_waters_under_lava_stone_spike', + deco_type = 'simple', + place_on = { + 'everness:mineral_lava_stone', + 'everness:mineral_cave_stone' + }, + sidelen = 16, + noise_params = { + offset = -0.015, + scale = 0.075, + spread = { x = 200, y = 200, z = 200 }, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = { 'everness:mineral_waters_under' }, + decoration = { + 'everness:marker' + }, + y_max = y_max, + y_min = y_min, + flags = 'all_floors', +}) + +Everness:register_decoration({ + name = 'everness:mineral_waters_under_lava_tree', + deco_type = 'simple', + place_on = { + 'everness:mineral_lava_stone', + 'everness:mineral_cave_stone', + 'everness:mineral_lava_stone_with_moss' + }, + sidelen = 16, + fill_ratio = 0.025, + biomes = { 'everness:mineral_waters_under' }, + decoration = { + 'everness:marker' + }, + y_max = y_max, + y_min = y_min, + flags = 'all_floors', +}) + +-- +-- Ceilings +-- + +Everness:register_decoration({ + name = 'everness:mineral_waters_under_volcanic_spike_ceiling', + deco_type = 'simple', + place_on = { + 'everness:mineral_lava_stone', + 'everness:mineral_cave_stone' + }, + sidelen = 16, + noise_params = { + offset = -0.03, + scale = 0.09, + spread = { x = 200, y = 200, z = 200 }, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = { 'everness:mineral_waters_under' }, + decoration = { + 'everness:marker' + }, + y_max = y_max, + y_min = y_min, + flags = 'all_ceilings', +}) -- -- On Generated -- + +-- Get the content IDs for the nodes used +local c_everness_wall_vine_cave_cyan = minetest.get_content_id('everness:wall_vine_cave_cyan') +local c_everness_wall_vine_cave_violet = minetest.get_content_id('everness:wall_vine_cave_violet') +local c_everness_wall_vine_cave_blue = minetest.get_content_id('everness:wall_vine_cave_blue') +local c_everness_mineral_lava_stone = minetest.get_content_id('everness:mineral_lava_stone') +local c_everness_mineral_cave_stone = minetest.get_content_id('everness:mineral_cave_stone') +local c_everness_mineral_cave_cobblestone = minetest.get_content_id('everness:mineral_cave_cobblestone') +local c_everness_lava_source = minetest.get_content_id('everness:lava_source') +local c_everness_marker = minetest.get_content_id('everness:marker') +local c_everness_volcanic_rock = minetest.get_content_id('everness:volcanic_rock') +local c_everness_volcanic_spike_1 = minetest.get_content_id('everness:volcanic_spike_1') +local c_everness_volcanic_spike_2 = minetest.get_content_id('everness:volcanic_spike_2') +local c_everness_volcanic_spike_3 = minetest.get_content_id('everness:volcanic_spike_3') +local c_everness_volcanic_spike_4 = minetest.get_content_id('everness:volcanic_spike_4') +local c_everness_volcanic_spike_5 = minetest.get_content_id('everness:volcanic_spike_5') +local c_everness_volcanic_spike_6 = minetest.get_content_id('everness:volcanic_spike_6') +local c_everness_volcanic_spike_7 = minetest.get_content_id('everness:volcanic_spike_7') +local c_everness_mineral_cave_stone_spike_1 = minetest.get_content_id('everness:mineral_cave_stone_spike_1') +local c_everness_mineral_cave_stone_spike_2 = minetest.get_content_id('everness:mineral_cave_stone_spike_2') +local c_everness_mineral_cave_stone_spike_3 = minetest.get_content_id('everness:mineral_cave_stone_spike_3') +local c_everness_mineral_cave_stone_spike_4 = minetest.get_content_id('everness:mineral_cave_stone_spike_4') +local c_everness_mineral_cave_stone_spike_5 = minetest.get_content_id('everness:mineral_cave_stone_spike_5') +local c_everness_mineral_cave_stone_spike_6 = minetest.get_content_id('everness:mineral_cave_stone_spike_6') +local c_everness_mineral_cave_stone_spike_7 = minetest.get_content_id('everness:mineral_cave_stone_spike_7') +local c_everness_mineral_lava_stone_spike_1 = minetest.get_content_id('everness:mineral_lava_stone_spike_1') +local c_everness_mineral_lava_stone_spike_2 = minetest.get_content_id('everness:mineral_lava_stone_spike_2') +local c_everness_mineral_lava_stone_spike_3 = minetest.get_content_id('everness:mineral_lava_stone_spike_3') +local c_everness_mineral_lava_stone_spike_4 = minetest.get_content_id('everness:mineral_lava_stone_spike_4') +local c_everness_mineral_lava_stone_spike_5 = minetest.get_content_id('everness:mineral_lava_stone_spike_5') +local c_everness_mineral_lava_stone_spike_6 = minetest.get_content_id('everness:mineral_lava_stone_spike_6') +local c_everness_mineral_lava_stone_spike_7 = minetest.get_content_id('everness:mineral_lava_stone_spike_7') +local c_everness_mineral_lava_stone_with_moss = minetest.get_content_id('everness:mineral_lava_stone_with_moss') +-- Biome IDs +local biome_id_everness_mineral_waters_under = minetest.get_biome_id('everness:mineral_waters_under') +-- Decoration IDs +local d_everness_mineral_waters_under_volcanic_spike = minetest.get_decoration_id('everness:mineral_waters_under_volcanic_spike') +local d_everness_mineral_waters_under_volcanic_spike_ceiling = minetest.get_decoration_id('everness:mineral_waters_under_volcanic_spike_ceiling') +local d_everness_mineral_waters_under_lava_stone_spike = minetest.get_decoration_id('everness:mineral_waters_under_lava_stone_spike') +local d_everness_mineral_waters_under_lava_tree = minetest.get_decoration_id('everness:mineral_waters_under_lava_tree') + +local volcanic_spike_place_on = minetest.registered_decorations['everness:mineral_waters_under_volcanic_spike'].place_on +volcanic_spike_place_on = type(volcanic_spike_place_on) == 'string' and { volcanic_spike_place_on } or volcanic_spike_place_on + +local volcanic_spike_ceiling_place_on = minetest.registered_decorations['everness:mineral_waters_under_volcanic_spike_ceiling'].place_on +volcanic_spike_ceiling_place_on = type(volcanic_spike_ceiling_place_on) == 'string' and { volcanic_spike_ceiling_place_on } or volcanic_spike_ceiling_place_on + +local lava_stone_spike_place_on = minetest.registered_decorations['everness:mineral_waters_under_lava_stone_spike'].place_on +lava_stone_spike_place_on = type(lava_stone_spike_place_on) == 'string' and { lava_stone_spike_place_on } or lava_stone_spike_place_on + +local lava_tree_place_on = minetest.registered_decorations['everness:mineral_waters_under_lava_tree'].place_on +lava_tree_place_on = type(lava_tree_place_on) == 'string' and { lava_tree_place_on } or lava_tree_place_on + +-- `minetest.read_schematic` here so we don't cache the schem file, otherwise `replacements` will not work +local schem_everness_lava_tree = minetest.read_schematic(minetest.get_modpath('everness') .. '/schematics/everness_lava_tree.mts', {}) +local lava_tree_size = { x = 7, y = 13, z = 7 } +local lava_tree_size_x = math.round(lava_tree_size.x / 2) +local lava_tree_size_z = math.round(lava_tree_size.z / 2) +local lava_tree_safe_volume = lava_tree_size.x * lava_tree_size.y * lava_tree_size.z + +local wall_vines = { + c_everness_wall_vine_cave_cyan, + c_everness_wall_vine_cave_violet, + c_everness_wall_vine_cave_blue +} + +local volcanic_spike_map = { + c_everness_volcanic_rock, + c_everness_volcanic_spike_1, + c_everness_volcanic_spike_2, + c_everness_volcanic_spike_3, + c_everness_volcanic_spike_4, + c_everness_volcanic_spike_5, + c_everness_volcanic_spike_6, + c_everness_volcanic_spike_7 +} + +local cave_stone_spike_map = { + c_everness_mineral_cave_cobblestone, + c_everness_mineral_cave_stone_spike_1, + c_everness_mineral_cave_stone_spike_2, + c_everness_mineral_cave_stone_spike_3, + c_everness_mineral_cave_stone_spike_4, + c_everness_mineral_cave_stone_spike_5, + c_everness_mineral_cave_stone_spike_6, + c_everness_mineral_cave_stone_spike_7 +} + +local lava_stone_spike_map = { + c_everness_mineral_lava_stone, + c_everness_mineral_lava_stone_spike_1, + c_everness_mineral_lava_stone_spike_2, + c_everness_mineral_lava_stone_spike_3, + c_everness_mineral_lava_stone_spike_4, + c_everness_mineral_lava_stone_spike_5, + c_everness_mineral_lava_stone_spike_6, + c_everness_mineral_lava_stone_spike_7 +} + +minetest.set_gen_notify({ decoration = true }, { + d_everness_mineral_waters_under_volcanic_spike, + d_everness_mineral_waters_under_lava_stone_spike, + d_everness_mineral_waters_under_volcanic_spike_ceiling, + d_everness_mineral_waters_under_lava_tree +}) + +Everness:add_to_queue_on_generated({ + name = 'everness:mineral_waters_under', + can_run = function(biomemap) + return table.indexof(biomemap, biome_id_everness_mineral_waters_under) ~= -1 + end, + -- read/write to `data` what will be eventually saved (set_data) + -- used for voxelmanip `data` manipulation + on_data = function(minp, maxp, area, data, p2data, gennotify, rand, shared_args) + local rand_version = rand:next(1, 2) + shared_args.rand_version = rand_version + + if rand_version == 1 then + -- + -- Lakes + -- + for z = minp.z, maxp.z do + for y = minp.y, maxp.y do + for x = minp.x, maxp.x do + local ai = area:index(x, y, z) + local c_current = data[ai] + + -- +Y, -Y, +X, -X, +Z, -Z + -- top, bottom, right, left, front, back + -- right + local c_right = data[ai + 1] + -- left + local c_left = data[ai - 1] + -- front + local c_front = data[ai + area.zstride] + -- back + local c_back = data[ai - area.zstride] + + local keep_going = true + local while_count = 1 + local max_dig_depth = 11 + + if + c_current == c_everness_mineral_lava_stone + and ( + c_right == c_everness_mineral_lava_stone + or c_right == c_everness_mineral_cave_stone + or c_right == c_everness_lava_source + ) + and ( + c_left == c_everness_mineral_lava_stone + or c_left == c_everness_mineral_cave_stone + or c_left == c_everness_lava_source + ) + and ( + c_front == c_everness_mineral_lava_stone + or c_front == c_everness_mineral_cave_stone + or c_front == c_everness_lava_source + ) + and ( + c_back == c_everness_mineral_lava_stone + or c_back == c_everness_mineral_cave_stone + or c_back == c_everness_lava_source + ) + then + -- dig below + while keep_going and while_count <= max_dig_depth do + local while_index = ai - area.ystride * while_count + + if + -- below + data[while_index] == c_everness_mineral_cave_stone + and ( + -- right + data[while_index + 1 + area.ystride] == c_everness_mineral_lava_stone + or data[while_index + 1 + area.ystride] == c_everness_lava_source + or data[while_index + 1 + area.ystride] == c_everness_mineral_cave_stone + ) + and ( + -- left + data[while_index - 1 + area.ystride] == c_everness_mineral_lava_stone + or data[while_index - 1 + area.ystride] == c_everness_lava_source + or data[while_index - 1 + area.ystride] == c_everness_mineral_cave_stone + ) + and ( + -- front + data[while_index + area.zstride + area.ystride] == c_everness_mineral_lava_stone + or data[while_index + area.zstride + area.ystride] == c_everness_lava_source + or data[while_index + area.zstride + area.ystride] == c_everness_mineral_cave_stone + ) + and ( + -- back + data[while_index - area.zstride + area.ystride] == c_everness_mineral_lava_stone + or data[while_index - area.zstride + area.ystride] == c_everness_lava_source + or data[while_index - area.zstride + area.ystride] == c_everness_mineral_cave_stone + ) + then + data[while_index + area.ystride] = c_everness_lava_source + else + keep_going = false + end + + while_count = while_count + 1 + end + end + end + end + end + else + for y = minp.y, maxp.y do + for z = minp.z, maxp.z do + for x = minp.x, maxp.x do + local ai = area:index(x, y, z) + + if + data[ai] == c_everness_mineral_lava_stone + and data[ai + area.ystride] == minetest.CONTENT_AIR + and rand:next(0, 100) <= 10 + then + local radius = 7 + local chance_max = 80 + + for h = -3, 3 do + for i = -radius, radius do + for j = -radius, radius do + local idx = ai + i + (area.zstride * j) + (area.ystride * h) + local distance = math.round(vector.distance(area:position(ai), area:position(idx))) + local chance_moss = math.round(chance_max / distance) + + if chance_moss > chance_max then + chance_moss = chance_max + end + + if + data[idx] == c_everness_mineral_lava_stone + and rand:next(0, 100) < chance_moss + then + data[idx] = c_everness_mineral_lava_stone_with_moss + end + end + end + end + end + end + end + end + end + + -- + -- Decorations + -- + for y = minp.y, maxp.y do + for z = minp.z, maxp.z do + for x = minp.x, maxp.x do + local vi = area:index(x, y, z) + + if + data[vi] == minetest.CONTENT_AIR + and ( + data[vi + 1] == c_everness_mineral_cave_stone + or data[vi - 1] == c_everness_mineral_cave_stone + or data[vi + area.zstride] == c_everness_mineral_cave_stone + or data[vi - area.zstride] == c_everness_mineral_cave_stone + ) + and rand:next(0, 100) <= 15 + then + -- Decorate Walls + local dir = vector.zero() + + if data[vi + 1] == c_everness_mineral_cave_stone then + dir.x = 1 + end + + if data[vi - 1] == c_everness_mineral_cave_stone then + dir.x = -1 + end + + if data[vi + area.zstride] == c_everness_mineral_cave_stone then + dir.z = 1 + end + + if data[vi - area.zstride] == c_everness_mineral_cave_stone then + dir.z = -1 + end + + local rand_wall_vine = wall_vines[rand:next(1, #wall_vines)] + data[vi] = rand_wall_vine + p2data[vi] = minetest.dir_to_wallmounted(dir) + end + end + end + end + + -- + -- Spikes Floor + -- + for _, pos in ipairs(gennotify['decoration#' .. (d_everness_mineral_waters_under_volcanic_spike or '')] or {}) do + local idx = area:indexp(pos) + local idx_marker = idx + area.ystride + local place_on_node_name = minetest.get_name_from_content_id(data[idx]) + + if data[idx_marker] == c_everness_marker then + -- remove marker + data[idx_marker] = minetest.CONTENT_AIR + + if table.indexof(volcanic_spike_place_on, place_on_node_name) ~= -1 then + local min_height = 3 + local max_height = 8 + local indexes = Everness.find_content_in_vm_area( + vector.new(pos.x, pos.y + 1, pos.z), + vector.new(pos.x, pos.y + max_height, pos.z), + { + minetest.CONTENT_AIR + }, + data, + area + ) + + -- For smallest spike we need space above at least 3) + if #indexes > min_height then + local height = rand:next(min_height, #indexes) + local start_index = #volcanic_spike_map - height + 1 + local count = 0 + + for i = start_index, #volcanic_spike_map do + data[idx_marker + area.ystride * count] = volcanic_spike_map[i] + count = count + 1 + end + end + end + end + end + + for _, pos in ipairs(gennotify['decoration#' .. (d_everness_mineral_waters_under_lava_stone_spike or '')] or {}) do + local idx = area:indexp(pos) + local idx_marker = idx + area.ystride + local place_on_node_name = minetest.get_name_from_content_id(data[idx]) + + if data[idx_marker] == c_everness_marker then + -- remove marker + data[idx_marker] = minetest.CONTENT_AIR + + if table.indexof(lava_stone_spike_place_on, place_on_node_name) ~= -1 then + local min_height = 3 + local max_height = 8 + local indexes = Everness.find_content_in_vm_area( + vector.new(pos.x, pos.y + 1, pos.z), + vector.new(pos.x, pos.y + max_height, pos.z), + { + minetest.CONTENT_AIR + }, + data, + area + ) + + -- For smallest spike we need space above at least 3) + if #indexes > min_height then + local height = rand:next(min_height, #indexes) + local start_index = #cave_stone_spike_map - height + 1 + local count = 0 + + for i = start_index, #cave_stone_spike_map do + data[idx_marker + area.ystride * count] = cave_stone_spike_map[i] + count = count + 1 + end + end + end + end + end + + -- + -- Spikes Ceiling + -- + for _, pos in ipairs(gennotify['decoration#' .. (d_everness_mineral_waters_under_volcanic_spike_ceiling or '')] or {}) do + local idx = area:indexp(pos) + local idx_marker = idx - area.ystride + local place_on_node_name = minetest.get_name_from_content_id(data[idx]) + + if data[idx_marker] == c_everness_marker then + -- remove marker + data[idx_marker] = minetest.CONTENT_AIR + -- data[idx_marker] = minetest.get_content_id('everness:pyrite_lantern') + + if table.indexof(volcanic_spike_ceiling_place_on, place_on_node_name) ~= -1 then + local min_height = 3 + local max_height = 16 + local indexes = Everness.find_content_in_vm_area( + vector.new(pos.x, pos.y - max_height, pos.z), + vector.new(pos.x, pos.y - 1, pos.z), + { + minetest.CONTENT_AIR + }, + data, + area + ) + + -- For smallest spike we need space above at least 3) + if #indexes > min_height then + local remainder = 0 + local height = rand:next(min_height, #indexes) + + if height > #lava_stone_spike_map then + remainder = height - #lava_stone_spike_map + height = height - remainder + end + + local start_index = #lava_stone_spike_map - height + 1 + local count = 0 + + if remainder > 0 then + for i = 1, remainder do + data[idx_marker - area.ystride * count] = c_everness_mineral_cave_cobblestone + count = count + 1 + end + end + + for i = start_index, #lava_stone_spike_map do + data[idx_marker - area.ystride * count] = lava_stone_spike_map[i] + count = count + 1 + end + end + end + end + end + end, + -- read-only (but cant and should not manipulate) voxelmanip `data` + -- used for `place_schematic_on_vmanip` which will invalidate `data` + -- therefore we are doing it after we set the data + after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args) + -- + -- Lava Trees + -- + for _, pos in ipairs(gennotify['decoration#' .. (d_everness_mineral_waters_under_lava_tree or '')] or {}) do + -- `pos` is position of the 'place_on' node + local marker_pos = vector.new(pos.x, pos.y + 1, pos.z) + local marker_node = minetest.get_node(marker_pos) + local place_on_node = minetest.get_node(pos) + + if marker_node and marker_node.name == 'everness:marker' then + -- remove marker + minetest.remove_node(marker_pos) + + if shared_args.rand_version ~= 1 + and table.indexof(lava_tree_place_on, place_on_node.name) ~= -1 + then + -- enough air to place structure ? + local positions = minetest.find_nodes_in_area( + vector.new( + pos.x - lava_tree_size_x, + pos.y, + pos.z - lava_tree_size_z + ), + vector.new( + pos.x + lava_tree_size_x, + pos.y + lava_tree_size.y, + pos.z + lava_tree_size_z + ), + { + 'air', + 'everness:lava_tree', + 'everness:lava_tree_with_lava' + }, + true + ) + + local air = positions.air or {} + local tree1 = positions['everness:lava_tree'] or {} + local tree2 = positions['everness:lava_tree_with_lava'] or {} + + -- do not overlap another tree + if + #tree1 == 0 + and #tree2 == 0 + and #air > lava_tree_safe_volume + then + local replacements + + if rand:next(0, 100) <= 25 then + replacements = { + ['everness:lava_tree'] = 'everness:lava_tree_with_lava', + } + end + + shared_args.lava_tree_positions = shared_args.lava_tree_positions or {} + table.insert(shared_args.lava_tree_positions, marker_pos) + + minetest.place_schematic_on_vmanip( + vm, + marker_pos, + schem_everness_lava_tree, + 'random', + replacements, + false, + 'place_center_x, place_center_z' + ) + end + end + end + end + end, + -- Cannot read/write voxelmanip or its data + -- Used for direct manipulation of the world chunk nodes where the + -- definitions of nodes are available and node callback can be executed + -- or e.g. for `minetest.fix_light` + after_write_to_map = function(shared_args, gennotify, rand) + local lava_tree_positions = shared_args.lava_tree_positions or {} + + for _, p in ipairs(lava_tree_positions) do + local grass_positions = minetest.find_nodes_in_area_under_air( + vector.subtract(p, { x = 3, y = 1, z = 3 }), + vector.add(p, { x = 3, y = 1, z = 3 }), + 'everness:mineral_lava_stone_with_moss' + ) + + if #grass_positions > 1 then + for i = 1, rand:next(1, 3) do + local rand_p = grass_positions[rand:next(1, #grass_positions)] + + if not vector.equals(p, rand_p) then + minetest.set_node(vector.new(rand_p.x, rand_p.y + 1, rand_p.z), { name = 'everness:mineral_cave_moss_grass' }) + end + end + end + end + end +}) diff --git a/mod_support_mtg.lua b/mod_support_mtg.lua index 9e38f64..80cb6f7 100644 --- a/mod_support_mtg.lua +++ b/mod_support_mtg.lua @@ -29,4 +29,20 @@ if minetest.get_modpath('bucket') then S('Mineral') .. ' ' .. S('Water') .. ' ' .. S('Bucket'), { tool = 1, water_bucket = 1 } ) + + bucket.register_liquid( + 'everness:lava_source', + 'everness:lava_flowing', + 'everness:bucket_lava', + 'everness_mtg_bucket_lava.png', + S('Lava Bucket'), + { tool = 1 } + ) + + minetest.register_craft({ + type = 'fuel', + recipe = 'everness:bucket_lava', + burntime = 370, + replacements = {{ 'everness:bucket_lava', 'bucket:bucket_empty' }}, + }) end diff --git a/mod_support_x_farming.lua b/mod_support_x_farming.lua index e0aaf56..5944b44 100644 --- a/mod_support_x_farming.lua +++ b/mod_support_x_farming.lua @@ -224,6 +224,22 @@ x_farming.x_bonemeal:register_tree_defs({ Everness.grow_palm_tree(pos) + return true + end + }, + { + -- sapling name + name = 'everness:lava_tree_sapling', + -- 1 out of `chance`, e.g. 2 = 50% chance + chance = 4, + -- grow tree from sapling + grow_tree = function(pos) + if not x_farming.x_bonemeal.is_on_soil(pos) then + return false + end + + Everness.grow_lava_tree(pos) + return true end }, diff --git a/models/everness_vine_wall.obj b/models/everness_vine_wall.obj new file mode 100644 index 0000000..a099a6a --- /dev/null +++ b/models/everness_vine_wall.obj @@ -0,0 +1,109 @@ +# Blender v2.83.20 OBJ File: 'everness_better_vine_1.blend' +# www.blender.org +mtllib everness_vine_wall.mtl +o Plane +v 0.470000 -0.490000 -0.470000 +v -0.470000 -0.490000 -0.470000 +v 0.470000 -0.490000 0.470000 +v -0.470000 -0.490000 0.470000 +v -0.752156 -0.490000 0.461451 +v 0.751842 -0.492615 0.461221 +v -0.751842 -0.272978 0.044555 +v 0.752156 -0.275593 0.044326 +v 0.752156 -0.275593 -0.073174 +v -0.751842 -0.272978 -0.072945 +v 0.751842 -0.492615 0.343721 +v -0.752156 -0.490000 0.343951 +v -0.752156 -0.490000 0.226451 +v 0.751842 -0.492615 0.226221 +v -0.751842 -0.272978 -0.190445 +v 0.752156 -0.275593 -0.190674 +v 0.752156 -0.275593 -0.308174 +v -0.751842 -0.272978 -0.307945 +v 0.751842 -0.492615 0.108721 +v -0.752156 -0.490000 0.108951 +v -0.752156 -0.490000 -0.008549 +v 0.751842 -0.492615 -0.008779 +v -0.751842 -0.272978 -0.425445 +v 0.752156 -0.275593 -0.425674 +v 0.752156 -0.275593 -0.543174 +v -0.751842 -0.272978 -0.542945 +v 0.751842 -0.492615 -0.126279 +v -0.752156 -0.490000 -0.126049 +v -0.752156 -0.490000 -0.243549 +v 0.751842 -0.492615 -0.243779 +v -0.751842 -0.272978 -0.660445 +v 0.752156 -0.275593 -0.660674 +v 0.752156 -0.275593 -0.778174 +v -0.751842 -0.272978 -0.777945 +v 0.751842 -0.492615 -0.361279 +v -0.752156 -0.490000 -0.361050 +v 0.752149 -0.315254 -0.905760 +v -0.751849 -0.312629 -0.905760 +v 0.751848 -0.487510 -0.468464 +v -0.752149 -0.484885 -0.468463 +vt -0.000000 0.727273 +vt 1.000000 0.818182 +vt -0.000000 0.818182 +vt 1.000000 0.636364 +vt 0.000000 0.727273 +vt 0.000000 0.636364 +vt 1.000000 0.545455 +vt 0.000000 0.636364 +vt 0.000000 0.545455 +vt 1.000000 0.454546 +vt 0.000000 0.545455 +vt 0.000000 0.454546 +vt 0.000000 0.363636 +vt 1.000000 0.454546 +vt 0.000000 0.454546 +vt 0.000000 0.272727 +vt 1.000000 0.363636 +vt 0.000000 0.363636 +vt 1.000000 0.181818 +vt 0.000000 0.272727 +vt 0.000000 0.181818 +vt 1.000000 0.090909 +vt 0.000000 0.181818 +vt 0.000000 0.090909 +vt 0.000000 -0.000000 +vt 1.000000 0.090909 +vt 0.000000 0.090909 +vt 0.166667 0.818182 +vt 0.833333 1.000000 +vt 0.833333 0.818182 +vt 1.000000 0.727273 +vt 1.000000 0.727273 +vt 1.000000 0.636364 +vt 1.000000 0.545455 +vt 1.000000 0.363636 +vt 1.000000 0.272727 +vt 1.000000 0.272727 +vt 1.000000 0.181818 +vt 1.000000 0.000000 +vt 0.166667 1.000000 +vn 0.0016 0.8870 0.4617 +vn 0.0016 0.9304 0.3665 +vn 0.0000 1.0000 -0.0000 +usemtl leaves +s off +f 8/1/1 5/2/1 6/3/1 +f 10/4/1 11/5/1 9/6/1 +f 15/7/1 14/8/1 16/9/1 +f 18/10/1 19/11/1 17/12/1 +f 24/13/1 21/14/1 22/15/1 +f 25/16/1 28/17/1 27/18/1 +f 31/19/1 30/20/1 32/21/1 +f 34/22/1 35/23/1 33/24/1 +f 37/25/2 40/26/2 39/27/2 +f 3/28/3 2/29/3 4/30/3 +f 8/1/1 7/31/1 5/2/1 +f 10/4/1 12/32/1 11/5/1 +f 15/7/1 13/33/1 14/8/1 +f 18/10/1 20/34/1 19/11/1 +f 24/13/1 23/35/1 21/14/1 +f 25/16/1 26/36/1 28/17/1 +f 31/19/1 29/37/1 30/20/1 +f 34/22/1 36/38/1 35/23/1 +f 37/25/2 38/39/2 40/26/2 +f 3/28/3 1/40/3 2/29/3 diff --git a/nodes.lua b/nodes.lua index d19494e..2621021 100644 --- a/nodes.lua +++ b/nodes.lua @@ -11478,6 +11478,121 @@ Everness:register_node('everness:mineral_water_flowing', { sounds = Everness.node_sound_water_defaults(), }) +minetest.register_node('everness:lava_source', { + description = S('Lava Source'), + drawtype = 'liquid', + tiles = { + { + name = 'everness_lava_source_animated.png', + backface_culling = false, + animation = { + type = 'vertical_frames', + aspect_w = 16, + aspect_h = 16, + length = 6, + }, + align_style = 'world', + scale = 2 + }, + { + name = 'everness_lava_source_animated.png', + backface_culling = true, + animation = { + type = 'vertical_frames', + aspect_w = 16, + aspect_h = 16, + length = 6, + }, + align_style = 'world', + scale = 2 + }, + }, + paramtype = 'light', + light_source = 13, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = '', + drowning = 1, + liquidtype = 'source', + liquid_alternative_flowing = 'everness:lava_flowing', + liquid_alternative_source = 'everness:lava_source', + liquid_viscosity = 7, + liquid_renewable = false, + damage_per_second = 4 * 2, + post_effect_color = { a = 191, r = 255, g = 64, b = 0 }, + groups = { + lava = 3, + liquid = 2, + igniter = 1 + }, + liquid_range = 2, +}) + +minetest.register_node('everness:lava_flowing', { + description = S('Flowing Lava'), + drawtype = 'flowingliquid', + tiles = { + { + name = 'everness_lava_flowing_animated.png', + align_style = 'world', + scale = 2 + } + }, + special_tiles = { + { + name = 'everness_lava_flowing_animated.png', + backface_culling = false, + animation = { + type = 'vertical_frames', + aspect_w = 16, + aspect_h = 16, + length = 3.3, + }, + align_style = 'world', + scale = 2 + }, + { + name = 'everness_lava_flowing_animated.png', + backface_culling = true, + animation = { + type = 'vertical_frames', + aspect_w = 16, + aspect_h = 16, + length = 3.3, + }, + align_style = 'world', + scale = 2 + }, + }, + paramtype = 'light', + paramtype2 = 'flowingliquid', + light_source = 13, + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + drop = '', + drowning = 1, + liquidtype = 'flowing', + liquid_alternative_flowing = 'everness:lava_flowing', + liquid_alternative_source = 'everness:lava_source', + liquid_viscosity = 7, + liquid_renewable = false, + damage_per_second = 4 * 2, + post_effect_color = { a = 191, r = 255, g = 64, b = 0 }, + groups = { + lava = 3, + liquid = 2, + igniter = 1, + not_in_creative_inventory = 1 + }, + liquid_range = 2, +}) + Everness:register_node('everness:water_geyser', { description = S('Water') .. ' ' .. S('Geyser'), drawtype = 'mesh', diff --git a/nodes_mineral_waters_under.lua b/nodes_mineral_waters_under.lua new file mode 100644 index 0000000..41c16ed --- /dev/null +++ b/nodes_mineral_waters_under.lua @@ -0,0 +1,685 @@ +--[[ + Everness. Never ending discovery in Everness mapgen. + Copyright (C) 2024 SaKeL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + +--]] + +local S = minetest.get_translator(minetest.get_current_modname()) + +Everness:register_node('everness:mineral_cave_stone', { + description = S('Mineral Cave Stone'), + tiles = { + { + name = 'everness_mineral_stone_under_top.png', + align_style = 'world', + scale = 2 + }, + { + name = 'everness_mineral_stone_under_top.png', + align_style = 'world', + scale = 2 + }, + { + name = 'everness_mineral_stone_under.png', + align_style = 'world', + scale = 2 + } + }, + drop = 'everness:mineral_cave_cobblestone', + groups = { + -- MTG + cracky = 3, + -- MCL + pickaxey = 1, + building_block = 1, + material_stone = 1, + -- ALL + stone = 1, + }, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, + _mcl_silk_touch_drop = true, + sounds = Everness.node_sound_stone_defaults(), +}) + +Everness:register_node('everness:mineral_cave_cobblestone', { + description = S('Mineral Cave Cobblestone'), + is_ground_content = false, + tiles = { + { + name = 'everness_mineral_cobblestone_under.png', + align_style = 'world', + scale = 2 + } + }, + groups = { + -- MTG + cracky = 3, + -- MCL + pickaxey = 1, + building_block = 1, + material_stone = 1, + -- ALL + stone = 2, + }, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, + _mcl_silk_touch_drop = true, + sounds = Everness.node_sound_stone_defaults(), +}) + +Everness:register_node('everness:mineral_lava_stone', { + description = S('Mineral Lava Stone with lava'), + is_ground_content = false, + -- Textures of node; +Y, -Y, +X, -X, +Z, -Z + tiles = { + { + name = 'everness_mineral_lava_stone_animated.png', + align_style = 'world', + scale = 2, + animation = { + type = 'vertical_frames', + aspect_w = 16, + aspect_h = 16, + length = 6.4, + }, + }, + { + name = 'everness_mineral_lava_stone_bottom.png', + align_style = 'world', + scale = 2 + }, + { + name = 'everness_mineral_lava_stone_side.png', + align_style = 'world', + scale = 2 + } + }, + drop = 'everness:mineral_lava_stone_dry', + groups = { + -- MTG + cracky = 3, + -- MCL + pickaxey = 1, + building_block = 1, + material_stone = 1, + -- ALL + stone = 1, + }, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, + _mcl_silk_touch_drop = true, + light_source = 3, + sounds = Everness.node_sound_stone_defaults(), +}) + +Everness:register_node('everness:mineral_lava_stone_dry', { + description = S('Mineral Lava Stone without lava'), + is_ground_content = false, + -- Textures of node; +Y, -Y, +X, -X, +Z, -Z + tiles = { + { + name = 'everness_mineral_lava_stone_bottom.png', + align_style = 'world', + scale = 2 + } + }, + groups = { + -- MTG + cracky = 3, + -- MCL + pickaxey = 1, + building_block = 1, + material_stone = 1, + -- ALL + stone = 1, + }, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, + _mcl_silk_touch_drop = true, + sounds = Everness.node_sound_stone_defaults(), +}) + +Everness:register_node('everness:mineral_lava_stone_with_moss', { + description = S('Mineral Lava Stone with moss'), + is_ground_content = false, + -- Textures of node; +Y, -Y, +X, -X, +Z, -Z + tiles = { + { + name = 'everness_mineral_cave_moss.png', + align_style = 'world', + scale = 2 + }, + { + name = 'everness_mineral_cave_moss.png', + align_style = 'world', + scale = 2 + }, + { + name = 'everness_mineral_cave_moss_side.png', + align_style = 'world', + scale = 2 + }, + }, + drop = 'everness:mineral_lava_stone_dry', + groups = { + -- MTG + cracky = 3, + -- Everness + everness_spreading_dirt_type_under = 1, + -- MCL + pickaxey = 1, + building_block = 1, + material_stone = 1, + -- ALL + stone = 1, + }, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, + _mcl_silk_touch_drop = true, + light_source = 3, + sounds = Everness.node_sound_stone_defaults(), +}) + +for i = 1, 7 do + local last = i == 7 + + Everness:register_node('everness:volcanic_spike_' .. i, { + description = S('Volcanic Spike') .. ' ' .. i, + tiles = { 'everness_volcanic_rock.png' }, + sounds = Everness.node_sound_stone_defaults(), + drawtype = 'nodebox', + groups = { + -- MTG + cracky = 1, + level = 2, + stone = 1, + -- MCL + pickaxey = 5, + building_block = 1, + material_stone = 1, + }, + _mcl_blast_resistance = 1200, + _mcl_hardness = 50, + is_ground_content = false, + node_box = { + type = 'fixed', + fixed = { + { + (-8 + i) / 16, + -8 / 16, + (-8 + i) / 16, + (8 - i) / 16, + 8 / 16, + (8 - i) / 16 + } + } + }, + selection_box = { + type = 'fixed', + fixed = { + (-8 + i - 1) / 16, + -8 / 16, + (-8 + i - 1) / 16, + (8 - i + 1) / 16, + 8 / 16, + (8 - i + 1) / 16 + } + }, + collision_box = { + type = 'fixed', + fixed = { + (-8 + i) / 16, + -8 / 16, + (-8 + i) / 16, + (8 - i) / 16, + 8 / 16, + (8 - i) / 16 + }, + }, + move_resistance = last and 7 or 0, + damage_per_second = last and 4 or 0, + drowning = last and 1 or 0, + walkable = not last, + climbable = last, + }) + + Everness:register_node('everness:mineral_cave_stone_spike_' .. i, { + description = S('Mineral Lava Stone Spike') .. ' ' .. i, + -- Textures of node; +Y, -Y, +X, -X, +Z, -Z + tiles = { + { + name = 'everness_mineral_stone_under_top.png', + align_style = 'world', + scale = 2 + }, + { + name = 'everness_mineral_stone_under_top.png', + align_style = 'world', + scale = 2 + }, + { + name = 'everness_mineral_stone_under.png', + align_style = 'world', + scale = 2 + } + }, + groups = { + -- MTG + cracky = 3, + -- MCL + pickaxey = 1, + building_block = 1, + material_stone = 1, + -- ALL + stone = 1, + }, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, + _mcl_silk_touch_drop = true, + sounds = Everness.node_sound_stone_defaults(), + drawtype = 'nodebox', + is_ground_content = false, + node_box = { + type = 'fixed', + fixed = { + { + (-8 + i) / 16, + -8 / 16, + (-8 + i) / 16, + (8 - i) / 16, + 8 / 16, + (8 - i) / 16 + } + } + }, + selection_box = { + type = 'fixed', + fixed = { + (-8 + i - 1) / 16, + -8 / 16, + (-8 + i - 1) / 16, + (8 - i + 1) / 16, + 8 / 16, + (8 - i + 1) / 16 + } + }, + collision_box = { + type = 'fixed', + fixed = { + (-8 + i) / 16, + -8 / 16, + (-8 + i) / 16, + (8 - i) / 16, + 8 / 16, + (8 - i) / 16 + }, + }, + move_resistance = last and 7 or 0, + damage_per_second = last and 4 or 0, + drowning = last and 1 or 0, + walkable = not last, + climbable = last, + }) + + Everness:register_node('everness:mineral_lava_stone_spike_' .. i, { + description = S('Mineral Lava Stone Spike') .. ' ' .. i, + -- Textures of node; +Y, -Y, +X, -X, +Z, -Z + tiles = { + { + name = 'everness_mineral_lava_stone_animated.png', + align_style = 'world', + scale = 2, + animation = { + type = 'vertical_frames', + aspect_w = 16, + aspect_h = 16, + length = 6.4, + }, + }, + }, + groups = { + -- MTG + cracky = 3, + -- MCL + pickaxey = 1, + building_block = 1, + material_stone = 1, + -- ALL + stone = 1, + }, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, + _mcl_silk_touch_drop = true, + sounds = Everness.node_sound_stone_defaults(), + drawtype = 'nodebox', + is_ground_content = false, + node_box = { + type = 'fixed', + fixed = { + { + (-8 + i) / 16, + -8 / 16, + (-8 + i) / 16, + (8 - i) / 16, + 8 / 16, + (8 - i) / 16 + } + } + }, + selection_box = { + type = 'fixed', + fixed = { + (-8 + i - 1) / 16, + -8 / 16, + (-8 + i - 1) / 16, + (8 - i + 1) / 16, + 8 / 16, + (8 - i + 1) / 16 + } + }, + collision_box = { + type = 'fixed', + fixed = { + (-8 + i) / 16, + -8 / 16, + (-8 + i) / 16, + (8 - i) / 16, + 8 / 16, + (8 - i) / 16 + }, + }, + light_source = 12, + move_resistance = last and 7 or 0, + damage_per_second = last and 4 or 0, + drowning = last and 1 or 0, + walkable = not last, + climbable = last, + }) +end + +Everness:register_node('everness:lava_tree', { + description = S('Lava Tree Trunk'), + short_description = S('Lava Tree Trunk'), + tiles = { + { name = 'everness_lava_tree_top.png' }, + { name = 'everness_lava_tree_top.png' }, + { + name = 'everness_lava_tree.png', + align_style = 'world', + scale = 2, + }, + }, + paramtype2 = 'facedir', + is_ground_content = false, + groups = { + -- MTG + choppy = 2, + oddly_breakable_by_hand = 1, + -- MCL + handy = 1, + axey = 1, + building_block = 1, + material_wood = 1, + fire_encouragement = 5, + fire_flammability = 5, + -- ALL + tree = 1, + flammable = 2, + }, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + sounds = Everness.node_sound_wood_defaults(), + on_place = minetest.rotate_node +}) + +Everness:register_node('everness:lava_tree_with_lava', { + description = S('Lava Tree Trunk with Lava Veins'), + short_description = S('Lava Tree Trunk with Lava Veins'), + tiles = { + { name = 'everness_lava_tree_top.png' }, + { name = 'everness_lava_tree_top.png' }, + { + name = 'everness_lava_tree_animated.png', + align_style = 'world', + scale = 8, + animation = { + type = 'vertical_frames', + aspect_w = 16, + aspect_h = 16, + length = 8, + }, + }, + }, + paramtype2 = 'facedir', + is_ground_content = false, + groups = { + -- MTG + choppy = 2, + oddly_breakable_by_hand = 1, + -- MCL + handy = 1, + axey = 1, + building_block = 1, + material_wood = 1, + fire_encouragement = 5, + fire_flammability = 5, + -- ALL + tree = 1, + flammable = 2, + }, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + sounds = Everness.node_sound_wood_defaults(), + on_place = minetest.rotate_node, + light_source = 3, +}) + +Everness:register_node('everness:lava_tree_wood', { + description = S('Lava Tree Wood Planks'), + paramtype2 = 'facedir', + place_param2 = 0, + tiles = { + { + name = 'everness_lava_tree_wood.png', + align_style = 'world', + scale = 2 + }, + }, + is_ground_content = false, + groups = { + -- MTG + choppy = 3, + oddly_breakable_by_hand = 2, + -- Everness + everness_wood = 1, + -- MCL + handy = 1, + axey = 1, + building_block = 1, + material_wood = 1, + fire_encouragement = 5, + fire_flammability = 20, + -- ALL + flammable = 3, + wood = 1, + }, + _mcl_blast_resistance = 3, + _mcl_hardness = 2, + sounds = Everness.node_sound_wood_defaults(), +}) + +Everness:register_node('everness:lava_tree_sapling', { + description = S('Lava') .. ' ' .. S('Tree') .. ' ' .. S('Sapling'), + short_description = S('Lava') .. ' ' .. S('Tree') .. ' ' .. S('Sapling'), + drawtype = 'plantlike', + tiles = { 'everness_lava_tree_sapling.png' }, + inventory_image = 'everness_lava_tree_sapling.png', + wield_image = 'everness_lava_tree_sapling.png', + paramtype = 'light', + sunlight_propagates = true, + walkable = false, + selection_box = { + type = 'fixed', + fixed = { -4 / 16, -0.5, -4 / 16, 4 / 16, 4 / 16, 4 / 16 } + }, + groups = { + -- MTG + snappy = 2, + flammable = 2, + -- X Farming + compost = 30, + -- MCL + plant = 1, + non_mycelium_plant = 1, + deco_block = 1, + dig_by_water = 1, + dig_by_piston = 1, + destroy_by_lava_flow = 1, + compostability = 30, + -- ALL + dig_immediate = 3, + attached_node = 1, + sapling = 1, + }, + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + sounds = Everness.node_sound_leaves_defaults(), + on_timer = function(pos) + Everness.grow_sapling(pos) + end, + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(300, 1500)) + end, + on_place = function(itemstack, placer, pointed_thing) + local on_place_props = { + sapling_name = 'everness:lava_tree_sapling', + minp_relative = { x = -7, y = 1, z = -7 }, + maxp_relative = { x = 7, y = 13, z = 7 }, + interval = 4, + } + + return Everness:sapling_on_place(itemstack, placer, pointed_thing, on_place_props) + end, +}) + +Everness:register_node('everness:lava_tree_leaves', { + description = S('Lava') .. ' ' .. S('Tree') .. ' ' .. S('Leaves'), + short_description = S('Lava') .. ' ' .. S('Tree') .. ' ' .. S('Leaves'), + drawtype = 'allfaces_optional', + tiles = { + { + name = 'everness_lava_tree_leaves.png', + align_style = 'world', + scale = 2, + }, + }, + special_tiles = { + { + name = 'everness_lava_tree_leaves.png', + align_style = 'world', + scale = 2, + }, + }, + paramtype = 'light', + is_ground_content = false, + sunlight_propagates = true, + groups = { + -- MTG + snappy = 3, + leafdecay = 3, + -- X Farming + compost = 30, + -- MCL + handy = 1, + hoey = 1, + shearsy = 1, + swordy = 1, + dig_by_piston = 1, + fire_encouragement = 30, + fire_flammability = 60, + deco_block = 1, + compostability = 30, + -- ALL + flammable = 2, + leaves = 1, + }, + _mcl_shears_drop = true, + _mcl_blast_resistance = 0.2, + _mcl_hardness = 0.2, + _mcl_silk_touch_drop = true, + drop = { + max_items = 1, + items = { + { + -- player will get sapling with 1/100 chance + items = { 'everness:lava_tree_sapling' }, + rarity = 100, + }, + { + -- player will get leaves only if he get no saplings, + -- this is because max_items is 1 + items = { 'everness:lava_tree_leaves' }, + } + } + }, + sounds = Everness.node_sound_leaves_defaults(), + after_place_node = function(pos, placer, itemstack, pointed_thing) + return Everness:after_place_leaves(pos, placer, itemstack, pointed_thing) + end +}) + +Everness:register_node('everness:mineral_cave_moss_grass', { + description = S('Mineral Cave Moss Grass'), + short_description = S('Mineral Cave Moss Grass'), + drawtype = 'plantlike', + waving = 1, + tiles = { 'everness_mineral_cave_moss_grass.png' }, + inventory_image = 'everness_mineral_cave_moss_grass.png', + wield_image = 'everness_mineral_cave_moss_grass.png', + paramtype = 'light', + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = { + -- MTG + snappy = 3, + flora = 1, + -- Everness + mineral_waters_grass_under = 1, + -- X Farming + compost = 30, + -- MCL + handy = 1, + shearsy = 1, + deco_block = 1, + plant = 1, + non_mycelium_plant = 1, + fire_encouragement = 60, + fire_flammability = 100, + dig_by_water = 1, + destroy_by_lava_flow = 1, + compostability = 30, + -- ALL + attached_node = 1, + flammable = 2, + }, + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + sounds = Everness.node_sound_leaves_defaults(), + selection_box = { + type = 'fixed', + fixed = { -6 / 16, -0.5, -6 / 16, 6 / 16, 4 / 16, 6 / 16 }, + }, + light_source = 7 +}) diff --git a/schematics/everness_lava_tree.mts b/schematics/everness_lava_tree.mts new file mode 100644 index 0000000..c0d1885 Binary files /dev/null and b/schematics/everness_lava_tree.mts differ diff --git a/skybox.lua b/skybox.lua index f1231c8..6923af2 100644 --- a/skybox.lua +++ b/skybox.lua @@ -730,6 +730,50 @@ local skybox_defs = { scale = 0.5 }, }, + ['everness:mineral_waters_under'] = { + sky_parameters = { + type = 'regular', + sky_color = { + day_sky = '#8B1408', + day_horizon = '#b2380a', + dawn_sky = '#8B1408', + dawn_horizon = '#b2380a', + night_sky = '#A3609E', + night_horizon = '#C7A8D9', + fog_sun_tint = '#8B1408', + fog_moon_tint = '#520E49' + } + }, + particlespawner = { + amount = 100, + time = 0, + size = { + min = 1, + max = 2 + }, + node = { name = 'everness:mineral_lava_stone' }, + node_tile = 1, + glow = 100, + pos = { + min = vector.new(-50, -50, -50), + max = vector.new(50, 50, 50) + }, + jitter = { + min = vector.new(-1, -1, -1), + max = vector.new(1, 1, 1) + }, + vel = { + min = vector.new(-1, -1, -1), + max = vector.new(1, 1, 1) + }, + exptime = { + min = 5, + max = 10 + }, + collisiondetection = true, + collision_removal = true + } + }, } local function should_flip(player) @@ -850,12 +894,36 @@ minetest.register_globalstep(function(dtime) else player:set_clouds() end + + if skybox_defs[biome_name].particlespawner then + local pdef = table.copy(skybox_defs[biome_name].particlespawner) + + pdef.attached = player + pdef.playername = player:get_player_name() + + local pid = minetest.add_particlespawner(pdef) + player_meta:set_int('everness_biome_particlespawner_id', pid) + else + local pid = player_meta:get_int('everness_biome_particlespawner_id') + + if pid ~= 0 then + minetest.delete_particlespawner(pid) + player_meta:set_int('everness_biome_particlespawner_id', 0) + end + end else player:set_sun() player:set_moon() player:set_stars() player:set_sky() player:set_clouds() + + local pid = player_meta:get_int('everness_biome_particlespawner_id') + + if pid ~= 0 then + minetest.delete_particlespawner(pid) + player_meta:set_int('everness_biome_particlespawner_id', 0) + end end end @@ -932,3 +1000,9 @@ minetest.register_on_joinplayer(function(player, last_login) player_meta:set_int('everness_timeofday', 0) player_meta:set_int('everness_is_day', 1) end) + +minetest.register_on_leaveplayer(function(player, timed_out) + local player_meta = player:get_meta() + + player_meta:set_int('everness_biome_particlespawner_id', 0) +end) diff --git a/sounds/everness_lava_1.ogg b/sounds/everness_lava_1.ogg new file mode 100644 index 0000000..7993d79 Binary files /dev/null and b/sounds/everness_lava_1.ogg differ diff --git a/sounds/everness_lava_2.ogg b/sounds/everness_lava_2.ogg new file mode 100644 index 0000000..3646372 Binary files /dev/null and b/sounds/everness_lava_2.ogg differ diff --git a/stairs.lua b/stairs.lua index 496e08e..5c40e51 100644 --- a/stairs.lua +++ b/stairs.lua @@ -856,3 +856,70 @@ stairs.register_stair_and_slab( Everness.node_sound_wood_defaults(), true ) + +-- Mineral Waters Under +stairs.register_stair_and_slab( + 'mineral_cave_stone', + 'everness:mineral_cave_stone', + { cracky = 2, stone = 1 }, + {{ + name = 'everness_mineral_stone_under.png', + align_style = 'world', + scale = 2 + }}, + S('Mineral Cave Stone Stair'), + S('Mineral Cave Stone Slab'), + Everness.node_sound_stone_defaults(), + true +) + +stairs.register_stair_and_slab( + 'mineral_cave_cobblestone', + 'everness:mineral_cave_cobblestone', + { cracky = 2, stone = 1 }, + {{ + name = 'everness_mineral_cobblestone_under.png', + align_style = 'world', + scale = 2 + }}, + S('Mineral Cave Cobblestone Stair'), + S('Mineral Cave Cobblestone Slab'), + Everness.node_sound_stone_defaults(), + true +) + +stairs.register_stair_and_slab( + 'mineral_lava_stone', + 'everness:mineral_lava_stone', + { cracky = 2, stone = 1 }, + {{ + name = 'everness_mineral_lava_stone_animated.png', + align_style = 'world', + scale = 2, + animation = { + type = 'vertical_frames', + aspect_w = 16, + aspect_h = 16, + length = 6.4, + }, + }}, + S('Mineral Lava Stone with lava Stair'), + S('Mineral Lava Stone with lava Slab'), + Everness.node_sound_stone_defaults(), + true +) + +stairs.register_stair_and_slab( + 'mineral_lava_stone_dry', + 'everness:mineral_lava_stone_dry', + { cracky = 2, stone = 1 }, + {{ + name = 'everness_mineral_lava_stone_bottom.png', + align_style = 'world', + scale = 2 + }}, + S('Mineral Lava Stone without lava Stair'), + S('Mineral Lava Stone without lava Slab'), + Everness.node_sound_stone_defaults(), + true +) diff --git a/textures/everness_bucket_lava.png b/textures/everness_bucket_lava.png new file mode 100644 index 0000000..06da103 Binary files /dev/null and b/textures/everness_bucket_lava.png differ diff --git a/textures/everness_door_lava_tree_wood.png b/textures/everness_door_lava_tree_wood.png new file mode 100644 index 0000000..1cfac4b Binary files /dev/null and b/textures/everness_door_lava_tree_wood.png differ diff --git a/textures/everness_door_lava_tree_wood_item.png b/textures/everness_door_lava_tree_wood_item.png new file mode 100644 index 0000000..a3450aa Binary files /dev/null and b/textures/everness_door_lava_tree_wood_item.png differ diff --git a/textures/everness_door_trapdoor_lava_tree_wood.png b/textures/everness_door_trapdoor_lava_tree_wood.png new file mode 100644 index 0000000..99d3522 Binary files /dev/null and b/textures/everness_door_trapdoor_lava_tree_wood.png differ diff --git a/textures/everness_door_trapdoor_lava_tree_wood_side.png b/textures/everness_door_trapdoor_lava_tree_wood_side.png new file mode 100644 index 0000000..ca1719b Binary files /dev/null and b/textures/everness_door_trapdoor_lava_tree_wood_side.png differ diff --git a/textures/everness_fence_lava_tree_wood.png b/textures/everness_fence_lava_tree_wood.png new file mode 100644 index 0000000..27afd41 Binary files /dev/null and b/textures/everness_fence_lava_tree_wood.png differ diff --git a/textures/everness_fence_rail_lava_tree_wood.png b/textures/everness_fence_rail_lava_tree_wood.png new file mode 100644 index 0000000..c1a1cee Binary files /dev/null and b/textures/everness_fence_rail_lava_tree_wood.png differ diff --git a/textures/everness_lava_flowing_animated.png b/textures/everness_lava_flowing_animated.png new file mode 100644 index 0000000..aaef22e Binary files /dev/null and b/textures/everness_lava_flowing_animated.png differ diff --git a/textures/everness_lava_source_animated.png b/textures/everness_lava_source_animated.png new file mode 100644 index 0000000..9b02ec3 Binary files /dev/null and b/textures/everness_lava_source_animated.png differ diff --git a/textures/everness_lava_tree.png b/textures/everness_lava_tree.png new file mode 100644 index 0000000..455bc8f Binary files /dev/null and b/textures/everness_lava_tree.png differ diff --git a/textures/everness_lava_tree_animated.png b/textures/everness_lava_tree_animated.png new file mode 100644 index 0000000..afc5fb5 Binary files /dev/null and b/textures/everness_lava_tree_animated.png differ diff --git a/textures/everness_lava_tree_leaves.png b/textures/everness_lava_tree_leaves.png new file mode 100644 index 0000000..2f440af Binary files /dev/null and b/textures/everness_lava_tree_leaves.png differ diff --git a/textures/everness_lava_tree_sapling.png b/textures/everness_lava_tree_sapling.png new file mode 100644 index 0000000..a01889e Binary files /dev/null and b/textures/everness_lava_tree_sapling.png differ diff --git a/textures/everness_lava_tree_top.png b/textures/everness_lava_tree_top.png new file mode 100644 index 0000000..0f942f4 Binary files /dev/null and b/textures/everness_lava_tree_top.png differ diff --git a/textures/everness_lava_tree_wood.png b/textures/everness_lava_tree_wood.png new file mode 100644 index 0000000..d070eef Binary files /dev/null and b/textures/everness_lava_tree_wood.png differ diff --git a/textures/everness_mcl_bucket_lava.png b/textures/everness_mcl_bucket_lava.png new file mode 100644 index 0000000..0e87a0a Binary files /dev/null and b/textures/everness_mcl_bucket_lava.png differ diff --git a/textures/everness_mineral_cave_moss.png b/textures/everness_mineral_cave_moss.png new file mode 100644 index 0000000..592978d Binary files /dev/null and b/textures/everness_mineral_cave_moss.png differ diff --git a/textures/everness_mineral_cave_moss_grass.png b/textures/everness_mineral_cave_moss_grass.png new file mode 100644 index 0000000..abe5a67 Binary files /dev/null and b/textures/everness_mineral_cave_moss_grass.png differ diff --git a/textures/everness_mineral_cave_moss_side.png b/textures/everness_mineral_cave_moss_side.png new file mode 100644 index 0000000..2831a53 Binary files /dev/null and b/textures/everness_mineral_cave_moss_side.png differ diff --git a/textures/everness_mineral_cobblestone_under.png b/textures/everness_mineral_cobblestone_under.png new file mode 100644 index 0000000..f555844 Binary files /dev/null and b/textures/everness_mineral_cobblestone_under.png differ diff --git a/textures/everness_mineral_lava_stone_animated.png b/textures/everness_mineral_lava_stone_animated.png new file mode 100644 index 0000000..8fd6416 Binary files /dev/null and b/textures/everness_mineral_lava_stone_animated.png differ diff --git a/textures/everness_mineral_lava_stone_bottom.png b/textures/everness_mineral_lava_stone_bottom.png new file mode 100644 index 0000000..7daef6c Binary files /dev/null and b/textures/everness_mineral_lava_stone_bottom.png differ diff --git a/textures/everness_mineral_lava_stone_side.png b/textures/everness_mineral_lava_stone_side.png new file mode 100644 index 0000000..4964dac Binary files /dev/null and b/textures/everness_mineral_lava_stone_side.png differ diff --git a/textures/everness_mineral_stone_under.png b/textures/everness_mineral_stone_under.png new file mode 100644 index 0000000..49bb611 Binary files /dev/null and b/textures/everness_mineral_stone_under.png differ diff --git a/textures/everness_mineral_stone_under_top.png b/textures/everness_mineral_stone_under_top.png new file mode 100644 index 0000000..2ed666d Binary files /dev/null and b/textures/everness_mineral_stone_under_top.png differ diff --git a/textures/everness_mtg_bucket_lava.png b/textures/everness_mtg_bucket_lava.png new file mode 100644 index 0000000..17b2a60 Binary files /dev/null and b/textures/everness_mtg_bucket_lava.png differ diff --git a/textures/everness_wall_vine_cave_blue.png b/textures/everness_wall_vine_cave_blue.png new file mode 100644 index 0000000..39df69f Binary files /dev/null and b/textures/everness_wall_vine_cave_blue.png differ diff --git a/textures/everness_wall_vine_cave_blue_item.png b/textures/everness_wall_vine_cave_blue_item.png new file mode 100644 index 0000000..b345b26 Binary files /dev/null and b/textures/everness_wall_vine_cave_blue_item.png differ diff --git a/textures/everness_wall_vine_cave_cyan.png b/textures/everness_wall_vine_cave_cyan.png new file mode 100644 index 0000000..0e8e79c Binary files /dev/null and b/textures/everness_wall_vine_cave_cyan.png differ diff --git a/textures/everness_wall_vine_cave_cyan_item.png b/textures/everness_wall_vine_cave_cyan_item.png new file mode 100644 index 0000000..6660801 Binary files /dev/null and b/textures/everness_wall_vine_cave_cyan_item.png differ diff --git a/textures/everness_wall_vine_cave_green.png b/textures/everness_wall_vine_cave_green.png new file mode 100644 index 0000000..e42458f Binary files /dev/null and b/textures/everness_wall_vine_cave_green.png differ diff --git a/textures/everness_wall_vine_cave_green_item.png b/textures/everness_wall_vine_cave_green_item.png new file mode 100644 index 0000000..e68e45c Binary files /dev/null and b/textures/everness_wall_vine_cave_green_item.png differ diff --git a/textures/everness_wall_vine_cave_violet.png b/textures/everness_wall_vine_cave_violet.png new file mode 100644 index 0000000..741887e Binary files /dev/null and b/textures/everness_wall_vine_cave_violet.png differ diff --git a/textures/everness_wall_vine_cave_violet_item.png b/textures/everness_wall_vine_cave_violet_item.png new file mode 100644 index 0000000..80ca072 Binary files /dev/null and b/textures/everness_wall_vine_cave_violet_item.png differ diff --git a/trees.lua b/trees.lua index 5ad9a68..d69643e 100644 --- a/trees.lua +++ b/trees.lua @@ -104,6 +104,31 @@ function Everness.grow_palm_tree(pos) path, '0', nil, false) end +function Everness.grow_lava_tree(pos) + local schem_everness_lava_tree = minetest.read_schematic(minetest.get_modpath('everness') .. '/schematics/everness_lava_tree.mts', {}) + local lava_nodes = minetest.find_nodes_in_area_under_air( + vector.subtract(pos, 1), + vector.add(pos, 1), + { 'group:lava' } + ) + local replacements + + if #lava_nodes > 0 then + replacements = { + ['everness:lava_tree'] = 'everness:lava_tree_with_lava', + } + end + + minetest.place_schematic( + pos, + schem_everness_lava_tree, + 'random', + replacements, + false, + 'place_center_x, place_center_z' + ) +end + function Everness.grow_sapling(pos, groups_under) if not Everness.can_grow(pos, groups_under) then -- try again 5 min later @@ -152,5 +177,8 @@ function Everness.grow_sapling(pos, groups_under) elseif node.name == 'everness:palm_tree_sapling' then minetest.log('action', 'A palm tree sapling grows into a tree at ' .. minetest.pos_to_string(pos)) Everness.grow_palm_tree(pos) + elseif node.name == 'everness:lava_tree_sapling' then + minetest.log('action', 'A lava tree sapling grows into a tree at ' .. minetest.pos_to_string(pos)) + Everness.grow_lava_tree(pos) end end diff --git a/vines_wall.lua b/vines_wall.lua new file mode 100644 index 0000000..d3b028e --- /dev/null +++ b/vines_wall.lua @@ -0,0 +1,113 @@ +--[[ + Everness. Never ending discovery in Everness mapgen. + Copyright (C) 2024 SaKeL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + +--]] + +local S = minetest.get_translator(minetest.get_current_modname()) + +local function register_vine_wall(name, def, overrides) + local _def = table.copy(def) + local _name = name + + _def.short_description = _def.short_description or _def.description + _def.drawtype = 'mesh' + _def.tiles = _def.tiles or { + { name = 'everness_' .. _name .. '.png' } + } + _def.inventory_image = 'everness_' .. _name .. '_item.png' + _def.wield_image = 'everness_' .. _name .. '_item.png' + _def.mesh = 'everness_vine_wall.obj' + _def.use_texture_alpha = 'clip' + _def.paramtype = 'light' + _def.paramtype2 = 'wallmounted' + _def.sunlight_propagates = true + _def.walkable = false + _def.climbable = true + _def.buildable_to = false + _def.sounds = Everness.node_sound_leaves_defaults() + _def.groups = { + -- MTG + vine = 1, + snappy = 3, + -- Everness + -- falling_vines = 1, + no_silktouch = 1, + -- X Farming + compost = 30, + -- MCL + handy = 1, + axey = 1, + shearsy = 1, + swordy = 1, + deco_block = 1, + dig_by_piston = 1, + destroy_by_lava_flow = 1, + compostability = 30, + fire_encouragement = 15, + fire_flammability = 100, + -- ALL + flammable = 2, + attached_node = 1, + } + _def._mcl_blast_resistance = 0.2 + _def._mcl_hardness = 0.2 + _def.selection_box = { + type = 'fixed', + fixed = { + -8 / 16, + -8 / 16, + -8 / 16, + 8 / 16, + -5 / 16, + 8 / 16 + } + } + _def.collision_box = { + type = 'fixed', + fixed = { + -8 / 16, + -8 / 16, + -8 / 16, + 8 / 16, + -5 / 16, + 8 / 16 + } + } + _def.waving = 3 + _def.light_source = _def.light_source or 4 + + _def.on_rotate = function() + return false + end + + Everness:register_node('everness:' .. _name, _def) +end + +-- Cave vine + +-- register_vine_wall('wall_vine_cave_green', { +-- description = S('Wall Cave Vine Green'), +-- }) + +register_vine_wall('wall_vine_cave_blue', { + description = S('Wall Cave Vine Blue'), +}) + +register_vine_wall('wall_vine_cave_cyan', { + description = S('Wall Cave Vine Cyan'), +}) + +register_vine_wall('wall_vine_cave_violet', { + description = S('Wall Cave Vine Violet'), +}) diff --git a/walls.lua b/walls.lua index 6fcde39..f303c6a 100644 --- a/walls.lua +++ b/walls.lua @@ -245,3 +245,58 @@ walls.register( 'everness:forsaken_desert_engraved_stone', Everness.node_sound_stone_defaults() ) + +-- Mineral Waters Under +walls.register( + 'everness:mineral_cave_stone_wall', + S('Mineral Cave Stone Wall'), + {{ + name = 'everness_mineral_stone_under.png', + align_style = 'world', + scale = 2 + }}, + 'everness:mineral_cave_stone', + Everness.node_sound_stone_defaults() +) + +walls.register( + 'everness:mineral_cave_cobblestone_wall', + S('Mineral Cave Cobblestone Wall'), + {{ + name = 'everness_mineral_cobblestone_under.png', + align_style = 'world', + scale = 2 + }}, + 'everness:mineral_cave_cobblestone', + Everness.node_sound_stone_defaults() +) + +walls.register( + 'everness:mineral_lava_stone_wall', + S('Mineral Lava Stone with lava Wall'), + {{ + name = 'everness_mineral_lava_stone_animated.png', + align_style = 'world', + scale = 2, + animation = { + type = 'vertical_frames', + aspect_w = 16, + aspect_h = 16, + length = 6.4, + }, + }}, + 'everness:mineral_lava_stone', + Everness.node_sound_stone_defaults() +) + +walls.register( + 'everness:mineral_lava_stone_dry_wall', + S('Mineral Lava Stone without lava Wall'), + {{ + name = 'everness_mineral_lava_stone_bottom.png', + align_style = 'world', + scale = 2 + }}, + 'everness:mineral_lava_stone_dry', + Everness.node_sound_stone_defaults() +)