diff --git a/_includes/header.html b/_includes/header.html index 4bc1222..0952354 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -11,8 +11,9 @@
  • Minetest Tutorials
  • 1 - Folder Structure
  • 2 - Nodes, Items and Crafting
  • -
  • 3 - Active Block Modifiers
  • -
  • 4 - Formspecs
  • +
  • 3 - Node Drawtypes
  • +
  • 4 - Active Block Modifiers
  • +
  • 5 - Formspecs

  • Index
  • Webpage version of lua_api.txt
  • diff --git a/chapters/node_drawtypes.md b/chapters/node_drawtypes.md new file mode 100644 index 0000000..f64eb3f --- /dev/null +++ b/chapters/node_drawtypes.md @@ -0,0 +1,372 @@ +--- +title: Node Drawtypes +layout: default +root: ../ +--- + +Introduction +------------ + +In this chapter we explain all the different types of node drawtypes there are. + +First of, what is a drawtype? A drawtype defines how the node is drawn onto the screen, +they are sent along with the node definition to the client where + +* Normal +* Airlike +* Glasslike +* Glasslike_Framed + * Glasslike_Framed_Optional +* Allfaces + * Allfaces_Optional +* Torchlike +* Nodebox + +This article is not complete yet. These drawtypes are missing: + +* Signlike +* Plantlike +* Firelike +* Fencelike +* Raillike +* Mesh + +Normal +------ + +
    + Normal Drawtype +
    + Normal Drawtype +
    +
    + +This is, well, the normal drawtypes. +Nodes that use this will be cubes with textures for each side, simple-as.\\ +Here is the example from the [Nodes, Items and Crafting](nodes_items_crafting.html#registering-a-basic-node) chapter. +Notice how you don't need to declare the drawtype. + +{% highlight lua %} +minetest.register_node("mymod:diamond", { + description = "Alien Diamond", + tiles = { + "mymod_diamond_up.png", + "mymod_diamond_down.png", + "mymod_diamond_right.png", + "mymod_diamond_left.png", + "mymod_diamond_back.png", + "mymod_diamond_front.png" + }, + is_ground_content = true, + groups = {cracky = 3}, + drop = "mymod:diamond_fragments" +}) +{% endhighlight %} + + +Airlike +------- + +These nodes are see through, and thus have no textures. + +Liquid +------ + +
    + Liquid Drawtype +
    + Liquid Drawtype +
    +
    + +These nodes are complete liquid nodes, the liquid flows outwards from position using the flowing liquid drawtype. +For each liquid node you should also have a flowing liquid node. + +{% highlight lua %} +-- Some properties have been removed as they are beyond the scope of this chapter. +minetest.register_node("default:water_source", { + drawtype = "liquid", + paramtype = "light", + -- ^ light goes through node + + inventory_image = minetest.inventorycube("default_water.png"), + -- ^ this is required to stop the inventory image from being animated + tiles = { + { + name = "default_water_source_animated.png", + animation = { + type = "vertical_frames", + aspect_w=16, + aspect_h=16, + length=2.0 + } + } + }, + special_tiles = { + -- New-style water source material (mostly unused) + { + name="default_water_source_animated.png", + animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}, + backface_culling = false, + } + }, + + -- + -- Behavior + -- + walkable = false, -- The player falls through + pointable = false, -- The player can't highlight it + diggable = false, -- The player can't dig it + buildable_to = true, -- The player can't build on it + + alpha = WATER_ALPHA, + + -- + -- Liquid Properties + -- + drowning = 1, + liquidtype = "source", + + liquid_alternative_flowing = "default:water_flowing", + -- ^ when the liquid is flowing + + liquid_alternative_source = "default:water_source", + -- ^ when the liquid is a source + + liquid_viscosity = WATER_VISC, + -- ^ how far + + post_effect_color = {a=64, r=100, g=100, b=200}, + -- ^ color of screen when the player is submerged +}) +{% endhighlight %} + +### Flowing Liquids + +See default:water_flowing in the default mod in minetest_game, it is mostly +the same as the above example + +Glasslike +--------- + +
    + Glasslike Drawtype +
    + Glasslike Drawtype +
    +
    + +When you place multiple glasslike nodes together, you'll notice that the internal +edges are hidden, like this: + +
    + Glasslike's Edges +
    + Glasslike's Edges +
    +
    + +{% highlight lua %} +minetest.register_node("default:obsidian_glass", { + description = "Obsidian Glass", + drawtype = "glasslike", + tiles = {"default_obsidian_glass.png"}, + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + sounds = default.node_sound_glass_defaults(), + groups = {cracky=3,oddly_breakable_by_hand=3}, +}) +{% endhighlight %} + +Glasslike_Framed +---------------- + +
    + Glasslike_Framed drawtype +
    + Glasslike_Framed +
    +
    + +This makes the node's edge go around the whole thing, rather than individual nodes, +like the following: + +
    + Glasslike_framed's Edges +
    + Glasslike_Framed's Edges +
    +
    + +{% highlight lua %} +minetest.register_node("default:glass", { + description = "Glass", + drawtype = "glasslike_framed", + tiles = {"default_glass.png", "default_glass_detail.png"}, + inventory_image = minetest.inventorycube("default_glass.png"), + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky=3,oddly_breakable_by_hand=3}, + sounds = default.node_sound_glass_defaults(), +}) +{% endhighlight %} + +### Glasslike_Framed_Optional + +"optional" drawtypes need less rendering time if deactivated on the client's side. + +Allfaces +-------- + +
    + Allfaces drawtype +
    + Allfaces drawtype +
    +
    + +Allfaces nodes show every single face of the cube, even if sides are +up against another node (which would normally be hidden). +They are mainly used for leaves. + +{% highlight lua %} +minetest.register_node("default:leaves", { + description = "Leaves", + drawtype = "allfaces_optional", + tiles = {"default_leaves.png"} +}) +{% endhighlight %} + +### Allfaces_Optional + +"optional" drawtypes need less rendering time if deactivated on the client's side. + +TorchLike +--------- + +TorchLike allows you to have different textures when placed against a wall, +on the floor or on the ceiling. + +{% highlight lua %} +minetest.register_node("default:torch", { + description = "Torch", + drawtype = "torchlike", + tiles = { + { + name = "default_torch_on_floor_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0 + } + }, + { + name = "default_torch_on_ceiling_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0 + } + }, + { + name = "default_torch_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 3.0 + } + } + }, + inventory_image = "default_torch_on_floor.png", + wield_image = "default_torch_on_floor.png", + light_source = LIGHT_MAX-1, + selection_box = { + type = "wallmounted", + wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1}, + wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1}, + wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1}, + } +}) +{% endhighlight %} + +Nodebox +------- + +
    + Nodebox drawtype +
    + Nodebox drawtype +
    +
    + +Nodeboxes allow you to create a node which is not cubic, but is instead made out +of as many cuboids as you like. + +{% highlight lua %} +minetest.register_node("stairs:stair_stone", { + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.5, 0.5}, + }, + } +}) +{% endhighlight %} + +The most important part is the nodebox table: + +{% highlight lua %} +{-0.5, -0.5, -0.5, 0.5, 0, 0.5}, +{-0.5, 0, 0, 0.5, 0.5, 0.5} +{% endhighlight %} + +Each row is a cubiod which are joined to make a single node. +The first three numbers are the co-ordinates, from -0.5 to 0.5 inclusive, of +the bottom front left most corner, the last three numbers are the opposite corner. +They are in the form X, Y, Z, where Y is up. + +You can use the [NodeBoxEditor](https://forum.minetest.net/viewtopic.php?f=14&t=2840) to +create node boxes by dragging the edges, it is more visual than doing it by hand. + +### Wallmounted Nodebox + +Sometimes you want different nodeboxes for when it is place on the floor, wall and +ceiling, like with torches. + +{% highlight lua %} +minetest.register_node("default:sign_wall", { + drawtype = "nodebox", + node_box = { + type = "wallmounted", + + -- Ceiling + wall_top = { + {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125} + }, + + -- Floor + wall_bottom = { + {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125} + }, + + -- Wall + wall_side = { + {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375} + } + }, +}) +{% endhighlight %} + + +{% highlight lua %} +{% endhighlight %} + + diff --git a/static/drawtype_allfaces.png b/static/drawtype_allfaces.png new file mode 100644 index 0000000..c29a094 Binary files /dev/null and b/static/drawtype_allfaces.png differ diff --git a/static/drawtype_glasslike.png b/static/drawtype_glasslike.png new file mode 100644 index 0000000..544039e Binary files /dev/null and b/static/drawtype_glasslike.png differ diff --git a/static/drawtype_glasslike_edges.png b/static/drawtype_glasslike_edges.png new file mode 100644 index 0000000..3c41b80 Binary files /dev/null and b/static/drawtype_glasslike_edges.png differ diff --git a/static/drawtype_glasslike_framed.png b/static/drawtype_glasslike_framed.png new file mode 100644 index 0000000..7329f09 Binary files /dev/null and b/static/drawtype_glasslike_framed.png differ diff --git a/static/drawtype_liquid.png b/static/drawtype_liquid.png new file mode 100644 index 0000000..3192363 Binary files /dev/null and b/static/drawtype_liquid.png differ diff --git a/static/drawtype_nodebox.gif b/static/drawtype_nodebox.gif new file mode 100644 index 0000000..3863e39 Binary files /dev/null and b/static/drawtype_nodebox.gif differ diff --git a/static/drawtype_normal.png b/static/drawtype_normal.png new file mode 100644 index 0000000..7dc38af Binary files /dev/null and b/static/drawtype_normal.png differ diff --git a/static/drawtype_torchlike.png b/static/drawtype_torchlike.png new file mode 100644 index 0000000..4a2769e Binary files /dev/null and b/static/drawtype_torchlike.png differ diff --git a/static/style.css b/static/style.css index fd63c68..2a99931 100644 --- a/static/style.css +++ b/static/style.css @@ -14,6 +14,11 @@ img { max-width: 100%; } +figure { + padding: 0; + margin: 0; +} + .right_image { float: right; margin: 0 0 0 10px;