diff --git a/mods/ENVIRONMENT/climate/regional_weather/abms/ice.lua b/mods/ENVIRONMENT/climate/regional_weather/abms/ice.lua
index a134a07..8ba1c8a 100644
--- a/mods/ENVIRONMENT/climate/regional_weather/abms/ice.lua
+++ b/mods/ENVIRONMENT/climate/regional_weather/abms/ice.lua
@@ -9,6 +9,7 @@ local S = regional_weather.i18n
minetest.register_node(BLOCK_NAME, {
description = S("Thin Ice"),
+ drawtype = "glasslike",
tiles = {"(default_ice.png^[colorize:#ffffff:50)^[opacity:200"},
paramtype = "light",
groups = {
@@ -20,7 +21,7 @@ minetest.register_node(BLOCK_NAME, {
},
freezemelt = "default:river_water_source",
sounds = default.node_sound_glass_defaults(),
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
drop = "",
on_destruct = function(pos)
-- asynchronous to avoid destruction loop
diff --git a/mods/ENVIRONMENT/climate/regional_weather/abms/puddle.lua b/mods/ENVIRONMENT/climate/regional_weather/abms/puddle.lua
index a450aa2..3d72761 100644
--- a/mods/ENVIRONMENT/climate/regional_weather/abms/puddle.lua
+++ b/mods/ENVIRONMENT/climate/regional_weather/abms/puddle.lua
@@ -69,7 +69,7 @@ for i = 1, VARIANT_COUNT do
sunlight_propagates = true,
paramtype = "light",
paramtype2 = "facedir",
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
node_box = node_box,
groups = {
not_in_creative_inventory = 1,
diff --git a/mods/ENVIRONMENT/radioactive_gas/gas.lua b/mods/ENVIRONMENT/radioactive_gas/gas.lua
index c603d31..6c6d786 100644
--- a/mods/ENVIRONMENT/radioactive_gas/gas.lua
+++ b/mods/ENVIRONMENT/radioactive_gas/gas.lua
@@ -11,13 +11,13 @@ minetest.register_node("radioactive_gas:gas", {
drowning = 1,
post_effect_color = {a = 20, r = 20, g = 250, b = 20},
tiles = {"radioactive_gas.png"},
- alpha = 0.1,
+ use_texture_alpha = "blend",
paramtype = "light",
groups = {
not_in_creative_inventory = 1,
not_blocking_trains = 1,
cools_lava = 1,
- radioactive = 4
+ radioactive = 4,
},
drop = {},
sunlight_propagates = true
diff --git a/mods/ENVIRONMENT/vacuum/vacuum.lua b/mods/ENVIRONMENT/vacuum/vacuum.lua
index f22bddf..1b83459 100644
--- a/mods/ENVIRONMENT/vacuum/vacuum.lua
+++ b/mods/ENVIRONMENT/vacuum/vacuum.lua
@@ -9,7 +9,7 @@ minetest.register_node("vacuum:vacuum", {
drawtype = "glasslike",
drowning = 1,
tiles = {"transparent_pixel.png"},
- alpha = 0.1,
+ use_texture_alpha = "blend",
groups = {not_in_creative_inventory=1, not_blocking_trains=1, cools_lava=1},
paramtype = "light",
drop = {},
diff --git a/mods/EVENTS/christmas_holiday_pack/nodes.lua b/mods/EVENTS/christmas_holiday_pack/nodes.lua
index 6329833..87a11b7 100644
--- a/mods/EVENTS/christmas_holiday_pack/nodes.lua
+++ b/mods/EVENTS/christmas_holiday_pack/nodes.lua
@@ -77,7 +77,7 @@ end
drawtype = "plantlike",
walkable = false,
sunlight_propagates = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
groups = {snappy = 3, oddly_breakable_by_hand = 3},
sounds = default.node_sound_leaves_defaults(),
})
@@ -96,7 +96,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -118,7 +118,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -133,7 +133,7 @@ end
drawtype = "plantlike",
walkable = false,
sunlight_propagates = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
groups = {snappy = 3, oddly_breakable_by_hand = 3},
light_source = 8,
sounds = default.node_sound_metal_defaults(),
@@ -152,7 +152,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -173,7 +173,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -205,7 +205,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -227,7 +227,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -248,7 +248,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -269,7 +269,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -293,7 +293,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -314,7 +314,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -335,7 +335,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -356,7 +356,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -377,7 +377,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -398,7 +398,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -419,7 +419,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
@@ -440,7 +440,7 @@ end
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
paramtype2 = "wallmounted",
diff --git a/mods/ITEMS/cblocks/init.lua b/mods/ITEMS/cblocks/init.lua
index 337c7f9..1f79d7f 100644
--- a/mods/ITEMS/cblocks/init.lua
+++ b/mods/ITEMS/cblocks/init.lua
@@ -118,7 +118,7 @@ minetest.register_node("cblocks:glass_" .. colours[i][1], {
drawtype = "glasslike",
paramtype = "light",
sunlight_propagates = true,
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
is_ground_content = false,
groups = {cracky = 3, oddly_breakable_by_hand = 3},
sounds = default.node_sound_glass_defaults(),
diff --git a/mods/ITEMS/holiday_lights/nodes.lua b/mods/ITEMS/holiday_lights/nodes.lua
index c009a2d..c1b040b 100644
--- a/mods/ITEMS/holiday_lights/nodes.lua
+++ b/mods/ITEMS/holiday_lights/nodes.lua
@@ -12,7 +12,7 @@ minetest.register_node("holiday_lights:lights_white", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -35,7 +35,7 @@ minetest.register_node("holiday_lights:lights_red", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -58,7 +58,7 @@ minetest.register_node("holiday_lights:lights_green", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -81,7 +81,7 @@ minetest.register_node("holiday_lights:lights_blue", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -104,7 +104,7 @@ minetest.register_node("holiday_lights:lights_yellow", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -127,7 +127,7 @@ minetest.register_node("holiday_lights:lights_purple", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -150,7 +150,7 @@ minetest.register_node("holiday_lights:lights_orange", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -173,7 +173,7 @@ minetest.register_node("holiday_lights:lights_pink", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -196,7 +196,7 @@ minetest.register_node("holiday_lights:lights_rainbow", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -219,7 +219,7 @@ minetest.register_node("holiday_lights:lights_festive", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -243,7 +243,7 @@ minetest.register_node("holiday_lights:lights_spooky", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -266,7 +266,7 @@ minetest.register_node("holiday_lights:lights_patriotic", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
@@ -289,7 +289,7 @@ minetest.register_node("holiday_lights:lights_icy", {
type = "wallmounted",
},
legacy_wallmounted = true,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
drawtype = "signlike",
paramtype = "light",
light_source = 8,
diff --git a/mods/ITEMS/led_marquee/init.lua b/mods/ITEMS/led_marquee/init.lua
index 8760a11..d854c1e 100644
--- a/mods/ITEMS/led_marquee/init.lua
+++ b/mods/ITEMS/led_marquee/init.lua
@@ -399,7 +399,7 @@ for i = 31, 255 do
inventory_image = wimage,
wield_image = wimage,
palette="led_marquee_palette.png",
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
groups = groups,
paramtype = "light",
paramtype2 = "colorwallmounted",
diff --git a/mods/ITEMS/protector/init.lua b/mods/ITEMS/protector/init.lua
index 552644d..9d6d060 100644
--- a/mods/ITEMS/protector/init.lua
+++ b/mods/ITEMS/protector/init.lua
@@ -765,7 +765,7 @@ minetest.register_entity("protector:display", {
local x = protector_radius
minetest.register_node("protector:display_node", {
tiles = {"protector_display.png"},
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
walkable = false,
drawtype = "nodebox",
node_box = {
diff --git a/mods/MOBS/mobs_creatures/items/blood.lua b/mods/MOBS/mobs_creatures/items/blood.lua
index e26f9e1..2ecf27f 100644
--- a/mods/MOBS/mobs_creatures/items/blood.lua
+++ b/mods/MOBS/mobs_creatures/items/blood.lua
@@ -1,22 +1,22 @@
--Blood Bucket and Blood Source items originally from "horror" mod by D00M3D.
minetest.register_node("mobs_creatures:blood_flowing", {
description = "blood_source",
- inventory_image = minetest.inventorycube("mobs_creatures_items_blood_source.png"),
+ inventory_image = minetest.inventorycube("mobs_creatures_items_blood_source.png^[opacity:190"),
drawtype = "flowingliquid",
- tiles = {"mobs_creatures_items_blood_source.png"},
+ tiles = {"mobs_creatures_items_blood_source.png^[opacity:190"},
special_tiles = {
{
- image="mobs_creatures_items_blood_animate.png",
+ image="mobs_creatures_items_blood_animate.png^[opacity:190",
backface_culling=false,
animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1}
},
{
- image="mobs_creatures_items_blood_animate.png",
+ image="mobs_creatures_items_blood_animate.png^[opacity:190",
backface_culling=true,
animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1}
},
},
- alpha = 190,
+ use_texture_alpha = "blend",
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
@@ -37,20 +37,20 @@ minetest.register_node("mobs_creatures:blood_flowing", {
minetest.register_node("mobs_creatures:blood_source", {
description = "Blood Source",
- inventory_image = minetest.inventorycube("mobs_creatures_items_blood_source.png"),
+ inventory_image = minetest.inventorycube("mobs_creatures_items_blood_source.png^[opacity:190"),
drawtype = "liquid",
tiles = {
- {name="mobs_creatures_items_blood_animate.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1}}
+ {name="mobs_creatures_items_blood_animate.png^[opacity:190", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1}}
},
special_tiles = {
-- New-style water source material (mostly unused)
{
- name="mobs_creatures_items_blood_animate.png",
+ name="mobs_creatures_items_blood_animate.png^[opacity:190",
animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1},
backface_culling = false,
}
},
- alpha = 190,
+ use_texture_alpha = "blend",
paramtype = "light",
walkable = false,
pointable = false,
diff --git a/mods/MOBS/slimes/init.lua b/mods/MOBS/slimes/init.lua
index 1f2bb93..3308bf2 100644
--- a/mods/MOBS/slimes/init.lua
+++ b/mods/MOBS/slimes/init.lua
@@ -20,7 +20,7 @@ slimes.add_slime = function(string, aquatic)
tiles = {"slime_goo_block.png^[colorize:"..slimes.colors[string].."^[colorize:#0000:25"},
description = proper_name.." Goo Block",
drawtype = "allfaces_optional",
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
groups = {slippery = 2, crumbly=3, oddly_breakable_by_hand = 1, fall_damage_add_percent=-80, bouncy=90},
sounds = default.node_sound_snow_defaults(),
})
diff --git a/mods/WORLD/dfcaverns/df_mapitems/crystals_mese.lua b/mods/WORLD/dfcaverns/df_mapitems/crystals_mese.lua
index 7629ff9..998b014 100644
--- a/mods/WORLD/dfcaverns/df_mapitems/crystals_mese.lua
+++ b/mods/WORLD/dfcaverns/df_mapitems/crystals_mese.lua
@@ -11,7 +11,7 @@ minetest.register_node("df_mapitems:glow_mese", {
is_ground_content = false,
light_source = 13,
paramtype = "light",
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
drawtype = "glasslike",
sunlight_propagates = true,
})
@@ -36,7 +36,7 @@ minetest.register_node("df_mapitems:mese_crystal", {
light_source = 12,
is_ground_content = false,
sounds = df_mapitems.sounds.glass,
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
sunlight_propagates = true,
on_place = df_mapitems.place_against_surface,
})
diff --git a/mods/WORLD/dfcaverns/df_mapitems/crystals_ruby.lua b/mods/WORLD/dfcaverns/df_mapitems/crystals_ruby.lua
index 056b016..a4ed9c9 100644
--- a/mods/WORLD/dfcaverns/df_mapitems/crystals_ruby.lua
+++ b/mods/WORLD/dfcaverns/df_mapitems/crystals_ruby.lua
@@ -20,7 +20,7 @@ minetest.register_node("df_mapitems:big_crystal", {
"dfcaverns_glow_ruby4x.png",
"dfcaverns_glow_ruby.png",
},
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
@@ -48,7 +48,7 @@ minetest.register_node("df_mapitems:med_crystal", {
"dfcaverns_glow_ruby.png",
"dfcaverns_glow_ruby_quarter.png",
},
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
@@ -77,7 +77,7 @@ minetest.register_node("df_mapitems:big_crystal_30", {
"dfcaverns_glow_ruby4x.png",
"dfcaverns_glow_ruby.png",
},
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
@@ -129,7 +129,7 @@ minetest.register_node("df_mapitems:med_crystal_30", {
"dfcaverns_glow_ruby.png",
"dfcaverns_glow_ruby_quarter.png",
},
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
@@ -166,7 +166,7 @@ minetest.register_node("df_mapitems:big_crystal_30_45", {
"dfcaverns_glow_ruby4x.png",
"dfcaverns_glow_ruby.png",
},
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
@@ -204,7 +204,7 @@ minetest.register_node("df_mapitems:med_crystal_30_45", {
"dfcaverns_glow_ruby4x.png",
"dfcaverns_glow_ruby.png",
},
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
diff --git a/mods/WORLD/dfcaverns/df_mapitems/crystals_salt.lua b/mods/WORLD/dfcaverns/df_mapitems/crystals_salt.lua
index a749ecb..8b9b12d 100644
--- a/mods/WORLD/dfcaverns/df_mapitems/crystals_salt.lua
+++ b/mods/WORLD/dfcaverns/df_mapitems/crystals_salt.lua
@@ -12,7 +12,7 @@ minetest.register_node("df_mapitems:salt_crystal", {
mesh = "underch_crystal.obj",
light_source = 6,
sounds = df_mapitems.sounds.glass,
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
sunlight_propagates = true,
is_ground_content = false,
on_place = df_mapitems.place_against_surface,
diff --git a/mods/WORLD/dfcaverns/df_primordial_items/ceiling_fungus.lua b/mods/WORLD/dfcaverns/df_primordial_items/ceiling_fungus.lua
index 26785bb..a76a69b 100644
--- a/mods/WORLD/dfcaverns/df_primordial_items/ceiling_fungus.lua
+++ b/mods/WORLD/dfcaverns/df_primordial_items/ceiling_fungus.lua
@@ -45,7 +45,7 @@ minetest.register_node("df_primordial_items:glow_orb_hanging", {
walkable = false,
light_source = 6,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
diff --git a/mods/WORLD/dfcaverns/df_primordial_items/fungal_nodes.lua b/mods/WORLD/dfcaverns/df_primordial_items/fungal_nodes.lua
index 4556485..9d76e4d 100644
--- a/mods/WORLD/dfcaverns/df_primordial_items/fungal_nodes.lua
+++ b/mods/WORLD/dfcaverns/df_primordial_items/fungal_nodes.lua
@@ -19,7 +19,7 @@ minetest.register_node("df_primordial_items:fungal_grass_1", {
is_ground_content = false,
walkable = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -38,7 +38,7 @@ minetest.register_node("df_primordial_items:fungal_grass_2", {
walkable = false,
place_param2 = 3,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -59,7 +59,7 @@ minetest.register_node("df_primordial_items:glow_orb", {
walkable = false,
light_source = 9,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -78,7 +78,7 @@ minetest.register_node("df_primordial_items:glow_orb_stalks", {
walkable = false,
light_source = 6,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -110,7 +110,7 @@ minetest.register_node("df_primordial_items:glow_pods", {
walkable = false,
light_source = 6,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
diff --git a/mods/WORLD/dfcaverns/df_primordial_items/giant_fern.lua b/mods/WORLD/dfcaverns/df_primordial_items/giant_fern.lua
index 00cc90b..35c6aa2 100644
--- a/mods/WORLD/dfcaverns/df_primordial_items/giant_fern.lua
+++ b/mods/WORLD/dfcaverns/df_primordial_items/giant_fern.lua
@@ -162,7 +162,7 @@ minetest.register_node("df_primordial_items:giant_fern_leaves", {
walkable = false,
waving = 2,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
after_place_node = df_primordial_items.after_place_leaves,
drop = {
@@ -280,7 +280,7 @@ minetest.register_node("df_primordial_items:fern_sapling", {
is_ground_content = false,
walkable = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
on_construct = function(pos)
if minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name, "soil") == 0 then
diff --git a/mods/WORLD/dfcaverns/df_primordial_items/jungle_mushroom.lua b/mods/WORLD/dfcaverns/df_primordial_items/jungle_mushroom.lua
index 9d30653..da3de57 100644
--- a/mods/WORLD/dfcaverns/df_primordial_items/jungle_mushroom.lua
+++ b/mods/WORLD/dfcaverns/df_primordial_items/jungle_mushroom.lua
@@ -105,7 +105,7 @@ minetest.register_node("df_primordial_items:jungle_mushroom_sapling", {
is_ground_content = false,
walkable = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
on_construct = function(pos)
diff --git a/mods/WORLD/dfcaverns/df_primordial_items/jungle_nodes.lua b/mods/WORLD/dfcaverns/df_primordial_items/jungle_nodes.lua
index 083a77d..ae5ad57 100644
--- a/mods/WORLD/dfcaverns/df_primordial_items/jungle_nodes.lua
+++ b/mods/WORLD/dfcaverns/df_primordial_items/jungle_nodes.lua
@@ -19,7 +19,7 @@ minetest.register_node("df_primordial_items:fern_1", {
is_ground_content = false,
walkable = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -39,7 +39,7 @@ minetest.register_node("df_primordial_items:fern_2", {
is_ground_content = false,
walkable = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -75,7 +75,7 @@ minetest.register_node("df_primordial_items:glow_plant_1", {
},
},
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -96,7 +96,7 @@ minetest.register_node("df_primordial_items:glow_plant_2", {
drop = "df_primordial_items:glowtato",
light_source = 6,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -117,7 +117,7 @@ minetest.register_node("df_primordial_items:glow_plant_3", {
walkable = false,
light_source = 6,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -140,7 +140,7 @@ minetest.register_node("df_primordial_items:jungle_grass_1", {
is_ground_content = false,
walkable = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -160,7 +160,7 @@ minetest.register_node("df_primordial_items:jungle_grass_2", {
walkable = false,
place_param2 = 3,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -180,7 +180,7 @@ minetest.register_node("df_primordial_items:jungle_grass_3", {
walkable = false,
place_param2 = 3,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -202,7 +202,7 @@ minetest.register_node("df_primordial_items:jungle_ivy", {
--paramtype2 = "wallmouinted",
--drawtype = "signlike",
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
is_ground_content = false,
walkable = false,
@@ -229,7 +229,7 @@ minetest.register_node("df_primordial_items:jungle_mushroom_1", {
is_ground_content = false,
walkable = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -247,7 +247,7 @@ minetest.register_node("df_primordial_items:jungle_mushroom_2", {
is_ground_content = false,
walkable = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
})
@@ -363,7 +363,7 @@ minetest.register_node("df_primordial_items:jungle_roots_1", {
paramtype = "light",
drawtype = "plantlike",
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
walkable = false,
climbable = true,
@@ -381,7 +381,7 @@ minetest.register_node("df_primordial_items:jungle_roots_2", {
paramtype = "light",
drawtype = "plantlike",
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
is_ground_content = false,
sunlight_propagates = true,
walkable = false,
@@ -406,7 +406,7 @@ minetest.register_node("df_primordial_items:jungle_thorns", {
is_ground_content = false,
place_param2 = 3,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
damage_per_second = 1,
})
diff --git a/mods/WORLD/dfcaverns/df_primordial_items/jungle_tree.lua b/mods/WORLD/dfcaverns/df_primordial_items/jungle_tree.lua
index 5d65aa8..4aef551 100644
--- a/mods/WORLD/dfcaverns/df_primordial_items/jungle_tree.lua
+++ b/mods/WORLD/dfcaverns/df_primordial_items/jungle_tree.lua
@@ -234,7 +234,7 @@ minetest.register_node("df_primordial_items:jungletree_sapling", {
walkable = false,
is_ground_content = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
on_construct = function(pos)
if minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name, "soil") == 0 then
diff --git a/mods/WORLD/dfcaverns/df_primordial_items/primordial_mushroom.lua b/mods/WORLD/dfcaverns/df_primordial_items/primordial_mushroom.lua
index e5f14c2..0668644 100644
--- a/mods/WORLD/dfcaverns/df_primordial_items/primordial_mushroom.lua
+++ b/mods/WORLD/dfcaverns/df_primordial_items/primordial_mushroom.lua
@@ -38,7 +38,7 @@ minetest.register_node("df_primordial_items:mushroom_gills", {
walkable = false,
is_ground_content = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
drop = {
max_items = 1,
@@ -71,7 +71,7 @@ minetest.register_node("df_primordial_items:mushroom_gills_glowing", {
is_ground_content = false,
light_source = 6,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
drop = {
max_items = 1,
@@ -702,7 +702,7 @@ minetest.register_node("df_primordial_items:mush_sapling", {
walkable = false,
is_ground_content = false,
sounds = df_primordial_items.sounds.leaves,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
sunlight_propagates = true,
on_construct = function(pos)
if minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name, "soil") == 0 then
diff --git a/mods/WORLD/dfcaverns/df_underworld_items/crystals_amethyst.lua b/mods/WORLD/dfcaverns/df_underworld_items/crystals_amethyst.lua
index 02f6737..bf0be4b 100644
--- a/mods/WORLD/dfcaverns/df_underworld_items/crystals_amethyst.lua
+++ b/mods/WORLD/dfcaverns/df_underworld_items/crystals_amethyst.lua
@@ -10,7 +10,7 @@ minetest.register_node("df_underworld_items:glow_amethyst", {
sounds = default.node_sound_glass_defaults(),
light_source = 6,
paramtype = "light",
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
drawtype = "glasslike",
sunlight_propagates = true,
})
diff --git a/mods/WORLD/dfcaverns/df_underworld_items/glow_stone.lua b/mods/WORLD/dfcaverns/df_underworld_items/glow_stone.lua
index fc2e3d0..65c205c 100644
--- a/mods/WORLD/dfcaverns/df_underworld_items/glow_stone.lua
+++ b/mods/WORLD/dfcaverns/df_underworld_items/glow_stone.lua
@@ -21,7 +21,7 @@ local glowstone_def = {
groups = {cracky=3},
sounds = default.node_sound_glass_defaults(),
paramtype = "light",
- --use_texture_alpha = true,
+ -- use_texture_alpha = "blend",
drawtype = "glasslike",
drop = "",
sunlight_propagates = true,
diff --git a/mods/WORLD/dfcaverns/mine_gas/init.lua b/mods/WORLD/dfcaverns/mine_gas/init.lua
index 4129e3a..1356aa2 100644
--- a/mods/WORLD/dfcaverns/mine_gas/init.lua
+++ b/mods/WORLD/dfcaverns/mine_gas/init.lua
@@ -38,7 +38,7 @@ minetest.register_node("mine_gas:gas", {
drowning = 1,
post_effect_color = {a = 20, r = 20, g = 20, b = 250},
tiles = {"mine_gas.png^[opacity:28"},
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
groups = {not_in_creative_inventory=1, ropes_can_extend_into=1},
paramtype = "light",
drop = {},
diff --git a/mods/WORLD/dfcaverns/mine_gas/wisp.lua b/mods/WORLD/dfcaverns/mine_gas/wisp.lua
index 5627a70..fd4e42a 100644
--- a/mods/WORLD/dfcaverns/mine_gas/wisp.lua
+++ b/mods/WORLD/dfcaverns/mine_gas/wisp.lua
@@ -31,7 +31,7 @@ minetest.register_node("mine_gas:gas_wisp", {
},
}},
light_source = 10,
- use_texture_alpha = true,
+ use_texture_alpha = "clip",
groups = {not_in_creative_inventory=0},
paramtype = "light",
paramtype2 = "meshoptions",
diff --git a/mods/WORLD/other_worlds/crystals.lua b/mods/WORLD/other_worlds/crystals.lua
index 43d902f..a0864bc 100644
--- a/mods/WORLD/other_worlds/crystals.lua
+++ b/mods/WORLD/other_worlds/crystals.lua
@@ -24,7 +24,7 @@ for i in ipairs(crystal_list) do
selection_box = sbox,
walkable = false,
light_source = 10,
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
visual_scale = 10,
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3,},
sounds = default.node_sound_glass_defaults(),
@@ -40,7 +40,7 @@ for i in ipairs(crystal_list) do
selection_box = sbox,
walkable = false,
light_source = 10,
- use_texture_alpha = true,
+ use_texture_alpha = "blend",
visual_scale = 10,
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3,},
sounds = default.node_sound_glass_defaults(),
diff --git a/mods_disabled/jumpdrive/doc/lua_api.txt b/mods_disabled/jumpdrive/doc/lua_api.txt
deleted file mode 100644
index 907f47e..0000000
--- a/mods_disabled/jumpdrive/doc/lua_api.txt
+++ /dev/null
@@ -1,7408 +0,0 @@
-Minetest Lua Modding API Reference
-==================================
-
-* More information at
-* Developer Wiki:
-* (Unofficial) Minetest Modding Book by rubenwardy:
-
-Introduction
-------------
-
-Content and functionality can be added to Minetest using Lua scripting
-in run-time loaded mods.
-
-A mod is a self-contained bunch of scripts, textures and other related
-things, which is loaded by and interfaces with Minetest.
-
-Mods are contained and ran solely on the server side. Definitions and media
-files are automatically transferred to the client.
-
-If you see a deficiency in the API, feel free to attempt to add the
-functionality in the engine and API, and to document it here.
-
-Programming in Lua
-------------------
-
-If you have any difficulty in understanding this, please read
-[Programming in Lua](http://www.lua.org/pil/).
-
-Startup
--------
-
-Mods are loaded during server startup from the mod load paths by running
-the `init.lua` scripts in a shared environment.
-
-Paths
------
-
-* `RUN_IN_PLACE=1` (Windows release, local build)
- * `$path_user`: ``
- * `$path_share`: ``
-* `RUN_IN_PLACE=0`: (Linux release)
- * `$path_share`:
- * Linux: `/usr/share/minetest`
- * Windows: `/minetest-0.4.x`
- * `$path_user`:
- * Linux: `$HOME/.minetest`
- * Windows: `C:/users//AppData/minetest` (maybe)
-
-
-
-
-Games
-=====
-
-Games are looked up from:
-
-* `$path_share/games//`
-* `$path_user/games//`
-
-Where `` is unique to each game.
-
-The game directory can contain the following files:
-
-* `game.conf`, with the following keys:
- * `name`: Required, human readable name e.g. `name = Minetest`
- * `description`: Short description to be shown in the content tab
- * `disallowed_mapgens = `
- e.g. `disallowed_mapgens = v5,v6,flat`
- These mapgens are removed from the list of mapgens for the game.
-* `minetest.conf`:
- Used to set default settings when running this game.
-* `settingtypes.txt`:
- In the same format as the one in builtin.
- This settingtypes.txt will be parsed by the menu and the settings will be
- displayed in the "Games" category in the advanced settings tab.
-* If the game contains a folder called `textures` the server will load it as a
- texturepack, overriding mod textures.
- Any server texturepack will override mod textures and the game texturepack.
-
-Menu images
------------
-
-Games can provide custom main menu images. They are put inside a `menu`
-directory inside the game directory.
-
-The images are named `$identifier.png`, where `$identifier` is one of
-`overlay`, `background`, `footer`, `header`.
-If you want to specify multiple images for one identifier, add additional
-images named like `$identifier.$n.png`, with an ascending number $n starting
-with 1, and a random image will be chosen from the provided ones.
-
-
-
-
-Mods
-====
-
-Mod load path
--------------
-
-Paths are relative to the directories listed in the [Paths] section above.
-
-* `games//mods/`
-* `mods/`
-* `worlds//worldmods/`
-
-World-specific games
---------------------
-
-It is possible to include a game in a world; in this case, no mods or
-games are loaded or checked from anywhere else.
-
-This is useful for e.g. adventure worlds and happens if the `/game/`
-directory exists.
-
-Mods should then be placed in `/game/mods/`.
-
-Modpacks
---------
-
-Mods can be put in a subdirectory, if the parent directory, which otherwise
-should be a mod, contains a file named `modpack.conf`.
-The file is a key-value store of modpack details.
-
-* `name`: The modpack name.
-* `description`: Description of mod to be shown in the Mods tab of the main
- menu.
-
-Note: to support 0.4.x, please also create an empty modpack.txt file.
-
-Mod directory structure
------------------------
-
- mods
- ├── modname
- │ ├── mod.conf
- │ ├── screenshot.png
- │ ├── settingtypes.txt
- │ ├── init.lua
- │ ├── models
- │ ├── textures
- │ │ ├── modname_stuff.png
- │ │ └── modname_something_else.png
- │ ├── sounds
- │ ├── media
- │ ├── locale
- │ └──
- └── another
-
-### modname
-
-The location of this directory can be fetched by using
-`minetest.get_modpath(modname)`.
-
-### mod.conf
-
-A `Settings` file that provides meta information about the mod.
-
-* `name`: The mod name. Allows Minetest to determine the mod name even if the
- folder is wrongly named.
-* `description`: Description of mod to be shown in the Mods tab of the main
- menu.
-* `depends`: A comma separated list of dependencies. These are mods that must be
- loaded before this mod.
-* `optional_depends`: A comma separated list of optional dependencies.
- Like a dependency, but no error if the mod doesn't exist.
-
-Note: to support 0.4.x, please also provide depends.txt.
-
-### `screenshot.png`
-
-A screenshot shown in the mod manager within the main menu. It should
-have an aspect ratio of 3:2 and a minimum size of 300×200 pixels.
-
-### `depends.txt`
-
-**Deprecated:** you should use mod.conf instead.
-
-This file is used if there are no dependencies in mod.conf.
-
-List of mods that have to be loaded before loading this mod.
-
-A single line contains a single modname.
-
-Optional dependencies can be defined by appending a question mark
-to a single modname. This means that if the specified mod
-is missing, it does not prevent this mod from being loaded.
-
-### `description.txt`
-
-**Deprecated:** you should use mod.conf instead.
-
-This file is used if there is no description in mod.conf.
-
-A file containing a description to be shown in the Mods tab of the main menu.
-
-### `settingtypes.txt`
-
-The format is documented in `builtin/settingtypes.txt`.
-It is parsed by the main menu settings dialogue to list mod-specific
-settings in the "Mods" category.
-
-### `init.lua`
-
-The main Lua script. Running this script should register everything it
-wants to register. Subsequent execution depends on minetest calling the
-registered callbacks.
-
-`minetest.settings` can be used to read custom or existing settings at load
-time, if necessary. (See [`Settings`])
-
-### `models`
-
-Models for entities or meshnodes.
-
-### `textures`, `sounds`, `media`
-
-Media files (textures, sounds, whatever) that will be transferred to the
-client and will be available for use by the mod.
-
-### `locale`
-
-Translation files for the clients. (See [Translations])
-
-Naming conventions
-------------------
-
-Registered names should generally be in this format:
-
- modname:
-
-`` can have these characters:
-
- a-zA-Z0-9_
-
-This is to prevent conflicting names from corrupting maps and is
-enforced by the mod loader.
-
-Registered names can be overridden by prefixing the name with `:`. This can
-be used for overriding the registrations of some other mod.
-
-The `:` prefix can also be used for maintaining backwards compatibility.
-
-### Example
-
-In the mod `experimental`, there is the ideal item/node/entity name `tnt`.
-So the name should be `experimental:tnt`.
-
-Any mod can redefine `experimental:tnt` by using the name
-
- :experimental:tnt
-
-when registering it. That mod is required to have `experimental` as a
-dependency.
-
-
-
-
-Aliases
-=======
-
-Aliases of itemnames can be added by using
-`minetest.register_alias(alias, original_name)` or
-`minetest.register_alias_force(alias, original_name)`.
-
-This adds an alias `alias` for the item called `original_name`.
-From now on, you can use `alias` to refer to the item `original_name`.
-
-The only difference between `minetest.register_alias` and
-`minetest.register_alias_force` is that if an item named `alias` already exists,
-`minetest.register_alias` will do nothing while
-`minetest.register_alias_force` will unregister it.
-
-This can be used for maintaining backwards compatibility.
-
-This can also set quick access names for things, e.g. if
-you have an item called `epiclylongmodname:stuff`, you could do
-
- minetest.register_alias("stuff", "epiclylongmodname:stuff")
-
-and be able to use `/giveme stuff`.
-
-Mapgen aliases
---------------
-
-In a game, a certain number of these must be set to tell core mapgens which
-of the game's nodes are to be used for core mapgen generation. For example:
-
- minetest.register_alias("mapgen_stone", "default:stone")
-
-### Aliases for non-V6 mapgens
-
-#### Essential aliases
-
-* mapgen_stone
-* mapgen_water_source
-* mapgen_river_water_source
-
-`mapgen_river_water_source` is required for mapgens with sloping rivers where
-it is necessary to have a river liquid node with a short `liquid_range` and
-`liquid_renewable = false` to avoid flooding.
-
-#### Optional aliases
-
-* mapgen_lava_source
-
-Fallback lava node used if cave liquids are not defined in biome definitions.
-Deprecated for non-V6 mapgens, define cave liquids in biome definitions instead.
-
-* mapgen_cobble
-
-Fallback node used if dungeon nodes are not defined in biome definitions.
-Deprecated for non-V6 mapgens, define dungeon nodes in biome definitions instead.
-
-### Aliases needed for Mapgen V6
-
-* mapgen_stone
-* mapgen_water_source
-* mapgen_lava_source
-* mapgen_dirt
-* mapgen_dirt_with_grass
-* mapgen_sand
-* mapgen_gravel
-* mapgen_desert_stone
-* mapgen_desert_sand
-* mapgen_dirt_with_snow
-* mapgen_snowblock
-* mapgen_snow
-* mapgen_ice
-
-* mapgen_tree
-* mapgen_leaves
-* mapgen_apple
-* mapgen_jungletree
-* mapgen_jungleleaves
-* mapgen_junglegrass
-* mapgen_pine_tree
-* mapgen_pine_needles
-
-* mapgen_cobble
-* mapgen_stair_cobble
-* mapgen_mossycobble
-* mapgen_stair_desert_stone
-
-### Setting the node used in Mapgen Singlenode
-
-By default the world is filled with air nodes. To set a different node use, for
-example:
-
- minetest.register_alias("mapgen_singlenode", "default:stone")
-
-
-
-
-Textures
-========
-
-Mods should generally prefix their textures with `modname_`, e.g. given
-the mod name `foomod`, a texture could be called:
-
- foomod_foothing.png
-
-Textures are referred to by their complete name, or alternatively by
-stripping out the file extension:
-
-* e.g. `foomod_foothing.png`
-* e.g. `foomod_foothing`
-
-Texture modifiers
------------------
-
-There are various texture modifiers that can be used
-to generate textures on-the-fly.
-
-### Texture overlaying
-
-Textures can be overlaid by putting a `^` between them.
-
-Example:
-
- default_dirt.png^default_grass_side.png
-
-`default_grass_side.png` is overlaid over `default_dirt.png`.
-The texture with the lower resolution will be automatically upscaled to
-the higher resolution texture.
-
-### Texture grouping
-
-Textures can be grouped together by enclosing them in `(` and `)`.
-
-Example: `cobble.png^(thing1.png^thing2.png)`
-
-A texture for `thing1.png^thing2.png` is created and the resulting
-texture is overlaid on top of `cobble.png`.
-
-### Escaping
-
-Modifiers that accept texture names (e.g. `[combine`) accept escaping to allow
-passing complex texture names as arguments. Escaping is done with backslash and
-is required for `^` and `:`.
-
-Example: `cobble.png^[lowpart:50:color.png\^[mask\:trans.png`
-
-The lower 50 percent of `color.png^[mask:trans.png` are overlaid
-on top of `cobble.png`.
-
-### Advanced texture modifiers
-
-#### Crack
-
-* `[crack::
`
-* `[cracko::
`
-* `[crack:::
`
-* `[cracko:::
`
-
-Parameters:
-
-* ``: tile count (in each direction)
-* ``: animation frame count
-* `
`: current animation frame
-
-Draw a step of the crack animation on the texture.
-`crack` draws it normally, while `cracko` lays it over, keeping transparent
-pixels intact.
-
-Example:
-
- default_cobble.png^[crack:10:1
-
-#### `[combine:x:,=:,=:...`
-
-* ``: width
-* ``: height
-* ``: x position
-* ``: y position
-* ``: texture to combine
-
-Creates a texture of size `` times `` and blits the listed files to their
-specified coordinates.
-
-Example:
-
- [combine:16x32:0,0=default_cobble.png:0,16=default_wood.png
-
-#### `[resize:x`
-
-Resizes the texture to the given dimensions.
-
-Example:
-
- default_sandstone.png^[resize:16x16
-
-#### `[opacity:`
-
-Makes the base image transparent according to the given ratio.
-
-`r` must be between 0 (transparent) and 255 (opaque).
-
-Example:
-
- default_sandstone.png^[opacity:127
-
-#### `[invert:`
-
-Inverts the given channels of the base image.
-Mode may contain the characters "r", "g", "b", "a".
-Only the channels that are mentioned in the mode string will be inverted.
-
-Example:
-
- default_apple.png^[invert:rgb
-
-#### `[brighten`
-
-Brightens the texture.
-
-Example:
-
- tnt_tnt_side.png^[brighten
-
-#### `[noalpha`
-
-Makes the texture completely opaque.
-
-Example:
-
- default_leaves.png^[noalpha
-
-#### `[makealpha:,,`
-
-Convert one color to transparency.
-
-Example:
-
- default_cobble.png^[makealpha:128,128,128
-
-#### `[transform`
-
-* ``: transformation(s) to apply
-
-Rotates and/or flips the image.
-
-`` can be a number (between 0 and 7) or a transform name.
-Rotations are counter-clockwise.
-
- 0 I identity
- 1 R90 rotate by 90 degrees
- 2 R180 rotate by 180 degrees
- 3 R270 rotate by 270 degrees
- 4 FX flip X
- 5 FXR90 flip X then rotate by 90 degrees
- 6 FY flip Y
- 7 FYR90 flip Y then rotate by 90 degrees
-
-Example:
-
- default_stone.png^[transformFXR90
-
-#### `[inventorycube{{{`
-
-Escaping does not apply here and `^` is replaced by `&` in texture names
-instead.
-
-Create an inventory cube texture using the side textures.
-
-Example:
-
- [inventorycube{grass.png{dirt.png&grass_side.png{dirt.png&grass_side.png
-
-Creates an inventorycube with `grass.png`, `dirt.png^grass_side.png` and
-`dirt.png^grass_side.png` textures
-
-#### `[lowpart::`
-
-Blit the lower ``% part of `` on the texture.
-
-Example:
-
- base.png^[lowpart:25:overlay.png
-
-#### `[verticalframe::`
-
-* ``: animation frame count
-* ``: current animation frame
-
-Crops the texture to a frame of a vertical animation.
-
-Example:
-
- default_torch_animated.png^[verticalframe:16:8
-
-#### `[mask:`
-
-Apply a mask to the base image.
-
-The mask is applied using binary AND.
-
-#### `[sheet:x:,`
-
-Retrieves a tile at position x,y from the base image
-which it assumes to be a tilesheet with dimensions w,h.
-
-#### `[colorize::`
-
-Colorize the textures with the given color.
-`` is specified as a `ColorString`.
-`` is an int ranging from 0 to 255 or the word "`alpha`". If
-it is an int, then it specifies how far to interpolate between the
-colors where 0 is only the texture color and 255 is only ``. If
-omitted, the alpha of `` will be used as the ratio. If it is
-the word "`alpha`", then each texture pixel will contain the RGB of
-`` and the alpha of `` multiplied by the alpha of the
-texture pixel.
-
-#### `[multiply:`
-
-Multiplies texture colors with the given color.
-`` is specified as a `ColorString`.
-Result is more like what you'd expect if you put a color on top of another
-color, meaning white surfaces get a lot of your new color while black parts
-don't change very much.
-
-Hardware coloring
------------------
-
-The goal of hardware coloring is to simplify the creation of
-colorful nodes. If your textures use the same pattern, and they only
-differ in their color (like colored wool blocks), you can use hardware
-coloring instead of creating and managing many texture files.
-All of these methods use color multiplication (so a white-black texture
-with red coloring will result in red-black color).
-
-### Static coloring
-
-This method is useful if you wish to create nodes/items with
-the same texture, in different colors, each in a new node/item definition.
-
-#### Global color
-
-When you register an item or node, set its `color` field (which accepts a
-`ColorSpec`) to the desired color.
-
-An `ItemStack`'s static color can be overwritten by the `color` metadata
-field. If you set that field to a `ColorString`, that color will be used.
-
-#### Tile color
-
-Each tile may have an individual static color, which overwrites every
-other coloring method. To disable the coloring of a face,
-set its color to white (because multiplying with white does nothing).
-You can set the `color` property of the tiles in the node's definition
-if the tile is in table format.
-
-### Palettes
-
-For nodes and items which can have many colors, a palette is more
-suitable. A palette is a texture, which can contain up to 256 pixels.
-Each pixel is one possible color for the node/item.
-You can register one node/item, which can have up to 256 colors.
-
-#### Palette indexing
-
-When using palettes, you always provide a pixel index for the given
-node or `ItemStack`. The palette is read from left to right and from
-top to bottom. If the palette has less than 256 pixels, then it is
-stretched to contain exactly 256 pixels (after arranging the pixels
-to one line). The indexing starts from 0.
-
-Examples:
-
-* 16x16 palette, index = 0: the top left corner
-* 16x16 palette, index = 4: the fifth pixel in the first row
-* 16x16 palette, index = 16: the pixel below the top left corner
-* 16x16 palette, index = 255: the bottom right corner
-* 2 (width) x 4 (height) palette, index = 31: the top left corner.
- The palette has 8 pixels, so each pixel is stretched to 32 pixels,
- to ensure the total 256 pixels.
-* 2x4 palette, index = 32: the top right corner
-* 2x4 palette, index = 63: the top right corner
-* 2x4 palette, index = 64: the pixel below the top left corner
-
-#### Using palettes with items
-
-When registering an item, set the item definition's `palette` field to
-a texture. You can also use texture modifiers.
-
-The `ItemStack`'s color depends on the `palette_index` field of the
-stack's metadata. `palette_index` is an integer, which specifies the
-index of the pixel to use.
-
-#### Linking palettes with nodes
-
-When registering a node, set the item definition's `palette` field to
-a texture. You can also use texture modifiers.
-The node's color depends on its `param2`, so you also must set an
-appropriate `paramtype2`:
-
-* `paramtype2 = "color"` for nodes which use their full `param2` for
- palette indexing. These nodes can have 256 different colors.
- The palette should contain 256 pixels.
-* `paramtype2 = "colorwallmounted"` for nodes which use the first
- five bits (most significant) of `param2` for palette indexing.
- The remaining three bits are describing rotation, as in `wallmounted`
- paramtype2. Division by 8 yields the palette index (without stretching the
- palette). These nodes can have 32 different colors, and the palette
- should contain 32 pixels.
- Examples:
- * `param2 = 17` is 2 * 8 + 1, so the rotation is 1 and the third (= 2 + 1)
- pixel will be picked from the palette.
- * `param2 = 35` is 4 * 8 + 3, so the rotation is 3 and the fifth (= 4 + 1)
- pixel will be picked from the palette.
-* `paramtype2 = "colorfacedir"` for nodes which use the first
- three bits of `param2` for palette indexing. The remaining
- five bits are describing rotation, as in `facedir` paramtype2.
- Division by 32 yields the palette index (without stretching the
- palette). These nodes can have 8 different colors, and the
- palette should contain 8 pixels.
- Examples:
- * `param2 = 17` is 0 * 32 + 17, so the rotation is 17 and the
- first (= 0 + 1) pixel will be picked from the palette.
- * `param2 = 35` is 1 * 32 + 3, so the rotation is 3 and the
- second (= 1 + 1) pixel will be picked from the palette.
-
-To colorize a node on the map, set its `param2` value (according
-to the node's paramtype2).
-
-### Conversion between nodes in the inventory and on the map
-
-Static coloring is the same for both cases, there is no need
-for conversion.
-
-If the `ItemStack`'s metadata contains the `color` field, it will be
-lost on placement, because nodes on the map can only use palettes.
-
-If the `ItemStack`'s metadata contains the `palette_index` field, it is
-automatically transferred between node and item forms by the engine,
-when a player digs or places a colored node.
-You can disable this feature by setting the `drop` field of the node
-to itself (without metadata).
-To transfer the color to a special drop, you need a drop table.
-
-Example:
-
- minetest.register_node("mod:stone", {
- description = "Stone",
- tiles = {"default_stone.png"},
- paramtype2 = "color",
- palette = "palette.png",
- drop = {
- items = {
- -- assume that mod:cobblestone also has the same palette
- {items = {"mod:cobblestone"}, inherit_color = true },
- }
- }
- })
-
-### Colored items in craft recipes
-
-Craft recipes only support item strings, but fortunately item strings
-can also contain metadata. Example craft recipe registration:
-
- minetest.register_craft({
- output = minetest.itemstring_with_palette("wool:block", 3),
- type = "shapeless",
- recipe = {
- "wool:block",
- "dye:red",
- },
- })
-
-To set the `color` field, you can use `minetest.itemstring_with_color`.
-
-Metadata field filtering in the `recipe` field are not supported yet,
-so the craft output is independent of the color of the ingredients.
-
-Soft texture overlay
---------------------
-
-Sometimes hardware coloring is not enough, because it affects the
-whole tile. Soft texture overlays were added to Minetest to allow
-the dynamic coloring of only specific parts of the node's texture.
-For example a grass block may have colored grass, while keeping the
-dirt brown.
-
-These overlays are 'soft', because unlike texture modifiers, the layers
-are not merged in the memory, but they are simply drawn on top of each
-other. This allows different hardware coloring, but also means that
-tiles with overlays are drawn slower. Using too much overlays might
-cause FPS loss.
-
-For inventory and wield images you can specify overlays which
-hardware coloring does not modify. You have to set `inventory_overlay`
-and `wield_overlay` fields to an image name.
-
-To define a node overlay, simply set the `overlay_tiles` field of the node
-definition. These tiles are defined in the same way as plain tiles:
-they can have a texture name, color etc.
-To skip one face, set that overlay tile to an empty string.
-
-Example (colored grass block):
-
- minetest.register_node("default:dirt_with_grass", {
- description = "Dirt with Grass",
- -- Regular tiles, as usual
- -- The dirt tile disables palette coloring
- tiles = {{name = "default_grass.png"},
- {name = "default_dirt.png", color = "white"}},
- -- Overlay tiles: define them in the same style
- -- The top and bottom tile does not have overlay
- overlay_tiles = {"", "",
- {name = "default_grass_side.png", tileable_vertical = false}},
- -- Global color, used in inventory
- color = "green",
- -- Palette in the world
- paramtype2 = "color",
- palette = "default_foilage.png",
- })
-
-
-
-
-Sounds
-======
-
-Only Ogg Vorbis files are supported.
-
-For positional playing of sounds, only single-channel (mono) files are
-supported. Otherwise OpenAL will play them non-positionally.
-
-Mods should generally prefix their sounds with `modname_`, e.g. given
-the mod name "`foomod`", a sound could be called:
-
- foomod_foosound.ogg
-
-Sounds are referred to by their name with a dot, a single digit and the
-file extension stripped out. When a sound is played, the actual sound file
-is chosen randomly from the matching sounds.
-
-When playing the sound `foomod_foosound`, the sound is chosen randomly
-from the available ones of the following files:
-
-* `foomod_foosound.ogg`
-* `foomod_foosound.0.ogg`
-* `foomod_foosound.1.ogg`
-* (...)
-* `foomod_foosound.9.ogg`
-
-Examples of sound parameter tables:
-
- -- Play locationless on all clients
- {
- gain = 1.0, -- default
- fade = 0.0, -- default, change to a value > 0 to fade the sound in
- pitch = 1.0, -- default
- }
- -- Play locationless to one player
- {
- to_player = name,
- gain = 1.0, -- default
- fade = 0.0, -- default, change to a value > 0 to fade the sound in
- pitch = 1.0, -- default
- }
- -- Play locationless to one player, looped
- {
- to_player = name,
- gain = 1.0, -- default
- loop = true,
- }
- -- Play in a location
- {
- pos = {x = 1, y = 2, z = 3},
- gain = 1.0, -- default
- max_hear_distance = 32, -- default, uses an euclidean metric
- }
- -- Play connected to an object, looped
- {
- object = ,
- gain = 1.0, -- default
- max_hear_distance = 32, -- default, uses an euclidean metric
- loop = true,
- }
-
-Looped sounds must either be connected to an object or played locationless to
-one player using `to_player = name,`.
-
-A positional sound will only be heard by players that are within
-`max_hear_distance` of the sound position, at the start of the sound.
-
-`SimpleSoundSpec`
------------------
-
-* e.g. `""`
-* e.g. `"default_place_node"`
-* e.g. `{}`
-* e.g. `{name = "default_place_node"}`
-* e.g. `{name = "default_place_node", gain = 1.0}`
-* e.g. `{name = "default_place_node", gain = 1.0, pitch = 1.0}`
-
-
-Special sound files
--------------------
-
-These sound files are played back by the engine if provided.
-
- * `main_menu`: Looped sound in the main menu (gain = 1.0)
- * `player_damage`: Played when the local player takes damage (gain = 0.5)
- * `player_falling_damage`: Played when the local player takes
- damage by falling (gain = 0.5)
-
-
-Registered definitions
-======================
-
-Anything added using certain [Registration functions] gets added to one or more
-of the global [Registered definition tables].
-
-Note that in some cases you will stumble upon things that are not contained
-in these tables (e.g. when a mod has been removed). Always check for
-existence before trying to access the fields.
-
-Example:
-
-All nodes register with `minetest.register_node` get added to the table
-`minetest.registered_nodes`.
-
-If you want to check the drawtype of a node, you could do:
-
- local function get_nodedef_field(nodename, fieldname)
- if not minetest.registered_nodes[nodename] then
- return nil
- end
- return minetest.registered_nodes[nodename][fieldname]
- end
- local drawtype = get_nodedef_field(nodename, "drawtype")
-
-
-
-
-Nodes
-=====
-
-Nodes are the bulk data of the world: cubes and other things that take the
-space of a cube. Huge amounts of them are handled efficiently, but they
-are quite static.
-
-The definition of a node is stored and can be accessed by using
-
- minetest.registered_nodes[node.name]
-
-See [Registered definitions].
-
-Nodes are passed by value between Lua and the engine.
-They are represented by a table:
-
- {name="name", param1=num, param2=num}
-
-`param1` and `param2` are 8-bit integers ranging from 0 to 255. The engine uses
-them for certain automated functions. If you don't use these functions, you can
-use them to store arbitrary values.
-
-Node paramtypes
----------------
-
-The functions of `param1` and `param2` are determined by certain fields in the
-node definition.
-
-`param1` is reserved for the engine when `paramtype != "none"`:
-
-* `paramtype = "light"`
- * The value stores light with and without sun in its upper and lower 4 bits
- respectively.
- * Required by a light source node to enable spreading its light.
- * Required by the following drawtypes as they determine their visual
- brightness from their internal light value:
- * torchlike
- * signlike
- * firelike
- * fencelike
- * raillike
- * nodebox
- * mesh
- * plantlike
- * plantlike_rooted
-
-`param2` is reserved for the engine when any of these are used:
-
-* `liquidtype = "flowing"`
- * The level and some flags of the liquid is stored in `param2`
-* `drawtype = "flowingliquid"`
- * The drawn liquid level is read from `param2`
-* `drawtype = "torchlike"`
-* `drawtype = "signlike"`
-* `paramtype2 = "wallmounted"`
- * The rotation of the node is stored in `param2`. You can make this value
- by using `minetest.dir_to_wallmounted()`.
-* `paramtype2 = "facedir"`
- * The rotation of the node is stored in `param2`. Furnaces and chests are
- rotated this way. Can be made by using `minetest.dir_to_facedir()`.
- * Values range 0 - 23
- * facedir / 4 = axis direction:
- 0 = y+, 1 = z+, 2 = z-, 3 = x+, 4 = x-, 5 = y-
- * facedir modulo 4 = rotation around that axis
-* `paramtype2 = "leveled"`
- * Only valid for "nodebox" with 'type = "leveled"', and "plantlike_rooted".
- * Leveled nodebox:
- * The level of the top face of the nodebox is stored in `param2`.
- * The other faces are defined by 'fixed = {}' like 'type = "fixed"'
- nodeboxes.
- * The nodebox height is (`param2` / 64) nodes.
- * The maximum accepted value of `param2` is 127.
- * Rooted plantlike:
- * The height of the 'plantlike' section is stored in `param2`.
- * The height is (`param2` / 16) nodes.
-* `paramtype2 = "degrotate"`
- * Only valid for "plantlike". The rotation of the node is stored in
- `param2`.
- * Values range 0 - 179. The value stored in `param2` is multiplied by two to
- get the actual rotation in degrees of the node.
-* `paramtype2 = "meshoptions"`
- * Only valid for "plantlike". The value of `param2` becomes a bitfield which
- can be used to change how the client draws plantlike nodes.
- * Bits 0, 1 and 2 form a mesh selector.
- Currently the following meshes are choosable:
- * 0 = a "x" shaped plant (ordinary plant)
- * 1 = a "+" shaped plant (just rotated 45 degrees)
- * 2 = a "*" shaped plant with 3 faces instead of 2
- * 3 = a "#" shaped plant with 4 faces instead of 2
- * 4 = a "#" shaped plant with 4 faces that lean outwards
- * 5-7 are unused and reserved for future meshes.
- * Bits 3 through 7 are optional flags that can be combined and give these
- effects:
- * bit 3 (0x08) - Makes the plant slightly vary placement horizontally
- * bit 4 (0x10) - Makes the plant mesh 1.4x larger
- * bit 5 (0x20) - Moves each face randomly a small bit down (1/8 max)
- * bits 6-7 are reserved for future use.
-* `paramtype2 = "color"`
- * `param2` tells which color is picked from the palette.
- The palette should have 256 pixels.
-* `paramtype2 = "colorfacedir"`
- * Same as `facedir`, but with colors.
- * The first three bits of `param2` tells which color is picked from the
- palette. The palette should have 8 pixels.
-* `paramtype2 = "colorwallmounted"`
- * Same as `wallmounted`, but with colors.
- * The first five bits of `param2` tells which color is picked from the
- palette. The palette should have 32 pixels.
-* `paramtype2 = "glasslikeliquidlevel"`
- * Only valid for "glasslike_framed" or "glasslike_framed_optional"
- drawtypes.
- * `param2` values 0-63 define 64 levels of internal liquid, 0 being empty
- and 63 being full.
- * Liquid texture is defined using `special_tiles = {"modname_tilename.png"}`
-
-Nodes can also contain extra data. See [Node Metadata].
-
-Node drawtypes
---------------
-
-There are a bunch of different looking node types.
-
-Look for examples in `games/minimal` or `games/minetest_game`.
-
-* `normal`
- * A node-sized cube.
-* `airlike`
- * Invisible, uses no texture.
-* `liquid`
- * The cubic source node for a liquid.
-* `flowingliquid`
- * The flowing version of a liquid, appears with various heights and slopes.
-* `glasslike`
- * Often used for partially-transparent nodes.
- * Only external sides of textures are visible.
-* `glasslike_framed`
- * All face-connected nodes are drawn as one volume within a surrounding
- frame.
- * The frame appearance is generated from the edges of the first texture
- specified in `tiles`. The width of the edges used are 1/16th of texture
- size: 1 pixel for 16x16, 2 pixels for 32x32 etc.
- * The glass 'shine' (or other desired detail) on each node face is supplied
- by the second texture specified in `tiles`.
-* `glasslike_framed_optional`
- * This switches between the above 2 drawtypes according to the menu setting
- 'Connected Glass'.
-* `allfaces`
- * Often used for partially-transparent nodes.
- * External and internal sides of textures are visible.
-* `allfaces_optional`
- * Often used for leaves nodes.
- * This switches between `normal`, `glasslike` and `allfaces` according to
- the menu setting: Opaque Leaves / Simple Leaves / Fancy Leaves.
- * With 'Simple Leaves' selected, the texture specified in `special_tiles`
- is used instead, if present. This allows a visually thicker texture to be
- used to compensate for how `glasslike` reduces visual thickness.
-* `torchlike`
- * A single vertical texture.
- * If placed on top of a node, uses the first texture specified in `tiles`.
- * If placed against the underside of a node, uses the second texture
- specified in `tiles`.
- * If placed on the side of a node, uses the third texture specified in
- `tiles` and is perpendicular to that node.
-* `signlike`
- * A single texture parallel to, and mounted against, the top, underside or
- side of a node.
-* `plantlike`
- * Two vertical and diagonal textures at right-angles to each other.
- * See `paramtype2 = "meshoptions"` above for other options.
-* `firelike`
- * When above a flat surface, appears as 6 textures, the central 2 as
- `plantlike` plus 4 more surrounding those.
- * If not above a surface the central 2 do not appear, but the texture
- appears against the faces of surrounding nodes if they are present.
-* `fencelike`
- * A 3D model suitable for a wooden fence.
- * One placed node appears as a single vertical post.
- * Adjacently-placed nodes cause horizontal bars to appear between them.
-* `raillike`
- * Often used for tracks for mining carts.
- * Requires 4 textures to be specified in `tiles`, in order: Straight,
- curved, t-junction, crossing.
- * Each placed node automatically switches to a suitable rotated texture
- determined by the adjacent `raillike` nodes, in order to create a
- continuous track network.
- * Becomes a sloping node if placed against stepped nodes.
-* `nodebox`
- * Often used for stairs and slabs.
- * Allows defining nodes consisting of an arbitrary number of boxes.
- * See [Node boxes] below for more information.
-* `mesh`
- * Uses models for nodes.
- * Tiles should hold model materials textures.
- * Only static meshes are implemented.
- * For supported model formats see Irrlicht engine documentation.
-* `plantlike_rooted`
- * Enables underwater `plantlike` without air bubbles around the nodes.
- * Consists of a base cube at the co-ordinates of the node plus a
- `plantlike` extension above with a height of `param2 / 16` nodes.
- * The `plantlike` extension visually passes through any nodes above the
- base cube without affecting them.
- * The base cube texture tiles are defined as normal, the `plantlike`
- extension uses the defined special tile, for example:
- `special_tiles = {{name = "default_papyrus.png", tileable_vertical = true}},`
-
-`*_optional` drawtypes need less rendering time if deactivated
-(always client-side).
-
-Node boxes
-----------
-
-Node selection boxes are defined using "node boxes".
-
-A nodebox is defined as any of:
-
- {
- -- A normal cube; the default in most things
- type = "regular"
- }
- {
- -- A fixed box (or boxes) (facedir param2 is used, if applicable)
- type = "fixed",
- fixed = box OR {box1, box2, ...}
- }
- {
- -- A variable height box (or boxes) with the top face position defined
- -- by the node parameter 'leveled = ', or if 'paramtype2 == "leveled"'
- -- by param2.
- -- Other faces are defined by 'fixed = {}' as with 'type = "fixed"'.
- type = "leveled",
- fixed = box OR {box1, box2, ...}
- }
- {
- -- A box like the selection box for torches
- -- (wallmounted param2 is used, if applicable)
- type = "wallmounted",
- wall_top = box,
- wall_bottom = box,
- wall_side = box
- }
- {
- -- A node that has optional boxes depending on neighbouring nodes'
- -- presence and type. See also `connects_to`.
- type = "connected",
- fixed = box OR {box1, box2, ...}
- connect_top = box OR {box1, box2, ...}
- connect_bottom = box OR {box1, box2, ...}
- connect_front = box OR {box1, box2, ...}
- connect_left = box OR {box1, box2, ...}
- connect_back = box OR {box1, box2, ...}
- connect_right = box OR {box1, box2, ...}
- -- The following `disconnected_*` boxes are the opposites of the
- -- `connect_*` ones above, i.e. when a node has no suitable neighbour
- -- on the respective side, the corresponding disconnected box is drawn.
- disconnected_top = box OR {box1, box2, ...}
- disconnected_bottom = box OR {box1, box2, ...}
- disconnected_front = box OR {box1, box2, ...}
- disconnected_left = box OR {box1, box2, ...}
- disconnected_back = box OR {box1, box2, ...}
- disconnected_right = box OR {box1, box2, ...}
- disconnected = box OR {box1, box2, ...} -- when there is *no* neighbour
- disconnected_sides = box OR {box1, box2, ...} -- when there are *no*
- -- neighbours to the sides
- }
-
-A `box` is defined as:
-
- {x1, y1, z1, x2, y2, z2}
-
-A box of a regular node would look like:
-
- {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-
-
-
-
-Map terminology and coordinates
-===============================
-
-Nodes, mapblocks, mapchunks
----------------------------
-
-A 'node' is the fundamental cubic unit of a world and appears to a player as
-roughly 1x1x1 meters in size.
-
-A 'mapblock' (often abbreviated to 'block') is 16x16x16 nodes and is the
-fundamental region of a world that is stored in the world database, sent to
-clients and handled by many parts of the engine.
-'mapblock' is preferred terminology to 'block' to help avoid confusion with
-'node', however 'block' often appears in the API.
-
-A 'mapchunk' (sometimes abbreviated to 'chunk') is usually 5x5x5 mapblocks
-(80x80x80 nodes) and is the volume of world generated in one operation by
-the map generator.
-The size in mapblocks has been chosen to optimise map generation.
-
-Coordinates
------------
-
-### Orientation of axes
-
-For node and mapblock coordinates, +X is East, +Y is up, +Z is North.
-
-### Node coordinates
-
-Almost all positions used in the API use node coordinates.
-
-### Mapblock coordinates
-
-Occasionally the API uses 'blockpos' which refers to mapblock coordinates that
-specify a particular mapblock.
-For example blockpos (0,0,0) specifies the mapblock that extends from
-node position (0,0,0) to node position (15,15,15).
-
-#### Converting node position to the containing blockpos
-
-To calculate the blockpos of the mapblock that contains the node at 'nodepos',
-for each axis:
-
-* blockpos = math.floor(nodepos / 16)
-
-#### Converting blockpos to min/max node positions
-
-To calculate the min/max node positions contained in the mapblock at 'blockpos',
-for each axis:
-
-* Minimum:
- nodepos = blockpos * 16
-* Maximum:
- nodepos = blockpos * 16 + 15
-
-
-
-
-HUD
-===
-
-HUD element types
------------------
-
-The position field is used for all element types.
-
-To account for differing resolutions, the position coordinates are the
-percentage of the screen, ranging in value from `0` to `1`.
-
-The name field is not yet used, but should contain a description of what the
-HUD element represents. The direction field is the direction in which something
-is drawn.
-
-`0` draws from left to right, `1` draws from right to left, `2` draws from
-top to bottom, and `3` draws from bottom to top.
-
-The `alignment` field specifies how the item will be aligned. It is a table
-where `x` and `y` range from `-1` to `1`, with `0` being central. `-1` is
-moved to the left/up, and `1` is to the right/down. Fractional values can be
-used.
-
-The `offset` field specifies a pixel offset from the position. Contrary to
-position, the offset is not scaled to screen size. This allows for some
-precisely positioned items in the HUD.
-
-**Note**: `offset` _will_ adapt to screen DPI as well as user defined scaling
-factor!
-
-Below are the specific uses for fields in each type; fields not listed for that
-type are ignored.
-
-### `image`
-
-Displays an image on the HUD.
-
-* `scale`: The scale of the image, with 1 being the original texture size.
- Only the X coordinate scale is used (positive values).
- Negative values represent that percentage of the screen it
- should take; e.g. `x=-100` means 100% (width).
-* `text`: The name of the texture that is displayed.
-* `alignment`: The alignment of the image.
-* `offset`: offset in pixels from position.
-
-### `text`
-
-Displays text on the HUD.
-
-* `scale`: Defines the bounding rectangle of the text.
- A value such as `{x=100, y=100}` should work.
-* `text`: The text to be displayed in the HUD element.
-* `number`: An integer containing the RGB value of the color used to draw the
- text. Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on.
-* `alignment`: The alignment of the text.
-* `offset`: offset in pixels from position.
-
-### `statbar`
-
-Displays a horizontal bar made up of half-images.
-
-* `text`: The name of the texture that is used.
-* `number`: The number of half-textures that are displayed.
- If odd, will end with a vertically center-split texture.
-* `direction`
-* `offset`: offset in pixels from position.
-* `size`: If used, will force full-image size to this value (override texture
- pack image size)
-
-### `inventory`
-
-* `text`: The name of the inventory list to be displayed.
-* `number`: Number of items in the inventory to be displayed.
-* `item`: Position of item that is selected.
-* `direction`
-* `offset`: offset in pixels from position.
-
-### `waypoint`
-
-Displays distance to selected world position.
-
-* `name`: The name of the waypoint.
-* `text`: Distance suffix. Can be blank.
-* `number:` An integer containing the RGB value of the color used to draw the
- text.
-* `world_pos`: World position of the waypoint.
-
-
-
-
-Representations of simple things
-================================
-
-Position/vector
----------------
-
- {x=num, y=num, z=num}
-
-For helper functions see [Spatial Vectors].
-
-`pointed_thing`
----------------
-
-* `{type="nothing"}`
-* `{type="node", under=pos, above=pos}`
- * Indicates a pointed node selection box.
- * `under` refers to the node position behind the pointed face.
- * `above` refers to the node position in front of the pointed face.
-* `{type="object", ref=ObjectRef}`
-
-Exact pointing location (currently only `Raycast` supports these fields):
-
-* `pointed_thing.intersection_point`: The absolute world coordinates of the
- point on the selection box which is pointed at. May be in the selection box
- if the pointer is in the box too.
-* `pointed_thing.box_id`: The ID of the pointed selection box (counting starts
- from 1).
-* `pointed_thing.intersection_normal`: Unit vector, points outwards of the
- selected selection box. This specifies which face is pointed at.
- Is a null vector `{x = 0, y = 0, z = 0}` when the pointer is inside the
- selection box.
-
-
-
-
-Flag Specifier Format
-=====================
-
-Flags using the standardized flag specifier format can be specified in either
-of two ways, by string or table.
-
-The string format is a comma-delimited set of flag names; whitespace and
-unrecognized flag fields are ignored. Specifying a flag in the string sets the
-flag, and specifying a flag prefixed by the string `"no"` explicitly
-clears the flag from whatever the default may be.
-
-In addition to the standard string flag format, the schematic flags field can
-also be a table of flag names to boolean values representing whether or not the
-flag is set. Additionally, if a field with the flag name prefixed with `"no"`
-is present, mapped to a boolean of any value, the specified flag is unset.
-
-E.g. A flag field of value
-
- {place_center_x = true, place_center_y=false, place_center_z=true}
-
-is equivalent to
-
- {place_center_x = true, noplace_center_y=true, place_center_z=true}
-
-which is equivalent to
-
- "place_center_x, noplace_center_y, place_center_z"
-
-or even
-
- "place_center_x, place_center_z"
-
-since, by default, no schematic attributes are set.
-
-
-
-
-Items
-=====
-
-Item types
-----------
-
-There are three kinds of items: nodes, tools and craftitems.
-
-* Node: Can be placed in the world's voxel grid
-* Tool: Has a wear property but cannot be stacked. The default use action is to
- dig nodes or hit objects according to its tool capabilities.
-* Craftitem: Cannot dig nodes or be placed
-
-Amount and wear
----------------
-
-All item stacks have an amount between 0 and 65535. It is 1 by
-default. Tool item stacks can not have an amount greater than 1.
-
-Tools use a wear (damage) value ranging from 0 to 65535. The
-value 0 is the default and is used for unworn tools. The values
-1 to 65535 are used for worn tools, where a higher value stands for
-a higher wear. Non-tools always have a wear value of 0.
-
-Item formats
-------------
-
-Items and item stacks can exist in three formats: Serializes, table format
-and `ItemStack`.
-
-When an item must be passed to a function, it can usually be in any of
-these formats.
-
-### Serialized
-
-This is called "stackstring" or "itemstring". It is a simple string with
-1-3 components: the full item identifier, an optional amount and an optional
-wear value. Syntax:
-
- [[ ]]
-
-Examples:
-
-* `'default:apple'`: 1 apple
-* `'default:dirt 5'`: 5 dirt
-* `'default:pick_stone'`: a new stone pickaxe
-* `'default:pick_wood 1 21323'`: a wooden pickaxe, ca. 1/3 worn out
-
-### Table format
-
-Examples:
-
-5 dirt nodes:
-
- {name="default:dirt", count=5, wear=0, metadata=""}
-
-A wooden pick about 1/3 worn out:
-
- {name="default:pick_wood", count=1, wear=21323, metadata=""}
-
-An apple:
-
- {name="default:apple", count=1, wear=0, metadata=""}
-
-### `ItemStack`
-
-A native C++ format with many helper methods. Useful for converting
-between formats. See the [Class reference] section for details.
-
-
-
-
-Groups
-======
-
-In a number of places, there is a group table. Groups define the
-properties of a thing (item, node, armor of entity, capabilities of
-tool) in such a way that the engine and other mods can can interact with
-the thing without actually knowing what the thing is.
-
-Usage
------
-
-Groups are stored in a table, having the group names with keys and the
-group ratings as values. For example:
-
- -- Default dirt
- groups = {crumbly=3, soil=1}
-
- -- A more special dirt-kind of thing
- groups = {crumbly=2, soil=1, level=2, outerspace=1}
-
-Groups always have a rating associated with them. If there is no
-useful meaning for a rating for an enabled group, it shall be `1`.
-
-When not defined, the rating of a group defaults to `0`. Thus when you
-read groups, you must interpret `nil` and `0` as the same value, `0`.
-
-You can read the rating of a group for an item or a node by using
-
- minetest.get_item_group(itemname, groupname)
-
-Groups of items
----------------
-
-Groups of items can define what kind of an item it is (e.g. wool).
-
-Groups of nodes
----------------
-
-In addition to the general item things, groups are used to define whether
-a node is destroyable and how long it takes to destroy by a tool.
-
-Groups of entities
-------------------
-
-For entities, groups are, as of now, used only for calculating damage.
-The rating is the percentage of damage caused by tools with this damage group.
-See [Entity damage mechanism].
-
- object.get_armor_groups() --> a group-rating table (e.g. {fleshy=100})
- object.set_armor_groups({fleshy=30, cracky=80})
-
-Groups of tools
----------------
-
-Groups in tools define which groups of nodes and entities they are
-effective towards.
-
-Groups in crafting recipes
---------------------------
-
-An example: Make meat soup from any meat, any water and any bowl:
-
- {
- output = 'food:meat_soup_raw',
- recipe = {
- {'group:meat'},
- {'group:water'},
- {'group:bowl'},
- },
- -- preserve = {'group:bowl'}, -- Not implemented yet (TODO)
- }
-
-Another example: Make red wool from white wool and red dye:
-
- {
- type = 'shapeless',
- output = 'wool:red',
- recipe = {'wool:white', 'group:dye,basecolor_red'},
- }
-
-Special groups
---------------
-
-The asterisk `(*)` after a group name describes that there is no engine
-functionality bound to it, and implementation is left up as a suggestion
-to games.
-
-### Node, item and tool groups
-
-* `not_in_creative_inventory`: (*) Special group for inventory mods to indicate
- that the item should be hidden in item lists.
-
-
-### Node-only groups
-
-* `attached_node`: if the node under it is not a walkable block the node will be
- dropped as an item. If the node is wallmounted the wallmounted direction is
- checked.
-* `bouncy`: value is bounce speed in percent
-* `connect_to_raillike`: makes nodes of raillike drawtype with same group value
- connect to each other
-* `dig_immediate`: Player can always pick up node without reducing tool wear
- * `2`: the node always gets the digging time 0.5 seconds (rail, sign)
- * `3`: the node always gets the digging time 0 seconds (torch)
-* `disable_jump`: Player (and possibly other things) cannot jump from node
-* `fall_damage_add_percent`: damage speed = `speed * (1 + value/100)`
-* `falling_node`: if there is no walkable block under the node it will fall
-* `float`: the node will not fall through liquids
-* `level`: Can be used to give an additional sense of progression in the game.
- * A larger level will cause e.g. a weapon of a lower level make much less
- damage, and get worn out much faster, or not be able to get drops
- from destroyed nodes.
- * `0` is something that is directly accessible at the start of gameplay
- * There is no upper limit
- * See also: `leveldiff` in [Tools]
-* `slippery`: Players and items will slide on the node.
- Slipperiness rises steadily with `slippery` value, starting at 1.
-
-
-### Tool-only groups
-
-* `disable_repair`: If set to 1 for a tool, it cannot be repaired using the
- `"toolrepair"` crafting recipe
-
-
-### `ObjectRef` groups
-
-* `immortal`: Skips all damage and breath handling for an object. This group
- will also hide the integrated HUD status bars for players, and is
- automatically set to all players when damage is disabled on the server.
-* `punch_operable`: For entities; disables the regular damage mechanism for
- players punching it by hand or a non-tool item, so that it can do something
- else than take damage.
-
-
-
-Known damage and digging time defining groups
----------------------------------------------
-
-* `crumbly`: dirt, sand
-* `cracky`: tough but crackable stuff like stone.
-* `snappy`: something that can be cut using fine tools; e.g. leaves, small
- plants, wire, sheets of metal
-* `choppy`: something that can be cut using force; e.g. trees, wooden planks
-* `fleshy`: Living things like animals and the player. This could imply
- some blood effects when hitting.
-* `explody`: Especially prone to explosions
-* `oddly_breakable_by_hand`:
- Can be added to nodes that shouldn't logically be breakable by the
- hand but are. Somewhat similar to `dig_immediate`, but times are more
- like `{[1]=3.50,[2]=2.00,[3]=0.70}` and this does not override the
- speed of a tool if the tool can dig at a faster speed than this
- suggests for the hand.
-
-Examples of custom groups
--------------------------
-
-Item groups are often used for defining, well, _groups of items_.
-
-* `meat`: any meat-kind of a thing (rating might define the size or healing
- ability or be irrelevant -- it is not defined as of yet)
-* `eatable`: anything that can be eaten. Rating might define HP gain in half
- hearts.
-* `flammable`: can be set on fire. Rating might define the intensity of the
- fire, affecting e.g. the speed of the spreading of an open fire.
-* `wool`: any wool (any origin, any color)
-* `metal`: any metal
-* `weapon`: any weapon
-* `heavy`: anything considerably heavy
-
-Digging time calculation specifics
-----------------------------------
-
-Groups such as `crumbly`, `cracky` and `snappy` are used for this
-purpose. Rating is `1`, `2` or `3`. A higher rating for such a group implies
-faster digging time.
-
-The `level` group is used to limit the toughness of nodes a tool can dig
-and to scale the digging times / damage to a greater extent.
-
-**Please do understand this**, otherwise you cannot use the system to it's
-full potential.
-
-Tools define their properties by a list of parameters for groups. They
-cannot dig other groups; thus it is important to use a standard bunch of
-groups to enable interaction with tools.
-
-
-
-
-Tools
-=====
-
-Tools definition
-----------------
-
-Tools define:
-
-* Full punch interval
-* Maximum drop level
-* For an arbitrary list of groups:
- * Uses (until the tool breaks)
- * Maximum level (usually `0`, `1`, `2` or `3`)
- * Digging times
- * Damage groups
-
-### Full punch interval
-
-When used as a weapon, the tool will do full damage if this time is spent
-between punches. If e.g. half the time is spent, the tool will do half
-damage.
-
-### Maximum drop level
-
-Suggests the maximum level of node, when dug with the tool, that will drop
-it's useful item. (e.g. iron ore to drop a lump of iron).
-
-This is not automated; it is the responsibility of the node definition
-to implement this.
-
-### Uses
-
-Determines how many uses the tool has when it is used for digging a node,
-of this group, of the maximum level. For lower leveled nodes, the use count
-is multiplied by `3^leveldiff`.
-`leveldiff` is the difference of the tool's `maxlevel` `groupcaps` and the
-node's `level` group. The node cannot be dug if `leveldiff` is less than zero.
-
-* `uses=10, leveldiff=0`: actual uses: 10
-* `uses=10, leveldiff=1`: actual uses: 30
-* `uses=10, leveldiff=2`: actual uses: 90
-
-### Maximum level
-
-Tells what is the maximum level of a node of this group that the tool will
-be able to dig.
-
-### Digging times
-
-List of digging times for different ratings of the group, for nodes of the
-maximum level.
-
-For example, as a Lua table, `times={2=2.00, 3=0.70}`. This would
-result in the tool to be able to dig nodes that have a rating of `2` or `3`
-for this group, and unable to dig the rating `1`, which is the toughest.
-Unless there is a matching group that enables digging otherwise.
-
-If the result digging time is 0, a delay of 0.15 seconds is added between
-digging nodes; If the player releases LMB after digging, this delay is set to 0,
-i.e. players can more quickly click the nodes away instead of holding LMB.
-
-### Damage groups
-
-List of damage for groups of entities. See [Entity damage mechanism].
-
-Example definition of the capabilities of a tool
-------------------------------------------------
-
- tool_capabilities = {
- full_punch_interval=1.5,
- max_drop_level=1,
- groupcaps={
- crumbly={maxlevel=2, uses=20, times={[1]=1.60, [2]=1.20, [3]=0.80}}
- }
- damage_groups = {fleshy=2},
- }
-
-This makes the tool be able to dig nodes that fulfil both of these:
-
-* Have the `crumbly` group
-* Have a `level` group less or equal to `2`
-
-Table of resulting digging times:
-
- crumbly 0 1 2 3 4 <- level
- -> 0 - - - - -
- 1 0.80 1.60 1.60 - -
- 2 0.60 1.20 1.20 - -
- 3 0.40 0.80 0.80 - -
-
- level diff: 2 1 0 -1 -2
-
-Table of resulting tool uses:
-
- -> 0 - - - - -
- 1 180 60 20 - -
- 2 180 60 20 - -
- 3 180 60 20 - -
-
-**Notes**:
-
-* At `crumbly==0`, the node is not diggable.
-* At `crumbly==3`, the level difference digging time divider kicks in and makes
- easy nodes to be quickly breakable.
-* At `level > 2`, the node is not diggable, because it's `level > maxlevel`
-
-
-
-
-Entity damage mechanism
-=======================
-
-Damage calculation:
-
- damage = 0
- foreach group in cap.damage_groups:
- damage += cap.damage_groups[group]
- * limit(actual_interval / cap.full_punch_interval, 0.0, 1.0)
- * (object.armor_groups[group] / 100.0)
- -- Where object.armor_groups[group] is 0 for inexistent values
- return damage
-
-Client predicts damage based on damage groups. Because of this, it is able to
-give an immediate response when an entity is damaged or dies; the response is
-pre-defined somehow (e.g. by defining a sprite animation) (not implemented;
-TODO).
-Currently a smoke puff will appear when an entity dies.
-
-The group `immortal` completely disables normal damage.
-
-Entities can define a special armor group, which is `punch_operable`. This
-group disables the regular damage mechanism for players punching it by hand or
-a non-tool item, so that it can do something else than take damage.
-
-On the Lua side, every punch calls:
-
- entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction,
- damage)
-
-This should never be called directly, because damage is usually not handled by
-the entity itself.
-
-* `puncher` is the object performing the punch. Can be `nil`. Should never be
- accessed unless absolutely required, to encourage interoperability.
-* `time_from_last_punch` is time from last punch (by `puncher`) or `nil`.
-* `tool_capabilities` can be `nil`.
-* `direction` is a unit vector, pointing from the source of the punch to
- the punched object.
-* `damage` damage that will be done to entity
-Return value of this function will determine if damage is done by this function
-(retval true) or shall be done by engine (retval false)
-
-To punch an entity/object in Lua, call:
-
- object:punch(puncher, time_from_last_punch, tool_capabilities, direction)
-
-* Return value is tool wear.
-* Parameters are equal to the above callback.
-* If `direction` equals `nil` and `puncher` does not equal `nil`, `direction`
- will be automatically filled in based on the location of `puncher`.
-
-
-
-
-Metadata
-========
-
-Node Metadata
--------------
-
-The instance of a node in the world normally only contains the three values
-mentioned in [Nodes]. However, it is possible to insert extra data into a node.
-It is called "node metadata"; See `NodeMetaRef`.
-
-Node metadata contains two things:
-
-* A key-value store
-* An inventory
-
-Some of the values in the key-value store are handled specially:
-
-* `formspec`: Defines a right-click inventory menu. See [Formspec].
-* `infotext`: Text shown on the screen when the node is pointed at
-
-Example:
-
- local meta = minetest.get_meta(pos)
- meta:set_string("formspec",
- "size[8,9]"..
- "list[context;main;0,0;8,4;]"..
- "list[current_player;main;0,5;8,4;]")
- meta:set_string("infotext", "Chest");
- local inv = meta:get_inventory()
- inv:set_size("main", 8*4)
- print(dump(meta:to_table()))
- meta:from_table({
- inventory = {
- main = {[1] = "default:dirt", [2] = "", [3] = "", [4] = "",
- [5] = "", [6] = "", [7] = "", [8] = "", [9] = "",
- [10] = "", [11] = "", [12] = "", [13] = "",
- [14] = "default:cobble", [15] = "", [16] = "", [17] = "",
- [18] = "", [19] = "", [20] = "default:cobble", [21] = "",
- [22] = "", [23] = "", [24] = "", [25] = "", [26] = "",
- [27] = "", [28] = "", [29] = "", [30] = "", [31] = "",
- [32] = ""}
- },
- fields = {
- formspec = "size[8,9]list[context;main;0,0;8,4;]list[current_player;main;0,5;8,4;]",
- infotext = "Chest"
- }
- })
-
-Item Metadata
--------------
-
-Item stacks can store metadata too. See [`ItemStackMetaRef`].
-
-Item metadata only contains a key-value store.
-
-Some of the values in the key-value store are handled specially:
-
-* `description`: Set the item stack's description. Defaults to
- `idef.description`.
-* `color`: A `ColorString`, which sets the stack's color.
-* `palette_index`: If the item has a palette, this is used to get the
- current color from the palette.
-
-Example:
-
- local meta = stack:get_meta()
- meta:set_string("key", "value")
- print(dump(meta:to_table()))
-
-
-
-
-Formspec
-========
-
-Formspec defines a menu. This supports inventories and some of the
-typical widgets like buttons, checkboxes, text input fields, etc.
-It is a string, with a somewhat strange format.
-
-A formspec is made out of formspec elements, which includes widgets
-like buttons but also can be used to set stuff like background color.
-
-Many formspec elements have a `name`, which is a unique identifier which
-is used when the server receives user input. You must not use the name
-"quit" for formspec elements.
-
-Spaces and newlines can be inserted between the blocks, as is used in the
-examples.
-
-Position and size units are inventory slots unless the new coordinate system
-is enabled. `X` and `Y` position the formspec element relative to the top left
-of the menu or container. `W` and `H` are its width and height values.
-
-If the new system is enabled, all elements have unified coordinates for all
-elements with no padding or spacing in between. This is highly recommended
-for new forms. See `real_coordinates[]` and `Migrating to Real
-Coordinates`.
-
-Inventories with a `player:` inventory location are only sent to the
-player named ``.
-
-When displaying text which can contain formspec code, e.g. text set by a player,
-use `minetest.formspec_escape`.
-For coloured text you can use `minetest.colorize`.
-
-**WARNING**: do _not_ use a element name starting with `key_`; those names are
-reserved to pass key press events to formspec!
-
-**WARNING**: Minetest allows you to add elements to every single formspec instance
-using `player:set_formspec_prepend()`, which may be the reason backgrounds are
-appearing when you don't expect them to, or why things are styled differently
-to normal. See [`no_prepend[]`] and [Styling Formspecs].
-
-Examples
---------
-
-### Chest
-
- size[8,9]
- list[context;main;0,0;8,4;]
- list[current_player;main;0,5;8,4;]
-
-### Furnace
-
- size[8,9]
- list[context;fuel;2,3;1,1;]
- list[context;src;2,1;1,1;]
- list[context;dst;5,1;2,2;]
- list[current_player;main;0,5;8,4;]
-
-### Minecraft-like player inventory
-
- size[8,7.5]
- image[1,0.6;1,2;player.png]
- list[current_player;main;0,3.5;8,4;]
- list[current_player;craft;3,0;3,3;]
- list[current_player;craftpreview;7,1;1,1;]
-
-Elements
---------
-
-### `formspec_version[]`
-
-* Set the formspec version to a certain number. If not specified,
- version 1 is assumed.
-* Must be specified before `size` element.
-* Clients older than this version can neither show newer elements nor display
- elements with new arguments correctly.
-* Available since feature `formspec_version_element`.
-
-### `size[,,]`
-
-* Define the size of the menu in inventory slots
-* `fixed_size`: `true`/`false` (optional)
-* deprecated: `invsize[,;]`
-
-### `position[,]`
-
-* Must be used after `size` element.
-* Defines the position on the game window of the formspec's `anchor` point.
-* For X and Y, 0.0 and 1.0 represent opposite edges of the game window,
- for example:
- * [0.0, 0.0] sets the position to the top left corner of the game window.
- * [1.0, 1.0] sets the position to the bottom right of the game window.
-* Defaults to the center of the game window [0.5, 0.5].
-
-### `anchor[,]`
-
-* Must be used after both `size` and `position` (if present) elements.
-* Defines the location of the anchor point within the formspec.
-* For X and Y, 0.0 and 1.0 represent opposite edges of the formspec,
- for example:
- * [0.0, 1.0] sets the anchor to the bottom left corner of the formspec.
- * [1.0, 0.0] sets the anchor to the top right of the formspec.
-* Defaults to the center of the formspec [0.5, 0.5].
-
-* `position` and `anchor` elements need suitable values to avoid a formspec
- extending off the game window due to particular game window sizes.
-
-### `no_prepend[]`
-
-* Must be used after the `size`, `position`, and `anchor` elements (if present).
-* Disables player:set_formspec_prepend() from applying to this formspec.
-
-### `real_coordinates[]`
-
-* INFORMATION: Enable it automatically using `formspec_version` version 2 or newer.
-* When set to true, all following formspec elements will use the new coordinate system.
-* If used immediately after `size`, `position`, `anchor`, and `no_prepend` elements
- (if present), the form size will use the new coordinate system.
-* **Note**: Formspec prepends are not affected by the coordinates in the main form.
- They must enable it explicitly.
-* For information on converting forms to the new coordinate system, see `Migrating
- to Real Coordinates`.
-
-### `container[,]`
-
-* Start of a container block, moves all physical elements in the container by
- (X, Y).
-* Must have matching `container_end`
-* Containers can be nested, in which case the offsets are added
- (child containers are relative to parent containers)
-
-### `container_end[]`
-
-* End of a container, following elements are no longer relative to this
- container.
-
-### `list[;;,;,;]`
-
-* Show an inventory list if it has been sent to the client. Nothing will
- be shown if the inventory list is of size 0.
-* **Note**: With the new coordinate system, the spacing between inventory
- slots is one-fourth the size of an inventory slot.
-
-### `list[;;,;,;]`
-
-* Show an inventory list if it has been sent to the client. Nothing will
- be shown if the inventory list is of size 0.
-* **Note**: With the new coordinate system, the spacing between inventory
- slots is one-fourth the size of an inventory slot.
-
-### `listring[;]`
-
-* Allows to create a ring of inventory lists
-* Shift-clicking on items in one element of the ring
- will send them to the next inventory list inside the ring
-* The first occurrence of an element inside the ring will
- determine the inventory where items will be sent to
-
-### `listring[]`
-
-* Shorthand for doing `listring[;]`
- for the last two inventory lists added by list[...]
-
-### `listcolors[;]`
-
-* Sets background color of slots as `ColorString`
-* Sets background color of slots on mouse hovering
-
-### `listcolors[;;]`
-
-* Sets background color of slots as `ColorString`
-* Sets background color of slots on mouse hovering
-* Sets color of slots border
-
-### `listcolors[;;;;]`
-
-* Sets background color of slots as `ColorString`
-* Sets background color of slots on mouse hovering
-* Sets color of slots border
-* Sets default background color of tooltips
-* Sets default font color of tooltips
-
-### `tooltip[;;;]`
-
-* Adds tooltip for an element
-* `` tooltip background color as `ColorString` (optional)
-* `` tooltip font color as `ColorString` (optional)
-
-### `tooltip[,;,;;;]`
-
-* Adds tooltip for an area. Other tooltips will take priority when present.
-* `` tooltip background color as `ColorString` (optional)
-* `` tooltip font color as `ColorString` (optional)
-
-### `image[,;,;]`
-
-* Show an image
-
-### `item_image[,;,;]`
-
-* Show an inventory image of registered item/node
-
-### `bgcolor[;]`
-
-* Sets background color of formspec as `ColorString`
-* If `true`, a fullscreen background is drawn and the color is ignored
- (does not affect the size of the formspec)
-
-### `background[,;,;]`
-
-* Example for formspec 8x4 in 16x resolution: image shall be sized
- 8 times 16px times 4 times 16px.
-
-### `background[,;,;;]`
-
-* Example for formspec 8x4 in 16x resolution:
- image shall be sized 8 times 16px times 4 times 16px
-* If `auto_clip` is `true`, the background is clipped to the formspec size
- (`x` and `y` are used as offset values, `w` and `h` are ignored)
-
-### `background9[,;,;;;]`
-
-* 9-sliced background. See https://en.wikipedia.org/wiki/9-slice_scaling
-* Middle is a rect which defines the middle of the 9-slice.
- * `x` - The middle will be x pixels from all sides.
- * `x,y` - The middle will be x pixels from the horizontal and y from the vertical.
- * `x,y,x2,y2` - The middle will start at x,y, and end at x2, y2. Negative x2 and y2 values
- will be added to the width and height of the texture, allowing it to be used as the
- distance from the far end.
- * All numbers in middle are integers.
-* Example for formspec 8x4 in 16x resolution:
- image shall be sized 8 times 16px times 4 times 16px
-* If `auto_clip` is `true`, the background is clipped to the formspec size
- (`x` and `y` are used as offset values, `w` and `h` are ignored)
-* Available since formspec version 2
-
-### `pwdfield[,;,;;