mods that hopefully work for a TechAge-based pack

This commit is contained in:
2026-09-09 06:27:51 -06:00
parent 4e6b08d194
commit c27db2a537
6234 changed files with 375578 additions and 0 deletions
+390
View File
@@ -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
})
+697
View File
@@ -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
+13
View File
@@ -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
+8
View File
@@ -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
+52
View File
@@ -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)
![Screenshot](screenshot.png "Screenshot")
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)
Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 KiB

+29
View File
@@ -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
+165
View File
@@ -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.
Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB