diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 78eb47b60e..27637e1dbf 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -14,6 +14,7 @@ mcl_potions.DURATION_2 = mcl_potions.DURATION / mcl_potions.II_FACTOR mcl_potions.INV_FACTOR = 0.50 mcl_potions.SPLASH_FACTOR = 0.75 +mcl_potions.LINGERING_FACTOR = 0.25 local modpath = minetest.get_modpath("mcl_potions") diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua index ae391e0804..2affead993 100644 --- a/mods/ITEMS/mcl_potions/lingering.lua +++ b/mods/ITEMS/mcl_potions/lingering.lua @@ -66,7 +66,7 @@ end) -local function register_lingering(name, descr, color, def) +function mcl_potions.register_lingering(name, descr, color, def) local id = "mcl_potions:"..name.."_lingering" minetest.register_craftitem(id, { @@ -134,186 +134,32 @@ local function register_lingering(name, descr, color, def) }) end -local function time_string(dur) - return math.floor(dur/60)..string.format(":%02d",math.floor(dur % 60)) -end - -register_lingering("water", S("Lingering Water Bottle"), "#0000FF", { - potion_fun = function(player) end, - tt = S("No effect") -}) - -register_lingering("river_water", S("Lingering River Water Bottle"), "#0044FF", { - potion_fun = function(player) end, - tt = S("No effect") -}) - -register_lingering("awkward", S("Lingering Awkward Potion"), "#0000FF", { - potion_fun = function(player) end, - tt = S("No effect") -}) - -register_lingering("mundane", S("Lingering Mundane Potion"), "#0000FF", { - potion_fun = function(player) end, - tt = S("No effect") -}) - -register_lingering("thick", S("Lingering Thick Potion"), "#0000FF", { - potion_fun = function(player) end, - tt = S("No effect") -}) - -register_lingering("healing", S("Lingering Healing Potion"), "#AA0000", { - potion_fun = function(player) mcl_potions.healing_func(player, 2) end, - tt = S("+2 HP") -}) - -register_lingering("healing_2", S("Lingering Healing Potion II"), "#DD0000", { - potion_fun = function(player) mcl_potions.healing_func(player, 4) end, - tt = S("+4 HP") -}) - -register_lingering("harming", S("Lingering Harming Potion"), "#660099", { - potion_fun = function(player) mcl_potions.healing_func(player, -3) end, - tt = S("-3 HP") -}) - -register_lingering("harming_2", S("Lingering Harming Potion II"), "#330066", { - potion_fun = function(player) mcl_potions.healing_func(player, -6) end, - tt = S("-6 HP") -}) - -register_lingering("leaping", S("Lingering Leaping Potion"), "#00CC33", { - potion_fun = function(player) mcl_potions.leaping_func(player, 1.2, mcl_potions.DURATION*0.25) end, - tt = S("120% | @1", time_string(mcl_potions.DURATION*0.25)) -}) - -register_lingering("leaping_2", S("Lingering Leaping Potion II"), "#00EE33", { - potion_fun = function(player) mcl_potions.leaping_func(player, 1.4, mcl_potions.DURATION_2*0.25) end, - tt = S("140% | @1", time_string(mcl_potions.DURATION_2*0.25)) -}) - -register_lingering("leaping_plus", S("Lingering Leaping Potion +"), "#00DD33", { - potion_fun = function(player) mcl_potions.leaping_func(player, 1.2, mcl_potions.DURATION_PLUS*0.25) end, - tt = S("120% | @1", time_string(mcl_potions.DURATION_PLUS*0.25)) -}) - -register_lingering("swiftness", S("Lingering Swiftness Potion"), "#009999", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 1.2, mcl_potions.DURATION*0.25) end, - tt = S("120% | @1", time_string(mcl_potions.DURATION*0.25)) -}) - -register_lingering("swiftness_2", S("Lingering Swiftness Potion II"), "#00BBBB", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 1.4, mcl_potions.DURATION_2*0.25) end, - tt = S("140% | @1", time_string(mcl_potions.DURATION_2*0.25)) -}) - -register_lingering("swiftness_plus", S("Lingering Swiftness Potion +"), "#00BBBB", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 1.2, mcl_potions.DURATION_PLUS*0.25) end, - tt = S("120% | @1", time_string(mcl_potions.DURATION_PLUS*0.25)) -}) - -register_lingering("slowness", S("Lingering Slowness Potion"), "#000080", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 0.85, mcl_potions.DURATION*mcl_potions.INV_FACTOR*0.25) end, - tt = S("85% | @1", time_string(mcl_potions.DURATION*mcl_potions.INV_FACTOR*0.25)) -}) - -register_lingering("slowness_plus", S("Lingering Slowness Potion +"), "#000066", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 0.85, mcl_potions.DURATION_PLUS*mcl_potions.INV_FACTOR*0.25) end, - tt = S("85% | @1", time_string(mcl_potions.DURATION_PLUS*mcl_potions.INV_FACTOR*0.25)) -}) - -register_lingering("slowness_2", S("Lingering Slowness Potion IV"), "#000066", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 0.4, 20*0.25) end, - tt = S("40% | @1", time_string(20*0.25)) -}) - -register_lingering("poison", S("Lingering Poison Potion"), "#335544", { - potion_fun = function(player) mcl_potions.poison_func(player, 2.5, 45*0.25) end, - tt = S("-1 HP / 2.5s | @1", time_string(45*0.25)) -}) - -register_lingering("poison_2", S("Lingering Poison Potion II"), "#446655", { - potion_fun = function(player) mcl_potions.poison_func(player, 1.2, 21*0.25) end, - tt = S("-1 HP / 1.2s | @1", time_string(21*0.25)) -}) - -register_lingering("poison_plus", S("Lingering Poison Potion +"), "#557766", { - potion_fun = function(player) mcl_potions.poison_func(player, 2.5, 90*0.25) end, - tt = S("-1 HP / 2.5s | @1", time_string(90*0.25)) -}) - -register_lingering("regeneration", S("Lingering Regeneration Potion"), "#A52BB2", { - potion_fun = function(player) mcl_potions.regeneration_func(player, 2.5, 45*0.25) end, - tt = S("+1 HP / 2.5s | @1", time_string(45*0.25)) -}) - -register_lingering("regeneration_2", S("Lingering Regeneration Potion II"), "#B52CC2", { - potion_fun = function(player) mcl_potions.regeneration_func(player, 1.2, 22*0.25) end, - tt = S("+1 HP / 1.2s | @1", time_string(22*0.25)) -}) - -register_lingering("regeneration_plus", S("Lingering Regeneration Potion +"), "#C53DD3", { - potion_fun = function(player) mcl_potions.regeneration_func(player, 2.5, 90*0.25) end, - tt = S("+1 HP / 2.5s | @1", time_string(90*0.25)) -}) - -register_lingering("invisibility", S("Lingering Invisibility Potion"), "#B0B0B0", { - potion_fun = function(player) mcl_potions.invisiblility_func(player, nil, mcl_potions.DURATION*0.25) end, - tt = time_string(mcl_potions.DURATION*0.25) -}) - -register_lingering("invisibility_plus", S("Lingering Invisibility Potion +"), "#A0A0A0", { - potion_fun = function(player) mcl_potions.invisiblility_func(player, nil, mcl_potions.DURATION_PLUS*0.25) end, - tt = time_string(mcl_potions.DURATION_PLUS*0.25) -}) - --- register_lingering("weakness", S("Lingering Weakness Potion"), "#6600AA", { --- potion_fun = function(player) mcl_potions.weakness_func(player, -4, mcl_potions.DURATION*mcl_potions.INV_FACTOR*0.25) end, --- -- TODO: Fix tooltip --- tt = time_string(mcl_potions.DURATION*mcl_potions.INV_FACTOR*0.25) --- }) --- --- register_lingering("weakness_plus", S("Lingering Weakness Potion +"), "#7700BB", { --- potion_fun = function(player) mcl_potions.weakness_func(player, -4, mcl_potions.DURATION_PLUS*mcl_potions.INV_FACTOR*0.25) end, --- -- TODO: Fix tooltip --- tt = time_string(mcl_potions.DURATION*mcl_potions.INV_FACTOR*0.25) --- }) - -register_lingering("fire_resistance", S("Lingering Fire Resistance Potion"), "#D0A040", { - potion_fun = function(player) mcl_potions.fire_resistance_func(player, nil, mcl_potions.DURATION*0.25) end, - tt = time_string(mcl_potions.DURATION*0.25) -}) - -register_lingering("fire_resistance_plus", S("Lingering Fire Resistance Potion +"), "#E0B050", { - potion_fun = function(player) mcl_potions.fire_resistance_func(player, nil, mcl_potions.DURATION_PLUS*0.25) end, - tt = time_string(mcl_potions.DURATION_PLUS*0.25) -}) - --- register_lingering("strength", S("Lingering Strength Potion"), "#D444D4", { --- potion_fun = function(player) mcl_potions.strength_func(player, 3, mcl_potions.DURATION*0.25) end, --- -- TODO: Fix tooltip --- tt = time_string(mcl_potions.DURATION*0.25) --- }) --- --- register_lingering("strength_2", S("Lingering Strength Potion II"), "#D444F4", { --- potion_fun = function(player) mcl_potions.strength_func(player, 6, smcl_potions.DURATION_2*0.25) end, --- -- TODO: Fix tooltip --- tt = time_string(mcl_potions.DURATION_2*0.25) --- }) --- --- register_lingering("strength_plus", S("Lingering Strength Potion +"), "#D444E4", { --- potion_fun = function(player) mcl_potions.strength_func(player, 3, mcl_potions.DURATION_PLUS*0.25) end, --- -- TODO: Fix tooltip --- tt = time_string(mcl_potions.DURATION_PLUS*0.25) --- }) - -register_lingering("night_vision", S("Lingering Night Vision Potion"), "#1010AA", { - potion_fun = function(player) mcl_potions.night_vision_func(player, nil, mcl_potions.DURATION*0.25) end, - tt = time_string(mcl_potions.DURATION*0.25) -}) - -register_lingering("night_vision_plus", S("Lingering Night Vision Potion +"), "#2020BA", { - potion_fun = function(player) mcl_potions.night_vision_func(player, nil, mcl_potions.DURATION_PLUS*0.25) end, - tt = time_string(mcl_potions.DURATION_PLUS*0.25) -}) +-- -- register_lingering("weakness", S("Lingering Weakness Potion"), "#6600AA", { +-- -- potion_fun = function(player) mcl_potions.weakness_func(player, -4, mcl_potions.DURATION*mcl_potions.INV_FACTOR*0.25) end, +-- -- -- TODO: Fix tooltip +-- -- tt = time_string(mcl_potions.DURATION*mcl_potions.INV_FACTOR*0.25) +-- -- }) +-- -- +-- -- register_lingering("weakness_plus", S("Lingering Weakness Potion +"), "#7700BB", { +-- -- potion_fun = function(player) mcl_potions.weakness_func(player, -4, mcl_potions.DURATION_PLUS*mcl_potions.INV_FACTOR*0.25) end, +-- -- -- TODO: Fix tooltip +-- -- tt = time_string(mcl_potions.DURATION*mcl_potions.INV_FACTOR*0.25) +-- -- }) +-- -- +-- -- register_lingering("strength", S("Lingering Strength Potion"), "#D444D4", { +-- -- potion_fun = function(player) mcl_potions.strength_func(player, 3, mcl_potions.DURATION*0.25) end, +-- -- -- TODO: Fix tooltip +-- -- tt = time_string(mcl_potions.DURATION*0.25) +-- -- }) +-- -- +-- -- register_lingering("strength_2", S("Lingering Strength Potion II"), "#D444F4", { +-- -- potion_fun = function(player) mcl_potions.strength_func(player, 6, smcl_potions.DURATION_2*0.25) end, +-- -- -- TODO: Fix tooltip +-- -- tt = time_string(mcl_potions.DURATION_2*0.25) +-- -- }) +-- -- +-- -- register_lingering("strength_plus", S("Lingering Strength Potion +"), "#D444E4", { +-- -- potion_fun = function(player) mcl_potions.strength_func(player, 3, mcl_potions.DURATION_PLUS*0.25) end, +-- -- -- TODO: Fix tooltip +-- -- tt = time_string(mcl_potions.DURATION_PLUS*0.25) +-- -- }) diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index b597fde32b..dbe9f57f95 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -40,20 +40,30 @@ local function register_potion(def) if def.name == "poison" or def.name == "regeneration" then _tt = "1/2 Heart/"..effect.."sec | "..time_string(dur) end - else + elseif def.name == "healing" or def.name == "harming" then + _tt = (effect / 2).." Hearts" + else _tt = tt or time_string(dur) or S("No effect") end return _tt end local function get_splash_fun(effect, sp_dur) - if def.dur then + if def.is_dur then return function(player, redx) def.on_use(player, effect, sp_dur*redx) end else return function(player, redx) def.on_use(player, effect*redx, sp_dur) end end end + local function get_lingering_fun(effect, sp_dur) + if def.is_dur then + return function(player, redx) def.on_use(player, effect, sp_dur) end + else + return function(player, redx) def.on_use(player, effect*0.5, sp_dur) end + end + end + minetest.register_craftitem("mcl_potions:"..def.name, { description = S(def.description), _tt_help = get_tt(def._tt, def.effect, dur), @@ -67,18 +77,23 @@ local function register_potion(def) on_secondary_use = on_use, }) - -- Register Splash + -- Register Splash and Lingering local splash_dur = dur * mcl_potions.SPLASH_FACTOR + local ling_dur = dur * mcl_potions.LINGERING_FACTOR local splash_def = { tt = get_tt(def._tt, def.effect, splash_dur), potion_fun = get_splash_fun(def.effect, splash_dur), } + local ling_def = { + tt = get_tt(def._tt, def.effect, ling_dur), + potion_fun = get_lingering_fun(def.effect, ling_dur), + } if def.color then mcl_potions.register_splash(def.name, S("Splash "..def.description), def.color, splash_def) + mcl_potions.register_lingering(def.name, S("Lingering "..def.description), def.color, ling_def) end - if def.is_II then local desc_mod = " II" @@ -121,15 +136,21 @@ local function register_potion(def) on_secondary_use = on_use, }) - -- Register Splash + -- Register Splash and Lingering local splash_dur_2 = dur_2 * mcl_potions.SPLASH_FACTOR + local ling_dur_2 = dur_2 * mcl_potions.LINGERING_FACTOR local splash_def_2 = { tt = get_tt(def._tt_2, effect_II, splash_dur_2), potion_fun = get_splash_fun(effect_II, splash_dur_2), } + local ling_def_2 = { + tt = get_tt(def._tt_2, effect_II, ling_dur_2), + potion_fun = get_lingering_fun(effect_II, ling_dur_2), + } if def.color then mcl_potions.register_splash(def.name.."_2", S("Splash "..def.description..desc_mod), def.color, splash_def_2) + mcl_potions.register_lingering(def.name.."_2", S("Lingering "..def.description..desc_mod), def.color, ling_def_2) end end @@ -163,13 +184,19 @@ local function register_potion(def) -- Register Splash local splash_dur_pl = dur_pl * mcl_potions.SPLASH_FACTOR + local ling_dur_pl = dur_pl * mcl_potions.LINGERING_FACTOR local splash_def_pl = { tt = get_tt(def._tt_plus, def.effect, splash_dur_pl), potion_fun = get_splash_fun(def.effect, splash_dur_pl), } + local ling_def_pl = { + tt = get_tt(def._tt_plus, def.effect, ling_dur_pl), + potion_fun = get_lingering_fun(def.effect, ling_dur_pl), + } if def.color then mcl_potions.register_splash(def.name.."_plus", S("Splash "..def.description.." +"), def.color, splash_def_pl) + mcl_potions.register_lingering(def.name.."_plus", S("Lingering "..def.description.." +"), def.color, ling_def_pl) end end @@ -225,10 +252,8 @@ local healing_def = { _longdesc = S("Drink to heal yourself"), color = "#CC0000", effect = 4, - dur = nil, on_use = mcl_potions.healing_func, is_II = true, - effect_sq = false, } @@ -240,9 +265,9 @@ local harming_def = { _longdesc = S("Drink to heal yourself"), color = "#660099", effect = -6, - dur = nil, on_use = mcl_potions.healing_func, is_II = true, + is_inv = true, } local night_vision_def = {