hell/guide.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
})