From 22be60bdeb64539d64ee645c53a48dbb8e20422f Mon Sep 17 00:00:00 2001 From: FaceDeer Date: Sat, 4 Feb 2023 20:01:27 -0700 Subject: [PATCH] initial addition of bubblesponge --- bubblesponge/LICENSE.txt | 24 +++ bubblesponge/init.lua | 188 ++++++++++++++++++ bubblesponge/mod.conf | 4 + bubblesponge/settingtypes.txt | 3 + bubblesponge/sounds/bubblesponge_bubbles.ogg | Bin 0 -> 15191 bytes bubblesponge/sounds/license.txt | 1 + .../textures/bubblesponge_bubblesponge.png | Bin 0 -> 6384 bytes bubblesponge/textures/bubblesponge_bundle.png | Bin 0 -> 6501 bytes bubblesponge/textures/bubblesponge_frond.png | Bin 0 -> 6035 bytes bubblesponge/textures/bubblesponge_growth.png | Bin 0 -> 6411 bytes df_caverns/mod.conf | 2 +- df_caverns/node_ids.lua | 4 + df_caverns/shared.lua | 19 +- df_mapitems/doc.lua | 2 +- guide.md | 2 +- 15 files changed, 245 insertions(+), 4 deletions(-) create mode 100644 bubblesponge/LICENSE.txt create mode 100644 bubblesponge/init.lua create mode 100644 bubblesponge/mod.conf create mode 100644 bubblesponge/settingtypes.txt create mode 100644 bubblesponge/sounds/bubblesponge_bubbles.ogg create mode 100644 bubblesponge/sounds/license.txt create mode 100644 bubblesponge/textures/bubblesponge_bubblesponge.png create mode 100644 bubblesponge/textures/bubblesponge_bundle.png create mode 100644 bubblesponge/textures/bubblesponge_frond.png create mode 100644 bubblesponge/textures/bubblesponge_growth.png diff --git a/bubblesponge/LICENSE.txt b/bubblesponge/LICENSE.txt new file mode 100644 index 0000000..b7347c0 --- /dev/null +++ b/bubblesponge/LICENSE.txt @@ -0,0 +1,24 @@ +Sounds are under various licenses, see the license.txt file in the /sounds directory for details. + +License for Code and Textures +----------------------------- + +Copyright 2023 by FaceDeer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/bubblesponge/init.lua b/bubblesponge/init.lua new file mode 100644 index 0000000..1a6fb7a --- /dev/null +++ b/bubblesponge/init.lua @@ -0,0 +1,188 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +local print_settingtypes = false +local CONFIG_FILE_PREFIX = "bubblesponge_" +local config = {} + +bubblesponge = {} +bubblesponge.config = config + +local function setting(stype, name, default, description) + local value + if stype == "bool" then + value = minetest.settings:get_bool(CONFIG_FILE_PREFIX..name) + elseif stype == "string" then + value = minetest.settings:get(CONFIG_FILE_PREFIX..name) + elseif stype == "int" or stype == "float" then + value = tonumber(minetest.settings:get(CONFIG_FILE_PREFIX..name)) + end + if value == nil then + value = default + end + config[name] = value + + if print_settingtypes then + minetest.debug(CONFIG_FILE_PREFIX..name.." ("..description..") "..stype.." "..tostring(default)) + end +end + +setting("int", "uses", 30, "Number of uses for a bubblesponge") +setting("int", "growth_seconds", 1000, "Number of seconds between each growth check for bubblesponge stems") +setting("int", "y_max", -300, "Maximum altitude at which bubblesponge will grow") + +local function use_airtank(itemstack, user) + local breath = user:get_breath() + if breath > 9 then return itemstack end + breath = math.min(10, breath+5) + user:set_breath(breath) + minetest.sound_play("bubblesponge_bubbles", {pos = user:get_pos(), gain = 0.5}) + + --if not minetest.settings:get_bool("creative_mode") then + local wdef = itemstack:get_definition() + itemstack:add_wear(65535/(wdef._airtanks_uses-1)) + if itemstack:get_count() == 0 then + if wdef.sound and wdef.sound.breaks then + minetest.sound_play(wdef.sound.breaks, + {pos = user:get_pos(), gain = 0.5}) + end + end + --end + return itemstack +end + +minetest.register_tool("bubblesponge:tank", { + description = S("Bubblesponge Frond"), + _doc_items_longdesc = S("A frond harvested from a bubblesponge."), + _doc_items_usagehelp = S("If you're underwater and you're running out of breath, wield this item and use it to replenish 5 bubbles on your breath bar. When fully charged this frond has @1 uses before it becomes empty.", config.uses), + _airtanks_uses = config.uses, + inventory_image = "bubblesponge_frond.png", + wield_image = "bubblesponge_frond.png", + stack_max = 1, + groups = {bubblesponge_tank = 1}, + + on_place = function(itemstack, user, pointed_thing) + return use_airtank(itemstack, user) + end, + + on_use = function(itemstack, user, pointed_thing) + return use_airtank(itemstack, user) + end, +}) + +minetest.register_tool("bubblesponge:bundle", { + description = S("Bubblesponge Bundle"), + _doc_items_longdesc = S("A bundle of fronds harvested from a bubblesponge."), + _doc_items_usagehelp = S("If you're underwater and you're running out of breath, wield this item and use it to replenish 5 bubbles on your breath bar. When fully charged this frond has @1 uses before it becomes empty.", config.uses * 9), + _airtanks_uses = config.uses * 9, + inventory_image = "bubblesponge_bundle.png", + wield_image = "bubblesponge_bundle.png", + stack_max = 1, + groups = {bubblesponge_tank = 1}, + + on_place = function(itemstack, user, pointed_thing) + return use_airtank(itemstack, user) + end, + + on_use = function(itemstack, user, pointed_thing) + return use_airtank(itemstack, user) + end, +}) + +minetest.register_craft({ + recipe = { + {"bubblesponge:tank", "bubblesponge:tank", "bubblesponge:tank"}, + {"bubblesponge:tank", "bubblesponge:tank", "bubblesponge:tank"}, + {"bubblesponge:tank", "bubblesponge:tank", "bubblesponge:tank"}, + }, + output = "bubblesponge:bundle", +}) + +local water_node = df_dependencies.node_name_water_source + +minetest.register_node("bubblesponge:stem", { + description = S("Bubblesponge Trunk"), + _doc_items_longdesc = S("The trunk of a massive sponge. Bubblesponges grow deep underwater in caverns and their fronds have uniquely helpful properties for divers."), + _doc_items_usagehelp = S("If you're underwater and you're running out of breath you can squeeze a lungful of air from a wielded Bubblesponge frond"), + groups = {oddly_breakable_by_hand = 1, handy = 1}, + sounds = df_trees.node_sound_tree_soft_fungus_defaults(), + tiles = {"bubblesponge_bubblesponge.png"}, + use_texture_alpha = "clip", + drawtype = "normal", + paramtype = "light", + is_ground_content = false, + light_source = 6, + + on_timer = function(pos, elapsed) + local timer = minetest.get_node_timer(pos) + elapsed = elapsed - config.growth_seconds + timer:set(config.growth_seconds, elapsed) + + if pos.y > config.y_max then + return + end + + pos.y = pos.y + 1 + + if minetest.find_node_near(pos, 4, "air", true) then + return + end + + local tries = 0 + while tries < 3 do + local this_node = minetest.get_node(pos).name + if minetest.get_node(pos).name == water_node then + minetest.set_node(pos, {name = "bubblesponge:frond"}) + return + else + pos = {x = pos.x + math.random(-1, 1), y = pos.y + math.random(0, 1), z = pos.z + math.random(-1, 1)} + tries = tries + 1 + end + end + end, + + on_construct = function(pos) + minetest.get_node_timer(pos):start(config.growth_seconds + math.random(-0.1, 0.1)*config.growth_seconds) + --minetest.get_node_timer(pos):set(1, config.growth_seconds * 6) -- immediate growth + end, + on_destruct = function(pos) + minetest.get_node_timer(pos):stop() + end, +}) + +minetest.register_node("bubblesponge:frond", { + description = S("Bubblesponge Frond"), + drawtype = "plantlike", + visual_scale = 1.2, + tiles = {"bubblesponge_growth.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + groups = {snappy=3, oddly_breakable_by_hand = 1, handy = 1, not_in_creatove_inventory=1}, + sounds = default.node_sound_leaves_defaults(), + drop = "bubblesponge:tank", +}) + +local function use_any_airtank_in_hotbar(player) + local inv = player:get_inventory() + local hotbar = player:hud_get_hotbar_itemcount() + for i=1, hotbar do + local itemstack = inv:get_stack("main", i) + if minetest.get_item_group(itemstack:get_name(), "bubblesponge_tank") >= 1 then + itemstack = use_airtank(itemstack, player) + inv:set_stack("main", i, itemstack) + return true + end + end + return false +end + +local function player_event_handler(player, eventname) + if player:is_player() and eventname == "breath_changed" and player:get_breath() < 2 then + use_any_airtank_in_hotbar(player) + end + + return false +end + +minetest.register_playerevent(player_event_handler) diff --git a/bubblesponge/mod.conf b/bubblesponge/mod.conf new file mode 100644 index 0000000..b62d4a6 --- /dev/null +++ b/bubblesponge/mod.conf @@ -0,0 +1,4 @@ +name = bubblesponge +description = A species of sponge that, when harvested, provides a limited air supply for underwater travel +depends = df_dependencies, df_trees +optional_depends = doc \ No newline at end of file diff --git a/bubblesponge/settingtypes.txt b/bubblesponge/settingtypes.txt new file mode 100644 index 0000000..bb0bb17 --- /dev/null +++ b/bubblesponge/settingtypes.txt @@ -0,0 +1,3 @@ +bubblesponge_uses (Number of uses provided by a bubblesponge) int 30 2 1000 +bubblesponge_growth_seconds (Number of seconds between each bubblesponge stem growing a new frond) int 1000 1 100000 +bubblesponge_y_max (Maximum altitude at which bubblesponge will grow) int -300 \ No newline at end of file diff --git a/bubblesponge/sounds/bubblesponge_bubbles.ogg b/bubblesponge/sounds/bubblesponge_bubbles.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f35c85f92ded4c5ed32ecf56f64ab4dc2bd47290 GIT binary patch literal 15191 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 literal 0 HcmV?d00001 diff --git a/bubblesponge/sounds/license.txt b/bubblesponge/sounds/license.txt new file mode 100644 index 0000000..e089e06 --- /dev/null +++ b/bubblesponge/sounds/license.txt @@ -0,0 +1 @@ +bubblesponge_bubbles is from https://freesound.org/people/murraysortz/sounds/192501/ by Murraysortz under the CC-BY-3.0 license \ No newline at end of file diff --git a/bubblesponge/textures/bubblesponge_bubblesponge.png b/bubblesponge/textures/bubblesponge_bubblesponge.png new file mode 100644 index 0000000000000000000000000000000000000000..164c845cf945f66d475017507406255f269934bd GIT binary patch literal 6384 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 literal 0 HcmV?d00001 diff --git a/bubblesponge/textures/bubblesponge_bundle.png b/bubblesponge/textures/bubblesponge_bundle.png new file mode 100644 index 0000000000000000000000000000000000000000..de2680ad84804c57c3a209d5efc99e3d2c27ce10 GIT binary patch literal 6501 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 literal 0 HcmV?d00001 diff --git a/bubblesponge/textures/bubblesponge_frond.png b/bubblesponge/textures/bubblesponge_frond.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f699428dd6c3d03cb7c9a9a1471bbd7cec5947 GIT binary patch literal 6035 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 Ny|uGdmBlY{{{wp3GyDJm literal 0 HcmV?d00001 diff --git a/df_caverns/mod.conf b/df_caverns/mod.conf index e2e9db8..4a9ab59 100644 --- a/df_caverns/mod.conf +++ b/df_caverns/mod.conf @@ -1,4 +1,4 @@ name = df_caverns description = Adds vast underground caverns in the style of Dwarf Fortress, complete with underground flora in diverse biomes. Also adds stalactite/stalagmite decorations in the smaller tunnels. depends = df_dependencies, subterrane, df_trees, df_mapitems, -optional_depends = df_farming, ice_sprites, oil, df_underworld_items, magma_conduits, bones_loot, named_waypoints, name_generator, fireflies, chasms, big_webs, mcl_flowers, mine_gas \ No newline at end of file +optional_depends = df_farming, ice_sprites, oil, df_underworld_items, magma_conduits, bones_loot, named_waypoints, name_generator, fireflies, chasms, big_webs, mcl_flowers, mine_gas, bubblesponge \ No newline at end of file diff --git a/df_caverns/node_ids.lua b/df_caverns/node_ids.lua index 0b003cd..a04b234 100644 --- a/df_caverns/node_ids.lua +++ b/df_caverns/node_ids.lua @@ -35,6 +35,10 @@ if minetest.get_modpath("df_farming") then df_caverns.node_id.dead_fungus = minetest.get_content_id("df_farming:dead_fungus") end +if minetest.get_modpath("bubblesponge") then + df_caverns.node_id.bubblesponge = minetest.get_content_id("bubblesponge:stem") +end + df_caverns.node_id.air = minetest.get_content_id("air") df_caverns.node_id.cobble_fungus = minetest.get_content_id("df_mapitems:cobble_with_floor_fungus") diff --git a/df_caverns/shared.lua b/df_caverns/shared.lua index ffdf1e1..7cefaad 100644 --- a/df_caverns/shared.lua +++ b/df_caverns/shared.lua @@ -20,9 +20,15 @@ local c_water = df_caverns.node_id.water local c_wet_flowstone = df_caverns.node_id.wet_flowstone local c_webs = df_caverns.node_id.big_webs local c_webs_egg = df_caverns.node_id.big_webs_egg +local c_bubblesponge = df_caverns.node_id.bubblesponge df_caverns.data_param2 = {} -- shared among all mapgens to reduce memory clutter +local log_location +if mapgen_helper.log_location_enabled then + log_location = mapgen_helper.log_first_location +end + local get_biome_at_pos_list = {} -- a list of methods of the form function(pos, heat, humidity) to allow modpack-wide queries about what should grow where df_caverns.register_biome_check = function(func) table.insert(get_biome_at_pos_list, func) @@ -114,7 +120,17 @@ df_caverns.flooded_cavern_floor = function(abs_cracks, vert_rand, vi, area, data if abs_cracks < 0.25 then data[vi] = c_mossycobble elseif data[vi-ystride] ~= c_water then - data[vi] = c_sand_scum + + if c_bubblesponge and abs_cracks > 0.5 and math.random() < 0.01 then + local vi_above = vi + ystride + if data[vi_above] == c_water then + data[vi] = c_bubblesponge + minetest.get_node_timer(area:position(vi)):set(1, bubblesponge.config.growth_seconds * 6) -- immediate growth + if log_location then log_location("flooded_bubblesponge", area:position(vi_above)) end + end + else + data[vi] = c_sand_scum + end end -- put in only the large stalagmites that won't get in the way of the water @@ -123,6 +139,7 @@ df_caverns.flooded_cavern_floor = function(abs_cracks, vert_rand, vi, area, data subterrane.big_stalagmite(vi+ystride, area, data, 6, 15, c_wet_flowstone, c_wet_flowstone, c_wet_flowstone) end end + end df_caverns.dry_cavern_floor = function(abs_cracks, vert_rand, vi, area, data, data_param2) diff --git a/df_mapitems/doc.lua b/df_mapitems/doc.lua index 359e090..d184543 100644 --- a/df_mapitems/doc.lua +++ b/df_mapitems/doc.lua @@ -36,7 +36,7 @@ df_mapitems.doc.glow_worms_usage = S("Glow worms can be harvested and used as a df_mapitems.doc.snareweed_desc = S("A nasty kelp-like plant that grows in patches on the floor of the Sunless Sea. Its reflective patches draw in the unwary and then its prickly barbs catch and hold small creatures.") df_mapitems.doc.snareweed_usage = S("Snareweed has no practical use, its fibers disintegrate when they dry.") -df_mapitems.doc.cave_coral_desc = S("A rare form of coral found only deep underground in the Sunless Sea, cave coral grows hanging from the ceilings of flooded caverns.") +df_mapitems.doc.cave_coral_desc = S("A rare form of coral found only deep underground in the Sunless Sea, cave coral grows where dripstone dips into the water to deliver the minerals needed for its skeletal structure.") df_mapitems.doc.cave_coral_usage = S("Aside from their aesthetic beauty, cave corals can be harvested for simple building materials.") df_mapitems.doc.flowstone_desc = S("Flowstone is a carbonate-rich rock formation deposited by flowing water. It consists of minerals that the water dissolved earlier as it widens cracks and fissures into caves.") diff --git a/guide.md b/guide.md index 2ad4036..4addf74 100644 --- a/guide.md +++ b/guide.md @@ -188,7 +188,7 @@ The distinguishing feature of the Sunless Sea is the vast expanse of water to be Below the surface of the water Snareweed can be found, a dangerous kelp-like growth that uses bioluminescence and reflective patches to lure cave fish close enough to snag with their barbs. Swimming through Snareweed is a painful experience. Deeper down are craggy towers of softly glowing Cave Coral. -This is the last stop for the living world. Caverns continue to stretch below but nothing grows below. +This is the last stop for the living world. Caverns continue to stretch downward but nothing grows below. # Lakes of Oil