mirror of
https://github.com/FaceDeer/dfcaverns.git
synced 2025-06-28 14:36:20 +02:00
Mineclone compatibility (#36)
* latest versions of mapgen_helper and subterrane * initial work * call it "minetest_game" compatibility instead of "default" compatibility * Getting started on moving all default dependencies to a single root mod * distilling out more dependencies * fix some typos * more default dependencies * beds * start getting some MCL equivalents set up * mine gas dependencies * reorganize * add some mapgen stuff * getting close to actually being able to run mineclone with this * it actually runs! Crashes with out-of-memory error when you try to go below -64, but it's a start. * hide flowing pit plasma from creative inventory * mineclone 5 settings * Update subterrane * get rid of meselamp dependency, bring in ancient lanterns from deep roads * stair dependencies * add mcl fences * add mcl blast resistance and hardness to everything. Also an alternate name for Nethercap in MCL, since "nether" has another meaning there. * buckets of oil and syrup should work in mineclone now * 'splosions! * make hunters avoid repaired ancient lanterns * mapgen torchspine wasn't having its timer set * split mapgen compatibility code into its own file * bypass dependency indirection for df_farming. * apply threshold alpha to food items, they look better that way * bypass dependency indirection for df_mapitems * bypass dependency indirection for df_primordial_items * bypass dependency indirection for df_trees * bypass dependency indirection for df_underworld_items * bypass dependency indirection for df_caverns * fixing up the puzzle seal to work in both * fix puzzle seal formspec for mcl * create built-in substitutes for fireflies and bones mods for when those aren't available * set up mcl dungeon loot for underworld warriors, port over some translations from default * overlooked a debug * add itemslot backgrounds for mcl * added mineclone groups to all registered nodes. TODO: craftitems. This was extremely tedious. Completely untested, aside from simply running the game. * minor fixes to the built-in bones node * eatable group for edibles * clean up some TODOs * adjust pit plasma abm conditions * add df_ambience * fixing up explosions. Also make slade sand diggable in mcl, and fix a bug in web generators * make tower cap caves less chirpy, fix bigger goblin hut schematic, allow glowing spindlestem extract bottles * avoid an undeclared global check * alas, cave pearls aren't set up right for attached_node_facedir. * bunch of work on mineclone ores, moved main config into df_dependencies * add a few more ores * update depends in mod.conf * add opaque group to light-sensitive dirt types Mineclone adds the "opaque" group only to non-light nodes, and torches check for the opaque group to decide whether they can be placed there. light-sensitive nodes need the "light" paramtype to work, though. So adding the opaque group manually to these. * add a touch of reverb to one of the whisper tracks, it didn't fit with the others without it * bloodthorn also needs to be set opaque * add sound to torchspines * isolate Nethercap translation name to make it easier to swap out in Mineclone contexts * ambience tweak * fix dirt spreads https://github.com/FaceDeer/dfcaverns/issues/35 * adding achievements! Almost all untested yet. * fix a few achievements glitches * tweak some more achievements, add delay when achievements unlock other achievements * fix farming achievements, fix spindlestem callbacks on place * icons for farming achievements * more achievement icons, fix ancient lantern achievement * two more icons, update text * add icons for upper cavern layers * all achievements have icons now. Also add another sound to the magma sea ambience * hook into awards' trigger system to get "x/y" progress displayed for the multi-achievement achievements * ironically, Mineclone has an old version of awards that is incompatible with my trigger work. * every award should now have a description and a difficulty. * removing leftovers * missing callbacks for farmables * put growth restrictions on farmables so the achievement doesn't trigger inappropriately. * enable ores in MCL2, fix some undeclared globals, fix icecap growth in MCL (achievements are a good debugging tool) * get *all* the copper and iron containing nodes * fix old awards mod's handling of grouped dig items * Add a little bonus for players who activate a slade breacher - a handheld 'splosion tool * used the wrong drop method * beef up explosions in MCL, make slade brick craftable from slade sand and lava * better creative mode checks, fix crash when digging walls in MCL * Update subterrane * various bugfixes and tweaks * whipping up a simple puzzle chest to give a clue about ancient numbering The coding is done, but UI and a node mesh need to be done * prepare for some art tomorrow * chest node and sounds * images for the combination dials * add puzzle chests to the underworld buildings * update translations * oops, can't initialize the contents of puzzle chests every time or players get endless stuff * add backgrounds to item slots in MCL * wrap the existing function rather than copy and pasting it * fix bucket dependency in cooking recipes * add _mcl_saturation to edibles
This commit is contained in:
5
df_dependencies/README.md
Normal file
5
df_dependencies/README.md
Normal file
@ -0,0 +1,5 @@
|
||||
The DF_Caverns modpack was originally written based on the minetest_game. It made extensive use of various nodes and helper functions that came from minetest_game's constituent mods.
|
||||
|
||||
When Mineclone games rose in popularity, the task of making it compatible was a daunting one - there were dependencies on minetest_game's mods scattered everywhere. To make the task manageable, I created this mod to serve as a central location where analogous objects could be taken from those games to be referenced in a generic way.
|
||||
|
||||
This requires abusing the "dependencies" system of Minetest, unfortunately. This mod is an enormous collection of either/or dependencies - things that can come from either mod A or mod B, but must come from one of them.
|
59
df_dependencies/config.lua
Normal file
59
df_dependencies/config.lua
Normal file
@ -0,0 +1,59 @@
|
||||
local CONFIG_FILE_PREFIX = "dfcaverns_"
|
||||
|
||||
local config = {}
|
||||
df_dependencies.config = config
|
||||
|
||||
|
||||
local print_settingtypes = false
|
||||
|
||||
local function setting(stype, name, default, description)
|
||||
local value
|
||||
if stype == "bool" then
|
||||
value = minetest.settings:get_bool(CONFIG_FILE_PREFIX..name, default)
|
||||
elseif stype == "string" then
|
||||
value = minetest.settings:get(CONFIG_FILE_PREFIX..name)
|
||||
elseif stype == "int" or stype == "float" then
|
||||
value = tonumber(minetest.settings:get(CONFIG_FILE_PREFIX..name))
|
||||
end
|
||||
if value == nil then
|
||||
value = default
|
||||
end
|
||||
config[name] = value
|
||||
|
||||
if print_settingtypes then
|
||||
minetest.debug(CONFIG_FILE_PREFIX..name.." ("..description..") "..stype.." "..tostring(default))
|
||||
end
|
||||
end
|
||||
|
||||
--Caverns
|
||||
|
||||
setting("float", "vertical_cavern_scale", 256, "Vertical cavern dimension scale")
|
||||
setting("float", "horizontal_cavern_scale", 256, "Horizontal cavern dimension scale")
|
||||
setting("float", "cavern_threshold", 0.5, "Cavern threshold")
|
||||
setting("float", "sunless_sea_threshold", 0.4, "Cavern threshold for sunless seas (higher number means sparser caverns)")
|
||||
setting("float", "tunnel_flooding_threshold", 0.25, "Threshold for flooding tunnels around flooded caverns")
|
||||
|
||||
setting("int", "ymax", -193, "Upper limit of level 1")
|
||||
setting("int", "level1_min", -832, "Upper limit of level 2")
|
||||
setting("int", "level2_min", -1472, "Upper limit of level 3")
|
||||
setting("int", "level3_min", -2112, "Upper limit of the sunless seas")
|
||||
setting("int", "sunless_sea_min", -2512, "Lower limit of the sunless seas")
|
||||
|
||||
setting("bool", "enable_oil_sea", true, "Enable oil sea")
|
||||
config.enable_oil_sea = config.enable_oil_sea and minetest.get_modpath("oil") ~= nil
|
||||
setting("int", "oil_sea_level", -2700, "Oil sea level")
|
||||
|
||||
setting("bool", "enable_lava_sea", true, "Enable magma sea")
|
||||
setting("int", "lava_sea_level", -2900, "Lava sea level")
|
||||
|
||||
setting("bool", "enable_underworld", true, "Enable underworld")
|
||||
config.enable_underworld = config.enable_underworld and minetest.get_modpath("df_underworld_items") ~= nil
|
||||
setting("int", "underworld_level", -3200, "Underworld level")
|
||||
setting("int", "underworld_glowing_pit_mapblocks", 8, "Average pit spacing measured in mapblocks")
|
||||
|
||||
setting("bool", "enable_primordial", true, "Enable primordial cavern")
|
||||
setting("int", "primordial_max", -3393, "Upper limit to primordial caverns")
|
||||
setting("int", "primordial_min", -4032, "Lower limit to primordial caverns")
|
||||
|
||||
setting("bool", "restrict_trees_to_biomes", false, "Restrict underground tree growth to their home biomes")
|
||||
setting("bool", "restrict_farmables_to_biomes", false, "Restrict underground farmable plant growth to their home biomes")
|
187
df_dependencies/fireflies.lua
Normal file
187
df_dependencies/fireflies.lua
Normal file
@ -0,0 +1,187 @@
|
||||
-- firefly/init.lua
|
||||
|
||||
-- Load support for MT game translation.
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local bottle = df_dependencies.node_name_glass_bottle
|
||||
|
||||
minetest.register_node("df_dependencies:firefly", {
|
||||
description = S("Firefly"),
|
||||
drawtype = "plantlike",
|
||||
tiles = {{
|
||||
name = "fireflies_firefly_animated.png",
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 1.5
|
||||
},
|
||||
}},
|
||||
inventory_image = "fireflies_firefly.png",
|
||||
wield_image = "fireflies_firefly.png",
|
||||
waving = 1,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
buildable_to = true,
|
||||
walkable = false,
|
||||
groups = {catchable = 1, destroy_by_lava_flow=1},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
|
||||
},
|
||||
light_source = 6,
|
||||
floodable = true,
|
||||
_mcl_blast_resistance = 0.2,
|
||||
_mcl_hardness = 0.2,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local player_name = placer:get_player_name()
|
||||
local pos = pointed_thing.above
|
||||
|
||||
if not minetest.is_protected(pos, player_name) and
|
||||
not minetest.is_protected(pointed_thing.under, player_name) and
|
||||
minetest.get_node(pos).name == "air" then
|
||||
minetest.set_node(pos, {name = "df_dependencies:firefly"})
|
||||
minetest.get_node_timer(pos):start(1)
|
||||
itemstack:take_item()
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
on_timer = function(pos, elapsed)
|
||||
if minetest.get_node_light(pos) > 11 then
|
||||
minetest.set_node(pos, {name = "df_dependencies:hidden_firefly"})
|
||||
end
|
||||
minetest.get_node_timer(pos):start(30)
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("df_dependencies:hidden_firefly", {
|
||||
description = S("Hidden Firefly"),
|
||||
drawtype = "airlike",
|
||||
inventory_image = "fireflies_firefly.png^default_invisible_node_overlay.png",
|
||||
wield_image = "fireflies_firefly.png^default_invisible_node_overlay.png",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
pointable = false,
|
||||
diggable = false,
|
||||
buildable_to = true,
|
||||
drop = "",
|
||||
groups = {not_in_creative_inventory = 1, destroy_by_lava_flow=1},
|
||||
floodable = true,
|
||||
_mcl_blast_resistance = 0.2,
|
||||
_mcl_hardness = 0.2,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local player_name = placer:get_player_name()
|
||||
local pos = pointed_thing.above
|
||||
|
||||
if not minetest.is_protected(pos, player_name) and
|
||||
not minetest.is_protected(pointed_thing.under, player_name) and
|
||||
minetest.get_node(pos).name == "air" then
|
||||
minetest.set_node(pos, {name = "df_dependencies:hidden_firefly"})
|
||||
minetest.get_node_timer(pos):start(1)
|
||||
itemstack:take_item()
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
on_timer = function(pos, elapsed)
|
||||
if minetest.get_node_light(pos) <= 11 then
|
||||
minetest.set_node(pos, {name = "df_dependencies:firefly"})
|
||||
end
|
||||
minetest.get_node_timer(pos):start(30)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
-- bug net
|
||||
minetest.register_tool("df_dependencies:bug_net", {
|
||||
description = S("Bug Net"),
|
||||
inventory_image = "fireflies_bugnet.png",
|
||||
on_use = function(itemstack, player, pointed_thing)
|
||||
local player_name = player and player:get_player_name() or ""
|
||||
if not pointed_thing or pointed_thing.type ~= "node" or
|
||||
minetest.is_protected(pointed_thing.under, player_name) then
|
||||
return
|
||||
end
|
||||
local node_name = minetest.get_node(pointed_thing.under).name
|
||||
local inv = player:get_inventory()
|
||||
if minetest.get_item_group(node_name, "catchable") == 1 then
|
||||
minetest.set_node(pointed_thing.under, {name = "air"})
|
||||
local stack = ItemStack(node_name.." 1")
|
||||
local leftover = inv:add_item("main", stack)
|
||||
if leftover:get_count() > 0 then
|
||||
minetest.add_item(pointed_thing.under, node_name.." 1")
|
||||
end
|
||||
end
|
||||
if not minetest.is_creative_enabled(player_name) then
|
||||
itemstack:add_wear_by_uses(256)
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "df_dependencies:bug_net",
|
||||
recipe = {
|
||||
{df_dependencies.node_name_string, df_dependencies.node_name_string},
|
||||
{df_dependencies.node_name_string, df_dependencies.node_name_string},
|
||||
{"group:stick", ""}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- firefly in a bottle
|
||||
minetest.register_node("df_dependencies:firefly_bottle", {
|
||||
description = S("Firefly in a Bottle"),
|
||||
inventory_image = "fireflies_bottle.png",
|
||||
wield_image = "fireflies_bottle.png",
|
||||
tiles = {{
|
||||
name = "fireflies_bottle_animated.png",
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 1.5
|
||||
},
|
||||
}},
|
||||
drawtype = "plantlike",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
light_source = 9,
|
||||
walkable = false,
|
||||
groups = {vessel = 1, dig_immediate = 3, attached_node = 1, material_glass = 1, destroy_by_lava_flow=1},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25}
|
||||
},
|
||||
sounds = df_dependencies.sound_glass(),
|
||||
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
||||
local lower_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
|
||||
if minetest.is_protected(pos, player:get_player_name()) or
|
||||
minetest.get_node(lower_pos).name ~= "air" then
|
||||
return
|
||||
end
|
||||
|
||||
local upper_pos = {x = pos.x, y = pos.y + 2, z = pos.z}
|
||||
local firefly_pos
|
||||
|
||||
if not minetest.is_protected(upper_pos, player:get_player_name()) and
|
||||
minetest.get_node(upper_pos).name == "air" then
|
||||
firefly_pos = upper_pos
|
||||
elseif not minetest.is_protected(lower_pos, player:get_player_name()) then
|
||||
firefly_pos = lower_pos
|
||||
end
|
||||
|
||||
if firefly_pos then
|
||||
minetest.add_item(pos, bottle)
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
minetest.set_node(firefly_pos, {name = "df_dependencies:firefly"})
|
||||
minetest.get_node_timer(firefly_pos):start(1)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "df_dependencies:firefly_bottle",
|
||||
type = "shapeless",
|
||||
recipe = {"df_dependencies:firefly", bottle},
|
||||
})
|
58
df_dependencies/fireflies_license.txt
Normal file
58
df_dependencies/fireflies_license.txt
Normal file
@ -0,0 +1,58 @@
|
||||
License of source code
|
||||
----------------------
|
||||
|
||||
The MIT License (MIT)
|
||||
Copyright (c) 2018 Shara RedCat
|
||||
|
||||
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.
|
||||
|
||||
For more details:
|
||||
https://opensource.org/licenses/MIT
|
||||
|
||||
Licenses of media (textures)
|
||||
----------------------------
|
||||
|
||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||
Copyright (C) 2018 Shara RedCat
|
||||
|
||||
You are free to:
|
||||
Share — copy and redistribute the material in any medium or format.
|
||||
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||
|
||||
Under the following terms:
|
||||
|
||||
Attribution — You must give appropriate credit, provide a link to the license, and
|
||||
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
||||
that suggests the licensor endorses you or your use.
|
||||
|
||||
ShareAlike — If you remix, transform, or build upon the material, you must distribute
|
||||
your contributions under the same license as the original.
|
||||
|
||||
No additional restrictions — You may not apply legal terms or technological measures that
|
||||
legally restrict others from doing anything the license permits.
|
||||
|
||||
Notices:
|
||||
|
||||
You do not have to comply with the license for elements of the material in the public
|
||||
domain or where your use is permitted by an applicable exception or limitation.
|
||||
No warranties are given. The license may not give you all of the permissions necessary
|
||||
for your intended use. For example, other rights such as publicity, privacy, or moral
|
||||
rights may limit how you use the material.
|
||||
|
||||
For more details:
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
212
df_dependencies/helper_functions.lua
Normal file
212
df_dependencies/helper_functions.lua
Normal file
@ -0,0 +1,212 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
if minetest.get_modpath("default") then
|
||||
df_dependencies.register_leafdecay = default.register_leafdecay
|
||||
df_dependencies.after_place_leaves = default.after_place_leaves
|
||||
elseif ("mcl_core") then
|
||||
-- Mineclone does leaf decay differently, it uses the "leafdecay" group to require that leaves remain
|
||||
-- within the group value distance of any node of group "tree".
|
||||
-- make sure to add place_param2 = 1 to leaves to prevent decay of player-placed leaves
|
||||
df_dependencies.register_leafdecay = function() end
|
||||
df_dependencies.after_place_leaves = function() end
|
||||
end
|
||||
|
||||
|
||||
df_dependencies.mods_required.bucket = true
|
||||
df_dependencies.mods_required.mcl_buckets = true
|
||||
if minetest.get_modpath("bucket") then
|
||||
df_dependencies.bucket_register_liquid = bucket.register_liquid
|
||||
elseif minetest.get_modpath("mcl_buckets") then
|
||||
df_dependencies.bucket_register_liquid = function(source_liquid, flowing_liquid, bucket_node, texture, desc)
|
||||
mcl_buckets.register_liquid({
|
||||
bucketname = bucket_node,
|
||||
source_take = {source_liquid},
|
||||
source_place = source_liquid,
|
||||
inventory_image = texture,
|
||||
name = desc})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Note that a circular table reference will result in a crash, TODO: guard against that.
|
||||
-- Unlikely to be needed, though - it'd take a lot of work for users to get into this bit of trouble.
|
||||
local function deep_copy(table_in)
|
||||
local table_out = {}
|
||||
|
||||
for index, value in pairs(table_in) do
|
||||
if type(value) == "table" then
|
||||
table_out[index] = deep_copy(value)
|
||||
else
|
||||
table_out[index] = value
|
||||
end
|
||||
end
|
||||
return table_out
|
||||
end
|
||||
|
||||
df_dependencies.mods_required.stairs = true
|
||||
df_dependencies.mods_required.moreblocks = true
|
||||
df_dependencies.mods_required.doors = true
|
||||
df_dependencies.mods_required.mcl_stairs = true
|
||||
df_dependencies.mods_required.mcl_fences = true
|
||||
df_dependencies.mods_required.mcl_core = true
|
||||
|
||||
local node_name_to_stair_properties = function(name, override_def)
|
||||
local mod = minetest.get_current_modname()
|
||||
|
||||
local node_def = minetest.registered_nodes[mod..":"..name]
|
||||
override_def = override_def or {}
|
||||
|
||||
local node_copy = deep_copy(node_def)
|
||||
for index, value in pairs(override_def) do
|
||||
node_copy[index] = value
|
||||
end
|
||||
return mod, node_copy
|
||||
end
|
||||
|
||||
df_dependencies.register_stairs = function(name, override_def)
|
||||
local mod, node_copy = node_name_to_stair_properties(name, override_def)
|
||||
if minetest.get_modpath("stairs") then
|
||||
stairs.register_stair_and_slab(
|
||||
name,
|
||||
mod ..":" .. name,
|
||||
node_copy.groups,
|
||||
node_copy.tiles,
|
||||
S("@1 Stair", node_copy.description),
|
||||
S("@1 Slab", node_copy.description),
|
||||
node_copy.sounds
|
||||
)
|
||||
end
|
||||
if minetest.get_modpath("mcl_stairs") then
|
||||
mcl_stairs.register_stair_and_slab_simple(
|
||||
name,
|
||||
mod ..":" .. name,
|
||||
S("@1 Stair", node_copy.description),
|
||||
S("@1 Slab", node_copy.description),
|
||||
S("Double @1 Slab", node_copy.description)
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
df_dependencies.register_more_stairs = function(name, override_def)
|
||||
local mod, node_copy = node_name_to_stair_properties(name, override_def)
|
||||
if minetest.get_modpath("moreblocks") then
|
||||
stairsplus:register_all(mod, name, mod..":"..name, node_copy)
|
||||
end
|
||||
end
|
||||
|
||||
df_dependencies.register_all_fences = function (name, override_def)
|
||||
local mod, node_def = node_name_to_stair_properties(name, override_def)
|
||||
|
||||
override_def = override_def or {}
|
||||
|
||||
local material = override_def.material or mod..":"..name
|
||||
local burntime = override_def.burntime
|
||||
local texture = override_def.texture or node_def.tiles[1]
|
||||
|
||||
if minetest.get_modpath("default") then
|
||||
default.register_fence(material .. "_fence", {
|
||||
description = S("@1 Fence", node_def.description),
|
||||
texture = texture,
|
||||
material = material,
|
||||
groups = deep_copy(node_def.groups or {}), -- the default register_fence function modifies the groups table passed in, so send a copy instead to be on the safe side.
|
||||
sounds = node_def.sounds
|
||||
})
|
||||
if burntime then
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = material .. "_fence",
|
||||
burntime = burntime, -- ignoring two sticks
|
||||
})
|
||||
end
|
||||
|
||||
default.register_fence_rail(material .. "_fence_rail", {
|
||||
description = S("@1 Fence Rail", node_def.description),
|
||||
texture = texture,
|
||||
material = material,
|
||||
groups = deep_copy(node_def.groups or {}), -- the default register_fence_rail function modifies the groups table passed in, so send a copy instead to be on the safe side.
|
||||
sounds = node_def.sounds
|
||||
})
|
||||
if burntime then
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = material .. "_fence_rail",
|
||||
burntime = burntime * 4/16,
|
||||
})
|
||||
end
|
||||
|
||||
default.register_mesepost(material .. "_mese_light", {
|
||||
description = S("@1 Mese Post Light", node_def.description),
|
||||
texture = texture,
|
||||
material = material,
|
||||
groups = deep_copy(node_def.groups or {}), -- the default register_fence_rail function modifies the groups table passed in, so send a copy instead to be on the safe side.
|
||||
sounds = node_def.sounds
|
||||
})
|
||||
end
|
||||
|
||||
if minetest.get_modpath("doors") then
|
||||
doors.register_fencegate(material .. "_fence_gate", {
|
||||
description = S("@1 Fence Gate", node_def.description),
|
||||
texture = texture,
|
||||
material = material,
|
||||
groups = deep_copy(node_def.groups or {}), -- the default register_fence_rail function modifies the groups table passed in, so send a copy instead to be on the safe side.
|
||||
sounds = node_def.sounds
|
||||
})
|
||||
|
||||
if burntime then
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = material .. "_fence_gate_closed",
|
||||
burntime = burntime * 2, -- ignoring four sticks
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
if minetest.get_modpath("mcl_fences") then
|
||||
local groups = deep_copy(node_def.groups or {})
|
||||
groups.fence_wood = 1
|
||||
mcl_fences.register_fence_and_fence_gate(name .. "_fence",
|
||||
S("@1 Fence", node_def.description),
|
||||
S("@1 Fence Gate", node_def.description),
|
||||
texture,
|
||||
groups,
|
||||
node_def._mcl_hardness or minetest.registered_nodes["mcl_core:wood"]._mcl_hardness,
|
||||
node_def._mcl_blast_resistance or minetest.registered_nodes["mcl_core:wood"]._mcl_blast_resistance,
|
||||
{"group:fence_wood"}
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
df_dependencies.register_all_stairs_and_fences = function(name, override_def)
|
||||
df_dependencies.register_stairs(name, override_def)
|
||||
df_dependencies.register_more_stairs(name, override_def)
|
||||
df_dependencies.register_all_fences(name, override_def)
|
||||
end
|
||||
|
||||
df_dependencies.mods_required.tnt = true
|
||||
df_dependencies.mods_required.mcl_explosions = true
|
||||
|
||||
if minetest.get_modpath("tnt") then
|
||||
df_dependencies.tnt_boom = tnt.boom
|
||||
elseif minetest.get_modpath("mcl_explosions") then
|
||||
df_dependencies.tnt_boom = function(pos, def)
|
||||
local strength = def.radius * 5
|
||||
mcl_explosions.explode(pos, strength)
|
||||
end
|
||||
end
|
||||
|
||||
df_dependencies.mods_required.mcl_formspec = true
|
||||
df_dependencies.get_itemslot_bg = function(X,Y,W,H) return "" end
|
||||
df_dependencies.get_itemslot_bg_padded = function(X,Y,W,H) return "" end
|
||||
if minetest.get_modpath("mcl_formspec") then
|
||||
df_dependencies.get_itemslot_bg = mcl_formspec.get_itemslot_bg
|
||||
|
||||
df_dependencies.get_itemslot_bg_padded = function(x,y,w,h, padding)
|
||||
local out = ""
|
||||
for i = 0, w - 1, 1 do
|
||||
for j = 0, h - 1, 1 do
|
||||
out = out .. mcl_formspec.get_itemslot_bg(x+i+(i*padding), y+j+(j*padding), 1, 1)
|
||||
end
|
||||
end
|
||||
return out
|
||||
end
|
||||
end
|
56
df_dependencies/init.lua
Normal file
56
df_dependencies/init.lua
Normal file
@ -0,0 +1,56 @@
|
||||
df_dependencies = {}
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
||||
df_dependencies.mods_required = {}
|
||||
|
||||
df_dependencies.select_required = function(def)
|
||||
local count = 0
|
||||
local total = 0
|
||||
local ret
|
||||
for mod, item in pairs(def) do
|
||||
total = total + 1
|
||||
df_dependencies.mods_required[mod] = true
|
||||
if minetest.get_modpath(mod) then
|
||||
count = count + 1
|
||||
ret = item
|
||||
end
|
||||
end
|
||||
assert(count ~= 0, "Unable to find item for dependency set " .. dump(def))
|
||||
assert(count == 1, "Found more than one item for dependency set " .. dump(def))
|
||||
return ret
|
||||
end
|
||||
|
||||
df_dependencies.select_optional = function(def)
|
||||
local ret
|
||||
for mod, item in pairs(def) do
|
||||
df_dependencies.mods_required[mod] = true
|
||||
if minetest.get_modpath(mod) then
|
||||
ret = item
|
||||
end
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
dofile(modpath.."/config.lua")
|
||||
dofile(modpath.."/sounds.lua")
|
||||
dofile(modpath.."/helper_functions.lua")
|
||||
dofile(modpath.."/nodes.lua")
|
||||
dofile(modpath.."/misc.lua")
|
||||
dofile(modpath.."/mapgen.lua")
|
||||
|
||||
local list_mods_required = function()
|
||||
local mods_required = ""
|
||||
local mods_sorted = {}
|
||||
for mod, _ in pairs(df_dependencies.mods_required) do
|
||||
table.insert(mods_sorted, mod)
|
||||
end
|
||||
table.sort(mods_sorted)
|
||||
for _, mod in ipairs(mods_sorted) do
|
||||
mods_required = mods_required .. ", " .. mod
|
||||
end
|
||||
minetest.debug(mods_required)
|
||||
end
|
||||
--list_mods_required()
|
||||
|
||||
-- This mod is meant to only exist at initialization time. Other mods should make copies of anything it points to for their own use.
|
||||
minetest.after(1, function() df_dependencies = nil end)
|
27
df_dependencies/locale/df_dependencies.de.tr
Normal file
27
df_dependencies/locale/df_dependencies.de.tr
Normal file
@ -0,0 +1,27 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Insektennetz
|
||||
# textdomain: fireflies
|
||||
Firefly=Glühwürmchen
|
||||
Firefly in a Bottle=Glühwürmchen in einer Flasche
|
||||
Hidden Firefly=Verborgenes Glühwürmchen
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
|
||||
@1 Slab=@1 Platte
|
||||
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
|
||||
@1 Stair=@1 Treppe
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.eo.tr
Normal file
25
df_dependencies/locale/df_dependencies.eo.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Insekta Reto
|
||||
# textdomain: fireflies
|
||||
Firefly=Lampiro
|
||||
Firefly in a Bottle=Lampiro en Botelo
|
||||
Hidden Firefly=Kaŝita Lampiro
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.es.tr
Normal file
25
df_dependencies/locale/df_dependencies.es.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Red de insectos
|
||||
# textdomain: fireflies
|
||||
Firefly=Luciérnaga
|
||||
Firefly in a Bottle=Luciérnaga en botella
|
||||
Hidden Firefly=Luciérnaga oculta
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.fr.tr
Normal file
25
df_dependencies/locale/df_dependencies.fr.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Filet à papillon
|
||||
# textdomain: fireflies
|
||||
Firefly=Luciole
|
||||
Firefly in a Bottle=Luciole en bouteille
|
||||
Hidden Firefly=Luciole cachée
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.id.tr
Normal file
25
df_dependencies/locale/df_dependencies.id.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Jaring Serangga
|
||||
# textdomain: fireflies
|
||||
Firefly=Kunang-Kunang
|
||||
Firefly in a Bottle=Kunang-Kunang dalam Botol
|
||||
Hidden Firefly=Kunang-Kunang Tersembunyi
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
27
df_dependencies/locale/df_dependencies.it.tr
Normal file
27
df_dependencies/locale/df_dependencies.it.tr
Normal file
@ -0,0 +1,27 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Retino
|
||||
# textdomain: fireflies
|
||||
Firefly=Lucciola
|
||||
Firefly in a Bottle=Lucciola imbottigliata
|
||||
Hidden Firefly=Lucciola nascosta
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
|
||||
@1 Slab=@1 Lastra
|
||||
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
|
||||
@1 Stair=@1 Scala
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=Cappello del Nether
|
25
df_dependencies/locale/df_dependencies.ja.tr
Normal file
25
df_dependencies/locale/df_dependencies.ja.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=虫取り網
|
||||
# textdomain: fireflies
|
||||
Firefly=ホタル
|
||||
Firefly in a Bottle=ホタルの入った瓶
|
||||
Hidden Firefly=隠されたホタル
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.jbo.tr
Normal file
25
df_dependencies/locale/df_dependencies.jbo.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=lo cinki julne
|
||||
# textdomain: fireflies
|
||||
Firefly=lo gusycinki
|
||||
Firefly in a Bottle=lo gusycinki poi nenri lo botpi
|
||||
Hidden Firefly=lo se mipri gusycinki
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.ms.tr
Normal file
25
df_dependencies/locale/df_dependencies.ms.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Jaring Pepijat
|
||||
# textdomain: fireflies
|
||||
Firefly=Kelip-Kelip
|
||||
Firefly in a Bottle=Kelip-Kelip dalam Botol
|
||||
Hidden Firefly=Kelip-Kelip Tersembunyi
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.pl.tr
Normal file
25
df_dependencies/locale/df_dependencies.pl.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Siatka na owady
|
||||
# textdomain: fireflies
|
||||
Firefly=Świetlik
|
||||
Firefly in a Bottle=Świetlik w butelce
|
||||
Hidden Firefly=Ukryty świetlik
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.pt_BR.tr
Normal file
25
df_dependencies/locale/df_dependencies.pt_BR.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Rede de Insetos
|
||||
# textdomain: fireflies
|
||||
Firefly=Vaga-lume
|
||||
Firefly in a Bottle=Vaga-lume em uma garrafa
|
||||
Hidden Firefly=Vaga-lume escondido
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.ru.tr
Normal file
25
df_dependencies/locale/df_dependencies.ru.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Сачок Для Ловли Насекомых
|
||||
# textdomain: fireflies
|
||||
Firefly=Светлячок
|
||||
Firefly in a Bottle=Светлячок в Бутылке
|
||||
Hidden Firefly=Притаившийся Светлячок
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.sk.tr
Normal file
25
df_dependencies/locale/df_dependencies.sk.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Sieťka na hmyz
|
||||
# textdomain: fireflies
|
||||
Firefly=Svetluška
|
||||
Firefly in a Bottle=Svetluška vo fľaši
|
||||
Hidden Firefly=Skrytá svetluška
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.sv.tr
Normal file
25
df_dependencies/locale/df_dependencies.sv.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Insektshåv
|
||||
# textdomain: fireflies
|
||||
Firefly=Eldfluga
|
||||
Firefly in a Bottle=Eldfluga i en flaska
|
||||
Hidden Firefly=Gömd eldfluga
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.uk.tr
Normal file
25
df_dependencies/locale/df_dependencies.uk.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=Сачок Для Ловлі Комах
|
||||
# textdomain: fireflies
|
||||
Firefly=Світлячок
|
||||
Firefly in a Bottle=Світлячок у Пляшці
|
||||
Hidden Firefly=Світлячок, що причаївся
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.zh_CN.tr
Normal file
25
df_dependencies/locale/df_dependencies.zh_CN.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=虫网
|
||||
# textdomain: fireflies
|
||||
Firefly=萤火虫
|
||||
Firefly in a Bottle=放在瓶子里的萤火虫
|
||||
Hidden Firefly=隐藏的萤火虫
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
25
df_dependencies/locale/df_dependencies.zh_TW.tr
Normal file
25
df_dependencies/locale/df_dependencies.zh_TW.tr
Normal file
@ -0,0 +1,25 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=蟲網
|
||||
# textdomain: fireflies
|
||||
Firefly=螢火蟲
|
||||
Firefly in a Bottle=放在瓶子裡的螢火蟲
|
||||
Hidden Firefly=隱藏的螢火蟲
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
24
df_dependencies/locale/template.txt
Normal file
24
df_dependencies/locale/template.txt
Normal file
@ -0,0 +1,24 @@
|
||||
# textdomain: df_dependencies
|
||||
|
||||
|
||||
### fireflies.lua ###
|
||||
|
||||
Bug Net=
|
||||
Firefly=
|
||||
Firefly in a Bottle=
|
||||
Hidden Firefly=
|
||||
|
||||
### helper_functions.lua ###
|
||||
|
||||
@1 Fence=
|
||||
@1 Fence Gate=
|
||||
@1 Fence Rail=
|
||||
@1 Mese Post Light=
|
||||
@1 Slab=
|
||||
@1 Stair=
|
||||
Double @1 Slab=
|
||||
|
||||
### misc.lua ###
|
||||
|
||||
Icecap=
|
||||
Nethercap=
|
280
df_dependencies/mapgen.lua
Normal file
280
df_dependencies/mapgen.lua
Normal file
@ -0,0 +1,280 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local function deep_copy(table_in)
|
||||
local table_out = {}
|
||||
for index, value in pairs(table_in) do
|
||||
if type(value) == "table" then
|
||||
table_out[index] = deep_copy(value)
|
||||
else
|
||||
table_out[index] = value
|
||||
end
|
||||
end
|
||||
return table_out
|
||||
end
|
||||
|
||||
local config = df_dependencies.config
|
||||
|
||||
local lowest_elevation = config.sunless_sea_min
|
||||
if config.enable_oil_sea then
|
||||
lowest_elevation = config.oil_sea_level
|
||||
end
|
||||
if config.enable_lava_sea then
|
||||
lowest_elevation = config.lava_sea_level
|
||||
end
|
||||
if config.enable_underworld then
|
||||
lowest_elevation = config.underworld_level
|
||||
end
|
||||
if config.enable_primordial then
|
||||
lowest_elevation = config.primordial_min
|
||||
end
|
||||
lowest_elevation = lowest_elevation - 193 -- add a little buffer space
|
||||
|
||||
df_dependencies.mods_required.mcl_init = true
|
||||
df_dependencies.mods_required.mcl_worlds = true
|
||||
df_dependencies.mods_required.mcl_strongholds = true
|
||||
df_dependencies.mods_required.mcl_compatibility = true
|
||||
df_dependencies.mods_required.mcl_mapgen = true
|
||||
|
||||
local old_overworld_min
|
||||
|
||||
local ores_extended = false
|
||||
local extend_ores = function()
|
||||
if ores_extended then return end -- should only do this once.
|
||||
ores_extended = true
|
||||
local ores_registered = {}
|
||||
for key, val in pairs(minetest.registered_ores) do
|
||||
ores_registered[val.ore] = true
|
||||
end
|
||||
|
||||
local wherein_stonelike = {"mcl_core:stone"}
|
||||
local localseed = 12345
|
||||
|
||||
local stone_blobs = {
|
||||
wherein = wherein_stonelike,
|
||||
clust_scarcity = 1000,
|
||||
clust_size = 7,
|
||||
y_min = lowest_elevation,
|
||||
y_max = old_overworld_min,
|
||||
ore_type = "blob",
|
||||
clust_num_ores = 58,
|
||||
noise_params = {
|
||||
octaves = 3,
|
||||
seed = 12345,
|
||||
lacunarity = 2,
|
||||
spread = {
|
||||
y = 250,
|
||||
x = 250,
|
||||
z = 250
|
||||
},
|
||||
persist = 0.6,
|
||||
flags = "defaults",
|
||||
offset = 0,
|
||||
scale = 1
|
||||
},
|
||||
}
|
||||
|
||||
local register_blob = function(ore, cluster_size, cluster_scarcity_cuberoot, ymin, ymax)
|
||||
localseed = localseed + 1 -- increment this every time it's called to ensure different distributions
|
||||
local blob_copy = deep_copy(stone_blobs)
|
||||
blob_copy.ore = ore
|
||||
blob_copy.clust_num_ores = cluster_size
|
||||
blob_copy.clust_size = math.ceil(math.sqrt(cluster_size))
|
||||
blob_copy.clust_scarcity = cluster_scarcity_cuberoot*cluster_scarcity_cuberoot*cluster_scarcity_cuberoot
|
||||
blob_copy.seed = localseed
|
||||
blob_copy.y_min = ymin or stone_blobs.y_min
|
||||
blob_copy.y_max = ymax or stone_blobs.y_max
|
||||
--minetest.debug(dump(blob_copy))
|
||||
minetest.register_ore(blob_copy)
|
||||
end
|
||||
|
||||
local scattered_ore = {
|
||||
wherein = wherein_stonelike,
|
||||
ore_type = "scatter",
|
||||
--ore = "mcl_core:stone_with_coal",
|
||||
clust_scarcity = 525*3,
|
||||
clust_num_ores = 5,
|
||||
clust_size = 3,
|
||||
y_min = lowest_elevation,
|
||||
y_max = old_overworld_min,
|
||||
noise_params = deep_copy(stone_blobs.noise_params), -- since there's so much volume to scatter ore in, using noise to make some regions "rich" and others "poor" for variety
|
||||
noise_threshold= 0,
|
||||
}
|
||||
|
||||
local register_scattered_internal = function(ore, cluster_size, cluster_scarcity_cuberoot, threshold, ymin, ymax, wherein)
|
||||
local scattered_copy = deep_copy(scattered_ore)
|
||||
scattered_copy.ore = ore
|
||||
scattered_copy.clust_size = cluster_size*cluster_size*cluster_size
|
||||
scattered_copy.clust_scarcity = cluster_scarcity_cuberoot*cluster_scarcity_cuberoot*cluster_scarcity_cuberoot
|
||||
scattered_copy.clust_num_ores = math.ceil(scattered_copy.clust_size/3)
|
||||
scattered_copy.seed = localseed
|
||||
scattered_copy.threshold = threshold
|
||||
scattered_copy.y_min = ymin or scattered_ore.y_min
|
||||
scattered_copy.y_max = ymax or scattered_ore.y_max
|
||||
scattered_copy.wherein = wherein or scattered_ore.wherein
|
||||
--minetest.debug(dump(scattered_copy))
|
||||
minetest.register_ore(scattered_copy)
|
||||
end
|
||||
local register_scattered = function(ore, cluster_size, cluster_scarcity_cuberoot, ymin, ymax, wherein)
|
||||
assert(not (ymin and ymax) or ymin < ymax, "Elevation parameter error for register_scattered")
|
||||
localseed = localseed + 1 -- increment this every time it's called to ensure different distributions
|
||||
-- same seed makes the noise patterns overlap.
|
||||
-- one produces widespread smaller clusters, other produces larger clusters at the peaks of the noise in addition to the smaller ones
|
||||
register_scattered_internal(ore, cluster_size, cluster_scarcity_cuberoot, 0, ymin, ymax, wherein)
|
||||
register_scattered_internal(ore, cluster_size*2, cluster_scarcity_cuberoot, 0.25, ymin, ymax, wherein)
|
||||
end
|
||||
|
||||
if ores_registered["mcl_core:diorite"] then
|
||||
register_blob("mcl_core:diorite", 58, 10)
|
||||
register_blob("mcl_core:diorite", 33, 15)
|
||||
table.insert(wherein_stonelike, "mcl_core:diorite")
|
||||
end
|
||||
if ores_registered["mcl_core:andesite"] then
|
||||
register_blob("mcl_core:andesite", 58, 10)
|
||||
register_blob("mcl_core:andesite", 33, 15)
|
||||
table.insert(wherein_stonelike, "mcl_core:andesite")
|
||||
end
|
||||
if ores_registered["mcl_core:granite"] then
|
||||
register_blob("mcl_core:granite", 58, 10)
|
||||
register_blob("mcl_core:granite", 33, 15)
|
||||
table.insert(wherein_stonelike, "mcl_core:granite")
|
||||
end
|
||||
if ores_registered["mcl_core:dirt"] then
|
||||
register_blob("mcl_core:dirt", 33, 15, config.sunless_sea_min)
|
||||
if config.enable_primordial then
|
||||
register_blob("mcl_core:dirt", 33, 15, config.primordial_min, config.primoridal_max)
|
||||
end
|
||||
end
|
||||
if ores_registered["mcl_core:gravel"] then
|
||||
register_blob("mcl_core:gravel", 33, 14)
|
||||
end
|
||||
|
||||
if ores_registered["mcl_core:stone_with_iron"] then
|
||||
register_scattered("mcl_core:stone_with_iron", 3, 12)
|
||||
end
|
||||
if ores_registered["mcl_core:stone_with_coal"] then
|
||||
register_scattered("mcl_core:stone_with_coal", 3, 12)
|
||||
if config.enable_oil_sea then
|
||||
register_blob("mcl_core:stone_with_coal", 80, 10, config.oil_sea_level-200, config.oil_sea_level+200) -- tons of coal in the oil sea
|
||||
end
|
||||
end
|
||||
|
||||
if ores_registered["mcl_core:stone_with_lapis"] then
|
||||
register_scattered("mcl_core:stone_with_lapis", 3, 25, config.sunless_sea_min, config.level3_min) -- Lapis is an ocean gem, I decided
|
||||
if config.enable_primordial then
|
||||
register_scattered("mcl_core:stone_with_lapis", 3, 25, config.primordial_min, config.primordial_max)
|
||||
end
|
||||
end
|
||||
|
||||
if ores_registered["mcl_core:stone_with_redstone"] then
|
||||
register_scattered("mcl_core:stone_with_redstone", 3, 15, config.level3_min, config.level2_min) -- Level 3 is the most magical, scatter redstone there
|
||||
if config.enable_lava_sea then
|
||||
register_scattered("mcl_core:stone_with_redstone", 4, 15, config.lava_sea_level-200, config.lava_sea_level+100) -- and of course plenty of redstone in the lava sea
|
||||
end
|
||||
end
|
||||
|
||||
if ores_registered["mcl_core:stone_with_diamond"] then
|
||||
register_scattered("mcl_core:stone_with_diamond", 2, 18, config.sunless_sea_min, config.level2_min)
|
||||
if config.enable_oil_sea then
|
||||
register_scattered("mcl_core:stone_with_diamond", 3, 18, config.oil_sea_level-200, config.oil_sea_level+200)
|
||||
end
|
||||
if config.enable_primordial then
|
||||
register_scattered("mcl_core:stone_with_diamond", 3, 15, config.primordial_min, config.primordial_max)
|
||||
end
|
||||
end
|
||||
|
||||
if ores_registered["mcl_core:stone_with_gold"] then
|
||||
register_scattered("mcl_core:stone_with_gold", 2, 18)
|
||||
if config.enable_primordial then
|
||||
register_scattered("mcl_core:stone_with_gold", 3, 15, config.primordial_min, config.primordial_max)
|
||||
end
|
||||
end
|
||||
|
||||
if ores_registered["mcl_core:stone_with_copper"] then
|
||||
register_scattered("mcl_core:stone_with_copper", 3, 18)
|
||||
end
|
||||
|
||||
if ores_registered["mcl_deepslate:deepslate"] then
|
||||
register_blob("mcl_deepslate:deepslate", 33, 15, lowest_elevation, config.sunless_sea_min) -- it's called deepslate, so put it deep
|
||||
end
|
||||
if ores_registered["mcl_deepslate:tuff"] then
|
||||
register_blob("mcl_deepslate:tuff", 33, 15, lowest_elevation, config.sunless_sea_min)
|
||||
end
|
||||
|
||||
if ores_registered["mcl_deepslate:deepslate_with_emerald"] then
|
||||
register_scattered("mcl_deepslate:deepslate_with_emerald", 1, 25, lowest_elevation, config.sunless_sea_min, "mcl_deepslate:deepslate")
|
||||
end
|
||||
if ores_registered["mcl_core:stone_with_emerald"] then
|
||||
register_scattered("mcl_core:stone_with_emerald", 1, 25, lowest_elevation, config.sunless_sea_min)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if minetest.get_modpath("mcl_init") then -- Mineclone 2
|
||||
|
||||
old_overworld_min = mcl_vars.mg_overworld_min -- remember this for weather control
|
||||
|
||||
mcl_vars.mg_overworld_min = lowest_elevation
|
||||
mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min
|
||||
mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min + 10
|
||||
mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000
|
||||
|
||||
-- shouldn't need to worry about the setting, extend_ores checks if the ores
|
||||
-- have already been registered.
|
||||
--if minetest.settings:get_bool("mcl_generate_ores", true) then
|
||||
extend_ores()
|
||||
--end
|
||||
|
||||
df_dependencies.mods_required.mcl_structures = true
|
||||
-- never mind - add dependency on mcl_strongholds and these will get generated before overworld_min gets changed.
|
||||
--if minetest.get_modpath("mcl_structures") and minetest.get_modpath("mcl_strongholds") then
|
||||
-- local elevation_delta = old_overworld_min - lowest_elevation
|
||||
-- local strongholds = mcl_structures.get_structure_data("stronghold")
|
||||
-- mcl_structures.register_structure_data("stronghold", strongholds)
|
||||
--end
|
||||
end
|
||||
if minetest.get_modpath("mcl_compatibility") then -- Mineclone 5
|
||||
old_overworld_min = mcl_vars.mg_overworld_min -- remember this for weather control
|
||||
|
||||
mcl_vars.mg_overworld_min = lowest_elevation
|
||||
mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min
|
||||
mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_overworld_min+4
|
||||
mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min+6
|
||||
mcl_vars.mg_lava = false
|
||||
mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000
|
||||
mcl_vars.mg_realm_barrier_overworld_end_max = mcl_vars.mg_end_max
|
||||
mcl_vars.mg_realm_barrier_overworld_end_min = mcl_vars.mg_end_max-11
|
||||
end
|
||||
if minetest.get_modpath("mcl_mapgen") then -- Mineclone 5
|
||||
old_overworld_min = mcl_mapgen.overworld.min -- remember this for weather control
|
||||
|
||||
mcl_mapgen.overworld.min = lowest_elevation
|
||||
mcl_mapgen.overworld.bedrock_min = mcl_mapgen.overworld.min
|
||||
mcl_mapgen.overworld.bedrock_max = mcl_mapgen.overworld.bedrock_min + (mcl_mapgen.bedrock_is_rough and 4 or 0)
|
||||
mcl_mapgen.overworld.lava_max = mcl_mapgen.overworld.min+6
|
||||
mcl_mapgen.overworld.railcorridors_height_min = -50
|
||||
mcl_mapgen.overworld.railcorridors_height_max = -2
|
||||
|
||||
mcl_mapgen.end_.max = mcl_mapgen.overworld.min - 2000
|
||||
mcl_mapgen.realm_barrier_overworld_end_max = mcl_mapgen.end_.max
|
||||
mcl_mapgen.realm_barrier_overworld_end_min = mcl_mapgen.end_.max - 11
|
||||
|
||||
if mcl_mapgen.on_settings_changed then
|
||||
mcl_mapgen.on_settings_changed()
|
||||
else
|
||||
minetest.log("error", "The installed version of the mcl_mapgen mod (part of Mineclone 5) "
|
||||
.."does not have an mcl_mapgen.on_settings_changed method. This will likely result in "
|
||||
.."altitudes below the original bedrock being inaccessible to players.")
|
||||
end
|
||||
|
||||
extend_ores()
|
||||
end
|
||||
if minetest.get_modpath("mcl_worlds") then
|
||||
local old_has_weather = mcl_worlds.has_weather
|
||||
mcl_worlds.has_weather = function(pos)
|
||||
-- No weather in the deep caverns
|
||||
if pos.y >= lowest_elevation and pos.y <= old_overworld_min then
|
||||
return false
|
||||
end
|
||||
return old_has_weather(pos)
|
||||
end
|
||||
end
|
76
df_dependencies/misc.lua
Normal file
76
df_dependencies/misc.lua
Normal file
@ -0,0 +1,76 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local select_required = df_dependencies.select_required
|
||||
local select_optional = df_dependencies.select_optional
|
||||
|
||||
df_dependencies.mods_required.farming = true
|
||||
|
||||
-- If the farming mod is installed, add the "straw" group to farming straw.
|
||||
-- This way goblin caps just need to check for group:straw to get cave straw as well
|
||||
local straw_def = minetest.registered_items["farming:straw"]
|
||||
if straw_def then
|
||||
local new_groups = {}
|
||||
for group, val in pairs(straw_def.groups) do
|
||||
new_groups[group] = val
|
||||
end
|
||||
new_groups.straw = 1
|
||||
minetest.override_item("farming:straw", {
|
||||
groups = new_groups
|
||||
})
|
||||
end
|
||||
|
||||
-- used to determine colour of spindlestem caps
|
||||
if minetest.get_modpath("default") then
|
||||
df_dependencies.data_iron_containing_nodes = {"default:stone_with_iron", "default:steelblock"}
|
||||
df_dependencies.data_copper_containing_nodes = {"default:stone_with_copper", "default:copperblock"}
|
||||
df_dependencies.data_mese_containing_nodes = {"default:stone_with_mese", "default:mese"}
|
||||
elseif minetest.get_modpath("mcl_core") then
|
||||
df_dependencies.data_iron_containing_nodes = {}
|
||||
minetest.after(0, function()
|
||||
for nodename, _ in pairs(minetest.registered_nodes) do
|
||||
if string.find(nodename, "iron") then
|
||||
table.insert(df_dependencies.data_iron_containing_nodes, nodename)
|
||||
end
|
||||
end
|
||||
end)
|
||||
df_dependencies.data_copper_containing_nodes = {}
|
||||
minetest.after(0, function()
|
||||
for nodename, _ in pairs(minetest.registered_nodes) do
|
||||
if string.find(nodename, "copper") then
|
||||
table.insert(df_dependencies.data_copper_containing_nodes, nodename)
|
||||
end
|
||||
end
|
||||
end)
|
||||
df_dependencies.data_mese_containing_nodes = {"mcl_deepslate:deepslate_with_redstone", "mcl_deepslate:deepslate_with_redstone_lit",
|
||||
"mcl_core:stone_with_redstone", "mcl_core:stone_with_redstone_lit", "group:mesecon_conductor_craftable", "group:mesecon", "group:mesecon_effector_off"}
|
||||
end
|
||||
|
||||
-- common nodes that can be found next to pit plasma, triggering matter degradation
|
||||
-- don't trigger on air, that's for sparkle generation
|
||||
df_dependencies.abm_pit_plasma_neighbors = {"group:stone", "group:lava", "group:water", "group:material_stone"}
|
||||
|
||||
df_dependencies.texture_cobble = select_required({default="default_cobble.png", mcl_core="default_cobble.png"})
|
||||
df_dependencies.texture_coral_skeleton = select_required({default="default_coral_skeleton.png", mcl_ocean="mcl_ocean_dead_horn_coral_block.png"})
|
||||
df_dependencies.texture_dirt = select_required({default="default_dirt.png", mcl_core="default_dirt.png"})
|
||||
df_dependencies.texture_gold_block = select_required({default="default_gold_block.png", mcl_core="default_gold_block.png"})
|
||||
df_dependencies.texture_ice = select_required({default="default_ice.png", mcl_core="default_ice.png"})
|
||||
df_dependencies.texture_sand = select_required({default="default_sand.png", mcl_core="default_sand.png"})
|
||||
df_dependencies.texture_stone = select_required({default="default_stone.png", mcl_core="default_stone.png"})
|
||||
df_dependencies.texture_wood = select_required({default="default_wood.png", mcl_core="default_wood.png"})
|
||||
df_dependencies.texture_mineral_coal = select_required({default="default_mineral_coal.png", mcl_core="mcl_core_coal_ore.png"}) -- MCL's coal texture isn't transparent, but is only used with gas seeps and should work fine that way
|
||||
df_dependencies.texture_glass_bottle = select_required({vessels="vessels_glass_bottle.png", mcl_potions="mcl_potions_potion_bottle.png"})
|
||||
df_dependencies.texture_meselamp = "dfcaverns_glow_mese.png"
|
||||
|
||||
df_dependencies.texture_tool_steelhoe = select_required({default="farming_tool_steelhoe.png", mcl_farming="farming_tool_steelhoe.png"})
|
||||
df_dependencies.texture_tool_steelpick = select_required({default="default_tool_steelpick.png", mcl_farming="default_tool_steelpick.png"})
|
||||
df_dependencies.texture_tool_steelshovel = select_required({default="default_tool_steelshovel.png", mcl_farming="default_tool_steelshovel.png"})
|
||||
df_dependencies.texture_farming_soil = select_required({default="(default_dirt.png^farming_soil.png)", mcl_farming="mcl_farming_farmland_dry.png"})
|
||||
|
||||
df_dependencies.texture_mapping_kit = select_required({default="map_mapping_kit.png", mcl_maps="mcl_maps_map_filled.png"})
|
||||
|
||||
df_dependencies.nethercap_name = S("Nethercap")
|
||||
if minetest.get_modpath("mcl_mapgen_core") then
|
||||
-- since there's a whole layer called the Nether in Mineclone and it has its own mushrooms, rename
|
||||
-- nethercaps when that's present to avoid confusion.
|
||||
df_dependencies.nethercap_name = S("Icecap")
|
||||
end
|
4
df_dependencies/mod.conf
Normal file
4
df_dependencies/mod.conf
Normal file
@ -0,0 +1,4 @@
|
||||
name = df_dependencies
|
||||
description = A utility mod for df_caverns that gathers all dependencies on minetest_game in one place, to ease cross-compatibility efforts with Minetest Game, MineClone2 and MineClone5.
|
||||
depends =
|
||||
optional_depends = beds, bucket, default, doors, farming, fireflies, mcl_beds, mcl_buckets, mcl_chests, mcl_compatibility, mcl_copper, mcl_core, mcl_doors, mcl_explosions, mcl_farming, mcl_fences, mcl_formspec, mcl_furnaces, mcl_init, mcl_mapgen, mcl_mobitems, mcl_ocean, mcl_potions, mcl_sounds, mcl_stairs, mcl_strongholds, mcl_tnt, mcl_torches, mcl_wool, mcl_worlds, mclx_core, mesecons, moreblocks, stairs, tnt, vessels, wool
|
126
df_dependencies/nodes.lua
Normal file
126
df_dependencies/nodes.lua
Normal file
@ -0,0 +1,126 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local required_nodes = {}
|
||||
local function select_required(...)
|
||||
local newdef = {}
|
||||
for _, node in pairs({...}) do
|
||||
newdef[string.match(node, "(.-):")] = node
|
||||
end
|
||||
local ret = df_dependencies.select_required(newdef)
|
||||
table.insert(required_nodes, ret)
|
||||
return ret
|
||||
end
|
||||
|
||||
local function select_optional(...)
|
||||
local newdef = {}
|
||||
for _, node in pairs({...}) do
|
||||
newdef[string.match(node, "(.-):")] = node
|
||||
end
|
||||
local ret = df_dependencies.select_optional(newdef)
|
||||
table.insert(required_nodes, ret)
|
||||
return ret
|
||||
end
|
||||
|
||||
|
||||
minetest.after(0, function()
|
||||
-- "after" needs to be used here because some of these nodes actually get registered in DF Caverns itself
|
||||
-- stair nodes, for example, depend on the stairs mod but get registered from here. Kind of weird but
|
||||
-- one goes to war with the mods one has.
|
||||
local problem_nodes = {}
|
||||
for _, node_name in pairs(required_nodes) do
|
||||
if minetest.registered_items[node_name] == nil then
|
||||
table.insert(problem_nodes, node_name)
|
||||
end
|
||||
end
|
||||
|
||||
assert(#problem_nodes == 0, "Nodes " .. table.concat(problem_nodes, ", ") .. " were returned by a selection call but are not registered.")
|
||||
end)
|
||||
|
||||
|
||||
df_dependencies.node_name_apple = select_required("default:apple", "mcl_core:apple")
|
||||
df_dependencies.node_name_chest = select_required("default:chest", "mcl_chests:chest")
|
||||
df_dependencies.node_name_coalblock = select_required("default:coalblock", "mcl_core:coalblock")
|
||||
df_dependencies.node_name_coal_lump = select_required("default:coal_lump", "mcl_core:coal_lump")
|
||||
df_dependencies.node_name_cobble = select_required("default:cobble", "mcl_core:cobble")
|
||||
df_dependencies.node_name_coral_skeleton = select_required("default:coral_skeleton", "mcl_ocean:dead_horn_coral_block")
|
||||
df_dependencies.node_name_desert_sand = select_required("default:desert_sand", "mcl_core:redsand")
|
||||
df_dependencies.node_name_dirt = select_required("default:dirt", "mcl_core:dirt")
|
||||
df_dependencies.node_name_dry_grass_3 = select_required("default:dry_grass_3", "mcl_core:deadbush") -- There doesn't seem to be an MCL equivalent of this
|
||||
df_dependencies.node_name_dry_grass_4 = select_required("default:dry_grass_4", "mcl_core:deadbush") -- There doesn't seem to be an MCL equivalent of this
|
||||
df_dependencies.node_name_dry_shrub = select_required("default:dry_shrub", "mcl_core:deadbush")
|
||||
df_dependencies.node_name_furnace = select_required("default:furnace", "mcl_furnaces:furnace")
|
||||
df_dependencies.node_name_gold_ingot = select_required("default:gold_ingot", "mcl_core:gold_ingot")
|
||||
df_dependencies.node_name_gravel = select_required("default:gravel", "mcl_core:gravel")
|
||||
df_dependencies.node_name_ice = select_required("default:ice", "mcl_core:ice")
|
||||
df_dependencies.node_name_junglewood = select_required("default:junglewood", "mcl_core:junglewood")
|
||||
df_dependencies.node_name_lava_source = select_required("default:lava_source", "mcl_core:lava_source")
|
||||
df_dependencies.node_name_mese_crystal = select_required("default:mese_crystal", "mesecons:wire_00000000_off") --make sure default:mese_crystal is first, so that default will be checked for before mesecons is checked for.
|
||||
df_dependencies.node_name_mossycobble = select_required("default:mossycobble", "mcl_core:mossycobble")
|
||||
df_dependencies.node_name_obsidian = select_required("default:obsidian", "mcl_core:obsidian")
|
||||
df_dependencies.node_name_paper = select_required("default:paper", "mcl_core:paper")
|
||||
df_dependencies.node_name_river_water_flowing = select_required("default:river_water_flowing", "mclx_core:river_water_flowing")
|
||||
df_dependencies.node_name_river_water_source = select_required("default:river_water_source", "mclx_core:river_water_source")
|
||||
df_dependencies.node_name_sand = select_required("default:sand", "mcl_core:sand")
|
||||
df_dependencies.node_name_silver_sand = select_required("default:silver_sand", "mcl_core:sand") -- There doesn't seem to be an MCL equivalent of this
|
||||
df_dependencies.node_name_snow = select_required("default:snow", "mcl_core:snow")
|
||||
df_dependencies.node_name_stone = select_required("default:stone", "mcl_core:stone")
|
||||
df_dependencies.node_name_stone_with_coal = select_required("default:stone_with_coal", "mcl_core:stone_with_coal")
|
||||
df_dependencies.node_name_stone_with_mese = select_required("default:stone_with_mese", "mcl_core:stone_with_redstone")
|
||||
df_dependencies.node_name_torch = select_required("default:torch", "mcl_torches:torch")
|
||||
df_dependencies.node_name_torch_wall = select_required("default:torch_wall", "mcl_torches:torch_wall")
|
||||
df_dependencies.node_name_water_flowing = select_required("default:water_flowing", "mcl_core:water_flowing")
|
||||
df_dependencies.node_name_water_source = select_required("default:water_source", "mcl_core:water_source")
|
||||
df_dependencies.node_name_stone_with_iron = select_required("default:stone_with_iron", "mcl_core:stone_with_iron")
|
||||
df_dependencies.node_name_steelblock = select_required("default:steelblock", "mcl_core:ironblock")
|
||||
df_dependencies.node_name_stone_with_copper = select_required("default:stone_with_copper", "mcl_copper:stone_with_copper")
|
||||
df_dependencies.node_name_copperblock = select_required("default:copperblock", "mcl_copper:block_raw")
|
||||
|
||||
df_dependencies.node_name_dirt_furrowed = select_required("farming:soil", "mcl_farming:soil")
|
||||
df_dependencies.node_name_dirt_wet = select_required("farming:soil_wet", "mcl_farming:soil_wet")
|
||||
--df_dependencies.node_name_mortar_pestle = select_optional("farming:mortar_pestle") -- TODO where did this go?
|
||||
df_dependencies.node_name_string = select_required("farming:string", "mcl_mobitems:string")
|
||||
|
||||
df_dependencies.node_name_bucket_empty = select_required("bucket:bucket_empty", "mcl_buckets:bucket_empty")
|
||||
df_dependencies.node_name_bucket_lava = select_required("bucket:bucket_lava", "mcl_buckets:bucket_lava")
|
||||
|
||||
-- from "wool"
|
||||
|
||||
df_dependencies.node_name_wool_white = select_required("wool:white", "mcl_wool:white")
|
||||
|
||||
-- from "fireflies"
|
||||
df_dependencies.node_name_fireflies = select_optional("fireflies:firefly")
|
||||
|
||||
-- from "vessels"
|
||||
df_dependencies.node_name_glass_bottle = select_required("vessels:glass_bottle", "mcl_potions:glass_bottle")
|
||||
df_dependencies.node_name_shelf = select_optional("vessels:shelf")
|
||||
|
||||
-- from "beds"
|
||||
df_dependencies.node_name_bed_bottom = select_required("beds:bed_bottom", "mcl_beds:bed_red_bottom")
|
||||
df_dependencies.node_name_bed_top = select_required("beds:bed_top", "mcl_beds:bed_red_top")
|
||||
|
||||
-- from "doors"
|
||||
df_dependencies.node_name_door_wood_a = select_required("doors:door_wood_a", "mcl_doors:wooden_door_b_1")
|
||||
df_dependencies.node_name_door_hidden = select_required("doors:hidden", "mcl_doors:wooden_door_t_1")
|
||||
|
||||
-- from "stairs"
|
||||
|
||||
df_dependencies.node_name_slab_goblin_cap_stem_wood = select_required("stairs:slab_goblin_cap_stem_wood", "mcl_stairs:slab_goblin_cap_stem_wood")
|
||||
df_dependencies.node_name_slab_slade_brick = select_required("stairs:slab_slade_brick", "mcl_stairs:slab_slade_brick")
|
||||
df_dependencies.node_name_stair_goblin_cap_stem_wood = select_required("stairs:stair_goblin_cap_stem_wood", "mcl_stairs:stair_goblin_cap_stem_wood")
|
||||
df_dependencies.node_name_stair_inner_slade_brick = select_required("stairs:stair_inner_slade_brick", "mcl_stairs:stair_slade_brick_inner")
|
||||
df_dependencies.node_name_stair_outer_slade_brick = select_required("stairs:stair_outer_slade_brick", "mcl_stairs:stair_slade_brick_outer")
|
||||
df_dependencies.node_name_stair_slade_block = select_required("stairs:stair_slade_block", "mcl_stairs:stair_slade_block")
|
||||
df_dependencies.node_name_slab_slade_block = select_required("stairs:slab_slade_block", "mcl_stairs:slab_slade_block")
|
||||
df_dependencies.node_name_stair_slade_brick = select_required("stairs:stair_slade_brick", "mcl_stairs:stair_slade_brick")
|
||||
df_dependencies.node_name_slab_slade_block_top = select_optional("mcl_stairs:slab_slade_block_top")
|
||||
|
||||
-- from "tnt"
|
||||
|
||||
df_dependencies.node_name_gunpowder = select_optional("tnt:gunpowder", "mcl_mobitems:gunpowder")
|
||||
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
||||
if not df_dependencies.node_name_fireflies then
|
||||
dofile(modpath.."/fireflies.lua")
|
||||
df_dependencies.node_name_fireflies = "df_dependencies:firefly"
|
||||
end
|
81
df_dependencies/settingtypes.txt
Normal file
81
df_dependencies/settingtypes.txt
Normal file
@ -0,0 +1,81 @@
|
||||
[Cavern dimensions]
|
||||
|
||||
#Note that this doesn't guarantee caverns of this setting's size. This setting
|
||||
#affects the scale of features in the perlin noise that is used to build caverns.
|
||||
#Most caverns will be smaller than this (and a few might be larger)
|
||||
dfcaverns_vertical_cavern_scale (Vertical cavern dimension scale) float 256
|
||||
#Note that this doesn't guarantee caverns of this setting's size. This setting
|
||||
#affects the scale of features in the perlin noise that is used to build caverns.
|
||||
#Most caverns will be smaller than this (and a few might be larger)
|
||||
dfcaverns_horizontal_cavern_scale (Horizontal cavern dimension scale) float 256
|
||||
#Determines threshold for cave generation. Higher number means sparser, smaller caverns
|
||||
dfcaverns_cavern_threshold (Cavern threshold) float 0.5 0.0 1.0
|
||||
#Determines threshold for lower sea cave generation. Higher number means sparser, smaller caverns
|
||||
dfcaverns_sunless_sea_threshold (Cavern threshold for sunless sea) float 0.4 0.0 1.0
|
||||
#Determines how far out water extends into tunnels below the 'sea level' of from flooded
|
||||
#caverns. Lower numbers give more flooded tunnel. If this number equals the cavern
|
||||
#threshold tunnels will not be flooded at all, if it is 0 then half the tunnels will be flooded.
|
||||
dfcaverns_tunnel_flooding_threshold (Tunnel flooding threshold) float 0.25 0.0 1.0
|
||||
|
||||
[Cavern depth borders]
|
||||
|
||||
#maximum boundary for cavern depths are most efficient when they fit the formula (x*80-32-1)
|
||||
#where x is an integer. That way you don't get map blocks that straddle two cavern layers.
|
||||
dfcaverns_ymax (Upper limit of level 1) int -193
|
||||
#minimum boundaries for cavern depths are most efficient when they fit the formula (x*80-32)
|
||||
#where x is an integer. that way you don't get map blocks that straddle two cavern layers.
|
||||
dfcaverns_level1_min (Upper limit of level 2) int -832
|
||||
dfcaverns_level2_min (Upper limit of level 3) int -1472
|
||||
dfcaverns_level3_min (Upper limit of the sunless sea) int -2112
|
||||
dfcaverns_sunless_sea_min (Lower limit of the sunless sea) int -2512
|
||||
|
||||
[Lower Levels]
|
||||
|
||||
dfcaverns_enable_oil_sea (Generate oil sea) bool true
|
||||
dfcaverns_oil_sea_level (Oil sea level) int -2700
|
||||
|
||||
dfcaverns_enable_lava_sea (Generate magma sea) bool true
|
||||
dfcaverns_lava_sea_level (Lava sea level) int -2900
|
||||
|
||||
dfcaverns_enable_underworld (Generate underworld) bool true
|
||||
dfcaverns_underworld_level (Underworld level) int -3200
|
||||
#Set this to 0 to disable glowing pit generation entirely.
|
||||
dfcaverns_underworld_glowing_pit_mapblocks(Average pit spacing measured in mapblocks) int 8
|
||||
|
||||
[Underworld feature HUD]
|
||||
|
||||
dfcaverns_underworld_hud_requires_item (Require an item to view waypoints) bool true
|
||||
#Players can still discover the locations of volcanoes without this, but waypoints
|
||||
#will only be visible in their hud if they have this item in their inventory. You can also
|
||||
#specify "group:groupname" here. Leave it blank to default to map:mapping_kit.
|
||||
dfcaverns_underworld_hud_item_required (Specify the item or group required) string map:mapping_kit
|
||||
|
||||
dfcaverns_show_pits_in_hud (Show pit locations in HUD) bool true
|
||||
dfcaverns_pit_discovery_range (Pit discovery range) int 60
|
||||
dfcaverns_pit_visibility_range (Pit visibility range) int 500
|
||||
|
||||
dfcaverns_show_seals_in_hud (Seal locations in HUD) bool true
|
||||
dfcaverns_seal_discovery_range (Seal discovery range) int 10
|
||||
dfcaverns_seal_visibility_range (Seal visibility range) int 200
|
||||
|
||||
dfcaverns_show_ruins_in_hud (Ruin locations visible in HUD) bool true
|
||||
dfcaverns_ruin_discovery_range (Ruin discovery range) int 40
|
||||
dfcaverns_ruin_visibility_range (Ruin visibility range) int 250
|
||||
|
||||
[Primordial]
|
||||
|
||||
dfcaverns_enable_primordial (Generate primordial caverns) bool true
|
||||
dfcaverns_primordial_max (Upper limit of primordial caverns) int -3393
|
||||
dfcaverns_primordial_min (Lower limit of primordial caverns) int -4032
|
||||
|
||||
# This setting is pretty technical, it spreads out the
|
||||
# construction of giant mycelium networks on mapgen
|
||||
# over this many seconds. If you're experiencing lag spikes
|
||||
# during mapgen of Primordial cavern layer mushroom caverns
|
||||
# then increasing this number may help.
|
||||
dcaverns_giant_mycelium_timer_spread (Giant Mycelium mapgen timer spread) int 10
|
||||
|
||||
[Plant growth restrictions]
|
||||
|
||||
dfcaverns_restrict_trees_to_biomes (Restrict underground tree growth to their home biomes) bool false
|
||||
dfcaverns_restrict_farmables_to_biomes (Restrict underground farmable plant growth to their home biomes) bool false
|
38
df_dependencies/sounds.lua
Normal file
38
df_dependencies/sounds.lua
Normal file
@ -0,0 +1,38 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local select_required = df_dependencies.select_required
|
||||
local select_optional = df_dependencies.select_optional
|
||||
|
||||
df_dependencies.mods_required.mcl_sounds = true
|
||||
|
||||
if minetest.get_modpath("default") then
|
||||
df_dependencies.sound_dirt = default.node_sound_dirt_defaults
|
||||
df_dependencies.sound_glass = default.node_sound_glass_defaults
|
||||
df_dependencies.sound_gravel = default.node_sound_gravel_defaults
|
||||
df_dependencies.sound_leaves = default.node_sound_leaves_defaults
|
||||
df_dependencies.sound_sand = default.node_sound_sand_defaults
|
||||
df_dependencies.sound_stone = default.node_sound_stone_defaults
|
||||
df_dependencies.sound_water = default.node_sound_water_defaults
|
||||
df_dependencies.sound_wood = default.node_sound_wood_defaults
|
||||
elseif minetest.get_modpath("mcl_sounds") then
|
||||
df_dependencies.sound_dirt = mcl_sounds.node_sound_dirt_defaults
|
||||
df_dependencies.sound_glass = mcl_sounds.node_sound_glass_defaults
|
||||
df_dependencies.sound_gravel = function(table)
|
||||
table = table or {}
|
||||
table.footstep = table.footstep or {name="default_gravel_footstep", gain=0.45}
|
||||
return mcl_sounds.node_sound_dirt_defaults(table)
|
||||
end
|
||||
df_dependencies.sound_leaves = mcl_sounds.node_sound_leaves_defaults
|
||||
df_dependencies.sound_sand = mcl_sounds.node_sound_sand_defaults
|
||||
df_dependencies.sound_stone = mcl_sounds.node_sound_stone_defaults
|
||||
df_dependencies.sound_water = mcl_sounds.node_sound_water_defaults
|
||||
df_dependencies.sound_wood = mcl_sounds.node_sound_wood_defaults
|
||||
else
|
||||
assert(false, "One of [default] or [mcl_sounds] must be active")
|
||||
end
|
||||
|
||||
df_dependencies.soundfile_grass_footstep = select_required({default="default_grass_footstep", mcl_sounds="default_grass_footstep"})
|
||||
df_dependencies.soundfile_snow_footstep = select_required({default="default_snow_footstep", mcl_sounds="pedology_snow_soft_footstep"})
|
||||
df_dependencies.soundfile_gravel_footstep = select_required({default="default_gravel_footstep", mcl_sounds="default_gravel_footstep"})
|
||||
df_dependencies.soundfile_cool_lava = select_required({default="default_cool_lava", mcl_sounds="default_cool_lava"})
|
||||
df_dependencies.soundfile_tnt_ignite = select_required({default="tnt_ignite", mcl_tnt="tnt_ignite"})
|
BIN
df_dependencies/textures/default_invisible_node_overlay.png
Normal file
BIN
df_dependencies/textures/default_invisible_node_overlay.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 110 B |
BIN
df_dependencies/textures/fireflies_bottle.png
Normal file
BIN
df_dependencies/textures/fireflies_bottle.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 172 B |
BIN
df_dependencies/textures/fireflies_bottle_animated.png
Normal file
BIN
df_dependencies/textures/fireflies_bottle_animated.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 203 B |
BIN
df_dependencies/textures/fireflies_bugnet.png
Normal file
BIN
df_dependencies/textures/fireflies_bugnet.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 192 B |
BIN
df_dependencies/textures/fireflies_firefly.png
Normal file
BIN
df_dependencies/textures/fireflies_firefly.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 113 B |
BIN
df_dependencies/textures/fireflies_firefly_animated.png
Normal file
BIN
df_dependencies/textures/fireflies_firefly_animated.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 121 B |
Reference in New Issue
Block a user