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("Torchlike Drawtype Test Node"),
149 drawtype = "torchlike",
152 "testnodes_torchlike_floor.png",
153 "testnodes_torchlike_ceiling.png",
154 "testnodes_torchlike_wall.png",
159 sunlight_propagates = true,
160 groups = { dig_immediate = 3 },
161 inventory_image = fallback_image("testnodes_torchlike_floor.png"),
164 minetest.register_node("testnodes:torchlike_wallmounted", {
165 description = S("Wallmounted Torchlike Drawtype Test Node"),
166 drawtype = "torchlike",
168 paramtype2 = "wallmounted",
170 "testnodes_torchlike_floor.png",
171 "testnodes_torchlike_ceiling.png",
172 "testnodes_torchlike_wall.png",
177 sunlight_propagates = true,
178 groups = { dig_immediate = 3 },
179 inventory_image = fallback_image("testnodes_torchlike_floor.png"),
184 minetest.register_node("testnodes:signlike", {
185 description = S("Wallmounted Signlike Drawtype Test Node"),
186 drawtype = "signlike",
188 paramtype2 = "wallmounted",
189 tiles = { "testnodes_signlike.png" },
193 groups = { dig_immediate = 3 },
194 sunlight_propagates = true,
195 inventory_image = fallback_image("testnodes_signlike.png"),
198 minetest.register_node("testnodes:plantlike", {
199 description = S("Plantlike Drawtype Test Node"),
200 drawtype = "plantlike",
202 tiles = { "testnodes_plantlike.png" },
206 sunlight_propagates = true,
207 groups = { dig_immediate = 3 },
210 minetest.register_node("testnodes:plantlike_waving", {
211 description = S("Waving Plantlike Drawtype Test Node"),
212 drawtype = "plantlike",
214 tiles = { "testnodes_plantlike_waving.png" },
219 sunlight_propagates = true,
220 groups = { dig_immediate = 3 },
225 -- param2 will rotate
226 minetest.register_node("testnodes:plantlike_degrotate", {
227 description = S("Degrotate Plantlike Drawtype Test Node"),
228 drawtype = "plantlike",
230 paramtype2 = "degrotate",
231 tiles = { "testnodes_plantlike_degrotate.png" },
235 sunlight_propagates = true,
236 groups = { dig_immediate = 3 },
239 -- param2 will change height
240 minetest.register_node("testnodes:plantlike_leveled", {
241 description = S("Leveled Plantlike Drawtype Test Node"),
242 drawtype = "plantlike",
244 paramtype2 = "leveled",
246 { name = "testnodes_plantlike_leveled.png", tileable_vertical = true },
250 -- We set a default param2 here only for convenience, to make the "plant" visible after placement
253 sunlight_propagates = true,
254 groups = { dig_immediate = 3 },
257 -- param2 changes shape
258 minetest.register_node("testnodes:plantlike_meshoptions", {
259 description = S("Meshoptions Plantlike Drawtype Test Node"),
260 drawtype = "plantlike",
262 paramtype2 = "meshoptions",
263 tiles = { "testnodes_plantlike_meshoptions.png" },
267 groups = { dig_immediate = 3 },
270 minetest.register_node("testnodes:plantlike_rooted", {
271 description = S("Rooted Plantlike Drawtype Test Node"),
272 drawtype = "plantlike_rooted",
274 tiles = { "testnodes_plantlike_rooted_base.png" },
275 special_tiles = { "testnodes_plantlike_rooted.png" },
277 groups = { dig_immediate = 3 },
280 minetest.register_node("testnodes:plantlike_rooted_waving", {
281 description = S("Waving Rooted Plantlike Drawtype Test Node"),
282 drawtype = "plantlike_rooted",
285 "testnodes_plantlike_rooted_base.png",
286 "testnodes_plantlike_rooted_base.png",
287 "testnodes_plantlike_rooted_base_side_waving.png",
289 special_tiles = { "testnodes_plantlike_rooted_waving.png" },
292 groups = { dig_immediate = 3 },
295 -- param2 changes height
296 minetest.register_node("testnodes:plantlike_rooted_leveled", {
297 description = S("Leveled Rooted Plantlike Drawtype Test Node"),
298 drawtype = "plantlike_rooted",
300 paramtype2 = "leveled",
302 "testnodes_plantlike_rooted_base.png",
303 "testnodes_plantlike_rooted_base.png",
304 "testnodes_plantlike_rooted_base_side_leveled.png",
307 { name = "testnodes_plantlike_rooted_leveled.png", tileable_vertical = true },
311 -- We set a default param2 here only for convenience, to make the "plant" visible after placement
313 groups = { dig_immediate = 3 },
316 -- param2 changes shape
317 minetest.register_node("testnodes:plantlike_rooted_meshoptions", {
318 description = S("Meshoptions Rooted Plantlike Drawtype Test Node"),
319 drawtype = "plantlike_rooted",
321 paramtype2 = "meshoptions",
323 "testnodes_plantlike_rooted_base.png",
324 "testnodes_plantlike_rooted_base.png",
325 "testnodes_plantlike_rooted_base_side_meshoptions.png",
328 "testnodes_plantlike_rooted_meshoptions.png",
331 groups = { dig_immediate = 3 },
334 -- param2 changes rotation
335 minetest.register_node("testnodes:plantlike_rooted_degrotate", {
336 description = S("Degrotate Rooted Plantlike Drawtype Test Node"),
337 drawtype = "plantlike_rooted",
339 paramtype2 = "degrotate",
341 "testnodes_plantlike_rooted_base.png",
342 "testnodes_plantlike_rooted_base.png",
343 "testnodes_plantlike_rooted_base_side_degrotate.png",
346 "testnodes_plantlike_rooted_degrotate.png",
349 groups = { dig_immediate = 3 },
352 -- Demonstrative liquid nodes, source and flowing form.
353 minetest.register_node("testnodes:liquid", {
354 description = S("Source Liquid Drawtype Test Node"),
358 "testnodes_liquidsource.png",
361 {name="testnodes_liquidsource.png", backface_culling=false},
362 {name="testnodes_liquidsource.png", backface_culling=true},
364 use_texture_alpha = true,
368 liquidtype = "source",
370 liquid_viscosity = 0,
371 liquid_alternative_flowing = "testnodes:liquid_flowing",
372 liquid_alternative_source = "testnodes:liquid",
373 groups = { dig_immediate = 3 },
375 minetest.register_node("testnodes:liquid_flowing", {
376 description = S("Flowing Liquid Drawtype Test Node"),
377 drawtype = "flowingliquid",
379 paramtype2 = "flowingliquid",
381 "testnodes_liquidflowing.png",
384 {name="testnodes_liquidflowing.png", backface_culling=false},
385 {name="testnodes_liquidflowing.png", backface_culling=false},
387 use_texture_alpha = true,
391 liquidtype = "flowing",
393 liquid_viscosity = 0,
394 liquid_alternative_flowing = "testnodes:liquid_flowing",
395 liquid_alternative_source = "testnodes:liquid",
396 groups = { dig_immediate = 3 },
398 minetest.register_node("testnodes:liquid_waving", {
399 description = S("Waving Source Liquid Drawtype Test Node"),
403 "testnodes_liquidsource.png^[brighten",
406 {name="testnodes_liquidsource.png^[brighten", backface_culling=false},
407 {name="testnodes_liquidsource.png^[brighten", backface_culling=true},
409 use_texture_alpha = true,
414 liquidtype = "source",
416 liquid_viscosity = 0,
417 liquid_alternative_flowing = "testnodes:liquid_flowing_waving",
418 liquid_alternative_source = "testnodes:liquid_waving",
419 groups = { dig_immediate = 3 },
421 minetest.register_node("testnodes:liquid_flowing_waving", {
422 description = S("Waving Flowing Liquid Drawtype Test Node"),
423 drawtype = "flowingliquid",
425 paramtype2 = "flowingliquid",
427 "testnodes_liquidflowing.png^[brighten",
430 {name="testnodes_liquidflowing.png^[brighten", backface_culling=false},
431 {name="testnodes_liquidflowing.png^[brighten", backface_culling=false},
433 use_texture_alpha = true,
438 liquidtype = "flowing",
440 liquid_viscosity = 0,
441 liquid_alternative_flowing = "testnodes:liquid_flowing_waving",
442 liquid_alternative_source = "testnodes:liquid_waving",
443 groups = { dig_immediate = 3 },
449 minetest.register_node("testnodes:airlike", {
450 description = S("Airlike Drawtype Test Node"),
451 drawtype = "airlike",
456 groups = { dig_immediate = 3 },
457 sunlight_propagates = true,
458 inventory_image = fallback_image("testnodes_airlike.png"),
461 -- param2 changes liquid height
462 minetest.register_node("testnodes:glassliquid", {
463 description = S("Glasslike Liquid Level Drawtype Test Node"),
464 drawtype = "glasslike_framed",
466 paramtype2 = "glasslikeliquidlevel",
468 "testnodes_glasslikeliquid.png",
471 "testnodes_liquid.png",
474 groups = { dig_immediate = 3 },
477 -- Adding many raillike examples, primarily to demonstrate the behavior of
478 -- "raillike groups". Nodes of the same type (rail, groupless, line, street)
479 -- should connect to nodes of the same "rail type" (=same shape, different
482 { "rail", {"testnodes_rail_straight.png", "testnodes_rail_curved.png", "testnodes_rail_t_junction.png", "testnodes_rail_crossing.png"} },
483 { "line", {"testnodes_line_straight.png", "testnodes_line_curved.png", "testnodes_line_t_junction.png", "testnodes_line_crossing.png"}, },
484 { "street", {"testnodes_street_straight.png", "testnodes_street_curved.png", "testnodes_street_t_junction.png", "testnodes_street_crossing.png"}, },
485 -- the "groupless" nodes are nodes in which the "connect_to_raillike" group is not set
486 { "groupless", {"testnodes_rail2_straight.png", "testnodes_rail2_curved.png", "testnodes_rail2_t_junction.png", "testnodes_rail2_crossing.png"} },
488 local colors = { "", "cyan", "red" }
491 local id = rails[r][1]
492 local tiles = rails[r][2]
494 if id ~= "groupless" then
495 raillike_group = minetest.raillike_group(id)
499 if colors[c] ~= "" then
502 minetest.register_node("testnodes:raillike_"..id..c, {
503 description = S("Raillike Drawtype Test Node: @1 @2", id, c),
504 drawtype = "raillike",
507 groups = { connect_to_raillike = raillike_group, dig_immediate = 3 },
513 fixed = {{-0.5, -0.5, -0.5, 0.5, -0.4, 0.5}},
515 sunlight_propagates = true,
523 -- Add visual_scale variants of previous nodes for half and double size
524 local scale = function(subname, desc_double, desc_half)
525 local original = "testnodes:"..subname
526 local def = table.copy(minetest.registered_items[original])
527 def.visual_scale = 2.0
528 def.description = desc_double
529 minetest.register_node("testnodes:"..subname.."_double", def)
530 def = table.copy(minetest.registered_items[original])
531 def.visual_scale = 0.5
532 def.description = desc_half
533 minetest.register_node("testnodes:"..subname.."_half", def)
537 S("Double-sized Allfaces Drawtype Test Node"),
538 S("Half-sized Allfaces Drawtype Test Node"))
539 scale("allfaces_optional",
540 S("Double-sized Allfaces Optional Drawtype Test Node"),
541 S("Half-sized Allfaces Optional Drawtype Test Node"))
542 scale("allfaces_optional_waving",
543 S("Double-sized Waving Allfaces Optional Drawtype Test Node"),
544 S("Half-sized Waving Allfaces Optional Drawtype Test Node"))
546 S("Double-sized Plantlike Drawtype Test Node"),
547 S("Half-sized Plantlike Drawtype Test Node"))
548 scale("torchlike_wallmounted",
549 S("Double-sized Wallmounted Torchlike Drawtype Test Node"),
550 S("Half-sized Wallmounted Torchlike Drawtype Test Node"))
552 S("Double-sized Wallmounted Signlike Drawtype Test Node"),
553 S("Half-sized Wallmounted Signlike Drawtype Test Node"))
555 S("Double-sized Firelike Drawtype Test Node"),
556 S("Half-sized Firelike Drawtype Test Node"))