mods that hopefully work for a TechAge-based pack
@@ -0,0 +1,390 @@
|
||||
local MODNAME = minetest.get_current_modname()
|
||||
local MODPATH = minetest.get_modpath(MODNAME)
|
||||
local S = minetest.get_translator(MODNAME)
|
||||
|
||||
local max_goo_range = get_setting("max_goo_range", 15)
|
||||
|
||||
minetest.register_node("uraniumstuff:goo_source", {
|
||||
description = S("Green Goo"),
|
||||
drawtype = "liquid",
|
||||
tiles = {
|
||||
{
|
||||
name = "uraniumstuff_goo_source.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 2.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
name = "uraniumstuff_goo_source.png",
|
||||
backface_culling = true,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 2.0,
|
||||
},
|
||||
},
|
||||
},
|
||||
use_texture_alpha = "blend",
|
||||
waving = 3,
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
pointable = false,
|
||||
diggable = false,
|
||||
sunlight_propagates = true,
|
||||
buildable_to = true,
|
||||
is_ground_content = false,
|
||||
drop = "",
|
||||
drowning = 1,
|
||||
liquidtype = "source",
|
||||
liquid_range = 3,
|
||||
liquid_renewable = false,
|
||||
liquid_alternative_flowing = "uraniumstuff:goo_flowing",
|
||||
liquid_alternative_source = "uraniumstuff:goo_source",
|
||||
liquid_viscosity = WATER_VISC,
|
||||
post_effect_color = {a = 103, r = 40, g = 90, b = 30},
|
||||
groups = {liquid = 1, dig_by_piston=1},
|
||||
sounds = default.node_sound_water_defaults(),
|
||||
light_source = 5,
|
||||
_mcl_blast_resistance = 100,
|
||||
_mcl_hardness = -1,
|
||||
})
|
||||
|
||||
minetest.register_node("uraniumstuff:goo_flowing", {
|
||||
description = S("Flowing Green Goo"),
|
||||
drawtype = "flowingliquid",
|
||||
tiles = {"uraniumstuff_goo.png"},
|
||||
special_tiles = {
|
||||
{
|
||||
name = "uraniumstuff_goo_flowing.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 0.5,
|
||||
},
|
||||
},
|
||||
{
|
||||
name = "uraniumstuff_goo_flowing.png",
|
||||
backface_culling = true,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 0.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
use_texture_alpha = "blend",
|
||||
waving = 3,
|
||||
paramtype = "light",
|
||||
paramtype2 = "flowingliquid",
|
||||
walkable = false,
|
||||
pointable = false,
|
||||
diggable = false,
|
||||
buildable_to = true,
|
||||
is_ground_content = false,
|
||||
sunlight_propagates = true,
|
||||
drop = "",
|
||||
drowning = 1,
|
||||
liquidtype = "flowing",
|
||||
liquid_range = 3,
|
||||
liquid_renewable = false,
|
||||
liquid_alternative_flowing = "uraniumstuff:goo_flowing",
|
||||
liquid_alternative_source = "uraniumstuff:goo_source",
|
||||
liquid_viscosity = WATER_VISC,
|
||||
post_effect_color = {a = 103, r = 40, g = 90, b = 30},
|
||||
groups = {liquid = 1, not_in_creative_inventory = 1, dig_by_piston=1},
|
||||
sounds = default.node_sound_water_defaults(),
|
||||
light_source = 5,
|
||||
_mcl_blast_resistance = 100,
|
||||
_mcl_hardness = -1,
|
||||
})
|
||||
|
||||
minetest.register_node("uraniumstuff:evil_goo_source", {
|
||||
description = S("Evil Green Goo"),
|
||||
drawtype = "liquid",
|
||||
tiles = {
|
||||
{
|
||||
name = "uraniumstuff_goo_source.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 2.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
name = "uraniumstuff_goo_source.png",
|
||||
backface_culling = true,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 2.0,
|
||||
},
|
||||
},
|
||||
},
|
||||
use_texture_alpha = "blend",
|
||||
waving = 3,
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
pointable = false,
|
||||
diggable = false,
|
||||
sunlight_propagates = true,
|
||||
buildable_to = true,
|
||||
is_ground_content = false,
|
||||
drop = "",
|
||||
drowning = 1,
|
||||
liquidtype = "source",
|
||||
liquid_range = 3,
|
||||
liquid_renewable = false,
|
||||
liquid_alternative_flowing = "uraniumstuff:evil_goo_flowing",
|
||||
liquid_alternative_source = "uraniumstuff:evil_goo_source",
|
||||
liquid_viscosity = WATER_VISC,
|
||||
damage_per_second = 5,
|
||||
post_effect_color = {a = 103, r = 40, g = 90, b = 30},
|
||||
groups = {liquid = 1, dig_by_piston=1},
|
||||
sounds = default.node_sound_water_defaults(),
|
||||
light_source = 5,
|
||||
_mcl_blast_resistance = 100,
|
||||
_mcl_hardness = -1,
|
||||
})
|
||||
|
||||
minetest.register_node("uraniumstuff:evil_goo_flowing", {
|
||||
description = S("Flowing Evil Green Goo"),
|
||||
drawtype = "flowingliquid",
|
||||
tiles = {"uraniumstuff_goo.png"},
|
||||
special_tiles = {
|
||||
{
|
||||
name = "uraniumstuff_goo_flowing.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 0.5,
|
||||
},
|
||||
},
|
||||
{
|
||||
name = "uraniumstuff_goo_flowing.png",
|
||||
backface_culling = true,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 0.5,
|
||||
},
|
||||
},
|
||||
},
|
||||
use_texture_alpha = "blend",
|
||||
waving = 3,
|
||||
paramtype = "light",
|
||||
paramtype2 = "flowingliquid",
|
||||
walkable = false,
|
||||
pointable = false,
|
||||
diggable = false,
|
||||
buildable_to = true,
|
||||
is_ground_content = false,
|
||||
sunlight_propagates = true,
|
||||
drop = "",
|
||||
drowning = 1,
|
||||
liquidtype = "flowing",
|
||||
liquid_range = 3,
|
||||
liquid_renewable = false,
|
||||
liquid_alternative_flowing = "uraniumstuff:evil_goo_flowing",
|
||||
liquid_alternative_source = "uraniumstuff:evil_goo_source",
|
||||
liquid_viscosity = WATER_VISC,
|
||||
damage_per_second = 5,
|
||||
post_effect_color = {a = 103, r = 40, g = 90, b = 30},
|
||||
groups = {liquid = 1, not_in_creative_inventory = 1, dig_by_piston=1},
|
||||
sounds = default.node_sound_water_defaults(),
|
||||
light_source = 5,
|
||||
_mcl_blast_resistance = 100,
|
||||
_mcl_hardness = -1,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("bucket") then
|
||||
bucket.register_liquid(
|
||||
"uraniumstuff:goo_source",
|
||||
"uraniumstuff:goo_flowing",
|
||||
"uraniumstuff:bucket_goo",
|
||||
"uraniumstuff_bucket_goo.png",
|
||||
S("Goo Bucket"),
|
||||
{tool = 1}
|
||||
)
|
||||
bucket.register_liquid(
|
||||
"uraniumstuff:evil_goo_source",
|
||||
"uraniumstuff:evil_goo_flowing",
|
||||
"uraniumstuff:bucket_evil_goo",
|
||||
"uraniumstuff_bucket_goo.png",
|
||||
S("Evil Goo Bucket"),
|
||||
{tool = 1}
|
||||
)
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "uraniumstuff:bucket_evil_goo",
|
||||
recipe = {"uraniumstuff:bucket_goo", "uraniumstuff:uranium_gem"},
|
||||
})
|
||||
end
|
||||
|
||||
local function make_vector(pos_1, pos_2)
|
||||
local x_dif = pos_2.x - pos_1.x
|
||||
local y_dif = pos_2.y - pos_1.y
|
||||
local z_dif = pos_2.z - pos_1.z
|
||||
return {x = x_dif, y = y_dif, z = z_dif}
|
||||
end
|
||||
|
||||
local function length_cb(vector)
|
||||
return vector.x*vector.x + vector.y*vector.y + vector.z*vector.z
|
||||
end
|
||||
|
||||
local function distance_cb(pos_1, pos_2)
|
||||
local vector = make_vector(pos_1, pos_2)
|
||||
return length_cb(vector)
|
||||
end
|
||||
|
||||
local function length(vector)
|
||||
return math.sqrt(length_cb(vector))
|
||||
end
|
||||
|
||||
local function distance(pos_1, pos_2)
|
||||
return math.sqrt(distance_cb(pos_1, pos_2))
|
||||
end
|
||||
|
||||
local function normalize(vector)
|
||||
local length = length(vector)
|
||||
vector.x = vector.x/length
|
||||
vector.y = vector.y/length
|
||||
vector.z = vector.z/length
|
||||
return vector
|
||||
end
|
||||
|
||||
local function int_vector(vector)
|
||||
if vector.x < -0.5 then vector.x = -1 elseif vector.x > 0.5 then vector.x = 1 else vector.x = 0 end
|
||||
if vector.y < -0.5 then vector.y = -1 elseif vector.y > 0.5 then vector.y = 1 else vector.y = 0 end
|
||||
if vector.z < -0.5 then vector.z = -1 elseif vector.z > 0.5 then vector.z = 1 else vector.z = 0 end
|
||||
return vector
|
||||
end
|
||||
|
||||
local empty_node_names = {
|
||||
"air",
|
||||
"default:water"
|
||||
}
|
||||
|
||||
local goo_node_names = {
|
||||
"uraniumstuff:goo_source",
|
||||
"uraniumstuff:evil_goo_source",
|
||||
"uraniumstuff:goo_flowing",
|
||||
"uraniumstuff:evil_goo_flowing",
|
||||
}
|
||||
|
||||
local function is_node_empty(node)
|
||||
for i, name in ipairs(empty_node_names) do
|
||||
if name == node.name then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function is_node_goo(node)
|
||||
for i, name in ipairs(goo_node_names) do
|
||||
if name == node.name then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function can_goo_go_to(pos, check_below)
|
||||
local node_at_pos = minetest.get_node(pos)
|
||||
local below_pos = {x = pos.x, y = pos.y - 1, z = pos.z}
|
||||
local node_below = minetest.get_node(below_pos)
|
||||
if not (is_node_empty(node_at_pos) or is_node_goo(node_at_pos)) then return false end
|
||||
if check_below and (is_node_empty(node_below) or is_node_goo(node_below)) then return false end
|
||||
return true
|
||||
end
|
||||
|
||||
local function has_solid_neighbor(pos)
|
||||
local positions = {
|
||||
{x = pos.x + 1, y = pos.y, z = pos.z},
|
||||
{x = pos.x - 1, y = pos.y, z = pos.z},
|
||||
{x = pos.x, y = pos.y, z = pos.z + 1},
|
||||
{x = pos.x, y = pos.y, z = pos.z - 1},
|
||||
}
|
||||
for _, position in ipairs(positions) do
|
||||
local node = minetest.get_node(pos)
|
||||
if not is_node_empty(node) then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function table_equals(t1, t2)
|
||||
for key, value in pairs(t1) do
|
||||
if t1[key] ~= t2[key] then return false end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
local function get_closest_entity(pos)
|
||||
local dist = 0
|
||||
local cl_entity = nil
|
||||
for name, entity in pairs(minetest.luaentities) do
|
||||
if entity.health and entity.health > 0 then
|
||||
local e_pos = entity.object:get_pos()
|
||||
if e_pos then
|
||||
local dist_cb = distance_cb(pos, e_pos)
|
||||
if dist_cb < dist or cl_entity == nil then
|
||||
dist = dist_cb
|
||||
cl_entity = entity
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return cl_entity
|
||||
end
|
||||
|
||||
local function move_goo_towards(pos, entity_pos)
|
||||
local vector = make_vector(pos, entity_pos)
|
||||
if length(vector) > max_goo_range then return nil end
|
||||
local n_vector = normalize(vector)
|
||||
local move = int_vector(n_vector)
|
||||
local new_pos = {x = pos.x + move.x, y = pos.y, z = pos.z + move.z}
|
||||
local y_dir = 1
|
||||
if n_vector.y < 0 then y_dir = -1 end
|
||||
local pos_options = {
|
||||
{pos = new_pos, check_below = true},
|
||||
{pos = {x = new_pos.x, y = new_pos.y + y_dir, z = new_pos.z}, check_below = y_dir > 0},
|
||||
{pos = {x = new_pos.x, y = new_pos.y - y_dir, z = new_pos.z}, check_below = y_dir < 0},
|
||||
{pos = {x = pos.x, y = pos.y + y_dir, z = pos.z}, check_below = false, solid_neighbor = y_dir > 0},
|
||||
{pos = {x = pos.x, y = pos.y - y_dir, z = pos.z}, check_below = false, solid_neighbor = y_dir < 0},
|
||||
}
|
||||
for _, pos_option in ipairs(pos_options) do
|
||||
local next_pos = pos_option.pos
|
||||
if (not table_equals(pos, next_pos)) and can_goo_go_to(next_pos, pos_option.check_below) then
|
||||
if (not pos_option.solid_neighbor) or has_solid_neighbor(pos) then
|
||||
minetest.set_node(next_pos, {name="uraniumstuff:evil_goo_source"})
|
||||
minetest.set_node(pos, {name="uraniumstuff:evil_goo_flowing"})
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"uraniumstuff:evil_goo_source"},
|
||||
--neighbors = {"air"},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
catch_up = false,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local cl_entity = get_closest_entity(pos)
|
||||
if cl_entity then
|
||||
local entity_pos = cl_entity.object:get_pos()
|
||||
move_goo_towards(pos, entity_pos)
|
||||
end
|
||||
end
|
||||
})
|
||||
@@ -0,0 +1,697 @@
|
||||
local ingot_name = "technic:uranium0_ingot"
|
||||
local stick_name = "default:stick"
|
||||
local stone_name = "default:stone"
|
||||
local stone_image = "default_stone.png"
|
||||
local stone_sounds = nil
|
||||
|
||||
local MODNAME = minetest.get_current_modname()
|
||||
local MODPATH = minetest.get_modpath(MODNAME)
|
||||
local S = minetest.get_translator(MODNAME)
|
||||
|
||||
function get_setting(key, default)
|
||||
local value = minetest.settings:get("uraniumstuff." .. key)
|
||||
local num_value = tonumber(value)
|
||||
if value and not num_value then
|
||||
print("Invalid value for setting %s: %q. Using default %q.", key, value, default)
|
||||
end
|
||||
return num_value or default
|
||||
end
|
||||
|
||||
local uses = get_setting("max_tool_uses", 400)
|
||||
local full_punch_interval = get_setting("full_punch_interval", 0.3)
|
||||
local damage_multiplier = get_setting("damage_multiplier", 1.5)
|
||||
local radiation_damage = get_setting("radiation_damage", 5)
|
||||
local allow_multitool = minetest.settings:get_bool("uraniumstuff.allow_multitool", true)
|
||||
local allow_irradiating = minetest.settings:get_bool("uraniumstuff.allow_irradiating_mobs", true)
|
||||
local allow_armor_damage = minetest.settings:get_bool("uraniumstuff.allow_armor_radiation", true)
|
||||
local allow_tool_damage = minetest.settings:get_bool("uraniumstuff.allow_tool_radiation", true)
|
||||
local leave_residue = minetest.settings:get_bool("uraniumstuff.leave_residue", true)
|
||||
|
||||
function round(num)
|
||||
return num + (2^52 + 2^51) - (2^52 + 2^51)
|
||||
end
|
||||
|
||||
dofile(MODPATH .. "/goo.lua")
|
||||
|
||||
-- MineClone compatibility
|
||||
|
||||
if minetest.get_modpath("mcl_core") then
|
||||
stick_name = "mcl_core:stick"
|
||||
stone_name = "mcl_deepslate:deepslate"
|
||||
stone_image = "mcl_deepslate.png"
|
||||
end
|
||||
|
||||
if minetest.get_modpath("mcl_sounds") then
|
||||
stone_sounds = mcl_sounds.node_sound_stone_defaults()
|
||||
else
|
||||
stone_sounds = default.node_sound_stone_defaults()
|
||||
end
|
||||
|
||||
|
||||
-- Ore generation
|
||||
|
||||
if not minetest.get_modpath("technic") then
|
||||
ingot_name = "uraniumstuff:uranium_ingot"
|
||||
|
||||
minetest.register_node("uraniumstuff:mineral_uranium", {
|
||||
description = S("Uranium Ore"),
|
||||
tiles = { stone_image .. "^uraniumstuff_mineral_uranium.png" },
|
||||
is_ground_content = true,
|
||||
groups = {cracky=3, radioactive=1},
|
||||
sounds = stone_sounds,
|
||||
drop = "uraniumstuff:uranium_lump",
|
||||
light_source = 5,
|
||||
})
|
||||
|
||||
local ORE_MIN = -80
|
||||
local ORE_MAX = -300
|
||||
local ORE_SCARCITY = 8*8*8*8*8
|
||||
if minetest.get_modpath("mcl_core") then
|
||||
local ORE_MIN = -10
|
||||
local ORE_MAX = -64
|
||||
local ORE_SCARCITY = 8*8*8*8
|
||||
end
|
||||
|
||||
minetest.register_ore({
|
||||
ore_type = "scatter",
|
||||
ore = "uraniumstuff:mineral_uranium",
|
||||
wherein = stone_name,
|
||||
clust_scarcity = ORE_SCARCITY,
|
||||
clust_num_ores = 2,
|
||||
clust_size = 3,
|
||||
y_min = ORE_MIN,
|
||||
y_max = ORE_MAX,
|
||||
--noise_params = uranium_params,
|
||||
--noise_threshold = uranium_threshold,
|
||||
})
|
||||
|
||||
minetest.register_node("uraniumstuff:uranium_block", {
|
||||
description = S("Uranium Block"),
|
||||
tiles = { "uraniumstuff_uranium_block.png" },
|
||||
is_ground_content = true,
|
||||
groups = {cracky=1, level=2, radioactive=1},
|
||||
sounds = stone_sounds,
|
||||
light_source = 5,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("uraniumstuff:uranium_lump", {
|
||||
description = S("Uranium Lump"),
|
||||
inventory_image = "uraniumstuff_uranium_lump.png",
|
||||
light_source = 5,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("uraniumstuff:uranium_ingot", {
|
||||
description = S("Uranium Ingot"),
|
||||
inventory_image = "uraniumstuff_uranium_ingot.png",
|
||||
groups = {uranium_ingot=1},
|
||||
light_source = 5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_block",
|
||||
recipe = {
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = ingot_name.." 9",
|
||||
recipe = {
|
||||
{"uraniumstuff:uranium_block"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = 'cooking',
|
||||
recipe = "uraniumstuff:uranium_lump",
|
||||
output = "uraniumstuff:uranium_ingot",
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
-- Tool Registration
|
||||
|
||||
if minetest.get_modpath("toolranks") then
|
||||
uses = 200
|
||||
end
|
||||
|
||||
|
||||
-- Pickaxe
|
||||
|
||||
minetest.register_tool("uraniumstuff:uranium_pick", {
|
||||
description = S("Uranium Pickaxe"),
|
||||
inventory_image = "uraniumstuff_uranium_pick.png",
|
||||
light_source = 5,
|
||||
tool_capabilities = {
|
||||
full_punch_interval = full_punch_interval,
|
||||
max_drop_level = 3,
|
||||
groupcaps = {
|
||||
cracky = {times = {[1] = 2.25, [2] = 0.55, [3] = 0.35}, uses = uses, maxlevel = 3},
|
||||
},
|
||||
damage_groups = {fleshy = 6*damage_multiplier, radioactive = radiation_damage},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
groups = {pickaxe = 1}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_pick",
|
||||
recipe = {
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
{"", stick_name, ""},
|
||||
{"", stick_name, ""}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- Shovel
|
||||
|
||||
minetest.register_tool("uraniumstuff:uranium_shovel", {
|
||||
description = S("Uranium Shovel"),
|
||||
inventory_image = "uraniumstuff_uranium_shovel.png",
|
||||
light_source = 5,
|
||||
wield_image = "uraniumstuff_uranium_shovel.png^[transformR90",
|
||||
tool_capabilities = {
|
||||
full_punch_interval = full_punch_interval,
|
||||
max_drop_level = 3,
|
||||
groupcaps = {
|
||||
crumbly = {times = {[1] = 0.70, [2] = 0.35, [3] = 0.20}, uses = uses, maxlevel = 3},
|
||||
},
|
||||
damage_groups = {fleshy = 5*damage_multiplier, radioactive = radiation_damage},
|
||||
radioactive = 1,
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
groups = {shovel = 1}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_shovel",
|
||||
recipe = {
|
||||
{ingot_name},
|
||||
{stick_name},
|
||||
{stick_name}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- Axe
|
||||
|
||||
minetest.register_tool("uraniumstuff:uranium_axe", {
|
||||
description = S("Uranium Axe"),
|
||||
inventory_image = "uraniumstuff_uranium_axe.png",
|
||||
light_source = 5,
|
||||
tool_capabilities = {
|
||||
full_punch_interval = full_punch_interval,
|
||||
max_drop_level = 3,
|
||||
groupcaps = {
|
||||
choppy = {times = {[1] = 1.75, [2] = 0.45, [3] = 0.45}, uses = uses, maxlevel = 3},
|
||||
fleshy = {times = {[2] = 0.95, [3] = 0.30}, uses = uses, maxlevel = 2},
|
||||
},
|
||||
damage_groups = {fleshy = 8*damage_multiplier, radioactive = radiation_damage},
|
||||
radioactive = 1,
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
groups = {axe = 1}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_axe",
|
||||
recipe = {
|
||||
{ingot_name, ingot_name, ""},
|
||||
{ingot_name, stick_name, ""},
|
||||
{"", stick_name, ""}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- Sword
|
||||
|
||||
minetest.register_tool("uraniumstuff:uranium_sword", {
|
||||
description = S("Uranium Sword"),
|
||||
inventory_image = "uraniumstuff_uranium_sword.png",
|
||||
light_source = 5,
|
||||
tool_capabilities = {
|
||||
full_punch_interval = full_punch_interval,
|
||||
max_drop_level = 3,
|
||||
groupcaps = {
|
||||
fleshy = {times = {[2] = 0.65, [3] = 0.25}, uses = uses, maxlevel = 2},
|
||||
snappy = {times = {[1] = 1.70, [2] = 0.70, [3] = 0.25}, uses = uses, maxlevel = 3},
|
||||
choppy = {times = {[3] = 0.65}, uses = uses, maxlevel = 0},
|
||||
},
|
||||
damage_groups = {fleshy = 10*damage_multiplier, radioactive = radiation_damage},
|
||||
radioactive = 1,
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
groups = {sword = 1}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_sword",
|
||||
recipe = {
|
||||
{ingot_name},
|
||||
{ingot_name},
|
||||
{stick_name}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- Hoe
|
||||
|
||||
minetest.register_tool("uraniumstuff:uranium_hoe", {
|
||||
description = S("Uranium Hoe"),
|
||||
inventory_image = "uraniumstuff_uranium_hoe.png",
|
||||
light_source = 5,
|
||||
tool_capabilities = {
|
||||
full_punch_interval = full_punch_interval,
|
||||
max_drop_level = 3,
|
||||
max_uses = uses,
|
||||
damage_groups = {radioactive = radiation_damage},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
groups = {hoe = 1}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_sword",
|
||||
recipe = {
|
||||
{ingot_name},
|
||||
{ingot_name},
|
||||
{stick_name}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- Multitool
|
||||
|
||||
if allow_multitool then
|
||||
|
||||
minetest.register_tool("uraniumstuff:uranium_multitool", {
|
||||
description = S("Uranium Multitool"),
|
||||
inventory_image = "uraniumstuff_uranium_multitool.png",
|
||||
light_source = 5,
|
||||
tool_capabilities = {
|
||||
full_punch_interval = full_punch_interval,
|
||||
max_drop_level = 3,
|
||||
groupcaps = {
|
||||
cracky = {times = {[1] = 2.25, [2] = 0.55, [3] = 0.35}, uses = uses, maxlevel = 3},
|
||||
crumbly = {times = {[1] = 0.70, [2] = 0.35, [3] = 0.20}, uses = uses, maxlevel = 3},
|
||||
choppy = {times = {[1] = 1.75, [2] = 0.45, [3] = 0.45}, uses = uses, maxlevel = 3},
|
||||
fleshy = {times = {[2] = 0.65, [3] = 0.25}, uses = uses, maxlevel = 2},
|
||||
snappy = {times = {[1] = 1.70, [2] = 0.70, [3] = 0.25}, uses = uses, maxlevel = 3},
|
||||
},
|
||||
damage_groups = {fleshy = 10*damage_multiplier, radioactive = radiation_damage},
|
||||
},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
groups = {sword = 1, axe = 1, shovel = 1, pickaxe = 1},
|
||||
range = 8.0,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_multitool",
|
||||
recipe = {
|
||||
{"", "uraniumstuff:uranium_shovel", ""},
|
||||
{"uraniumstuff:uranium_axe", "uraniumstuff:uranium_pick", "uraniumstuff:uranium_sword"},
|
||||
}
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
-- Gems
|
||||
|
||||
if allow_armor_damage or allow_tool_damage then
|
||||
|
||||
minetest.register_craftitem("uraniumstuff:uranium_gem", {
|
||||
description = S("Uranium Gem"),
|
||||
inventory_image = "uraniumstuff_uranium_gem.png",
|
||||
light_source = 5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_gem",
|
||||
recipe = {
|
||||
{"", ingot_name, ""},
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
{"", ingot_name, ""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craftitem("uraniumstuff:uranium_protection_gem", {
|
||||
description = S("Uranium Protection Gem"),
|
||||
inventory_image = "uraniumstuff_uranium_protection_gem.png",
|
||||
light_source = 5,
|
||||
})
|
||||
|
||||
local iron_ingot = "default:steel_ingot"
|
||||
local crystal_name = "default:mese_crystal"
|
||||
if minetest.get_modpath("mcl_core") then
|
||||
iron_ingot = "mcl_core:iron_ingot"
|
||||
crystal_name = "mcl_core:emerald"
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_protection_gem",
|
||||
recipe = {
|
||||
{iron_ingot, crystal_name, iron_ingot},
|
||||
{crystal_name, "uraniumstuff:uranium_gem", crystal_name},
|
||||
{iron_ingot, crystal_name, iron_ingot},
|
||||
}
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- Toolranks Integration
|
||||
|
||||
if minetest.get_modpath("toolranks") then
|
||||
minetest.override_item("uraniumstuff:uranium_sword", {
|
||||
description = toolranks.create_description(S("Uranium Sword"), 0, 1),
|
||||
original_description = S("Uranium Sword"),
|
||||
after_use = toolranks.new_afteruse
|
||||
})
|
||||
|
||||
minetest.override_item("uraniumstuff:uranium_pick", {
|
||||
description = toolranks.create_description(S("Uranium Pickaxe"), 0, 1),
|
||||
original_description = S("Uranium Pickaxe"),
|
||||
after_use = toolranks.new_afteruse
|
||||
})
|
||||
|
||||
minetest.override_item("uraniumstuff:uranium_axe", {
|
||||
description = toolranks.create_description(S("Uranium Axe"), 0, 1),
|
||||
original_description = S("Uranium Axe"),
|
||||
after_use = toolranks.new_afteruse
|
||||
})
|
||||
|
||||
minetest.override_item("uraniumstuff:uranium_shovel", {
|
||||
description = toolranks.create_description(S("Uranium Shovel"), 0, 1),
|
||||
original_description = S("Uranium Shovel"),
|
||||
after_use = toolranks.new_afteruse
|
||||
})
|
||||
|
||||
if allow_multitool then
|
||||
minetest.override_item("uraniumstuff:uranium_multitool", {
|
||||
description = toolranks.create_description(S("Uranium Multitool"), 0, 1),
|
||||
original_description = S("Uranium Multitool"),
|
||||
after_use = toolranks.new_afteruse
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Armor
|
||||
|
||||
if minetest.get_modpath("3d_armor") then
|
||||
armor.materials.uranium = ingot_name
|
||||
armor.config.material_uranium = true
|
||||
|
||||
armor:register_armor("uraniumstuff:helmet_uranium", {
|
||||
description = S("Uranium Helmet"),
|
||||
inventory_image = "uraniumstuff_inv_uranium_helmet.png",
|
||||
light_source = 5,
|
||||
groups = {armor_head=1, armor_heal=12, armor_use=200, armor_fire=3},
|
||||
armor_groups = {fleshy=20, radiation=10},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
wear = 0,
|
||||
})
|
||||
minetest.register_alias("uraniumstuff:uranium_helmet", "uraniumstuff:helmet_uranium")
|
||||
minetest.override_item("uraniumstuff:uranium_helmet", {light_source = 5})
|
||||
|
||||
armor:register_armor("uraniumstuff:chestplate_uranium", {
|
||||
description = S("Uranium Chestplate"),
|
||||
inventory_image = "uraniumstuff_inv_uranium_chestplate.png",
|
||||
light_source = 5,
|
||||
groups = {armor_torso=1, armor_heal=12, armor_use=200, armor_fire=3},
|
||||
armor_groups = {fleshy=25, radiation=10},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
wear = 0,
|
||||
})
|
||||
minetest.register_alias("uraniumstuff:uranium_chestplate", "uraniumstuff:chestplate_uranium")
|
||||
minetest.override_item("uraniumstuff:uranium_chestplate", {light_source = 5})
|
||||
|
||||
armor:register_armor("uraniumstuff:leggings_uranium", {
|
||||
description = S("Uranium Leggings"),
|
||||
inventory_image = "uraniumstuff_inv_uranium_leggings.png",
|
||||
light_source = 5,
|
||||
groups = {armor_legs=1, armor_heal=12, armor_use=200, armor_fire=3},
|
||||
armor_groups = {fleshy=25, radiation=10},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
wear = 0,
|
||||
})
|
||||
minetest.register_alias("uraniumstuff:uranium_leggings", "uraniumstuff:leggings_uranium")
|
||||
minetest.override_item("uraniumstuff:uranium_leggings", {light_source = 5})
|
||||
|
||||
armor:register_armor("uraniumstuff:boots_uranium", {
|
||||
description = S("Uranium Boots"),
|
||||
inventory_image = "uraniumstuff_inv_uranium_boots.png",
|
||||
light_source = 5,
|
||||
groups = {armor_feet=1, armor_heal=12, armor_use=200, armor_fire=3, physics_jump=0.5, physics_speed = 1},
|
||||
armor_groups = {fleshy=20, radiation=10},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
wear = 0,
|
||||
})
|
||||
minetest.register_alias("uraniumstuff:uranium_boots", "uraniumstuff:boots_uranium")
|
||||
minetest.override_item("uraniumstuff:uranium_boots", {light_source = 5})
|
||||
|
||||
if minetest.get_modpath("shields") then
|
||||
armor:register_armor("uraniumstuff:shield_uranium", {
|
||||
description = S("Uranium Shield"),
|
||||
inventory_image = "uraniumstuff_inv_uranium_shield.png",
|
||||
light_source = 5,
|
||||
groups = {armor_shield=1, armor_heal=12, armor_use=200, armor_fire=3},
|
||||
armor_groups = {fleshy=25, radiation=10},
|
||||
damage_groups = {cracky=2, snappy=1, level=3},
|
||||
wear = 0,
|
||||
})
|
||||
minetest.register_alias("uraniumstuff:uranium_shield", "uraniumstuff:shield_uranium")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if minetest.get_modpath("3d_armor") or minetest.get_modpath("mcl_armor") then
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_helmet",
|
||||
recipe = {
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
{ingot_name, "", ingot_name},
|
||||
{"", "", ""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_chestplate",
|
||||
recipe = {
|
||||
{ingot_name, "", ingot_name},
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_leggings",
|
||||
recipe = {
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
{ingot_name, "", ingot_name},
|
||||
{ingot_name, "", ingot_name},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_boots",
|
||||
recipe = {
|
||||
{ingot_name, "", ingot_name},
|
||||
{ingot_name, "", ingot_name},
|
||||
}
|
||||
})
|
||||
|
||||
if not minetest.get_modpath("mcl_armor") then
|
||||
minetest.register_craft({
|
||||
output = "uraniumstuff:uranium_shield",
|
||||
recipe = {
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
{ingot_name, ingot_name, ingot_name},
|
||||
{"", ingot_name, ""},
|
||||
}
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Armor/Tool Player Damage
|
||||
|
||||
if allow_tool_damage or (allow_armor_damage and minetest.get_modpath("3d_armor")) then
|
||||
|
||||
local function has_item(player_name, item_name)
|
||||
local inventory = minetest.get_inventory({type="player", name=player_name})
|
||||
local main_list = inventory:get_list("main")
|
||||
for _, stack in ipairs(main_list) do
|
||||
if stack:get_name() == item_name then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function alter_health(player, change)
|
||||
if player == nil then return end
|
||||
local hp_max = player:get_properties().hp_max
|
||||
local current_health = player:get_hp()
|
||||
local new_health = current_health + change
|
||||
|
||||
if new_health > hp_max then new_health = hp_max end
|
||||
if new_health < 0 then new_health = 0 end
|
||||
|
||||
player:set_hp(new_health)
|
||||
end
|
||||
|
||||
local function has_radioactive_tool(player)
|
||||
local wield = player:get_wielded_item()
|
||||
if wield then
|
||||
local tool_cap = wield:get_tool_capabilities()
|
||||
if tool_cap and tool_cap.damage_groups and tool_cap.damage_groups.radioactive then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function pattern_count(base, pattern)
|
||||
return select(2, string.gsub(base, pattern, ""))
|
||||
end
|
||||
|
||||
local function get_radioactive_armor_count(player)
|
||||
local inv_3d = player:get_meta():get_string("3d_armor_inventory")
|
||||
if not inv_3d then return 0 end
|
||||
return pattern_count(inv_3d, "uraniumstuff:")
|
||||
end
|
||||
|
||||
local function damage_players()
|
||||
local players = minetest.get_connected_players()
|
||||
for _, player in ipairs(players) do
|
||||
local damage = 0
|
||||
if allow_armor_damage then
|
||||
damage = damage + get_radioactive_armor_count(player)
|
||||
end
|
||||
if allow_tool_damage and has_radioactive_tool(player) then
|
||||
damage = damage + 1
|
||||
end
|
||||
if damage > 0 then
|
||||
local player_name = player:get_player_name()
|
||||
local has_gem = has_item(player_name, "uraniumstuff:uranium_protection_gem")
|
||||
if not has_gem then
|
||||
alter_health(player, damage*-1)
|
||||
end
|
||||
end
|
||||
end
|
||||
minetest.after(5, damage_players)
|
||||
end
|
||||
damage_players()
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- Irradiating entities
|
||||
|
||||
if allow_irradiating then
|
||||
|
||||
local function register_entity_on_punch(callback)
|
||||
for name, entity in pairs(minetest.registered_entities) do
|
||||
local orig = entity.on_punch
|
||||
entity.on_punch = function(punched, puncher, time_from_last_punch, tool_capabilities, direction, damage)
|
||||
callback(punched, puncher, time_from_last_punch, tool_capabilities, direction, damage)
|
||||
if orig then
|
||||
orig(punched, puncher, time_from_last_punch, tool_capabilities, direction, damage)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function string_split(inputstr, sep)
|
||||
if sep == nil then
|
||||
sep = "%s"
|
||||
end
|
||||
local t={}
|
||||
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
|
||||
table.insert(t, str)
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
local function set_entity_texture(entity, textures)
|
||||
local prop = entity.object:get_properties()
|
||||
prop.textures = textures
|
||||
prop.glow = 10
|
||||
prop.use_texture_alpha = true
|
||||
entity.object:set_properties(prop)
|
||||
end
|
||||
|
||||
local new_texture = "uraniumstuff_goo.png"
|
||||
local entity_goo_textures = {
|
||||
new_texture, new_texture, new_texture, new_texture, new_texture,
|
||||
new_texture, new_texture, new_texture, new_texture, new_texture,
|
||||
new_texture, new_texture, new_texture, new_texture, new_texture,
|
||||
new_texture, new_texture, new_texture, new_texture, new_texture,
|
||||
new_texture, new_texture, new_texture, new_texture, new_texture,
|
||||
new_texture, new_texture, new_texture, new_texture, new_texture,
|
||||
}
|
||||
|
||||
local function liquify_entity(entity)
|
||||
if not (entity and entity.object) then return nil end
|
||||
local pos = entity.object:get_pos()
|
||||
if not pos then return nil end
|
||||
entity.state = "stand"
|
||||
set_entity_texture(entity, entity_goo_textures)
|
||||
local r_pos = {x = round(pos.x), y = round(pos.y), z = round(pos.z)}
|
||||
local low_pos_1 = {x = r_pos.x, y = r_pos.y - 1, z = r_pos.z}
|
||||
local low_pos_2 = {x = r_pos.x, y = r_pos.y - 2, z = r_pos.z}
|
||||
local low_node = minetest.get_node(low_pos_2)
|
||||
minetest.set_node(r_pos, {name = "uraniumstuff:goo_source"})
|
||||
minetest.after(3, function()
|
||||
minetest.set_node(r_pos, {name = "uraniumstuff:goo_flowing"})
|
||||
if leave_residue and low_node.name ~= "air" then
|
||||
minetest.set_node(low_pos_1, {name = "uraniumstuff:goo_source"})
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local function irradiate_entity(entity, damage, time)
|
||||
local function radiation_damage(entity, damage, time)
|
||||
entity.health = entity.health - damage
|
||||
if entity.health <= 0 then
|
||||
liquify_entity(entity)
|
||||
entity.health = 0
|
||||
else
|
||||
minetest.after(time, radiation_damage, entity, damage, time)
|
||||
end
|
||||
end
|
||||
if entity.health and entity.health > 0 and not entity.irradiated then
|
||||
entity.irradiated = true
|
||||
local prop = entity.object:get_properties()
|
||||
local transparent = false
|
||||
for i, texture in ipairs(prop.textures) do
|
||||
local tspl = string_split(texture, "%^")
|
||||
local t_length = #(tspl)
|
||||
if t_length > 1 then
|
||||
transparent = true
|
||||
prop.textures[i] = texture .. "^uraniumstuff_irradiated_full.png"
|
||||
else
|
||||
prop.textures[i] = texture .. "^uraniumstuff_irradiated.png"
|
||||
end
|
||||
end
|
||||
prop.glow = 10
|
||||
if not transparent then prop.use_texture_alpha = true end
|
||||
entity.object:set_properties(prop)
|
||||
minetest.after(time, radiation_damage, entity, damage, time)
|
||||
end
|
||||
end
|
||||
|
||||
register_entity_on_punch(function(punched, puncher, time_from_last_punch, tool_capabilities, direction, damage)
|
||||
if tool_capabilities and tool_capabilities.damage_groups then
|
||||
local rad_damage = tool_capabilities.damage_groups.radioactive
|
||||
if rad_damage and rad_damage > 0 then
|
||||
irradiate_entity(punched, rad_damage, 1)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
end
|
||||
@@ -0,0 +1,13 @@
|
||||
# zlib license
|
||||
|
||||
Copyright © 2011-2020 Hugo Locurcio and contributors
|
||||
|
||||
**This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.**
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
@@ -0,0 +1,14 @@
|
||||
# textdomain: uraniumstuff
|
||||
Uranium Ingot=Lingote de uranio
|
||||
Uranium Ore=Mineral de uranio
|
||||
Uranium Sword=Espada de uranio
|
||||
Uranium Pickaxe=Pico de uranio
|
||||
Uranium Shovel=Pala de uranio
|
||||
Uranium Axe=Hacha de uranio
|
||||
Uranium Helmet=Casco de uranio
|
||||
Uranium Chestplate=Peto de uranio
|
||||
Uranium Leggings=Pantalones de uranio
|
||||
Uranium Boots=Botas de uranio
|
||||
Uranium Shield=Escudo de uranio
|
||||
Uranium Block=Bloque de uranio
|
||||
Uranium Lump=Bulto de uranio
|
||||
@@ -0,0 +1,8 @@
|
||||
name = uraniumstuff
|
||||
description = Adds Uranium tools and armor, compatible with technic.
|
||||
depends = default
|
||||
optional_depends = 3d_armor, technic, toolranks, mobs, mobs_animal, mobs_monster, mobs_npc, mob_horse, mobs_water, nssm, creeper, dmobs, people, animalworld, animalia, bucket
|
||||
min_minetest_version = 5.0.0
|
||||
supported_games = minetest_game
|
||||
author = Epoxum
|
||||
title = Uranium Stuff
|
||||
@@ -0,0 +1,52 @@
|
||||
# Uranium Stuff
|
||||
Mod for Minetest, adds Uranium tools and armor, compatible with Technic.
|
||||
Get it on: [ContentDB](https://content.minetest.net/packages/Epoxum/uraniumstuff/) | [GitHub](https://github.com/cermak-petr/uraniumstuff)
|
||||
|
||||

|
||||
|
||||
Have you ever wondered what to do with your waste 0% uranium?
|
||||
Worry no more! Now you can use it to make tools and armor.
|
||||
Tools are fast and deal a lot of damage, armor also provides radiation protection.
|
||||
|
||||
__NEW FEATURES__
|
||||
* Tools will now irradiate mobs to drain their health over time.
|
||||
* Armor will drain your health if the "Uranium Protection Gem" is not in your inventory.
|
||||
* Uranium tool in hand will now also drain your health without the gem
|
||||
* Irradiated mobs have a radioactive green glow
|
||||
* Mobs killed by radiation will leave Green Goo residue
|
||||
* Green goo can be turned into Evil Green Goo that follows and kills mobs
|
||||
* Most settings can be configured
|
||||
* Dropped MineClone support for now
|
||||
|
||||
If the technic mod is not present, this mod will provide uranium ore generation.
|
||||
Uranium ore will be found at the same heights as with technic, but at much lower quantities,
|
||||
to compensate for the lack of need for centrifuging.
|
||||
|
||||
__Tools added__
|
||||
Uranium Sword
|
||||
Uranium Axe
|
||||
Uranium Shovel
|
||||
Uranium Pickaxe
|
||||
Uranium Hoe
|
||||
Uranium Multitool
|
||||
|
||||
__Armor added__
|
||||
Uranium Chestplate
|
||||
Uranium Leggings
|
||||
Uranium Boots
|
||||
Uranium Helmet
|
||||
Uranium Shield
|
||||
|
||||
__Special items__
|
||||
Uranium Gem
|
||||
Uranium Protection Gem
|
||||
Green Goo
|
||||
Evil Green Goo
|
||||
|
||||
|
||||
__Textures adapted from the following mods__
|
||||
Lava Stuff - [ContentDB](https://content.minetest.net/packages/Lone_Wolf/lavastuff/) | [GitHub](https://github.com/minetest-mods/lavastuff)
|
||||
Multitools - [ContentDB](https://content.minetest.net/packages/ChimneySwift/multitools/) | [GitHub](https://github.com/ChimneySwift/multitools)
|
||||
More Ores - [ContentDB](https://content.minetest.net/packages/Calinou/moreores/) | [GitHub](https://github.com/minetest-mods/moreores)
|
||||
Technic Plus - [ContentDB](https://content.minetest.net/packages/mt-mods/technic_plus/) | [GitHub](https://github.com/mt-mods/technic)
|
||||
Minetest Game - [GitHub](https://github.com/minetest/minetest_game)
|
||||
|
After Width: | Height: | Size: 259 KiB |
|
After Width: | Height: | Size: 519 KiB |
@@ -0,0 +1,29 @@
|
||||
#Maximum tool uses
|
||||
uraniumstuff.max_tool_uses (How many times the tools can be used) int 400
|
||||
|
||||
#Full punch interval
|
||||
uraniumstuff.full_punch_interval (Base punching time for all tools) float 0.3
|
||||
|
||||
#Damage multiplier
|
||||
uraniumstuff.damage_multiplier (How much stronger the tools will be from mithril) float 1.5
|
||||
|
||||
#Radiation damage
|
||||
uraniumstuff.radiation_damage (Damage any irradiated mob will take every second) float 5
|
||||
|
||||
#Allow multitool
|
||||
uraniumstuff.allow_multitool (The Uranium Multitool will be available) bool true
|
||||
|
||||
#Allow irradiating mobs
|
||||
uraniumstuff.allow_irradiating_mobs (The tools will irradiate mobs) bool true
|
||||
|
||||
#Allow armor radiation
|
||||
uraniumstuff.allow_armor_radiation (Without protection gem, the armor will be dangerous to wear) bool true
|
||||
|
||||
#Allow tool radiation
|
||||
uraniumstuff.allow_tool_radiation (Without protection gem, the tools will be dangerous to use) bool true
|
||||
|
||||
#Leave residue
|
||||
uraniumstuff.leave_residue (Mobs killed by radiation will leave green goo residue) bool true
|
||||
|
||||
#Max goo range
|
||||
uraniumstuff.max_goo_range (Maximum distance for evil goo to follow mobs) int 15
|
||||
@@ -0,0 +1,165 @@
|
||||
Adapted Material (all continue using the original license)
|
||||
|
||||
From LavaStuff mod (CC BY-SA 3.0) https://github.com/minetest-mods/lavastuff
|
||||
- uraniumstuff_boots_uranium.png
|
||||
- uraniumstuff_boots_uranium_preview.png
|
||||
- uraniumstuff_helmet_uranium.png
|
||||
- uraniumstuff_helmet_uranium_preview.png
|
||||
- uraniumstuff_chestplate_uranium.png
|
||||
- uraniumstuff_chestplate_uranium_preview.png
|
||||
- uraniumstuff_inv_uranium_boots.png
|
||||
- uraniumstuff_inv_uranium_helmet.png
|
||||
- uraniumstuff_inv_uranium_chestplate.png
|
||||
- uraniumstuff_inv_uranium_leggings.png
|
||||
- uraniumstuff_inv_uranium_shield.png
|
||||
- uraniumstuff_leggings_uranium.png
|
||||
- uraniumstuff_leggings_uranium_preview.png
|
||||
- uraniumstuff_shield_uranium.png
|
||||
- uraniumstuff_shield_uranium_preview.png
|
||||
|
||||
From Multitools mod (CC0 1.0) https://github.com/ChimneySwift/multitools
|
||||
- uraniumstuff_uranium_multitool.png
|
||||
|
||||
From MoreOres mod (zlib license) https://github.com/minetest-mods/moreores
|
||||
- uraniumstuff_uranium_axe.png
|
||||
- uraniumstuff_uranium_hoe.png
|
||||
- uraniumstuff_uranium_pick.png
|
||||
- uraniumstuff_uranium_shovel.png
|
||||
- uraniumstuff_uranium_sword.png
|
||||
|
||||
From TechnicPlus mod (LGPL V2) https://github.com/mt-mods/technic
|
||||
- uraniumstuff_uranium_block.png
|
||||
- uraniumstuff_uranium_ingot.png
|
||||
- uraniumstuff_uranium_lump.png
|
||||
|
||||
From Minetest Game (CC BY-SA 3.0) https://github.com/minetest/minetest_game/
|
||||
- uraniumstuff_bucket_goo.png
|
||||
- uraniumstuff_goo.png
|
||||
- uraniumstuff_goo_flowing.png
|
||||
- uraniumstuff_goo_source.png
|
||||
|
||||
|
||||
Any other textures will be using the following license:
|
||||
|
||||
|
||||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||
HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for
|
||||
the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without fear
|
||||
of later claims of infringement build upon, modify, incorporate in other
|
||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||
and for any purposes, including without limitation commercial purposes.
|
||||
These owners may contribute to the Commons to promote the ideal of a free
|
||||
culture and the further production of creative, cultural and scientific
|
||||
works, or to gain reputation or greater distribution for their Work in
|
||||
part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not
|
||||
limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation
|
||||
thereof, including any amended or successor version of such
|
||||
directive); and
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||
of action, whether now known or unknown (including existing as well as
|
||||
future claims and causes of action), in the Work (i) in all territories
|
||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||
treaty (including future time extensions), (iii) in any current or future
|
||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional
|
||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||
member of the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||
be judged legally invalid or ineffective under applicable law, then the
|
||||
Waiver shall be preserved to the maximum extent permitted taking into
|
||||
account Affirmer's express Statement of Purpose. In addition, to the
|
||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||
maximum duration provided by applicable law or treaty (including future
|
||||
time extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"License"). The License shall be deemed effective as of the date CC0 was
|
||||
applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||
of the License, and in such case Affirmer hereby affirms that he or she
|
||||
will not (i) exercise any of his or her remaining Copyright and Related
|
||||
Rights in the Work or (ii) assert any associated claims and causes of
|
||||
action with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties of
|
||||
title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects, accuracy, or
|
||||
the present or absence of errors, whether or not discoverable, all to
|
||||
the greatest extent permissible under applicable law.
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without
|
||||
limitation any person's Copyright and Related Rights in the Work.
|
||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||
consents, permissions or other rights required for any use of the
|
||||
Work.
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to
|
||||
this CC0 or use of the Work.
|
||||
|
After Width: | Height: | Size: 286 KiB |
|
After Width: | Height: | Size: 551 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 673 B |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 383 B |
|
After Width: | Height: | Size: 157 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 210 B |
|
After Width: | Height: | Size: 217 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 285 B |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 673 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 383 B |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 210 B |
|
After Width: | Height: | Size: 217 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.7 KiB |