local groupdefs = { } local forced_nodes = { "default:cloud", "bones:bones", "farming:soil", "farming:soil_wet", "farming:desert_sand_soil", "farming:desert_sand_soil_wet", "fire:basic_flame", } local item_name_overrides = { ["screwdriver:screwdriver"] = "Screwdriver", ["fire:basic_flame"] = "Basic Flame", } local groups_to_string = function(grouptable) local gstring = "" if #grouptable == 0 then return nil end for id, value in pairs(grouptable) do if groupdefs[id] ~= nil then gstring = gstring .. groupdefs[id][value] .. "\\, " end end return gstring end local burntime_to_text = function(burntime) if burntime == nil then return "unknown" elseif burntime == 1 then return "1 second" else return string.format("%d seconds", burntime) end end doc.new_category("nodes", { name = "Blocks", build_formspec = function(data) if data then local longdesc = data.longdesc local usagehelp = data.usagehelp local formstring = "" if data.itemstring ~= "air" then formstring = formstring .. "item_image[11,0;1,1;"..data.itemstring.."]" end formstring = formstring .. "textarea[0.25,1;10,8;;" if longdesc ~= nil then formstring = formstring .. "Description: "..longdesc.."\n\n" end if usagehelp ~= nil then formstring = formstring .. "Usage help: "..usagehelp .. "\n\n" end formstring = formstring .. "Maximum stack size: "..data.def.stack_max.. "\n" local yesno = function(bool) if bool==true then return "Yes" elseif bool==false then return "No" else return "N/A" end end formstring = formstring .. "Collidable: "..yesno(data.def.walkable).. "\n" local liquid if data.def.liquidtype ~= "none" then liquid = true else liquid = false end formstring = formstring .. "Liquid: "..yesno(liquid).. "\n" if liquid then local range, renew, viscos if data.def.liquid_range then range = data.def.liquid_range else range = 8 end if data.def.liquid_renewable ~= nil then renew = data.def.liquid_renewable else renew = true end if data.def.liquid_viscosity then viscos = data.def.liquid_viscosity else viscosity = 0 end formstring = formstring .. "Liquid range: "..range.. "\n" formstring = formstring .. "Liquid viscosity: "..viscos.. "\n" formstring = formstring .. "Renewable liquid: "..yesno(renew).. "\n" end formstring = formstring .. "Pointable: "..yesno(data.def.pointable).. "\n" formstring = formstring .. "Transparent to sunlight: "..yesno(data.def.sunlight_propagates).. "\n" formstring = formstring .. "\n" -- Global factoids if data.def.buildable_to == true then formstring = formstring .. "This block will be replaced when building on it.\n" end if data.def.light_source == 15 then formstring = formstring .. "This block is an extremely bright light source. It glows as bright the sun.\n" elseif data.def.light_source == 14 then formstring = formstring .. "This block is a very bright light source.\n" elseif data.def.light_source > 12 then formstring = formstring .. "This block is a bright light source.\n" elseif data.def.light_source > 5 then formstring = formstring .. "This block is a light source of medium luminance.\n" elseif data.def.light_source > 1 then formstring = formstring .. "This block is a weak light source and glows faintly.\n" elseif data.def.light_source == 1 then formstring = formstring .. "This block glows faintly. It is barely noticable.\n" end if data.def.climbable == true then formstring = formstring .. "This block can be climbed.\n" end if data.def.damage_per_second > 1 then formstring = formstring .. "This block causes a damage of "..data.def.damage_per_second.." hit points per second.\n" elseif data.def.damage_per_second == 1 then formstring = formstring .. "This block causes a damage of "..data.def.damage_per_second.." hit point per second.\n" elseif data.def.damage_per_second < -1 then formstring = formstring .. "This block heals "..data.def.damage_per_second.." hit points per second.\n" elseif data.def.damage_per_second == -1 then formstring = formstring .. "This block heals "..data.def.damage_per_second.." hit point per second.\n" end if data.def.drowning > 1 then formstring = formstring .. "This block decreases your breath and causes a drowning damage of "..data.def.drowning.." hit points every 2 seconds.\n" elseif data.def.drowning == 1 then formstring = formstring .. "This block decreases your breath and causes a drowning damage of "..data.def.drowning.." hit point every 2 seconds.\n" end if data.def.drops ~= "" then if data.def.groups.immortal == 1 then formstring = formstring .. "This block can not be dug by ordinary digging tools.\n" end if data.def.groups.dig_immediate == 2 then formstring = formstring .. "This block can be dug by any tool in half a second.\n" elseif data.def.groups.dig_immediate == 3 then formstring = formstring .. "This block can be dug by any tool immediately.\n" end else if data.def.groups.immortal == 1 then formstring = formstring .. "This block can not be destroyed by ordinary digging tools.\n" end if data.def.groups.dig_immediate == 2 then formstring = formstring .. "This block can be destroyed by any tool in half a second.\n" elseif data.def.groups.dig_immediate == 3 then formstring = formstring .. "This block can be destroyed by any tool immediately.\n" end end if data.def.groups.falling_node == 1 then formstring = formstring .. "This block is affected by gravity and can fall.\n" end if data.def.groups.attached_node == 1 then formstring = formstring .. "This block must be attached to another block\\, otherwise it will drop as an item.\n" end if data.def.groups.disable_jump == 1 then formstring = formstring .. "You can not jump while standing on this block.\n" end local fdap = data.def.groups.fall_damage_add_percent if fdap ~= nil then if fdap > 0 then formstring = formstring .. "The fall damage on this block is increased by "..fdap.."%.\n" elseif fdap == -100 then formstring = formstring .. "This block negates all fall damage.\n" else formstring = formstring .. "The fall damage on this block is reduced by "..math.abs(fdap).."%.\n" end end local bouncy = data.def.groups.bouncy if bouncy ~= nil then formstring = formstring .. "This block will make you bounce off with an elasticity of "..bouncy.."%.\n" end formstring = formstring .. "\n" -- minetest_game factoids if data.def.groups.flammable == 1 then formstring = formstring .. "This block is flammable and burns slowly.\n" elseif data.def.groups.flammable == 2 then formstring = formstring .. "This block is flammable and burns at medium speed.\n" elseif data.def.groups.flammable == 3 then formstring = formstring .. "This block is highly flammable and burns very quickly.\n" elseif data.def.groups.flammable == 4 then formstring = formstring .. "This block is very easily set on fire and burns extremely quickly.\n" elseif data.def.groups.flammable ~= nil then formstring = formstring .. "This block is flammable.\n" end if data.def.groups.puts_out_fire ~= nil then formstring = formstring .. "This block will extinguish nearby fire.\n" end formstring = formstring .. "\n" if data.def.groups.oddly_breakable_by_hand ~= nil then formstring = formstring .. "This block can be dug by hand.\n" end if data.def.groups.cracky == 1 then formstring = formstring .. "This block is slightly cracky and can be dug by a strong pickaxe.\n" elseif data.def.groups.cracky == 2 then formstring = formstring .. "This block is cracky and can be dug by a pickaxe.\n" elseif data.def.groups.cracky == 3 then formstring = formstring .. "This block is very cracky and can be dug easily by a pickaxe.\n" elseif data.def.groups.cracky ~= nil then formstring = formstring .. "This block is cracky in some way.\n" end if data.def.groups.crumbly == 1 then formstring = formstring .. "This block is slightly crumbly and can be dug by a good shovel.\n" elseif data.def.groups.crumbly == 2 then formstring = formstring .. "This block is crumbly and can be dug by a shovel.\n" elseif data.def.groups.crumbly == 3 then formstring = formstring .. "This block is very crumbly and can be dug easily by a shovel.\n" elseif data.def.groups.crumbly ~= nil then formstring = formstring .. "This block is crumbly in some way.\n" end if data.def.groups.explody == 1 then formstring = formstring .. "This block is a bit prone to explosions.\n" elseif data.def.groups.explody == 2 then formstring = formstring .. "This block is prone to explosions.\n" elseif data.def.groups.explody == 3 then formstring = formstring .. "This block is very prone to explosions and easily affected by them.\n" elseif data.def.groups.explody ~= nil then formstring = formstring .. "This block is prone to explosions to some extent.\n" end if data.def.groups.snappy == 1 then formstring = formstring .. "This block is slightly snappy and can be dug by fine tools.\n" elseif data.def.groups.snappy == 2 then formstring = formstring .. "This block is snappy and can be dug by fine tools.\n" elseif data.def.groups.snappy == 3 then formstring = formstring .. "This block is highly snappy and can be dug easily by fine tools.\n" elseif data.def.groups.snappy ~= nil then formstring = formstring .. "This block is to some extent snappy.\n" end if data.def.groups.choppy == 1 then formstring = formstring .. "This block is a bit choppy and can be dug by axes and other tools which involve brute force.\n" elseif data.def.groups.choppy == 2 then formstring = formstring .. "This block is choppy and can be dug by axes and other tools which involve brute force.\n" elseif data.def.groups.choppy == 3 then formstring = formstring .. "This block is highly choppy and can easily be dug by axes and other tools which involve brute force.\n" elseif data.def.groups.choppy ~= nil then formstring = formstring .. "This block is choppy to some extent and can be dug by axes and similar tools.\n" end if data.def.groups.flora == 1 then formstring = formstring .. "This block is a living organism which likes to grow and spread on dirt with grass or dirt with dry grass when it is in light. On desert sand, it will wither and die and turn into a dry shrub.\n" end if data.def.groups.soil == 1 then formstring = formstring .. "This block is natural soil for wild plants such as grass, mushrooms or and supports their growth and spreading.\n" elseif data.def.groups.soil == 2 or data.def.groups.soil == 3 then formstring = formstring .. "This block serves as a soil for wild plants as well as plants grown from seeds. It supports their growth and spreading.\n" end if data.def.groups.fleshy ~= nil then formstring = formstring .. "This block is made out of flesh.\n" end formstring = formstring .. "\n" -- Show other “exposable” groups local gstring = groups_to_string(data.def.groups) if gstring ~= nil then formstring = formstring .. "This block is member of the following additional groups: "..groups_to_string(data.def.groups).."\n\n" end -- Show fuel recipe local result = minetest.get_craft_result({method = "fuel", items = {data.itemstring}}) if result ~= nil and result.time > 0 then formstring = formstring .. "This block can serve as a smelting fuel with a burning time of "..burntime_to_text(result.time)..".\n" end formstring = formstring .. ";]" return formstring else return "label[0,1;NO DATA AVALIABLE!" end end }) doc.new_category("tools", { name = "Tools and weapons", build_formspec = function(data) if data then local longdesc = data.longdesc or "N/A" local usagehelp = data.usagehelp or "N/A" local formstring = "" -- Hand if data.itemstring == "" then formstring = formstring .. "image[11,0;1,1;"..minetest.formspec_escape(minetest.registered_items[""].wield_image).."]" -- Other tools else formstring = formstring .. "item_image[11,0;1,1;"..data.itemstring.."]" end formstring = formstring .. "textarea[0.25,1;10,8;;Description: "..longdesc.."\n\n" formstring = formstring .. "Usage: "..usagehelp .. "\n\n" formstring = formstring .. "Maximum stack size: "..data.def.stack_max.. "\n" local yesno = function(bool) if bool==true then return "Yes" elseif bool==false then return "No" else return "N/A" end end local range = 4.0 if data.def.range ~= nil then range = data.def.range end formstring = formstring .. "Range: "..range.."\n" formstring = formstring .. "\n" if data.def.tool_capabilities ~= nil and data.def.tool_capabilities ~= {} then local punch = 1.0 if data.def.tool_capabilities.full_punch_interval ~= nil then punch = data.def.tool_capabilities.full_punch_interval end formstring = formstring .. "Full punch interval: "..punch.." s\n" local groupcaps = data.def.tool_capabilities.groupcaps if groupcaps ~= nil then formstring = formstring .. "Groupcaps:\n" for k,v in pairs(groupcaps) do formstring = formstring .. k .. ": blabla" .. "\n" end end local damage_groups = data.def.tool_capabilities.damage_groups if damage_groups ~= nil then formstring = formstring .. "Damage groups:\n" for k,v in pairs(damage_groups) do formstring = formstring .. k .. ": " .. v .. " HP\n" end end end formstring = formstring .. "\n" -- Global factoids if data.def.liquids_pointable == true then formstring = formstring .. "This item will point to liquids rather than ignore them.\n" end -- Show fuel recipe local result = minetest.get_craft_result({method = "fuel", items = {data.itemstring}}) if result ~= nil and result.time > 0 then formstring = formstring .. "This tool can serve as a smelting fuel with a burning time of "..burntime_to_text(result.time)..".\n" end formstring = formstring .. ";]" return formstring else return "label[0,1;NO DATA AVALIABLE!" end end }) doc.new_category("craftitems", { name = "Misc. items", build_formspec = function(data) if data then local longdesc = data.longdesc or "N/A" local usagehelp = data.usagehelp or "N/A" local formstring = "item_image[11,0;1,1;"..data.itemstring.."]" formstring = formstring .. "textarea[0.25,1;10,8;;Description: "..longdesc.."\n\n" formstring = formstring .. "Usage: "..usagehelp .. "\n\n" formstring = formstring .. "Maximum stack size: "..data.def.stack_max.. "\n" local yesno = function(bool) if bool==true then return "Yes" elseif bool==false then return "No" else return "N/A" end end local range = 4.0 if data.def.range ~= nil then range = data.def.range end formstring = formstring .. "Range: "..range.."\n" formstring = formstring .. "\n" if data.def.tool_capabilities ~= nil and data.def.tool_capabilities ~= {} then formstring = formstring .. "Full punch interval: "..data.def.tool_capabilities.full_punch_interval.." s\n" local groupcaps = data.def.tool_capabilities.groupcaps formstring = formstring .. "Groupcaps:\n" for k,v in pairs(groupcaps) do formstring = formstring .. k .. ": blabla" .. "\n" end formstring = formstring .. "Damage groups:\n" local damage_groups = data.def.tool_capabilities.damage_groups for k,v in pairs(damage_groups) do formstring = formstring .. k .. ": " .. v .. " HP\n" end end formstring = formstring .. "\n" -- Global factoids if data.def.liquids_pointable == true then formstring = formstring .. "This tool will point to liquids rather than ignore them.\n" end -- Show fuel recipe local result = minetest.get_craft_result({method = "fuel", items = {data.itemstring}}) if result ~= nil and result.time > 0 then formstring = formstring .. "This item can serve as a smelting fuel with a burning time of "..burntime_to_text(result.time)..".\n" end formstring = formstring .. ";]" return formstring else return "label[0,1;NO DATA AVALIABLE!" end end }) doc.sub.minetest_game = {} doc.sub.minetest_game.help = {} doc.sub.minetest_game.help.longdesc = {} doc.sub.minetest_game.help.usagehelp = {} -- Gather help texts function doc.sub.minetest_game.add_helptexts(longdesc, usagehelp) for k,v in pairs(longdesc) do doc.sub.minetest_game.help.longdesc[k] = v end for k,v in pairs(usagehelp) do doc.sub.minetest_game.help.usagehelp[k] = v end end dofile(minetest.get_modpath("doc_minetest_game") .. "/helptexts.lua") local function gather_descs() local help = doc.sub.minetest_game.help doc.new_entry("nodes", "air", { name = "Air", data = { itemstring = "air", longdesc = "A transparent block, basically empty space. It is usually left behind after digging something.", def = minetest.registered_nodes["air"], } }) for id, def in pairs(minetest.registered_nodes) do local name, ld, uh name = def.description local forced = false for i=1, #forced_nodes do if id == forced_nodes[i] then forced = true end end if item_name_overrides[id] ~= nil then name = item_name_overrides[id] else name = def.description end if not (name == nil or name == "" or def.groups.not_in_creative_inventory) or forced then if help.longdesc[id] ~= nil then ld = help.longdesc[id] end if help.usagehelp[id] ~= nil then uh = help.usagehelp[id] end local infotable = { name = name, data = { longdesc = ld, usagehelp = uh, itemstring = id, def = def, } } doc.new_entry("nodes", id, infotable) end end -- Add the hand doc.new_entry("tools", "", { name = "Hand", data = { longdesc = "You use your bare hand whenever you are not wielding any item. With your hand you can dig the weakest blocks and deal minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are usually better than the hand. When you are wielding an item which is not a mining tool or a weapon it will behave is it were the hand when you start mining or punching.", itemstring = "", def = minetest.registered_items[""] } }) for id, def in pairs(minetest.registered_tools) do local name, ld, uh if item_name_overrides[id] ~= nil then name = item_name_overrides[id] else name = def.description end if not (name == nil or name == "" or def.groups.not_in_creative_inventory) then if help.longdesc[id] ~= nil then ld = help.longdesc[id] end if help.usagehelp[id] ~= nil then uh = help.usagehelp[id] end local infotable = { name = name, data = { longdesc = ld, usagehelp = uh, itemstring = id, def = def, } } doc.new_entry("tools", id, infotable) end end for id, def in pairs(minetest.registered_craftitems) do local name, ld, uh name = def.description if not (name == nil or name == "" or def.groups.not_in_creative_inventory) then if help.longdesc[id] ~= nil then ld = help.longdesc[id] end if help.usagehelp[id] ~= nil then uh = help.usagehelp[id] end local infotable = { name = name, data = { longdesc = ld, usagehelp = uh, itemstring = id, def = def, } } doc.new_entry("craftitems", id, infotable) end end end minetest.after(0, gather_descs)