diff --git a/CHANGELOG b/CHANGELOG index d095b09..6345d77 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +Version 3.2.0 +- Moving from minetest. to core. API calls for future-proof newcomers-friendly maintenance. +- Properly manage default settings values in defaults.lua +- Addied full_punch_interval parameter to settings + Update 3.1.2 - Fix initial loading with fallback values for logging and Esperanto translations tweaks. diff --git a/README.md b/README similarity index 65% rename from README.md rename to README index b6dfc9e..c094a77 100644 --- a/README.md +++ b/README @@ -1,30 +1,32 @@ -=== SPEARS for MINETEST by Echoes91 === +=== SPEARS for LUANTI by Echoes91 === -This mod adds spears to Minetest. +This mod adds spears to Luanti (formerly to Minetest). How to download: If you have this file, you probably know. If you're reading from gitlab.com, you already know. +But in doubt, https://gitlab.com/echoes91/spears/-/archive/master/spears-master.zip Forum topic: -https://forum.minetest.net/viewtopic.php?f=11&t=13367 +https://forum.luanti.org/viewtopic.php?t=13367 How to install: -Minetest content DB is the way! -http://wiki.minetest.com/wiki/Installing_Mods +Content DB is the way! +https://wiki.luanti.org/Mods#Installation How to use the mod: -Craft a spear with | | | (material) | - | | stick | | - | stick | | |, +Craft a spear with | | | material | + | | stick | | + | stick | | | works also mirrored. + Spears can be thrown using right mouse button, they either hurt someone or stick where they land on; damage depends on speed and material, flight trajectory is ballistic with (unrealistic) drag. Spears can be used to fight, but are slower and weaker than swords. Spears can be used to dig, but are slower and weaker and pickaxes. If you miss the target it's your fault, the spear is fine. You can grab a spear on the fly (or maybe wait until it falls?). You can stick a spear into a block, but if you remove the block then the spear falls (obviously). -This mod contains the word "spear" more than 100 times, if you want the exact number you can count them. +This mod contains the word "spear" more than 100 times, if you want to know the exact number there must be a sed script for that. If you feel clever, throw a spear right above you and look at it to see what happens. -You can even throw a spear from above down to your foes, it's even easier to hit. +You can even throw a spear down to your foes from above, it's even easier to hit! Someone once reported to have hit its own foot but it takes practice to do that. diff --git a/defaults.lua b/defaults.lua index 2942843..12be8cb 100644 --- a/defaults.lua +++ b/defaults.lua @@ -1,30 +1,52 @@ --- Seems like defaults in settingtypes.txt are not taken by default ---if minetest.settings:get("spears_throw_speed") == nil then --- minetest.settings:set("spears_throw_speed", 13) ---end +-- Seems like defaults in settingtypes.txt are not taken by default, let's default them +if core.settings:get("spears_throw_speed") == nil then + core.settings:set("spears_throw_speed", 13) +end ---[[ if minetest.settings:get("spears_drag_coeff") == nil then - minetest.settings:set("spears_drag_coeff", 0.1) -end ]] +if core.settings:get("spears_drag_coeff") == nil then + core.settings:set("spears_drag_coeff", 0.1) +end --- if minetest.settings:get("spears_node_cracky_limit") == nil then --- minetest.settings:set("spears_node_cracky_limit", 3) --- end +if core.settings:get("spears_node_cracky_limit") == nil then + core.settings:set("spears_node_cracky_limit", 3) +end +if core.settings:get("spears_full_punch_interval") == nil then + core.settings:set("spears_full_punch_interval", 1.5) + end --- DISABLE_STONE_SPEAR = false --- DISABLE_STEEL_SPEAR = false --- DISABLE_COPPER_SPEAR = false --- DISABLE_BRONZE_SPEAR = false --- DISABLE_DIAMOND_SPEAR = false --- DISABLE_OBSIDIAN_SPEAR = false --- DISABLE_GOLD_SPEAR = false --- DISABLE_IRON_SPEAR = false --- SPEARS_THROW_SPEED = 13 --- SPEARS_V_ZERO = {x = 0, y = 0, z = 0} --- SPEARS_DRAG_COEFF = 0.1 --- SPEARS_NODE_UNKNOWN = nil --- SPEARS_NODE_THROUGH = 0 --- SPEARS_NODE_STICKY = 1 --- SPEARS_NODE_CRACKY = 2 --- SPEARS_NODE_CRACKY_LIMIT = 3 \ No newline at end of file +if core.settings:get("spears_enable_stone_spear") == nil then + core.settings:set_bool("spears_enable_stone_spear", true) +end + +if core.get_modpath("pigiron") then + if core.settings:get("spears_enable_iron_spear") == nil then + core.settings:set_bool("spears_enable_iron_spear", true) + end +else + core.settings:set_bool("spears_enable_iron_spear", false) +end + +if core.settings:get("spears_enable_steel_spear") == nil then + core.settings:set_bool("spears_enable_steel_spear", true) +end + +if core.settings:get("spears_enable_copper_spear") == nil then + core.settings:set_bool("spears_enable_copper_spear", true) +end + +if core.settings:get("spears_enable_bronze_spear") == nil then + core.settings:set_bool("spears_enable_bronze_spear", true) +end + +if core.settings:get("spears_enable_obsidian_spear") == nil then + core.settings:set_bool("spears_enable_obsidian_spear", true) +end + +if core.settings:get("spears_enable_diamond_spear") == nil then + core.settings:set_bool("spears_enable_diamond_spear", true) +end + +if core.settings:get("spears_enable_gold_spear") == nil then + core.settings:set_bool("spears_enable_gold_spear", true) +end diff --git a/functions.lua b/functions.lua index e2e9dae..e80e833 100644 --- a/functions.lua +++ b/functions.lua @@ -11,31 +11,28 @@ function spears_throw (itemstack, player, pointed_thing) local pointed_a = pointed_thing.above local pointed_b = pointed_thing.under if pointed_thing.type == "node" and vector.distance(pointed_a, throw_pos) < 1 then -- Stick into node - local node = minetest.get_node(pointed_b) + local node = core.get_node(pointed_b) local check_node = spears_check_node(node.name) if check_node == nil then return false elseif check_node == 'cracky' then - minetest.sound_play("default_metal_footstep", {pos = pointed_a}, true) + core.sound_play("default_metal_footstep", {pos = pointed_a}, true) return false elseif check_node == 'sticky' then - local spear_object = minetest.add_entity(vector.divide(vector.add(vector.multiply(pointed_a, 2), pointed_b), 3), spear) + local spear_object = core.add_entity(vector.divide(vector.add(vector.multiply(pointed_a, 2), pointed_b), 3), spear) spear_object:set_rotation(rotation) spear_object:get_luaentity()._wear = wear spear_object:get_luaentity()._stickpos = pointed_b - minetest.sound_play("default_place_node", {pos = pointed_a}, true) + core.sound_play("default_place_node", {pos = pointed_a}, true) return false end else -- Throw - local throw_speed = tonumber(minetest.settings:get("spears_throw_speed") or 13) - --while vector.distance(player_pos, throw_pos) < 1.2 do - -- throw_pos = vector.add(throw_pos, vector.multiply(direction, 0.1)) - --end + local throw_speed = tonumber(core.settings:get("spears_throw_speed")) local player_vel = player:get_velocity() - local spear_object = minetest.add_entity(throw_pos, spear) + local spear_object = core.add_entity(throw_pos, spear) spear_object:set_velocity(vector.add(player_vel, vector.multiply(direction, throw_speed))) spear_object:set_rotation(rotation) - minetest.sound_play("spears_throw", {pos = player_pos}, true) + core.sound_play("spears_throw", {pos = player_pos}, true) spear_object:get_luaentity()._wear = wear spear_object:get_luaentity()._stickpos = nil spear_object:get_luaentity()._owner = player:get_luaentity() @@ -78,60 +75,60 @@ function spears_set_entity(spear_type, base_damage, toughness) local velocity = self.object:get_velocity() local speed = vector.length(velocity) if self._stickpos ~= nil then -- Spear is stuck - local node = minetest.get_node(self._stickpos) + local node = core.get_node(self._stickpos) local check_node = spears_check_node(node.name) if check_node ~= 'sticky' then -- Fall when node is removed self.object:remove() - minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) + core.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) return false end else -- Spear is flying local direction = vector.normalize(velocity) - local yaw = minetest.dir_to_yaw(direction) + local yaw = core.dir_to_yaw(direction) local pitch = math.acos(velocity.y/speed) - math.pi/3 local spearhead_pos = vector.add(pos, vector.multiply(direction, 0.5)) self.object:set_rotation({x = 0, y = yaw + math.pi/2, z = pitch}) -- Hit a target? - local objects_in_radius = minetest.get_objects_inside_radius(spearhead_pos, 1) + local objects_in_radius = core.get_objects_inside_radius(spearhead_pos, 1) for _,object in ipairs(objects_in_radius) do if spears_check_target(self, object, spearhead_pos) and object:get_armor_groups().fleshy then local damage = (speed + base_damage)^1.15 - 20 object:punch(self.object, 1.0, {full_punch_interval = 1.0, damage_groups = {fleshy=damage},}, direction) self.object:remove() - minetest.sound_play("spears_hit", {pos = pos}, true) + core.sound_play("spears_hit", {pos = pos}, true) wear = spears_wear(wear, toughness) - minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) + core.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) return true end end -- Hit a node? - local node = minetest.get_node(spearhead_pos) + local node = core.get_node(spearhead_pos) local check_node = spears_check_node(node.name) if check_node == nil then self.object:remove() - minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) + core.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) elseif check_node ~= 'through' then wear = spears_wear(wear, toughness) if wear >= 65535 then - minetest.sound_play("default_tool_breaks", {pos = pos}, true) + core.sound_play("default_tool_breaks", {pos = pos}, true) self.object:remove() - minetest.add_item(pos, {name='defaut:stick'}) + core.add_item(pos, {name='defaut:stick'}) return false elseif check_node == 'cracky' then - minetest.sound_play("default_metal_footstep", {pos = pos}, true) + core.sound_play("default_metal_footstep", {pos = pos}, true) self.object:remove() - minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) + core.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) return false elseif check_node == 'sticky' then self.object:set_acceleration({x = 0, y = 0, z = 0}) self.object:set_velocity({x = 0, y = 0, z = 0}) - minetest.sound_play("default_place_node", {pos = pos}, true) + core.sound_play("default_place_node", {pos = pos}, true) self._stickpos = spearhead_pos self._wear = wear end else -- Get drag - local viscosity = minetest.registered_nodes[node.name].liquid_viscosity - local drag_coeff = tonumber(minetest.settings:get("spears_drag_coeff") or 0.1) + local viscosity = core.registered_nodes[node.name].liquid_viscosity + local drag_coeff = tonumber(core.settings:get("spears_drag_coeff")) local drag = math.max(viscosity, drag_coeff) local acceleration = vector.multiply(velocity, -drag) acceleration.y = acceleration.y - 10 * ((7 - drag) / 7) @@ -144,8 +141,8 @@ function spears_set_entity(spear_type, base_damage, toughness) end function spears_check_node(node_name) - local node = minetest.registered_nodes[node_name] - local cracky_limit = tonumber(minetest.settings:get("spears_node_cracky_limit") or 3) + local node = core.registered_nodes[node_name] + local cracky_limit = tonumber(core.settings:get("spears_node_cracky_limit")) if node == nil then return nil elseif node.groups.cracky ~= nil and node.groups.cracky < cracky_limit then @@ -158,7 +155,7 @@ function spears_check_node(node_name) end function spears_wear(initial_wear, toughness) - if not minetest.settings:get_bool("creative_mode") then + if not core.settings:get_bool("creative_mode") then local wear = initial_wear + 65535/toughness return wear else diff --git a/init.lua b/init.lua index 138f143..5c85a2a 100644 --- a/init.lua +++ b/init.lua @@ -1,14 +1,7 @@ --- dofile(minetest.get_modpath("spears").."/defaults.lua") +-- Welcome to spears mod --- local input = io.open(minetest.get_modpath("spears").."/spears.conf", "r") --- if input then --- dofile(minetest.get_modpath("spears").."/spears.conf") --- input:close() --- input = nil --- end +dofile(core.get_modpath("spears").."/defaults.lua") +dofile(core.get_modpath("spears").."/functions.lua") +dofile(core.get_modpath("spears").."/tools.lua") -dofile(minetest.get_modpath("spears").."/functions.lua") - -dofile(minetest.get_modpath("spears").."/tools.lua") - -minetest.log("action", "[MOD] Spears loaded with throwing speed " .. (minetest.settings:get("spears_throw_speed") or 13) .. " and drag coeff. " .. (minetest.settings:get("spears_drag_coeff") or 0.1)) +core.log("action", "[MOD] Spears loaded with throwing speed " .. (core.settings:get("spears_throw_speed")) .. " and drag coeff. " .. (core.settings:get("spears_drag_coeff"))) diff --git a/mod.conf b/mod.conf index ea0f7dd..db7c8ad 100644 --- a/mod.conf +++ b/mod.conf @@ -1,8 +1,7 @@ name = spears depends = default optional_depends = pigiron -description = Add spears to Minetest, versatile weapons that can be thrown +description = Add spears to Luanti, versatile weapons that can be thrown author = Echoes91 title = Spears min_minetest_version = 5.4 - diff --git a/settingtypes.txt b/settingtypes.txt index b7c42c5..7012cae 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -7,6 +7,9 @@ spears_drag_coeff (Drag coefficient for spears in air) float 0.1 # Crackyness limit to stick a spear into a node instead of bouncing spears_node_cracky_limit (Cracky node level limit to stick a spear) int 3 +# When used as melee weapon, the spear will do full damage if this time is spent between punches. +spears_full_punch_interval (When used as melee weapon, the spear will do full damage if this time is spent between punches.) float 1.5 + spears_enable_stone_spear (Stone spear enabled) bool true spears_enable_iron_spear (Iron spear enabled, requires pigiron mod) bool false spears_enable_steel_spear (Steel spear enabled) bool true diff --git a/tools.lua b/tools.lua index deaf499..db71a8e 100644 --- a/tools.lua +++ b/tools.lua @@ -1,28 +1,28 @@ -local S = minetest.get_translator("spears") +local S = core.get_translator("spears") function spears_register_spear(spear_type, desc, base_damage, toughness, material) - minetest.register_tool("spears:spear_" .. spear_type, { + core.register_tool("spears:spear_" .. spear_type, { description = desc, - wield_image = "spears_spear_" .. spear_type .. ".png^[transform4", + wield_image = "spears_spear_" .. spear_type .. ".png^[transform4", inventory_image = "spears_spear_" .. spear_type .. ".png", wield_scale= {x = 1.5, y = 1.5, z = 1.5}, on_secondary_use = function(itemstack, user, pointed_thing) spears_throw(itemstack, user, pointed_thing) - if not minetest.settings:get_bool("creative_mode") then + if not core.settings:get_bool("creative_mode") then itemstack:take_item() end return itemstack end, on_place = function(itemstack, user, pointed_thing) spears_throw(itemstack, user, pointed_thing) - if not minetest.settings:get_bool("creative_mode") then + if not core.settings:get_bool("creative_mode") then itemstack:take_item() end return itemstack end, tool_capabilities = { - full_punch_interval = 1.5, + full_punch_interval = core.settings:get("spears_full_punch_interval"), max_drop_level=1, groupcaps={ cracky = {times={[3]=2}, uses=toughness, maxlevel=1}, @@ -35,9 +35,9 @@ function spears_register_spear(spear_type, desc, base_damage, toughness, materia local SPEAR_ENTITY = spears_set_entity(spear_type, base_damage, toughness) - minetest.register_entity("spears:spear_" .. spear_type .. "_entity", SPEAR_ENTITY) + core.register_entity("spears:spear_" .. spear_type .. "_entity", SPEAR_ENTITY) - minetest.register_craft({ + core.register_craft({ output = 'spears:spear_' .. spear_type, recipe = { {"", "", material}, @@ -46,7 +46,7 @@ function spears_register_spear(spear_type, desc, base_damage, toughness, materia } }) - minetest.register_craft({ + core.register_craft({ output = 'spears:spear_' .. spear_type, recipe = { {material, "", ""}, @@ -56,43 +56,43 @@ function spears_register_spear(spear_type, desc, base_damage, toughness, materia }) end -if minetest.settings:get_bool('spears_enable_stone_spear') then +if core.settings:get_bool('spears_enable_stone_spear') then spears_register_spear('stone', S('Stone Spear'), 4, 20, 'group:stone') end -if minetest.get_modpath("pigiron") then - if minetest.settings:get_bool('spears_enable_iron_spear') then +if core.get_modpath("pigiron") then + if core.settings:get_bool('spears_enable_iron_spear') then spears_register_spear('iron', S('Iron Spear'), 5.5, 30, 'pigiron:iron_ingot') end - if minetest.settings:get_bool('spears_enable_steel_spear') then + if core.settings:get_bool('spears_enable_steel_spear') then spears_register_spear('steel', S('Steel Spear'), 6, 35, 'default:steel_ingot') end - if minetest.settings:get_bool('spears_enable_copper_spear') then + if core.settings:get_bool('spears_enable_copper_spear') then spears_register_spear('copper', S('Copper Spear'), 4.8, 30, 'default:copper_ingot') end - if minetest.settings:get_bool('spears_enable_bronze_spear') then + if core.settings:get_bool('spears_enable_bronze_spear') then spears_register_spear('bronze', S('Bronze Spear'), 5.5, 35, 'default:bronze_ingot') end else - if minetest.settings:get_bool('spears_enable_steel_spear') then + if core.settings:get_bool('spears_enable_steel_spear') then spears_register_spear('steel', S('Steel Spear'), 6, 30, 'default:steel_ingot') end - if minetest.settings:get_bool('spears_enable_copper_spear') then + if core.settings:get_bool('spears_enable_copper_spear') then spears_register_spear('copper', S('Copper Spear'), 5, 30, 'default:copper_ingot') end - if minetest.settings:get_bool('spears_enable_bronze_spear') then + if core.settings:get_bool('spears_enable_bronze_spear') then spears_register_spear('bronze', S('Bronze Spear'), 6, 35, 'default:bronze_ingot') end end -if minetest.settings:get_bool('spears_enable_obsidian_spear') then +if core.settings:get_bool('spears_enable_obsidian_spear') then spears_register_spear('obsidian', S('Obsidian Spear'), 8, 30, 'default:obsidian') end -if minetest.settings:get_bool('spears_enable_diamond_spear') then +if core.settings:get_bool('spears_enable_diamond_spear') then spears_register_spear('diamond', S('Diamond Spear'), 8, 40, 'default:diamond') end -if minetest.settings:get_bool('spears_enable_gold_spear') then +if core.settings:get_bool('spears_enable_gold_spear') then spears_register_spear('gold', S('Golden Spear'), 5, 40, 'default:gold_ingot') end