1 --[[ Drawtype Test: This file tests out and provides examples for
2 all drawtypes in Minetest. It is attempted to keep the node
3 definitions as simple and minimal as possible to keep
4 side-effects to a minimum.
6 How to read the node definitions:
7 There are two parts which are separated by 2 newlines:
8 The first part contains the things that are more or less essential
9 for defining the drawtype (except description, which is
10 at the top for readability).
11 The second part (after the 2 newlines) contains stuff that are
12 unrelated to the drawtype, stuff that is mostly there to make
13 testing this node easier and more convenient.
16 local S = minetest.get_translator("testnodes")
18 -- If set to true, will show an inventory image for nodes that have no inventory image as of Minetest 5.1.0.
19 -- This is due to <https://github.com/minetest/minetest/issues/9209>.
20 -- This is only added to make the items more visible to avoid confusion, but you will no longer see
21 -- the default inventory images for these items. When you want to test the default inventory image of drawtypes,
22 -- this should be turned off.
23 -- TODO: Remove support for fallback inventory image as soon #9209 is fixed.
24 local SHOW_FALLBACK_IMAGE = minetest.settings:get_bool("testnodes_show_fallback_image", false)
26 local fallback_image = function(img)
27 if SHOW_FALLBACK_IMAGE then
35 minetest.register_node("testnodes:normal", {
36 description = S("Normal Drawtype Test Node"),
38 tiles = { "testnodes_normal.png" },
40 groups = { dig_immediate = 3 },
43 -- Standard glasslike node
44 minetest.register_node("testnodes:glasslike", {
45 description = S("Glasslike Drawtype Test Node"),
46 drawtype = "glasslike",
48 tiles = { "testnodes_glasslike.png" },
50 groups = { dig_immediate = 3 },
53 -- Glasslike framed with the two textures (normal and "detail")
54 minetest.register_node("testnodes:glasslike_framed", {
55 description = S("Glasslike Framed Drawtype Test Node"),
56 drawtype = "glasslike_framed",
59 "testnodes_glasslike_framed.png",
60 "testnodes_glasslike_detail.png",
64 sunlight_propagates = true,
65 groups = { dig_immediate = 3 },
68 -- Like the one above, but without the "detail" texture (texture 2).
69 -- This node was added to see how the engine behaves when the "detail" texture
71 minetest.register_node("testnodes:glasslike_framed_no_detail", {
72 description = S("Glasslike Framed without Detail Drawtype Test Node"),
73 drawtype = "glasslike_framed",
75 tiles = { "testnodes_glasslike_framed2.png" },
78 sunlight_propagates = true,
79 groups = { dig_immediate = 3 },
83 minetest.register_node("testnodes:glasslike_framed_optional", {
84 description = S("Glasslike Framed Optional Drawtype Test Node"),
85 drawtype = "glasslike_framed_optional",
88 "testnodes_glasslike_framed_optional.png",
89 "testnodes_glasslike_detail.png",
93 sunlight_propagates = true,
94 groups = { dig_immediate = 3 },
99 minetest.register_node("testnodes:allfaces", {
100 description = S("Allfaces Drawtype Test Node"),
101 drawtype = "allfaces",
103 tiles = { "testnodes_allfaces.png" },
105 groups = { dig_immediate = 3 },
108 minetest.register_node("testnodes:allfaces_optional", {
109 description = S("Allfaces Optional Drawtype Test Node"),
110 drawtype = "allfaces_optional",
112 tiles = { "testnodes_allfaces_optional.png" },
114 groups = { dig_immediate = 3 },
117 minetest.register_node("testnodes:allfaces_optional_waving", {
118 description = S("Waving Allfaces Optional Drawtype Test Node"),
119 drawtype = "allfaces_optional",
121 tiles = { "testnodes_allfaces_optional.png^[brighten" },
124 groups = { dig_immediate = 3 },
127 minetest.register_node("testnodes:firelike", {
128 description = S("Firelike Drawtype Test Node"),
129 drawtype = "firelike",
131 tiles = { "testnodes_firelike.png" },
135 groups = { dig_immediate = 3 },
138 minetest.register_node("testnodes:fencelike", {
139 description = S("Fencelike Drawtype Test Node"),
140 drawtype = "fencelike",
142 tiles = { "testnodes_fencelike.png" },
144 groups = { dig_immediate = 3 },
147 minetest.register_node("testnodes:torchlike", {
148 description = S("Wallmounted Torchlike Drawtype Test Node"),
149 drawtype = "torchlike",
151 paramtype2 = "wallmounted",
153 "testnodes_torchlike_floor.png",
154 "testnodes_torchlike_ceiling.png",
155 "testnodes_torchlike_wall.png",
160 sunlight_propagates = true,
161 groups = { dig_immediate = 3 },
162 inventory_image = fallback_image("testnodes_torchlike_floor.png"),
165 minetest.register_node("testnodes:signlike", {
166 description = S("Wallmounted Signlike Drawtype Test Node"),
167 drawtype = "signlike",
169 paramtype2 = "wallmounted",
170 tiles = { "testnodes_signlike.png" },
174 groups = { dig_immediate = 3 },
175 sunlight_propagates = true,
176 inventory_image = fallback_image("testnodes_signlike.png"),
179 minetest.register_node("testnodes:plantlike", {
180 description = S("Plantlike Drawtype Test Node"),
181 drawtype = "plantlike",
183 tiles = { "testnodes_plantlike.png" },
187 sunlight_propagates = true,
188 groups = { dig_immediate = 3 },
191 minetest.register_node("testnodes:plantlike_waving", {
192 description = S("Waving Plantlike Drawtype Test Node"),
193 drawtype = "plantlike",
195 tiles = { "testnodes_plantlike_waving.png" },
200 sunlight_propagates = true,
201 groups = { dig_immediate = 3 },
206 -- param2 will rotate
207 minetest.register_node("testnodes:plantlike_degrotate", {
208 description = S("Degrotate Plantlike Drawtype Test Node"),
209 drawtype = "plantlike",
211 paramtype2 = "degrotate",
212 tiles = { "testnodes_plantlike_degrotate.png" },
216 sunlight_propagates = true,
217 groups = { dig_immediate = 3 },
220 -- param2 will change height
221 minetest.register_node("testnodes:plantlike_leveled", {
222 description = S("Leveled Plantlike Drawtype Test Node"),
223 drawtype = "plantlike",
225 paramtype2 = "leveled",
227 { name = "testnodes_plantlike_leveled.png", tileable_vertical = true },
231 -- We set a default param2 here only for convenience, to make the "plant" visible after placement
234 sunlight_propagates = true,
235 groups = { dig_immediate = 3 },
238 -- param2 changes shape
239 minetest.register_node("testnodes:plantlike_meshoptions", {
240 description = S("Meshoptions Plantlike Drawtype Test Node"),
241 drawtype = "plantlike",
243 paramtype2 = "meshoptions",
244 tiles = { "testnodes_plantlike_meshoptions.png" },
248 groups = { dig_immediate = 3 },
251 minetest.register_node("testnodes:plantlike_rooted", {
252 description = S("Rooted Plantlike Drawtype Test Node"),
253 drawtype = "plantlike_rooted",
255 tiles = { "testnodes_plantlike_rooted_base.png" },
256 special_tiles = { "testnodes_plantlike_rooted.png" },
258 groups = { dig_immediate = 3 },
261 minetest.register_node("testnodes:plantlike_rooted_waving", {
262 description = S("Waving Rooted Plantlike Drawtype Test Node"),
263 drawtype = "plantlike_rooted",
266 "testnodes_plantlike_rooted_base.png",
267 "testnodes_plantlike_rooted_base.png",
268 "testnodes_plantlike_rooted_base_side_waving.png",
270 special_tiles = { "testnodes_plantlike_rooted_waving.png" },
273 groups = { dig_immediate = 3 },
276 -- param2 changes height
277 minetest.register_node("testnodes:plantlike_rooted_leveled", {
278 description = S("Leveled Rooted Plantlike Drawtype Test Node"),
279 drawtype = "plantlike_rooted",
281 paramtype2 = "leveled",
283 "testnodes_plantlike_rooted_base.png",
284 "testnodes_plantlike_rooted_base.png",
285 "testnodes_plantlike_rooted_base_side_leveled.png",
288 { name = "testnodes_plantlike_rooted_leveled.png", tileable_vertical = true },
292 -- We set a default param2 here only for convenience, to make the "plant" visible after placement
294 groups = { dig_immediate = 3 },
297 -- param2 changes shape
298 minetest.register_node("testnodes:plantlike_rooted_meshoptions", {
299 description = S("Meshoptions Rooted Plantlike Drawtype Test Node"),
300 drawtype = "plantlike_rooted",
302 paramtype2 = "meshoptions",
304 "testnodes_plantlike_rooted_base.png",
305 "testnodes_plantlike_rooted_base.png",
306 "testnodes_plantlike_rooted_base_side_meshoptions.png",
309 "testnodes_plantlike_rooted_meshoptions.png",
312 groups = { dig_immediate = 3 },
315 -- param2 changes rotation
316 minetest.register_node("testnodes:plantlike_rooted_degrotate", {
317 description = S("Degrotate Rooted Plantlike Drawtype Test Node"),
318 drawtype = "plantlike_rooted",
320 paramtype2 = "degrotate",
322 "testnodes_plantlike_rooted_base.png",
323 "testnodes_plantlike_rooted_base.png",
324 "testnodes_plantlike_rooted_base_side_degrotate.png",
327 "testnodes_plantlike_rooted_degrotate.png",
330 groups = { dig_immediate = 3 },
333 -- Demonstrative liquid nodes, source and flowing form.
334 minetest.register_node("testnodes:liquid", {
335 description = S("Source Liquid Drawtype Test Node"),
339 "testnodes_liquidsource.png",
342 {name="testnodes_liquidsource.png", backface_culling=false},
343 {name="testnodes_liquidsource.png", backface_culling=true},
345 use_texture_alpha = true,
349 liquidtype = "source",
351 liquid_viscosity = 0,
352 liquid_alternative_flowing = "testnodes:liquid_flowing",
353 liquid_alternative_source = "testnodes:liquid",
354 groups = { dig_immediate = 3 },
356 minetest.register_node("testnodes:liquid_flowing", {
357 description = S("Flowing Liquid Drawtype Test Node"),
358 drawtype = "flowingliquid",
360 paramtype2 = "flowingliquid",
362 "testnodes_liquidflowing.png",
365 {name="testnodes_liquidflowing.png", backface_culling=false},
366 {name="testnodes_liquidflowing.png", backface_culling=false},
368 use_texture_alpha = true,
372 liquidtype = "flowing",
374 liquid_viscosity = 0,
375 liquid_alternative_flowing = "testnodes:liquid_flowing",
376 liquid_alternative_source = "testnodes:liquid",
377 groups = { dig_immediate = 3 },
379 minetest.register_node("testnodes:liquid_waving", {
380 description = S("Waving Source Liquid Drawtype Test Node"),
384 "testnodes_liquidsource.png^[brighten",
387 {name="testnodes_liquidsource.png^[brighten", backface_culling=false},
388 {name="testnodes_liquidsource.png^[brighten", backface_culling=true},
390 use_texture_alpha = true,
395 liquidtype = "source",
397 liquid_viscosity = 0,
398 liquid_alternative_flowing = "testnodes:liquid_flowing_waving",
399 liquid_alternative_source = "testnodes:liquid_waving",
400 groups = { dig_immediate = 3 },
402 minetest.register_node("testnodes:liquid_flowing_waving", {
403 description = S("Waving Flowing Liquid Drawtype Test Node"),
404 drawtype = "flowingliquid",
406 paramtype2 = "flowingliquid",
408 "testnodes_liquidflowing.png^[brighten",
411 {name="testnodes_liquidflowing.png^[brighten", backface_culling=false},
412 {name="testnodes_liquidflowing.png^[brighten", backface_culling=false},
414 use_texture_alpha = true,
419 liquidtype = "flowing",
421 liquid_viscosity = 0,
422 liquid_alternative_flowing = "testnodes:liquid_flowing_waving",
423 liquid_alternative_source = "testnodes:liquid_waving",
424 groups = { dig_immediate = 3 },
430 minetest.register_node("testnodes:airlike", {
431 description = S("Airlike Drawtype Test Node"),
432 drawtype = "airlike",
437 groups = { dig_immediate = 3 },
438 sunlight_propagates = true,
439 inventory_image = fallback_image("testnodes_airlike.png"),
442 -- param2 changes liquid height
443 minetest.register_node("testnodes:glassliquid", {
444 description = S("Glasslike Liquid Level Drawtype Test Node"),
445 drawtype = "glasslike_framed",
447 paramtype2 = "glasslikeliquidlevel",
449 "testnodes_glasslikeliquid.png",
452 "testnodes_liquid.png",
455 groups = { dig_immediate = 3 },
458 -- Adding many raillike examples, primarily to demonstrate the behavior of
459 -- "raillike groups". Nodes of the same type (rail, groupless, line, street)
460 -- should connect to nodes of the same "rail type" (=same shape, different
463 { "rail", {"testnodes_rail_straight.png", "testnodes_rail_curved.png", "testnodes_rail_t_junction.png", "testnodes_rail_crossing.png"} },
464 { "line", {"testnodes_line_straight.png", "testnodes_line_curved.png", "testnodes_line_t_junction.png", "testnodes_line_crossing.png"}, },
465 { "street", {"testnodes_street_straight.png", "testnodes_street_curved.png", "testnodes_street_t_junction.png", "testnodes_street_crossing.png"}, },
466 -- the "groupless" nodes are nodes in which the "connect_to_raillike" group is not set
467 { "groupless", {"testnodes_rail2_straight.png", "testnodes_rail2_curved.png", "testnodes_rail2_t_junction.png", "testnodes_rail2_crossing.png"} },
469 local colors = { "", "cyan", "red" }
472 local id = rails[r][1]
473 local tiles = rails[r][2]
475 if id ~= "groupless" then
476 raillike_group = minetest.raillike_group(id)
480 if colors[c] ~= "" then
483 minetest.register_node("testnodes:raillike_"..id..c, {
484 description = S("Raillike Drawtype Test Node: @1 @2", id, c),
485 drawtype = "raillike",
488 groups = { connect_to_raillike = raillike_group, dig_immediate = 3 },
494 fixed = {{-0.5, -0.5, -0.5, 0.5, -0.4, 0.5}},
496 sunlight_propagates = true,
504 -- Add visual_scale variants of previous nodes for half and double size
505 local scale = function(subname, desc_double, desc_half)
506 local original = "testnodes:"..subname
507 local def = table.copy(minetest.registered_items[original])
508 def.visual_scale = 2.0
509 def.description = desc_double
510 minetest.register_node("testnodes:"..subname.."_double", def)
511 def = table.copy(minetest.registered_items[original])
512 def.visual_scale = 0.5
513 def.description = desc_half
514 minetest.register_node("testnodes:"..subname.."_half", def)
518 S("Double-sized Plantlike Drawtype Test Node"),
519 S("Half-sized Plantlike Drawtype Test Node"))
521 S("Double-sized Wallmounted Torchlike Drawtype Test Node"),
522 S("Half-sized Wallmounted Torchlike Drawtype Test Node"))
524 S("Double-sized Wallmounted Signlike Drawtype Test Node"),
525 S("Half-sized Wallmounted Signlike Drawtype Test Node"))
527 S("Double-sized Firelike Drawtype Test Node"),
528 S("Half-sized Firelike Drawtype Test Node"))