| |-- screenshot.png
| |-- description.txt
| |-- init.lua
+| |-- models
| |-- textures
| | |-- modname_stuff.png
| | `-- modname_something_else.png
minetest.setting_get(name) and minetest.setting_getbool(name) can be used
to read custom or existing settings at load time, if necessary.
+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.
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 overlayed over default_dirt.png
+
+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 over cobble.png.
+
+Advanced texture modifiers:
+ [crack:<n>:<p>
+ n = animation frame count, p = current animation frame
+ Draw a step of the crack animation on the texture.
+ Example: default_cobble.png^[crack:10:1
+
+ [combine:<w>x<h>:<x1>,<y1>=<file1>:<x2>,<y2>=<file2>
+ w = width, h = height, x1/x2 = x position, y1/y1 = y position,
+ file1/file2 = texture to combine
+ Create a texture of size <w> x <h> and blit <file1> to (<x1>,<y1>)
+ and blit <file2> to (<x2>,<y2>).
+ Example: [combine:16x32:0,0=default_cobble.png:0,16=default_wood.png
+
+ [brighten
+ Brightens the texture.
+ Example: tnt_tnt_side.png^[brighten
+
+ [noalpha
+ Makes the texture completely opaque.
+ Example: default_leaves.png^[noalpha
+
+ [makealpha:<r>,<g>,<b>
+ Convert one color to transparency.
+ Example: default_cobble.png^[makealpha:128,128,128
+
+ [transform<t>
+ t = transformation(s) to apply
+ Rotates and/or flips the image.
+ <t> 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{<top>{<left>{<right>
+ '^' is replaced by '&' in texture names
+ 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:<percent>:<file>
+ Blit the lower <percent>% part of <file> on the texture:
+ Example: base.png^[lowpart:25:overlay.png
+
+ [verticalframe:<t>:<n>
+ t = animation frame count, n = current animation frame
+ Crops the texture to a frame of a vertical animation.
+ Example: default_torch_animated.png^[verticalframe:16:8
+
+ [mask:<file>
+ Apply a mask to the base image.
+ The mask is applied using binary AND.
+
+ [colorize:<color>
+ Colorize the textures with given color
+ <color> as ColorString
+
Sounds
-------
Only OGG Vorbis files are supported.
0 = y+ 1 = z+ 2 = z- 3 = x+ 4 = x- 5 = y-
facedir's two less significant bits are rotation around the axis
paramtype2 == "leveled"
- ^ The drawn node level is read from param2, like flowingliquid
-
+ collision_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+ },
+ },
+ ^ defines list of collision boxes for the node. If empty, collision boxes
+ will be the same as nodeboxes, in case of any other nodes will be full cube
+ as in the example above.
+
Nodes can also contain extra data. See "Node Metadata".
Node drawtypes
---------------
-There are a bunch of different looking node types. These are mostly just
-copied from Minetest 0.3; more may be made in the future.
+There are a bunch of different looking node types.
Look for examples in games/minimal or games/minetest_game.
- flowingliquid
- glasslike
- glasslike_framed
+- glasslike_framed_optional
- allfaces
- allfaces_optional
- torchlike
- signlike
- plantlike
+- firelike
- fencelike
- raillike
- nodebox -- See below. EXPERIMENTAL
+- mesh -- use models for nodes
+
+*_optional drawtypes need less rendering time if deactivated (always client side)
Node boxes
-----------
type = "leveled" is same as "fixed", but y2 will be automatically set to level from param2
+Meshes
+-----------
+If drawtype "mesh" is used tiles should hold model materials textures.
+Only static meshes are implemented.
+For supported model formats see Irrlicht engine documentation.
+
Ore types
---------------
These tell in what manner the ore is generated.
- scatter
Randomly chooses a location and generates a cluster of ore.
If noise_params is specified, the ore will be placed if the 3d perlin noise at
- that point is greater than the noise_threshhold, giving the ability to create a non-equal
+ that point is greater than the noise_threshold, giving the ability to create a non-equal
distribution of ore.
- sheet
Creates a sheet of ore in a blob shape according to the 2d perlin noise described by noise_params.
The relative height of the sheet can be controlled by the same perlin noise as well, by specifying
a non-zero 'scale' parameter in noise_params. IMPORTANT: The noise is not transformed by offset or
- scale when comparing against the noise threshhold, but scale is used to determine relative height.
+ scale when comparing against the noise threshold, but scale is used to determine relative height.
The height of the blob is randomly scattered, with a maximum height of clust_size.
clust_scarcity and clust_num_ores are ignored.
This is essentially an improved version of the so-called "stratus" ore seen in some unofficial mods.
damage_groups = {fleshy=2},
}
-This makes the tool be able to dig nodes that fulfill both of these:
+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
^ Show an inventory list
listcolors[<slot_bg_normal>;<slot_bg_hover>]
-^ Sets background color of slots in HEX-Color format
+^ Sets background color of slots as ColorString
^ Sets background color of slots on mouse hovering
listcolors[<slot_bg_normal>;<slot_bg_hover>;<slot_border>]
-^ Sets background color of slots in HEX-Color format
+^ Sets background color of slots as ColorString
^ Sets background color of slots on mouse hovering
^ Sets color of slots border
listcolors[<slot_bg_normal>;<slot_bg_hover>;<slot_border>;<tooltip_bgcolor>;<tooltip_fontcolor>]
-^ Sets background color of slots in HEX-Color format
+^ 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
tooltip[<gui_element_name>;<tooltip_text>;<bgcolor>,<fontcolor>]
^ Adds tooltip for an element
-^ <bgcolor> tooltip background color in HEX-Color format (optional)
-^ <fontcolor> tooltip font color in HEX-Color format (optional)
+^ <bgcolor> tooltip background color as ColorString (optional)
+^ <fontcolor> tooltip font color as ColorString (optional)
image[<X>,<Y>;<W>,<H>;<texture name>]
^ Position and size units are inventory slots
bgcolor[<color>;<fullscreen>]
-^ Sets background color of formspec in HEX-Color format
+^ Sets background color of formspec as ColorString
^ If true the background color is drawn fullscreen (does not effect the size of the formspec)
background[<X>,<Y>;<W>,<H>;<texture name>]
tabheader[<X>,<Y>;<name>;<caption 1>,<caption 2>,...,<caption n>;<current_tab>;<transparent>;<draw_border>]
^ show a tabHEADER at specific position (ignores formsize)
^ x and y position the itemlist relative to the top left of the menu
-^ name fieldname data is transfered to Lua
+^ name fieldname data is transferred to Lua
^ caption 1... name shown on top of tab
^ current_tab index of selected tab 1...
^ transparent (optional) show transparent
^ simple colored semitransparent box
^ x and y position the box relative to the top left of the menu
^ w and h are the size of box
-^ color in HEX-Color format
+^ color as ColorString
dropdown[<X>,<Y>;<W>;<name>;<item 1>,<item 2>, ...,<item n>;<selected idx>]
^ show a dropdown field
^ 2) read the value on pressing a button (all dropdown values are available)
^ x and y position of dropdown
^ width of dropdown
-^ fieldname data is transfered to Lua
+^ fieldname data is transferred to Lua
^ items to be shown in dropdown
^ index of currently selected dropdown item
checkbox[<X>,<Y>;<name>;<label>;<selected>;<tooltip>]
^ show a checkbox
^ x and y position of checkbox
-^ name fieldname data is transfered to Lua
+^ name fieldname data is transferred to Lua
^ label to be shown left of checkbox
^ selected (optional) true/false
^ tooltip (optional)
^ x and y position of trackbar
^ width and height
^ orientation vertical/horizontal
-^ fieldname data is transfered to lua
+^ fieldname data is transferred to lua
^ value this trackbar is set to (0-1000)
^ see also minetest.explode_scrollbar_event (main menu: engine.explode_scrollbar_event)
tableoptions[<opt 1>;<opt 2>;...]
^ sets options for table[]:
^ color=#RRGGBB
-^^ default text color (HEX-Color), defaults to #FFFFFF
+^^ default text color (ColorString), defaults to #FFFFFF
^ background=#RRGGBB
-^^ table background color (HEX-Color), defaults to #000000
+^^ table background color (ColorString), defaults to #000000
^ border=<true/false>
^^ should the table be drawn with a border? (default true)
^ highlight=#RRGGBB
-^^ highlight background color (HEX-Color), defaults to #466432
+^^ highlight background color (ColorString), defaults to #466432
^ highlight_text=#RRGGBB
-^^ highlight text color (HEX-Color), defaults to #FFFFFF
+^^ highlight text color (ColorString), defaults to #FFFFFF
^ opendepth=<value>
^^ all subtrees up to depth < value are open (default value = 0)
^^ only useful when there is a column of type "tree"
^ types: text, image, color, indent, tree
^^ text: show cell contents as text
^^ image: cell contents are an image index, use column options to define images
-^^ color: cell contents are a HEX-Color and define color of following cell
+^^ color: cell contents are a ColorString and define color of following cell
^^ indent: cell contents are a number and define indentation of following cell
^^ tree: same as indent, but user can open and close subtrees (treeview-like)
^ column options:
- "nodemeta:<X>,<Y>,<Z>": Any node metadata
- "detached:<name>": A detached inventory
-HEX-Color
----------
+ColorString
+-----------
#RGB
^ defines a color in hexadecimal format
#RGBA
#RRGGBBAA
^ defines a color in hexadecimal format and alpha channel
+Named colors are also supported and are equivalent to "CSS Color Module Level 4"
+(http://dev.w3.org/csswg/css-color/#named-colors). To specify the value of the
+alpha channel, append #AA to the end of the color name (e.g. colorname#08). For
+named colors the hexadecimal string representing the alpha value must (always)
+be two hexadecimal digits.
+
Vector helpers
---------------
vector.new([x[, y, z]]) -> vector
^ escapes characters [ ] \ , ; that can not be used in formspecs
minetest.is_yes(arg)
^ returns whether arg can be interpreted as yes
+minetest.get_us_time()
+^ returns time with microsecond precision
minetest namespace reference
-----------------------------
^ Place the schematic specified by schematic (see: Schematic specifier) at pos.
^ Rotation can be "0", "90", "180", "270", or "random".
^ If the rotation parameter is omitted, the schematic is not rotated.
-^ replacements = {{"oldname", "convert_to"}, ...}
+^ replacements = {["old_name"] = "convert_to", ...}
^ force_placement is a boolean indicating whether nodes other than air and
^ ignore are replaced by the schematic
minetest.write_json(data[, styled]) -> string or nil and error message
^ Convert a Lua table into a JSON string
^ styled: Outputs in a human-readable format if this is set, defaults to false
-^ Un-serializable things like functions and userdata are saved as null.
+^ Unserializable things like functions and userdata are saved as null.
^ Warning: JSON is more strict than the Lua table format.
1. You can only use strings and positive integers of at least one as keys.
2. You can not mix string and integer keys.
^ Example: deserialize('return { ["foo"] = "bar" }') -> {foo='bar'}
^ Example: deserialize('print("foo")') -> nil (function call fails)
^ error:[string "print("foo")"]:1: attempt to call global 'print' (a nil value)
+minetest.compress(data, method, ...) -> compressed_data
+^ Compress a string of data.
+^ `method` is a string identifying the compression method to be used.
+^ Supported compression methods:
+^ Deflate (zlib): "deflate"
+^ `...` indicates method-specific arguments. Currently defined arguments are:
+^ Deflate: `level` - Compression level, 0-9 or nil.
+minetest.decompress(compressed_data, method, ...) -> data
+^ Decompress a string of data (using ZLib).
+^ See documentation on minetest.compress() for supported compression methods.
+^ currently supported.
+^ `...` indicates method-specific arguments. Currently, no methods use this.
minetest.is_protected(pos, name) -> bool
^ This function should be overridden by protection mods and should be used to
check if a player can interact at a position.
^ returns actual emerged pmin, actual emerged pmax
- write_to_map(): Writes the data loaded from the VoxelManip back to the map.
^ important: data must be set using VoxelManip:set_data before calling this
+- get_node_at(pos): Returns a MapNode table of the node currently loaded in the VoxelManip at that position
+- set_node_at(pos, node): Sets a specific MapNode in the VoxelManip at that position
- get_data(): Gets the data read into the VoxelManip object
^ returns raw node data is in the form of an array of node content ids
- set_data(data): Sets the data contents of the VoxelManip object
^ To be used only by a VoxelManip object from minetest.get_mapgen_object
^ (p1, p2) is the area in which lighting is set; defaults to the whole area if left out
- get_light_data(): Gets the light data read into the VoxelManip object
- ^ Returns an array (indicies 1 to volume) of integers ranging from 0 to 255
+ ^ Returns an array (indices 1 to volume) of integers ranging from 0 to 255
^ Each value is the bitwise combination of day and night light values (0..15 each)
^ light = day + (night * 16)
- set_light_data(light_data): Sets the param1 (light) contents of each node in the VoxelManip
^ To be used only by a VoxelManip object from minetest.get_mapgen_object
^ (p1, p2) is the area in which lighting is set; defaults to the whole area if left out
- update_liquids(): Update liquid flow
+- was_modified(): Returns true or false if the data in the voxel manipulator had been modified since
+ the last read from map, due to a call to minetest.set_data() on the loaded area elsewhere
VoxelArea: A helper class for voxel areas
- Can be created via VoxelArea:new{MinEdge=pmin, MaxEdge=pmax}
thin_branches, - boolean true -> use thin (1 node) branches
fruit, - string fruit node name
fruit_chance, - num chance (0-100) to replace leaves with fruit node
- seed, - num random seed
+ seed, - num random seed; if no seed is provided, the engine will create one
}
Key for Special L-System Symbols used in Axioms
drawtype = "normal", -- See "Node drawtypes"
visual_scale = 1.0,
- ^ Supported for drawtypes "plantlike", "signlike", "torchlike".
+ ^ Supported for drawtypes "plantlike", "signlike", "torchlike", "mesh".
^ For plantlike, the image will start at the bottom of the node; for the
^ other drawtypes, the image will be centered on the node.
^ Note that positioning for "torchlike" may still change.
diggable = true, -- If false, can never be dug
climbable = false, -- If true, can be climbed on (ladder)
buildable_to = false, -- If true, placed nodes can replace this node
- drop = "", -- alternatively drop = { max_items = ..., items = { ... } }
liquidtype = "none", -- "none"/"source"/"flowing"
liquid_alternative_flowing = "", -- Flowing version of source liquid
liquid_alternative_source = "", -- Source version of flowing liquid
light_source = 0, -- Amount of light emitted by node
damage_per_second = 0, -- If player is inside node, this damage is caused
node_box = {type="regular"}, -- See "Node boxes"
+ mesh = "model",
selection_box = {type="regular"}, -- See "Node boxes"
^ If drawtype "nodebox" is used and selection_box is nil, then node_box is used
legacy_facedir_simple = false, -- Support maps made in and before January 2012
dug = <SimpleSoundSpec>,
place = <SimpleSoundSpec>,
},
+ drop = "", -- Name of dropped node when dug. Default is the node itself.
+ -- Alternatively:
+ drop = {
+ max_items = 1, -- Maximum number of items to drop.
+ items = { -- Choose max_items randomly from this list.
+ {
+ items = {"foo:bar", "baz:frob"}, -- Choose one item randomly from this list.
+ rarity = 1, -- Probability of getting is 1 / rarity.
+ },
+ },
+ },
on_construct = func(pos),
^ Node constructor; always called after adding node
flags = "",
^ Attributes for this ore generation
noise_threshhold = 0.5,
- ^ If noise is above this threshhold, ore is placed. Not needed for a uniform distribution
+ ^ If noise is above this threshold, ore is placed. Not needed for a uniform distribution
noise_params = {offset=0, scale=1, spread={x=100, y=100, z=100}, seed=23, octaves=3, persist=0.70}
^ NoiseParams structure describing the perlin noise used for ore distribution.
^ Needed for sheet ore_type. Omit from scatter ore_type for a uniform ore distribution
},
},
^ See 'Schematic specifier' for details.
- replacements = {{"oldname", "convert_to"}, ...},
+ replacements = {["oldname"] = "convert_to", ...},
flags = "place_center_x, place_center_z",
^ Flags for schematic decorations. See 'Schematic attributes'.
rotation = "90" -- rotate schematic 90 degrees on placement