From 01cd7c8e5bba46293a45ea404595273652922f79 Mon Sep 17 00:00:00 2001 From: HybridDog Date: Tue, 28 Dec 2021 18:33:25 +0100 Subject: [PATCH] New nether guide * Remove code which uses the font size setting to position text and images. Instead use Minetest's hypertext formspec element * Rewrite many parts of the guide contents, e.g. "you" -> "we", more detailed portal description * Add a setting to permit viewing it in the overworld (enabled by default) * Update the Readme I have set the font size to 24, which works well for me on a 1920x1080 screen with somewhat high DPI. The text written in hypertext apparently ignores the Minetest font size setting, so it may look bad on different screens. --- README.md | 9 +- nether/.luacheckrc | 2 + nether/guide.lua | 607 ++++++++++++++++------------------------ nether/settings.lua | 1 + nether/settingtypes.txt | 4 + 5 files changed, 244 insertions(+), 379 deletions(-) diff --git a/README.md b/README.md index a2a9712..f444a12 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,4 @@ https://forum.minetest.net/viewtopic.php?f=9&t=10265 TODO: * Find a way to get the perlin noise inside [-1; 1] or use another noise * Add some node which containing items to the simple pyramid "buildings" -* Change the sky background, fog, etc. in the nether -* Improve the guide formspec. - Writing it in Markdown would be nice. - These could be useful: - * https://forum.minetest.net/viewtopic.php?t=23855 - Minetest Bedrock Markup Language - * https://github.com/mpeterv/markdown - Markdown to HTML converter; Minetest formspecs support HTML +* Get rid of the vector_extras dependency diff --git a/nether/.luacheckrc b/nether/.luacheckrc index 4d04b6a..cb94eba 100644 --- a/nether/.luacheckrc +++ b/nether/.luacheckrc @@ -13,3 +13,5 @@ ignore = { "411", "421", "422", "423", "431", "432", -- Shadowing } +-- Allow very long lines in guide.lua for the HTML code +files["guide.lua"] = {ignore = {"631"}} diff --git a/nether/guide.lua b/nether/guide.lua index c90f320..8183ba2 100644 --- a/nether/guide.lua +++ b/nether/guide.lua @@ -1,374 +1,238 @@ -local cube = minetest.inventorycube - --- the content of the guide +-- The content of the guide local guide_infos = { - { - description = "Mushrooms", - {"text", "Nether mushrooms can be found on the nether's ground and\n".. - "on netherrack soil, it can be dug by hand."}, - {"image", {1, 1, "riesenpilz_nether_shroom_side.png"}}, - {"y", 0.2}, - {"text", "If you drop it without holding the fast key, you can split it into its stem and head:"}, - {"image", {1, 1, "nether_shroom_top.png", 1}}, - {"image", {1, 1, "nether_shroom_stem.png"}}, - {"y", 0.1}, - {"text", "You can get more mushrooms by using a netherrack soil:\n".. - "1. search a dark place and, if necessary, place netherrack with air about it\n".. - "2. right click with cooked blood onto the netherrack to make it soiled\n".. - "3. right click onto the netherrack soil with a nether mushroom head to add some spores\n".. - "4. dig the mushroom which grew after some time to make place for another one"}, - {"image", {1, 1, "riesenpilz_nether_shroom_side.png", 6, 0.12}}, - {"y", 1}, - {"image", {1, 1, "nether_netherrack.png^nether_netherrack_soil.png", 1.8}}, - {"image", {1, 1, "nether_hotbed.png", 1.3, -0.4}}, - {"image", {1, 1, "nether_netherrack.png^nether_netherrack_soil.png", 3.6}}, - {"image", {1, 1, "nether_shroom_top.png", 3.1, -0.5}}, - {"image", {1, 1, "nether_netherrack.png^nether_netherrack_soil.png", 6}}, - {"image", {1, 1, "nether_netherrack.png"}}, - }, - { - description = "Tools", - {"text", "You can craft 5 kinds of tools in the nether,\n".. - "which (except the mushroom pick) require sticks to be crafted:"}, - {"image", {1, 1, "nether_pick_mushroom.png"}}, - {"y", 0.1}, - {"text", "strength : 1\n".. - "The mushroom pick needs mushroom stems and heads to be crafted."}, - {"image", {1, 1, "nether_pick_wood.png"}}, - {"y", 0.1}, - {"text", "strength : 2\n".. - "The nether wood pick can be crafted with cooked nether blood wood."}, - {"image", {1, 1, "nether_axe_netherrack.png", 1.5}}, - {"image", {1, 1, "nether_shovel_netherrack.png", 3}}, - {"image", {1, 1, "nether_sword_netherrack.png", 4.5}}, - {"image", {1, 1, "nether_pick_netherrack.png"}}, - {"y", 0.1}, - {"text", "strength : 3\n".. - "The red netherrack tools can be crafted with usual netherrack."}, - {"image", {1, 1, "nether_axe_netherrack_blue.png", 1.5}}, - {"image", {1, 1, "nether_shovel_netherrack_blue.png", 3}}, - {"image", {1, 1, "nether_sword_netherrack_blue.png", 4.5}}, - {"image", {1, 1, "nether_pick_netherrack_blue.png"}}, - {"y", 0.1}, - {"text", "strength : 3\n".. - "The blue netherrack tools can be crafted with blue netherrack."}, - {"image", {1, 1, "nether_axe_white.png", 1.5}}, - {"image", {1, 1, "nether_shovel_white.png", 3}}, - {"image", {1, 1, "nether_sword_white.png", 4.5}}, - {"image", {1, 1, "nether_pick_white.png"}}, - {"y", 0.1}, - {"text", "strength : 3\n".. - "The siwtonic tools can be crafted with the siwtonic ore."}, - }, - { - description = "Blood structures", - {"text", "You can find blood structures on the ground and\n".. - "dig their nodes even with the bare hand."}, - {"y", 0.5}, - {"text", "One contains 4 kinds of blocks :"}, - {"image", {1, 1, cube("nether_blood.png"), 1}}, - {"image", {1, 1, - cube("nether_blood_top.png", - "nether_blood.png^nether_blood_side.png", - "nether_blood.png^nether_blood_side.png"), - 2}}, - {"image", {1, 1, "nether_fruit.png", 3}}, - {"image", {1, 1, cube("nether_blood_stem_top.png", - "nether_blood_stem.png", "nether_blood_stem.png")}}, - {"y", 0.1}, - {"text", "Blood stem, blood, blood head and nether fruit"}, - {"y", 0.1}, - {"text", "You can craft 4 blood wood with the stem :"}, - {"image", {1, 1, cube("nether_wood.png")}}, - {"y", 0.1}, - {"text", "The 4 blood nodes can be cooked and, except\n".. - "blood wood, their blood can be extracted."}, - }, - { - description = "Fruits", - {"text", "You can find the nether fruits on blood structures\n".. - "and dig them even with the bare hand."}, - {"image", {1, 1, "nether_fruit.png"}}, - {"text", "Eating it will make you lose life but\n".. - "it might feed you and give you blood :"}, - {"image", {1, 1, "nether_blood_extracted.png"}}, - {"y", 0.2}, - {"text", "If you eat it at the right place inside a portal,\n".. - "you will teleport instead of getting blood."}, - {"y", 0.2}, - {"text", "If you drop it without holding the fast key,\n".. - "you can split it into its fruit and leaf:"}, - {"image", {1, 1, "nether_fruit_leaf.png", 1}}, - {"image", {1, 1, "nether_fruit_no_leaf.png"}}, - {"y", 0.2}, - {"text", "Craft a fruit leave block out of 9 fruit leaves\n".. - "The fruit can be used to craft a nether pearl."}, - {"image", {1, 1, cube("nether_fruit_leaves.png")}}, - {"y", 0.2}, - {"text", "A fruit leaves block"}, - }, - { - description = "Cooking", - {"text", "To get a furnace you need to dig at least 8 netherrack bricks.\n".. - "They can be found at pyramid like constructions and require at least\n".. - "a strength 1 nether pick to be dug.\n".. - "To craft the furnace, use the netherrack bricks like cobble:"}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 0.5}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 1}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png")}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 1}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png")}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 0.5}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 1}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png")}}, - {"y", 0.2}, - {"text", "To begin cooking stuff, you can use a mushroom or fruit.\n".. - "After that it's recommended to use cooked blood nodes."}, - {"y", 0.1}, - {"text", "Some nether items can be cooked:"}, - {"image", {1, 1, cube("nether_blood_stem_top_cooked.png", - "nether_blood_stem_cooked.png", "nether_blood_stem_cooked.png"), - 0.35}}, - {"image", {1, 1, cube("nether_blood_cooked.png"), 1.6}}, - {"image", {1, 1, - cube("nether_blood_top_cooked.png", - "nether_blood_cooked.png^nether_blood_side_cooked.png", - "nether_blood_cooked.png^nether_blood_side_cooked.png"), - 2.9}}, - {"image", {1, 1, cube("nether_wood_cooked.png"), 4.3}}, - {"y", 1.2}, - {"text", "Some cooked blood stem, cooked blood,\n".. - "cooked blood head and cooked blood wood,"}, - {"image", {1, 1, "nether_hotbed.png", 0.3}}, - {"image", {1, 1, "nether_pearl.png", 2}}, - {"y", 1.2}, - {"text", "Some cooked extracted blood and a nether pearl"}, - }, - { - description = "Extractors", - {"text", "Here you can find out information about the nether extractor."}, - {"y", 0.2}, - {"text", "Here you can see its craft recipe:"}, - {"image", {0.5, 0.5, cube("nether_blood_top_cooked.png", - "nether_blood_cooked.png^nether_blood_side_cooked.png", - "nether_blood_cooked.png^nether_blood_side_cooked.png"), 0.5}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 1}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png")}}, - {"image", {0.5, 0.5, cube("nether_blood_extractor.png"), 2.5}}, - {"image", {0.5, 0.5, "nether_shroom_stem.png", 0.5}}, - {"image", {0.5, 0.5, cube("nether_blood_cooked.png"), 1}}, - {"image", {0.5, 0.5, cube("nether_blood_cooked.png")}}, - {"image", {0.5, 0.5, cube("nether_blood_stem_top_cooked.png", - "nether_blood_stem_cooked.png", "nether_blood_stem_cooked.png"), - 0.5}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 1}}, - {"image", {0.5, 0.5, cube("nether_netherrack_brick.png")}}, - {"y", 0.2}, - {"text", "Extract blood from the blood nodes you get from the blood structures.\n".. - "You can also get blood with a nether fruit."}, - {"y", 0.2}, - {"text", "So you can use it:\n".. - "1. place it somewhere\n".. - "2. place blood blocks next to it (4 or less)\n".. - "3. right click with extracted blood onto it to power it\n".. - "4. take the new extracted blood and dig the extracted nodes"}, - {"y", 0.2}, - {"text", "Example (view from the top):"}, - {"y", 0.88}, - {"image", {1, 1, "nether_blood_stem_top.png", 0.82, -0.88}}, - {"image", {1, 1, "nether_blood.png", 1.63}}, - {"image", {1, 1, "nether_blood_extractor.png", 0.82}}, - {"image", {1, 1, "nether_blood_stem_top_empty.png", 3.82, -0.88}}, - {"image", {1, 1, "nether_blood_empty.png", 4.63}}, - {"image", {1, 1, "nether_blood_empty.png", 3.001}}, - {"image", {1, 1, "nether_blood_extractor.png", 3.82}}, - {"image", {1, 1, "nether_blood.png"}}, - {"image", {1, 1, "nether_blood.png", 0.82, -0.12}}, - {"image", {1, 1, "nether_blood_empty.png", 3.82, -0.12}}, - {"y", 1.2}, - {"text", "The empty blood stem can be crafted into empty nether wood,\n".. - "which can be crafted into nether sticks."}, - }, - { - description = "Ores", - {"text", "You can find 5 types of ores:"}, - {"image", {1, 1, cube("nether_netherrack_black.png"), 4}}, - {"image", {1, 1, cube("nether_netherrack.png")}}, - {"y", 0.2}, - {"text", "The red netherrack is generated like stone.\n".. - "The black netherrack is generated like gravel.\n".. - "Both require at least a strength 2 nether pick to be dug."}, - {"image", {1, 1, cube("nether_white.png"), 4}}, - {"image", {1, 1, cube("nether_netherrack_blue.png")}}, - {"y", 0.2}, - {"text", "The blue netherrack is generated like diamond ore.\n".. - "The siwtonic ore is generated like mese blocks.\n".. - "Both require at least a strength 3 nether pick to be dug."}, - {"image", {1, 1, cube("nether_netherrack_tiled.png"), 4}}, - {"image", {1, 1, cube("glow_stone.png")}}, - {"y", 0.2}, - {"text", "Glow stone can be used for lighting.\n".. - "Tiled netherrack is generated like coal ore.\n".. - "Glow stone requires at least a strength 1 pick to be dug.\n".. - "Dig tiled netherrack with at least a level 2 pickaxe."}, - }, - { - description = "Vines", - {"text", "Feed nether vines with blood.\n".. - "Dig them with anything."}, - {"image", {1, 1, "nether_vine.png"}}, - {"y", 0.2}, - {"text", "Grow nether child by placing\n".. - "placing it to a dark place onto a\n".. - "blood structure head node."}, - {"image", {1, 1, "nether_sapling.png"}}, - {"y", -0.10}, - {"image", {1, 1, "nether_blood.png^nether_blood_side.png"}}, - }, - { - description = "Pearls", - {"text", "The nether pearl can be used to teleport by throwing it.\n".. - "Here is how to get one :"}, - {"y", 0.2}, - {"text", "First of all craft 2 mushroom heads and 1 nether fruit\n".. - "without leaf together :"}, - {"image", {1, 1, "nether_shroom_top.png"}}, - {"image", {1, 1, "nether_fim.png", 3}}, - {"image", {1, 1, "nether_fruit_no_leaf.png"}}, - {"image", {1, 1, "nether_shroom_top.png"}}, - {"y", 0.2}, - {"text", "Put the result into the furnace\n".. - "to cook it into a nether pearl :"}, - {"image", {1, 1, "nether_pearl.png"}}, - }, - { - description = "Bricks", - {"text", "Craft bricks out of red,\n".. - "black and blue netherrack."}, - {"image", {1, 1, cube("nether_netherrack_brick_black.png"), 1}}, - {"image", {1, 1, cube("nether_netherrack_brick_blue.png"), 2}}, - {"image", {1, 1, cube("nether_netherrack_brick.png")}}, - {"y", 0.4}, - {"text", "Dig them with at least a level 1 pickaxe."}, - {"y", 0.2}, - }, - { - description = "Portals", - {"text", "Here you can find out how to built the nether portal."}, - {"y", 0.3}, - {"text", "A nether portal requires following nodes:"}, - {"y", 0.05}, - {"text", "25 empty nether wooden planks\n".. - "16 black netherrack\n".. - "12 blue netherrack bricks\n".. - "8 red netherrack\n".. - "8 cooked nether blood\n".. - "4 nether fruits\n".. - "2 siwtonic blocks"}, - {"y", 0.2}, - {"text", "It should look approximately like this one:"}, - {"image", {5.625, 6, "nether_teleporter.png", 0, -1.5}}, - {"y", 5.5}, - {"text", "Activate it by standing in the middle,\n".. - "on the siwtonic block and eating a nether fruit.\n".. - "Take enough stuff with you to build a portal when you'll come back."}, - }, - { - description = "Forests", - {"text", "The nether forest is generated in caves,\n".. - "above the usual nether."}, - {"y", 0.2}, - {"text", "There you can find some plants:"}, - {"image", {1, 1, "nether_grass_middle.png", 1}}, - {"image", {1, 1, "nether_grass_big.png", 2}}, - {"image", {1, 1, "nether_grass_small.png"}}, - {"y", 0.2}, - {"text", "Use the nether forest grass to get paper.\n".. - "Craft paper out of the dried grass."}, - {"image", {1, 1, cube("nether_tree_top.png", "nether_tree.png", "nether_tree.png")}}, - {"y", 0.2}, - {"text", "Nether trunks can be found at nether trees.\n".. - "Craft nether wood out of nether trunk."}, - {"image", {1, 1, "nether_glowflower.png"}}, - {"y", 0.2}, - {"text", "Use it for lighting and decoration."}, - }, + {"Nether Mushroom", +[[Nether mushrooms can be found on the nether's ground and on Dirty Netherrack. They can be dug by hand. + + +Crafting Items +If we drop a Nether mushroom without holding the fast key, we can split it into its stem and head. We can use them to craft a Nether Mushroom Pickaxe, a Nether Blood Extractor, and an uncooked Nether Pearl. + + +Cultivating Mushrooms +We can get more mushrooms using Dirty Netherrack: +1. Search a dark place (light level <= 7) and, if necessary, place Netherrack with air above it +   +2. Right click with Cooked Blood onto the Netherrack to turn it into Dirty Netherrack +   +3. Right click onto the Dirty Netherrack with a Nether mushroom head to add some spores +   +4. Wait +5. Dig the Nether mushroom which grew after some time to make place for another one. After some time new spores need to be added (step 3). +   +   +]]}, + + {"Blood Structures", +[[We can find blood structures on the ground and dig their nodes with the bare hand. They contain four kinds of nodes: Nether Blood Stem, Nether Blood, Nether Blood Head, and Nether Fruit. + +We can craft four Nether Blood Wood nodes with the stem. + +The four red blood nodes can be cooked in a furnace and, except Nether Blood Wood, their blood can be extracted with a Nether Blood Extractor. + +Nether Fruit + +Eating a Nether Fruit decreases life but it might work against hunger and give us blood: + +If we eat it at the right place inside a portal, we will teleport instead of getting blood. +If we drop it without holding the fast key, we can split it into its fruit and leaf: + +We can craft a fruit leave block out of 9 fruit leaves +The fruit can be used to craft a nether pearl. + +A fruit leaves block + +Cultivating Blood Structures +If we dig a Nether vine we get a Nether Blood Child. If this sapling is put in a dark place (light level <= 3) on top of a Nether Blood Head node, it grows into a new blood structure after some time. + + +]]}, + + {"Tools", +[[We can craft five kinds of tools in the nether, which (except the Nether Mushroom Pickaxe) require sticks to be crafted. To obtain Nether Sticks we can use the Nether Blood Extractor. + +Nether Mushroom Pickaxe + +Strength: 1 +This pickaxe needs mushroom stems and heads to be crafted. + +Nether Wood Pickaxe + +Strength: 2 +This pickaxe can be crafted with Cooked Nether Blood Wood. + +Netherrack Tools + +Strength: 3 +The red Netherrack tools can be crafted with usual Netherrack. + +Faster Tools + +Strength: 3 +The blue Netherrack tools can be crafted with Blue Netherrack. + + +Strength: 3 +The Siwtonic tools can be crafted with the Siwtonic block. +]]}, + + {"Cooking", +[[To get a furnace we need to dig at least 8 Netherrack Bricks. They can be found at pyramid-like constructions and require at least a strength 1 nether pickaxe to be dug. +To begin cooking things, we can use a mushroom or fruit to power a furnace. After that it is recommended to use cooked blood nodes. + +Craft Recipe +To craft the furnace, we can use the netherrack bricks like cobble: + + + + +Cooking Outputs +Some nether items can be cooked, for example the Blood Structure's nodes. + +Other cookable items are Blood and an item to get a Nether Pearl. + +]]}, + + {"Nether Blood Extractor", +[[With this extractor we can separate Blood from the Blood Structure's nodes. An alternative way to get Blood is to eat Nether Fruits. The Nether Blood Extractor enables us to obtain a Nether Blood Stem Extracted, which we can craft to (empty) Nether Wood and then to Nether Sticks. + +Craft Recipe +We can craft the Nether Blood Extractor as follows: + + + + +Usage +We can feed the extractor with Blood to make it separate Blood from neighbouring nodes: +1. Place the Nether Blood Extractor somewhere +2. Place four or fewer Blood Structure's nodes next to it. Example viewed from the top: + + + +3. Right click the extractor with Blood to power it + + + +4. Take the new extracted blood and dig the extracted nodes +]]}, + + {"Ores and Bricks", +[[Digging ores requires a pickaxe from the nether of a sufficient strength. Pickaxes from the overworld do not work in general. + +Strength 1 + +The Glowing stone can be dug with pickaxes from the overworld or a pickaxe from the nether with a strenght of least one. We can find it on the nether's and nether forest's ceiling and use it for lighting. + +Strength 2 + +The (red) Netherrack is generated like stone, Tiled Netherrack is generated like coal ore and the Black Netherrack is generated like gravel. + +Strength 3 + +The Blue Netherrack is generated like diamond ore and the Siwtonic block is generated like mese blocks. + +Bricks +There are three types of Bricks: red, Blue, and Black Netherrack Brick. We can craft them from the corresponding Netherrack nodes and additionally, the (red) Netherrack Brick is generated in pyramid-like structures in the nether. In comparison to the Netherrack nodes, all three Bricks can be dug with a pickaxe with strength 1. + +]]}, + + {"Nether Vines", +[[Nether vines are at the ceiling of the nether and can be dug by hand. They drop Nether Blood Child nodes, from which we can grow Blood Structures. By feeding Blood to a Nether vine with air beneath it, it grows one node. + +]]}, + + {"Portals", +[[This nether mod supports two types of portals: the well-known Minecraft-like one made of Obsidian, and a portal which is specific to this mod. The Obsidian portal allows us to reach the nether from the overworld, but it is one-way and kills us. + +Build Instructions +A nether portal requires the following nodes: + +* 25 (empty) Nether Wood (height 5-6) +* 16 Black Netherrack (height 1) +* 12 Blue Netherrack Bricks (height 2-4) +* 8 (red) Netherrack (height 1) +* 8 Cooked Nether Blood (height 5) +* 4 Nether Fruits (height 4) +* 2 Siwtonic blocks (height 1 and 5) + +The heights in parenthesis correspond to the relative vertical positions of the nodes. When built, the portal should look approximately like this one: + + +Usage +Before using the portal the first time, we may want to fill our inventory with enough items so that we can build a second portal on the overworld to get back. +We can activate the portal as follows: +1. Stand in the middle on the Siwtonic block +2. Eat a Nether Fruit. If the portal was built correctly, we can hear a special sound and are teleported to the overworld. + +If two portals in the nether and overworld have the same X and Z coordinates, they teleport us to the centre, i.e. onto the Siwtonic block, of the opposite portal when eating a Nether Fruit. +]]}, + + {"Pearls", +[[The nether pearl can be used to teleport by throwing it. + +Craft Recipe +First, we need to craft two Nether Mushroom Heads and a Nether Fruit Without Leaf together as follows: + + + +This gives us the Nether Fruit in Mushroom (FIM), which we can cook in a furnace to obtain a Nether Pearl. + +]]}, + + {"Nether Forest", +[[The nether forest is generated in caves above the nether and contains decorative plants. + +Grass and Flower + +We can craft the Nether Grass item to another grass item, which can be cooked to get Dried Nether Grass. We can then craft this dried grass to paper. + + +The Glowing Flower can be used for lighting and decoration. + +Nether Tree + +Nether trunks can be found at Nether Trees and be crafted into Nether Wood Blocks via Nether Wood Planks. Furthermore, the Nether Tree Saplings grow even in the overworld if they have Nether Dirt beneath them. +]]} } --- the size of guide pages -local guide_size = {x=40, y=10, cx=0.2, cy=0.2} +-- The guide formspecs +local guide_forms = {} --- informations about settings and ... -local formspec_offset = {x=0.25, y=0.50} -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((40*(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+0.2 ..";Contents:]", -} - --- change the infos to formspecs +-- Convert the guide content 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(content, guide_size.fx, true) - local l = guide_size.cx - for _,str in ipairs(tab) do - form = form.."label["..guide_size.cx ..","..guide_size.cy+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["..guide_size.cx..","..guide_size.cy+y+h*0.3 ..";"..w..","..h..";"..texture_name.."]" - y = y+h - else - px = guide_size.cx+px - py = py or 0 - form = form.."image["..px..",".. - guide_size.cy+y+h*0.3+py ..";"..w..","..h..";"..texture_name.."]" - x = math.max(x, px+w) - end - end - end - form = "size["..x*1.8 ..","..y+1 ..";]"..form.."button["..x/2-0.5 ..","..y ..";1,2;quit;Back]" - guide_forms[n] = {data.description, form} + local title, html_content = data[1], data[2] + --~ local html_text = "" .. + local html_text = "" .. + "" .. + "
" .. title .. "
\n" .. + html_content + local spec_width = 16 + local spec_height = 16 + local html_padding = 0.5 + local form = ("formspec_version[4]size[%g,%g;]" .. + "hypertext[%g,%g;%g,%g;html;%s]button[%g,%g;2,0.8;quit;Back]" + ):format( + spec_width, spec_height, + html_padding, html_padding, + spec_width - 2 * html_padding, spec_height - 1 - 2 * html_padding, + minetest.formspec_escape(html_text), + 0.5 * spec_width - 1, spec_height - 1) + + guide_forms[n] = {title, form} end -local desc_tab = {} -for n,i in ipairs(guide_forms) do - desc_tab[i[1]] = n +local title_to_index = {} +for n, i in ipairs(guide_forms) do + title_to_index[i[1]] = n end --- creates contents formspec -for y,i in ipairs(guide_forms) do - local desc = i[1] - local s = #desc * 1.3 / font_size + 1.5 +-- Create the contents formspec +guide_forms.contents = "formspec_version[4]size[6," .. (#guide_infos) + 2 .. + ";]label[2,0.8;Contents:]" +for i, data in ipairs(guide_forms) do + local desc = data[1] + local y = i + 0.5 + 0.1 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, "nether_guide_contents", guide_forms["contents"]) + "button[0.5," .. y .. ";5,0.8;name;" .. desc .. "]" end minetest.register_on_player_receive_fields(function(player, formname, fields) @@ -377,14 +241,16 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local pname = player:get_player_name() if fname and pname then - minetest.show_formspec(pname, "nether_guide", guide_forms[desc_tab[fname]][2]) + minetest.show_formspec(pname, "nether_guide", + guide_forms[title_to_index[fname]][2]) end elseif formname == "nether_guide" then local fname = fields.quit local pname = player:get_player_name() if fname and pname then - minetest.show_formspec(pname, "nether_guide_contents", guide_forms["contents"]) + minetest.show_formspec(pname, "nether_guide_contents", + guide_forms["contents"]) end end end) @@ -395,17 +261,16 @@ minetest.register_chatcommand("nether_help", { func = function(name) local player = minetest.get_player_by_name(name) if not player then - minetest.chat_send_player(name, "Something went wrong.") - return false + return false, "Something went wrong." end - if player:get_pos().y > nether.start then - minetest.chat_send_player(name, - "Usually you don't neet this guide here. " .. - "You can view it in the nether.") - return false + if not nether.overworld_help and player:get_pos().y > nether.start then + return false, "Usually you don't neet this guide here. " .. + "You can view it in the nether." end minetest.chat_send_player(name, "Showing guide...") - show_guide(name) + -- Show the Contents (overview) page + minetest.show_formspec(name, "nether_guide_contents", + guide_forms["contents"]) return true end }) diff --git a/nether/settings.lua b/nether/settings.lua index d8d5195..f0f97db 100644 --- a/nether/settings.lua +++ b/nether/settings.lua @@ -2,6 +2,7 @@ local default_settings = { trap_players = true, log_to_chat = false, log_level = 2, + overworld_help = true, } nether.settings = {} diff --git a/nether/settingtypes.txt b/nether/settingtypes.txt index 8bb1966..39d8510 100644 --- a/nether/settingtypes.txt +++ b/nether/settingtypes.txt @@ -17,3 +17,7 @@ nether.log_to_chat (Log messages to chat) bool false # 2: Acceptable amount of information # 3: Lots of text nether.log_level (Log level) int 2 0 3 + +# If disabled, players cannot view the nether guide with /nether_help +# in the overworld. +nether.overworld_help (Overworld help) bool true