Initial commit (import from tt)

master
Wuzzy 2020-09-10 15:22:48 +02:00
commit 4eb6411204
5 changed files with 266 additions and 0 deletions

19
README.md Normal file
View File

@ -0,0 +1,19 @@
This mod is for the Extended Tooltips [tt] mod to extend item tooltips with the following
basic info:
* Tool digging times
* Weapon stats
* Food stats
* Node damage
* Node light level
* Node info: climbable, slippery, bouncy, jumping restriction
This mod assumes that the default gameplay behavior of Minetest is used.
This mod introduces support for new item definition fields:
* `_tt_food`: If `true`, item is a food item that can be consumed by the player
* `_tt_food_hp`: Health increase (in HP) for player when consuming food item
Because there is no standard way in Minetest (yet) to mark an item as food, these fields
are required for food items to be recognized as such.

190
init.lua Normal file
View File

@ -0,0 +1,190 @@
local S = minetest.get_translator("tt_base")
local function get_min_digtime(caps)
local mintime
local unique = true
local maxlevel = caps.maxlevel
if not maxlevel then
maxlevel = 1
end
if maxlevel > 1 then
unique = false
end
if caps.times then
for r=1,3 do
local time = caps.times[r]
if time and maxlevel > 1 then
time = time / maxlevel
end
if time and ((not mintime) or (time < mintime)) then
if mintime and (time < mintime) then
unique = false
end
mintime = time
end
end
end
return mintime, unique
end
local function newline(str)
if str ~= "" then
str = str .. "\n"
end
return str
end
-- Tool information (digging times, weapon stats)
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local desc = ""
if def.tool_capabilities then
-- Digging times
local digs = ""
local d
if def.tool_capabilities.groupcaps then
for group, caps in pairs(def.tool_capabilities.groupcaps) do
local mintime, unique_mintime
if caps.times then
mintime, unique_mintime = get_min_digtime(caps)
if mintime and (mintime > 0 or (not unique_mintime)) then
d = S("Digs @1 blocks", group) .. "\n"
d = d .. S("Minimum dig time: @1s", string.format("%.2f", mintime))
digs = newline(digs)
digs = digs .. d
elseif mintime and mintime == 0 then
d = S("Digs @1 blocks instantly", group)
digs = newline(digs)
digs = digs .. d
end
end
end
if digs ~= "" then
desc = desc .. digs
end
end
-- Weapon stats
if def.tool_capabilities.damage_groups then
for group, damage in pairs(def.tool_capabilities.damage_groups) do
local msg
if group == "fleshy" then
if damage >= 0 then
msg = S("Damage: @1", damage)
else
msg = S("Healing: @1", math.abs(damage))
end
else
if damage >= 0 then
msg = S("Damage (@1): @2", group, damage)
else
msg = S("Healing (@1): @2", group, math.abs(damage))
end
end
desc = newline(desc)
desc = desc .. msg
end
local full_punch_interval = def.tool_capabilities.full_punch_interval
if not full_punch_interval then
full_punch_interval = 1
end
desc = newline(desc)
desc = desc .. S("Full punch interval: @1s", string.format("%.2f", full_punch_interval))
end
end
if desc == "" then
desc = nil
end
return desc
end)
-- Food
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local desc
if def._tt_food then
desc = S("Food item")
if def._tt_food_hp then
local msg = S("+@1 food points", def._tt_food_hp)
desc = desc .. "\n" .. msg
end
end
return desc
end)
-- Node info
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local desc = ""
-- Health-related node facts
if def.damage_per_second then
if def.damage_per_second > 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Contact damage: @1 per second", def.damage_per_second))
elseif def.damage_per_second < 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_GOOD, S("Contact healing: @1 per second", math.abs(def.damage_per_second)))
end
end
if def.drowning and def.drowning ~= 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Drowning damage: @1", def.drowning))
end
local tmp = minetest.get_item_group(itemstring, "fall_damage_add_percent")
if tmp > 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Fall damage: +@1%", tmp))
elseif tmp == -100 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_GOOD, S("No fall damage"))
elseif tmp < 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Fall damage: @1%", tmp))
end
-- Movement-related node facts
if minetest.get_item_group(itemstring, "disable_jump") == 1 and not def.climbable then
if def.liquidtype == "none" then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No jumping"))
elseif minetest.get_item_group(itemstring, "fake_liquid") == 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No swimming upwards"))
else
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No rising"))
end
end
if def.climbable then
if minetest.get_item_group(itemstring, "disable_jump") == 1 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Climbable (only downwards)"))
else
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Climbable"))
end
end
if minetest.get_item_group(itemstring, "slippery") >= 1 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Slippery"))
end
local tmp = minetest.get_item_group(itemstring, "bouncy")
if tmp >= 1 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Bouncy (@1%)", tmp))
end
-- Node appearance
tmp = def.light_source
if tmp and tmp >= 1 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Luminance: @1", tmp))
end
if desc == "" then
desc = nil
end
return desc, false
end)

27
locale/template.txt Normal file
View File

@ -0,0 +1,27 @@
# textdomain:tt
Damage: @1=
Damage (@1): @2=
Healing: @1=
Healing (@1): @2=
Full punch interval: @1s=
Food item=
+@1 satiation=
@1 satiation=
+@1 food points=
Contact damage: @1 per second=
Contact healing: @1 per second=
Drowning damage: @1=
Bouncy (@1%)=
Luminance: @1=
Slippery=
Climbable=
Climbable (only downwards)=
No jumping=
No swimming upwards=
No rising=
Fall damage: @1%=
Fall damage: +@1%=
No fall damage=
Digs @1 blocks=
Digs @1 blocks instantly=
Minimum dig time: @1s=

27
locale/tt_base.de.tr Normal file
View File

@ -0,0 +1,27 @@
# textdomain:tt_base
Damage: @1=Schaden: @1
Damage (@1): @2=Schaden (@1): @2
Healing: @1=Heilung: @1
Healing (@1): @2=Heilung (@1): @2
Full punch interval: @1s=Zeit zum Ausholen: @1s
Food item=Lebensmittel
+@1 satiation=+@1 Sättigung
@1 satiation=@1 Sättigung
+@1 food points=+@1 Nahrungspunkte
Contact damage: @1 per second=Kontaktschaden: @1 pro Sekunde
Contact healing: @1 per second=Kontaktheilung: @1 pro Sekunde
Drowning damage: @1=Ertrinkensschaden: @1
Bouncy (@1%)=Sprunghaft (@1%)
Luminance: @1=Lichtstärke: @1
Slippery=Rutschig
Climbable=Erkletterbar
Climbable (only downwards)=Erkletterbar (nur nach unten)
No jumping=Kein Springen
No swimming upwards=Kein nach oben schwimmen
No rising=Kein Aufsteigen
Fall damage: @1%=Fallschaden: @1%
Fall damage: +@1%=Fallschaden: +@1%
No fall damage=Kein Fallschaden
Digs @1 blocks=Gräbt „@1“-Blöcke
Digs @1 blocks instantly=Gräbt „@1“-Blöcke sofort
Minimum dig time: @1s=Minimale Grabezeit: @1s

3
mod.conf Normal file
View File

@ -0,0 +1,3 @@
name = tt_base
description = Adds generic tooltip extensions to items
depends = tt