Rename mod: walls → hades_walls
[minetest_hades/hades_revisited.git] / mods / hades_tt / init.lua
blob5190c6354eab0fc3eff517b17e7af23f76a47013
1 local S = minetest.get_translator("hades_tt")
3 local function get_min_digtime(caps)
4 local mintime
5 local unique = true
6 local maxlevel = caps.maxlevel
7 if not maxlevel then
8 maxlevel = 1
9 end
10 if maxlevel > 1 then
11 unique = false
12 end
13 if caps.times then
14 for r=1,3 do
15 local time = caps.times[r]
16 if time and maxlevel > 1 then
17 time = time / maxlevel
18 end
19 if time and ((not mintime) or (time < mintime)) then
20 if mintime and (time < mintime) then
21 unique = false
22 end
23 mintime = time
24 end
25 end
26 end
27 return mintime, unique
28 end
30 local function newline(str)
31 if str ~= "" then
32 str = str .. "\n"
33 end
34 return str
35 end
37 -- Tool information (digging times, weapon stats)
38 tt.register_snippet(function(itemstring)
39 local def = minetest.registered_items[itemstring]
40 local desc = ""
41 if def.tool_capabilities then
42 -- Weapon stats
43 if def.tool_capabilities.damage_groups then
44 for group, damage in pairs(def.tool_capabilities.damage_groups) do
45 local msg
46 if group == "fleshy" then
47 if damage >= 0 then
48 msg = S("Damage: @1", damage)
49 else
50 msg = S("Healing: @1", math.abs(damage))
51 end
52 else
53 if damage >= 0 then
54 msg = S("Damage (@1): @2", group, damage)
55 else
56 msg = S("Healing (@1): @2", group, math.abs(damage))
57 end
58 end
59 desc = newline(desc)
60 desc = desc .. msg
61 end
62 local full_punch_interval = def.tool_capabilities.full_punch_interval
63 if not full_punch_interval then
64 full_punch_interval = 1
65 end
66 desc = newline(desc)
67 desc = desc .. S("Full punch interval: @1s", string.format("%.2f", full_punch_interval))
68 end
69 end
70 if desc == "" then
71 desc = nil
72 end
73 return desc
74 end)
76 -- Node info
77 tt.register_snippet(function(itemstring)
78 local def = minetest.registered_items[itemstring]
79 local desc = ""
81 -- Health-related node facts
82 if def.damage_per_second then
83 if def.damage_per_second > 0 then
84 desc = newline(desc)
85 desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Contact damage: @1 per second", def.damage_per_second))
86 elseif def.damage_per_second < 0 then
87 desc = newline(desc)
88 desc = desc .. minetest.colorize(tt.COLOR_GOOD, S("Contact healing: @1 per second", math.abs(def.damage_per_second)))
89 end
90 end
91 if def.drowning and def.drowning ~= 0 then
92 desc = newline(desc)
93 desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Drowning damage: @1", def.drowning))
94 end
95 local tmp = minetest.get_item_group(itemstring, "fall_damage_add_percent")
96 if tmp > 0 then
97 desc = newline(desc)
98 desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Fall damage: +@1%", tmp))
99 elseif tmp == -100 then
100 desc = newline(desc)
101 desc = desc .. minetest.colorize(tt.COLOR_GOOD, S("No fall damage"))
102 elseif tmp < 0 then
103 desc = newline(desc)
104 desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Fall damage: @1%", tmp))
107 -- Movement-related node facts
108 if minetest.get_item_group(itemstring, "disable_jump") == 1 and not def.climbable then
109 if def.liquidtype == "none" then
110 desc = newline(desc)
111 desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No jumping"))
112 elseif minetest.get_item_group(itemstring, "fake_liquid") == 0 then
113 desc = newline(desc)
114 desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No swimming upwards"))
115 else
116 desc = newline(desc)
117 desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No rising"))
120 if def.climbable then
121 if minetest.get_item_group(itemstring, "disable_jump") == 1 then
122 desc = newline(desc)
123 desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Climbable (only downwards)"))
124 else
125 desc = newline(desc)
126 desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Climbable"))
129 if minetest.get_item_group(itemstring, "slippery") >= 1 then
130 desc = newline(desc)
131 desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Slippery"))
133 local tmp = minetest.get_item_group(itemstring, "bouncy")
134 if tmp >= 1 then
135 desc = newline(desc)
136 desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Bouncy (@1%)", tmp))
139 -- Node appearance
140 tmp = def.light_source
141 if tmp and tmp >= 1 then
142 desc = newline(desc)
143 desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Luminance: @1", tmp))
147 if desc == "" then
148 desc = nil
150 return desc, false
151 end)
153 -- Food stats
154 tt.register_snippet(function(itemstring)
155 local is_food = minetest.get_item_group(itemstring, "food") ~= 0
156 local sate = minetest.get_item_group(itemstring, "eatable")
157 if is_food and sate >= 0 then
158 return S("Food points: +@1", sate)
160 end)
162 -- Other groups
163 tt.register_snippet(function(itemstring)
164 local flora = minetest.get_item_group(itemstring, "flora")
165 if flora ~= 0 then
166 return S("Spreads on Dirt with Grass")
168 end)