387 lines
15 KiB
Lua
387 lines
15 KiB
Lua
local cube = minetest.inventorycube
|
|
local S = hell.get_translator
|
|
|
|
-- the content of the guide
|
|
local guide_infos = {
|
|
{
|
|
description = "Mushrooms",
|
|
{"text", "Hell mushrooms can be found on the hell's ground and on hellrack soil,"},
|
|
{"text", "it can be dug by hand."},
|
|
{"image", {1, 1, "riesenpilz_nether_shroom_side.png"}},
|
|
{"y", 0.5},
|
|
{"text", "If you drop it without holding the fast key, you can split it into its stem "},
|
|
{"text", "and head:"},
|
|
{"image", {1, 1, "hell_shroom_top.png", 1}},
|
|
{"image", {1, 1, "hell_shroom_stem.png"}},
|
|
{"y", 0.5},
|
|
{"text", "You can get more mushrooms by using a hellrack soil:"},
|
|
{"text", "1. search a dark place and, if necessary, place hellrack with air about it,"},
|
|
{"text", "2. right click with cooked blood onto the hellrack to make it soiled,"},
|
|
{"text", "3. right click onto the hellrack soil with a hell mushroom head to add some "},
|
|
{"text", "spores,"},
|
|
{"text", "4. dig the mushroom which grew after some time to make place for another one."},
|
|
{"image", {1, 1, "riesenpilz_nether_shroom_side.png", 5.4}},
|
|
{"y", 1},
|
|
{"image", {1, 1, "hell_hellrack.png^hell_hellrack_soil.png", 1.8}},
|
|
{"image", {1, 1, "hell_hotbed.png", 1.3, -0.832}},
|
|
{"image", {1, 1, "hell_hellrack.png^hell_hellrack_soil.png", 3.6}},
|
|
{"image", {1, 1, "hell_shroom_top.png", 3.1, -0.664}},
|
|
{"image", {1, 1, "hell_hellrack.png^hell_hellrack_soil.png", 5.4}},
|
|
{"image", {1, 1, "hell_hellrack.png"}},
|
|
{"y", 0.5},
|
|
},
|
|
{
|
|
description = "Tools",
|
|
{"text", "You can craft 5 kinds of tools in the hell, which (except the mushroom pick) "},
|
|
{"text", "require sticks to be crafted:"},
|
|
{"image", {1, 1, "hell_pick_mushroom.png"}},
|
|
{"y", 0.1},
|
|
{"text", "strength : 1"},
|
|
{"text", "The mushroom pick needs mushroom stems and heads to be crafted."},
|
|
{"image", {1, 1, "hell_pick_wood.png"}},
|
|
{"y", 0.1},
|
|
{"text", "strength : 2"},
|
|
{"text", "The hell wood pick can be crafted with cooked hell blood wood."},
|
|
{"image", {1, 1, "hell_axe_hellrack.png", 1.5}},
|
|
{"image", {1, 1, "hell_shovel_hellrack.png", 3}},
|
|
{"image", {1, 1, "hell_sword_hellrack.png", 4.5}},
|
|
{"image", {1, 1, "hell_pick_hellrack.png"}},
|
|
{"y", 0.1},
|
|
{"text", "strength : 3"},
|
|
{"text", "The red hellrack tools can be crafted with usual hellrack."},
|
|
{"image", {1, 1, "hell_axe_hellrack_blue.png", 1.5}},
|
|
{"image", {1, 1, "hell_shovel_hellrack_blue.png", 3}},
|
|
{"image", {1, 1, "hell_sword_hellrack_blue.png", 4.5}},
|
|
{"image", {1, 1, "hell_pick_hellrack_blue.png"}},
|
|
{"y", 0.1},
|
|
{"text", "strength : 3"},
|
|
{"text", "The blue hellrack tools can be crafted with blue hellrack."},
|
|
{"image", {1, 1, "hell_axe_white.png", 1.5}},
|
|
{"image", {1, 1, "hell_shovel_white.png", 3}},
|
|
{"image", {1, 1, "hell_sword_white.png", 4.5}},
|
|
{"image", {1, 1, "hell_pick_white.png"}},
|
|
{"y", 0.1},
|
|
{"text", "strength : 3"},
|
|
{"text", "The siwtonic tools can be crafted with the siwtonic ore."},
|
|
{"y", 0.5},
|
|
},
|
|
{
|
|
description = "Blood structures",
|
|
{"text", "You can find blood structures on the ground and dig their nodes even with "},
|
|
{"text", "bare hands."},
|
|
{"text", "One contains 4 kinds of blocks:"},
|
|
{"image", {1, 1, cube("hell_blood.png"), 1}},
|
|
{"image", {1, 1,
|
|
cube("hell_blood_top.png", "hell_blood.png^hell_blood_side.png", "hell_blood.png^hell_blood_side.png"),
|
|
2}},
|
|
{"image", {1, 1, "hell_fruit.png", 3}},
|
|
{"image", {1, 1, cube("hell_blood_stem_top.png", "hell_blood_stem.png", "hell_blood_stem.png")}},
|
|
{"y", 0.168},
|
|
{"text", "Blood stem, blood, blood head and hell fruit."},
|
|
{"text", "You can craft 4 blood wood with the stem:"},
|
|
{"image", {1, 1, cube("hell_wood.png")}},
|
|
{"y", 0.168},
|
|
{"text", "The 4 blood nodes can be cooked and, except blood wood, their blood can be "},
|
|
{"text", "extracted."},
|
|
{"y", 0.5},
|
|
},
|
|
{
|
|
description = "Fruits",
|
|
{"text", "You can find the hell fruits on blood structures and dig them even with "},
|
|
{"text", "bare hands."},
|
|
{"image", {1, 1, "hell_fruit.png"}},
|
|
{"text", "Eating it will make you lose life but it might feed you and give you blood:"},
|
|
{"image", {1, 1, "hell_blood_extracted.png"}},
|
|
{"y", 0.168},
|
|
{"text", "If you eat it at the right place inside a portal, you will be teleported."},
|
|
{"y", 0.168},
|
|
{"text", "If you drop it without holding the fast key, you can split it into its fruit "},
|
|
{"text", "and leaf:"},
|
|
{"image", {1, 1, "hell_fruit_leaf.png", 1}},
|
|
{"image", {1, 1, "hell_fruit_no_leaf.png"}},
|
|
{"y", 0.168},
|
|
{"text", "Craft a fruit leave block out of 9 fruit leaves and the fruit can be used to "},
|
|
{"text", "craft a hell pearl."},
|
|
{"image", {1, 1, cube("hell_fruit_leaves.png")}},
|
|
{"y", 0.168},
|
|
{"text", "A fruit leaves block."},
|
|
},
|
|
{
|
|
description = "Cooking",
|
|
{"text", "To get a furnace you need to dig at least 8 hellrack bricks. They can be "},
|
|
{"text", "found at pyramid like constructions and require at least a strength 1 "},
|
|
{"text", "hell pick to be dug."},
|
|
{"text", "To craft the furnace, use the hellrack bricks like cobble:"},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png"), 0.5}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png"), 1}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png")}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png"), 1}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png")}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png"), 0.5}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png"), 1}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png")}},
|
|
{"y", 0.168},
|
|
{"text", "To begin cooking stuff, you can use a mushroom or fruit."},
|
|
{"text", "After that it's recommended to use cooked blood nodes."},
|
|
{"text", "Some hell items can be cooked:"},
|
|
{"image", {1, 1, cube("hell_blood_stem_top_cooked.png", "hell_blood_stem_cooked.png", "hell_blood_stem_cooked.png"), 0.35}},
|
|
{"image", {1, 1, cube("hell_blood_cooked.png"), 1.6}},
|
|
{"image", {1, 1,
|
|
cube("hell_blood_top_cooked.png", "hell_blood_cooked.png^hell_blood_side_cooked.png", "hell_blood_cooked.png^hell_blood_side_cooked.png"),
|
|
2.9}},
|
|
{"image", {1, 1, cube("hell_wood_cooked.png"), 4.3}},
|
|
{"y", 1.2},
|
|
{"text", "Some cooked blood stem, cooked blood, cooked blood head and cooked blood "},
|
|
{"text", "wood."},
|
|
{"image", {1, 1, "hell_hotbed.png", 0.3}},
|
|
{"image", {1, 1, "hell_pearl.png", 2}},
|
|
{"y", 1.168},
|
|
{"text", "Some cooked extracted blood and a hell pearl."},
|
|
{"y", 0.5},
|
|
},
|
|
{
|
|
description = "Extractors",
|
|
{"text", "Here you can find out information about the hell extractor."},
|
|
{"text", "Here you can see its craft recipe:"},
|
|
{"image", {0.5, 0.5, cube("hell_blood_top_cooked.png", "hell_blood_cooked.png^hell_blood_side_cooked.png", "hell_blood_cooked.png^hell_blood_side_cooked.png"), 0.5}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png"), 1}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png")}},
|
|
{"image", {0.5, 0.5, cube("hell_blood_extractor.png"), 2.5}},
|
|
{"image", {0.5, 0.5, "hell_shroom_stem.png", 0.5}},
|
|
{"image", {0.5, 0.5, cube("hell_blood_cooked.png"), 1}},
|
|
{"image", {0.5, 0.5, cube("hell_blood_cooked.png")}},
|
|
{"image", {0.5, 0.5, cube("hell_blood_stem_top_cooked.png", "hell_blood_stem_cooked.png", "hell_blood_stem_cooked.png"), 0.5}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png"), 1}},
|
|
{"image", {0.5, 0.5, cube("hell_hellrack_brick.png")}},
|
|
{"y", 0.2},
|
|
{"text", "Extract blood from the blood nodes you get from the blood structures."},
|
|
{"text", "You can also get blood with a hell fruit."},
|
|
{"text", "So you can use it:"},
|
|
{"text", "1. place it somewhere,"},
|
|
{"text", "2. place blood blocks next to it (4 or less),"},
|
|
{"text", "3. right click with extracted blood onto it to power it,"},
|
|
{"text", "4. take the new extracted blood and dig the extracted nodes."},
|
|
{"text", "Example (view from the top):"},
|
|
{"y", 0.88},
|
|
{"image", {1, 1, "hell_blood_stem_top.png", 0.82, -0.88}},
|
|
{"image", {1, 1, "hell_blood.png", 1.63}},
|
|
{"image", {1, 1, "hell_blood_extractor.png", 0.82}},
|
|
{"image", {1, 1, "hell_blood_stem_top_empty.png", 3.82, -0.88}},
|
|
{"image", {1, 1, "hell_blood_empty.png", 4.63}},
|
|
{"image", {1, 1, "hell_blood_empty.png", 3.001}},
|
|
{"image", {1, 1, "hell_blood_extractor.png", 3.82}},
|
|
{"image", {1, 1, "hell_blood.png"}},
|
|
{"image", {1, 1, "hell_blood.png", 0.82, -0.12}},
|
|
{"image", {1, 1, "hell_blood_empty.png", 3.82, -0.12}},
|
|
{"y", 1.168},
|
|
{"text", "The empty blood stem can be crafted into empty hell wood, "},
|
|
{"text", "which can be crafted into hell sticks."},
|
|
{"y", 0.5},
|
|
},
|
|
{
|
|
description = "Ores",
|
|
{"text", "You can find 5 types of ores:"},
|
|
{"image", {1, 1, cube("hell_hellrack_black.png"), 4}},
|
|
{"image", {1, 1, cube("hell_hellrack.png")}},
|
|
{"y", 0.168},
|
|
{"text", "The red hellrack is generated like stone."},
|
|
{"text", "The black hellrack is generated like gravel."},
|
|
{"text", "Both require at least a strength 2 hell pick to be dug."},
|
|
{"image", {1, 1, cube("hell_white.png"), 4}},
|
|
{"image", {1, 1, cube("hell_hellrack_blue.png")}},
|
|
{"y", 0.168},
|
|
{"text", "The blue hellrack is generated like diamond ore."},
|
|
{"text", "The siwtonic ore is generated like mese blocks."},
|
|
{"text", "Both require at least a strength 3 hell pick to be dug."},
|
|
{"image", {1, 1, cube("hell_hellrack_tiled.png"), 4}},
|
|
{"image", {1, 1, cube("glow_stone.png")}},
|
|
{"y", 0.168},
|
|
{"text", "Glow stone can be used for lighting."},
|
|
{"text", "Tiled hellrack is generated like coal ore."},
|
|
{"text", "Glow stone requires at least a strength 1 pick to be dug."},
|
|
{"text", "Dig tiled hellrack with at least a level 2 pickaxe."},
|
|
{"y", 0.5},
|
|
},
|
|
{
|
|
description = "Vines",
|
|
{"text", "Feed hell vines with blood. Dig them with anything."},
|
|
{"image", {1, 1, "hell_vine.png"}},
|
|
{"y", 0.168},
|
|
{"text", "Grow hell child by placing it to a dark place onto"},
|
|
{"text", "a blood structure head node."},
|
|
{"image", {1, 1, "hell_sapling.png"}},
|
|
{"y", -0.10},
|
|
{"image", {1, 1, "hell_blood.png^hell_blood_side.png"}},
|
|
},
|
|
{
|
|
description = "Pearls",
|
|
{"text", "The hell pearl can be used to teleport by throwing it."},
|
|
{"text", "Here is how to get one:"},
|
|
{"text", "First of all craft 2 mushroom heads and 1 hell fruit without leaf together:"},
|
|
{"image", {1, 1, "hell_shroom_top.png"}},
|
|
{"image", {1, 1, "hell_fim.png", 3}},
|
|
{"image", {1, 1, "hell_fruit_no_leaf.png"}},
|
|
{"image", {1, 1, "hell_shroom_top.png"}},
|
|
{"y", 0.168},
|
|
{"text", "Put the result into the furnace to cook it into a hell pearl:"},
|
|
{"image", {1, 1, "hell_pearl.png"}},
|
|
},
|
|
{
|
|
description = "Bricks",
|
|
{"text", "Craft bricks out of red, black and blue hellrack."},
|
|
{"image", {1, 1, cube("hell_hellrack_brick_black.png"), 1}},
|
|
{"image", {1, 1, cube("hell_hellrack_brick_blue.png"), 2}},
|
|
{"image", {1, 1, cube("hell_hellrack_brick.png")}},
|
|
{"y", 0.168},
|
|
{"text", "Dig them with at least a level 1 pickaxe."},
|
|
{"y", 0.5},
|
|
},
|
|
{
|
|
description = "Portals",
|
|
{"text", "Here you can find out how to build the hell portal."},
|
|
{"text", "A hell portal requires following nodes:"},
|
|
{"text", "- 25 empty hell wooden planks,"},
|
|
{"text", "- 16 black hellrack,"},
|
|
{"text", "- 12 blue hellrack bricks,"},
|
|
{"text", "- 8 red hellrack,"},
|
|
{"text", "- 8 cooked hell blood,"},
|
|
{"text", "- 4 hell fruits,"},
|
|
{"text", "- 2 siwtonic blocks."},
|
|
{"text", "It should look approximately like this one:"},
|
|
{"image", {5.625, 6, "hell_teleporter.png", 5, -0.5}},
|
|
{"y", 6},
|
|
{"text", "Activate it by standing in the middle,"},
|
|
{"text", "on the siwtonic block and eating a hell fruit."},
|
|
{"text", "Take enough stuff with you to build a portal when you'll come back."},
|
|
{"y", 0.5},
|
|
},
|
|
{
|
|
description = "Forests",
|
|
{"text", "The hell forest is generated in caves, above the usual hell."},
|
|
{"text", "There you can find some plants:"},
|
|
{"image", {1, 1, "hell_grass_middle.png", 1}},
|
|
{"image", {1, 1, "hell_grass_big.png", 2}},
|
|
{"image", {1, 1, "hell_grass_small.png"}},
|
|
{"y", 0.168},
|
|
{"text", "Use the hell forest grass to get paper. Craft paper out of the dried grass."},
|
|
{"image", {1, 1, cube("hell_tree_top.png", "hell_tree.png", "hell_tree.png")}},
|
|
{"y", 0.168},
|
|
{"text", "Hell trunks can be found at hell trees. Craft hell wood out of hell trunk."},
|
|
{"image", {1, 1, "hell_glowflower.png"}},
|
|
{"y", 0.168},
|
|
{"text", "Use it for lighting and decoration."},
|
|
},
|
|
}
|
|
|
|
-- the size of guide pages
|
|
local guide_size = {x=15, y=3, cx=0.2, cy=0.25}
|
|
|
|
-- informations about settings and ...
|
|
local formspec_offset = {x=0.375, y=0.375}
|
|
local font_size
|
|
if minetest.is_singleplayer() then
|
|
font_size = tonumber(minetest.settings:get("font_size")) or 13
|
|
else
|
|
font_size = 13
|
|
end
|
|
guide_size.fx = math.floor(((guide_size.x-4) * (guide_size.cx+formspec_offset.x)) * font_size)
|
|
guide_size.fy = font_size/40
|
|
|
|
-- the default guide formspecs
|
|
local guide_forms = {
|
|
contents = "size[3.6,"..(#guide_infos)-2 ..";]label["..guide_size.cx+0.7 ..","..guide_size.cy ..";Contents:]",
|
|
}
|
|
|
|
-- change the infos to formspecs
|
|
for n,data in ipairs(guide_infos) do
|
|
local form = ""
|
|
local y = 0
|
|
local x = guide_size.cx
|
|
for _,i in ipairs(data) do
|
|
local typ, content = unpack(i)
|
|
if typ == "y" then
|
|
y = y+content
|
|
elseif typ == "x" then
|
|
x = math.max(x, content)
|
|
elseif typ == "text" then
|
|
local tab = minetest.wrap_text(S(content), guide_size.fx, true)
|
|
local l = guide_size.cx
|
|
for _,str in ipairs(tab) do
|
|
form = form.."label["..formspec_offset.x ..","..formspec_offset.y+y..";"..str.."]"
|
|
y = y+guide_size.fy
|
|
l = math.max(l, #str)
|
|
end
|
|
x = math.max(x, l/font_size)
|
|
elseif typ == "image" then
|
|
local w, h, texture_name, px, py = unpack(content)
|
|
if not px then
|
|
form = form.."image["..formspec_offset.x..","..formspec_offset.y+y ..";"..w..","..h..";"..texture_name.."]"
|
|
y = y+h
|
|
else
|
|
px = formspec_offset.x+px
|
|
py = py or 0
|
|
form = form.."image["..px..","..
|
|
formspec_offset.y+y+py ..";"..w..","..h..";"..texture_name.."]"
|
|
x = math.max(x, px+w)
|
|
end
|
|
end
|
|
end
|
|
form = "size["..guide_size.x..","..y+1 ..";]real_coordinates[true]"..form.."button["..guide_size.x/2-0.6 ..","..y ..";1.2,0.8;quit;Back]"
|
|
guide_forms[n] = {data.description, form}
|
|
end
|
|
|
|
local desc_tab = {}
|
|
for n,i in ipairs(guide_forms) do
|
|
desc_tab[i[1]] = n
|
|
end
|
|
|
|
-- creates contents formspec
|
|
local y = 0
|
|
for y,i in ipairs(guide_forms) do
|
|
local desc, form = unpack(i)
|
|
local s = #desc*1.3/font_size+1.5
|
|
guide_forms.contents = guide_forms.contents.."button["..guide_size.cx*12/s-0.5 ..","..guide_size.cy+y/1.3 ..";"..s..",1;name;"..desc.."]"
|
|
end
|
|
|
|
-- shows the contents of the formspec
|
|
local function show_guide(pname)
|
|
minetest.show_formspec(pname, "hell_guide_contents", guide_forms["contents"])
|
|
end
|
|
|
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
if formname == "hell_guide_contents" then
|
|
local fname = fields.name
|
|
local pname = player:get_player_name()
|
|
if fname
|
|
and pname then
|
|
minetest.show_formspec(pname, "hell_guide", guide_forms[desc_tab[fname]][2])
|
|
end
|
|
elseif formname == "hell_guide" then
|
|
local fname = fields.quit
|
|
local pname = player:get_player_name()
|
|
if fname
|
|
and pname then
|
|
minetest.show_formspec(pname, "hell_guide_contents", guide_forms["contents"])
|
|
end
|
|
end
|
|
end)
|
|
|
|
minetest.register_chatcommand("hell_help", {
|
|
params = "",
|
|
description = S("Shows a hell guide"),
|
|
func = function(name)
|
|
local player = minetest.get_player_by_name(name)
|
|
if not player then
|
|
minetest.chat_send_player(name, "Something went wrong.")
|
|
return true
|
|
end
|
|
if player:get_pos().y > hell.start then
|
|
minetest.chat_send_player(name, S("Usually you don't need this guide here. You can view it in the hell."))
|
|
return true
|
|
end
|
|
minetest.chat_send_player(name, S("Showing guide..."))
|
|
show_guide(name)
|
|
return true
|
|
end
|
|
})
|