diff --git a/mods/hbarmor/README.txt b/mods/hbarmor/README.txt
new file mode 100755
index 00000000..4424cde6
--- /dev/null
+++ b/mods/hbarmor/README.txt
@@ -0,0 +1,48 @@
+Minetest mod: HUD bar for armor [hbarmor]
+=========================================
+Version: 0.1.0
+
+License of source code: WTFPL
+-----------------------------
+By Wuzzy,
+
+forked from the mod “Better HUD (and hunger)” [hud]
+by BlockMen (2013-2014).
+
+
+
+Using the mod:
+--------------
+This mod adds a simple HUD bar which displays the current
+damage of the player's armor (from the 3D Armor mod) as a percentage,
+this number is of course rounded.
+100% means the armor is in perfect shape, 0% means the armor
+is almost destroyed or non-existant.
+Note that to reach 100%, the player must wear at least 4 different
+pieces of armor in perfect shape.
+The armor bar also does not tell anything about the armor's strength,
+only how worn out it already is.
+
+By default, the armor bar is hidden if the player wears no armor.
+
+
+Dependencies:
+- HUD bars [hudbars], major version 1
+- 3D Armor [3d_armor] (tested with 0.4.3)
+
+
+
+License of textures:
+--------------------
+hbarmor_icon.png - Stu (CC BY-SA 3.0), modified by BlockMen
+hbarmor_bar.png - Wuzzy (WTFPL)
+
+
+everything else is WTFPL:
+(c) Copyright BlockMen (2013-2014)
+
+This program is free software. It comes without any warranty, to
+the extent permitted by applicable law. You can redistribute it
+and/or modify it under the terms of the Do What The Fuck You Want
+To Public License, Version 2, as published by Sam Hocevar. See
+http://sam.zoy.org/wtfpl/COPYING for more details.
diff --git a/mods/hud/armor.lua b/mods/hbarmor/armor.lua
similarity index 68%
rename from mods/hud/armor.lua
rename to mods/hbarmor/armor.lua
index 82ff3587..7214b2b4 100755
--- a/mods/hud/armor.lua
+++ b/mods/hbarmor/armor.lua
@@ -5,18 +5,21 @@ minetest.after(0, function()
end
end)
-function hud.get_armor(player)
+function hbarmor.get_armor(player)
if not player or not armor.def then
- return
+ return false
end
local name = player:get_player_name()
local def = armor.def[name] or nil
if def and def.state and def.count then
- hud.set_armor(name, def.state, def.count)
+ hbarmor.set_armor(name, def.state, def.count)
+ else
+ return false
end
+ return true
end
-function hud.set_armor(player_name, ges_state, items)
+function hbarmor.set_armor(player_name, ges_state, items)
local max_items = 4
if items == 5 then
max_items = items
@@ -28,7 +31,7 @@ function hud.set_armor(player_name, ges_state, items)
lvl = 0
end
- hud.armor[player_name] = lvl* (items * (20 / max_items))
+ hbarmor.armor[player_name] = lvl* (items * (100 / max_items))
-end
\ No newline at end of file
+end
diff --git a/mods/hud/changelog.txt b/mods/hbarmor/changelog.txt
similarity index 100%
rename from mods/hud/changelog.txt
rename to mods/hbarmor/changelog.txt
diff --git a/mods/hbarmor/depends.txt b/mods/hbarmor/depends.txt
new file mode 100755
index 00000000..579f7fb2
--- /dev/null
+++ b/mods/hbarmor/depends.txt
@@ -0,0 +1,2 @@
+hudbars
+3d_armor
diff --git a/mods/hbarmor/hbarmor.conf.example b/mods/hbarmor/hbarmor.conf.example
new file mode 100755
index 00000000..633a5d39
--- /dev/null
+++ b/mods/hbarmor/hbarmor.conf.example
@@ -0,0 +1,9 @@
+-- If true, automatically hides the armor when the player wears no armor.
+-- Otherwise, the armor bar shows “0%”.
+
+--hbarmor.autohide = true
+
+-- Time difference in seconds between updates to the HUD armor bar.
+-- Increase this number for slow servers.
+
+-- hbarmor.tick = 0.1
diff --git a/mods/hbarmor/init.lua b/mods/hbarmor/init.lua
new file mode 100755
index 00000000..8edb4005
--- /dev/null
+++ b/mods/hbarmor/init.lua
@@ -0,0 +1,113 @@
+hbarmor = {}
+
+-- HUD statbar values
+hbarmor.armor = {}
+
+-- Stores if player's HUD bar has been initialized so far.
+hbarmor.player_active = {}
+
+-- HUD item ids
+local armor_hud = {}
+
+hbarmor.tick = 0.1
+
+-- If true, the armor bar is hidden when the player does not wear any armor
+hbarmor.autohide = true
+
+--load custom settings
+local set = io.open(minetest.get_modpath("hbarmor").."/hbarmor.conf", "r")
+if set then
+ dofile(minetest.get_modpath("hbarmor").."/hbarmor.conf")
+ set:close()
+end
+
+local must_hide = function(playername, arm)
+ return ((not armor.def[playername].count or armor.def[playername].count == 0) and arm == 0)
+end
+
+local arm_printable = function(arm)
+ return math.ceil(math.floor(arm+0.5))
+end
+
+local function custom_hud(player)
+ local name = player:get_player_name()
+
+ if minetest.setting_getbool("enable_damage") then
+ local ret = hbarmor.get_armor(player)
+ if ret == false then
+ minetest.log("error", "[hbarmor] Call to hbarmor.get_armor in custom_hud returned with false!")
+ end
+ local arm = tonumber(hbarmor.armor[name])
+ if not arm then arm = 0 end
+ local hide
+ if hbarmor.autohide then
+ hide = must_hide(name, arm)
+ else
+ hide = false
+ end
+ hb.init_hudbar(player, "armor", arm_printable(arm), nil, hide)
+ end
+end
+
+--register and define armor HUD bar
+hb.register_hudbar("armor", 0xFFFFFF, "Armor", { icon = "hbarmor_icon.png", bar = "hbarmor_bar.png" }, 0, 100, hbarmor.autohide, "%s: %d%%")
+
+dofile(minetest.get_modpath("hbarmor").."/armor.lua")
+
+
+-- update hud elemtens if value has changed
+local function update_hud(player)
+ local name = player:get_player_name()
+ --armor
+ local arm = tonumber(hbarmor.armor[name])
+ if not arm then
+ arm = 0
+ hbarmor.armor[name] = 0
+ end
+ if hbarmor.autohide then
+ -- hide armor bar completely when there is none
+ if must_hide(name, arm) then
+ hb.hide_hudbar(player, "armor")
+ else
+ hb.change_hudbar(player, "armor", arm_printable(arm))
+ hb.unhide_hudbar(player, "armor")
+ end
+ else
+ hb.change_hudbar(player, "armor", arm_printable(arm))
+ end
+end
+
+minetest.register_on_joinplayer(function(player)
+ local name = player:get_player_name()
+ custom_hud(player)
+ hbarmor.player_active[name] = true
+end)
+
+minetest.register_on_leaveplayer(function(player)
+ local name = player:get_player_name()
+ hbarmor.player_active[name] = false
+end)
+
+local main_timer = 0
+local timer = 0
+minetest.register_globalstep(function(dtime)
+ main_timer = main_timer + dtime
+ timer = timer + dtime
+ if main_timer > hbarmor.tick or timer > 4 then
+ if minetest.setting_getbool("enable_damage") then
+ if main_timer > hbarmor.tick then main_timer = 0 end
+ for _,player in ipairs(minetest.get_connected_players()) do
+ local name = player:get_player_name()
+ if hbarmor.player_active[name] == true then
+ local ret = hbarmor.get_armor(player)
+ if ret == false then
+ minetest.log("error", "[hbarmor] Call to hbarmor.get_armor in globalstep returned with false!")
+ end
+ -- update all hud elements
+ update_hud(player)
+ end
+ end
+ end
+ end
+ if timer > 4 then timer = 0 end
+end)
diff --git a/mods/hbarmor/textures/hbarmor_bar.png b/mods/hbarmor/textures/hbarmor_bar.png
new file mode 100755
index 00000000..9623c4e9
Binary files /dev/null and b/mods/hbarmor/textures/hbarmor_bar.png differ
diff --git a/mods/hud/textures/hud_armor_fg.png b/mods/hbarmor/textures/hbarmor_icon.png
similarity index 100%
rename from mods/hud/textures/hud_armor_fg.png
rename to mods/hbarmor/textures/hbarmor_icon.png
diff --git a/mods/hbhunger b/mods/hbhunger
new file mode 160000
index 00000000..030c9f48
--- /dev/null
+++ b/mods/hbhunger
@@ -0,0 +1 @@
+Subproject commit 030c9f489f5baf0c781bae07b0e2e3acc57fe7f2
diff --git a/mods/hud/README.txt b/mods/hud/README.txt
deleted file mode 100755
index 4a9474d1..00000000
--- a/mods/hud/README.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-Minetest mod "Better HUD"
-=========================
-Version: 1.4
-
-License of source code: WTFPL
------------------------------
-(c) Copyright BlockMen (2013-2014)
-
-
-
-Using the mod:
---------------
-This mod changes the HUD of Minetest.
-It improves the apperance of the health and breath bar and adds a more fancy hotbar. Furthermore it adds a
-custom crosshair, an armor bar (only for 3darmor mod) and a hunger bar. It includes also a mechanic for hunger.
-
-You can create a "hud.conf" file to customize the positions of health, hunger, armor and breath bar. Take a look at "hud.conf.example" to get more infos.
-
-
-!!IMPORTANT !!:
-Keep in mind if running a server with this mod, that the custom position should be displayed correct on every screen size!!
-
-
-=Hunger=
-========
-This mod adds a hunger mechanic to the game. Player actions like digging, placing and walking causes exhausion,
-that lowers players saturation. Also every 800 seconds you lose 1 saturation point without doing anything.
-If you are hungry (empty hunger bar) you will get damage and die in case you don't eat something.
-
-
-Notice:
--------
-You can disable this by setting "HUD_HUNGER_ENABLE = false" in "hud.conf", or "hud_hunger_enable = false" in minetest.conf.
-In case of conflict hud.conf configuration is dominant.
-
-
-Currently supported food:
--------------------------
-- Apples (default)
-- Animalmaterials (mobf modpack)
-- Bread (default)
-- Bushes
-- bushes_classic
-- Creatures
-- Dwarves (beer and such)
-- Docfarming
-- Fishing
-- Farming plus
-- Farming (default and Tenplus1's fork)
-- Food
-- fruit
-- Glooptest
-- JKMod
-- kpgmobs
-- Mobfcooking
-- Mooretrees
-- Mtfoods
-- mushroom
-- mush45
-- Seaplants (sea)
-- Simple mobs
-
-Example: 1 apple fills up the hunger bar by 1 bread, 1 bread (from farming) 2 breads in bar.
-
-Although it show 20 hunger points (10 breads) in hunger bar,
-you can fill it up to 30 points.(5 breads not shown then)
-
-
-
-License of textures:
---------------------
-hud_heart_fg.png - celeron55 (CC BY-SA 3.0), modified by BlockMen
-hud_heart_bg.png - celeron55 (CC BY-SA 3.0), modified by BlockMen
-hud_hunger_fg.png - PilzAdam (WTFPL), modified by BlockMen
-hud_hunger_bg.png - PilzAdam (WTFPL), modified by BlockMen
-wieldhand.png (from character.png) - Jordach (CC BY-SA 3.0), modified by BlockMen
-hud_air_fg.png - kaeza (WTFPL), modified by BlockMen
-hud_armor_fg.png - Stu (CC BY-SA 3.0), modified by BlockMen
-hud_armor_bg.png - Stu (CC BY-SA 3.0), modified by BlockMen
-
-everything else is WTFPL:
-(c) Copyright BlockMen (2013-2014)
-
-This program is free software. It comes without any warranty, to
-the extent permitted by applicable law. You can redistribute it
-and/or modify it under the terms of the Do What The Fuck You Want
-To Public License, Version 2, as published by Sam Hocevar. See
-http://sam.zoy.org/wtfpl/COPYING for more details.
diff --git a/mods/hud/depends.txt b/mods/hud/depends.txt
deleted file mode 100755
index 9da4c966..00000000
--- a/mods/hud/depends.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-default
-animalmaterials?
-bucket?
-bushes?
-bushes_classic?
-creatures?
-docfarming?
-dwarves?
-ethereal?
-farming?
-farming_plus?
-ferns?
-fishing?
-fruit?
-glooptest?
-jkanimals?
-jkfarming?
-jkwine?
-kpgmobs?
-mobfcooking?
-mobs?
-moretrees?
-mtfoods?
-mush45?
-mushroom?
-seaplants?
diff --git a/mods/hud/hud.conf b/mods/hud/hud.conf
deleted file mode 100755
index 722aee85..00000000
--- a/mods/hud/hud.conf
+++ /dev/null
@@ -1,14 +0,0 @@
---##Better HUD example config file##
-------------------------------------
-
-HUD_ENABLE_HUNGER = true
-HUD_HUNGER_TICK = 300
-
-HUD_ARMOR_POS = {x=0.5,y=1}
-HUD_ARMOR_OFFSET= {x=-320, y=-154}
-HUD_HEALTH_POS = {x=0.5,y=1}
-HUD_HEALTH_OFFSET = {x=-320, y=-122}
-HUD_HUNGER_POS = {x=0.5,y=1}
-HUD_HUNGER_OFFSET = {x=80, y=-122}
-HUD_AIR_POS= {x=0.5,y=1}
-HUD_AIR_OFFSET = {x=80, y=-154}
diff --git a/mods/hud/hud.conf.example b/mods/hud/hud.conf.example
deleted file mode 100755
index ffa4cd76..00000000
--- a/mods/hud/hud.conf.example
+++ /dev/null
@@ -1,33 +0,0 @@
---##Better HUD example config file##
-------------------------------------
--- This example moves the health bar in the top left corner and the hunger bar in the top right corner
-
-
---
--- general settings
---
-HUD_ENABLE_HUNGER = true --enables/disables hunger
-HUD_HUNGER_TICK = 300 --sets time for loosing 1/2 bread (of 10) (in seconds)
-
-
---!NOTICE!--
--- >>if damage is disabled neither health bar nor hunger bar or breath bar is shown
-
---
--- health bar
---
-HUD_HEALTH_POS = {x=0,y=0} --min 0, max 1
-HUD_HEALTH_OFFSET = {x=5,y=30} --offset in pixel
-
---
--- hunger bar
---
-HUD_HUNGER_POS = {x=1,y=0} --min 0, max 1
-HUD_HUNGER_OFFSET = {x=-175,y=30} --offset in pixel
-
---
--- breath bar
---
-HUD_AIR_POS = {x=0.5,y=1} --min 0, max 1
-HUD_AIR_OFFSET = {x=15,y=-75} --offset in pixel
-
diff --git a/mods/hud/hud.conf.old b/mods/hud/hud.conf.old
deleted file mode 100755
index e919ae47..00000000
--- a/mods/hud/hud.conf.old
+++ /dev/null
@@ -1,33 +0,0 @@
---##Better HUD example config file##
-------------------------------------
--- This example moves the health bar in the top left corner and the hunger bar in the top right corner
-
-
---
--- general settings
---
-HUD_ENABLE_HUNGER = true --enables/disables hunger
-HUD_HUNGER_TICK = 300 --sets time for loosing 1/2 bread (of 10) (in seconds)
-
-
---!NOTICE!--
--- >>if damage is disabled neither health bar nor hunger bar or breath bar is shown
-
---
--- health bar
---
-HUD_HEALTH_POS = {x=0.5,y=0.9} --min 0, max 1
-HUD_HEALTH_OFFSET = {x=-262, y=-50} --offset in pixel
-
---
--- hunger bar
---
-HUD_HUNGER_POS = {x=0.5,y=0.9} --min 0, max 1
-HUD_HUNGER_OFFSET = {x=25, y=-50} --offset in pixel
-
---
--- breath bar
---
-HUD_AIR_POS = {x=0.5,y=0.9} --min 0, max 1
-HUD_AIR_OFFSET = {x=25,y=-10} --offset in pixel
-
diff --git a/mods/hud/hunger.lua b/mods/hud/hunger.lua
deleted file mode 100755
index 0580dd95..00000000
--- a/mods/hud/hunger.lua
+++ /dev/null
@@ -1,401 +0,0 @@
--- Keep these for backwards compatibility
-function hud.save_hunger(player)
- hud.set_hunger(player)
-end
-function hud.load_hunger(player)
- hud.get_hunger(player)
-end
-
--- Poison player
-local function poisenp(tick, time, time_left, player)
- time_left = time_left + tick
- if time_left < time then
- minetest.after(tick, poisenp, tick, time, time_left, player)
- else
- --reset hud image
- end
- if player:get_hp()-1 > 0 then
- player:set_hp(player:get_hp()-1)
- end
-
-end
-
-function hud.item_eat(hunger_change, replace_with_item, poisen, heal)
- return function(itemstack, user, pointed_thing)
- if itemstack:take_item() ~= nil and user ~= nil then
- local name = user:get_player_name()
- local h = tonumber(hud.hunger[name])
- local hp = user:get_hp()
-
- -- Saturation
- if h < 30 and hunger_change then
- h = h + hunger_change
- if h > 30 then h = 30 end
- hud.hunger[name] = h
- hud.set_hunger(user)
- end
- -- Healing
- if hp < 20 and heal then
- hp = hp + heal
- if hp > 20 then hp = 20 end
- user:set_hp(hp)
- end
- -- Poison
- if poisen then
- --set hud-img
- poisenp(1.0, poisen, 0, user)
- end
-
- --sound:eat
- itemstack:add_item(replace_with_item)
- end
- return itemstack
- end
-end
-
-local function overwrite(name, hunger_change, replace_with_item, poisen, heal)
- local tab = minetest.registered_items[name]
- if tab == nil then return end
- tab.on_use = hud.item_eat(hunger_change, replace_with_item, poisen, heal)
- minetest.registered_items[name] = tab
-end
-
-overwrite("default:apple", 2)
-if minetest.get_modpath("farming") ~= nil then
- overwrite("farming:bread", 4)
-end
-
-if minetest.get_modpath("moretrees") ~= nil then
- overwrite("moretrees:coconut_milk", 1)
- overwrite("moretrees:raw_coconut", 2)
- overwrite("moretrees:acorn_muffin", 3)
- overwrite("moretrees:spruce_nuts", 1)
- overwrite("moretrees:pine_nuts", 1)
- overwrite("moretrees:fir_nuts", 1)
-end
-
-if minetest.get_modpath("dwarves") ~= nil then
- overwrite("dwarves:beer", 2)
- overwrite("dwarves:apple_cider", 1)
- overwrite("dwarves:midus", 2)
- overwrite("dwarves:tequila", 2)
- overwrite("dwarves:tequila_with_lime", 2)
- overwrite("dwarves:sake", 2)
-end
-
-if minetest.get_modpath("animalmaterials") ~= nil then
- overwrite("animalmaterials:milk", 2)
- overwrite("animalmaterials:meat_raw", 3)
- overwrite("animalmaterials:meat_pork", 3)
- overwrite("animalmaterials:meat_beef", 3)
- overwrite("animalmaterials:meat_chicken", 3)
- overwrite("animalmaterials:meat_lamb", 3)
- overwrite("animalmaterials:meat_venison", 3)
- overwrite("animalmaterials:meat_undead", 3, "", 3)
- overwrite("animalmaterials:meat_toxic", 3, "", 5)
- overwrite("animalmaterials:meat_ostrich", 3)
- overwrite("animalmaterials:fish_bluewhite", 2)
- overwrite("animalmaterials:fish_clownfish", 2)
-end
-
-if minetest.get_modpath("glooptest") ~= nil then
- overwrite("glooptest:kalite_lump", 1)
-end
-
-if minetest.get_modpath("bushes") ~= nil then
- overwrite("bushes:sugar", 1)
- overwrite("bushes:strawberry", 2)
- overwrite("bushes:berry_pie_raw", 3)
- overwrite("bushes:berry_pie_cooked", 4)
- overwrite("bushes:basket_pies", 15)
-end
-
-if minetest.get_modpath("bushes_classic") then
- -- bushes_classic mod, as found in the plantlife modpack
- local berries = {
- "strawberry",
- "blackberry",
- "blueberry",
- "raspberry",
- "gooseberry",
- "mixed_berry"}
- for _, berry in ipairs(berries) do
- if berry ~= "mixed_berry" then
- overwrite("bushes:"..berry, 1)
- end
- overwrite("bushes:"..berry.."_pie_raw", 2)
- overwrite("bushes:"..berry.."_pie_cooked", 5)
- overwrite("bushes:basket_"..berry, 15)
- end
-end
-
-if minetest.get_modpath("mushroom") ~= nil then
- overwrite("mushroom:brown", 1)
- overwrite("mushroom:red", 1, "", 3)
- -- mushroom potions: red = strong poison, brown = light restorative
- if minetest.get_modpath("vessels") then
- overwrite("mushroom:brown_essence", 1, "vessels:glass_bottle", nil, 4)
- overwrite("mushroom:poison", 1, "vessels:glass_bottle", 10)
- end
-end
-
-if minetest.get_modpath("docfarming") ~= nil then
- overwrite("docfarming:carrot", 3)
- overwrite("docfarming:cucumber", 2)
- overwrite("docfarming:corn", 3)
- overwrite("docfarming:potato", 4)
- overwrite("docfarming:bakedpotato", 5)
- overwrite("docfarming:raspberry", 3)
-end
-
-if minetest.get_modpath("farming_plus") ~= nil then
- overwrite("farming_plus:carrot_item", 3)
- overwrite("farming_plus:banana", 2)
- overwrite("farming_plus:orange_item", 2)
- overwrite("farming:pumpkin_bread", 4)
- overwrite("farming_plus:strawberry_item", 2)
- overwrite("farming_plus:tomato_item", 2)
- overwrite("farming_plus:potato_item", 4)
- overwrite("farming_plus:rhubarb_item", 2)
-end
-
-if minetest.get_modpath("mtfoods") ~= nil then
- overwrite("mtfoods:dandelion_milk", 1)
- overwrite("mtfoods:sugar", 1)
- overwrite("mtfoods:short_bread", 4)
- overwrite("mtfoods:cream", 1)
- overwrite("mtfoods:chocolate", 2)
- overwrite("mtfoods:cupcake", 2)
- overwrite("mtfoods:strawberry_shortcake", 2)
- overwrite("mtfoods:cake", 3)
- overwrite("mtfoods:chocolate_cake", 3)
- overwrite("mtfoods:carrot_cake", 3)
- overwrite("mtfoods:pie_crust", 3)
- overwrite("mtfoods:apple_pie", 3)
- overwrite("mtfoods:rhubarb_pie", 2)
- overwrite("mtfoods:banana_pie", 3)
- overwrite("mtfoods:pumpkin_pie", 3)
- overwrite("mtfoods:cookies", 2)
- overwrite("mtfoods:mlt_burger", 5)
- overwrite("mtfoods:potato_slices", 2)
- overwrite("mtfoods:potato_chips", 3)
- --mtfoods:medicine
- overwrite("mtfoods:casserole", 3)
- overwrite("mtfoods:glass_flute", 2)
- overwrite("mtfoods:orange_juice", 2)
- overwrite("mtfoods:apple_juice", 2)
- overwrite("mtfoods:apple_cider", 2)
- overwrite("mtfoods:cider_rack", 2)
-end
-
-if minetest.get_modpath("fruit") ~= nil then
- overwrite("fruit:apple", 2)
- overwrite("fruit:pear", 2)
- overwrite("fruit:bananna", 3)
- overwrite("fruit:orange", 2)
-end
-
-if minetest.get_modpath("mush45") ~= nil then
- overwrite("mush45:meal", 4)
-end
-
-if minetest.get_modpath("seaplants") ~= nil then
- overwrite("seaplants:kelpgreen", 1)
- overwrite("seaplants:kelpbrown", 1)
- overwrite("seaplants:seagrassgreen", 1)
- overwrite("seaplants:seagrassred", 1)
- overwrite("seaplants:seasaladmix", 6)
- overwrite("seaplants:kelpgreensalad", 1)
- overwrite("seaplants:kelpbrownsalad", 1)
- overwrite("seaplants:seagrassgreensalad", 1)
- overwrite("seaplants:seagrassgreensalad", 1)
-end
-
-if minetest.get_modpath("mobfcooking") ~= nil then
- overwrite("mobfcooking:cooked_pork", 6)
- overwrite("mobfcooking:cooked_ostrich", 6)
- overwrite("mobfcooking:cooked_beef", 6)
- overwrite("mobfcooking:cooked_chicken", 6)
- overwrite("mobfcooking:cooked_lamb", 6)
- overwrite("mobfcooking:cooked_venison", 6)
- overwrite("mobfcooking:cooked_fish", 6)
-end
-
-if minetest.get_modpath("creatures") ~= nil then
- overwrite("creatures:meat", 6)
- overwrite("creatures:flesh", 3)
- overwrite("creatures:rotten_flesh", 3, "", 3)
-end
-
-if minetest.get_modpath("ethereal") then
- overwrite("ethereal:strawberry", 1)
- overwrite("ethereal:banana", 4)
- overwrite("ethereal:pine_nuts", 1)
- overwrite("ethereal:bamboo_sprout", 0, "", 3)
- overwrite("ethereal:fern_tubers", 1)
- overwrite("ethereal:banana_bread", 7)
- overwrite("ethereal:mushroom_plant", 2)
- overwrite("ethereal:coconut_slice", 2)
- overwrite("ethereal:golden_apple", 4, "", nil, 10)
- overwrite("ethereal:wild_onion_plant", 2)
- overwrite("ethereal:mushroom_soup", 4, "ethereal:bowl")
- overwrite("ethereal:mushroom_soup_cooked", 6, "ethereal:bowl")
- overwrite("ethereal:hearty_stew", 6, "ethereal:bowl", 3)
- overwrite("ethereal:hearty_stew_cooked", 10, "ethereal:bowl")
- if minetest.get_modpath("bucket") then
- overwrite("ethereal:bucket_cactus", 2, "bucket:bucket_empty")
- end
- overwrite("ethereal:fish_raw", 2)
- overwrite("ethereal:fish_cooked", 4)
- overwrite("ethereal:seaweed", 1)
- overwrite("ethereal:yellowleaves", 1, "", nil, 1)
- overwrite("ethereal:sashimi", 4)
-end
-
---- mes modifs /début ---
-
-if minetest.get_modpath("farming") and farming.mod == "redo" then
- overwrite("farming:bread", 5)
- overwrite("farming:potato", 1)
- overwrite("farming:baked_potato", 5)
- overwrite("farming:cucumber", 3)
- overwrite("farming:tomato", 3)
- overwrite("farming:carrot", 3)
- overwrite("farming:carrot_gold", 6, "", nil, 10)
- overwrite("farming:corn", 3)
- overwrite("farming:corn_cob", 5)
- overwrite("farming:melon_slice", 2)
- overwrite("farming:pumpkin_slice", 1)
- overwrite("farming:pumpkin_bread", 7)
- overwrite("farming:coffee_cup", 2, "farming:drinking_cup")
- overwrite("farming:coffee_cup_hot", 3, "farming:drinking_cup", nil, 2)
- overwrite("farming:cookie", 2)
- overwrite("farming:chocolate_dark", 3)
- overwrite("farming:donut", 4)
- overwrite("farming:donut_chocolate", 5)
- overwrite("farming:donut_apple", 5)
- overwrite("farming:raspberries", 1)
- overwrite("farming:blueberries", 1)
- overwrite("farming:muffin_blueberry", 4)
- overwrite("farming:beans", 1)
- if minetest.get_modpath("vessels") then
- overwrite("farming:smoothie_raspberry", 2, "vessels:drinking_glass")
- end
- overwrite("farming:rhubarb", 1)
- overwrite("farming:rhubarb_pie", 5)
-end
-
-if minetest.get_modpath("maptools") then
- overwrite("maptools:superapple", 10, "", nil, 20) -- valeur perso pour "Super Apple" => 10 coeurs, 5 pains
-end
-
-if minetest.get_modpath("mobs") ~= nil then
- overwrite("mobs:cheese", 4)
- overwrite("mobs:meat_raw", 3)
- overwrite("mobs:meat", 5)
- overwrite("mobs:rat_cooked", 5)
- overwrite("mobs:honey", 6)
- overwrite("mobs:pork_raw", 4)
- overwrite("mobs:pork_cooked", 7)
- overwrite("mobs:chicken_raw", 2)
- overwrite("mobs:chicken_cooked", 4)
- overwrite("mobs:egg", 1)
- overwrite("mobs:chicken_egg_fried", 2)
- if minetest.get_modpath("bucket") then
- overwrite("mobs:bucket_milk", 3, "bucket:bucket_empty")
- end
-end
-
-if minetest.get_modpath("fishing") ~= nil then
- overwrite("fishing:fish_raw", 2)
- overwrite("fishing:fish_cooked", 4)
- overwrite("fishing:sushi", 6)
- overwrite("fishing:shark", 2)
- overwrite("fishing:shark_cooked", 6)
- overwrite("fishing:pike", 2)
- overwrite("fishing:pike_cooked", 6)
-end
---- mes modifs /fin ---
-
-if minetest.get_modpath("kpgmobs") ~= nil then
- overwrite("kpgmobs:uley", 3)
- overwrite("kpgmobs:meat", 6)
- overwrite("kpgmobs:rat_cooked", 5)
- overwrite("kpgmobs:med_cooked", 4)
- if minetest.get_modpath("bucket") then
- overwrite("kpgmobs:bucket_milk", 4, "bucket:bucket_empty")
- end
-end
-
-if minetest.get_modpath("jkfarming") ~= nil then
- overwrite("jkfarming:carrot", 3)
- overwrite("jkfarming:corn", 3)
- overwrite("jkfarming:melon_part", 2)
- overwrite("jkfarming:cake", 3)
-end
-
-if minetest.get_modpath("jkanimals") ~= nil then
- overwrite("jkanimals:meat", 6)
-end
-
-if minetest.get_modpath("jkwine") ~= nil then
- overwrite("jkwine:grapes", 2)
- overwrite("jkwine:winebottle", 1)
-end
-
--- Ferns mod of plantlife_modpack
-if minetest.get_modpath("ferns") ~= nil then
- overwrite("ferns:fiddlehead", 1, "", 1)
- overwrite("ferns:fiddlehead_roasted", 3)
- overwrite("ferns:ferntuber_roasted", 3)
- overwrite("ferns:horsetail_01", 1)
-end
-
--- Food mod by Rubenwardy ( https://github.com/rubenwardy/food )
-if minetest.get_modpath("food") ~= nil then
- overwrite("food:apple_juice", 1)
- overwrite("food:rainbow_juice", 6)
- overwrite("food:cheese", 4)
- overwrite("food:cactus_juice", 3)
- overwrite("food:cake", 5)
- overwrite("food:cake_carrot", 6)
- overwrite("food:cake_choco", 7)
- overwrite("food:milk", 3)
- overwrite("food:milk_chocolate", 4)
- overwrite("food:pasta_bake", 7)
- overwrite("food:soup_chicken", 4)
- overwrite("food:soup_tomato", 4)
-end
-
--- player-action based hunger changes
-function hud.handle_node_actions(pos, oldnode, player, ext)
- if not player or not player:is_player() then
- return
- end
- local name = player:get_player_name()
- local exhaus = hud.exhaustion[name]
- if exhaus == nil then return end
- local new = HUD_HUNGER_EXHAUST_PLACE
- -- placenode event
- if not ext then
- new = HUD_HUNGER_EXHAUST_DIG
- end
- -- assume its send by main timer when movement detected
- if not pos and not oldnode then
- new = HUD_HUNGER_EXHAUST_MOVE
- end
- if exhaus == nil then return end
- exhaus = (exhaus or 0) + new
- if exhaus > HUD_HUNGER_EXHAUST_LVL then
- exhaus = 0
- local h = tonumber(hud.hunger[name])
- h = h - 1
- if h < 0 then h = 0 end
- hud.hunger[name] = h
- hud.set_hunger(player)
- end
- hud.exhaustion[name] = exhaus
-end
-
-minetest.register_on_placenode(hud.handle_node_actions)
-minetest.register_on_dignode(hud.handle_node_actions)
diff --git a/mods/hud/init.lua b/mods/hud/init.lua
deleted file mode 100755
index 168d0fa0..00000000
--- a/mods/hud/init.lua
+++ /dev/null
@@ -1,339 +0,0 @@
-hud = {}
-
--- HUD statbar values
-hud.health = {}
-hud.hunger = {}
-hud.air = {}
-hud.armor = {}
-hud.hunger_out = {}
-hud.armor_out = {}
-
--- HUD item ids
-local health_hud = {}
-local hunger_hud = {}
-local air_hud = {}
-local armor_hud = {}
-local armor_hud_bg = {}
-
--- default settings
-
-HUD_SCALEABLE = false
-HUD_SIZE = ""
-
- -- statbar positions
-HUD_HEALTH_POS = {x=0.5,y=0.9}
-HUD_HEALTH_OFFSET = {x=-175, y=-2}
-HUD_HUNGER_POS = {x=0.5,y=0.9}
-HUD_HUNGER_OFFSET = {x=15, y=-2}
-HUD_AIR_POS = {x=0.5,y=0.9}
-HUD_AIR_OFFSET = {x=15,y=-2}
-HUD_ARMOR_POS = {x=0.5,y=0.9}
-HUD_ARMOR_OFFSET = {x=-175, y=-15}
-
--- dirty way to check for new statbars
-if dump(minetest.hud_replace_builtin) ~= "nil" then
- HUD_SCALEABLE = true
- HUD_SIZE = {x=24, y=24}
- HUD_HEALTH_POS = {x=0.5,y=1}
- HUD_HEALTH_OFFSET = {x=-262, y=-87}
- HUD_HUNGER_POS = {x=0.5,y=1}
- HUD_HUNGER_OFFSET = {x=15, y=-87}
- HUD_AIR_POS = {x=0.5,y=1}
- HUD_AIR_OFFSET = {x=15,y=-110}
- HUD_ARMOR_POS = {x=0.5,y=1}
- HUD_ARMOR_OFFSET = {x=-262, y=-110}
-end
-
-HUD_TICK = 0.1
-
---Some hunger settings
-hud.exhaustion = {} -- Exhaustion is experimental!
-
-HUD_HUNGER_TICK = 800 -- time in seconds after that 1 hunger point is taken
-HUD_HUNGER_EXHAUST_DIG = 3 -- exhaustion increased this value after digged node
-HUD_HUNGER_EXHAUST_PLACE = 1 -- exhaustion increased this value after placed
-HUD_HUNGER_EXHAUST_MOVE = 0.3 -- exhaustion increased this value if player movement detected
-HUD_HUNGER_EXHAUST_LVL = 60 -- at what exhaustion player saturation gets lowerd
-
-
-
-HUD_ENABLE_HUNGER = minetest.setting_getbool("hud_hunger_enable")
-if HUD_ENABLE_HUNGER == nil then
- HUD_ENABLE_HUNGER = minetest.setting_getbool("enable_damage")
-end
-
-HUD_SHOW_ARMOR = false
-if minetest.get_modpath("3d_armor") ~= nil then
- HUD_SHOW_ARMOR = true
-end
-
---load custom settings
-local set = io.open(minetest.get_modpath("hud").."/hud.conf", "r")
-if set then
- dofile(minetest.get_modpath("hud").."/hud.conf")
- set:close()
-else
- if not HUD_ENABLE_HUNGER then
- HUD_AIR_OFFSET = HUD_HUNGER_OFFSET
- end
-end
-
-local function hide_builtin(player)
- player:hud_set_flags({crosshair = true, hotbar = true, healthbar = false, wielditem = true, breathbar = false})
-end
-
-
-local function custom_hud(player)
- local name = player:get_player_name()
-
--- fancy hotbar (only when no crafting mod present)
- if minetest.get_modpath("crafting") == nil then
- player:hud_set_hotbar_image("hud_hotbar.png")
- player:hud_set_hotbar_selected_image("hud_hotbar_selected.png")
- end
-
- if minetest.setting_getbool("enable_damage") then
- --hunger
- if HUD_ENABLE_HUNGER then
- player:hud_add({
- hud_elem_type = "statbar",
- position = HUD_HUNGER_POS,
- size = HUD_SIZE,
- text = "hud_hunger_bg.png",
- number = 20,
- alignment = {x=-1,y=-1},
- offset = HUD_HUNGER_OFFSET,
- })
- local h = hud.hunger[name]
- if h == nil or h > 20 then h = 20 end
- hunger_hud[name] = player:hud_add({
- hud_elem_type = "statbar",
- position = HUD_HUNGER_POS,
- size = HUD_SIZE,
- text = "hud_hunger_fg.png",
- number = h,
- alignment = {x=-1,y=-1},
- offset = HUD_HUNGER_OFFSET,
- })
- end
- --health
- player:hud_add({
- hud_elem_type = "statbar",
- position = HUD_HEALTH_POS,
- size = HUD_SIZE,
- text = "hud_heart_bg.png",
- number = 20,
- alignment = {x=-1,y=-1},
- offset = HUD_HEALTH_OFFSET,
- })
- health_hud[name] = player:hud_add({
- hud_elem_type = "statbar",
- position = HUD_HEALTH_POS,
- size = HUD_SIZE,
- text = "hud_heart_fg.png",
- number = player:get_hp(),
- alignment = {x=-1,y=-1},
- offset = HUD_HEALTH_OFFSET,
- })
-
- --air
- air_hud[name] = player:hud_add({
- hud_elem_type = "statbar",
- position = HUD_AIR_POS,
- size = HUD_SIZE,
- text = "hud_air_fg.png",
- number = 0,
- alignment = {x=-1,y=-1},
- offset = HUD_AIR_OFFSET,
- })
-
- --armor
- if HUD_SHOW_ARMOR then
- armor_hud_bg[name] = player:hud_add({
- hud_elem_type = "statbar",
- position = HUD_ARMOR_POS,
- size = HUD_SIZE,
- text = "hud_armor_bg.png",
- number = 0,
- alignment = {x=-1,y=-1},
- offset = HUD_ARMOR_OFFSET,
- })
- armor_hud[name] = player:hud_add({
- hud_elem_type = "statbar",
- position = HUD_ARMOR_POS,
- size = HUD_SIZE,
- text = "hud_armor_fg.png",
- number = 0,
- alignment = {x=-1,y=-1},
- offset = HUD_ARMOR_OFFSET,
- })
- end
- end
-end
-
---needs to be defined for older version of 3darmor
-function hud.set_armor()
-end
-
-
-if HUD_ENABLE_HUNGER then dofile(minetest.get_modpath("hud").."/hunger.lua") end
-if HUD_SHOW_ARMOR then dofile(minetest.get_modpath("hud").."/armor.lua") end
-
--- update hud elemtens if value has changed
-local function update_hud(player)
- local name = player:get_player_name()
- --air
- local air = tonumber(hud.air[name])
- if player:get_breath() ~= air then
- air = player:get_breath()
- hud.air[name] = air
- if air > 10 then air = 0 end
- player:hud_change(air_hud[name], "number", air*2)
- end
- --health
- local hp = tonumber(hud.health[name])
- if player:get_hp() ~= hp then
- hp = player:get_hp()
- hud.health[name] = hp
- player:hud_change(health_hud[name], "number", hp)
- end
- --armor
- local arm_out = tonumber(hud.armor_out[name])
- if not arm_out then arm_out = 0 end
- local arm = tonumber(hud.armor[name])
- if not arm then arm = 0 end
- if arm_out ~= arm then
- hud.armor_out[name] = arm
- player:hud_change(armor_hud[name], "number", arm)
- -- hide armor bar completely when there is none
- if (not armor.def[name].count or armor.def[name].count == 0) and arm == 0 then
- player:hud_change(armor_hud_bg[name], "number", 0)
- else
- player:hud_change(armor_hud_bg[name], "number", 20)
- end
- end
- --hunger
- local h_out = tonumber(hud.hunger_out[name])
- local h = tonumber(hud.hunger[name])
- if h_out ~= h then
- hud.hunger_out[name] = h
- -- bar should not have more than 10 icons
- if h>20 then h=20 end
- player:hud_change(hunger_hud[name], "number", h)
- end
-end
-
-hud.get_hunger = function(player)
- local inv = player:get_inventory()
- if not inv then return nil end
- local hgp = inv:get_stack("hunger", 1):get_count()
- if hgp == 0 then
- hgp = 21
- inv:set_stack("hunger", 1, ItemStack({name=":", count=hgp}))
- else
- hgp = hgp
- end
- return hgp-1
-end
-
-hud.set_hunger = function(player)
- local inv = player:get_inventory()
- local name = player:get_player_name()
- local value = hud.hunger[name]
- if not inv or not value then return nil end
- if value > 30 then value = 30 end
- if value < 0 then value = 0 end
-
- inv:set_stack("hunger", 1, ItemStack({name=":", count=value+1}))
-
- return true
-end
-
-minetest.register_on_joinplayer(function(player)
- local name = player:get_player_name()
- local inv = player:get_inventory()
- inv:set_size("hunger",1)
- hud.health[name] = player:get_hp()
- if HUD_ENABLE_HUNGER then
- hud.hunger[name] = hud.get_hunger(player)
- hud.hunger_out[name] = hud.hunger[name]
- hud.exhaustion[name] = 0
- end
- hud.armor[name] = 0
- hud.armor_out[name] = 0
- local air = player:get_breath()
- hud.air[name] = air
- minetest.after(0.5, function()
- hide_builtin(player)
- custom_hud(player)
- if HUD_ENABLE_HUNGER then hud.set_hunger(player) end
- end)
-end)
-
-minetest.register_on_respawnplayer(function(player)
- -- reset player breath since the engine doesnt
- player:set_breath(11)
- -- reset hunger (and save)
- local name = player:get_player_name()
- hud.hunger[name] = 20
- if HUD_ENABLE_HUNGER then
- minetest.after(0.5, hud.set_hunger, player)
- hud.exhaustion[name] = 0
- end
-end)
-
-local main_timer = 0
-local timer = 0
-local timer2 = 0
-minetest.after(2.5, function()
- minetest.register_globalstep(function(dtime)
- main_timer = main_timer + dtime
- timer = timer + dtime
- timer2 = timer2 + dtime
- if main_timer > HUD_TICK or timer > 4 or timer2 > HUD_HUNGER_TICK then
- if main_timer > HUD_TICK then main_timer = 0 end
- for _,player in ipairs(minetest.get_connected_players()) do
- local name = player:get_player_name()
-
- -- only proceed if damage is enabled
- if minetest.setting_getbool("enable_damage") then
- local h = tonumber(hud.hunger[name])
- local hp = player:get_hp()
- if HUD_ENABLE_HUNGER and timer > 4 then
- -- heal player by 1 hp if not dead and saturation is > 15 (of 30)
- if h > 15 and hp > 0 and hud.air[name] > 0 then
- player:set_hp(hp+1)
- -- or damage player by 1 hp if saturation is < 2 (of 30)
- elseif h <= 1 and minetest.setting_getbool("enable_damage") then
- if hp-1 >= 0 then player:set_hp(hp-1) end
- end
- end
- -- lower saturation by 1 point after xx seconds
- if HUD_ENABLE_HUNGER and timer2 > HUD_HUNGER_TICK then
- if h > 0 then
- h = h-1
- hud.hunger[name] = h
- hud.set_hunger(player)
- end
- end
- -- update current armor level
- if HUD_SHOW_ARMOR then hud.get_armor(player) end
-
- -- update all hud elements
- update_hud(player)
-
- if HUD_ENABLE_HUNGER then
- local controls = player:get_player_control()
- -- Determine if the player is walking
- if controls.up or controls.down or controls.left or controls.right then
- hud.handle_node_actions(nil, nil, player)
- end
- end
- end
- end
-
- end
- if timer > 4 then timer = 0 end
- if timer2 > HUD_HUNGER_TICK then timer2 = 0 end
- end)
-end)
diff --git a/mods/hud/textures/crosshair.png b/mods/hud/textures/crosshair.png
deleted file mode 100755
index 5822e713..00000000
Binary files a/mods/hud/textures/crosshair.png and /dev/null differ
diff --git a/mods/hud/textures/hud_air_fg.png b/mods/hud/textures/hud_air_fg.png
deleted file mode 100755
index b62c9b02..00000000
Binary files a/mods/hud/textures/hud_air_fg.png and /dev/null differ
diff --git a/mods/hud/textures/hud_armor_bg.png b/mods/hud/textures/hud_armor_bg.png
deleted file mode 100755
index 32401003..00000000
Binary files a/mods/hud/textures/hud_armor_bg.png and /dev/null differ
diff --git a/mods/hud/textures/hud_heart_fg.png b/mods/hud/textures/hud_heart_fg.png
deleted file mode 100755
index dc213d84..00000000
Binary files a/mods/hud/textures/hud_heart_fg.png and /dev/null differ
diff --git a/mods/hud/textures/hud_hotbar.png b/mods/hud/textures/hud_hotbar.png
deleted file mode 100755
index cec2ae09..00000000
Binary files a/mods/hud/textures/hud_hotbar.png and /dev/null differ
diff --git a/mods/hud/textures/hud_hotbar_selected.png b/mods/hud/textures/hud_hotbar_selected.png
deleted file mode 100755
index d961f1ae..00000000
Binary files a/mods/hud/textures/hud_hotbar_selected.png and /dev/null differ
diff --git a/mods/hud/textures/hud_hunger_bg.png b/mods/hud/textures/hud_hunger_bg.png
deleted file mode 100755
index 07e21e7b..00000000
Binary files a/mods/hud/textures/hud_hunger_bg.png and /dev/null differ
diff --git a/mods/hud/textures/hud_hunger_fg.png b/mods/hud/textures/hud_hunger_fg.png
deleted file mode 100755
index a5cc2a12..00000000
Binary files a/mods/hud/textures/hud_hunger_fg.png and /dev/null differ
diff --git a/mods/hud/textures/wieldhand.png b/mods/hud/textures/wieldhand.png
deleted file mode 100755
index 2307ba4e..00000000
Binary files a/mods/hud/textures/wieldhand.png and /dev/null differ
diff --git a/mods/hudbars/API.md b/mods/hudbars/API.md
new file mode 100755
index 00000000..f189e2dd
--- /dev/null
+++ b/mods/hudbars/API.md
@@ -0,0 +1,173 @@
+API documentation for the HUD bars mod 1.0.2
+============================================
+
+## Introduction
+This API allows you to add, change, hide and unhide custom HUD bars for this mod.
+
+## Overview
+To give you a *very* brief overview over this API, here is the basic workflow on how to add your own custom HUD bar:
+
+* Create images for your HUD bar
+* Call `hb.register_hudbar` to make the definition of the HUD bar known to this mod
+* Call `hb.init_hudbar` for each player for which you want to use previously defined HUD bar
+* Use `hb.change_hudbar` whenever you need to change the values of a HUD bar of a certain player
+* If you need it: Use `hb.hide_hudbar` and `hb.unhide_hudbar` to hide or unhide HUD bars of a certain player
+
+## The basic rules
+In order to use this API, you should be aware of a few basic rules in order to understand it:
+
+* A HUD bar is an approximate graphical representation of the ratio of a current value and a maximum value, i.e. current health of 15 and maximum health of 20. A full HUD bar represents 100%, an empty HUD bar represents 0%.
+* The current value must always be equal to or smaller then the maximum
+* Both current value and maximum must not be smaller than 0
+* Both current value and maximum must be real numbers. So no NaN, infinity, etc.
+* The HUD bar will be hidden if the maximum equals 0. This is intentional.
+* The health and breath HUD bars are hardcoded.
+
+These are soft rules, the HUD bars mod will not enforce all of these.
+But this mod has been programmed under the assumption that these rules are followed, for integrity.
+
+## Adding a HUD bar
+To make a new HUD bar known to this mod, you need …
+
+* … an image of size 2×16 for the bar
+* … an icon of size 16×16 (optional)
+* … to register it with `hb.register_hudbar`
+
+### Bar image
+The image for the bar will be repeated horizontally to denote the “value” of the HUD bar.
+It **must** be of size 2×16.
+If neccessary, the image will be split vertically in half, and only the left half of the image
+is displayed. So the final HUD bar will always be displayed on a per-pixel basis.
+
+The default bar images are single-colored, but you can use other styles as well, for instance,
+a vertical gradient.
+
+### Icon
+A 16×16 image shown left of the HUD bar. This is optional.
+
+### `hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string)`
+This function registers a new custom HUD bar definition to the HUD bars mod, so it can be later used to be displayed, changed, hidden
+and unhidden on a per-player basis.
+Note this does not yet display the HUD bar.
+
+The HUD bars will be displayed in a “first come, first serve” order. This mod does not allow fow a custom order or a way to set it
+manually in a reliable way.
+
+
+#### Parameters
+* `identifier`: A globally unique internal name for the HUD bar, will be used later to refer to it. Please only rely on alphanumeric characters for now. The identifiers “`health`” and “`breath`” are used internally for the built-in health and breath bar, respectively. Please do not use these names.
+* `text_color`: A 3-octet number defining the color of the text. The octets denote, in this order red, green and blue and range from `0x00` (complete lack of this component) to `0xFF` (full intensity of this component). Example: `0xFFFFFF` for white.
+* `label`: A string which is displayed on the HUD bar itself to describe the HUD bar. Try to keep this string short.
+* `textures`: A table with the following fields:
+ * `bar`: The file name of the bar image (as string).
+ * `icon`: The file name of the icon, as string. This field can be `nil`, in which case no icon will be used.
+* `default_start_value`: If this HUD bar is added to a player, and no initial value is specified, this value will be used as initial current value
+* `default_max_value`: If this HUD bar is added to a player, and no initial maximum value is specified, this value will be used as initial maximum value
+* `default_start_hidden`: The HUD bar will be initially start hidden by default when added to a player. Use `hb.unhide_hudbar` to unhide it.
+* `format_string`: This is optional; You can specify an alternative format string display the final text on the HUD bar. The default format string is “`%s: %d/%d`” (in this order: Label, current value, maximum value). See also the Lua documentation of `string.format`.
+
+#### Return value
+Always `nil`.
+
+
+## Displaying a HUD bar
+After a HUD bar has been registered, they are not yet displayed yet for any player. HUD bars must be
+explicitly initialized on a per-player basis.
+
+You probably want to do this in the `minetest.register_on_joinplayer`.
+
+### `hb.init_hudbar(player, identifier, start_value, start_max, start_hidden)`
+This function initialzes and activates a previously registered HUD bar and assigns it to a
+certain client/player. This has only to be done once per player and after that, you can change
+the values using `hb.change_hudbar`.
+
+However, if `start_hidden` was set to `true` for the HUD bar (in `hb.register_hudbar`), the HUD bar
+will initially be hidden, but the HUD elements are still sent to the client. Otherwise,
+the HUD bar will be initially be shown to the player.
+
+#### Parameters
+* `player`: `ObjectRef` of the player to which the new HUD bar should be displayed to.
+* `identifier`: The identifier of the HUD bar type, as specified in `hb.register_hudbar`.
+* `start_value`: The initial current value of the HUD bar. This is optional, `default_start_value` of the registration function will be used, if this is `nil`.
+* `start_max`: The initial maximum value of the HUD bar. This is optional, `default_start_max` of the registration function will be used, if this is `nil`
+* `start_hidden`: Whether the HUD bar is initially hidden. This is optional, `default_start_hidden` of the registration function will be used as default
+
+#### Return value
+Always `nil`.
+
+
+
+## Modifying a HUD bar
+After a HUD bar has been added, you can change the current and maximum value on a per-player basis.
+You use the function `hb.change_hudbar` for this.
+
+### `hb.change_hudbar(player, identifier, new_value, new_max_value)`
+Changes the values of an initialized HUD bar for a certain player. `new_value` and `new_max_value`
+can be `nil`; if one of them is `nil`, that means the value is unchanged. If both values
+are `nil`, this function is a no-op.
+This function also tries minimize the amount of calls to `hud_change` of the Minetest Lua API, and
+therefore, network traffic. `hud_change` is only called if it is actually needed, i.e. when the
+actual length of the bar or the displayed string changed, so you do not have to worry about it.
+
+#### Parameters
+* `player`: `ObjectRef` of the player to which the HUD bar belongs to
+* `identifier`: The identifier of the HUD bar type to change, as specified in `hb.register_hudbar`.
+* `new_value`: The new current value of the HUD bar
+* `new_max_value`: The new maximum value of the HUD bar
+
+#### Return value
+Always `nil`.
+
+
+## Hiding and unhiding a HUD bar
+You can also hide custom HUD bars, meaning they will not be displayed for a certain player. You can still
+use `hb.change_hudbar` on a hidden HUD bar, the new values will be correctly displayed after the HUD bar
+has been unhidden. Both functions will only call `hud_change` if there has been an actual change to avoid
+unneccessary traffic.
+
+Note that the hidden state of a HUD bar will *not* be saved by this mod on server shutdown, so you may need
+to write your own routines for this or by setting the correct value for `start_hidden` when calling
+`hb.init_hudbar`.
+
+### `hb.hide_hudbar(player, identifier)`
+Hides the specified HUD bar from the screen of the specified player.
+
+#### Parameters
+* `player`: `ObjectRef` of the player to which the HUD bar belongs to
+* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`.
+
+#### Return value
+Always `nil`.
+
+
+### `hb.unhide_hudbar(player, identifier)`
+Makes a previously hidden HUD bar visible again to a player.
+
+#### Parameters
+* `player`: `ObjectRef` of the player to which the HUD bar belongs to
+* `identifier`: The identifier of the HUD bar type to unhide, as specified in `hb.register_hudbar`.
+
+#### Return value
+Always `nil`.
+
+
+## Reading HUD bar information
+It is also possible to read information about an active HUD bar.
+
+### `hb.get_hudbar_state(player, identifier)`
+Returns the current state of the active player's HUD bar.
+
+#### Parameters
+* `player`: `ObjectRef` of the player to which the HUD bar belongs to
+* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`.
+
+#### Return value
+A table which holds information on the current state of the HUD bar. Note the table is a deep
+copy of the internal HUD bar state, it is *not* a reference; the information hold by the table is
+only true for the moment you called this function. The fields of this table are:
+
+* `value`: Current value of HUD bar.
+* `max`: Current maximum value of HUD bar.
+* `hidden`: Boolean denoting whether the HUD bar is hidden.
+* `barlength`: The length of the HUD bar in pixels. This field is meaningless if the HUD bar is currently hidden.
+* `text`: The text shown on the HUD bar. This fiels is meaningless if the HUD bar is currently hidden.
diff --git a/mods/hudbars/README.txt b/mods/hudbars/README.txt
new file mode 100755
index 00000000..c161b40e
--- /dev/null
+++ b/mods/hudbars/README.txt
@@ -0,0 +1,48 @@
+Minetest mod: HUD bars
+======================
+Version: 1.0.2
+
+This software uses semantic versioning, as defined by version 2.0.0 of the SemVer
+standard.
+
+
+License of source code: WTFPL
+-----------------------------
+Author: Wuzzy (2015)
+Forked from the “Better HUD” [hud] mod by BlockMen.
+
+
+Using the mod:
+--------------
+This mod changes the HUD of Minetest. It replaces the default health and breath symbols by horizontal colored bars with text showing
+the number.
+
+Furthermore, it enables other mods to add their own custom bars to the HUD, this mod will place them accordingly.
+
+You can create a “hudbars.conf” file to customize the positions of the health and breath bars. Take a look at “hudbars.conf.example”
+to get more infos. The lines starting with “--” are comments, remove the two dashes to activate a setting. Settings which are not
+set will use a default value instead.
+
+
+IMPORTANT:
+Keep in mind if running a server with this mod, that the custom position should be displayed correctly on every screen size!
+
+API:
+----
+The API is used to add your own custom HUD bars.
+Documentation for the API of this mod can be found in API.md.
+
+
+License of textures:
+--------------------
+hudbars_icon_health.png - celeron55 (CC BY-SA 3.0), modified by BlockMen
+hudbars_icon_breath.png - kaeza (WTFPL), modified by BlockMen
+hudbars_bar_health.png - Wuzzy (WTFPL)
+hudbars_bar_breath.png - Wuzzy (WTFPL)
+hudbars_bar_background.png - Wuzzy(WTFPL)
+
+This program is free software. It comes without any warranty, to
+the extent permitted by applicable law. You can redistribute it
+and/or modify it under the terms of the Do What The Fuck You Want
+To Public License, Version 2, as published by Sam Hocevar. See
+http://sam.zoy.org/wtfpl/COPYING for more details.
diff --git a/mods/hudbars/changelog.txt b/mods/hudbars/changelog.txt
new file mode 100755
index 00000000..c94c0b31
--- /dev/null
+++ b/mods/hudbars/changelog.txt
@@ -0,0 +1,45 @@
+Note: This software uses semantic versioning,
+as of version 2.0.0 of the standard .
+
+0.1.0
+-----
+- Initial release, forked from mod “Better HUD” [hud].
+
+0.2.0
+-----
+- Add API documentation
+
+0.3.0
+-----
+- Rename main table from “hud” to “hb” (affects function names!)
+- Arguments 3-4 of hb.change_hudbar can be nil for values which should not change
+- Add proper function hb.init_hudbar, replaces odd call to hud.hudtables[identifier].add_all
+- Update API documentation and fix mistakes
+- Use “hudbars.conf” instead of “hud.conf”
+
+0.4.0
+-----
+- New function: hb.get_hudbar_state to get information about the state of an active HUD bar, such as values, whether it is hidden, etc.
+- hb.change_hudbar has been optimized to call hud_change fewer times, which is hopefully good for networking
+- Rename hb.register_hudbar parameter “start_hide” to “start_hidden”
+- start_hidden parameter now finally works
+- Do not affect other HUD flags (crosshair, wielditem, etc.) when starting mod
+- Show error message when trying to call hb.init_hudbar or hb.change_hudbar with bad values
+- Update documentation
+- Lots of refactoring
+- Health and breath bar now use API
+
+1.0.0
+-----
+- Add new parameter start_hidden to hb.init_hudbar, specified whether HUD bar is hidden on start
+- Copy-editing of API.md and README.txt
+- Internal: Fix add_all weirdness
+
+1.0.1
+-----
+- Fix race condition causing crash at start of server
+
+1.0.2
+-----
+- Fix other HUD elements disappearing for rejoining players
+- Remove pointless delays for initializing the HUD for new or rejoining players
diff --git a/mods/hudbars/depends.txt b/mods/hudbars/depends.txt
new file mode 100755
index 00000000..e69de29b
diff --git a/mods/hudbars/hudbars.conf.example b/mods/hudbars/hudbars.conf.example
new file mode 100755
index 00000000..9ca94510
--- /dev/null
+++ b/mods/hudbars/hudbars.conf.example
@@ -0,0 +1,24 @@
+-- HUD bars example config file
+-------------------------------
+-- Currently you can customize the starting position of the first bottom two HUD bars
+-- and the vertical margin. That's all.
+-- Remove the two dashes to activate a setting. Lua syntax is used.
+-- The examples are all equal to the mod defaults
+-------------------------------------------------------------------------------------------------------
+
+
+-- Vertical space between two HUD bars
+-- hb.settings.vmargin = 24
+
+-- Pos of the first HUD bar the the left (“pos”, as in hud definition of hud_add of Minetest Lua API)
+-- hb.settings.pos_left = { x=0.5, y=1 }
+
+-- Pos of the first HUD bar the the right
+-- hb.settings.pos_right= { x = 0.5, y = 1 }
+
+-- Offset of the first HUD bar to the left (“offset”, as in HUD definition)
+-- hb.settings.start_offset_left = { x = -175, y = -70 }
+
+-- Offset of the first HUD bar to the right
+-- hb.settings_start_offset_right = { x = 15, y = -70 }
+
diff --git a/mods/hudbars/init.lua b/mods/hudbars/init.lua
new file mode 100755
index 00000000..eab13c8b
--- /dev/null
+++ b/mods/hudbars/init.lua
@@ -0,0 +1,342 @@
+hb = {}
+
+hb.hudtables = {}
+
+-- number of registered HUD bars
+hb.hudbars_count = 0
+
+hb.settings = {}
+
+-- default settings
+hb.settings.max_bar_length = 160
+
+-- statbar positions
+hb.settings.pos_left = { x=0.5, y=1 }
+hb.settings.pos_right= { x = 0.5, y = 1 }
+hb.settings.start_offset_left = { x = -175, y = -70 }
+hb.settings.start_offset_right = { x = 15, y = -70 }
+
+hb.settings.vmargin = 24
+hb.settings.tick = 0.1
+
+-- Table which contains all players with active default HUD bars (only for internal use)
+hb.players = {}
+
+function hb.value_to_barlength(value, max)
+ if max == 0 then
+ return 0
+ else
+ return math.ceil((value/max) * hb.settings.max_bar_length)
+ end
+end
+
+function hb.get_hudtable(identifier)
+ return hb.hudtables[identifier]
+end
+
+function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string)
+ local hudtable = {}
+ local pos, offset
+ if hb.hudbars_count % 2 == 0 then
+ pos = hb.settings.pos_left
+ offset = {
+ x = hb.settings.start_offset_left.x,
+ y = hb.settings.start_offset_left.y - hb.settings.vmargin * math.floor(hb.hudbars_count/2)
+ }
+ else
+ pos = hb.settings.pos_right
+ offset = {
+ x = hb.settings.start_offset_right.x,
+ y = hb.settings.start_offset_right.y - hb.settings.vmargin * math.floor((hb.hudbars_count-1)/2)
+ }
+ end
+ if format_string == nil then
+ format_string = "%s: %d/%d"
+ end
+
+ hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden)
+ if start_value == nil then start_value = hudtable.default_start_value end
+ if start_max == nil then start_max = hudtable.default_start_max end
+ if start_hidden == nil then start_hidden = hudtable.default_start_hidden end
+ local ids = {}
+ local state = {}
+ local name = player:get_player_name()
+ local bgscale, iconscale, text, barnumber
+ if start_max == 0 or start_hidden then
+ bgscale = { x=0, y=0 }
+ else
+ bgscale = { x=1, y=1 }
+ end
+ if start_hidden then
+ iconscale = { x=0, y=0 }
+ barnumber = 0
+ text = ""
+ else
+ iconscale = { x=1, y=1 }
+ barnumber = hb.value_to_barlength(start_value, start_max)
+ text = string.format(format_string, label, start_value, start_max)
+ end
+ ids.bg = player:hud_add({
+ hud_elem_type = "image",
+ position = pos,
+ scale = bgscale,
+ text = "hudbars_bar_background.png",
+ alignment = {x=1,y=1},
+ offset = { x = offset.x - 1, y = offset.y - 1 },
+ })
+ if textures.icon ~= nil then
+ ids.icon = player:hud_add({
+ hud_elem_type = "image",
+ position = pos,
+ scale = iconscale,
+ text = textures.icon,
+ alignment = {x=-1,y=1},
+ offset = { x = offset.x - 3, y = offset.y },
+ })
+ end
+ ids.bar = player:hud_add({
+ hud_elem_type = "statbar",
+ position = pos,
+ text = textures.bar,
+ number = barnumber,
+ alignment = {x=-1,y=-1},
+ offset = offset,
+ })
+ ids.text = player:hud_add({
+ hud_elem_type = "text",
+ position = pos,
+ text = text,
+ alignment = {x=1,y=1},
+ number = text_color,
+ direction = 0,
+ offset = { x = offset.x + 2, y = offset.y },
+ })
+ -- Do not forget to update hb.get_hudbar_state if you add new fields to the state table
+ state.hidden = start_hidden
+ state.value = start_value
+ state.max = start_max
+ state.text = text
+ state.barlength = hb.value_to_barlength(start_value, start_max)
+
+ local main_error_text =
+ "[hudbars] Bad initial values of HUD bar identifier “"..tostring(identifier).."” for player "..name..". "
+
+ if start_max < start_value then
+ minetest.log("error", main_error_text.."start_max ("..start_max..") is smaller than start_value ("..start_value..")!")
+ end
+ if start_max < 0 then
+ minetest.log("error", main_error_text.."start_max ("..start_max..") is smaller than 0!")
+ end
+ if start_value < 0 then
+ minetest.log("error", main_error_text.."start_value ("..start_value..") is smaller than 0!")
+ end
+
+ hb.hudtables[identifier].hudids[name] = ids
+ hb.hudtables[identifier].hudstate[name] = state
+ end
+
+ hudtable.identifier = identifier
+ hudtable.format_string = format_string
+ hudtable.label = label
+ hudtable.hudids = {}
+ hudtable.hudstate = {}
+ hudtable.default_start_hidden = default_start_hidden
+ hudtable.default_start_value = default_start_value
+ hudtable.default_start_max = default_start_max
+
+ hb.hudbars_count= hb.hudbars_count + 1
+
+ hb.hudtables[identifier] = hudtable
+end
+
+function hb.init_hudbar(player, identifier, start_value, start_max, start_hidden)
+ local hudtable = hb.get_hudtable(identifier)
+ hb.hudtables[identifier].add_all(player, hudtable, start_value, start_max, start_hidden)
+end
+
+function hb.change_hudbar(player, identifier, new_value, new_max_value)
+ if new_value == nil and new_max_value == nil then
+ return
+ end
+
+ local name = player:get_player_name()
+ local hudtable = hb.get_hudtable(identifier)
+ local value_changed, max_changed = false, false
+
+ if new_value ~= nil then
+ if new_value ~= hudtable.hudstate[name].value then
+ hudtable.hudstate[name].value = new_value
+ value_changed = true
+ end
+ else
+ new_value = hudtable.hudstate[name].value
+ end
+ if new_max_value ~= nil then
+ if new_max_value ~= hudtable.hudstate[name].max then
+ hudtable.hudstate[name].max = new_max_value
+ max_changed = true
+ end
+ else
+ new_max_value = hudtable.hudstate[name].max
+ end
+
+ local main_error_text =
+ "[hudbars] Bad call to hb.change_hudbar, identifier: “"..tostring(identifier).."”, player name: “"..name.."”. "
+ if new_max_value < new_value then
+ minetest.log("error", main_error_text.."new_max_value ("..new_max_value..") is smaller than new_value ("..new_value..")!")
+ end
+ if new_max_value < 0 then
+ minetest.log("error", main_error_text.."new_max_value ("..new_max_value..") is smaller than 0!")
+ end
+ if new_value < 0 then
+ minetest.log("error", main_error_text.."new_value ("..new_value..") is smaller than 0!")
+ end
+
+ if hudtable.hudstate[name].hidden == false then
+ if max_changed then
+ if hudtable.hudstate[name].max == 0 then
+ player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0})
+ else
+ player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1})
+ end
+ end
+
+ if value_changed or max_changed then
+ local new_barlength = hb.value_to_barlength(new_value, new_max_value)
+ if new_barlength ~= hudtable.hudstate[name].barlength then
+ player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(new_value, new_max_value))
+ hudtable.hudstate[name].barlength = new_barlength
+ end
+
+ local new_text = string.format(hudtable.format_string, hudtable.label, new_value, new_max_value)
+ if new_text ~= hudtable.hudstate[name].text then
+ player:hud_change(hudtable.hudids[name].text, "text", new_text)
+ hudtable.hudstate[name].text = new_text
+ end
+ end
+ end
+end
+
+function hb.hide_hudbar(player, identifier)
+ local name = player:get_player_name()
+ local hudtable = hb.get_hudtable(identifier)
+ if(hudtable.hudstate[name].hidden == false) then
+ if hudtable.hudids[name].icon ~= nil then
+ player:hud_change(hudtable.hudids[name].icon, "scale", {x=0,y=0})
+ end
+ player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0})
+ player:hud_change(hudtable.hudids[name].bar, "number", 0)
+ player:hud_change(hudtable.hudids[name].text, "text", "")
+ hudtable.hudstate[name].hidden = true
+ end
+end
+
+function hb.unhide_hudbar(player, identifier)
+ local name = player:get_player_name()
+ local hudtable = hb.get_hudtable(identifier)
+ if(hudtable.hudstate[name].hidden) then
+ local name = player:get_player_name()
+ local value = hudtable.hudstate[name].value
+ local max = hudtable.hudstate[name].max
+ if hudtable.hudids[name].icon ~= nil then
+ player:hud_change(hudtable.hudids[name].icon, "scale", {x=1,y=1})
+ end
+ if hudtable.hudstate[name].max ~= 0 then
+ player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1})
+ end
+ player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max))
+ player:hud_change(hudtable.hudids[name].text, "text", tostring(string.format(hudtable.format_string, hudtable.label, value, max)))
+ hudtable.hudstate[name].hidden = false
+ end
+end
+
+function hb.get_hudbar_state(player, identifier)
+ local ref = hb.get_hudtable(identifier).hudstate[player:get_player_name()]
+ -- Do not forget to update this chunk of code in case the state changes
+ local copy = {
+ hidden = ref.hidden,
+ value = ref.value,
+ max = ref.max,
+ text = ref.text,
+ barlength = ref.barlength,
+ }
+ return copy
+end
+
+--register built-in HUD bars
+if minetest.setting_getbool("enable_damage") then
+ hb.register_hudbar("health", 0xFFFFFF, "Health", { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png" }, 20, 20, false)
+ hb.register_hudbar("breath", 0xFFFFFF, "Breath", { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png" }, 10, 10, true)
+end
+
+--load custom settings
+local set = io.open(minetest.get_modpath("hudbars").."/hudbars.conf", "r")
+if set then
+ dofile(minetest.get_modpath("hudbars").."/hudbars.conf")
+ set:close()
+end
+
+local function hide_builtin(player)
+ local flags = player:hud_get_flags()
+ flags.healthbar = false
+ flags.breathbar = false
+ player:hud_set_flags(flags)
+end
+
+
+local function custom_hud(player)
+ if minetest.setting_getbool("enable_damage") then
+ hb.init_hudbar(player, "health", player:get_hp())
+ local breath = player:get_breath()
+ local hide_breath
+ if breath == 11 then hide_breath = true else hide_breath = false end
+ hb.init_hudbar(player, "breath", math.min(breath, 10), nil, hide_breath)
+ end
+end
+
+
+-- update built-in HUD bars
+local function update_hud(player)
+ if minetest.setting_getbool("enable_damage") then
+ --air
+ local breath = player:get_breath()
+
+ if breath == 11 then
+ hb.hide_hudbar(player, "breath")
+ else
+ hb.unhide_hudbar(player, "breath")
+ hb.change_hudbar(player, "breath", math.min(breath, 10))
+ end
+
+ --health
+ hb.change_hudbar(player, "health", player:get_hp())
+ end
+end
+
+minetest.register_on_joinplayer(function(player)
+ hide_builtin(player)
+ custom_hud(player)
+ hb.players[player:get_player_name()] = player
+end)
+
+minetest.register_on_leaveplayer(function(player)
+ hb.players[player:get_player_name()] = nil
+end)
+
+local main_timer = 0
+local timer = 0
+minetest.register_globalstep(function(dtime)
+ main_timer = main_timer + dtime
+ timer = timer + dtime
+ if main_timer > hb.settings.tick or timer > 4 then
+ if main_timer > hb.settings.tick then main_timer = 0 end
+ for playername, player in pairs(hb.players) do
+ -- only proceed if damage is enabled
+ if minetest.setting_getbool("enable_damage") then
+ -- update all hud elements
+ update_hud(player)
+ end
+ end
+ end
+ if timer > 4 then timer = 0 end
+end)
diff --git a/mods/hudbars/textures/hudbars_bar_background.png b/mods/hudbars/textures/hudbars_bar_background.png
new file mode 100755
index 00000000..cbc6c3f5
Binary files /dev/null and b/mods/hudbars/textures/hudbars_bar_background.png differ
diff --git a/mods/hudbars/textures/hudbars_bar_breath.png b/mods/hudbars/textures/hudbars_bar_breath.png
new file mode 100755
index 00000000..7d19a575
Binary files /dev/null and b/mods/hudbars/textures/hudbars_bar_breath.png differ
diff --git a/mods/hudbars/textures/hudbars_bar_health.png b/mods/hudbars/textures/hudbars_bar_health.png
new file mode 100755
index 00000000..65309160
Binary files /dev/null and b/mods/hudbars/textures/hudbars_bar_health.png differ
diff --git a/mods/hud/textures/hud_heart_bg.png b/mods/hudbars/textures/hudbars_bgicon_health.png
similarity index 100%
rename from mods/hud/textures/hud_heart_bg.png
rename to mods/hudbars/textures/hudbars_bgicon_health.png
diff --git a/mods/hudbars/textures/hudbars_icon_breath.png b/mods/hudbars/textures/hudbars_icon_breath.png
new file mode 100755
index 00000000..f48aa35c
Binary files /dev/null and b/mods/hudbars/textures/hudbars_icon_breath.png differ
diff --git a/mods/hudbars/textures/hudbars_icon_health.png b/mods/hudbars/textures/hudbars_icon_health.png
new file mode 100755
index 00000000..941e9731
Binary files /dev/null and b/mods/hudbars/textures/hudbars_icon_health.png differ
diff --git a/mods/sprint/esprint.lua b/mods/sprint/esprint.lua
index 330ed593..67b371f4 100755
--- a/mods/sprint/esprint.lua
+++ b/mods/sprint/esprint.lua
@@ -17,7 +17,7 @@ minetest.register_on_joinplayer(function(player)
sprinting = false,
timeOut = 0,
stamina = SPRINT_STAMINA,
- epressed = false,
+ shouldSprint = false,
}
if SPRINT_HUDBARS_USED then
hb.init_hudbar(player, "sprint")
@@ -26,7 +26,7 @@ minetest.register_on_joinplayer(function(player)
hud_elem_type = "statbar",
position = {x=0.5,y=1},
size = {x=24, y=24},
- text = "stamina.png",
+ text = "sprint_stamina_icon.png",
number = 20,
alignment = {x=0,y=1},
offset = {x=-320, y=-186},
@@ -38,93 +38,71 @@ minetest.register_on_leaveplayer(function(player)
local playerName = player:get_player_name()
players[playerName] = nil
end)
-
-local gameTime = 0
minetest.register_globalstep(function(dtime)
--Get the gametime
- gameTime = gameTime + dtime
+ local gameTime = minetest.get_gametime()
--Loop through all connected players
for playerName,playerInfo in pairs(players) do
local player = minetest.get_player_by_name(playerName)
if player ~= nil then
- --no sprint if stand (if in keybinding setting menu, checkbox ["Use" = climb down] is checked , climb down use sprint)
- --Check if they are pressing the e key
- local pressed = player:get_player_control()["aux1"]
- if pressed and (player:get_player_control()["up"] or player:get_player_control()["down"] or player:get_player_control()["left"] or player:get_player_control()["right"]) then
- players[playerName]["epressed"] = true
+ --Check if the player should be sprinting
+ if player:get_player_control()["aux1"] and player:get_player_control()["up"] then
+ players[playerName]["shouldSprint"] = true
else
- players[playerName]["epressed"] = false
- end
- --Stop sprinting if the player is pressing the LMB or RMB
- if player:get_player_control()["LMB"] or player:get_player_control()["RMB"] then
- setSprinting(playerName, false)
- playerInfo["timeOut"] = 3
+ players[playerName]["shouldSprint"] = false
end
-
- if gameTime > 0.4 then
- gameTime = 0
- local pos = player:getpos()
- -- From playerplus :
- -- am I near a cactus?
- pos.y = pos.y + 0.1
- local near = minetest.find_node_near(pos, 1, "default:cactus")
- if near then
- if player:get_hp() > 0 then
- player:set_hp(player:get_hp()-1)
- end
+ gameTime = 0
+ local pos = player:getpos()
+ -- From playerplus :
+ -- am I near a cactus?
+ pos.y = pos.y + 0.1
+ local near = minetest.find_node_near(pos, 1, "default:cactus")
+ if near then
+ if player:get_hp() > 0 then
+ player:set_hp(player:get_hp()-1)
end
+ end
- --If the player is sprinting, create particles behind him/her
- if playerInfo["sprinting"] == true then
- local numParticles = math.random(1, 2)
- local playerPos = player:getpos()
- local playerNode = minetest.get_node({x=playerPos["x"], y=playerPos["y"]-1, z=playerPos["z"]})
- if playerNode["name"] ~= "air" then
- for i=1, numParticles, 1 do
- minetest.add_particle({
- pos = {x=playerPos["x"]+math.random(-1,1)*math.random()/2,y=playerPos["y"]+0.1,z=playerPos["z"]+math.random(-1,1)*math.random()/2},
- vel = {x=0, y=5, z=0},
- acc = {x=0, y=-13, z=0},
- expirationtime = math.random(),
- size = math.random()+0.5,
- collisiondetection = true,
- vertical = false,
- texture = "sprint_particle.png",
- })
- end
+ --If the player is sprinting, create particles behind him/her
+ if playerInfo["sprinting"] == true and gameTime % 0.1 == 0 then
+ local numParticles = math.random(1, 2)
+ local playerPos = player:getpos()
+ local playerNode = minetest.get_node({x=playerPos["x"], y=playerPos["y"]-1, z=playerPos["z"]})
+ if playerNode["name"] ~= "air" then
+ for i=1, numParticles, 1 do
+ minetest.add_particle({
+ pos = {x=playerPos["x"]+math.random(-1,1)*math.random()/2,y=playerPos["y"]+0.1,z=playerPos["z"]+math.random(-1,1)*math.random()/2},
+ vel = {x=0, y=5, z=0},
+ acc = {x=0, y=-13, z=0},
+ expirationtime = math.random(),
+ size = math.random()+0.5,
+ collisiondetection = true,
+ vertical = false,
+ texture = "sprint_particle.png",
+ })
end
end
end
--Adjust player states
- if players[playerName]["epressed"] == true and playerInfo["timeOut"] == 0 then --Stopped
+ if players[playerName]["shouldSprint"] == true then --Stopped
setSprinting(playerName, true)
- elseif players[playerName]["epressed"] == false then
+ elseif players[playerName]["shouldSprint"] == false then
setSprinting(playerName, false)
end
- if playerInfo["timeOut"] > 0 then
- playerInfo["timeOut"] = playerInfo["timeOut"] - dtime
- if playerInfo["timeOut"] < 0 then
- playerInfo["timeOut"] = 0
+ --Lower the player's stamina by dtime if he/she is sprinting and set his/her state to 0 if stamina is zero
+ if playerInfo["sprinting"] == true then
+ playerInfo["stamina"] = playerInfo["stamina"] - dtime
+ if playerInfo["stamina"] <= 0 then
+ playerInfo["stamina"] = 0
+ setSprinting(playerName, false)
end
- else
- --Lower the player's stamina by dtime if he/she is sprinting and set his/her state to 0 if stamina is zero
- if playerInfo["sprinting"] == true then
- playerInfo["stamina"] = playerInfo["stamina"] - dtime
- if playerInfo["stamina"] <= 0 then
- playerInfo["stamina"] = 0
- setSprinting(playerName, false)
- playerInfo["timeOut"] = 1
- minetest.sound_play("default_breathless",{object=player})
- end
- end
- end
--Increase player's stamina if he/she is not sprinting and his/her stamina is less than SPRINT_STAMINA
- if playerInfo["sprinting"] == false and playerInfo["stamina"] < SPRINT_STAMINA then
+ elseif playerInfo["sprinting"] == false and playerInfo["stamina"] < SPRINT_STAMINA then
playerInfo["stamina"] = playerInfo["stamina"] + dtime
end
-- Cap stamina at SPRINT_STAMINA
diff --git a/mods/sprint/init.lua b/mods/sprint/init.lua
index ee90f0c9..4d6a0545 100755
--- a/mods/sprint/init.lua
+++ b/mods/sprint/init.lua
@@ -16,7 +16,7 @@ SPRINT_TIMEOUT = 0.5 --Only used if SPRINT_METHOD = 0
if minetest.get_modpath("hudbars") ~= nil then
hb.register_hudbar("sprint", 0xFFFFFF, "Stamina",
- { bar = "sprint_stamina_bar.png", icon = "stamina.png" },
+ { bar = "sprint_stamina_bar.png", icon = "sprint_stamina_icon.png" },
SPRINT_STAMINA, SPRINT_STAMINA,
false, "%s: %.1f/%.1f")
SPRINT_HUDBARS_USED = true
diff --git a/mods/sprint/textures/sprint_stamina_icon.png b/mods/sprint/textures/sprint_stamina_icon.png
new file mode 100755
index 00000000..eb661eb1
Binary files /dev/null and b/mods/sprint/textures/sprint_stamina_icon.png differ
diff --git a/other_things/scripts/chmod_all.sh b/other_things/scripts/chmod_all.sh
index 682044e8..a95ad0f3 100755
--- a/other_things/scripts/chmod_all.sh
+++ b/other_things/scripts/chmod_all.sh
@@ -10,5 +10,6 @@ test -d "$mydir" && cd "$mydir/../../"
# CHMOD TIME!
chmod -R 755 .
+echo "All files have been chmod-ed to mode 755."
#EOF
diff --git a/other_things/scripts/rebase_active_branches.sh b/other_things/scripts/rebase_active_branches.sh
index c5ce643a..a920d9ec 100755
--- a/other_things/scripts/rebase_active_branches.sh
+++ b/other_things/scripts/rebase_active_branches.sh
@@ -14,3 +14,8 @@ for branch in $( git branch ); do
done
git checkout master
+
+echo "Branches rebased."
+
+
+#EOF