From e1a36915827d08842f56f621a646546a919c266c Mon Sep 17 00:00:00 2001 From: thunderdog1138 <58536412+thunderdog1138@users.noreply.github.com> Date: Wed, 18 Dec 2019 15:17:22 -0500 Subject: [PATCH] Add files via upload --- mods/stamina/.luacheckrc | 20 ++ mods/stamina/API.txt | 64 +++++ mods/stamina/README.txt | 50 ++++ mods/stamina/bower.json | 14 + mods/stamina/depends.txt | 3 + mods/stamina/description.txt | 1 + mods/stamina/init.lua | 522 ++++++++++++++++++++++++++++++++++ mods/stamina/mod.conf | 1 + mods/stamina/screenshot.png | Bin 0 -> 32843 bytes mods/stamina/settingtypes.txt | 23 ++ 10 files changed, 698 insertions(+) create mode 100644 mods/stamina/.luacheckrc create mode 100644 mods/stamina/API.txt create mode 100644 mods/stamina/README.txt create mode 100644 mods/stamina/bower.json create mode 100644 mods/stamina/depends.txt create mode 100644 mods/stamina/description.txt create mode 100644 mods/stamina/init.lua create mode 100644 mods/stamina/mod.conf create mode 100644 mods/stamina/screenshot.png create mode 100644 mods/stamina/settingtypes.txt diff --git a/mods/stamina/.luacheckrc b/mods/stamina/.luacheckrc new file mode 100644 index 00000000..a6b40039 --- /dev/null +++ b/mods/stamina/.luacheckrc @@ -0,0 +1,20 @@ +unused_args = false +allow_defined_top = true + +read_globals = { + "DIR_DELIM", + "minetest", + "dump", + "vector", "nodeupdate", + "VoxelManip", "VoxelArea", + "PseudoRandom", "ItemStack", + "intllib", + "default", + "armor", + "player_monoids", +} + +globals = { + minetest = { fields = { "do_item_eat" }}, +} + diff --git a/mods/stamina/API.txt b/mods/stamina/API.txt new file mode 100644 index 00000000..334a2d0f --- /dev/null +++ b/mods/stamina/API.txt @@ -0,0 +1,64 @@ +stamina.get_saturation(player) + Gets a player's saturation + +stamina.set_saturation(player, level) + Set a player's saturation. + Updates the HUD to reflect saturation level. + +stamina.update_saturation(player, level) + Update's a player's saturation. + Callbacks are processed first. + +stamina.change_saturation(player, change) + Update a player's saturation by a delta, instead of an absolute value. + +stamina.register_on_update_saturation(function(player, level)) + Register a callback for when saturation is updated. + If the callback returns True, no further callbacks are called, + and the default behavior is bypassed. +----------------------- +stamina.is_poisoned(player) + Check if a player is poisoned + +stamina.set_poisoned(player, poisoned) + Set a player's "poisoned" status (boolean) + Updates the HUD to reflect poison status. + +stamina.poison(player, ticks, interval) + Poison a player for a certain amount of time. + Ticks is how many times to poison the player. + Interval is the time between poison ticks. + Processes callbacks before changing status. + +stamina.register_on_poison(function(player, ticks, interval)) + Register a callback for when a player is poisoned. + If the callback returns True, no further callbacks are called, + and the default behavior is bypassed. +------------------------- +stamina.get_exhaustion(player) + Gets a player's exhaustion level. + Value is between 0 and `stamina.exhaust_lvl` (default: 160) + +stamina.set_exhaustion(player, level) + Sets a player's exhaustion level. + +stamina.exhaust_player(player, change, cause) + Update a player's exhaustion by "change". + If the player's exhaustion exceeds `stamina.exhaust_lvl`, stamina + is taken and exhaustion is reset. + Cause is an optional argument indicating the origin of the exhaustion. + Callbacks are processed before exhausting the player. + +stamina.register_on_exhaust_player(function(player, change, cause)) + Register a callback for when exhaustion is updated. + If the callback returns True, no further callbacks are called, + and the default behavior is bypassed. +------------------------ +stamina.set_sprinting(name, sprinting) + Sets whether a player is sprinting or not. + Callbacks are processed before setting sprint status. + +stamina.register_on_sprinting(function(player, sprinting)) + Register a callback for when a player's sprinting status is updated. + If the callback returns True, no further callbacks are called, + and the default behavior is bypassed. diff --git a/mods/stamina/README.txt b/mods/stamina/README.txt new file mode 100644 index 00000000..388c32bf --- /dev/null +++ b/mods/stamina/README.txt @@ -0,0 +1,50 @@ +Minetest mod "Stamina" +===================== + +(C) 2015 - BlockMen +(C) 2016 - Auke Kok + + +About this mod: +--------------- +This mod adds a stamina, or "hunger" mechanic to Minetest. Actions like +crafting, walking, digging or fighting make the player exhausted. When +enough exhaustion has been accumulated, the player gets more hungry, +and loses stamina. + +If a player is low on stamina, they start taking periodical damage, +and ultimately will die if they do not eat food. + +Eating food no longer heals the player. Instead, it increases the +stamina of the player. The stamina bar shows how well fed the player +is. More bread pieces means more stamina. + + +Q&A time: Why won't I move the stamina bar to the right? + +Answer: this conflicts with the builtin breath bar. To move the +builtin breath bar, I basically have to entirely re-implement it +in lua including timers to catch breath changes for each online +player, which is all a waste of time, just to move a few pixels +around. + + +For Modders: +------------ +This mod intercepts minetest.item_eat(), and applies the hp_change +as stamina change. The value can be positive (increase stamina) or +negative (periodically damage the player by 1 hp). + +See API.txt for information on the API. + +License: +-------- +Code: +- all code LGPL-2.1+ +Textures: +- stamina_hud_poison.png - BlockMen (CC-BY 3.0) +- stamina_hud_fg.png - PilzAdam (WTFPL), modified by BlockMen +- stamina_hud_bg.png - PilzAdam (WTFPL), modified by BlockMen +Sounds: +- stamina_eat.*.ogg - http://www.freesound.org/people/sonictechtonic/sounds/242215/ CC-BY-3.0 + diff --git a/mods/stamina/bower.json b/mods/stamina/bower.json new file mode 100644 index 00000000..34362013 --- /dev/null +++ b/mods/stamina/bower.json @@ -0,0 +1,14 @@ +{ + "name": "stamina", + "description": "This mod adds a stamina, or hunger mechanic to Minetest. Actions like crafting, walking, digging or fighting make the player exhausted.", + "homepage": "https://github.com/minetest-mods/stamina", + "authors": [ + "BlockMen - 2015", + "Auke Kok - 2016" + ], + "license": "LGPL-2.1+", + "keywords": [ + "hunger", + "stamina" + ] +} \ No newline at end of file diff --git a/mods/stamina/depends.txt b/mods/stamina/depends.txt new file mode 100644 index 00000000..bdb6c204 --- /dev/null +++ b/mods/stamina/depends.txt @@ -0,0 +1,3 @@ +default +3d_armor? +player_monoids? diff --git a/mods/stamina/description.txt b/mods/stamina/description.txt new file mode 100644 index 00000000..1074b3d4 --- /dev/null +++ b/mods/stamina/description.txt @@ -0,0 +1 @@ +Adds stamina and hunger effects. diff --git a/mods/stamina/init.lua b/mods/stamina/init.lua new file mode 100644 index 00000000..2fb6efde --- /dev/null +++ b/mods/stamina/init.lua @@ -0,0 +1,522 @@ +if not minetest.settings:get_bool("enable_damage") then + minetest.log("warning", "[stamina] Stamina will not load if damage is disabled (enable_damage=false)") + return +end + +stamina = {} +local modname = minetest.get_current_modname() +local armor_mod = minetest.get_modpath("3d_armor") and minetest.global_exists("armor") and armor.def +local player_monoids_mod = minetest.get_modpath("player_monoids") and minetest.global_exists("player_monoids") + +function stamina.log(level, message, ...) + return minetest.log(level, ("[%s] %s"):format(modname, message:format(...))) +end + +local function get_setting(key, default) + local setting = minetest.settings:get("stamina." .. key) + if setting and not tonumber(setting) then + stamina.log("warning", "Invalid value for setting %s: %q. Using default %q.", key, setting, default) + end + return tonumber(setting) or default +end + +stamina.settings = { + -- see settingtypes.txt for descriptions + eat_particles = minetest.settings:get_bool("stamina.eat_particles", true), + sprint = minetest.settings:get_bool("stamina.sprint", true), + sprint_particles = minetest.settings:get_bool("stamina.sprint_particles", true), + sprint_lvl = get_setting("sprint_lvl", 6), + sprint_speed = get_setting("sprint_speed", 0.8), + sprint_jump = get_setting("sprint_jump", 0.1), + tick = get_setting("tick", 800), + tick_min = get_setting("tick_min", 4), + health_tick = get_setting("health_tick", 4), + move_tick = get_setting("move_tick", 0.5), + poison_tick = get_setting("poison_tick", 2.0), + exhaust_dig = get_setting("exhaust_dig", 3), + exhaust_place = get_setting("exhaust_place", 1), + exhaust_move = get_setting("exhaust_move", 1.5), + exhaust_jump = get_setting("exhaust_jump", 5), + exhaust_craft = get_setting("exhaust_craft", 20), + exhaust_punch = get_setting("exhaust_punch", 40), + exhaust_sprint = get_setting("exhaust_sprint", 28), + exhaust_lvl = get_setting("exhaust_lvl", 160), + heal = get_setting("heal", 1), + heal_lvl = get_setting("heal_lvl", 5), + starve = get_setting("starve", 1), + starve_lvl = get_setting("starve_lvl", 3), + visual_max = get_setting("visual_max", 20), +} +local settings = stamina.settings + +local attribute = { + saturation = "stamina:level", + hud_id = "stamina:hud_id", + poisoned = "stamina:poisoned", + exhaustion = "stamina:exhaustion", +} + +local function is_player(player) + return ( + player and + not player.is_fake_player and + player.get_attribute and -- check for pipeworks fake player + player.is_player and + player:is_player() + ) +end + +local function get_int_attribute(player, key) + local level = player:get_attribute(key) + if level then + return tonumber(level) + else + return nil + end +end +--- SATURATION API --- +function stamina.get_saturation(player) + return get_int_attribute(player, attribute.saturation) +end + +function stamina.set_saturation(player, level) + player:set_attribute(attribute.saturation, level) + player:hud_change( + player:get_attribute(attribute.hud_id), + "number", + math.min(settings.visual_max, level) + ) +end + +stamina.registered_on_update_saturations = {} +function stamina.register_on_update_saturation(fun) + table.insert(stamina.registered_on_update_saturations, fun) +end + +function stamina.update_saturation(player, level) + for _, callback in ipairs(stamina.registered_on_update_saturations) do + local result = callback(player, level) + if result then + return result + end + end + + local old = stamina.get_saturation(player) + + if level == old then -- To suppress HUD update + return + end + + -- players without interact priv cannot eat + if old < settings.heal_lvl and not minetest.check_player_privs(player, {interact=true}) then + return + end + + stamina.set_saturation(player, level) +end + +function stamina.change_saturation(player, change) + if not is_player(player) or not change or change == 0 then + return false + end + local level = stamina.get_saturation(player) + change + level = math.max(level, 0) + level = math.min(level, settings.visual_max) + stamina.update_saturation(player, level) + return true +end + +stamina.change = stamina.change_saturation -- for backwards compatablity +--- END SATURATION API --- +--- POISON API --- +function stamina.is_poisoned(player) + return player:get_attribute(attribute.poisoned) == "yes" +end + +function stamina.set_poisoned(player, poisoned) + if poisoned then + player:hud_change(player:get_attribute(attribute.hud_id), "text", "stamina_hud_poison.png") + player:set_attribute(attribute.poisoned, "yes") + else + player:hud_change(player:get_attribute(attribute.hud_id), "text", "stamina_hud_fg.png") + player:set_attribute(attribute.poisoned, "no") + end +end + +local function poison_tick(player, ticks, interval, elapsed) + if not stamina.is_poisoned(player) then + return + elseif elapsed > ticks then + stamina.set_poisoned(player, false) + else + local hp = player:get_hp() - 1 + if hp > 0 then + player:set_hp(hp) + end + minetest.after(interval, poison_tick, player, ticks, interval, elapsed + 1) + end +end + +stamina.registered_on_poisons = {} +function stamina.register_on_poison(fun) + table.insert(stamina.registered_on_poisons, fun) +end + +function stamina.poison(player, ticks, interval) + for _, fun in ipairs(stamina.registered_on_poisons) do + local rv = fun(player, ticks, interval) + if rv == true then + return + end + end + if not is_player(player) then + return + end + stamina.set_poisoned(player, true) + poison_tick(player, ticks, interval, 0) +end +--- END POISON API --- +--- EXHAUSTION API --- +stamina.exhaustion_reasons = { + craft = "craft", + dig = "dig", + heal = "heal", + jump = "jump", + move = "move", + place = "place", + punch = "punch", + sprint = "sprint", +} + +function stamina.get_exhaustion(player) + return get_int_attribute(player, attribute.exhaustion) +end + +function stamina.set_exhaustion(player, exhaustion) + player:set_attribute(attribute.exhaustion, exhaustion) +end + +stamina.registered_on_exhaust_players = {} +function stamina.register_on_exhaust_player(fun) + table.insert(stamina.registered_on_exhaust_players, fun) +end + +function stamina.exhaust_player(player, change, cause) + for _, callback in ipairs(stamina.registered_on_exhaust_players) do + local result = callback(player, change, cause) + if result then + return result + end + end + + if not is_player(player) then + return + end + + local exhaustion = stamina.get_exhaustion(player) or 0 + + exhaustion = exhaustion + change + + if exhaustion >= settings.exhaust_lvl then + exhaustion = exhaustion - settings.exhaust_lvl + stamina.change(player, -1) + end + + stamina.set_exhaustion(player, exhaustion) +end +--- END EXHAUSTION API --- +--- SPRINTING API --- +stamina.registered_on_sprintings = {} +function stamina.register_on_sprinting(fun) + table.insert(stamina.registered_on_sprintings, fun) +end + +function stamina.set_sprinting(player, sprinting) + for _, fun in ipairs(stamina.registered_on_sprintings) do + local rv = fun(player, sprinting) + if rv == true then + return + end + end + + if player_monoids_mod then + if sprinting then + player_monoids.speed:add_change(player, 1 + settings.sprint_speed, "stamina:physics") + player_monoids.jump:add_change(player, 1 + settings.sprint_jump, "stamina:physics") + else + player_monoids.speed:del_change(player, "stamina:physics") + player_monoids.jump:del_change(player, "stamina:physics") + end + else + local def + if armor_mod then + -- Get player physics from 3d_armor mod + local name = player:get_player_name() + def = { + speed=armor.def[name].speed, + jump=armor.def[name].jump, + gravity=armor.def[name].gravity + } + else + def = { + speed=1, + jump=1, + gravity=1 + } + end + + if sprinting then + def.speed = def.speed + settings.sprint_speed + def.jump = def.jump + settings.sprint_jump + end + + player:set_physics_override(def) + end + + if settings.sprint_particles and sprinting then + local pos = player:getpos() + local node = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z}) + local def = minetest.registered_nodes[node.name] or {} + local drawtype = def.drawtype + if drawtype ~= "airlike" and drawtype ~= "liquid" and drawtype ~= "flowingliquid" then + minetest.add_particlespawner({ + amount = 5, + time = 0.01, + minpos = {x = pos.x - 0.25, y = pos.y + 0.1, z = pos.z - 0.25}, + maxpos = {x = pos.x + 0.25, y = pos.y + 0.1, z = pos.z + 0.25}, + minvel = {x = -0.5, y = 1, z = -0.5}, + maxvel = {x = 0.5, y = 2, z = 0.5}, + minacc = {x = 0, y = -5, z = 0}, + maxacc = {x = 0, y = -12, z = 0}, + minexptime = 0.25, + maxexptime = 0.5, + minsize = 0.5, + maxsize = 1.0, + vertical = false, + collisiondetection = false, + texture = "default_dirt.png", + }) + end + end +end +--- END SPRINTING API --- + +-- Time based stamina functions +local function move_tick() + for _,player in ipairs(minetest.get_connected_players()) do + local controls = player:get_player_control() + local is_moving = controls.up or controls.down or controls.left or controls.right + local velocity = player:get_player_velocity() + velocity.y = 0 + local horizontal_speed = vector.length(velocity) + local has_velocity = horizontal_speed > 0.05 + + if controls.jump then + stamina.exhaust_player(player, settings.exhaust_jump, stamina.exhaustion_reasons.jump) + elseif is_moving and has_velocity then + stamina.exhaust_player(player, settings.exhaust_move, stamina.exhaustion_reasons.move) + end + + if settings.sprint then + local can_sprint = ( + controls.aux1 and + not player:get_attach() and + not minetest.check_player_privs(player, {fast = true}) and + stamina.get_saturation(player) > settings.sprint_lvl + ) + + if can_sprint then + stamina.set_sprinting(player, true) + if is_moving and has_velocity then + stamina.exhaust_player(player, settings.exhaust_sprint, stamina.exhaustion_reasons.sprint) + end + else + stamina.set_sprinting(player, false) + end + end + end +end + +local function stamina_tick() + -- lower saturation by 1 point after settings.tick second(s) + for _,player in ipairs(minetest.get_connected_players()) do + local saturation = stamina.get_saturation(player) + if saturation > settings.tick_min then + stamina.update_saturation(player, saturation - 1) + end + end +end + +local function health_tick() + -- heal or damage player, depending on saturation + for _,player in ipairs(minetest.get_connected_players()) do + local air = player:get_breath() or 0 + local hp = player:get_hp() + local saturation = stamina.get_saturation(player) + + -- don't heal if dead, drowning, or poisoned + local should_heal = ( + saturation >= settings.heal_lvl and + saturation >= hp and + hp > 0 and + air > 0 + and not stamina.is_poisoned(player) + ) + -- or damage player by 1 hp if saturation is < 2 (of 30) + local is_starving = ( + saturation < settings.starve_lvl and + hp > 0 + ) + + if should_heal then + player:set_hp(hp + settings.heal) + stamina.exhaust_player(player, settings.exhaust_lvl, stamina.exhaustion_reasons.heal) + elseif is_starving then + player:set_hp(hp - settings.starve) + end + end +end + +local stamina_timer = 0 +local health_timer = 0 +local action_timer = 0 + +local function stamina_globaltimer(dtime) + stamina_timer = stamina_timer + dtime + health_timer = health_timer + dtime + action_timer = action_timer + dtime + + if action_timer > settings.move_tick then + action_timer = 0 + move_tick() + end + + if stamina_timer > settings.tick then + stamina_timer = 0 + stamina_tick() + end + + if health_timer > settings.health_tick then + health_timer = 0 + health_tick() + end +end + +-- override minetest.do_item_eat() so we can redirect hp_change to stamina +stamina.core_item_eat = minetest.do_item_eat +function minetest.do_item_eat(hp_change, replace_with_item, itemstack, player, pointed_thing) + for _, callback in ipairs(minetest.registered_on_item_eats) do + local result = callback(hp_change, replace_with_item, itemstack, player, pointed_thing) + if result then + return result + end + end + + if not is_player(player) or not itemstack then + return itemstack + end + + local level = stamina.get_saturation(player) or 0 + if level >= settings.visual_max then + -- don't eat if player is full + return itemstack + end + + local itemname = itemstack:get_name() + if replace_with_item then + stamina.log("action", "%s eats %s for %s stamina, replace with %s", + player:get_player_name(), itemname, hp_change, replace_with_item) + else + stamina.log("action", "%s eats %s for %s stamina", + player:get_player_name(), itemname, hp_change) + end + minetest.sound_play("stamina_eat", {to_player = player:get_player_name(), gain = 0.7}) + + if hp_change > 0 then + stamina.change_saturation(player, hp_change) + stamina.set_exhaustion(player, 0) + else + -- assume hp_change < 0. + stamina.poison(player, -hp_change, settings.poison_tick) + end + + if settings.eat_particles then + -- particle effect when eating + local pos = player:getpos() + pos.y = pos.y + 1.5 -- mouth level + local texture = minetest.registered_items[itemname].inventory_image + local dir = player:get_look_dir() + + minetest.add_particlespawner({ + amount = 5, + time = 0.1, + minpos = pos, + maxpos = pos, + minvel = {x = dir.x - 1, y = dir.y, z = dir.z - 1}, + maxvel = {x = dir.x + 1, y = dir.y, z = dir.z + 1}, + minacc = {x = 0, y = -5, z = 0}, + maxacc = {x = 0, y = -9, z = 0}, + minexptime = 1, + maxexptime = 1, + minsize = 1, + maxsize = 2, + texture = texture, + }) + end + + itemstack:take_item() + + if replace_with_item then + if itemstack:is_empty() then + itemstack:add_item(replace_with_item) + else + local inv = player:get_inventory() + if inv:room_for_item("main", {name=replace_with_item}) then + inv:add_item("main", replace_with_item) + else + local pos = player:getpos() + pos.y = math.floor(pos.y - 1.0) + minetest.add_item(pos, replace_with_item) + end + end + end + + return itemstack +end + +minetest.register_on_joinplayer(function(player) + local level = stamina.get_saturation(player) or settings.visual_max + local id = player:hud_add({ + name = "stamina", + hud_elem_type = "statbar", + position = {x = 0.5, y = 1}, + size = {x = 24, y = 24}, + text = "stamina_hud_fg.png", + number = level, + alignment = {x = -1, y = -1}, + offset = {x = -266, y = -110}, + max = 0, + }) + stamina.set_saturation(player, level) + player:set_attribute(attribute.hud_id, id) + -- reset poisoned + stamina.set_poisoned(player, false) +end) + +minetest.register_globalstep(stamina_globaltimer) + +minetest.register_on_placenode(function(pos, oldnode, player, ext) + stamina.exhaust_player(player, settings.exhaust_place, stamina.exhaustion_reasons.place) +end) +minetest.register_on_dignode(function(pos, oldnode, player, ext) + stamina.exhaust_player(player, settings.exhaust_dig, stamina.exhaustion_reasons.dig) +end) +minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) + stamina.exhaust_player(player, settings.exhaust_craft, stamina.exhaustion_reasons.craft) +end) +minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage) + stamina.exhaust_player(hitter, settings.exhaust_punch, stamina.exhaustion_reasons.punch) +end) +minetest.register_on_respawnplayer(function(player) + stamina.update_saturation(player, settings.visual_max) +end) diff --git a/mods/stamina/mod.conf b/mods/stamina/mod.conf new file mode 100644 index 00000000..b049a5a0 --- /dev/null +++ b/mods/stamina/mod.conf @@ -0,0 +1 @@ +name = stamina diff --git a/mods/stamina/screenshot.png b/mods/stamina/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea1cb01a84f69f80ac713e650185dfdb6bf31e9 GIT binary patch literal 32843 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