diff --git a/bones_loot/LICENSE.txt b/bones_loot/LICENSE.txt new file mode 100644 index 0000000..26663a0 --- /dev/null +++ b/bones_loot/LICENSE.txt @@ -0,0 +1,22 @@ +License for Code +---------------- + +Copyright (C) 2019 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/bones_loot/depends.txt b/bones_loot/depends.txt new file mode 100644 index 0000000..ef795e4 --- /dev/null +++ b/bones_loot/depends.txt @@ -0,0 +1,3 @@ +bones +dungeon_loot? +intllib? \ No newline at end of file diff --git a/bones_loot/init.lua b/bones_loot/init.lua new file mode 100644 index 0000000..4f7d08b --- /dev/null +++ b/bones_loot/init.lua @@ -0,0 +1,125 @@ +-- internationalization boilerplate +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +local dungeon_loot_path = minetest.get_modpath("dungeon_loot") + +bones_loot = {} + +local local_loot = {} +local local_loot_register = function(t) + if t.name ~= nil then + t = {t} -- single entry + end + for _, loot in ipairs(t) do + table.insert(local_loot, loot) + end +end + +-- we could do this for the dungeon_loot registered loot table as well, +-- but best not to meddle in other mods' internals if it can be helped. +local clean_up_local_loot = function() + if local_loot == nil then return end + for i = #local_loot, 1, -1 do + if not minetest.registered_items[local_loot[i].name] then + table.remove(local_loot, i) + end + end +end + +-- Uses same table format as dungeon_loot +-- eg, {name = "bucket:bucket_water", chance = 0.45, types = {"sandstone", "desert"}}, +-- if dungeon_loot is installed it uses dungeon_loot's registration function directly. +if dungeon_loot_path then + bones_loot.register_loot = dungeon_loot.register +else + bones_loot.register_loot = local_loot_register + minetest.after(0, clean_up_local_loot) +end + +local get_loot_list = function(pos, loot_type, exclusive_loot_type) + local loot_table + if dungeon_loot_path then + loot_table = dungeon_loot.registered_loot + else + loot_table = local_loot + end + + local item_list = {} + local pos_y = pos.y + for _, loot in ipairs(loot_table) do + if loot.y == nil or (pos_y >= loot.y[1] and pos_y <= loot.y[2]) then + if (not exclusive_loot_type and loot.types == nil) or + (loot.types and table.indexof(loot.types, loot_type) ~= -1) then + table.insert(item_list, loot) + end + end + end + + return item_list +end + +local shuffle = function(tbl) + for i = #tbl, 2, -1 do + local rand = math.random(i) + tbl[i], tbl[rand] = tbl[rand], tbl[i] + end + return tbl +end + +-- "exclusive" set to true means that loot table entries without a loot_type won't be considered. +bones_loot.get_loot = function(pos, loot_type, max_stacks, exclusive_loot_type) + local item_list = get_loot_list(pos, loot_type, exclusive_loot_type) + shuffle(item_list) + + -- apply chances / randomized amounts and collect resulting items + local items = {} + for _, loot in ipairs(item_list) do + if math.random() <= loot.chance then + local itemdef = minetest.registered_items[loot.name] + if itemdef then + local amount = 1 + if loot.count ~= nil then + amount = math.random(loot.count[1], loot.count[2]) + end + + if itemdef.tool_capabilities then + for n = 1, amount do + local wear = math.random(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear + table.insert(items, ItemStack({name = loot.name, wear = wear})) + max_stacks = max_stacks - 1 + if max_stacks <= 0 then break end + end + else + local stack_max = itemdef.stack_max + while amount > 0 do + table.insert(items, ItemStack({name = loot.name, count = math.min(stack_max, amount)})) + amount = amount - stack_max + max_stacks = max_stacks - 1 + if max_stacks <= 0 then break end + end + end + end + end + if max_stacks <= 0 then break end + end + return items +end + +bones_loot.place_bones = function(pos, loot_type, max_stacks, infotext, exclusive_loot_type) + minetest.set_node(pos, {name="bones:bones", param2 = math.random(1,4)-1}) + local meta = minetest.get_meta(pos) + if infotext == nil then + infotext = S("Someone's old bones") + end + meta:set_string("infotext", infotext) + + if max_stacks and max_stacks > 0 then + local loot = bones_loot.get_loot(pos, loot_type, max_stacks, exclusive_loot_type) + local inv = meta:get_inventory() + inv:set_size("main", 8 * 4) + for _, item in ipairs(loot) do + inv:add_item("main", item) + end + end +end diff --git a/bones_loot/intllib.lua b/bones_loot/intllib.lua new file mode 100644 index 0000000..6669d72 --- /dev/null +++ b/bones_loot/intllib.lua @@ -0,0 +1,45 @@ + +-- Fallback functions for when `intllib` is not installed. +-- Code released under Unlicense . + +-- Get the latest version of this file at: +-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua + +local function format(str, ...) + local args = { ... } + local function repl(escape, open, num, close) + if escape == "" then + local replacement = tostring(args[tonumber(num)]) + if open == "" then + replacement = replacement..close + end + return replacement + else + return "@"..open..num..close + end + end + return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) +end + +local gettext, ngettext +if minetest.get_modpath("intllib") then + if intllib.make_gettext_pair then + -- New method using gettext. + gettext, ngettext = intllib.make_gettext_pair() + else + -- Old method using text files. + gettext = intllib.Getter() + end +end + +-- Fill in missing functions. + +gettext = gettext or function(msgid, ...) + return format(msgid, ...) +end + +ngettext = ngettext or function(msgid, msgid_plural, n, ...) + return format(n==1 and msgid or msgid_plural, ...) +end + +return gettext, ngettext diff --git a/bones_loot/locale/template.pot b/bones_loot/locale/template.pot new file mode 100644 index 0000000..376e93f --- /dev/null +++ b/bones_loot/locale/template.pot @@ -0,0 +1,22 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-08-07 00:58-0600\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: bones_loot\init.lua:65 +msgid "Someone's old bones" +msgstr "" diff --git a/bones_loot/locale/update.bat b/bones_loot/locale/update.bat new file mode 100644 index 0000000..48b25ab --- /dev/null +++ b/bones_loot/locale/update.bat @@ -0,0 +1,6 @@ +@echo off +setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION +cd .. +set LIST= +for /r %%X in (*.lua) do set LIST=!LIST! %%X +..\..\intllib\tools\xgettext.bat %LIST% \ No newline at end of file diff --git a/bones_loot/mod.conf b/bones_loot/mod.conf new file mode 100644 index 0000000..a5497d0 --- /dev/null +++ b/bones_loot/mod.conf @@ -0,0 +1,4 @@ +name = bones_loot +description = An API that allows bones to be placed procedurally with randomly generated loot +depends = bones +optional_depends = dungeon_loot, intllib \ No newline at end of file diff --git a/df_caverns/depends.txt b/df_caverns/depends.txt index be228ff..575eaae 100644 --- a/df_caverns/depends.txt +++ b/df_caverns/depends.txt @@ -6,4 +6,5 @@ df_mapitems ice_sprites? oil? df_underworld_items? -magma_conduits? \ No newline at end of file +magma_conduits? +bones_loot? \ No newline at end of file diff --git a/df_caverns/dungeon_loot.lua b/df_caverns/dungeon_loot.lua new file mode 100644 index 0000000..b919ddd --- /dev/null +++ b/df_caverns/dungeon_loot.lua @@ -0,0 +1,111 @@ +if minetest.get_modpath("dungeon_loot") then + +if df_caverns.config.enable_underworld then + dungeon_loot.register({ + {name = "df_underworld_items:glow_amethyst", chance = 0.3, count = {1, 12}, y = {-32768, df_caverns.config.lava_sea_level}}, + }) +end + +if df_caverns.config.enable_oil_sea and minetest.get_modpath("bucket") then + dungeon_loot.register({ + {name = "oil:oil_bucket", chance = 0.5, count = {1, 3}, y = {-32768, df_caverns.config.ymax}}, + }) +end + +if df_caverns.config.enable_lava_sea then + dungeon_loot.register({ + {name = "df_mapitems:mese_crystal", chance = 0.25, count = {1, 5}, y = {-32768, df_caverns.config.sunless_sea_min}}, + {name = "df_mapitems:glow_mese", chance = 0.1, count = {1, 3}, y = {-32768, df_caverns.config.sunless_sea_min}}, + }) +end + +dungeon_loot.register({ + {name = "df_farming:cave_wheat_seed", chance = 0.5, count = {1, 10}, y = {-32768, df_caverns.config.ymax}}, + {name = "df_farming:cave_bread", chance = 0.8, count = {1, 10}, y = {-32768, df_caverns.config.ymax}}, + {name = "df_farming:pig_tail_thread", chance = 0.7, count = {1, 10}, y = {-32768, df_caverns.config.ymax}}, + {name = "df_farming:plump_helmet_spawn", chance = 0.4, count = {1, 8}, y = {-32768, df_caverns.config.ymax}}, + {name = "df_farming:plump_helmet_4_picked", chance = 0.8, count = {1, 15}, y = {-32768, df_caverns.config.ymax}}, + {name = "df_trees:glowing_bottle_red", chance = 0.6, count = {1, 20}, y = {-32768, df_caverns.config.ymax}}, + {name = "df_trees:glowing_bottle_green", chance = 0.5, count = {1, 20}, y = {-32768, df_caverns.config.ymax}}, + {name = "df_trees:glowing_bottle_cyan", chance = 0.4, count = {1, 15}, y = {-32768, df_caverns.config.ymax}}, + {name = "df_trees:glowing_bottle_golden", chance = 0.3, count = {1, 5}, y = {-32768, df_caverns.config.ymax}}, + + {name = "df_farming:pig_tail_seed", chance = 0.5, count = {1, 10}, y = {-32768, df_caverns.config.level1_min}}, + {name = "df_mapitems:med_crystal", chance = 0.2, count = {1, 2}, y = {-32768, df_caverns.config.level1_min}}, + + {name = "df_farming:dimple_cup_seed", chance = 0.3, count = {1, 10}, y = {-32768, df_caverns.config.level2_min}}, + {name = "df_farming:quarry_bush_seed", chance = 0.3, count = {1, 5}, y = {-32768, df_caverns.config.level2_min}}, + {name = "df_farming:sweet_pod_seed", chance = 0.3, count = {1, 5}, y = {-32768, df_caverns.config.level2_min}}, + {name = "df_mapitems:big_crystal", chance = 0.1, count = {1, 1}, y = {-32768, df_caverns.config.level2_min}}, + {name = "df_trees:torchspine_ember", chance = 0.3, count = {1, 3}, y = {-32768, df_caverns.config.level2_min}}, + {name = "ice_sprites:ice_sprite_bottle", chance = 0.1, count = {1, 1}, y = {-32768, df_caverns.config.level2_min}}, +}) + +end + +if minetest.get_modpath("bones_loot") and df_caverns.config.enable_underworld then + +bones_loot.register_loot({ + {name = "binoculars:binoculars", chance = 0.05, count = {1,1}, types = {"underworld_warrior"}}, + {name = "boats:boat", chance = 0.05, count = {1,1}, types = {"underworld_warrior"}}, + {name = "bucket:bucket_empty", chance = 0.3, count = {1,1}, types = {"underworld_warrior"}}, + {name = "fire:flint_and_steel", chance = 0.3, count = {1,2}, types = {"underworld_warrior"}}, + {name = "flowers:tulip_black", chance = 0.01, count = {1,1}, types = {"underworld_warrior"}}, + {name = "map:mapping_kit", chance = 0.1, count = {1,1}, types = {"underworld_warrior"}}, + {name = "screwdriver:screwdriver", chance = 0.05, count = {1,1}, types = {"underworld_warrior"}}, + -- don't give the player tnt:tnt, they can craft that from this if tnt is enabled for them + {name = "tnt:gunpowder", chance = 0.4, count = {1,10}, types = {"underworld_warrior"}}, + {name = "tnt:tnt_stick", chance = 0.3, count = {1,6}, types = {"underworld_warrior"}}, + + {name = "vessels:steel_bottle", chance = 0.4, count = {1,3}, types = {"underworld_warrior"}}, + {name = "vessels:glass_bottle", chance = 0.2, count = {1,2}, types = {"underworld_warrior"}}, + {name = "vessels:glass_fragments", chance = 0.1, count = {1,4}, types = {"underworld_warrior"}}, + + {name = "default:book", chance = 0.05, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:paper", chance = 0.1, count = {1,6}, types = {"underworld_warrior"}}, + {name = "default:skeleton_key", chance = 0.05, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:torch", chance = 0.75, count = {1,10}, types = {"underworld_warrior"}}, + + {name = "default:pick_bronze", chance = 0.15, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:pick_steel", chance = 0.1, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:pick_mese", chance = 0.05, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:pick_diamond", chance = 0.05, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:shovel_bronze", chance = 0.15, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:shovel_steel", chance = 0.1, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:shovel_mese", chance = 0.05, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:shovel_diamond", chance = 0.05, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:axe_bronze", chance = 0.3, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:axe_steel", chance = 0.5, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:axe_mese", chance = 0.15, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:axe_diamond", chance = 0.15, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:sword_bronze", chance = 0.5, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:sword_steel", chance = 0.75, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:sword_mese", chance = 0.35, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:sword_diamond", chance = 0.35, count = {1,1}, types = {"underworld_warrior"}}, + + {name = "default:coal_lump", chance = 0.5, count = {1,5}, types = {"underworld_warrior"}}, + {name = "default:mese_crystal", chance = 0.1, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:diamond", chance = 0.1, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:steel_ingot", chance = 0.2, count = {1,3}, types = {"underworld_warrior"}}, + {name = "default:copper_ingot", chance = 0.1, count = {1,2}, types = {"underworld_warrior"}}, + {name = "default:bronze_ingot", chance = 0.2, count = {1,5}, types = {"underworld_warrior"}}, + {name = "default:gold_ingot", chance = 0.3, count = {1,3}, types = {"underworld_warrior"}}, + {name = "default:mese_crystal_fragment", chance = 0.4, count = {1,5}, types = {"underworld_warrior"}}, + {name = "default:obsidian_shard", chance = 0.4, count = {1,3}, types = {"underworld_warrior"}}, + {name = "default:flint", chance = 0.3, count = {1,1}, types = {"underworld_warrior"}}, + {name = "default:sign_wall_wood", chance = 0.1, count = {1,4}, types = {"underworld_warrior"}}, + {name = "default:sign_wall_steel", chance = 0.1, count = {1,2}, types = {"underworld_warrior"}}, + {name = "default:ladder_wood", chance = 0.5, count = {1,10}, types = {"underworld_warrior"}}, + {name = "default:ladder_steel", chance = 0.2, count = {1,5}, types = {"underworld_warrior"}}, + {name = "default:meselamp", chance = 0.1, count = {1,2}, types = {"underworld_warrior"}}, + {name = "default:mese_post_light", chance = 0.25, count = {1,5}, types = {"underworld_warrior"}}, + + {name = "ice_sprites:ice_sprite_bottle", chance = 0.025, count = {1, 1}, types = {"underworld_warrior"}}, + {name = "df_underworld_items:glow_amethyst", chance = 0.25, count = {1, 2}, types = {"underworld_warrior"}}, +}) + +if df_caverns.config.enable_lava_sea then + bones_loot.register_loot({name = "df_mapitems:mese_crystal", chance = 0.25, count = {1, 2}, types = {"underworld_warrior"}}) +end + +end \ No newline at end of file diff --git a/df_caverns/init.lua b/df_caverns/init.lua index f369ac4..06b68d7 100644 --- a/df_caverns/init.lua +++ b/df_caverns/init.lua @@ -15,3 +15,4 @@ dofile(modpath.."/sunless_sea.lua") dofile(modpath.."/oil_sea.lua") dofile(modpath.."/lava_sea.lua") dofile(modpath.."/underworld.lua") +dofile(modpath.."/dungeon_loot.lua") \ No newline at end of file diff --git a/df_caverns/level1.lua b/df_caverns/level1.lua index 2342e6f..8623b04 100644 --- a/df_caverns/level1.lua +++ b/df_caverns/level1.lua @@ -6,6 +6,8 @@ local c_dirt_moss = minetest.get_content_id("df_mapitems:dirt_with_cave_moss") local c_wet_flowstone = minetest.get_content_id("df_mapitems:wet_flowstone") local c_dry_flowstone = minetest.get_content_id("df_mapitems:dry_flowstone") +local c_spindlestem_white = minetest.get_content_id("df_trees:spindlestem_cap_white") + local tower_cap_shrublist local fungiwood_shrublist @@ -51,8 +53,12 @@ local tower_cap_cavern_floor = function(abs_cracks, vert_rand, vi, area, data, d if math.random() < 0.1 then df_caverns.place_shrub(vi+ystride, area, data, data_param2, tower_cap_shrublist) - elseif math.random() < 0.01 and abs_cracks > 0.25 then - df_trees.spawn_tower_cap_vm(vi+ystride, area, data) + elseif abs_cracks > 0.25 then + if math.random() < 0.01 then + df_trees.spawn_tower_cap_vm(vi+ystride, area, data) + elseif math.random() < 0.04 then + df_trees.spawn_spindlestem_vm(vi+ystride, area, data, data_param2, c_spindlestem_white) + end end end end @@ -71,6 +77,8 @@ local fungiwood_cavern_floor = function(abs_cracks, vert_rand, vi, area, data, d df_caverns.place_shrub(vi+ystride, area, data, data_param2, fungiwood_shrublist) elseif math.random() < 0.03 and abs_cracks > 0.35 then df_trees.spawn_fungiwood_vm(vi+ystride, area, data) + elseif math.random() < 0.04 then + df_trees.spawn_spindlestem_vm(vi+ystride, area, data, data_param2) end end end @@ -203,6 +211,7 @@ local decorate_level_1 = function(minp, maxp, seed, vm, node_arrays, area, data) local index2d = mapgen_helper.index2di(minp, maxp, area, vi) local biome_name = get_biome(heatmap[index2d], humiditymap[index2d]) local flooded_caverns = nvals_cave[cave_area:transform(area, vi)] < 0 -- this indicates if we're in the "flooded" set of caves or not. + local ystride = area.ystride if not (flooded_caverns and minp.y < subsea_level and area:get_y(vi) < subsea_level) then if flooded_caverns or biome_name ~= "barren" then @@ -211,6 +220,26 @@ local decorate_level_1 = function(minp, maxp, seed, vm, node_arrays, area, data) else df_caverns.tunnel_floor(minp, maxp, area, vi, nvals_cracks, data, data_param2, false) end + + if biome_name ~= "barren" then + local cracks = nvals_cracks[index2d] + if cracks > 0.25 then + local rand = math.random() + if rand > cracks then + if math.random() < 0.25 then + data[vi] = c_dirt_moss + else + data[vi] = c_dirt + end + if data[vi+ystride] == c_air and math.random() < 0.25 then + df_caverns.place_shrub(vi+ystride, area, data, data_param2, tower_cap_shrublist) + end + end + if rand > cracks*2 then + df_trees.spawn_spindlestem_vm(vi+ystride, area, data, data_param2) + end + end + end end end diff --git a/df_caverns/level2.lua b/df_caverns/level2.lua index 555ed71..6ae6497 100644 --- a/df_caverns/level2.lua +++ b/df_caverns/level2.lua @@ -18,6 +18,8 @@ local wall_vein_perlin_params = { flags = "eased", } +local c_pearls = minetest.get_content_id("df_mapitems:cave_pearls") + local subsea_level = df_caverns.config.level2_min - (df_caverns.config.level2_min - df_caverns.config.level1_min) * 0.33 -- "sea level" for the flooded caverns. local flooding_threshold = math.min(df_caverns.config.tunnel_flooding_threshold, df_caverns.config.cavern_threshold) -- cavern value out to which we're flooding tunnels and warrens @@ -60,6 +62,8 @@ if minetest.get_modpath("df_farming") then } end +local c_red = minetest.get_content_id("df_trees:spindlestem_cap_red") + local goblin_cap_cavern_floor = function(abs_cracks, vert_rand, vi, area, data, data_param2) local ystride = area.ystride if abs_cracks < 0.1 then @@ -72,6 +76,8 @@ local goblin_cap_cavern_floor = function(abs_cracks, vert_rand, vi, area, data, end if math.random() < 0.1 then df_caverns.place_shrub(vi+ystride, area, data, data_param2, goblin_cap_shrublist) + elseif math.random() < 0.02 then + df_trees.spawn_spindlestem_vm(vi+ystride, area, data, data_param2, c_red) elseif math.random() < 0.015 then df_trees.spawn_goblin_cap_vm(vi+ystride, area, data) end @@ -243,21 +249,32 @@ local decorate_level_2 = function(minp, maxp, seed, vm, node_arrays, area, data) local index2d = mapgen_helper.index2di(minp, maxp, area, vi) local biome_name = get_biome(heatmap[index2d], humiditymap[index2d]) local flooded_caverns = nvals_cave[cave_area:transform(area, vi)] < 0 -- this indicates if we're in the "flooded" set of caves or not. + local ystride = area.ystride if not (flooded_caverns and minp.y < subsea_level and area:get_y(vi) < subsea_level) then - if flooded_caverns or biome_name ~= "barren" then + if flooded_caverns or biome_name ~= "barren" then -- we're in flooded areas or are not barren df_caverns.tunnel_ceiling(minp, maxp, area, vi, nvals_cracks, data, data_param2, true) else df_caverns.tunnel_ceiling(minp, maxp, area, vi, nvals_cracks, data, data_param2, false) end + if not flooded_caverns and (biome_name == "barren" or biome_name == "sporetree") and nvals_cracks[index2d] > 0.5 then + for i= 1, 4 do + if math.random() > 0.5 then + local index = vi-i*ystride + if data[index] == c_air then + df_mapitems.place_against_surface_vm(c_pearls, index, area, data, data_param2) + end + end + end + end else -- air pockets local ystride = area.ystride local cracks = nvals_cracks[index2d] - if cracks > 0.5 and data[vi-ystride] == c_water then + if cracks > 0.4 and data[vi-ystride] == c_water then data[vi-ystride] = c_air - if cracks > 0.7 and data[vi-ystride*2] == c_water then + if cracks > 0.6 and data[vi-ystride*2] == c_water then data[vi-ystride*2] = c_air end end @@ -289,6 +306,7 @@ local decorate_level_2 = function(minp, maxp, seed, vm, node_arrays, area, data) local index2d = mapgen_helper.index2di(minp, maxp, area, vi) local biome_name = get_biome(heatmap[index2d], humiditymap[index2d]) local flooded_caverns = nvals_cave[cave_area:transform(area, vi)] < 0 -- this indicates if we're in the "flooded" set of caves or not. + local ystride = area.ystride if not (flooded_caverns and minp.y < subsea_level and area:get_y(vi) < subsea_level) then if flooded_caverns or biome_name ~= "barren" then @@ -297,8 +315,28 @@ local decorate_level_2 = function(minp, maxp, seed, vm, node_arrays, area, data) else df_caverns.tunnel_ceiling(minp, maxp, area, vi, nvals_cracks, data, data_param2, false) end + + if not flooded_caverns and (biome_name == "barren" or biome_name == "sporetree") and nvals_cracks[index2d] > 0.5 then + for i= 1, 4 do + if math.random() > 0.5 then + local index = vi-i*ystride + if data[index] == c_air then + df_mapitems.place_against_surface_vm(c_pearls, index, area, data, data_param2) + end + end + end + end + else + -- air pockets + local cracks = nvals_cracks[index2d] + if cracks > 0.4 and data[vi-ystride] == c_water then + data[vi-ystride] = c_air + if cracks > 0.6 and data[vi-ystride*2] == c_water then + data[vi-ystride*2] = c_air + end + end end - -- else air pockets? + end ---------------------------------------------- diff --git a/df_caverns/level3.lua b/df_caverns/level3.lua index 02a7074..e402d3b 100644 --- a/df_caverns/level3.lua +++ b/df_caverns/level3.lua @@ -20,6 +20,9 @@ local c_dry_flowstone = minetest.get_content_id("df_mapitems:dry_flowstone") local c_glow_ore = minetest.get_content_id("df_mapitems:glow_ruby_ore") +local c_salty_cobble = minetest.get_content_id("df_mapitems:salty_cobble") +local c_salt_crystal = minetest.get_content_id("df_mapitems:salt_crystal") + local c_sprite if minetest.get_modpath("ice_sprites") then c_sprite = minetest.get_content_id("ice_sprites:ice_sprite") @@ -157,20 +160,28 @@ local nether_cap_cavern_ceiling = function(abs_cracks, vert_rand, vi, area, data end local blood_thorn_cavern_floor = function(abs_cracks, vert_rand, vi, area, data, data_param2) + local ai = vi+area.ystride + if abs_cracks < 0.075 then if vert_rand < 0.004 then - subterrane.big_stalagmite(vi+area.ystride, area, data, 6, 15, c_dry_flowstone, c_dry_flowstone, c_dry_flowstone) + subterrane.big_stalagmite(ai, area, data, 6, 15, c_dry_flowstone, c_dry_flowstone, c_dry_flowstone) + elseif data[vi] ~= air and math.random() < 0.5 then + data[vi] = c_salty_cobble + if data[ai] == c_air and math.random() < 0.25 then + data[ai] = c_salt_crystal + data_param2[ai] = math.random(1,4)-1 + end else local param2 = abs_cracks*1000000 - math.floor(abs_cracks*1000000/4)*4 local height = math.floor(abs_cracks * 66) - subterrane.stalagmite(vi+area.ystride, area, data, data_param2, param2, height, df_mapitems.dry_stalagmite_ids) + subterrane.stalagmite(ai, area, data, data_param2, param2, height, df_mapitems.dry_stalagmite_ids) end elseif math.random() > abs_cracks + 0.66 then - df_trees.spawn_blood_thorn_vm(vi+area.ystride, area, data, data_param2) + df_trees.spawn_blood_thorn_vm(ai, area, data, data_param2) data[vi] = c_desert_sand else if math.random() < 0.1 then - df_caverns.place_shrub(vi+area.ystride, area, data, data_param2, blood_thorn_shrublist) + df_caverns.place_shrub(ai, area, data, data_param2, blood_thorn_shrublist) data[vi] = c_desert_sand elseif math.random() > 0.25 then data[vi] = c_desert_sand @@ -310,7 +321,16 @@ local decorate_level_3 = function(minp, maxp, seed, vm, node_arrays, area, data) else -- bloodthorn ceiling if abs_cracks < 0.075 then - df_caverns.stalactites(abs_cracks, vert_rand, vi, area, data, data_param2, false) + if data[vi] ~= air and math.random() < 0.5 then + data[vi] = c_salty_cobble + local bi = vi - area.ystride + if data[bi] == c_air and math.random() < 0.25 then + data[bi] = c_salt_crystal + data_param2[bi] = 19 + math.random(1,4) + end + else + df_caverns.stalactites(abs_cracks, vert_rand, vi, area, data, data_param2, false) + end elseif abs_cracks > 0.75 and math.random() < 0.05 then data[vi] = c_glow_ore df_mapitems.place_big_crystal(data, data_param2, vi-area.ystride, true) diff --git a/df_caverns/mod.conf b/df_caverns/mod.conf index 97c933a..40b0992 100644 --- a/df_caverns/mod.conf +++ b/df_caverns/mod.conf @@ -1 +1,4 @@ -name = df_caverns \ No newline at end of file +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 = default, subterrane, df_trees, df_mapitems +optional_depends = df_farming, ice_sprites, oil, df_underworld_items, magma_conduits, bones_loot \ No newline at end of file diff --git a/df_caverns/oil_sea.lua b/df_caverns/oil_sea.lua index de61be2..4560c31 100644 --- a/df_caverns/oil_sea.lua +++ b/df_caverns/oil_sea.lua @@ -4,6 +4,7 @@ end local c_oil = minetest.get_content_id("oil:oil_source") local c_gas = minetest.get_content_id("mine_gas:gas") +local c_gas_wisp = minetest.get_content_id("mine_gas:gas_wisp") local c_lava = minetest.get_content_id("default:lava_source") local c_obsidian = minetest.get_content_id("default:obsidian") @@ -78,7 +79,11 @@ minetest.register_on_generated(function(minp, maxp, seed) end if y > floor_height and y < ceiling_height then if y > median then - data[vi] = c_gas + if math.random() < 0.00025 and ((y < median + 3) or (y > ceiling_height - 3)) then + data[vi] = c_gas_wisp + else + data[vi] = c_gas + end else data[vi] = c_oil end diff --git a/df_caverns/screenshots/cave_coral_snareweed.jpg b/df_caverns/screenshots/cave_coral_snareweed.jpg index 606db50..27ea1a7 100644 Binary files a/df_caverns/screenshots/cave_coral_snareweed.jpg and b/df_caverns/screenshots/cave_coral_snareweed.jpg differ diff --git a/df_caverns/screenshots/cave_pearls.jpg b/df_caverns/screenshots/cave_pearls.jpg new file mode 100644 index 0000000..8b7eedd Binary files /dev/null and b/df_caverns/screenshots/cave_pearls.jpg differ diff --git a/df_caverns/screenshots/spindlestems.jpg b/df_caverns/screenshots/spindlestems.jpg new file mode 100644 index 0000000..691d21d Binary files /dev/null and b/df_caverns/screenshots/spindlestems.jpg differ diff --git a/df_caverns/sunless_sea.lua b/df_caverns/sunless_sea.lua index 2c41fa6..d4888bb 100644 --- a/df_caverns/sunless_sea.lua +++ b/df_caverns/sunless_sea.lua @@ -108,6 +108,8 @@ local mushroom_cavern_floor = function(abs_cracks, vert_rand, vi, area, data, da df_trees.spawn_tower_cap_vm(vi+ystride, area, data) elseif math.random() < 0.01 then df_trees.spawn_goblin_cap_vm(vi+ystride, area, data) + elseif math.random() < 0.02 then + df_trees.spawn_spindlestem_vm(vi+ystride, area, data, data_param2) end end end @@ -274,7 +276,7 @@ local decorate_sunless_sea = function(minp, maxp, seed, vm, node_arrays, area, d if math.random() < 0.001 then local iterations = math.random(1, 6) df_mapitems.spawn_coral_pile(area, data, vi, iterations) - df_mapitems.spawn_cave_coral(area, data, vi+area.ystride, iterations) + df_mapitems.spawn_castle_coral(area, data, vi+area.ystride, iterations) end end end @@ -372,6 +374,7 @@ local decorate_sunless_sea = function(minp, maxp, seed, vm, node_arrays, area, d end else data[vi] = c_coral_table[math.random(1,3)] + data_param2[vi] = math.random(1,4)-1 end end end diff --git a/df_caverns/underworld.lua b/df_caverns/underworld.lua index 7a39b39..5f3cd44 100644 --- a/df_caverns/underworld.lua +++ b/df_caverns/underworld.lua @@ -1,7 +1,9 @@ -if not df_caverns.config.enable_underworld then +if not df_caverns.config.enable_underworld or not minetest.get_modpath("df_underworld_items") then return end +local bones_loot_path = minetest.get_modpath("bones_loot") + local c_slade = minetest.get_content_id("df_underworld_items:slade") local c_air = minetest.get_content_id("air") local c_water = minetest.get_content_id("default:water_source") @@ -56,6 +58,8 @@ local wave_mult = 50 local y_max = median + 2*wave_mult + ceiling_displace + -2*ceiling_mult local y_min = median - 2*wave_mult + floor_displace - 2*floor_mult +--df_caverns.config.underworld_min = y_min + --------------------------------------------------------- -- Buildings @@ -231,6 +235,17 @@ local perlin_pit = { ------------------------------------- +minetest.register_chatcommand("find_pit", { + params = "", + privs = {server=true}, + decription = "find a nearby glowing pit", + func = function(name, param) + local player = minetest.get_player_by_name(name) + local pit = get_pit(player:get_pos()) + minetest.chat_send_player(name, "Pit location: x=" .. math.floor(pit.location.x) .. " z=" .. math.floor(pit.location.z)) + end, +}) + minetest.register_on_generated(function(minp, maxp, seed) @@ -265,7 +280,7 @@ minetest.register_on_generated(function(minp, maxp, seed) local floor_height = math.floor(abs_cave * floor_mult + median + floor_displace + wave) local ceiling_height = math.floor(abs_cave * ceiling_mult + median + ceiling_displace + wave) - if y <= floor_height then + if y < floor_height and y > y_min + math.abs(wave) / 5 then -- divide wave by five to smooth out the underside of the slade, we only want the interface to ripple a little down here data[vi] = c_slade if pit and pit.location.x - radius_pit_max - radius_pit_variance < maxp.x and @@ -281,9 +296,7 @@ minetest.register_on_generated(function(minp, maxp, seed) local pit_value = nvals_pit[area_pit:index(x,y,z)] * pit.variance local distance = vector.distance({x=x, y=y, z=z}, {x=pit.location.x, y=y, z=pit.location.z}) + pit_value if distance < pit.radius -3 then - if y < y_min + 4 then -- make a layer of amethyst at the bottom of the pit to keep the plasma from digging infinitely downward. - data[vi] = c_amethyst - elseif y < median + floor_displace + wave - pit.depth then + if y < median + floor_displace + wave - pit.depth then data[vi] = c_pit_plasma else data[vi] = c_air @@ -386,6 +399,40 @@ minetest.register_on_generated(function(minp, maxp, seed) --write it to world vm:write_to_map() + if bones_loot_path then + for i = 1, 30 do + local x = math.random(minp.x, maxp.x) + local z = math.random(minp.z, maxp.z) + local index2d = mapgen_helper.index2d(emin, emax, x, z) + local abs_cave = math.abs(nvals_cave[index2d]) -- range is from 0 to approximately 2, with 0 being connected and 2s being islands + local wave = nvals_wave[index2d] * wave_mult + local floor_height = math.floor(abs_cave * floor_mult + median + floor_displace + wave) + local ceiling_height = math.floor(abs_cave * ceiling_mult + median + ceiling_displace + wave) + if floor_height < ceiling_height then + local zone = math.abs(nvals_zone[index2d]) + if math.random() < zone then -- bones are more common in the built-up areas + local floor_node = minetest.get_node({x=x, y=floor_height, z=z}) + local floor_node_def = minetest.registered_nodes[floor_node.name] + if floor_node_def and not floor_node_def.buildable_to then + local y = floor_height + 1 + while y < ceiling_height do + local target_pos = {x=x, y=y, z=z} + local target_node = minetest.get_node(target_pos) + if target_node.name == "air" then + bones_loot.place_bones(target_pos, "underworld_warrior", math.random(3, 10), nil, true) + break + elseif target_node.name == "bones:bones" then + -- don't stack bones on bones, it looks silly + break + end + y = y + 1 + end + end + end + end + end + end + local chunk_generation_time = math.ceil((os.clock() - t_start) * 1000) --grab how long it took if chunk_generation_time < 1000 then minetest.log("info", "[df_caverns] underworld mapblock generation took "..chunk_generation_time.." ms") --tell people how long diff --git a/df_farming/cave_wheat.lua b/df_farming/cave_wheat.lua index b936a0d..bf5056f 100644 --- a/df_farming/cave_wheat.lua +++ b/df_farming/cave_wheat.lua @@ -108,7 +108,7 @@ minetest.register_craftitem("df_farming:cave_bread", { description = S("Dwarven Bread"), _doc_items_longdesc = df_farming.doc.cave_bread_desc, _doc_items_usagehelp = df_farming.doc.cave_bread_usage, - inventory_image = "dfcaverns_bread.png", + inventory_image = "dfcaverns_prepared_food13x16.png", on_use = minetest.item_eat(5), groups = {flammable = 2, food = 5}, }) diff --git a/df_farming/cooking.lua b/df_farming/cooking.lua index 0a72d51..cabe61a 100644 --- a/df_farming/cooking.lua +++ b/df_farming/cooking.lua @@ -2,97 +2,127 @@ local MP = minetest.get_modpath(minetest.get_current_modname()) local S, NS = dofile(MP.."/intllib.lua") -local register_cooking_recipes = function(prefix, item, name, returns) - minetest.register_craftitem("df_farming:"..item.."_biscuit", { - description = S("@1 Biscuit", name), - _doc_items_longdesc = df_farming.doc.biscuit_desc, - _doc_items_usagehelp = df_farming.doc.biscuit_usage, - inventory_image = "dfcaverns_biscuit.png", +local register_cooking_recipes = function(def) + local prefix = def.prefix + local item = def.item + local replacements = def.replacements + minetest.register_craftitem("df_farming:"..item.."_simple_meal", { + description = def.simple.name, + _doc_items_longdesc = df_farming.doc.simple_meal_desc, + _doc_items_usagehelp = df_farming.doc.simple_meal_usage, + inventory_image = def.simple.image, on_use = minetest.item_eat(4), groups = {food = 4}, }) - minetest.register_craftitem("df_farming:"..item.."_stew", { - description = S("@1 Stew", name), - _doc_items_longdesc = df_farming.doc.stew_desc, - _doc_items_usagehelp = df_farming.doc.stew_usage, - inventory_image = "dfcaverns_stew.png", + minetest.register_craftitem("df_farming:"..item.."_medium_meal", { + description = def.medium.name, + _doc_items_longdesc = df_farming.doc.medium_meal_desc, + _doc_items_usagehelp = df_farming.doc.medium_meal_usage, + inventory_image = def.medium.image, on_use = minetest.item_eat(6), groups = {food = 6}, }) - minetest.register_craftitem("df_farming:"..item.."_roast", { - description = S("@1 Roast", name), - _doc_items_longdesc = df_farming.doc.roast_desc, - _doc_items_usagehelp = df_farming.doc.roast_usage, - inventory_image = "dfcaverns_roast.png", + minetest.register_craftitem("df_farming:"..item.."_complex_meal", { + description = def.complex.name, + _doc_items_longdesc = df_farming.doc.complex_meal_desc, + _doc_items_usagehelp = df_farming.doc.complex_meal_usage, + inventory_image = def.complex.image, on_use = minetest.item_eat(8), groups = {food = 8}, }) - minetest.register_alias("dfcaverns:"..item.."_biscuit", "df_farming:"..item.."_biscuit") - minetest.register_alias("dfcaverns:"..item.."_stew", "df_farming:"..item.."_stew") - minetest.register_alias("dfcaverns:"..item.."_roast", "df_farming:"..item.."_roast") + minetest.register_alias("dfcaverns:"..item.."_biscuit", "df_farming:"..item.."_simple_meal") + minetest.register_alias("dfcaverns:"..item.."_stew", "df_farming:"..item.."_medium_meal") + minetest.register_alias("dfcaverns:"..item.."_roast", "df_farming:"..item.."_complex_meal") + minetest.register_alias("df_farming:"..item.."_biscuit", "df_farming:"..item.."_simple_meal") + minetest.register_alias("df_farming:"..item.."_stew", "df_farming:"..item.."_medium_meal") + minetest.register_alias("df_farming:"..item.."_roast", "df_farming:"..item.."_complex_meal") - if minetest.get_modpath("simplecrafting_lib") then - simplecrafting_lib.register("cooking", { - input = { - ["group:dfcaverns_cookable"] = 1, - [prefix..":"..item] = 1, - }, - output = { - ["df_farming:"..item.."_biscuit"] = 1, - }, - cooktime = 5.0, - }) - simplecrafting_lib.register("cooking", { - input = { - ["group:dfcaverns_cookable"] = 2, - [prefix..":"..item] = 1, - }, - output = { - ["df_farming:"..item.."_stew"] = 1, - }, - cooktime = 10.0, - }) - simplecrafting_lib.register("cooking", { - input = { - ["group:dfcaverns_cookable"] = 3, - [prefix..":"..item] = 1, - }, - output = { - ["df_farming:"..item.."_roast"] = 1, - }, - cooktime = 15.0, - }) - else - minetest.register_craft({ - type = "shapeless", - output = "df_farming:"..item.."_biscuit", - recipe = {"group:dfcaverns_cookable", prefix..":"..item}, - replacements = returns - }) - minetest.register_craft({ - type = "shapeless", - output = "df_farming:"..item.."_stew", - recipe = {"group:dfcaverns_cookable", "group:dfcaverns_cookable", prefix..":"..item}, - replacements = returns - }) - minetest.register_craft({ - type = "shapeless", - output = "df_farming:"..item.."_roast", - recipe = {"group:dfcaverns_cookable", "group:dfcaverns_cookable", "group:dfcaverns_cookable", prefix..":"..item}, - replacements = returns - }) - end + minetest.register_craft({ + type = "shapeless", + output = "df_farming:"..item.."_simple_meal", + recipe = {"group:dfcaverns_cookable", prefix..":"..item}, + replacements = replacements + }) + minetest.register_craft({ + type = "shapeless", + output = "df_farming:"..item.."_medium_meal", + recipe = {"group:dfcaverns_cookable", "group:dfcaverns_cookable", prefix..":"..item}, + replacements = replacements + }) + minetest.register_craft({ + type = "shapeless", + output = "df_farming:"..item.."_complex_meal", + recipe = {"group:dfcaverns_cookable", "group:dfcaverns_cookable", "group:dfcaverns_cookable", prefix..":"..item}, + replacements = replacements + }) end -register_cooking_recipes("df_farming", "cave_flour", S("Cave Wheat Flour")) -register_cooking_recipes("df_farming", "cave_wheat_seed", S("Cave Wheat Seed")) -register_cooking_recipes("df_farming", "sweet_pod_seed", S("Sweet Pod Spore")) -register_cooking_recipes("df_farming", "sugar", S("Sweet Pod Sugar")) -register_cooking_recipes("group", "plump_helmet", S("Plump Helmet")) -register_cooking_recipes("df_farming", "plump_helmet_spawn", S("Plump Helmet Spawn")) -register_cooking_recipes("df_farming", "quarry_bush_leaves", S("Quarry Bush Leaf")) -register_cooking_recipes("df_farming", "quarry_bush_seed", S("Rock Nut")) -register_cooking_recipes("df_farming", "dimple_cup_seed", S("Dimple Cup Spore")) -register_cooking_recipes("df_farming", "pig_tail_seed", S("Pig Tail Spore")) -register_cooking_recipes("df_farming", "dwarven_syrup_bucket", S("Dwarven Syrup"), {{"df_farming:dwarven_syrup_bucket", "bucket:bucket_empty"}}) + +--{ +-- prefix =, +-- item =, +-- replacements =, +-- simple = {name = , image = }, +-- medium = {name = , image = }, +-- complex = {name = , image = }, +--} + +register_cooking_recipes({prefix="df_farming", item="cave_flour", + simple = {name=S("Cave Wheat Flour Biscuit"), image="dfcaverns_prepared_food08x16.png"}, + medium = {name=S("Cave Wheat Flour Bun"), image="dfcaverns_prepared_food11x16.png"}, + complex = {name=S("Cave Wheat Flour Pancake"), image="dfcaverns_prepared_food07x16.png"}, +}) +register_cooking_recipes({prefix="df_farming", item="cave_wheat_seed", + simple = {name=S("Cave Wheat Seed Loaf"), image="dfcaverns_prepared_food17x16.png"}, + medium = {name=S("Cave Wheat Seed Puffs"), image="dfcaverns_prepared_food33x16.png"}, + complex = {name=S("Cave Wheat Seed Risotto"), image="dfcaverns_prepared_food14x16.png"}, +}) +register_cooking_recipes({prefix="df_farming", item="sweet_pod_seed", + simple = {name=S("Sweet Pod Spore Dumplings"), image="dfcaverns_prepared_food09x16.png"}, + medium = {name=S("Sweet Pod Spore Single Crust Pie"), image="dfcaverns_prepared_food05x16.png"}, + complex = {name=S("Sweet Pod Spore Brule"), image="dfcaverns_prepared_food22x16.png"}, +}) +register_cooking_recipes({prefix="df_farming", item="sugar", + simple = {name=S("Sweet Pod Sugar Cookie"), image="dfcaverns_prepared_food02x16.png"}, + medium = {name=S("Sweet Pod Sugar Gingerbread"), image="dfcaverns_prepared_food21x16.png"}, + complex = {name=S("Sweet Pod Sugar Roll"), image="dfcaverns_prepared_food25x16.png"}, +}) +register_cooking_recipes({prefix="group", item="plump_helmet", + simple = {name=S("Plump Helmet Mince"), image="dfcaverns_prepared_food15x16.png"}, + medium = {name=S("Plump Helmet Stalk Sausage"), image="dfcaverns_prepared_food18x16.png"}, + complex = {name=S("Plump Helmet Roast"), image="dfcaverns_prepared_food04x16.png"}, +}) +register_cooking_recipes({prefix="df_farming", item="plump_helmet_spawn", + simple = {name=S("Plump Helmet Spawn Soup"), image="dfcaverns_prepared_food10x16.png"}, + medium = {name=S("Plump Helmet Spawn Jambalaya"), image="dfcaverns_prepared_food01x16.png"}, + complex = {name=S("Plump Helmet Sprout Stew"), image="dfcaverns_prepared_food26x16.png"}, +}) +register_cooking_recipes({prefix="df_farming", item="quarry_bush_leaves", + simple = {name=S("Quarry Bush Leaf Spicy Bun"), image="dfcaverns_prepared_food23x16.png"}, + medium = {name=S("Quarry Bush Leaf Croissant"), image="dfcaverns_prepared_food29x16.png"}, + complex = {name=S("Stuffed Quarry Bush Leaf"), image="dfcaverns_prepared_food27x16.png"}, +}) +register_cooking_recipes({prefix="df_farming", item="quarry_bush_seed", + simple = {name=S("Rock Nut Bread"), image="dfcaverns_prepared_food16x16.png"}, + medium = {name=S("Rock Nut Cookie"), image="dfcaverns_prepared_food07x16.png"}, + complex = {name=S("Rock Nut Cake"), image="dfcaverns_prepared_food03x16.png"}, +}) +register_cooking_recipes({prefix="df_farming", item="dimple_cup_seed", + simple = {name=S("Dimple Cup Spore Flatbread"), image="dfcaverns_prepared_food12x16.png"}, + medium = {name=S("Dimple Cup Spore Scone"), image="dfcaverns_prepared_food32x16.png"}, + complex = {name=S("Dimple Cup Spore Roll"), image="dfcaverns_prepared_food31x16.png"}, +}) +register_cooking_recipes({prefix="df_farming", item="pig_tail_seed", + simple = {name=S("Pig Tail Spore Sandwich"), image="dfcaverns_prepared_food20x16.png"}, + medium = {name=S("Pig Tail Spore Tofu"), image="dfcaverns_prepared_food30x16.png"}, + complex = {name=S("Pig Tail Spore Casserole"), image="dfcaverns_prepared_food34x16.png"}, +}) +register_cooking_recipes({prefix="df_farming", item="dwarven_syrup_bucket", replacements={{"df_farming:dwarven_syrup_bucket", "bucket:bucket_empty"}}, + simple = {name=S("Dwarven Syrup Taffy"), image="dfcaverns_prepared_food19x16.png"}, + medium = {name=S("Dwarven Syrup Jellies"), image="dfcaverns_prepared_food06x16.png"}, + complex = {name=S("Dwarven Syrup Delight"), image="dfcaverns_prepared_food24x16.png"}, +}) + +-- dfcaverns_prepared_food28 is currently unused +-- dfcaverns_prepared_food13 is used for dwarven bread \ No newline at end of file diff --git a/df_farming/depends.txt b/df_farming/depends.txt index 1a884ec..74ea25f 100644 --- a/df_farming/depends.txt +++ b/df_farming/depends.txt @@ -6,4 +6,4 @@ dynamic_liquid? wool? intllib? doc? -simplecrafting_lib? +crafting? diff --git a/df_farming/doc.lua b/df_farming/doc.lua index 28ed363..b5e0c49 100644 --- a/df_farming/doc.lua +++ b/df_farming/doc.lua @@ -8,12 +8,12 @@ end local MP = minetest.get_modpath(minetest.get_current_modname()) local S, NS = dofile(MP.."/intllib.lua") -df_farming.doc.biscuit_desc = S("A meal made from the admixture of two ingredients, biscuits keep well but are not a rich source of nutrients.") -df_farming.doc.biscuit_usage = nil -df_farming.doc.stew_desc = S("Stews mix three ingredients together. They're more wholesome than biscuits, packing more nutrition into a single serving.") -df_farming.doc.stew_usage = nil -df_farming.doc.roast_desc = S("Four finely minced ingredients combine into a roast, which serves as a full meal.") -df_farming.doc.roast_usage = nil +df_farming.doc.simple_meal_desc = S("A meal made from the admixture of two ingredients, it keeps well but are not a rich source of nutrients.") +df_farming.doc.simple_meal_usage = nil +df_farming.doc.medium_meal_desc = S("A meal made from three ingredients mixed together. They're more wholesome, packing more nutrition into a single serving.") +df_farming.doc.medium_meal_usage = nil +df_farming.doc.complex_meal_desc = S("Four finely minced ingredients combine into a fine, full meal.") +df_farming.doc.complex_meal_usage = nil -- Plants diff --git a/df_farming/locale/it.po b/df_farming/locale/it.po index 67cf434..a33042c 100644 --- a/df_farming/locale/it.po +++ b/df_farming/locale/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: dfcaverns module's Italian locale\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-23 00:27-0700\n" +"POT-Creation-Date: 2019-08-11 03:51-0600\n" "PO-Revision-Date: 2017-08-17 23:01+0100\n" "Last-Translator: H4mlet \n" "Language-Team: ITALIANO\n" @@ -19,104 +19,209 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: df_farming\cave_wheat.lua:10 -#: df_farming\cave_wheat.lua:70 +#: df_farming\cave_wheat.lua:87 msgid "Cave Wheat" msgstr "Grano di caverna" -#: df_farming\cave_wheat.lua:62 -#: df_farming\cooking.lua:89 +#: df_farming\cave_wheat.lua:79 msgid "Cave Wheat Seed" msgstr "Seme di grano di caverna" -#: df_farming\cave_wheat.lua:83 -#: df_farming\cooking.lua:88 +#: df_farming\cave_wheat.lua:100 msgid "Cave Wheat Flour" msgstr "Farina di grano di caverna" -#: df_farming\cave_wheat.lua:91 +#: df_farming\cave_wheat.lua:108 msgid "Dwarven Bread" msgstr "Pane nanico" -#: df_farming\cooking.lua:7 -msgid "@1 Biscuit" -msgstr "Biscotto di @1" +#: df_farming\cooking.lua:72 +#, fuzzy +msgid "Cave Wheat Flour Biscuit" +msgstr "Farina di grano di caverna" -#: df_farming\cooking.lua:15 -msgid "@1 Stew" -msgstr "Stufato di @1" +#: df_farming\cooking.lua:73 +#, fuzzy +msgid "Cave Wheat Flour Bun" +msgstr "Farina di grano di caverna" -#: df_farming\cooking.lua:23 -msgid "@1 Roast" -msgstr "Arrosto di @1" +#: df_farming\cooking.lua:74 +#, fuzzy +msgid "Cave Wheat Flour Pancake" +msgstr "Farina di grano di caverna" -#: df_farming\cooking.lua:90 -msgid "Sweet Pod Spore" +#: df_farming\cooking.lua:77 +#, fuzzy +msgid "Cave Wheat Seed Loaf" +msgstr "Seme di grano di caverna" + +#: df_farming\cooking.lua:78 +#, fuzzy +msgid "Cave Wheat Seed Puffs" +msgstr "Seme di grano di caverna" + +#: df_farming\cooking.lua:79 +#, fuzzy +msgid "Cave Wheat Seed Risotto" +msgstr "Seme di grano di caverna" + +#: df_farming\cooking.lua:82 +#, fuzzy +msgid "Sweet Pod Spore Dumplings" +msgstr "Spore di baccello dolce" + +#: df_farming\cooking.lua:83 +#, fuzzy +msgid "Sweet Pod Spore Single Crust Pie" +msgstr "Spore di baccello dolce" + +#: df_farming\cooking.lua:84 +#, fuzzy +msgid "Sweet Pod Spore Brule" msgstr "Spora di baccello dolce" -#: df_farming\cooking.lua:91 -#: df_farming\sweet_pod.lua:84 -msgid "Sweet Pod Sugar" +#: df_farming\cooking.lua:87 +#, fuzzy +msgid "Sweet Pod Sugar Cookie" +msgstr "Zucchero di baccello dolce" + +#: df_farming\cooking.lua:88 +#, fuzzy +msgid "Sweet Pod Sugar Gingerbread" +msgstr "Zucchero di baccello dolce" + +#: df_farming\cooking.lua:89 +#, fuzzy +msgid "Sweet Pod Sugar Roll" msgstr "Zucchero di baccello dolce" #: df_farming\cooking.lua:92 -#: df_farming\plump_helmet.lua:92 -#: df_farming\plump_helmet.lua:129 -#: df_farming\plump_helmet.lua:164 -#: df_farming\plump_helmet.lua:199 -#: df_farming\plump_helmet.lua:251 -msgid "Plump Helmet" +#, fuzzy +msgid "Plump Helmet Mince" msgstr "Elmo rotondo" #: df_farming\cooking.lua:93 -#: df_farming\plump_helmet.lua:61 -msgid "Plump Helmet Spawn" +#, fuzzy +msgid "Plump Helmet Stalk Sausage" msgstr "Prole di elmo rotondo" #: df_farming\cooking.lua:94 -msgid "Quarry Bush Leaf" -msgstr "Foglia di cespuglio di cava" - -#: df_farming\cooking.lua:95 -msgid "Rock Nut" -msgstr "Noce di roccia" - -#: df_farming\cooking.lua:96 -msgid "Dimple Cup Spore" -msgstr "Spora di coppa increspata" +#, fuzzy +msgid "Plump Helmet Roast" +msgstr "Elmo rotondo" #: df_farming\cooking.lua:97 -#: df_farming\pig_tail.lua:62 -msgid "Pig Tail Spore" -msgstr "Spora di coda di maiale" +#, fuzzy +msgid "Plump Helmet Spawn Soup" +msgstr "Prole di elmo rotondo" #: df_farming\cooking.lua:98 -msgid "Dwarven Syrup" +#, fuzzy +msgid "Plump Helmet Spawn Jambalaya" +msgstr "Prole di elmo rotondo" + +#: df_farming\cooking.lua:99 +#, fuzzy +msgid "Plump Helmet Sprout Stew" +msgstr "Prole di elmo rotondo" + +#: df_farming\cooking.lua:102 +#, fuzzy +msgid "Quarry Bush Leaf Spicy Bun" +msgstr "Foglia di cespuglio di cava" + +#: df_farming\cooking.lua:103 +#, fuzzy +msgid "Quarry Bush Leaf Croissant" +msgstr "Foglia di cespuglio di cava" + +#: df_farming\cooking.lua:104 +#, fuzzy +msgid "Stuffed Quarry Bush Leaf" +msgstr "Foglia di cespuglio di cava" + +#: df_farming\cooking.lua:107 +#, fuzzy +msgid "Rock Nut Bread" +msgstr "Noce di roccia" + +#: df_farming\cooking.lua:108 +#, fuzzy +msgid "Rock Nut Cookie" +msgstr "Noce di roccia" + +#: df_farming\cooking.lua:109 +#, fuzzy +msgid "Rock Nut Cake" +msgstr "Noce di roccia" + +#: df_farming\cooking.lua:112 +#, fuzzy +msgid "Dimple Cup Spore Flatbread" +msgstr "Spora di coppa increspata" + +#: df_farming\cooking.lua:113 +#, fuzzy +msgid "Dimple Cup Spore Scone" +msgstr "Spora di coppa increspata" + +#: df_farming\cooking.lua:114 +#, fuzzy +msgid "Dimple Cup Spore Roll" +msgstr "Spora di coppa increspata" + +#: df_farming\cooking.lua:117 +#, fuzzy +msgid "Pig Tail Spore Sandwich" +msgstr "Spora di coda di maiale" + +#: df_farming\cooking.lua:118 +#, fuzzy +msgid "Pig Tail Spore Tofu" +msgstr "Spora di coda di maiale" + +#: df_farming\cooking.lua:119 +#, fuzzy +msgid "Pig Tail Spore Casserole" +msgstr "Spora di coda di maiale" + +#: df_farming\cooking.lua:122 +#, fuzzy +msgid "Dwarven Syrup Taffy" msgstr "Sciroppo nanico" +#: df_farming\cooking.lua:123 +#, fuzzy +msgid "Dwarven Syrup Jellies" +msgstr "Sciroppo nanico" + +#: df_farming\cooking.lua:124 +#, fuzzy +msgid "Dwarven Syrup Delight" +msgstr "Secchio di sciroppo nanico" + #: df_farming\dimple_cup.lua:10 msgid "Dimple Cup" msgstr "Coppa increspata" -#: df_farming\dimple_cup.lua:56 +#: df_farming\dimple_cup.lua:68 msgid "Dimple Cup Spores" msgstr "Spore di coppa increspata" #: df_farming\doc.lua:11 msgid "" -"A meal made from the admixture of two ingredients, biscuits keep well but " -"are not a rich source of nutrients." +"A meal made from the admixture of two ingredients, it keeps well but are not " +"a rich source of nutrients." msgstr "" #: df_farming\doc.lua:13 msgid "" -"Stews mix three ingredients together. They're more wholesome than biscuits, " +"A meal made from three ingredients mixed together. They're more wholesome, " "packing more nutrition into a single serving." msgstr "" #: df_farming\doc.lua:15 -msgid "" -"Four finely minced ingredients combine into a roast, which serves as a full " -"meal." +msgid "Four finely minced ingredients combine into a fine, full meal." msgstr "" #: df_farming\doc.lua:21 @@ -287,7 +392,11 @@ msgstr "" msgid "Pig Tail" msgstr "Coda di maiale" -#: df_farming\pig_tail.lua:70 +#: df_farming\pig_tail.lua:78 +msgid "Pig Tail Spore" +msgstr "Spora di coda di maiale" + +#: df_farming\pig_tail.lua:86 msgid "Pig tail thread" msgstr "Filo di coda di maiale" @@ -295,19 +404,31 @@ msgstr "Filo di coda di maiale" msgid "Dead Fungus" msgstr "Fungo morto" -#: df_farming\plants.lua:36 +#: df_farming\plants.lua:42 msgid "Cavern Fungi" msgstr "Funghi di caverna" +#: df_farming\plump_helmet.lua:61 +msgid "Plump Helmet Spawn" +msgstr "Prole di elmo rotondo" + +#: df_farming\plump_helmet.lua:92 +#: df_farming\plump_helmet.lua:129 +#: df_farming\plump_helmet.lua:164 +#: df_farming\plump_helmet.lua:199 +#: df_farming\plump_helmet.lua:251 +msgid "Plump Helmet" +msgstr "Elmo rotondo" + #: df_farming\quarry_bush.lua:10 msgid "Quarry Bush" msgstr "Cespuglio di cava" -#: df_farming\quarry_bush.lua:62 +#: df_farming\quarry_bush.lua:75 msgid "Rock Nuts" msgstr "Noci di roccia" -#: df_farming\quarry_bush.lua:71 +#: df_farming\quarry_bush.lua:84 msgid "Quarry Bush Leaves" msgstr "Foglie di cespuglio di cava" @@ -315,22 +436,35 @@ msgstr "Foglie di cespuglio di cava" msgid "Sweet Pod" msgstr "Baccello dolce" -#: df_farming\sweet_pod.lua:60 +#: df_farming\sweet_pod.lua:74 msgid "Sweet Pod Spores" msgstr "Spore di baccello dolce" -#: df_farming\sweet_pod.lua:68 +#: df_farming\sweet_pod.lua:82 msgid "Sweet Pods" msgstr "Baccelli dolci" -#: df_farming\sweet_pod.lua:107 +#: df_farming\sweet_pod.lua:98 +msgid "Sweet Pod Sugar" +msgstr "Zucchero di baccello dolce" + +#: df_farming\sweet_pod.lua:138 msgid "Dwarven Syrup Source" msgstr "Fonte di sciroppo nanico" -#: df_farming\sweet_pod.lua:155 +#: df_farming\sweet_pod.lua:186 msgid "Flowing Dwarven Syrup" msgstr "Sciroppo nanico che scorre" -#: df_farming\sweet_pod.lua:208 +#: df_farming\sweet_pod.lua:239 msgid "Dwarven Syrup Bucket" msgstr "Secchio di sciroppo nanico" + +#~ msgid "@1 Biscuit" +#~ msgstr "Biscotto di @1" + +#~ msgid "@1 Stew" +#~ msgstr "Stufato di @1" + +#~ msgid "@1 Roast" +#~ msgstr "Arrosto di @1" diff --git a/df_farming/locale/template.pot b/df_farming/locale/template.pot index 6045165..e6dc1c9 100644 --- a/df_farming/locale/template.pot +++ b/df_farming/locale/template.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-23 00:27-0700\n" +"POT-Creation-Date: 2019-08-11 03:51-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,104 +18,176 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: df_farming\cave_wheat.lua:10 -#: df_farming\cave_wheat.lua:70 +#: df_farming\cave_wheat.lua:87 msgid "Cave Wheat" msgstr "" -#: df_farming\cave_wheat.lua:62 -#: df_farming\cooking.lua:89 +#: df_farming\cave_wheat.lua:79 msgid "Cave Wheat Seed" msgstr "" -#: df_farming\cave_wheat.lua:83 -#: df_farming\cooking.lua:88 +#: df_farming\cave_wheat.lua:100 msgid "Cave Wheat Flour" msgstr "" -#: df_farming\cave_wheat.lua:91 +#: df_farming\cave_wheat.lua:108 msgid "Dwarven Bread" msgstr "" -#: df_farming\cooking.lua:7 -msgid "@1 Biscuit" +#: df_farming\cooking.lua:72 +msgid "Cave Wheat Flour Biscuit" msgstr "" -#: df_farming\cooking.lua:15 -msgid "@1 Stew" +#: df_farming\cooking.lua:73 +msgid "Cave Wheat Flour Bun" msgstr "" -#: df_farming\cooking.lua:23 -msgid "@1 Roast" +#: df_farming\cooking.lua:74 +msgid "Cave Wheat Flour Pancake" msgstr "" -#: df_farming\cooking.lua:90 -msgid "Sweet Pod Spore" +#: df_farming\cooking.lua:77 +msgid "Cave Wheat Seed Loaf" msgstr "" -#: df_farming\cooking.lua:91 -#: df_farming\sweet_pod.lua:84 -msgid "Sweet Pod Sugar" +#: df_farming\cooking.lua:78 +msgid "Cave Wheat Seed Puffs" +msgstr "" + +#: df_farming\cooking.lua:79 +msgid "Cave Wheat Seed Risotto" +msgstr "" + +#: df_farming\cooking.lua:82 +msgid "Sweet Pod Spore Dumplings" +msgstr "" + +#: df_farming\cooking.lua:83 +msgid "Sweet Pod Spore Single Crust Pie" +msgstr "" + +#: df_farming\cooking.lua:84 +msgid "Sweet Pod Spore Brule" +msgstr "" + +#: df_farming\cooking.lua:87 +msgid "Sweet Pod Sugar Cookie" +msgstr "" + +#: df_farming\cooking.lua:88 +msgid "Sweet Pod Sugar Gingerbread" +msgstr "" + +#: df_farming\cooking.lua:89 +msgid "Sweet Pod Sugar Roll" msgstr "" #: df_farming\cooking.lua:92 -#: df_farming\plump_helmet.lua:92 -#: df_farming\plump_helmet.lua:129 -#: df_farming\plump_helmet.lua:164 -#: df_farming\plump_helmet.lua:199 -#: df_farming\plump_helmet.lua:251 -msgid "Plump Helmet" +msgid "Plump Helmet Mince" msgstr "" #: df_farming\cooking.lua:93 -#: df_farming\plump_helmet.lua:61 -msgid "Plump Helmet Spawn" +msgid "Plump Helmet Stalk Sausage" msgstr "" #: df_farming\cooking.lua:94 -msgid "Quarry Bush Leaf" -msgstr "" - -#: df_farming\cooking.lua:95 -msgid "Rock Nut" -msgstr "" - -#: df_farming\cooking.lua:96 -msgid "Dimple Cup Spore" +msgid "Plump Helmet Roast" msgstr "" #: df_farming\cooking.lua:97 -#: df_farming\pig_tail.lua:62 -msgid "Pig Tail Spore" +msgid "Plump Helmet Spawn Soup" msgstr "" #: df_farming\cooking.lua:98 -msgid "Dwarven Syrup" +msgid "Plump Helmet Spawn Jambalaya" +msgstr "" + +#: df_farming\cooking.lua:99 +msgid "Plump Helmet Sprout Stew" +msgstr "" + +#: df_farming\cooking.lua:102 +msgid "Quarry Bush Leaf Spicy Bun" +msgstr "" + +#: df_farming\cooking.lua:103 +msgid "Quarry Bush Leaf Croissant" +msgstr "" + +#: df_farming\cooking.lua:104 +msgid "Stuffed Quarry Bush Leaf" +msgstr "" + +#: df_farming\cooking.lua:107 +msgid "Rock Nut Bread" +msgstr "" + +#: df_farming\cooking.lua:108 +msgid "Rock Nut Cookie" +msgstr "" + +#: df_farming\cooking.lua:109 +msgid "Rock Nut Cake" +msgstr "" + +#: df_farming\cooking.lua:112 +msgid "Dimple Cup Spore Flatbread" +msgstr "" + +#: df_farming\cooking.lua:113 +msgid "Dimple Cup Spore Scone" +msgstr "" + +#: df_farming\cooking.lua:114 +msgid "Dimple Cup Spore Roll" +msgstr "" + +#: df_farming\cooking.lua:117 +msgid "Pig Tail Spore Sandwich" +msgstr "" + +#: df_farming\cooking.lua:118 +msgid "Pig Tail Spore Tofu" +msgstr "" + +#: df_farming\cooking.lua:119 +msgid "Pig Tail Spore Casserole" +msgstr "" + +#: df_farming\cooking.lua:122 +msgid "Dwarven Syrup Taffy" +msgstr "" + +#: df_farming\cooking.lua:123 +msgid "Dwarven Syrup Jellies" +msgstr "" + +#: df_farming\cooking.lua:124 +msgid "Dwarven Syrup Delight" msgstr "" #: df_farming\dimple_cup.lua:10 msgid "Dimple Cup" msgstr "" -#: df_farming\dimple_cup.lua:56 +#: df_farming\dimple_cup.lua:68 msgid "Dimple Cup Spores" msgstr "" #: df_farming\doc.lua:11 msgid "" -"A meal made from the admixture of two ingredients, biscuits keep well but " -"are not a rich source of nutrients." +"A meal made from the admixture of two ingredients, it keeps well but are not " +"a rich source of nutrients." msgstr "" #: df_farming\doc.lua:13 msgid "" -"Stews mix three ingredients together. They're more wholesome than biscuits, " +"A meal made from three ingredients mixed together. They're more wholesome, " "packing more nutrition into a single serving." msgstr "" #: df_farming\doc.lua:15 -msgid "" -"Four finely minced ingredients combine into a roast, which serves as a full " -"meal." +msgid "Four finely minced ingredients combine into a fine, full meal." msgstr "" #: df_farming\doc.lua:21 @@ -286,7 +358,11 @@ msgstr "" msgid "Pig Tail" msgstr "" -#: df_farming\pig_tail.lua:70 +#: df_farming\pig_tail.lua:78 +msgid "Pig Tail Spore" +msgstr "" + +#: df_farming\pig_tail.lua:86 msgid "Pig tail thread" msgstr "" @@ -294,19 +370,31 @@ msgstr "" msgid "Dead Fungus" msgstr "" -#: df_farming\plants.lua:36 +#: df_farming\plants.lua:42 msgid "Cavern Fungi" msgstr "" +#: df_farming\plump_helmet.lua:61 +msgid "Plump Helmet Spawn" +msgstr "" + +#: df_farming\plump_helmet.lua:92 +#: df_farming\plump_helmet.lua:129 +#: df_farming\plump_helmet.lua:164 +#: df_farming\plump_helmet.lua:199 +#: df_farming\plump_helmet.lua:251 +msgid "Plump Helmet" +msgstr "" + #: df_farming\quarry_bush.lua:10 msgid "Quarry Bush" msgstr "" -#: df_farming\quarry_bush.lua:62 +#: df_farming\quarry_bush.lua:75 msgid "Rock Nuts" msgstr "" -#: df_farming\quarry_bush.lua:71 +#: df_farming\quarry_bush.lua:84 msgid "Quarry Bush Leaves" msgstr "" @@ -314,22 +402,26 @@ msgstr "" msgid "Sweet Pod" msgstr "" -#: df_farming\sweet_pod.lua:60 +#: df_farming\sweet_pod.lua:74 msgid "Sweet Pod Spores" msgstr "" -#: df_farming\sweet_pod.lua:68 +#: df_farming\sweet_pod.lua:82 msgid "Sweet Pods" msgstr "" -#: df_farming\sweet_pod.lua:107 +#: df_farming\sweet_pod.lua:98 +msgid "Sweet Pod Sugar" +msgstr "" + +#: df_farming\sweet_pod.lua:138 msgid "Dwarven Syrup Source" msgstr "" -#: df_farming\sweet_pod.lua:155 +#: df_farming\sweet_pod.lua:186 msgid "Flowing Dwarven Syrup" msgstr "" -#: df_farming\sweet_pod.lua:208 +#: df_farming\sweet_pod.lua:239 msgid "Dwarven Syrup Bucket" msgstr "" diff --git a/df_farming/mod.conf b/df_farming/mod.conf index 1c25a9a..b489d96 100644 --- a/df_farming/mod.conf +++ b/df_farming/mod.conf @@ -1 +1,4 @@ -name = df_farming \ No newline at end of file +name = df_farming +description = Adds farmable underground plants that die in sunlight. Also includes various cooking reactions. +depends = default +optional_depends = farming, cottages, bucket, dynamic_liquid, wool, intllib, doc, crafting diff --git a/df_farming/sweet_pod.lua b/df_farming/sweet_pod.lua index 53a841e..6516c5a 100644 --- a/df_farming/sweet_pod.lua +++ b/df_farming/sweet_pod.lua @@ -239,16 +239,14 @@ if minetest.get_modpath("bucket") then S("Dwarven Syrup Bucket") ) - if minetest.get_modpath("simplecrafting_lib") then - simplecrafting_lib.register("cooking", { + if minetest.get_modpath("crafting") then + simplecrafting_lib.register("furnace", { input = { ["bucket:bucket_empty"] = 1, ["df_farming:sugar"] = 3, + ["simplecrafting_lib:heat"] = 5, }, - output = { - ["df_farming:dwarven_syrup_bucket"] = 1, - }, - cooktime = 5.0, + output = "df_farming:dwarven_syrup_bucket", }) else minetest.register_craft({ diff --git a/df_farming/textures/dfcaverns_biscuit.png b/df_farming/textures/dfcaverns_biscuit.png deleted file mode 100644 index 268ee47..0000000 Binary files a/df_farming/textures/dfcaverns_biscuit.png and /dev/null differ diff --git a/df_farming/textures/dfcaverns_bread.png b/df_farming/textures/dfcaverns_bread.png deleted file mode 100644 index 210428e..0000000 Binary files a/df_farming/textures/dfcaverns_bread.png and /dev/null differ diff --git a/df_farming/textures/dfcaverns_cave_wheat_3.png b/df_farming/textures/dfcaverns_cave_wheat_3.png index 20f7a5c..96adc86 100644 Binary files a/df_farming/textures/dfcaverns_cave_wheat_3.png and b/df_farming/textures/dfcaverns_cave_wheat_3.png differ diff --git a/df_farming/textures/dfcaverns_cave_wheat_4.png b/df_farming/textures/dfcaverns_cave_wheat_4.png index 2ab9ce2..8fb23a0 100644 Binary files a/df_farming/textures/dfcaverns_cave_wheat_4.png and b/df_farming/textures/dfcaverns_cave_wheat_4.png differ diff --git a/df_farming/textures/dfcaverns_cave_wheat_5.png b/df_farming/textures/dfcaverns_cave_wheat_5.png index ec178d0..8bfe8d5 100644 Binary files a/df_farming/textures/dfcaverns_cave_wheat_5.png and b/df_farming/textures/dfcaverns_cave_wheat_5.png differ diff --git a/df_farming/textures/dfcaverns_cave_wheat_8.png b/df_farming/textures/dfcaverns_cave_wheat_8.png index c58af89..91e2b34 100644 Binary files a/df_farming/textures/dfcaverns_cave_wheat_8.png and b/df_farming/textures/dfcaverns_cave_wheat_8.png differ diff --git a/df_farming/textures/dfcaverns_dimple_cup_1.png b/df_farming/textures/dfcaverns_dimple_cup_1.png index df82cb6..8d35988 100644 Binary files a/df_farming/textures/dfcaverns_dimple_cup_1.png and b/df_farming/textures/dfcaverns_dimple_cup_1.png differ diff --git a/df_farming/textures/dfcaverns_dimple_cup_3.png b/df_farming/textures/dfcaverns_dimple_cup_3.png index 304439a..3120ce6 100644 Binary files a/df_farming/textures/dfcaverns_dimple_cup_3.png and b/df_farming/textures/dfcaverns_dimple_cup_3.png differ diff --git a/df_farming/textures/dfcaverns_dimple_cup_4.png b/df_farming/textures/dfcaverns_dimple_cup_4.png index 14dbfc6..cc92d57 100644 Binary files a/df_farming/textures/dfcaverns_dimple_cup_4.png and b/df_farming/textures/dfcaverns_dimple_cup_4.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food01x16.png b/df_farming/textures/dfcaverns_prepared_food01x16.png new file mode 100644 index 0000000..bbff883 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food01x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food01x32.png b/df_farming/textures/dfcaverns_prepared_food01x32.png new file mode 100644 index 0000000..24ccd32 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food01x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food02x16.png b/df_farming/textures/dfcaverns_prepared_food02x16.png new file mode 100644 index 0000000..91b4c4a Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food02x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food02x32.png b/df_farming/textures/dfcaverns_prepared_food02x32.png new file mode 100644 index 0000000..b8c0f0c Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food02x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food03x16.png b/df_farming/textures/dfcaverns_prepared_food03x16.png new file mode 100644 index 0000000..fcac48f Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food03x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food03x32.png b/df_farming/textures/dfcaverns_prepared_food03x32.png new file mode 100644 index 0000000..c947899 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food03x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food04x16.png b/df_farming/textures/dfcaverns_prepared_food04x16.png new file mode 100644 index 0000000..7aec4b0 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food04x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food04x32.png b/df_farming/textures/dfcaverns_prepared_food04x32.png new file mode 100644 index 0000000..acaecd6 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food04x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food05x16.png b/df_farming/textures/dfcaverns_prepared_food05x16.png new file mode 100644 index 0000000..7b2f79b Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food05x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food05x32.png b/df_farming/textures/dfcaverns_prepared_food05x32.png new file mode 100644 index 0000000..48b190c Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food05x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food06x16.png b/df_farming/textures/dfcaverns_prepared_food06x16.png new file mode 100644 index 0000000..f76ba16 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food06x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food06x32.png b/df_farming/textures/dfcaverns_prepared_food06x32.png new file mode 100644 index 0000000..466e682 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food06x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food07x16.png b/df_farming/textures/dfcaverns_prepared_food07x16.png new file mode 100644 index 0000000..3cde717 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food07x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food07x32.png b/df_farming/textures/dfcaverns_prepared_food07x32.png new file mode 100644 index 0000000..efb861f Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food07x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food08x16.png b/df_farming/textures/dfcaverns_prepared_food08x16.png new file mode 100644 index 0000000..3b731a5 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food08x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food08x32.png b/df_farming/textures/dfcaverns_prepared_food08x32.png new file mode 100644 index 0000000..6b2fddd Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food08x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food09x16.png b/df_farming/textures/dfcaverns_prepared_food09x16.png new file mode 100644 index 0000000..a37e93d Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food09x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food09x32.png b/df_farming/textures/dfcaverns_prepared_food09x32.png new file mode 100644 index 0000000..a1708d1 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food09x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food10x16.png b/df_farming/textures/dfcaverns_prepared_food10x16.png new file mode 100644 index 0000000..600a345 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food10x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food10x32.png b/df_farming/textures/dfcaverns_prepared_food10x32.png new file mode 100644 index 0000000..fd0aace Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food10x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food11x16.png b/df_farming/textures/dfcaverns_prepared_food11x16.png new file mode 100644 index 0000000..4fd14d8 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food11x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food11x32.png b/df_farming/textures/dfcaverns_prepared_food11x32.png new file mode 100644 index 0000000..6664915 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food11x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food12x16.png b/df_farming/textures/dfcaverns_prepared_food12x16.png new file mode 100644 index 0000000..7daa6ba Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food12x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food12x32.png b/df_farming/textures/dfcaverns_prepared_food12x32.png new file mode 100644 index 0000000..74c732e Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food12x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food13x16.png b/df_farming/textures/dfcaverns_prepared_food13x16.png new file mode 100644 index 0000000..7bbeb7c Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food13x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food13x32.png b/df_farming/textures/dfcaverns_prepared_food13x32.png new file mode 100644 index 0000000..d7c24c3 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food13x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food14x16.png b/df_farming/textures/dfcaverns_prepared_food14x16.png new file mode 100644 index 0000000..e1f805b Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food14x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food14x32.png b/df_farming/textures/dfcaverns_prepared_food14x32.png new file mode 100644 index 0000000..e1e4f94 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food14x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food15x16.png b/df_farming/textures/dfcaverns_prepared_food15x16.png new file mode 100644 index 0000000..b578c90 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food15x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food15x32.png b/df_farming/textures/dfcaverns_prepared_food15x32.png new file mode 100644 index 0000000..4b061a9 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food15x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food16x16.png b/df_farming/textures/dfcaverns_prepared_food16x16.png new file mode 100644 index 0000000..b1ce647 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food16x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food16x32.png b/df_farming/textures/dfcaverns_prepared_food16x32.png new file mode 100644 index 0000000..1e82d64 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food16x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food17x16.png b/df_farming/textures/dfcaverns_prepared_food17x16.png new file mode 100644 index 0000000..976153f Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food17x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food17x32.png b/df_farming/textures/dfcaverns_prepared_food17x32.png new file mode 100644 index 0000000..6306fb6 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food17x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food18x16.png b/df_farming/textures/dfcaverns_prepared_food18x16.png new file mode 100644 index 0000000..80c08da Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food18x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food18x32.png b/df_farming/textures/dfcaverns_prepared_food18x32.png new file mode 100644 index 0000000..5c665f5 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food18x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food19x16.png b/df_farming/textures/dfcaverns_prepared_food19x16.png new file mode 100644 index 0000000..e809144 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food19x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food19x32.png b/df_farming/textures/dfcaverns_prepared_food19x32.png new file mode 100644 index 0000000..70afcb3 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food19x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food20x16.png b/df_farming/textures/dfcaverns_prepared_food20x16.png new file mode 100644 index 0000000..e5fc072 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food20x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food20x32.png b/df_farming/textures/dfcaverns_prepared_food20x32.png new file mode 100644 index 0000000..5a83731 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food20x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food21x16.png b/df_farming/textures/dfcaverns_prepared_food21x16.png new file mode 100644 index 0000000..e29f399 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food21x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food21x32.png b/df_farming/textures/dfcaverns_prepared_food21x32.png new file mode 100644 index 0000000..c0172d0 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food21x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food22x16.png b/df_farming/textures/dfcaverns_prepared_food22x16.png new file mode 100644 index 0000000..cc1fef1 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food22x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food22x32.png b/df_farming/textures/dfcaverns_prepared_food22x32.png new file mode 100644 index 0000000..e483396 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food22x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food23x16.png b/df_farming/textures/dfcaverns_prepared_food23x16.png new file mode 100644 index 0000000..bcae8c0 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food23x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food23x32.png b/df_farming/textures/dfcaverns_prepared_food23x32.png new file mode 100644 index 0000000..62e9625 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food23x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food24x16.png b/df_farming/textures/dfcaverns_prepared_food24x16.png new file mode 100644 index 0000000..2f90bf7 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food24x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food24x32.png b/df_farming/textures/dfcaverns_prepared_food24x32.png new file mode 100644 index 0000000..754984b Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food24x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food25x16.png b/df_farming/textures/dfcaverns_prepared_food25x16.png new file mode 100644 index 0000000..df6c486 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food25x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food25x32.png b/df_farming/textures/dfcaverns_prepared_food25x32.png new file mode 100644 index 0000000..741a7f8 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food25x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food26x16.png b/df_farming/textures/dfcaverns_prepared_food26x16.png new file mode 100644 index 0000000..0d6252c Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food26x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food26x32.png b/df_farming/textures/dfcaverns_prepared_food26x32.png new file mode 100644 index 0000000..89f7d18 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food26x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food27x16.png b/df_farming/textures/dfcaverns_prepared_food27x16.png new file mode 100644 index 0000000..8ee00fb Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food27x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food27x32.png b/df_farming/textures/dfcaverns_prepared_food27x32.png new file mode 100644 index 0000000..520109f Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food27x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food28x16.png b/df_farming/textures/dfcaverns_prepared_food28x16.png new file mode 100644 index 0000000..62fda4f Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food28x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food28x32.png b/df_farming/textures/dfcaverns_prepared_food28x32.png new file mode 100644 index 0000000..600546c Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food28x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food29x16.png b/df_farming/textures/dfcaverns_prepared_food29x16.png new file mode 100644 index 0000000..125db1e Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food29x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food29x32.png b/df_farming/textures/dfcaverns_prepared_food29x32.png new file mode 100644 index 0000000..74316a5 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food29x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food30x16.png b/df_farming/textures/dfcaverns_prepared_food30x16.png new file mode 100644 index 0000000..a7b1e93 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food30x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food30x32.png b/df_farming/textures/dfcaverns_prepared_food30x32.png new file mode 100644 index 0000000..2e78a5b Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food30x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food31x16.png b/df_farming/textures/dfcaverns_prepared_food31x16.png new file mode 100644 index 0000000..24e85f6 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food31x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food31x32.png b/df_farming/textures/dfcaverns_prepared_food31x32.png new file mode 100644 index 0000000..faa17db Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food31x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food32x16.png b/df_farming/textures/dfcaverns_prepared_food32x16.png new file mode 100644 index 0000000..23ab019 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food32x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food32x32.png b/df_farming/textures/dfcaverns_prepared_food32x32.png new file mode 100644 index 0000000..f39f20e Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food32x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food33x16.png b/df_farming/textures/dfcaverns_prepared_food33x16.png new file mode 100644 index 0000000..f5cacb4 Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food33x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food33x32.png b/df_farming/textures/dfcaverns_prepared_food33x32.png new file mode 100644 index 0000000..d9f1c5e Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food33x32.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food34x16.png b/df_farming/textures/dfcaverns_prepared_food34x16.png new file mode 100644 index 0000000..7a0801d Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food34x16.png differ diff --git a/df_farming/textures/dfcaverns_prepared_food34x32.png b/df_farming/textures/dfcaverns_prepared_food34x32.png new file mode 100644 index 0000000..08002ca Binary files /dev/null and b/df_farming/textures/dfcaverns_prepared_food34x32.png differ diff --git a/df_farming/textures/dfcaverns_quarry_bush_1.png b/df_farming/textures/dfcaverns_quarry_bush_1.png index d4a5e2a..bca6181 100644 Binary files a/df_farming/textures/dfcaverns_quarry_bush_1.png and b/df_farming/textures/dfcaverns_quarry_bush_1.png differ diff --git a/df_farming/textures/dfcaverns_quarry_bush_3.png b/df_farming/textures/dfcaverns_quarry_bush_3.png index eb4e543..6e5cb55 100644 Binary files a/df_farming/textures/dfcaverns_quarry_bush_3.png and b/df_farming/textures/dfcaverns_quarry_bush_3.png differ diff --git a/df_farming/textures/dfcaverns_quarry_bush_leaves.png b/df_farming/textures/dfcaverns_quarry_bush_leaves.png index a99e861..1d8fb98 100644 Binary files a/df_farming/textures/dfcaverns_quarry_bush_leaves.png and b/df_farming/textures/dfcaverns_quarry_bush_leaves.png differ diff --git a/df_farming/textures/dfcaverns_roast.png b/df_farming/textures/dfcaverns_roast.png deleted file mode 100644 index 4165b4d..0000000 Binary files a/df_farming/textures/dfcaverns_roast.png and /dev/null differ diff --git a/df_farming/textures/dfcaverns_rock_nuts.png b/df_farming/textures/dfcaverns_rock_nuts.png index 2b40b5b..c240805 100644 Binary files a/df_farming/textures/dfcaverns_rock_nuts.png and b/df_farming/textures/dfcaverns_rock_nuts.png differ diff --git a/df_farming/textures/dfcaverns_stew.png b/df_farming/textures/dfcaverns_stew.png index 5aa7f31..3d3c42e 100644 Binary files a/df_farming/textures/dfcaverns_stew.png and b/df_farming/textures/dfcaverns_stew.png differ diff --git a/df_farming/textures/dfcaverns_sugar.png b/df_farming/textures/dfcaverns_sugar.png index a4f8456..19d20af 100644 Binary files a/df_farming/textures/dfcaverns_sugar.png and b/df_farming/textures/dfcaverns_sugar.png differ diff --git a/df_farming/textures/dfcaverns_sweet_pod_seed.png b/df_farming/textures/dfcaverns_sweet_pod_seed.png index 7869593..67f77e7 100644 Binary files a/df_farming/textures/dfcaverns_sweet_pod_seed.png and b/df_farming/textures/dfcaverns_sweet_pod_seed.png differ diff --git a/df_farming/textures/license.txt b/df_farming/textures/license.txt index d6f8fce..bcdea20 100644 --- a/df_farming/textures/license.txt +++ b/df_farming/textures/license.txt @@ -10,3 +10,38 @@ dfcaverns_bread - derived from farming dfcaverns_pig_tail_thread - copied from farming dfcaverns_sugar - derived from farming dfcaverns_cave_wheat_seed, dfcaverns_pig_tail_seed - all derived from farming wheat seed + + + +dfcaverns_prepared_food01 - https://commons.wikimedia.org/wiki/File:Croissants-2.jpg public domain 2005 by Christophe Marcheux +dfcaverns_prepared_food02 - https://commons.wikimedia.org/wiki/File:Boule_de_campagne_01.jpg CC-BY-3.0 2007 by Zantastik +dfcaverns_prepared_food03 - https://commons.wikimedia.org/wiki/File:Essene_Bread_70pct_Rye_Sproud_30pct_Spelt_cut.JPG CC-BY-SA 3.0 2010 by Fritzs +dfcaverns_prepared_food04 - https://commons.wikimedia.org/wiki/File:Essene_Bread_Spelt_Sproud_cut.JPG CC-BY-SA 3.0 2010 by Fritzs +dfcaverns_prepared_food05 - https://commons.wikimedia.org/wiki/File:Tarte_%C3%A0_la_mirabelle_-_20050831.jpeg CC-BY-SA 3.0 and GFDL 1.2 2005 by Sam Hocevar +dfcaverns_prepared_food06 - https://commons.wikimedia.org/wiki/File:Dry_fruit.jpg CC-BY-SA 2.5 2005 by André Karwath +dfcaverns_prepared_food07 - https://commons.wikimedia.org/wiki/File:Steinpilzrisotto.jpg CC-BY-SA 3.0 2006 by Rainer Zenz +dfcaverns_prepared_food08 - https://commons.wikimedia.org/wiki/File:Koernerbroetchen.jpg CC-BY-SA 3.0 2007 by Körnerbrötchen +dfcaverns_prepared_food09 - https://commons.wikimedia.org/wiki/File:Semmelkn%C3%B6del.jpg CC-BY-SA 2.5 2005 by Kobako +dfcaverns_prepared_food10 - https://commons.wikimedia.org/wiki/File:Gulasch.jpg CC-BY-SA 2.5 2006 by Kobako +dfcaverns_prepared_food11 - https://commons.wikimedia.org/wiki/File:Chleb_-_polish_bread.jpg Public Domain 2006 by R a f +dfcaverns_prepared_food12 - https://commons.wikimedia.org/wiki/File:CocinaPalentina-Pan_002.jpg CC-BY-SA 3.0 2011 by Valdavia +dfcaverns_prepared_food13 - https://commons.wikimedia.org/wiki/File:Pompei_pane.jpg CC-BY-SA 2.0 Italy 2006 by Beatrice +dfcaverns_prepared_food14 - https://commons.wikimedia.org/wiki/File:Apple_pie.png CC-BY-SA 3.0 2018 by Tiia Monto +dfcaverns_prepared_food15 - https://commons.wikimedia.org/wiki/File:Assam-Tee_SFTGFOP1.jpg CC-BY-SA 3.0 2010 by André Helbig +dfcaverns_prepared_food16 and food17 - https://commons.wikimedia.org/wiki/File:Basler_Brot_white_background.jpg CC-BY-SA 3.0 2008 by Sandstein +dfcaverns_prepared_food18 - https://commons.wikimedia.org/wiki/File:Beetroot2.jpg CC-BY-SA 4.0 International 2016 by Tiia Monto +dfcaverns_prepared_food19 - https://commons.wikimedia.org/wiki/File:Bugnes_white_background.jpg CC-BY-SA 2.5 Generic 2013 by Marie-Lan Nguyen +dfcaverns_prepared_food20 - https://commons.wikimedia.org/wiki/File:Cheeseburger_au_restaurant_Quick_%C3%A0_Coigni%C3%A8res_le_12_avril_2017_-_2.jpg CC-BY-SA 3.0 2017 by Lionel Allorge +dfcaverns_prepared_food21 - https://commons.wikimedia.org/wiki/File:Choc-Chip-Cookie.jpg Public Domain 2011 by Evan-Amos +dfcaverns_prepared_food22 - https://commons.wikimedia.org/wiki/File:Chocolate_walnut_cookie.jpg CC-BY-SA 4.0 International 2015 by Tiia Monto +dfcaverns_prepared_food23 - https://commons.wikimedia.org/wiki/File:Fogaca_Sweet_Bread.jpg Public Domain 2005 by Paula Santos +dfcaverns_prepared_food24 - https://commons.wikimedia.org/wiki/File:Bonbons_Ricola_Citron_M%C3%A9lisse_-_1.jpg CC-BY-SA 3.0 2015 by Lionel Allorge +dfcaverns_prepared_food25 and food26 - https://commons.wikimedia.org/wiki/File:Betel_nuts3.jpg CC-BY-SA 3.0 2008 by Henryk Kotowski +dfcaverns_prepared_food27 - https://commons.wikimedia.org/wiki/File:Criollo.jpg CC-BY-SA 3.0 2004 by Fyyfabian +dfcaverns_prepared_food28 - https://commons.wikimedia.org/wiki/File:Croissant-Petr_Kratochvil.jpg Public Domain 2011 by Petr Kratochvil +dfcaverns_prepared_food29 - https://commons.wikimedia.org/wiki/File:Rogalik.jpg Public Domain 2005 by Julo +dfcaverns_prepared_food30 - https://commons.wikimedia.org/wiki/File:Cod_fillet.jpg CC-BY-40 International 2018 by Tiia Monto +dfcaverns_prepared_food31 - https://commons.wikimedia.org/wiki/File:California_roll.jpg CC-BY-SA 3.0 2018 by Tiia Monto +dfcaverns_prepared_food32 - https://commons.wikimedia.org/wiki/File:Kajzerka.jpg Public Domain 2005 by Julo +dfcaverns_prepared_food33 - https://commons.wikimedia.org/wiki/File:Celery_root.jpg CC-BY-SA 3.0 2019 by Tiia Monto +dfcaverns_prepared_food34 - https://commons.wikimedia.org/wiki/File:Cherry-Pie-Whole.jpg Public Domain 2011 by Evan-Amos diff --git a/df_mapitems/castle_coral.lua b/df_mapitems/castle_coral.lua new file mode 100644 index 0000000..86b661c --- /dev/null +++ b/df_mapitems/castle_coral.lua @@ -0,0 +1,96 @@ +-- internationalization boilerplate +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +minetest.register_node("df_mapitems:castle_coral", { + description = S("Castle Coral"), + tiles = { + "dfcaverns_castle_coral_gradient.png", + "dfcaverns_castle_coral.png", + "dfcaverns_castle_coral.png", + "dfcaverns_castle_coral.png^[multiply:#888888", + }, + _doc_items_longdesc = df_mapitems.doc.castle_coral_desc, + _doc_items_usagehelp = df_mapitems.doc.castle_coral_usage, + drawtype = "mesh", + light_source = 2, + mesh = "octagonal_coral.obj", + drop = "df_mapitems:castle_coral_skeleton", + paramtype = "light", + groups = {cracky=2,}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("df_mapitems:castle_coral_skeleton", { + description = S("Castle Coral Skeleton"), + _doc_items_longdesc = df_mapitems.doc.castle_coral_desc, + _doc_items_usagehelp = df_mapitems.doc.castle_coral_usage, + tiles = { + "default_coral_skeleton.png", + "default_coral_skeleton.png", + "default_coral_skeleton.png", + "default_coral_skeleton.png", + }, + drawtype = "mesh", + mesh = "octagonal_coral.obj", + paramtype = "light", + groups = {cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +local c_coral = minetest.get_content_id("df_mapitems:castle_coral") +local c_coral_skeleton = minetest.get_content_id("df_mapitems:castle_coral_skeleton") + +local c_stone = minetest.get_content_id("default:stone") +local c_water = minetest.get_content_id("default:water_source") + +df_mapitems.spawn_castle_coral = function(area, data, vi, iterations) + local run = math.random(2,4) + local index = vi + local zstride = area.zstride + local ystride = area.ystride + while run > 0 do + if math.random() > 0.95 or data[index] == c_stone or not area:containsi(index) then return end + data[index] = c_coral + if iterations > 2 then + data[index + 1] = c_coral + data[index - 1] = c_coral + data[index + zstride] = c_coral + data[index - zstride] = c_coral + end + if iterations > 3 then + data[index + 2] = c_coral + data[index - 2] = c_coral + data[index + zstride * 2] = c_coral + data[index - zstride * 2] = c_coral + data[index + 1 + zstride] = c_coral + data[index - 1 + zstride] = c_coral + data[index + 1 - zstride] = c_coral + data[index - 1 - zstride] = c_coral + end + index = index + ystride + run = run - 1 + end + + local newiterations = iterations - 1 + if newiterations == 0 then return end + + if math.random() > 0.5 then + df_mapitems.spawn_castle_coral(area, data, index + 1 - ystride, newiterations) + df_mapitems.spawn_castle_coral(area, data, index - 1 - ystride, newiterations) + else + df_mapitems.spawn_castle_coral(area, data, index + zstride - ystride, newiterations) + df_mapitems.spawn_castle_coral(area, data, index - zstride - ystride, newiterations) + end +end + +df_mapitems.spawn_coral_pile = function(area, data, vi, radius) + local pos = area:position(vi) + for li in area:iterp(vector.add(pos, -radius), vector.add(pos, radius)) do + local adjacent = li + area.ystride + local node_type = data[li] + if math.random() < 0.2 and not mapgen_helper.buildable_to(node_type) and data[adjacent] == c_water then + data[adjacent] = c_coral_skeleton + end + end +end \ No newline at end of file diff --git a/df_mapitems/cave_coral.lua b/df_mapitems/cave_coral.lua index aac0bc1..9a38c80 100644 --- a/df_mapitems/cave_coral.lua +++ b/df_mapitems/cave_coral.lua @@ -7,9 +7,9 @@ minetest.register_node("df_mapitems:cave_coral_3", { _doc_items_longdesc = df_mapitems.doc.cave_coral_desc, _doc_items_usagehelp = df_mapitems.doc.cave_coral_usage, tiles = {"dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral.png"}, - is_ground_content = true, drop = "default:coral_skeleton", light_source = 3, + paramtype2 = "facedir", groups = {cracky = 3, dfcaverns_cave_coral = 1}, sounds = default.node_sound_stone_defaults(), }) @@ -19,9 +19,9 @@ minetest.register_node("df_mapitems:cave_coral_2", { _doc_items_longdesc = df_mapitems.doc.cave_coral_desc, _doc_items_usagehelp = df_mapitems.doc.cave_coral_usage, tiles = {"dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral.png"}, - is_ground_content = true, drop = "default:coral_skeleton", light_source = 2, + paramtype2 = "facedir", groups = {cracky = 3, dfcaverns_cave_coral = 1}, sounds = default.node_sound_stone_defaults(), }) @@ -31,9 +31,9 @@ minetest.register_node("df_mapitems:cave_coral_1", { _doc_items_longdesc = df_mapitems.doc.cave_coral_desc, _doc_items_usagehelp = df_mapitems.doc.cave_coral_usage, tiles = {"dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral.png"}, - is_ground_content = true, drop = "default:coral_skeleton", light_source = 1, + paramtype2 = "facedir", groups = {cracky = 3, dfcaverns_cave_coral = 1}, sounds = default.node_sound_stone_defaults(), }) @@ -46,70 +46,7 @@ minetest.register_abm{ interval = 2, chance = 10, action = function(pos) - minetest.swap_node(pos, {name=coral_names[math.random(1,3)]}) + local node = minetest.get_node(pos) + minetest.swap_node(pos, {name=coral_names[math.random(1,3)], param2=node.param2}) end, } - -local c_coral_1 = minetest.get_content_id("df_mapitems:cave_coral_1") -local c_coral_2 = minetest.get_content_id("df_mapitems:cave_coral_2") -local c_coral_3 = minetest.get_content_id("df_mapitems:cave_coral_3") -local c_coral_skeleton = minetest.get_content_id("default:coral_skeleton") -local c_dirt = minetest.get_content_id("default:dirt") -local c_stone = minetest.get_content_id("default:stone") -local c_water = minetest.get_content_id("default:water_source") - -local corals = {c_coral_1, c_coral_2, c_coral_3} -local get_coral = function() - return corals[math.random(1,3)] -end - -df_mapitems.spawn_cave_coral = function(area, data, vi, iterations) - local run = math.random(2,4) - local index = vi - local zstride = area.zstride - local ystride = area.ystride - while run > 0 do - if math.random() > 0.95 or data[index] == c_stone or not area:containsi(index) then return end - data[index] = get_coral() - if iterations > 2 then - data[index + 1] = get_coral() - data[index - 1] = get_coral() - data[index + zstride] = get_coral() - data[index - zstride] = get_coral() - end - if iterations > 3 then - data[index + 2] = get_coral() - data[index - 2] = get_coral() - data[index + zstride * 2] = get_coral() - data[index - zstride * 2] = get_coral() - data[index + 1 + zstride] = get_coral() - data[index - 1 + zstride] = get_coral() - data[index + 1 - zstride] = get_coral() - data[index - 1 - zstride] = get_coral() - end - index = index + ystride - run = run - 1 - end - - local newiterations = iterations - 1 - if newiterations == 0 then return end - - if math.random() > 0.5 then - df_mapitems.spawn_cave_coral(area, data, index + 1 - ystride, newiterations) - df_mapitems.spawn_cave_coral(area, data, index - 1 - ystride, newiterations) - else - df_mapitems.spawn_cave_coral(area, data, index + zstride - ystride, newiterations) - df_mapitems.spawn_cave_coral(area, data, index - zstride - ystride, newiterations) - end -end - -df_mapitems.spawn_coral_pile = function(area, data, vi, radius) - local pos = area:position(vi) - for li in area:iterp(vector.add(pos, -radius), vector.add(pos, radius)) do - local adjacent = li + area.ystride - local node_type = data[li] - if math.random() < 0.2 and not mapgen_helper.buildable_to(node_type) and data[adjacent] == c_water then - data[adjacent] = c_coral_skeleton - end - end -end diff --git a/df_mapitems/cave_pearls.lua b/df_mapitems/cave_pearls.lua new file mode 100644 index 0000000..2d4b4ee --- /dev/null +++ b/df_mapitems/cave_pearls.lua @@ -0,0 +1,26 @@ +-- internationalization boilerplate +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +minetest.register_node("df_mapitems:cave_pearls", { + description = S("Cave Pearls"), + tiles = {"dfcaverns_cave_pearl.png"}, + _doc_items_longdesc = df_mapitems.doc.cave_pearls_desc, + _doc_items_usagehelp = df_mapitems.doc.cave_pearls_usage, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 2}, + walkable = false, + climbable = true, + light_source = 4, + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.5, -0.375, -0.125, -0.3125, -0.125}, -- NodeBox1 + {0.125, -0.5, -0.1875, 0.3125, -0.375, 0}, -- NodeBox2 + {-0.125, -0.5, 0.25, 0.0625, -0.375, 0.4375}, -- NodeBox3 + } + }, + on_place = df_mapitems.place_against_surface, +}) diff --git a/df_mapitems/crystals_mese.lua b/df_mapitems/crystals_mese.lua index dd2970b..b44f48e 100644 --- a/df_mapitems/crystals_mese.lua +++ b/df_mapitems/crystals_mese.lua @@ -40,6 +40,7 @@ minetest.register_node("df_mapitems:mese_crystal", { sounds = default.node_sound_glass_defaults(), use_texture_alpha = true, sunlight_propagates = true, + on_place = df_mapitems.place_against_surface, }) minetest.register_craft({ diff --git a/df_mapitems/crystals_salt.lua b/df_mapitems/crystals_salt.lua new file mode 100644 index 0000000..b85878f --- /dev/null +++ b/df_mapitems/crystals_salt.lua @@ -0,0 +1,33 @@ +-- internationalization boilerplate +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +minetest.register_node("df_mapitems:salt_crystal", { + description = S("Luminous Salt Crystal"), + _doc_items_longdesc = df_mapitems.doc.salt_desc, + _doc_items_usagehelp = df_mapitems.doc.salt_usage, + tiles = {"dfcaverns_salt_crystal.png"}, + groups = {cracky = 2}, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "mesh", + mesh = "underch_crystal.obj", + light_source = 6, + sounds = default.node_sound_glass_defaults(), + use_texture_alpha = true, + sunlight_propagates = true, + on_place = df_mapitems.place_against_surface, +}) + +minetest.register_node("df_mapitems:salty_cobble", { + description = S("Salty Cobble"), + _doc_items_longdesc = df_mapitems.doc.salty_cobble_desc, + _doc_items_usagehelp = df_mapitems.doc.salty_cobble_desc, + tiles = {"default_cobble.png^dfcaverns_salty.png"}, + groups = {cracky = 3, stone = 1, lava_heatable = 1}, + _magma_conduits_heats_to = "default:cobble", + is_ground_content = true, + light_source = 2, + drop = 'default:cobble', + sounds = default.node_sound_stone_defaults(), +}) \ No newline at end of file diff --git a/df_mapitems/doc.lua b/df_mapitems/doc.lua index 4d40ace..b992ccd 100644 --- a/df_mapitems/doc.lua +++ b/df_mapitems/doc.lua @@ -41,3 +41,15 @@ df_mapitems.doc.glow_ruby_ore_usage = S("Aside from its aesthetic value this roc df_mapitems.doc.big_crystal_desc = S("Monolithic crystals of this size form only over extremely long periods deep underground, in large long-lived cavities that allow them room to grow. Water and the life it hosts tend to disrupt the formation process of these crystals so they're only found in dry environments.") df_mapitems.doc.big_crystal_usage = S("Aside from its aesthetic value this crystal has no particular use.") + +df_mapitems.doc.cave_pearls_desc = S("These nodules are actually calcified bacterial colonies.") +df_mapitems.doc.cave_pearls_usage = S("Aside from their soft glow and beauty, cave pearls have no practical use. Except perhaps as handholds for climbing.") + +df_mapitems.doc.castle_coral_desc = S("Deep under the surface of the Sunless Sea are the rare and beautiful Castle Corals, so named due to their resemblance to small undersea castles.") +df_mapitems.doc.castle_coral_usage = S("Castle Coral has little practical use aside from perhaps as a distinctive-looking building material.") + +df_mapitems.doc.salt_desc = S("A crystal of salt grown from water that percolated through the depths of the earth, picking up all manner of minerals as it went.") +df_mapitems.doc.salt_usage = S("Traces of Mese must have been dissolved by the water as this crystal has an inherent glow to it. Not enough Mese to be useful as a reagent, unfortunately.") + +df_mapitems.doc.salty_cobble_desc = S("Much water has seeped through the cracks in this rock and then quickly evaporated, leaving a crust of salt laced throughout.") +df_mapitems.doc.salty_cobble_usage = S("Attemping to mine this rock knocks the salt crust away, leaving only base stone.") \ No newline at end of file diff --git a/df_mapitems/init.lua b/df_mapitems/init.lua index f070150..7f0040f 100644 --- a/df_mapitems/init.lua +++ b/df_mapitems/init.lua @@ -7,6 +7,7 @@ local modpath = minetest.get_modpath(minetest.get_current_modname()) dofile(modpath.."/config.lua") dofile(modpath.."/doc.lua") dofile(modpath.."/aliases.lua") +dofile(modpath.."/util.lua") dofile(modpath.."/ground_cover.lua") dofile(modpath.."/glow_worms.lua") @@ -16,5 +17,8 @@ dofile(modpath.."/cave_coral.lua") dofile(modpath.."/crystals_mese.lua") dofile(modpath.."/crystals_ruby.lua") +dofile(modpath.."/crystals_salt.lua") -dofile(modpath.."/veinstone.lua") \ No newline at end of file +dofile(modpath.."/veinstone.lua") +dofile(modpath.."/cave_pearls.lua") +dofile(modpath.."/castle_coral.lua") \ No newline at end of file diff --git a/df_mapitems/locale/it.po b/df_mapitems/locale/it.po index cfab752..2fc761d 100644 --- a/df_mapitems/locale/it.po +++ b/df_mapitems/locale/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: dfcaverns module's Italian locale\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-29 19:30-0700\n" +"POT-Creation-Date: 2019-08-07 21:33-0600\n" "PO-Revision-Date: 2017-08-17 23:01+0100\n" "Last-Translator: H4mlet \n" "Language-Team: ITALIANO\n" @@ -18,6 +18,14 @@ msgstr "" "X-Generator: Poedit 1.6.10\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: df_mapitems\castle_coral.lua:6 +msgid "Castle Coral" +msgstr "" + +#: df_mapitems\castle_coral.lua:25 +msgid "Castle Coral Skeleton" +msgstr "" + #: df_mapitems\cave_coral.lua:6 #: df_mapitems\cave_coral.lua:18 #: df_mapitems\cave_coral.lua:30 @@ -25,6 +33,10 @@ msgstr "" msgid "Cave Coral" msgstr "Grano di caverna" +#: df_mapitems\cave_pearls.lua:6 +msgid "Cave Pearls" +msgstr "" + #: df_mapitems\crystals_mese.lua:7 msgid "Flawless Mese Block" msgstr "" @@ -49,6 +61,14 @@ msgstr "" msgid "Big Red Crystal" msgstr "" +#: df_mapitems\crystals_salt.lua:6 +msgid "Luminous Salt Crystal" +msgstr "" + +#: df_mapitems\crystals_salt.lua:23 +msgid "Salty Cobble" +msgstr "" + #: df_mapitems\doc.lua:11 msgid "" "Cave moss is technically a form of mold, but fortunately a relatively benign " @@ -199,6 +219,53 @@ msgstr "" msgid "Aside from its aesthetic value this crystal has no particular use." msgstr "" +#: df_mapitems\doc.lua:45 +msgid "These nodules are actually calcified bacterial colonies." +msgstr "" + +#: df_mapitems\doc.lua:46 +msgid "" +"Aside from their soft glow and beauty, cave pearls have no practical use. " +"Except perhaps as handholds for climbing." +msgstr "" + +#: df_mapitems\doc.lua:48 +msgid "" +"Deep under the surface of the Sunless Sea are the rare and beautiful Castle " +"Corals, so named due to their resemblance to small undersea castles." +msgstr "" + +#: df_mapitems\doc.lua:49 +msgid "" +"Castle Coral has little practical use aside from perhaps as a distinctive-" +"looking building material." +msgstr "" + +#: df_mapitems\doc.lua:51 +msgid "" +"A crystal of salt grown from water that percolated through the depths of the " +"earth, picking up all manner of minerals as it went." +msgstr "" + +#: df_mapitems\doc.lua:52 +msgid "" +"Traces of Mese must have been dissolved by the water as this crystal has an " +"inherent glow to it. Not enough Mese to be useful as a reagent, " +"unfortunately." +msgstr "" + +#: df_mapitems\doc.lua:54 +msgid "" +"Much water has seeped through the cracks in this rock and then quickly " +"evaporated, leaving a crust of salt laced throughout." +msgstr "" + +#: df_mapitems\doc.lua:55 +msgid "" +"Attemping to mine this rock knocks the salt crust away, leaving only base " +"stone." +msgstr "" + #: df_mapitems\flowstone.lua:8 msgid "Dry Dripstone" msgstr "" @@ -227,12 +294,12 @@ msgstr "Vermi luminosi" msgid "Dirt With Cave Moss" msgstr "Terra con muschio di caverna" -#: df_mapitems\ground_cover.lua:53 -#: df_mapitems\ground_cover.lua:67 +#: df_mapitems\ground_cover.lua:54 +#: df_mapitems\ground_cover.lua:69 msgid "Cobblestone With Floor Fungus" msgstr "Ciottoli con funghi del terreno" -#: df_mapitems\ground_cover.lua:106 +#: df_mapitems\ground_cover.lua:109 msgid "Ice With Hoar Moss" msgstr "" diff --git a/df_mapitems/locale/template.pot b/df_mapitems/locale/template.pot index 11e5f8d..595675d 100644 --- a/df_mapitems/locale/template.pot +++ b/df_mapitems/locale/template.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-29 19:30-0700\n" +"POT-Creation-Date: 2019-08-07 21:33-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,12 +17,24 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" +#: df_mapitems\castle_coral.lua:6 +msgid "Castle Coral" +msgstr "" + +#: df_mapitems\castle_coral.lua:25 +msgid "Castle Coral Skeleton" +msgstr "" + #: df_mapitems\cave_coral.lua:6 #: df_mapitems\cave_coral.lua:18 #: df_mapitems\cave_coral.lua:30 msgid "Cave Coral" msgstr "" +#: df_mapitems\cave_pearls.lua:6 +msgid "Cave Pearls" +msgstr "" + #: df_mapitems\crystals_mese.lua:7 msgid "Flawless Mese Block" msgstr "" @@ -47,6 +59,14 @@ msgstr "" msgid "Big Red Crystal" msgstr "" +#: df_mapitems\crystals_salt.lua:6 +msgid "Luminous Salt Crystal" +msgstr "" + +#: df_mapitems\crystals_salt.lua:23 +msgid "Salty Cobble" +msgstr "" + #: df_mapitems\doc.lua:11 msgid "" "Cave moss is technically a form of mold, but fortunately a relatively benign " @@ -197,6 +217,53 @@ msgstr "" msgid "Aside from its aesthetic value this crystal has no particular use." msgstr "" +#: df_mapitems\doc.lua:45 +msgid "These nodules are actually calcified bacterial colonies." +msgstr "" + +#: df_mapitems\doc.lua:46 +msgid "" +"Aside from their soft glow and beauty, cave pearls have no practical use. " +"Except perhaps as handholds for climbing." +msgstr "" + +#: df_mapitems\doc.lua:48 +msgid "" +"Deep under the surface of the Sunless Sea are the rare and beautiful Castle " +"Corals, so named due to their resemblance to small undersea castles." +msgstr "" + +#: df_mapitems\doc.lua:49 +msgid "" +"Castle Coral has little practical use aside from perhaps as a distinctive-" +"looking building material." +msgstr "" + +#: df_mapitems\doc.lua:51 +msgid "" +"A crystal of salt grown from water that percolated through the depths of the " +"earth, picking up all manner of minerals as it went." +msgstr "" + +#: df_mapitems\doc.lua:52 +msgid "" +"Traces of Mese must have been dissolved by the water as this crystal has an " +"inherent glow to it. Not enough Mese to be useful as a reagent, " +"unfortunately." +msgstr "" + +#: df_mapitems\doc.lua:54 +msgid "" +"Much water has seeped through the cracks in this rock and then quickly " +"evaporated, leaving a crust of salt laced throughout." +msgstr "" + +#: df_mapitems\doc.lua:55 +msgid "" +"Attemping to mine this rock knocks the salt crust away, leaving only base " +"stone." +msgstr "" + #: df_mapitems\flowstone.lua:8 msgid "Dry Dripstone" msgstr "" @@ -225,12 +292,12 @@ msgstr "" msgid "Dirt With Cave Moss" msgstr "" -#: df_mapitems\ground_cover.lua:53 -#: df_mapitems\ground_cover.lua:67 +#: df_mapitems\ground_cover.lua:54 +#: df_mapitems\ground_cover.lua:69 msgid "Cobblestone With Floor Fungus" msgstr "" -#: df_mapitems\ground_cover.lua:106 +#: df_mapitems\ground_cover.lua:109 msgid "Ice With Hoar Moss" msgstr "" diff --git a/df_mapitems/mod.conf b/df_mapitems/mod.conf index 20d5019..d18cf0e 100644 --- a/df_mapitems/mod.conf +++ b/df_mapitems/mod.conf @@ -1 +1,4 @@ -name = df_mapitems \ No newline at end of file +name = df_mapitems +description = Various node types used by the dfcaverns mapgen mod. Includes cave coral, flowstone, glowing crystals, glow worms, moss and fungi ground cover, and snare weed. +depends = default, subterrane +optional_depends = df_farming, farming, intllib, doc, radiant_damage \ No newline at end of file diff --git a/df_mapitems/models/license.txt b/df_mapitems/models/license.txt index 06e53b3..99cd1e6 100644 --- a/df_mapitems/models/license.txt +++ b/df_mapitems/models/license.txt @@ -1,3 +1,3 @@ -All hex crystal models were created by FaceDeer and released under both the MIT license and under the Creative Commons CC0 license. +All hex crystal models and the octagonal_coral model were created by FaceDeer and released under both the MIT license and under the Creative Commons CC0 license. underch_crystal is from the [underch] (Underground Challenge) mod by Hume2 (https://gitlab.com/h2mm/underch) under the WTFPL license, relicened here to the MIT license \ No newline at end of file diff --git a/df_mapitems/models/octagonal_coral.obj b/df_mapitems/models/octagonal_coral.obj new file mode 100644 index 0000000..b25bf74 --- /dev/null +++ b/df_mapitems/models/octagonal_coral.obj @@ -0,0 +1,181 @@ +# Blender v2.79 (sub 0) OBJ File: 'octagonal_coral.blend' +# www.blender.org +g Cylinder.003_Cylinder.004 +v -0.120061 0.505000 -0.289852 +v 0.120061 0.505000 -0.289852 +v 0.289852 0.505000 -0.120061 +v 0.289852 0.505000 0.120061 +v 0.120060 0.505000 0.289852 +v -0.120061 0.505000 0.289852 +v -0.289852 0.505000 0.120061 +v -0.289852 0.505000 -0.120060 +v -0.120061 -0.250000 -0.289852 +v 0.120061 -0.250000 -0.289852 +v 0.289852 -0.250000 -0.120061 +v 0.289852 -0.250000 0.120061 +v 0.120060 -0.250000 0.289852 +v -0.120061 -0.250000 0.289852 +v -0.289852 -0.250000 0.120061 +v -0.289852 -0.250000 -0.120060 +vt 0.500000 1.000024 +vt 0.250000 1.000024 +vt 0.250000 -0.000024 +vt 0.500000 -0.000024 +vt 0.750000 1.000024 +vt 0.500000 1.000024 +vt 0.500000 -0.000024 +vt 0.750000 -0.000024 +vt 0.750000 1.000024 +vt 0.500000 1.000024 +vt 0.500000 -0.000024 +vt 0.750000 -0.000024 +vt 0.750000 1.000024 +vt 0.500000 1.000024 +vt 0.500000 -0.000024 +vt 0.750000 -0.000024 +vt 0.250000 1.000024 +vt 0.250000 -0.000024 +vt 0.750000 1.000024 +vt 0.750000 -0.000024 +vt 0.250000 1.000024 +vt 0.250000 -0.000024 +vt 0.250000 1.000024 +vt 0.250000 -0.000024 +s off +f 3/1 2/2 10/3 11/4 +f 8/5 7/6 15/7 16/8 +f 6/9 5/10 13/11 14/12 +f 2/13 1/14 9/15 10/16 +f 5/10 4/17 12/18 13/11 +f 4/19 3/1 11/4 12/20 +f 1/14 8/21 16/22 9/15 +f 7/6 6/23 14/24 15/7 +g Cylinder.002_Cylinder.003 +v -0.120061 0.505000 -0.289852 +v -0.292831 -0.505000 -0.706955 +v -0.292831 0.505000 -0.706955 +v 0.292830 -0.505000 -0.706955 +v 0.292830 0.505000 -0.706955 +v 0.706955 -0.505000 -0.292831 +v 0.706955 0.505000 -0.292831 +v 0.706955 -0.505000 0.292830 +v 0.706955 0.505000 0.292830 +v 0.292830 -0.505000 0.706955 +v 0.292830 0.505000 0.706955 +v -0.292831 -0.505000 0.706955 +v -0.292831 0.505000 0.706955 +v -0.706955 -0.505000 0.292831 +v -0.706955 0.505000 0.292831 +v -0.706955 -0.505000 -0.292830 +v -0.706955 0.505000 -0.292830 +v 0.120061 0.505000 -0.289852 +v 0.289852 0.505000 -0.120061 +v 0.289852 0.505000 0.120061 +v 0.120060 0.505000 0.289852 +v -0.120061 0.505000 0.289852 +v -0.289852 0.505000 0.120061 +v -0.289852 0.505000 -0.120060 +vt -0.207066 0.792876 +vt -0.207066 0.207124 +vt 0.210103 0.379921 +vt 0.210103 0.620079 +vt 0.500000 -0.000000 +vt 0.500000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.207066 0.207124 +vt 1.207066 0.792876 +vt 0.789897 0.620079 +vt 0.789897 0.379921 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt 0.500000 1.000000 +vt 0.500000 -0.000000 +vt 0.792876 1.207066 +vt 0.207124 1.207066 +vt 0.379921 0.789897 +vt 0.620079 0.789897 +vt -0.000000 1.000000 +vt -0.000000 0.000000 +vt 0.207124 -0.207066 +vt 0.379921 0.210103 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.792876 -0.207066 +vt 0.620079 0.210103 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt -0.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +s off +f 33/25 31/26 39/27 40/28 +f 18/29 19/30 21/31 20/32 +f 25/33 23/34 35/35 36/36 +f 20/37 21/38 23/39 22/40 +f 21/41 19/42 17/43 34/44 +f 22/40 23/39 25/45 24/46 +f 31/26 29/47 38/48 39/27 +f 24/49 25/50 27/51 26/52 +f 23/34 21/41 34/44 35/35 +f 26/52 27/51 29/53 28/54 +f 29/47 27/55 37/56 38/48 +f 28/57 29/58 31/59 30/60 +f 30/60 31/59 33/61 32/62 +f 27/55 25/33 36/36 37/56 +f 32/63 33/64 19/30 18/29 +f 19/42 33/25 40/28 17/43 +g Cylinder.001_Cylinder.002 +v 0.000000 -0.505000 0.000000 +v -0.292831 -0.505000 -0.706955 +v 0.292830 -0.505000 -0.706955 +v 0.706955 -0.505000 -0.292831 +v 0.706955 -0.505000 0.292830 +v 0.292830 -0.505000 0.706955 +v -0.292831 -0.505000 0.706955 +v -0.706955 -0.505000 0.292831 +v -0.706955 -0.505000 -0.292830 +vt 0.500000 0.500000 +vt 0.207147 1.207009 +vt 0.792853 1.207009 +vt 1.207009 0.792853 +vt 1.207009 0.207147 +vt 0.792853 -0.207009 +vt 0.207147 -0.207009 +vt -0.207009 0.207147 +vt -0.207009 0.792853 +s off +f 41/65 42/66 43/67 +f 41/65 43/67 44/68 +f 41/65 44/68 45/69 +f 41/65 45/69 46/70 +f 41/65 46/70 47/71 +f 41/65 47/71 48/72 +f 41/65 48/72 49/73 +f 41/65 49/73 42/66 +g Cylinder +v -0.120061 -0.250000 -0.289852 +v 0.120061 -0.250000 -0.289852 +v 0.289852 -0.250000 -0.120061 +v 0.289852 -0.250000 0.120061 +v 0.120060 -0.250000 0.289852 +v -0.120061 -0.250000 0.289852 +v -0.289852 -0.250000 0.120061 +v -0.289852 -0.250000 -0.120060 +vt 0.707087 0.999951 +vt 0.292913 0.999951 +vt 0.000049 0.707087 +vt 0.000049 0.292913 +vt 0.292913 0.000049 +vt 0.707087 0.000049 +vt 0.999951 0.292913 +vt 0.999951 0.707087 +s off +f 51/74 50/75 57/76 56/77 55/78 54/79 53/80 52/81 diff --git a/df_mapitems/textures/dfcaverns_castle_coral.png b/df_mapitems/textures/dfcaverns_castle_coral.png new file mode 100644 index 0000000..1b3a2f0 Binary files /dev/null and b/df_mapitems/textures/dfcaverns_castle_coral.png differ diff --git a/df_mapitems/textures/dfcaverns_castle_coral_gradient.png b/df_mapitems/textures/dfcaverns_castle_coral_gradient.png new file mode 100644 index 0000000..a12ec9e Binary files /dev/null and b/df_mapitems/textures/dfcaverns_castle_coral_gradient.png differ diff --git a/df_mapitems/textures/dfcaverns_cave_moss_side.png b/df_mapitems/textures/dfcaverns_cave_moss_side.png index 15e1b81..c7609cc 100644 Binary files a/df_mapitems/textures/dfcaverns_cave_moss_side.png and b/df_mapitems/textures/dfcaverns_cave_moss_side.png differ diff --git a/df_mapitems/textures/dfcaverns_cave_pearl.png b/df_mapitems/textures/dfcaverns_cave_pearl.png new file mode 100644 index 0000000..b300ea3 Binary files /dev/null and b/df_mapitems/textures/dfcaverns_cave_pearl.png differ diff --git a/df_mapitems/textures/dfcaverns_glow_ruby4x.png b/df_mapitems/textures/dfcaverns_glow_ruby4x.png index 45c7a87..2caab0b 100644 Binary files a/df_mapitems/textures/dfcaverns_glow_ruby4x.png and b/df_mapitems/textures/dfcaverns_glow_ruby4x.png differ diff --git a/df_mapitems/textures/dfcaverns_salt_crystal.png b/df_mapitems/textures/dfcaverns_salt_crystal.png new file mode 100644 index 0000000..44bd37c Binary files /dev/null and b/df_mapitems/textures/dfcaverns_salt_crystal.png differ diff --git a/df_mapitems/textures/dfcaverns_salty.png b/df_mapitems/textures/dfcaverns_salty.png new file mode 100644 index 0000000..ff7162e Binary files /dev/null and b/df_mapitems/textures/dfcaverns_salty.png differ diff --git a/df_mapitems/textures/dfcaverns_snareweed_roots.png b/df_mapitems/textures/dfcaverns_snareweed_roots.png index 98180d6..7f08215 100644 Binary files a/df_mapitems/textures/dfcaverns_snareweed_roots.png and b/df_mapitems/textures/dfcaverns_snareweed_roots.png differ diff --git a/df_mapitems/textures/license.txt b/df_mapitems/textures/license.txt index 627dd5a..b77b0e1 100644 --- a/df_mapitems/textures/license.txt +++ b/df_mapitems/textures/license.txt @@ -5,3 +5,5 @@ dfcaverns_glow_worm_animated - glow worm texture overlaid with rippling animatio dfcaverns_glow_mese - from caverealms glow_mese dfcaverns_glow_ruby, dfcaverns_glow_ruby4x, dfcaverns_glow_ruby_quarter - from caverealms glow_ruby dfcaverns_glow_ruby_ore - from caverealms glow_ruby_ore +dfcaverns_salt_crystal - from caverealms +dfcaverns_salty - from caverealms with modified alpha channel \ No newline at end of file diff --git a/df_mapitems/util.lua b/df_mapitems/util.lua new file mode 100644 index 0000000..ea876c3 --- /dev/null +++ b/df_mapitems/util.lua @@ -0,0 +1,132 @@ +-- Used by cave pearls and crystal clusters +-- These methods simulate "wallmounted" nodes using regular facedir, randomizing the rotation around the wallmounted direction. +-- Useful for naturalistic objects you want to have look irregular + +df_mapitems.place_against_surface = function(itemstack, placer, pointed_thing) + -- check if pointing at a node + if not pointed_thing then + return itemstack + end + if pointed_thing.type ~= "node" then + return itemstack + end + + local under_pos = pointed_thing.under + local above_pos = pointed_thing.above + + local under_node = minetest.get_node(under_pos) + local above_node = minetest.get_node(above_pos) + + if minetest.is_protected(above_pos, placer:get_player_name()) then + minetest.record_protection_violation(above_pos, placer:get_player_name()) + return + end + + local under_name = under_node.name + local above_name = above_node.name + local under_def = minetest.registered_nodes[under_name] + local above_def = minetest.registered_nodes[above_name] + + -- return if any of the nodes is not registered + if not under_def or not above_def then + return itemstack + end + -- check if you can replace the node above the pointed node + if not above_def.buildable_to then + return itemstack + end + + local dir = vector.subtract(under_pos, above_pos) + local param2 + if dir.x > 0 then + --facing +x: 16, 17, 18, 19, + param2 = 15 + math.random(1,4) + elseif dir.x < 0 then + --facing -x: 12, 13, 14, 15 + param2 = 11 + math.random(1,4) + elseif dir.z > 0 then + --facing +z: 8, 9, 10, 11 + param2 = 7 + math.random(1,4) + elseif dir.z < 0 then + --facing -z: 4, 5, 6, 7 + param2 = 3 + math.random(1,4) + elseif dir.y > 0 then + --facing -y: 20, 21, 22, 23 (ceiling) + param2 = 19 + math.random(1,4) + else + --facing +y: 0, 1, 2, 3 (floor) + param2 = math.random(1,4) - 1 + end + -- add the node and remove 1 item from the itemstack + minetest.add_node(above_pos, {name = itemstack:get_name(), param2 = param2}) + if not minetest.setting_getbool("creative_mode") and not minetest.check_player_privs(placer, "creative") then + itemstack:take_item() + end + return itemstack +end + +-- Mapgen version of the above + +local add_to_table = function(dest, source) + for _, val in ipairs(source) do + table.insert(dest, val) + end +end + +local valid_nodes = {} -- cache values +local is_valid_mounting_node = function(c_node) + if valid_nodes[c_node] ~= nil then + return valid_nodes[c_node] + end + local def = minetest.registered_nodes[minetest.get_name_from_content_id(c_node)] + if def ~= nil + and (def.drawtype == "normal" or def.drawtype == nil) + and not def.buildable_to + and not (def.groups and def.groups.falling_node) then + valid_nodes[c_node] = true + return true + end + valid_nodes[c_node] = false + return false +end + +--facing +x: 16, 17, 18, 19, +--facing -x: 12, 13, 14, 15 +--facing +z: 8, 9, 10, 11 +--facing -z: 4, 5, 6, 7 +--facing -y: 20, 21, 22, 23, (ceiling) +--facing +y: 0, 1, 2, 3 + +local get_valid_facedirs_vm = function(vi, area, data) + local dirs = {} + local ystride = area.ystride + local zstride = area.zstride + if is_valid_mounting_node(data[vi+1]) then + add_to_table(dirs, {16, 17, 18, 19}) + end + if is_valid_mounting_node(data[vi-1]) then + add_to_table(dirs, {12, 13, 14, 15}) + end + if is_valid_mounting_node(data[vi-ystride]) then + add_to_table(dirs, {0, 1, 2, 3}) + end + if is_valid_mounting_node(data[vi+ystride]) then + add_to_table(dirs, {20, 21, 22, 23}) + end + if is_valid_mounting_node(data[vi+zstride]) then + add_to_table(dirs, {8, 9, 10, 11}) + end + if is_valid_mounting_node(data[vi-zstride]) then + add_to_table(dirs, {4, 5, 6, 7}) + end + return dirs +end + +df_mapitems.place_against_surface_vm = function(c_node, vi, area, data, data_param2) + local facedirs = get_valid_facedirs_vm(vi, area, data) + local count = #facedirs + if count > 0 then + data[vi] = c_node + data_param2[vi] = facedirs[math.random(1, count)] + end +end \ No newline at end of file diff --git a/df_trees/black_cap.lua b/df_trees/black_cap.lua index 27a6468..0a9905e 100644 --- a/df_trees/black_cap.lua +++ b/df_trees/black_cap.lua @@ -81,6 +81,15 @@ minetest.register_craft({ } }) +if minetest.get_modpath("basic_materials") then + minetest.register_craft({ + type = "cooking", + output = "basic_materials:paraffin", + recipe = "df_trees:black_cap_gills", + cooktime = 5, + }) +end + minetest.register_node("df_trees:black_cap_wood", { description = S("Black Cap Planks"), _doc_items_longdesc = df_trees.doc.black_cap_desc, diff --git a/df_trees/depends.txt b/df_trees/depends.txt index e9465b5..9542636 100644 --- a/df_trees/depends.txt +++ b/df_trees/depends.txt @@ -2,4 +2,6 @@ default intllib? doc? moreblocks? -stairs? \ No newline at end of file +stairs? +vessels? +basic_materials? \ No newline at end of file diff --git a/df_trees/doc.lua b/df_trees/doc.lua index bc2b04c..5a977ab 100644 --- a/df_trees/doc.lua +++ b/df_trees/doc.lua @@ -40,4 +40,32 @@ else end df_trees.doc.torchspine_desc = S("Torchspines are strange organic formations that are alive only in a technical sense. They \"feed\" on volatile flammable vapors vented up through their structure, growing from combustion residue deposited at their tips.") -df_trees.doc.torchspine_usage = S("A torchspine alternates between active and quiescent phases and emits dim light when active. They can be harvested for torches, and their embers sprout into new torchspines when placed on flammable surfaces.") \ No newline at end of file +df_trees.doc.torchspine_usage = S("A torchspine alternates between active and quiescent phases and emits dim light when active. They can be harvested for torches, and their embers sprout into new torchspines when placed on flammable surfaces.") + +df_trees.doc.spindlestem_desc = S("Spindlestems are too big to easily pluck by hand but too small to be called a proper tree. Nevertheless, they are a common and useful resource for underground travelers - particularly their glowing caps.") +df_trees.doc.spindlestem_usage = S("The stem of a Spindlestem is surprisingly sturdy, and despite their thinness they can grow quite tall. They can be used as a wood substitute in many crafting recipes.") + +df_trees.doc.spindlestem_cap_white_desc = S("The cap of a Spindlestem, uncontaminated by any symbiotic luminescent microorganisms.") +df_trees.doc.spindlestem_cap_white_usage = S("These things are useless except as weak fuel for a fire.") + +df_trees.doc.spindlestem_cap_red_desc = S("The cap of a Spindlestem, glowing a weak red due to symbiotic microorganisms.") +df_trees.doc.spindlestem_cap_red_usage = S("Red Spindlestems are a sign of nearby iron deposits - or perhaps Goblin Caps. Their glowing symbiotes can be extracted as a long-lived light source, though the glow is weak.") + +df_trees.doc.spindlestem_cap_green_desc = S("The cap of a Spindlestem, glowing a soft green due to symbiotic microorganisms.") +df_trees.doc.spindlestem_cap_green_usage = S("Green Spindlestems are a sign of nearby copper deposits. Their glowing symbiotes can be extracted as a long-lived light source, though the glow is not strong.") + +df_trees.doc.spindlestem_cap_cyan_desc = S("The cap of a Spindlestem, glowing a strong cyan due to symbiotic microorganisms.") +df_trees.doc.spindlestem_cap_cyan_usage = S("Cyan Spindlestems are a sign of both copper and iron deposits nearby. Their glowing symbiotes can be extracted as a long-lived light source.") + +df_trees.doc.spindlestem_cap_golden_desc = S("The cap of a Spindlestem, glowing a brilliant yellow due to symbiotic microorganisms.") +df_trees.doc.spindlestem_cap_golden_usage = S("Golden Spindlestems are a sign of rare and magical mineral deposits nearby. Their glowing symbiotes can be extracted as a strong and long-lived light source.") + + +df_trees.doc.spindlestem_extract_red_desc = S("Living extract from the cap of a red Spindlestem.") +df_trees.doc.spindlestem_extract_red_usage = df_trees.doc.spindlestem_cap_red_usage +df_trees.doc.spindlestem_extract_green_desc = S("Living extract from the cap of a green Spindlestem.") +df_trees.doc.spindlestem_extract_green_usage = df_trees.doc.spindlestem_cap_green_usage +df_trees.doc.spindlestem_extract_cyan_desc = S("Living extract from the cap of a cyan Spindlestem.") +df_trees.doc.spindlestem_extract_cyan_usage = df_trees.doc.spindlestem_cap_cyan_usage +df_trees.doc.spindlestem_extract_golden_desc = S("Living extract from the cap of a yellow Spindlestem.") +df_trees.doc.spindlestem_extract_golden_usage = df_trees.doc.spindlestem_cap_golden_usage \ No newline at end of file diff --git a/df_trees/fungiwood.lua b/df_trees/fungiwood.lua index f553afc..3de93e5 100644 --- a/df_trees/fungiwood.lua +++ b/df_trees/fungiwood.lua @@ -125,9 +125,12 @@ minetest.register_node("df_trees:fungiwood_sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random( - df_trees.config.fungiwood_delay_multiplier*df_trees.config.tree_min_growth_delay, - df_trees.config.fungiwood_delay_multiplier*df_trees.config.tree_max_growth_delay)) + local below_node = minetest.get_node(vector.add(pos, {x=0,y=-1,z=0})) + if minetest.get_item_group(below_node.name, "soil") > 0 then + minetest.get_node_timer(pos):start(math.random( + df_trees.config.fungiwood_delay_multiplier*df_trees.config.tree_min_growth_delay, + df_trees.config.fungiwood_delay_multiplier*df_trees.config.tree_max_growth_delay)) + end end, on_timer = function(pos) diff --git a/df_trees/goblin_cap.lua b/df_trees/goblin_cap.lua index cbc0809..dd71bb9 100644 --- a/df_trees/goblin_cap.lua +++ b/df_trees/goblin_cap.lua @@ -9,8 +9,8 @@ minetest.register_node("df_trees:goblin_cap_stem", { _doc_items_usagehelp = df_trees.doc.goblin_cap_usage, tiles = {"dfcaverns_goblin_cap_stem.png"}, is_ground_content = true, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, goblin_cap = 1}, + sounds = df_trees.node_sound_tree_soft_fungus_defaults(), }) --cap @@ -20,8 +20,8 @@ minetest.register_node("df_trees:goblin_cap", { _doc_items_usagehelp = df_trees.doc.goblin_cap_usage, tiles = {"dfcaverns_goblin_cap.png"}, is_ground_content = true, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, goblin_cap = 1}, + sounds = df_trees.node_sound_tree_soft_fungus_defaults(), }) --gills @@ -31,7 +31,7 @@ minetest.register_node("df_trees:goblin_cap_gills", { _doc_items_usagehelp = df_trees.doc.goblin_cap_usage, tiles = {"dfcaverns_goblin_cap_gills.png"}, is_ground_content = true, - groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1, goblin_cap = 1}, sounds = default.node_sound_leaves_defaults(), drawtype = "plantlike", paramtype = "light", @@ -154,9 +154,12 @@ minetest.register_node("df_trees:goblin_cap_sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random( - df_trees.config.goblin_cap_delay_multiplier*df_trees.config.tree_min_growth_delay, - df_trees.config.goblin_cap_delay_multiplier*df_trees.config.tree_max_growth_delay)) + local below_node = minetest.get_node(vector.add(pos, {x=0,y=-1,z=0})) + if minetest.get_item_group(below_node.name, "soil") > 0 then + minetest.get_node_timer(pos):start(math.random( + df_trees.config.goblin_cap_delay_multiplier*df_trees.config.tree_min_growth_delay, + df_trees.config.goblin_cap_delay_multiplier*df_trees.config.tree_max_growth_delay)) + end end, on_timer = function(pos) diff --git a/df_trees/init.lua b/df_trees/init.lua index 45c5359..68c2221 100644 --- a/df_trees/init.lua +++ b/df_trees/init.lua @@ -1,5 +1,13 @@ df_trees = {} +df_trees.node_sound_tree_soft_fungus_defaults = function(table) + table = table or {} + table.footstep = table.footstep or + {name = "dfcaverns_fungus_footstep", gain = 0.3} + default.node_sound_wood_defaults(table) + return table +end + --grab a shorthand for the filepath of the mod local modpath = minetest.get_modpath(minetest.get_current_modname()) @@ -62,5 +70,5 @@ dofile(modpath.."/goblin_cap.lua") dofile(modpath.."/tower_cap.lua") dofile(modpath.."/torchspine.lua") - +dofile(modpath.."/spindlestem.lua") diff --git a/df_trees/locale/it.po b/df_trees/locale/it.po index c235b05..5b4fa1d 100644 --- a/df_trees/locale/it.po +++ b/df_trees/locale/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: dfcaverns module's Italian locale\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-23 00:27-0700\n" +"POT-Creation-Date: 2019-08-05 20:30-0600\n" "PO-Revision-Date: 2017-08-17 23:01+0100\n" "Last-Translator: H4mlet \n" "Language-Team: ITALIANO\n" @@ -46,15 +46,15 @@ msgstr "Gambo di spina del sangue" msgid "Dead Blood Thorn Stem" msgstr "Gambo di spina del sangue morta" -#: df_trees\blood_thorn.lua:60 +#: df_trees\blood_thorn.lua:61 msgid "Blood Thorn Spike" msgstr "Spuntone di spina del sangue" -#: df_trees\blood_thorn.lua:90 +#: df_trees\blood_thorn.lua:91 msgid "Dead Blood Thorn Spike" msgstr "Spuntone di spina del sangue morta" -#: df_trees\blood_thorn.lua:127 +#: df_trees\blood_thorn.lua:134 msgid "Blood Thorn Planks" msgstr "Assi di spina del sangue" @@ -197,6 +197,96 @@ msgid "" "sprout into new torchspines when placed on flammable surfaces." msgstr "" +#: df_trees\doc.lua:45 +msgid "" +"Spindlestems are too big to easily pluck by hand but too small to be called " +"a proper tree. Nevertheless, they are a common and useful resource for " +"underground travelers - particularly their glowing caps." +msgstr "" + +#: df_trees\doc.lua:46 +msgid "" +"The stem of a Spindlestem is surprisingly sturdy, and despite their thinness " +"they can grow quite tall. They can be used as a wood substitute in many " +"crafting recipes." +msgstr "" + +#: df_trees\doc.lua:48 +msgid "" +"The cap of a Spindlestem, uncontaminated by any symbiotic luminescent " +"microorganisms." +msgstr "" + +#: df_trees\doc.lua:49 +msgid "These things are useless except as weak fuel for a fire." +msgstr "" + +#: df_trees\doc.lua:51 +msgid "" +"The cap of a Spindlestem, glowing a weak red due to symbiotic microorganisms." +msgstr "" + +#: df_trees\doc.lua:52 +msgid "" +"Red Spindlestems are a sign of nearby iron deposits - or perhaps Goblin " +"Caps. Their glowing symbiotes can be extracted as a long-lived light source, " +"though the glow is weak." +msgstr "" + +#: df_trees\doc.lua:54 +msgid "" +"The cap of a Spindlestem, glowing a soft green due to symbiotic " +"microorganisms." +msgstr "" + +#: df_trees\doc.lua:55 +msgid "" +"Green Spindlestems are a sign of nearby copper deposits. Their glowing " +"symbiotes can be extracted as a long-lived light source, though the glow is " +"not strong." +msgstr "" + +#: df_trees\doc.lua:57 +msgid "" +"The cap of a Spindlestem, glowing a strong cyan due to symbiotic " +"microorganisms." +msgstr "" + +#: df_trees\doc.lua:58 +msgid "" +"Cyan Spindlestems are a sign of both copper and iron deposits nearby. Their " +"glowing symbiotes can be extracted as a long-lived light source." +msgstr "" + +#: df_trees\doc.lua:60 +msgid "" +"The cap of a Spindlestem, glowing a brilliant yellow due to symbiotic " +"microorganisms." +msgstr "" + +#: df_trees\doc.lua:61 +msgid "" +"Golden Spindlestems are a sign of rare and magical mineral deposits nearby. " +"Their glowing symbiotes can be extracted as a strong and long-lived light " +"source." +msgstr "" + +#: df_trees\doc.lua:64 +msgid "Living extract from the cap of a red Spindlestem." +msgstr "" + +#: df_trees\doc.lua:66 +msgid "Living extract from the cap of a green Spindlestem." +msgstr "" + +#: df_trees\doc.lua:68 +msgid "Living extract from the cap of a cyan Spindlestem." +msgstr "" + +#: df_trees\doc.lua:70 +msgid "Living extract from the cap of a yellow Spindlestem." +msgstr "" + #: df_trees\fungiwood.lua:13 msgid "Fungiwood Stem" msgstr "Gambo di fungo di legno" @@ -265,6 +355,43 @@ msgstr "Assi di cappello del Nether" msgid "Nether Cap Spawn" msgstr "Prole di cappello del Nether" +#: df_trees\spindlestem.lua:64 +msgid "Spindlestem" +msgstr "" + +#: df_trees\spindlestem.lua:97 +msgid "@1 Spindlestem Cap" +msgstr "" + +#: df_trees\spindlestem.lua:186 +msgid "@1 Spindlestem Extract" +msgstr "" + +#: df_trees\spindlestem.lua:234 +#, fuzzy +msgid "Spindlestem Spawn" +msgstr "Prole di albero delle spore" + +#: df_trees\spindlestem.lua:273 +msgid "White" +msgstr "" + +#: df_trees\spindlestem.lua:274 +msgid "Red" +msgstr "" + +#: df_trees\spindlestem.lua:275 +msgid "Green" +msgstr "" + +#: df_trees\spindlestem.lua:276 +msgid "Cyan" +msgstr "" + +#: df_trees\spindlestem.lua:277 +msgid "Golden" +msgstr "" + #: df_trees\spore_tree.lua:14 msgid "Spore Tree Stem" msgstr "Gambo di albero delle spore" @@ -285,7 +412,7 @@ msgstr "Corpo fruttifero dell'albero delle spore" msgid "Spore Tree Spawn" msgstr "Prole di albero delle spore" -#: df_trees\spore_tree.lua:303 +#: df_trees\spore_tree.lua:306 #, fuzzy msgid "Spore Tree Ladder" msgstr "Ife di albero delle spore" @@ -325,23 +452,23 @@ msgstr "Assi di cappello a torre" msgid "Tower Cap Spawn" msgstr "Prole di cappello a torre" -#: df_trees\tunnel_tube.lua:16 -#: df_trees\tunnel_tube.lua:39 -#: df_trees\tunnel_tube.lua:69 -#: df_trees\tunnel_tube.lua:98 +#: df_trees\tunnel_tube.lua:14 +#: df_trees\tunnel_tube.lua:37 +#: df_trees\tunnel_tube.lua:67 +#: df_trees\tunnel_tube.lua:96 msgid "Tunnel Tube" msgstr "Tubo di galleria" -#: df_trees\tunnel_tube.lua:135 +#: df_trees\tunnel_tube.lua:133 msgid "Tunnel Tube Plies" msgstr "Strati di tubo di galleria" -#: df_trees\tunnel_tube.lua:172 -#: df_trees\tunnel_tube.lua:228 -#: df_trees\tunnel_tube.lua:248 +#: df_trees\tunnel_tube.lua:170 +#: df_trees\tunnel_tube.lua:226 +#: df_trees\tunnel_tube.lua:246 msgid "Tunnel Tube Fruiting Body" msgstr "Corpo fruttifero del tubo di galleria" -#: df_trees\tunnel_tube.lua:279 +#: df_trees\tunnel_tube.lua:277 msgid "Tunnel Tube Spawn" msgstr "Prole di tubo di galleria" diff --git a/df_trees/locale/template.pot b/df_trees/locale/template.pot index 97cf3bd..7fb54ea 100644 --- a/df_trees/locale/template.pot +++ b/df_trees/locale/template.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-12-23 00:27-0700\n" +"POT-Creation-Date: 2019-08-05 20:30-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -45,15 +45,15 @@ msgstr "" msgid "Dead Blood Thorn Stem" msgstr "" -#: df_trees\blood_thorn.lua:60 +#: df_trees\blood_thorn.lua:61 msgid "Blood Thorn Spike" msgstr "" -#: df_trees\blood_thorn.lua:90 +#: df_trees\blood_thorn.lua:91 msgid "Dead Blood Thorn Spike" msgstr "" -#: df_trees\blood_thorn.lua:127 +#: df_trees\blood_thorn.lua:134 msgid "Blood Thorn Planks" msgstr "" @@ -196,6 +196,96 @@ msgid "" "sprout into new torchspines when placed on flammable surfaces." msgstr "" +#: df_trees\doc.lua:45 +msgid "" +"Spindlestems are too big to easily pluck by hand but too small to be called " +"a proper tree. Nevertheless, they are a common and useful resource for " +"underground travelers - particularly their glowing caps." +msgstr "" + +#: df_trees\doc.lua:46 +msgid "" +"The stem of a Spindlestem is surprisingly sturdy, and despite their thinness " +"they can grow quite tall. They can be used as a wood substitute in many " +"crafting recipes." +msgstr "" + +#: df_trees\doc.lua:48 +msgid "" +"The cap of a Spindlestem, uncontaminated by any symbiotic luminescent " +"microorganisms." +msgstr "" + +#: df_trees\doc.lua:49 +msgid "These things are useless except as weak fuel for a fire." +msgstr "" + +#: df_trees\doc.lua:51 +msgid "" +"The cap of a Spindlestem, glowing a weak red due to symbiotic microorganisms." +msgstr "" + +#: df_trees\doc.lua:52 +msgid "" +"Red Spindlestems are a sign of nearby iron deposits - or perhaps Goblin " +"Caps. Their glowing symbiotes can be extracted as a long-lived light source, " +"though the glow is weak." +msgstr "" + +#: df_trees\doc.lua:54 +msgid "" +"The cap of a Spindlestem, glowing a soft green due to symbiotic " +"microorganisms." +msgstr "" + +#: df_trees\doc.lua:55 +msgid "" +"Green Spindlestems are a sign of nearby copper deposits. Their glowing " +"symbiotes can be extracted as a long-lived light source, though the glow is " +"not strong." +msgstr "" + +#: df_trees\doc.lua:57 +msgid "" +"The cap of a Spindlestem, glowing a strong cyan due to symbiotic " +"microorganisms." +msgstr "" + +#: df_trees\doc.lua:58 +msgid "" +"Cyan Spindlestems are a sign of both copper and iron deposits nearby. Their " +"glowing symbiotes can be extracted as a long-lived light source." +msgstr "" + +#: df_trees\doc.lua:60 +msgid "" +"The cap of a Spindlestem, glowing a brilliant yellow due to symbiotic " +"microorganisms." +msgstr "" + +#: df_trees\doc.lua:61 +msgid "" +"Golden Spindlestems are a sign of rare and magical mineral deposits nearby. " +"Their glowing symbiotes can be extracted as a strong and long-lived light " +"source." +msgstr "" + +#: df_trees\doc.lua:64 +msgid "Living extract from the cap of a red Spindlestem." +msgstr "" + +#: df_trees\doc.lua:66 +msgid "Living extract from the cap of a green Spindlestem." +msgstr "" + +#: df_trees\doc.lua:68 +msgid "Living extract from the cap of a cyan Spindlestem." +msgstr "" + +#: df_trees\doc.lua:70 +msgid "Living extract from the cap of a yellow Spindlestem." +msgstr "" + #: df_trees\fungiwood.lua:13 msgid "Fungiwood Stem" msgstr "" @@ -264,6 +354,42 @@ msgstr "" msgid "Nether Cap Spawn" msgstr "" +#: df_trees\spindlestem.lua:64 +msgid "Spindlestem" +msgstr "" + +#: df_trees\spindlestem.lua:97 +msgid "@1 Spindlestem Cap" +msgstr "" + +#: df_trees\spindlestem.lua:186 +msgid "@1 Spindlestem Extract" +msgstr "" + +#: df_trees\spindlestem.lua:234 +msgid "Spindlestem Spawn" +msgstr "" + +#: df_trees\spindlestem.lua:273 +msgid "White" +msgstr "" + +#: df_trees\spindlestem.lua:274 +msgid "Red" +msgstr "" + +#: df_trees\spindlestem.lua:275 +msgid "Green" +msgstr "" + +#: df_trees\spindlestem.lua:276 +msgid "Cyan" +msgstr "" + +#: df_trees\spindlestem.lua:277 +msgid "Golden" +msgstr "" + #: df_trees\spore_tree.lua:14 msgid "Spore Tree Stem" msgstr "" @@ -284,7 +410,7 @@ msgstr "" msgid "Spore Tree Spawn" msgstr "" -#: df_trees\spore_tree.lua:303 +#: df_trees\spore_tree.lua:306 msgid "Spore Tree Ladder" msgstr "" @@ -323,23 +449,23 @@ msgstr "" msgid "Tower Cap Spawn" msgstr "" -#: df_trees\tunnel_tube.lua:16 -#: df_trees\tunnel_tube.lua:39 -#: df_trees\tunnel_tube.lua:69 -#: df_trees\tunnel_tube.lua:98 +#: df_trees\tunnel_tube.lua:14 +#: df_trees\tunnel_tube.lua:37 +#: df_trees\tunnel_tube.lua:67 +#: df_trees\tunnel_tube.lua:96 msgid "Tunnel Tube" msgstr "" -#: df_trees\tunnel_tube.lua:135 +#: df_trees\tunnel_tube.lua:133 msgid "Tunnel Tube Plies" msgstr "" -#: df_trees\tunnel_tube.lua:172 -#: df_trees\tunnel_tube.lua:228 -#: df_trees\tunnel_tube.lua:248 +#: df_trees\tunnel_tube.lua:170 +#: df_trees\tunnel_tube.lua:226 +#: df_trees\tunnel_tube.lua:246 msgid "Tunnel Tube Fruiting Body" msgstr "" -#: df_trees\tunnel_tube.lua:279 +#: df_trees\tunnel_tube.lua:277 msgid "Tunnel Tube Spawn" msgstr "" diff --git a/df_trees/mod.conf b/df_trees/mod.conf index fb96131..c277cc2 100644 --- a/df_trees/mod.conf +++ b/df_trees/mod.conf @@ -1 +1,4 @@ -name = df_trees \ No newline at end of file +name = df_trees +description = Adds various types of underground fungal "trees". Light kills their saplings, they only grow in the dark. +depends = default +optional_depends = intllib, doc, moreblocks, stairs, vessels, basic_materials \ No newline at end of file diff --git a/df_trees/nether_cap.lua b/df_trees/nether_cap.lua index 85ff323..5bbef57 100644 --- a/df_trees/nether_cap.lua +++ b/df_trees/nether_cap.lua @@ -21,7 +21,9 @@ minetest.register_node("df_trees:nether_cap", { tiles = {"dfcaverns_nether_cap.png"}, is_ground_content = true, groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, puts_out_fire = 1, cools_lava = 1, freezes_water = 1 }, - sounds = default.node_sound_wood_defaults(), + sounds = default.node_sound_wood_defaults({ + footstep = {name = "default_snow_footstep", gain = 0.2}, + }), }) --gills diff --git a/df_trees/sounds/dfcaverns_fungus_footstep.1.ogg b/df_trees/sounds/dfcaverns_fungus_footstep.1.ogg new file mode 100644 index 0000000..3aec502 Binary files /dev/null and b/df_trees/sounds/dfcaverns_fungus_footstep.1.ogg differ diff --git a/df_trees/sounds/dfcaverns_fungus_footstep.2.ogg b/df_trees/sounds/dfcaverns_fungus_footstep.2.ogg new file mode 100644 index 0000000..97aaa8a Binary files /dev/null and b/df_trees/sounds/dfcaverns_fungus_footstep.2.ogg differ diff --git a/df_trees/sounds/dfcaverns_fungus_footstep.3.ogg b/df_trees/sounds/dfcaverns_fungus_footstep.3.ogg new file mode 100644 index 0000000..2a931c0 Binary files /dev/null and b/df_trees/sounds/dfcaverns_fungus_footstep.3.ogg differ diff --git a/df_trees/sounds/dfcaverns_fungus_footstep.4.ogg b/df_trees/sounds/dfcaverns_fungus_footstep.4.ogg new file mode 100644 index 0000000..ebeee6c Binary files /dev/null and b/df_trees/sounds/dfcaverns_fungus_footstep.4.ogg differ diff --git a/df_trees/sounds/license.txt b/df_trees/sounds/license.txt new file mode 100644 index 0000000..4833245 --- /dev/null +++ b/df_trees/sounds/license.txt @@ -0,0 +1 @@ +dfcaverns_fungus_footstep are from https://freesound.org/people/jakeh111/sounds/60853/ under CC-BY-SA 3.0 in 2008 by jakeh111 \ No newline at end of file diff --git a/df_trees/spindlestem.lua b/df_trees/spindlestem.lua new file mode 100644 index 0000000..046a9c8 --- /dev/null +++ b/df_trees/spindlestem.lua @@ -0,0 +1,340 @@ +-- internationalization boilerplate +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +local vessels = minetest.get_modpath("vessels") + +-- pre-declare +local get_spindlestem_cap_type + +-- Copied from subterrane's features.lua +-- Figured that was nicer than adding a dependency for just this little bit +local stem_on_place = function(itemstack, placer, pointed_thing) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return itemstack + end + if pt.type ~= "node" then + return itemstack + end + + local under = minetest.get_node(pt.under) + local above = minetest.get_node(pt.above) + + if minetest.is_protected(pt.above, placer:get_player_name()) then + minetest.record_protection_violation(pt.above, placer:get_player_name()) + return + end + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] or not minetest.registered_nodes[above.name] then + return itemstack + end + -- check if you can replace the node above the pointed node + if not minetest.registered_nodes[above.name].buildable_to then + return itemstack + end + + local new_param2 + -- check if pointing at an existing spindlestem + if minetest.get_item_group(under.name, "spindlestem") > 0 then + new_param2 = under.param2 + else + new_param2 = math.random(0,3) + end + + -- add the node and remove 1 item from the itemstack + minetest.add_node(pt.above, {name = itemstack:get_name(), param2 = new_param2}) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + return itemstack +end + +local growth_delay = function() + return math.random( + df_trees.config.tower_cap_delay_multiplier*df_trees.config.tree_min_growth_delay, + df_trees.config.tower_cap_delay_multiplier*df_trees.config.tree_max_growth_delay) +end + +local disp = 0.0625 -- adjusting position a bit + +minetest.register_node("df_trees:spindlestem_stem", { + description = S("Spindlestem"), + _doc_items_longdesc = df_trees.doc.spindlestem_desc, + _doc_items_usagehelp = df_trees.doc.spindlestem_usage, + is_ground_content = true, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, spindlestem = 1}, + sounds = default.node_sound_wood_defaults(), + tiles = { + "dfcaverns_tower_cap.png", + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.0625+disp, -0.5, -0.125+disp, 0.1875+disp, 0.5, 0.25+disp}, + {-0.125+disp, -0.5, -0.0625+disp, 0.25+disp, 0.5, 0.1875+disp}, + } + }, + on_place = stem_on_place, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "df_trees:spindlestem_stem", + burntime = 5, +}) + +local register_spindlestem_type = function(item_suffix, colour_name, colour_code, light_level) + local cap_item = "df_trees:spindlestem_cap_"..item_suffix + + minetest.register_node(cap_item, { + description = S("@1 Spindlestem Cap", colour_name), + is_ground_content = true, + _doc_items_longdesc = df_trees.doc["spindlestem_cap_"..item_suffix.."_desc"], + _doc_items_usagehelp = df_trees.doc["spindlestem_cap_"..item_suffix.."_usage"], + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, spindlestem = 1}, + sounds = default.node_sound_wood_defaults(), + tiles = { + "dfcaverns_tower_cap.png^[multiply:#"..colour_code, + "dfcaverns_spindlestem_cap.png^[multiply:#"..colour_code, + "dfcaverns_tower_cap.png^[multiply:#"..colour_code, + "dfcaverns_tower_cap.png^[multiply:#"..colour_code, + "dfcaverns_tower_cap.png^[multiply:#"..colour_code, + "dfcaverns_tower_cap.png^[multiply:#"..colour_code, + }, + light_source = light_level, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.1875+disp, -0.5, -0.3125+disp, 0.3125+disp, -0.3125, 0.4375+disp}, + {-0.3125+disp, -0.5, -0.1875+disp, 0.4375+disp, -0.3125, 0.3125+disp}, + {-0.0625+disp, -0.1875, -0.0625+disp, 0.1875+disp, -0.125, 0.1875+disp}, + {-0.1875+disp, -0.3125, -0.1875+disp, 0.3125+disp, -0.1875, 0.3125+disp}, + } + }, + + drop = { + -- Maximum number of items to drop + max_items = 1, + -- Choose max_items randomly from this list + items = { + { + items = {cap_item, "df_trees:spindlestem_seedling"}, -- Items to drop + rarity = 2, -- Probability of dropping is 1 / rarity + }, + { + items = {cap_item, "df_trees:spindlestem_seedling", "df_trees:spindlestem_seedling"}, -- Items to drop + rarity = 2, -- Probability of dropping is 1 / rarity + }, + { + items = {cap_item, "df_trees:spindlestem_seedling", "df_trees:spindlestem_seedling", "df_trees:spindlestem_seedling"}, -- Items to drop + rarity = 2, -- Probability of dropping is 1 / rarity + }, + { + items = {cap_item}, -- Items to drop + rarity = 1, -- Probability of dropping is 1 / rarity + }, + }, + }, + + on_place = stem_on_place, + on_timer = function(pos, elapsed) + local above = vector.add(pos, {x=0,y=1,z=0}) + local node_above = minetest.get_node(above) + local above_def = minetest.registered_nodes[node_above.name] + if not above_def or not above_def.buildable_to then + -- can't grow any more, exit + return + end + local meta = minetest.get_meta(pos) + local height = meta:get_int("spindlestem_to_grow") + local node = minetest.get_node(pos) + minetest.set_node(pos, {name="df_trees:spindlestem_stem", param2 = node.param2}) + minetest.set_node(above, {name=cap_item, param2 = node.param2}) + height = height - 1 + if height > 0 then + meta = minetest.get_meta(above) + meta:set_int("spindlestem_to_grow", height) + minetest.get_node_timer(above):start(growth_delay()) + end + end, + }) + + minetest.register_craft({ + type = "fuel", + recipe = cap_item, + burntime = 10, + }) + + local c_stem = minetest.get_content_id("df_trees:spindlestem_stem") + local c_cap = minetest.get_content_id(cap_item) + + if vessels and light_level > 0 then + local tex = "dfcaverns_vessels_glowing_liquid.png^[multiply:#"..colour_code.."^vessels_glass_bottle.png" + local new_light = light_level + math.floor((minetest.LIGHT_MAX-light_level)/2) + minetest.register_node("df_trees:glowing_bottle_"..item_suffix, { + description = S("@1 Spindlestem Extract", colour_name), + drawtype = "plantlike", + _doc_items_longdesc = df_trees.doc["spindlestem_extract_"..item_suffix.."_desc"], + _doc_items_usagehelp = df_trees.doc["spindlestem_extract_"..item_suffix.."_usage"], + tiles = {tex}, + inventory_image = tex, + wield_image = tex, + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), + light_source = new_light, + }) + + minetest.register_craft( { + output = "df_trees:glowing_bottle_"..item_suffix.." 3", + type = "shapeless", + recipe = { + "vessels:glass_bottle", + "vessels:glass_bottle", + "vessels:glass_bottle", + cap_item, + } + }) + + minetest.register_craft( { + output = "vessels:glass_bottle", + type = "shapeless", + recipe = { + "df_trees:glowing_bottle_"..item_suffix, + } + }) + end +end + +local seedling_construct = function(pos) + local below_node = minetest.get_node(vector.add(pos, {x=0,y=-1,z=0})) + if minetest.get_item_group(below_node.name, "soil") > 0 then + minetest.get_node_timer(pos):start(growth_delay()) + end +end + +minetest.register_node("df_trees:spindlestem_seedling", { + description = S("Spindlestem Spawn"), + _doc_items_longdesc = df_trees.doc.spindlestem_desc, + _doc_items_usagehelp = df_trees.doc.spindlestem_usage, + tiles = { + "dfcaverns_tower_cap.png", + }, + groups = {snappy = 3, flammable = 2, plant = 1, attached_node = 1, light_sensitive_fungus = 11, digtron_on_place=1}, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + floodable = true, + node_box = { + type = "fixed", + fixed = { + {-0.0625 + 0.125, -0.5, -0.125 + 0.125, 0.125 + 0.125, -0.375, 0.0625 + 0.125}, + } + }, + + on_place = stem_on_place, + on_construct = seedling_construct, + + on_timer = function(pos, elapsed) + local cap_item = minetest.get_name_from_content_id(get_spindlestem_cap_type(pos)) + local node = minetest.get_node(pos) + minetest.set_node(pos, {name=cap_item, param2 = node.param2}) + local meta = minetest.get_meta(pos) + local disp = {x=3, y=3, z=3} + local nearby = minetest.find_nodes_in_area(vector.add(pos, disp), vector.subtract(pos, disp), {"group:spindlestem"}) + local count = #nearby + local height = math.random(1,3) + if count > 10 then height = height + 2 end -- if there are a lot of nearby spindlestems, grow taller + if height > 0 then + meta:set_int("spindlestem_to_grow", height) + minetest.get_node_timer(pos):start(growth_delay()) + end + end, +}) + +register_spindlestem_type("white", S("White"), "FFFFFF", 0) +register_spindlestem_type("red", S("Red"), "FFC3C3", 3) +register_spindlestem_type("green", S("Green"), "C3FFC3", 4) +register_spindlestem_type("cyan", S("Cyan"), "C3FFFF", 6) +register_spindlestem_type("golden", S("Golden"), "FFFFC3", 12) + +local c_air = minetest.get_content_id("air") +local c_stem = minetest.get_content_id("df_trees:spindlestem_stem") + +df_trees.spawn_spindlestem_vm = function(vi, area, data, data_param2, c_cap) + if data[vi] ~= c_air then return end + + if c_cap == nil then + -- note: this won't account for rock removed by subterrane, so may not be entirely accurate. Good enough! + c_cap = get_spindlestem_cap_type(area:position(vi)) + end + + local stem_height = math.random(1,3) + local param2 = math.random(1,4)-1 + local i = 0 + local top = 0 + local index + while i <= stem_height do + index = vi + i * area.ystride + if data[index] == c_air then + data[index] = c_stem + data_param2[index] = param2 + top = i + else + i = 100 + end + i = i + 1 + end + index = vi + top * area.ystride + data[index] = c_cap +end + +local c_white = minetest.get_content_id("df_trees:spindlestem_cap_white") +local c_red = minetest.get_content_id("df_trees:spindlestem_cap_red") +local c_green = minetest.get_content_id("df_trees:spindlestem_cap_green") +local c_cyan = minetest.get_content_id("df_trees:spindlestem_cap_cyan") +local c_golden = minetest.get_content_id("df_trees:spindlestem_cap_golden") + +get_spindlestem_cap_type = function(pos) + if pos.y > -100 or minetest.find_node_near(pos, 15, "group:tower_cap") then + return c_white + end + if minetest.find_node_near(pos, 15, "group:goblin_cap") then + return c_red + end + + local iron = minetest.find_node_near(pos, 5, {"default:stone_with_iron", "default:steelblock"}) + local copper = minetest.find_node_near(pos, 5, {"default:stone_with_copper", "default:copperblock"}) + local mese = minetest.find_node_near(pos, 5, {"default:stone_with_mese", "default:mese"}) + local possibilities = {} + + if mese then table.insert(possibilities, c_golden) end + if copper then table.insert(possibilities, c_green) end + if iron then table.insert(possibilities, c_red) end + if iron and copper then table.insert(possibilities, c_cyan) end + + if #possibilities == 0 then + return c_white + else + local pick = math.random(1, #possibilities) + return possibilities[pick] + end +end diff --git a/df_trees/spore_tree.lua b/df_trees/spore_tree.lua index 65efd43..bdc4381 100644 --- a/df_trees/spore_tree.lua +++ b/df_trees/spore_tree.lua @@ -167,9 +167,12 @@ minetest.register_node("df_trees:spore_tree_sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random( - df_trees.config.spore_tree_delay_multiplier*df_trees.config.tree_min_growth_delay, - df_trees.config.spore_tree_delay_multiplier*df_trees.config.tree_max_growth_delay)) + local below_node = minetest.get_node(vector.add(pos, {x=0,y=-1,z=0})) + if minetest.get_item_group(below_node.name, "soil") > 0 then + minetest.get_node_timer(pos):start(math.random( + df_trees.config.spore_tree_delay_multiplier*df_trees.config.tree_min_growth_delay, + df_trees.config.spore_tree_delay_multiplier*df_trees.config.tree_max_growth_delay)) + end end, on_timer = function(pos) diff --git a/df_trees/textures/dfcaverns_goblin_cap.png b/df_trees/textures/dfcaverns_goblin_cap.png index 61ce2a6..d8b23d3 100644 Binary files a/df_trees/textures/dfcaverns_goblin_cap.png and b/df_trees/textures/dfcaverns_goblin_cap.png differ diff --git a/df_trees/textures/dfcaverns_nether_cap_stem.png b/df_trees/textures/dfcaverns_nether_cap_stem.png index 0973747..f440bf3 100644 Binary files a/df_trees/textures/dfcaverns_nether_cap_stem.png and b/df_trees/textures/dfcaverns_nether_cap_stem.png differ diff --git a/df_trees/textures/dfcaverns_spindlestem_cap.png b/df_trees/textures/dfcaverns_spindlestem_cap.png new file mode 100644 index 0000000..ab186d2 Binary files /dev/null and b/df_trees/textures/dfcaverns_spindlestem_cap.png differ diff --git a/df_trees/textures/dfcaverns_spore_tree_sapling.png b/df_trees/textures/dfcaverns_spore_tree_sapling.png index f53fa8f..153bf18 100644 Binary files a/df_trees/textures/dfcaverns_spore_tree_sapling.png and b/df_trees/textures/dfcaverns_spore_tree_sapling.png differ diff --git a/df_trees/textures/dfcaverns_spore_tree_wood.png b/df_trees/textures/dfcaverns_spore_tree_wood.png index b206019..f31ac30 100644 Binary files a/df_trees/textures/dfcaverns_spore_tree_wood.png and b/df_trees/textures/dfcaverns_spore_tree_wood.png differ diff --git a/df_trees/textures/dfcaverns_torchspine_3.5.png b/df_trees/textures/dfcaverns_torchspine_3.5.png index 8023c93..28baee2 100644 Binary files a/df_trees/textures/dfcaverns_torchspine_3.5.png and b/df_trees/textures/dfcaverns_torchspine_3.5.png differ diff --git a/df_trees/textures/dfcaverns_tunnel_tube.png b/df_trees/textures/dfcaverns_tunnel_tube.png index c59495b..bf5394e 100644 Binary files a/df_trees/textures/dfcaverns_tunnel_tube.png and b/df_trees/textures/dfcaverns_tunnel_tube.png differ diff --git a/df_trees/textures/dfcaverns_tunnel_tube_wood_side.png b/df_trees/textures/dfcaverns_tunnel_tube_wood_side.png index 80f0e93..1122e88 100644 Binary files a/df_trees/textures/dfcaverns_tunnel_tube_wood_side.png and b/df_trees/textures/dfcaverns_tunnel_tube_wood_side.png differ diff --git a/df_trees/textures/dfcaverns_vessels_glowing_liquid.png b/df_trees/textures/dfcaverns_vessels_glowing_liquid.png new file mode 100644 index 0000000..0c11d73 Binary files /dev/null and b/df_trees/textures/dfcaverns_vessels_glowing_liquid.png differ diff --git a/df_trees/tower_cap.lua b/df_trees/tower_cap.lua index bc5fc35..c8a54c2 100644 --- a/df_trees/tower_cap.lua +++ b/df_trees/tower_cap.lua @@ -9,8 +9,8 @@ minetest.register_node("df_trees:tower_cap_stem", { _doc_items_usagehelp = df_trees.doc.tower_cap_usage, tiles = {"dfcaverns_tower_cap.png"}, is_ground_content = true, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, tower_cap = 1}, + sounds = df_trees.node_sound_tree_soft_fungus_defaults(), }) --cap @@ -20,8 +20,8 @@ minetest.register_node("df_trees:tower_cap", { _doc_items_usagehelp = df_trees.doc.tower_cap_usage, tiles = {"dfcaverns_tower_cap.png"}, is_ground_content = true, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_wood_defaults(), + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, tower_cap = 1}, + sounds = df_trees.node_sound_tree_soft_fungus_defaults(), }) --gills @@ -31,7 +31,7 @@ minetest.register_node("df_trees:tower_cap_gills", { _doc_items_usagehelp = df_trees.doc.tower_cap_usage, tiles = {"dfcaverns_tower_cap_gills.png"}, is_ground_content = true, - groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, + groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1, tower_cap = 1}, sounds = default.node_sound_leaves_defaults(), drawtype = "plantlike", paramtype = "light", @@ -50,7 +50,7 @@ minetest.register_node("df_trees:tower_cap_gills", { after_place_node = default.after_place_leaves, }) -if default.register_leafdecay then -- default.register_leafdecay is very new, remove this check some time after 0.4.16 is released +if default.register_leafdecay then -- default.register_leafdecay is new, remove this check some time after 0.4.16 is released default.register_leafdecay({ trunks = {"df_trees:tower_cap"}, -- don't need stem nodes here leaves = {"df_trees:tower_cap_gills"}, @@ -136,9 +136,12 @@ minetest.register_node("df_trees:tower_cap_sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random( - df_trees.config.tower_cap_delay_multiplier*df_trees.config.tree_min_growth_delay, - df_trees.config.tower_cap_delay_multiplier*df_trees.config.tree_max_growth_delay)) + local below_node = minetest.get_node(vector.add(pos, {x=0,y=-1,z=0})) + if minetest.get_item_group(below_node.name, "soil") > 0 then + minetest.get_node_timer(pos):start(math.random( + df_trees.config.tower_cap_delay_multiplier*df_trees.config.tree_min_growth_delay, + df_trees.config.tower_cap_delay_multiplier*df_trees.config.tree_max_growth_delay)) + end end, on_timer = function(pos) diff --git a/df_trees/tunnel_tube.lua b/df_trees/tunnel_tube.lua index 73708e1..46a859b 100644 --- a/df_trees/tunnel_tube.lua +++ b/df_trees/tunnel_tube.lua @@ -295,9 +295,12 @@ minetest.register_node("df_trees:tunnel_tube_sapling", { sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random( - df_trees.config.tunnel_tube_delay_multiplier*df_trees.config.tree_min_growth_delay, - df_trees.config.tunnel_tube_delay_multiplier*df_trees.config.tree_max_growth_delay)) + local below_node = minetest.get_node(vector.add(pos, {x=0,y=-1,z=0})) + if minetest.get_item_group(below_node.name, "soil") > 0 then + minetest.get_node_timer(pos):start(math.random( + df_trees.config.tunnel_tube_delay_multiplier*df_trees.config.tree_min_growth_delay, + df_trees.config.tunnel_tube_delay_multiplier*df_trees.config.tree_max_growth_delay)) + end end, on_timer = function(pos) diff --git a/df_underworld_items/glowing_pit_plasma.lua b/df_underworld_items/glowing_pit_plasma.lua index 3fff9cf..3fe263c 100644 --- a/df_underworld_items/glowing_pit_plasma.lua +++ b/df_underworld_items/glowing_pit_plasma.lua @@ -138,9 +138,18 @@ if df_underworld_items.config.destructive_pit_plasma then for y = pos.y-1, pos.y+1 do for z = pos.z-1, pos.z+1 do local test_pos = {x=x, y=y, z=z} - if minetest.get_item_group(minetest.get_node(test_pos).name, "pit_plasma_resistant") == 0 then + local node_name = minetest.get_node(test_pos).name + if minetest.get_item_group(node_name, "pit_plasma_resistant") == 0 then sparkle_pos = test_pos - minetest.set_node(test_pos, {name="air"}) + if minetest.get_item_group(node_name, "stone") > 0 then + if math.random() < 0.66 then + minetest.set_node(test_pos, {name="df_underworld_items:glow_amethyst"}) + else + minetest.set_node(test_pos, {name="default:lava_source"}) + end + else + minetest.set_node(test_pos, {name="air"}) + end end end end diff --git a/df_underworld_items/mod.conf b/df_underworld_items/mod.conf index be3dd5e..1a841d5 100644 --- a/df_underworld_items/mod.conf +++ b/df_underworld_items/mod.conf @@ -1 +1,4 @@ -name = df_underworld_items \ No newline at end of file +name = df_underworld_items +description = Various node types used by the dfcaverns mapgen mod for its underworld layer. +depends = default, stairs +optional_depends = intllib, doc, radiant_damage, mesecons_mvps, tnt diff --git a/df_underworld_items/textures/dfcaverns_glowpit_particle.png b/df_underworld_items/textures/dfcaverns_glowpit_particle.png index 7fcd62a..301094d 100644 Binary files a/df_underworld_items/textures/dfcaverns_glowpit_particle.png and b/df_underworld_items/textures/dfcaverns_glowpit_particle.png differ diff --git a/df_underworld_items/textures/dfcaverns_slade.png b/df_underworld_items/textures/dfcaverns_slade.png index 3530911..97ed8c1 100644 Binary files a/df_underworld_items/textures/dfcaverns_slade.png and b/df_underworld_items/textures/dfcaverns_slade.png differ diff --git a/guide.md b/guide.md index 21e37e7..f499edd 100644 --- a/guide.md +++ b/guide.md @@ -78,6 +78,16 @@ Fungiwoods have thinner stalks that sprout numerous thin irregular "shelves" bra Plump helmets and cave wheat grow here. +## Spindlestems + +![Spindlestems](./df_caverns/screenshots/spindlestems.jpg) + +Spindlestem mushrooms are the weedy "saplings" of the upper fungal forests, too large to pick by hand but not exactly inspiring tree-like analogies. They are common, though, and not without their uses. Their long stems can serve as a wood substutitue in many crafts and their bioluminescent caps can produce a long-lived glowing extract that's useful as a source of light. They grow taller when crowded. + +The bioluminescence of Spindlestems are actually a very interesting feature. Despite their apparent visual diversity, Spindlestems are a single species. They pick up their glow from symbiotic microorganisms that colonize their caps, and the specific breed of symbiote that thrives in any given Spindlestem depends on the minerals present in the nearby rocks. Iron results in a weak red-glowing cap, copper results in a green-tinted cap, and the combination of both can result in a brighter cyan glow. Brilliant yellow "Golden Spindlestems" have also been spotted. + +For some reason, Spindlestems that grow in the presence of Tower Caps are never luminescent. Perhaps they're intimidated. + # Second cavern layer By default, the second cavern layer can be found between -800 and -1400 meters elevation. Like the first layer, some caverns contain lakes filling their lower regions. The dry barren caverns at this level will have some occasional ruby crystal growths in them, but they will be detailed in an entry on the third cavern layer where they're much more common. @@ -86,7 +96,9 @@ By default, the second cavern layer can be found between -800 and -1400 meters e ![Goblin Caps](./df_caverns/screenshots/goblin_cap.jpg) -Goblin caps are the broader, squatter cousins of the Tower Cap fungus. Like Tower Caps they have no particular special properties, but their wood comes in two different colours - the reddish orange of their caps and the cream coloured stem wood. Plump helmets grow here. +Goblin caps are the broader, squatter cousins of the Tower Cap fungus. Like Tower Caps they have no particular special properties, but their wood comes in two different colours - the reddish orange of their caps and the cream coloured stem wood. Plump helmets and Spindlestems grow here. + +For some reason, Spindlestems that grow in the presence of Goblin Caps are always red. ## Spore Tree caverns @@ -104,6 +116,12 @@ Tunnel tubes are hollow, curved fungal growths that support a fruiting body at t Sweet pods and cave wheat can be found growing in tunnel tube caverns. +## Cave pearls + +![Cave Pearls](./df_caverns/screenshots/cave_pearls.jpg) + +At these depths you may find a distinctive and beautiful formation encrusting the ceilings and walls of smaller tunnels and warrens; "cave pearls." These nodules are actually calcified bacterial colonies that can only form where they're left undisturbed for the long periods needed for them to grow this large. + # Third cavern layer The third cavern layer is where things start to get really exotic. Black Caps, Nethercaps, Bloodthorn and reddish glowing crystal formations are found here. Those caverns that are partly-flooded have unusual features thanks to the strange life sharing them. By default the third cavern layer runs from -1400 to -2000 meters. @@ -132,7 +150,9 @@ Ice sprites, mysterious glowing insect-like creatures that appear to be made par Bloodthorns are cactus-like in appearance and habitat, growing in dry sandy caverns, but they are far more agressive about seeking moisture than their surface kin. Bloodthorns have thick spines projecting randomly from their trunks that are coated in smaller barbs that greedily drain fluids from any creature that touches them. You can climb a bloodthorn quite easily, using its spines like rungs on a ladder, but it will hurt to do so. Bloodthorn caverns are dimly lit so take care not to blunder into the rows of bloodthorns that grow like living fences. -Lakes are never found in Bloodthorn caverns. Quarry bushes can be found here. +Lakes are never found in Bloodthorn caverns and the cracks in the rock that would normally seep moisture are choked with crystals of salt. Some of the salts seem to containe traces of Mese, giving them a faint unearthly glow. + +Quarry bushes can be found here. ## Barren crystal caverns @@ -164,6 +184,8 @@ Venturing below the Sunless Sea will require either a great deal of digging thro Eventually, at around -2600 meters elevation, an explorer may encounter lakes of oil in lenticular caverns. Falling into a lake of oil is an unpleasant experience - one is completely blind when below the surface - but that's not the real danger. The atmosphere above the oil is filled with unbreathable gasses that are explosive when mixed with air and an ignition source (such as a carelessly placed torch). Even in the tunnels above the oil there are occasional gas seeps venting this gas from cracks and seams of coal. This gas is heavier than air and will pool in depressions, and of course it cannot be swum through so take care not to jump down into a place you can't easily climb back out of. +A few mysterious blue flames may occasionally be found flickering on the edges of oil lakes, burning without oxygen and seeming to maintain their size as they drift about through the unbreathable atmosphere. These "gas wisps" may be a strange form of plasmoidal life but they are easily snuffed and so little is known about them. + Buckets of oil serve as an excellent fuel source, powering a furnace as well as a block of coal. # Magma Sea @@ -182,6 +204,8 @@ The foundations of the world lie at -3100 meters, under a default configuration. There is no native life in the Underworld. It appears there once _was_, however. Occasional clusters of vacant buildings can be found, impossibly crafted from bricks of Slade and empty of any furnishings. Around those clusters of vacant buildings are fields filled with sealed pits lined with flawless Slade blocks. It is unclear whether these pits are as vacant as the buildings, though. The seals capping them are engraved with ancient words in lost tongues, but one phrase can be translated from the oldest known languages: "This Place is Not a Place of Honor." +Just as ominously, the ancient bones of long-dead warriors are scattered amidst the buildings. They contain loot for those willing to risk disturbing them. There are no traces of who - or what - they died fighting. + ![Glowing pit](./df_caverns/screenshots/glowing_pit.jpg) Also scattered around the Underworld are the occasional twisting shaft leading down into the Slade. The edges of these shafts are encrusted with glowing purple crystals and the bottoms of these shafts are filled with some form of shimmering liquid that destroys whatever tries to penetrate it. \ No newline at end of file diff --git a/ice_sprites/mod.conf b/ice_sprites/mod.conf index a7a79f2..b4adb34 100644 --- a/ice_sprites/mod.conf +++ b/ice_sprites/mod.conf @@ -1 +1,4 @@ -name = ice_sprites \ No newline at end of file +name = ice_sprites +description = Glowing blue firefly-like nodes +depends = +optional_depends = fireflies, vessels, doc, intllib \ No newline at end of file diff --git a/ice_sprites/textures/ice_sprites_bottle.png b/ice_sprites/textures/ice_sprites_bottle.png index 73a1e0f..21f0a11 100644 Binary files a/ice_sprites/textures/ice_sprites_bottle.png and b/ice_sprites/textures/ice_sprites_bottle.png differ diff --git a/mapgen_helper b/mapgen_helper index 47f6791..970defb 160000 --- a/mapgen_helper +++ b/mapgen_helper @@ -1 +1 @@ -Subproject commit 47f6791fb3d6e5da00e5c6f3fff4e4412223d9a1 +Subproject commit 970defba65ec69dd78008d1bef4ac82f44f22bab diff --git a/mine_gas/init.lua b/mine_gas/init.lua index b69f39f..4eb38aa 100644 --- a/mine_gas/init.lua +++ b/mine_gas/init.lua @@ -1,6 +1,8 @@ local MP = minetest.get_modpath(minetest.get_current_modname()) local S, NS = dofile(MP.."/intllib.lua") +dofile(MP.."/wisp.lua") + local gas_desc local gas_usage @@ -150,6 +152,10 @@ if minetest.get_modpath("tnt") then action = function(pos, node) if minetest.find_node_near(pos, 1, "air") then tnt.boom(pos, {radius=1, damage_radius=6}) + -- One in a hundred explosions will spawn a gas wisp + if math.random() < 0.01 then + minetest.set_node(pos, {name="mine_gas:gas_wisp"}) + end end end, }) diff --git a/mine_gas/locale/template.pot b/mine_gas/locale/template.pot index 5d636fd..934d3e1 100644 --- a/mine_gas/locale/template.pot +++ b/mine_gas/locale/template.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-26 00:49-0600\n" +"POT-Creation-Date: 2019-08-05 20:30-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,35 +17,52 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: dfcaverns\mine_gas\init.lua:11 +#: mine_gas\init.lua:13 msgid "" "Gaseous hydrocarbons formed from the detritus of long dead plants and " "animals processed by heat and pressure deep within the earth." msgstr "" -#: dfcaverns\mine_gas\init.lua:12 +#: mine_gas\init.lua:14 msgid "" "Gas is highly hazardous. Heavier than air, it pools in deep caverns and " "asphyxiates the unwary." msgstr "" -#: dfcaverns\mine_gas\init.lua:14 +#: mine_gas\init.lua:16 msgid "" "When exposed to air and an ignition source it can produce a deadly explosion." msgstr "" -#: dfcaverns\mine_gas\init.lua:17 +#: mine_gas\init.lua:19 msgid "Some coal deposits have cracks that seep a steady flow of mine gas." msgstr "" -#: dfcaverns\mine_gas\init.lua:18 +#: mine_gas\init.lua:20 msgid "Mining out such a deposit seals the crack." msgstr "" -#: dfcaverns\mine_gas\init.lua:26 +#: mine_gas\init.lua:28 msgid "Mine Gas" msgstr "" -#: dfcaverns\mine_gas\init.lua:46 +#: mine_gas\init.lua:48 msgid "Gas Seep" msgstr "" + +#: mine_gas\wisp.lua:8 +msgid "" +"Mysterious blue flames may occasionally be found flickering on the edges of " +"oil lakes, burning without oxygen and seeming to maintain their size as they " +"drift about through the unbreathable atmosphere." +msgstr "" + +#: mine_gas\wisp.lua:9 +msgid "" +"Gas Wisps have no known use, and fortunately they are not hostile or very " +"dangerous." +msgstr "" + +#: mine_gas\wisp.lua:13 +msgid "Gas Wisp" +msgstr "" diff --git a/mine_gas/mod.conf b/mine_gas/mod.conf index 444e665..df1730e 100644 --- a/mine_gas/mod.conf +++ b/mine_gas/mod.conf @@ -1 +1,4 @@ -name = mine_gas \ No newline at end of file +name = mine_gas +description = An explosive, asphyxiating heavier-than-air gas to add hazards to caves +depends = default +optional_depends = tnt, doc \ No newline at end of file diff --git a/mine_gas/textures/mine_gas_wisp.png b/mine_gas/textures/mine_gas_wisp.png new file mode 100644 index 0000000..7c9f7d1 Binary files /dev/null and b/mine_gas/textures/mine_gas_wisp.png differ diff --git a/mine_gas/textures/mine_gas_wisp_inventory.png b/mine_gas/textures/mine_gas_wisp_inventory.png new file mode 100644 index 0000000..612dcea Binary files /dev/null and b/mine_gas/textures/mine_gas_wisp_inventory.png differ diff --git a/mine_gas/wisp.lua b/mine_gas/wisp.lua new file mode 100644 index 0000000..b8e9c86 --- /dev/null +++ b/mine_gas/wisp.lua @@ -0,0 +1,86 @@ +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +local wisp_desc +local wisp_usage + +if minetest.get_modpath("doc") then + wisp_desc = S("Mysterious blue flames may occasionally be found flickering on the edges of oil lakes, burning without oxygen and seeming to maintain their size as they drift about through the unbreathable atmosphere.") + wisp_usage = S("Gas Wisps have no known use, and fortunately they are not hostile or very dangerous.") +end + +minetest.register_node("mine_gas:gas_wisp", { + description = S("Gas Wisp"), + _doc_items_longdesc = wisp_desc, + _doc_items_usagehelp = wisp_usage, + walkable = false, + diggable = false, + buildable_to = true, + drawtype = "plantlike", + waving = 1, + drowning = 1, + damage_per_second = 4, + post_effect_color = {a = 20, r = 20, g = 20, b = 250}, + tiles = {{name = "mine_gas_wisp.png", animation = + { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.5, + }, + }}, + light_source = 10, + use_texture_alpha = true, + groups = {not_in_creative_inventory=0}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 0, + -- * bit 4 (0x10, decimal 16) - Makes the plant mesh 1.4x larger + inventory_image = "mine_gas_wisp_inventory.png", + drop = {}, + sunlight_propagates = true, + on_blast = function() end, -- unaffected by explosions +}) + +minetest.register_abm({ + label = "mine_gas:gas wisp movement", + nodenames = {"mine_gas:gas_wisp"}, + neighbors = {"mine_gas:gas"}, + interval = 1.0, + chance = 10, + catch_up = true, + action = function(pos, node) + local next_pos = {x=pos.x+math.random(1,3)-2, y=pos.y+math.random(1,3)-2, z=pos.z+math.random(1,3)-2} + local next_node = minetest.get_node(next_pos) + if next_node.name == "mine_gas:gas" then + minetest.swap_node(next_pos, node) + minetest.swap_node(pos, next_node) + end + pos = next_pos + + end, +}) + +minetest.register_abm({ + label = "mine_gas:gas wisp extinguish", + nodenames = {"mine_gas:gas_wisp"}, + neighbors = {"air"}, + interval = 10, + chance = 1, + catch_up = true, + action = function(pos, node) + for y = -1, 1 do + for x = -1, 1 do + for z = -1, 1 do + local node_name = minetest.get_node({x=pos.x+x, y=pos.y+y, z=pos.z+z}).name + if node_name == "mine_gas:gas" or minetest.get_item_group(node_name, "flammable") > 0 then + -- there's gas or a flammable adjacent, don't extinguish + return + end + end + end + end + -- no gas adjacent, extinguish + minetest.set_node(pos, {name="air"}) + end, +}) \ No newline at end of file diff --git a/minetestmapper colors.txt b/minetestmapper colors.txt index 5f21885..002d3d6 100644 --- a/minetestmapper colors.txt +++ b/minetestmapper colors.txt @@ -1,141 +1,243 @@ -#dfcaverns -df_farming:cave_wheat_1 211 211 211 -df_farming:cave_wheat_2 211 211 211 -df_farming:cave_wheat_3 211 211 211 -df_farming:cave_wheat_4 211 211 211 -df_farming:cave_wheat_5 211 211 211 -df_farming:cave_wheat_6 211 211 211 -df_farming:cave_wheat_7 211 211 211 -df_farming:cave_wheat_8 211 211 211 -df_farming:cave_wheat_seed 211 211 211 -df_farming:cavern_fungi 138 105 157 -df_farming:dead_fungus 106 76 52 -df_farming:dimple_cup_1 51 40 175 -df_farming:dimple_cup_2 51 40 175 -df_farming:dimple_cup_3 51 40 175 -df_farming:dimple_cup_4 51 40 175 -df_farming:dimple_cup_seed 51 40 175 -df_farming:pig_tail_1 185 185 185 -df_farming:pig_tail_2 185 185 185 -df_farming:pig_tail_3 185 185 185 -df_farming:pig_tail_4 185 185 185 -df_farming:pig_tail_5 185 185 185 -df_farming:pig_tail_6 185 185 185 -df_farming:pig_tail_7 185 185 185 +df_farming:cave_wheat_1 154 200 200 +df_farming:cave_wheat_2 164 200 200 +df_farming:cave_wheat_3 179 204 204 +df_farming:cave_wheat_4 187 204 204 +df_farming:cave_wheat_5 188 200 200 +df_farming:cave_wheat_6 187 193 193 +df_farming:cave_wheat_7 196 196 196 +df_farming:cave_wheat_8 207 207 207 +df_farming:cave_wheat_seed 112 205 205 +df_farming:cavern_fungi 169 144 184 +df_farming:dead_fungus 135 117 104 +df_farming:dimple_cup_1 56 48 154 +df_farming:dimple_cup_2 78 72 151 +df_farming:dimple_cup_3 79 73 154 +df_farming:dimple_cup_4 74 67 156 +df_farming:dimple_cup_seed 45 36 152 +df_farming:dwarven_syrup_flowing 175 124 79 +df_farming:dwarven_syrup_source 175 124 79 +df_farming:pig_tail_1 177 177 177 +df_farming:pig_tail_2 180 180 180 +df_farming:pig_tail_3 181 181 181 +df_farming:pig_tail_4 183 183 183 +df_farming:pig_tail_5 183 183 183 +df_farming:pig_tail_6 184 184 184 +df_farming:pig_tail_7 184 184 184 df_farming:pig_tail_8 185 185 185 -df_farming:pig_tail_seed 185 185 185 -df_farming:plump_helmet_1 126 0 126 -df_farming:plump_helmet_2 126 0 126 -df_farming:plump_helmet_3 126 0 126 -df_farming:plump_helmet_4 126 0 126 -df_farming:plump_helmet_spawn 126 0 126 -df_farming:quarry_bush_1 75 75 75 -df_farming:quarry_bush_2 75 75 75 -df_farming:quarry_bush_3 75 75 75 -df_farming:quarry_bush_4 75 75 75 -df_farming:quarry_bush_5 75 75 75 -df_farming:quarry_bush_seed 75 75 75 -df_farming:sweet_pod_1 221 102 102 -df_farming:sweet_pod_2 221 102 102 -df_farming:sweet_pod_3 221 102 102 -df_farming:sweet_pod_4 221 102 102 -df_farming:sweet_pod_5 221 102 102 -df_farming:sweet_pod_6 221 102 102 -df_farming:sweet_pod_seed 221 102 102 - -df_mapitems:big_crystal 206 44 39 -df_mapitems:big_crystal_30 206 44 39 -df_mapitems:big_crystal_30_45 206 44 39 -df_mapitems:cave_coral_1 99 73 69 -df_mapitems:cave_coral_2 99 73 69 -df_mapitems:cave_coral_3 99 73 69 -df_mapitems:cobble_with_floor_fungus 132 129 117 -df_mapitems:cobble_with_floor_fungus_fine 110 106 99 -df_mapitems:dirt_with_cave_moss 82 165 164 -df_mapitems:dry_flowstone 153 148 147 -df_mapitems:dry_stal_1 153 148 147 -df_mapitems:dry_stal_2 153 148 147 -df_mapitems:dry_stal_3 153 148 147 -df_mapitems:dry_stal_4 153 148 147 -df_mapitems:glow_mese 220 220 0 -df_mapitems:glow_ruby_ore 206 44 39 -df_mapitems:glow_worm 135 206 235 -df_mapitems:ice_with_hoar_moss 99 171 190 -df_mapitems:icicle_1 167 206 247 -df_mapitems:icicle_2 167 206 247 -df_mapitems:icicle_3 167 206 247 -df_mapitems:icicle_4 167 206 247 -df_mapitems:med_crystal 206 44 39 -df_mapitems:med_crystal_30 206 44 39 -df_mapitems:med_crystal_30_45 206 44 39 -df_mapitems:mese_crystal 220 220 0 -df_mapitems:snareweed 49 71 74 -df_mapitems:veinstone 78 28 36 -df_mapitems:wet_flowstone 173 167 166 -df_mapitems:wet_stal_1 173 167 166 -df_mapitems:wet_stal_2 173 167 166 -df_mapitems:wet_stal_3 173 167 166 -df_mapitems:wet_stal_4 173 167 166 - -df_trees:black_cap 57 57 57 -df_trees:black_cap_gills 57 57 57 -df_trees:black_cap_stem 57 57 57 -df_trees:blood_thorn 141 6 20 -df_trees:blood_thorn_spike 141 6 20 -df_trees:fungiwood 226 212 117 -df_trees:fungiwood_shelf 226 212 117 -df_trees:goblin_cap 250 101 24 -df_trees:goblin_cap_gills 250 101 24 -df_trees:goblin_cap_stem 250 101 24 -df_trees:nether_cap 8 27 95 -df_trees:nether_cap_gills 8 27 95 -df_trees:nether_cap_stem 8 27 95 -df_trees:spore_tree 217 217 217 -df_trees:spore_tree_fruiting_body 217 217 217 -df_trees:spore_tree_hyphae 217 217 217 -df_trees:torchspine_1 57 57 57 -df_trees:torchspine_1_lit 120 98 67 -df_trees:torchspine_2 67 67 67 -df_trees:torchspine_3 77 77 77 -df_trees:torchspine_4 87 87 87 -df_trees:torchspine_ember 57 57 57 -df_trees:tower_cap 236 233 218 -df_trees:tower_cap_gills 236 233 218 -df_trees:tower_cap_stem 236 233 218 -df_trees:tunnel_tube 199 0 138 -df_trees:tunnel_tube_fruiting_body 142 0 98 -df_trees:tunnel_tube_slant_bottom 199 0 138 -df_trees:tunnel_tube_slant_full 199 0 138 -df_trees:tunnel_tube_slant_top 199 0 138 - -df_underworld_items:glow_amethyst 170 26 191 -df_underworld_items:glowstone 211 213 139 -df_underworld_items:pit_plasma 226 183 232 -df_underworld_items:pit_plasma_flowing 226 183 232 -df_underworld_items:slade 72 39 39 -df_underworld_items:slade_block 94 51 51 -df_underworld_items:slade_brick 65 35 35 -df_underworld_items:slade_sand 57 31 31 -df_underworld_items:slade_seal 94 51 51 -df_underworld_items:slade_wall 65 35 35 -stairs:slab_slade_brick 65 35 35 -stairs:stair_inner_slade_brick 65 35 35 -stairs:stair_outer_slade_brick 65 35 35 -stairs:stair_slade_brick 65 35 35 - -ice_sprites:ice_sprite 150 214 255 -ice_sprites:ice_sprite_bottle 150 214 255 - -oil:gas_seep 97 94 93 -oil:oil_flowing 57 57 57 -oil:oil_source 57 57 57 - -#dynamic_liquid -dynamic_liquid:clay 182 182 182 - -#magma_conduits +df_farming:pig_tail_seed 157 157 157 +df_farming:plump_helmet_1 127 0 127 +df_farming:plump_helmet_2 127 0 127 +df_farming:plump_helmet_3 127 0 127 +df_farming:plump_helmet_4 127 0 127 +df_farming:plump_helmet_4_picked 127 0 127 +df_farming:plump_helmet_spawn 127 0 127 +df_farming:quarry_bush_1 68 68 68 +df_farming:quarry_bush_2 91 91 91 +df_farming:quarry_bush_3 77 77 77 +df_farming:quarry_bush_4 90 90 90 +df_farming:quarry_bush_5 82 82 82 +df_farming:quarry_bush_seed 187 124 80 +df_farming:sweet_pod_1 212 212 212 +df_farming:sweet_pod_2 215 215 215 +df_farming:sweet_pod_3 215 215 215 +df_farming:sweet_pod_4 218 218 218 +df_farming:sweet_pod_5 216 190 190 +df_farming:sweet_pod_6 220 165 165 +df_farming:sweet_pod_seed 255 167 167 +df_mapitems:big_crystal 202 56 52 +df_mapitems:big_crystal_30 202 56 52 +df_mapitems:big_crystal_30_45 202 56 52 +df_mapitems:castle_coral 126 117 45 +df_mapitems:castle_coral_skeleton 235 230 215 +df_mapitems:cave_coral_1 101 73 70 +df_mapitems:cave_coral_2 101 73 70 +df_mapitems:cave_coral_3 101 73 70 +df_mapitems:cave_pearls 233 221 212 +df_mapitems:cobble_with_floor_fungus 133 130 111 +df_mapitems:cobble_with_floor_fungus_fine 105 103 86 +df_mapitems:dirt_with_cave_moss 90 176 173 +df_mapitems:dry_flowstone 97 94 93 +df_mapitems:dry_stal_1 97 94 93 +df_mapitems:dry_stal_2 97 94 93 +df_mapitems:dry_stal_3 97 94 93 +df_mapitems:dry_stal_4 97 94 93 +df_mapitems:glow_mese 143 136 2 +df_mapitems:glow_ruby_ore 164 74 82 +df_mapitems:glow_worm 183 255 255 +df_mapitems:ice_with_hoar_moss 114 132 160 +df_mapitems:icicle_1 171 191 217 +df_mapitems:icicle_2 171 191 217 +df_mapitems:icicle_3 171 191 217 +df_mapitems:icicle_4 171 191 217 +df_mapitems:med_crystal 202 56 52 +df_mapitems:med_crystal_30 202 56 52 +df_mapitems:med_crystal_30_45 202 56 52 +df_mapitems:mese_crystal 143 136 2 +df_mapitems:salt_crystal 248 201 201 +df_mapitems:salty_cobble 135 122 116 +df_mapitems:snareweed 94 65 46 +df_mapitems:veinstone 101 74 69 +df_mapitems:wet_flowstone 129 127 126 +df_mapitems:wet_stal_1 129 127 126 +df_mapitems:wet_stal_2 129 127 126 +df_mapitems:wet_stal_3 129 127 126 +df_mapitems:wet_stal_4 129 127 126 +df_trees:black_cap 58 58 58 +df_trees:black_cap_gills 0 0 0 +df_trees:black_cap_sapling 66 69 76 +df_trees:black_cap_stem 58 58 58 +df_trees:black_cap_wood 47 47 47 +df_trees:blood_thorn 143 23 31 +df_trees:blood_thorn_dead 143 23 31 +df_trees:blood_thorn_spike 125 2 34 +df_trees:blood_thorn_spike_dead 125 2 34 +df_trees:blood_thorn_wood 74 12 25 +df_trees:fungiwood 225 211 117 +df_trees:fungiwood_sapling 228 191 86 +df_trees:fungiwood_shelf 225 211 117 +df_trees:fungiwood_wood 193 173 84 +df_trees:glowing_bottle_cyan 237 237 237 +df_trees:glowing_bottle_golden 237 237 237 +df_trees:glowing_bottle_green 237 237 237 +df_trees:glowing_bottle_red 237 237 237 +df_trees:goblin_cap 197 68 17 +df_trees:goblin_cap_gills 239 169 169 +df_trees:goblin_cap_sapling 196 175 170 +df_trees:goblin_cap_stem 216 207 149 +df_trees:goblin_cap_stem_wood 215 205 165 +df_trees:goblin_cap_wood 215 68 19 +df_trees:nether_cap 10 29 101 +df_trees:nether_cap_gills 3 120 144 +df_trees:nether_cap_sapling 3 88 231 +df_trees:nether_cap_stem 58 51 142 +df_trees:nether_cap_wood 17 17 95 +df_trees:spindlestem_cap_cyan 235 230 215 +df_trees:spindlestem_cap_golden 235 230 215 +df_trees:spindlestem_cap_green 235 230 215 +df_trees:spindlestem_cap_red 235 230 215 +df_trees:spindlestem_cap_white 235 230 215 +df_trees:spindlestem_seedling 235 230 215 +df_trees:spindlestem_stem 235 230 215 +df_trees:spore_tree 218 198 168 +df_trees:spore_tree_fruiting_body 172 164 158 +df_trees:spore_tree_hyphae 172 164 158 +df_trees:spore_tree_ladder 191 186 175 +df_trees:spore_tree_sapling 163 152 146 +df_trees:spore_tree_wood 210 199 170 +df_trees:torchspine_1 11 11 11 +df_trees:torchspine_1_lit 195 170 11 +df_trees:torchspine_2 53 53 53 +df_trees:torchspine_3 94 95 95 +df_trees:torchspine_4 137 137 137 +df_trees:torchspine_ember 11 11 11 +df_trees:tower_cap 235 230 215 +df_trees:tower_cap_gills 227 226 178 +df_trees:tower_cap_sapling 188 188 178 +df_trees:tower_cap_stem 235 230 215 +df_trees:tower_cap_wood 236 231 221 +df_trees:tunnel_tube 201 0 140 +df_trees:tunnel_tube_fruiting_body 201 0 140 +df_trees:tunnel_tube_fruiting_body_burning 201 0 140 +df_trees:tunnel_tube_sapling 182 42 177 +df_trees:tunnel_tube_slant_bottom 201 0 140 +df_trees:tunnel_tube_slant_full 201 0 140 +df_trees:tunnel_tube_slant_top 201 0 140 +df_trees:tunnel_tube_wood 157 20 98 +df_underworld_items:glow_amethyst 105 42 125 +df_underworld_items:glowstone 237 220 185 +df_underworld_items:pit_plasma 230 164 235 +df_underworld_items:pit_plasma_flowing 231 167 236 +df_underworld_items:slade 71 38 38 +df_underworld_items:slade_block 74 39 39 +df_underworld_items:slade_brick 68 40 40 +df_underworld_items:slade_sand 54 36 36 +df_underworld_items:slade_seal 68 36 36 +df_underworld_items:slade_wall 68 40 40 +dynamic_liquid:clay 183 183 183 +dynamic_liquid:spring 68 65 54 +ice_sprites:ice_sprite 184 255 255 +ice_sprites:ice_sprite_bottle 188 194 206 magma_conduits:glow_obsidian 108 11 11 magma_conduits:hot_cobble 121 27 27 magma_conduits:lava_flowing 255 100 0 magma_conduits:lava_source 255 100 0 -magma_conduits:stone 97 94 93 \ No newline at end of file +magma_conduits:stone 97 94 93 +mine_gas:gas_seep 87 85 84 +mine_gas:gas_wisp 0 138 255 +oil:oil_flowing 40 40 40 +oil:oil_source 40 40 40 +ropes:copper1rope_block 55 45 29 +ropes:copper2rope_block 58 48 30 +ropes:copper3rope_block 59 49 31 +ropes:copper4rope_block 60 49 31 +ropes:copper5rope_block 60 49 32 +ropes:ladder_steel 177 177 177 +ropes:ladder_wood 142 111 64 +ropes:rope 62 51 32 +ropes:rope_bottom 62 51 32 +ropes:ropeladder 88 69 41 +ropes:ropeladder_bottom 88 70 40 +ropes:ropeladder_falling 88 69 41 +ropes:ropeladder_top 91 73 47 +ropes:steel1rope_block 55 45 29 +ropes:steel2rope_block 58 48 30 +ropes:steel3rope_block 59 49 31 +ropes:steel4rope_block 60 49 31 +ropes:steel5rope_block 60 49 32 +ropes:steel6rope_block 58 48 30 +ropes:steel7rope_block 59 49 31 +ropes:steel8rope_block 60 49 31 +ropes:steel9rope_block 60 49 32 +ropes:wood1rope_block 55 45 29 +ropes:wood2rope_block 58 48 30 +ropes:wood_bridge 142 111 64 +stairs:slab_black_cap_wood 47 47 47 +stairs:slab_blood_thorn_wood 74 12 25 +stairs:slab_fungiwood_wood 193 173 84 +stairs:slab_goblin_cap_stem_wood 215 205 165 +stairs:slab_goblin_cap_wood 215 68 19 +stairs:slab_nether_cap_wood 17 17 95 +stairs:slab_slade_brick 68 40 40 +stairs:slab_spore_tree_wood 210 199 170 +stairs:slab_tower_cap_wood 236 231 221 +stairs:slab_tunnel_tube_wood 157 20 98 +stairs:stair_black_cap_wood 47 47 47 +stairs:stair_blood_thorn_wood 74 12 25 +stairs:stair_fungiwood_wood 193 173 84 +stairs:stair_goblin_cap_stem_wood 215 205 165 +stairs:stair_goblin_cap_wood 215 68 19 +stairs:stair_inner_black_cap_wood 47 47 47 +stairs:stair_inner_blood_thorn_wood 74 12 25 +stairs:stair_inner_fungiwood_wood 193 173 84 +stairs:stair_inner_goblin_cap_stem_wood 215 205 165 +stairs:stair_inner_goblin_cap_wood 215 68 19 +stairs:stair_inner_nether_cap_wood 17 17 95 +stairs:stair_inner_slade_brick 68 40 40 +stairs:stair_inner_spore_tree_wood 210 199 170 +stairs:stair_inner_tower_cap_wood 236 231 221 +stairs:stair_inner_tunnel_tube_wood 157 20 98 +stairs:stair_nether_cap_wood 17 17 95 +stairs:stair_outer_black_cap_wood 47 47 47 +stairs:stair_outer_blood_thorn_wood 74 12 25 +stairs:stair_outer_fungiwood_wood 193 173 84 +stairs:stair_outer_goblin_cap_stem_wood 215 205 165 +stairs:stair_outer_goblin_cap_wood 215 68 19 +stairs:stair_outer_nether_cap_wood 17 17 95 +stairs:stair_outer_slade_brick 68 40 40 +stairs:stair_outer_spore_tree_wood 210 199 170 +stairs:stair_outer_tower_cap_wood 236 231 221 +stairs:stair_outer_tunnel_tube_wood 157 20 98 +stairs:stair_slade_brick 68 40 40 +stairs:stair_spore_tree_wood 210 199 170 +stairs:stair_tower_cap_wood 236 231 221 +stairs:stair_tunnel_tube_wood 157 20 98 +subterrane:dry_flowstone 97 94 93 +subterrane:dry_stal_1 97 94 93 +subterrane:dry_stal_2 97 94 93 +subterrane:dry_stal_3 97 94 93 +subterrane:dry_stal_4 97 94 93 +subterrane:wet_flowstone 127 125 124 +subterrane:wet_stal_1 127 125 124 +subterrane:wet_stal_2 127 125 124 +subterrane:wet_stal_3 127 125 124 +subterrane:wet_stal_4 127 125 124 \ No newline at end of file diff --git a/oil/depends.txt b/oil/depends.txt index e8875d0..e3df8e9 100644 --- a/oil/depends.txt +++ b/oil/depends.txt @@ -1,4 +1,5 @@ default dynamic_liquid? bucket? -doc? \ No newline at end of file +doc? +basic_materials? \ No newline at end of file diff --git a/oil/init.lua b/oil/init.lua index 999ff1f..e0ae561 100644 --- a/oil/init.lua +++ b/oil/init.lua @@ -200,4 +200,14 @@ if minetest.get_modpath("bucket") then burntime = 370, -- same as coalblock replacements = {{"oil:oil_bucket", "bucket:bucket_empty"}}, }) + + if minetest.get_modpath("basic_materials") then + minetest.register_craft({ + type = "cooking", + output = "basic_materials:paraffin", + recipe = "oil:oil_bucket", + cooktime = 5, + replacements = {{"oil:oil_bucket", "bucket:bucket_empty"}}, + }) + end end \ No newline at end of file diff --git a/oil/mod.conf b/oil/mod.conf index 457cbcb..e262a4e 100644 --- a/oil/mod.conf +++ b/oil/mod.conf @@ -1 +1,4 @@ -name = oil \ No newline at end of file +name = oil +description = Oil liquid type +depends = default +optional_depends = dynamic_liquid, bucket, doc, basic_materials \ No newline at end of file diff --git a/oil/textures/oil_oil_source_animated.png b/oil/textures/oil_oil_source_animated.png index 6e92ed7..19c1ca9 100644 Binary files a/oil/textures/oil_oil_source_animated.png and b/oil/textures/oil_oil_source_animated.png differ diff --git a/screenshot.png b/screenshot.png index ee7b8c1..a26e82e 100644 Binary files a/screenshot.png and b/screenshot.png differ