xaenvironment/game_api.txt

770 lines
28 KiB
Plaintext

Controls ##########################################################
Crawl sneak
Run special/aux1
Wallrun run + jump into a wall (requires a few of attempts to success)
Edge climb touch an edge above the ground
Kong run into a block
Cat leap jump backwards in edge climbing
Tic tac/walljump run + jump side of a wall
Double wall climb hold left & right
Backflip hold jump & press back/down
Frontflip jump, (hold) place/RMB & press forward/up
Right sideflip jump, (hold) place/RMB & press right
Left sideflip jump, (hold) place/RMB & press left
Roll sneak when falling from a height, causing less fall damage
Dive roll place/RMB and press up, useful to dive faster forward
You can use all flips to reach more height and come over obstacles on 2 blocks while running,
but sideflips wont hurt on obstacles and there is no risk you breaks your neck.
Commands ##########################################################
/protect 1 select position 1, reselect by punch the node
/protect 2 select position 2, reselect by punch the node
/protect <name> protect
/protect abort (or punch a marker)
/remove_area <number> remove area
/exaach Achievements
/exaach_clear Clear your achievements (ban required)
Privileges ##########################################################
protect_unlimited -- Protection without limits
protection_bypass -- can interact in all areas, exept "game rule" areas
##########################################################
Modding #####################################################
##########################################################
This is a collection of functions that can be usefull by modding.
Modding itemdef/nodedef #####################################################
-- No depends needed
groups={
exatec_tube=1 -- exatec: is tube / used as tubes
exatec_tube_connected=1 -- exatec: tubes is connected to
exatec_wire=1 -- exatec: used as wire / leading
exatec_wire_connected -- exatec: wire is connected to
}
exatec={ -- exatec: nodedef property, add to minetest.register_node
input_max=1 -- exatec: max stack to put
output_max=1 -- exatec: max stack to take
input_list="listname", -- exatec: list to put in
output_list="listname", -- exatec: list to stack take from
test_input=function(pos,stack,oldpos,curpos) -- exatec: test for input
return true or false/nil
end,
test_output=function(pos,stack,oldpos) -- exatec: test for output
return true or false/nil
end,
on_input=function(pos,stack,oldpos,objectpos) -- while input, note objectpos is sent by entities in tubes, and are nil in other cases
end,
on_output=function(pos,stack,oldpos) -- while output
end,
on_wire = function(pos) -- while wire connected
end
on_data_wire = function(pos,channel,from_channel,data) -- while data wire connected
end
on_tube = function(pos,stack,oldpos,object) -- stack incoming to tube
end
}
hat_properties={ -- used to define item as hat & properties used while attaching
pos = {x=0, y=6, z=0},
rotation = {x=0,y=90,z=0},
size = {x=0.5,y=0.5,z=0.5}
}
on_item_touch=function(pos,object) -- called when an item touch the node
Protect ##########################################################
depends = protect
# protect.add_game_rule_area(pos1,pos2,title) -- area that cant be interacted by anyone, returns id
# protect.remove_game_rule_area(id) -- remove game rule area
-- activate "protect:area_breaker" from exatec to break any "game rule area" it is inside
Player style ##########################################################
depends = player_style
# player_style.players[player_name]
-- player data
# player_style.register_profile({ -- register player style profile, if name is nil or "default" this will be default for everyone
name = "profile name",
texture = {"character.png"},
visual = "mesh",
visual_size = {x=1,y=1},
collisionbox = {-0.35,0,-0.35,0.35,1.8,0.35},
mesh = "character.b3d",
diving = true,
flying = true,
animation = {
stand={x=1,y=39,speed=30},
walk={x=41,y=61,speed=30},
},
eye_height = 1.6,
stepheight = 0.7,
hotbar = "player_api_hotbar.png",
hotbar_selected = "player_api_hotbar_selected.png",
})
# player_style.set_profile(player,"profile name") -- set the profile
# player_style.thirst_to_death(player) -- hurts until death or if the player drinks enough
# player_style.player_attached[player_name] = something/nil -- deactivated player styles /animation/moves ...
# player_style.register_button({ -- adds a button the players inventory
type="image_button", nil , "image", "item_image"
exit=true, nil , true
image="default_dirt.png", nil, image, item
name="dirt", button name/id
label="dirt text", button label
info="Dirts button", infotext / tooltip
action=function(user) action
end
})
# player_style.register_environment_sound({ --adds sounds around nodes
node="default:water_flowing", -- node required
sound="default_water_stream", -- sound required
gain=2, -- nil,number (default: 0.5)
timeloop=4, -- nil,number (default: 1)
distance = 10, -- nil,number (default: 10)
min_y = -20, -- nil,number (default: -31000)
max_y = 50, -- nil,number (default: 31000)
count = 5, -- nil,number (default: 1) [min count of nodes]
})
# player_style.get_player_skin(player) -- returns player skin
# player_style.get_current_player_skin(player) -- returns the current player's basic skin (return player:get_properties().textures[1])
# player_style.add_player_skin(player,texture,layer) -- add player texture (set_properties) adds the texture to lists that will merged with other textures to avoid conflicts (layer_list1 .. layer_list2 ...). armor is added to layer 2, spacesuit 3.
# player_style.remove_player_skin(player,texture,layer) -- remove the texture from the list
# player_style.update_player_skin(player,newskin) -- update the texture list, "newskin" if you want to tempoary change the skin
# player_style.register_skin({ -- adds skin to the skin list
name = "name" required
skin = "texture.png" required
cost = 500 nil = "Free"
info = "text"
origin = "name" nil = using mod's name
-- self is a table that is circuits through the skin functions
on_use=function(self,player) -- when a player starts to use the skin.
on_stop_using=function(self,player) -- when a player stop to use the skin
on_join=function(self,player) -- called when a player joins
on_use_join=function(self,player) -- called on both when a player joins and starts to use the skin, instead of make same function for on_join and on_use
on_step=function(self,player,dtime) -- on global step
})
player_style.register_manual_page({ -- adds an manual page
name = "Name" -- required, showed in the list
text = "information" -- required, text or formspec text
tags = {"default:dirt","default:dirt_with_grass","snowy"} -- used when looking for page content, when the player is looking at a node, object or wieldied item
label = "Page label" -- adds a label to the page
itemstyle = "mod:item" -- adds an item image, label and textarea
action=function(player) -- called when the page will be viewed
end,
})
Armor ##########################################################
depends = armor
# armor.register_item("type",{ -- register aror item: "chestplate"," helmet", "gloves", "boots", "leggings", "shield"
type="chestplate",
level=3, -- armor_group, 0 and higher, 100 = immortal
item="default:steel_ingot", -- craft item
groups={}, -- itemgroups, can be nil
image="default_steelblock.png", -- material, auto generating textures
item_image = "image.png", -- custom item image, replacing material image
armor_image = "image.png", -- custom armor image, replacing material image, "shield" will use item_image here too
hand_image = "image", -- custom wieldhand (used with gloves)
hand_damage= 1, -- custom wieldhand damage (used with gloves)
on_secondary_use = function() -- custom secondary_use (used with gloves) (right click in air)
})
# armor.update(player,wear/nil) -- updates the armor items
# armor.show(player) -- show the armor gui
# armor.user[player_name] -- player data
# armor.registered_items[item] -- get regstered item image
Nitroglycerine ##########################################################
depends = nitroglycerine
# nitroglycerine.crush(pos) -- spawns a ice crush
# nitroglycerine.freese(object) -- freese object / object to ice
# nitroglycerine.explotion(pos,{ -- creates an explotion
radius = 5, -- nil/9
set = "node", -- nil/""
place = {nodes}, -- nil/{"fire:not_igniter","air","air","air","air"}
place_chance = 5, -- nil/5
user_name = "name", -- nil/""
drops = 1 -- nil/1
velocity = 1 -- nil/1
hurt = 1 -- nil/1
})
# nitroglycerine.cons({ -- gets connected nodes in real time
pos=pos, -- required
max=500, -- nil/9
distance=1, -- nil/1 (the higher number the longer between nodes + lag)
name="a replacing", -- nil/random number
replace={ -- required (atleast 1 option) [options] can be node or group [value] node or function
["snowy"]="default:dirt_with_grass",
["default:leaves"]="default:stone",
["spreading_dirt_type"]="dirt",
["leaves"]=function(pos)
minetest.remove_node(pos)
end,
},
on_replace=function(pos)
print(replaced,dump(pos))
end,
})
Beds ##########################################################
depends = beds
# beds.sleeping(pos,player) -- sleep player and skip night if all players is sleeping
# beds.lay_and_stand(pos,player) -- toggle lay/stand
# beds.respawn(player) -- move player to bed
Weather ##########################################################
depends = weather
# weather.while_rain(pos) -- check if it is raining at position
Bones ##########################################################
depends = bones
# bones.drop(player) -- drop player bones
Achievements ##########################################################
depends = exaachievements
# exaachievements.register({
type="eat", -- required, alternatives: "eat", "craft", "place", "dig", "customize"
item="plants:apple", -- required: item or group (not used by "customize")
name="Apples", -- required
description="Eat 100 apples", -- required
count=100, -- nil/10
skills=2, -- nil/1
image="plants_apple.png", -- nil/image or item
min=10, -- nil/min achievements to be able
hide_until=2, -- nil/ min achievements to be able and visible
approve=function(player,item,pos) -- nil/ params depends by type
return true or false
end
completed=function(player) -- nil, called while achievement completed
end
})
# exaachievements.customize(player,achievement_name) -- Used by "customize"
# exaachievements.get_skills(user) -- Get player skills
# exaachievements.if_completed(user,achievement_name) -- if completed
# exaachievements.do_a(def) -- shortcut to dig a ... exaachievements.register({type="dig"... required item
Carts ##########################################################
depends = exacarts
# exacarts.register_rail({ -- you can customize the node's properties too
name = "name" -- required, adds "_rail" or
full_custom_name = "name" -- name that doesn't add "_rail"
texture = "texture" -- "default_ironblock.png"
overlay = "texture" -- ""
wood_modifer = true, -- nil/ (modifer the wood instead of the bar)
all_modifer = true, -- nil/ (modifer the wood & bar)
add_groups = groups -- add to groups and instead of making a whole new group set
craft_recipe = def -- you can make a full craft recipe, send directly to minetest.register_craft()
-- or automatically:
craft_item = "item" -- "group:metalstick"
craft_wood = "item" -- "group:stick"
craft_count = n -- 16
on_rail=function(pos,self,velocity) -- called when a cart is using it
end
})
Lakes ##########################################################
depends = lakes
# lakes.registry_lake("name",{ -- genrating lakes, all options are required
spawn_in = "default:dirt_with_grass",
chance = 10,
min_y = -50,
max_y = 50,
radius = math.random(5,20),
source = "default:water_source",
in_nodes = {
"default:dirt",
"default:dirt_with_grass",
"default:sand",
"default:water_source",
}
})
exatec ##########################################################
depends = exatec
# exatec.send(pos,force_send,table_to_send) -- send wire signal, force_send to send even the node are ignored
# exatec.data_send(pos,to_channel,node_channel,table_of_optional_content) -- send data wire signal
Multidimensions ##########################################################
depends = multidimensions
# multidimensions.register_dimension(name,{ -- all options are optional
dim_y number/nil, -- dimension y position, do not use if you aren't sure
dim_height 1000
bedrock_depth = 50
dirt_depth = 5
ground_limit = 530 -- height the ground ends
water_depth = 8
enable_water = true
terrain_density = 0.4
flatland = true
gravity = 1
sky = {} -- player:set_sky()
sun = {} -- player:set_sun()
moon = {} -- player:set_moon()
map = { -- map/generator properties
offset = 0
scale = 1
spread = {x=100,y=15,z=100}
seeddiff = 24
octaves = 5
persist = 0.7
lacunarity = 1
flags = "absvalue"
}
self = { -- table used by the dimension
stone = "default:stone"
dirt = "default:dirt"
grass = "default:dirt_with_grass"
air = "air"
water = "default:water_source"
sand = "default:sand"
bedrock = "multidimensions:bedrock"
}
stone_ores = {["default:space_titanium_ore"] = { -- same kind of propery for all ores
chunk=1 -- chunk (blob size)
chance=5000 -- chanse to be generated
}}
dirt_ores = ... -- ores in dirt
grass_ores = ... -- ores in grass
ground_ores = ... -- ores in ground
air_ores = ... -- ores in air
water_ores = ... -- ores in water
sand_ores = ... -- ores in sand
on_generate=function(data,id,cdata,area,x,y,z) -- called when dimension is generating
}
multidimensions:bedrock -- node used as bedrock
multidimensions:blocking -- node used as invisible walls
multidimensions:killing -- node used as killing none walkable floor
Default ##########################################################
depends = default
# default.register_chest({
name = "locked_chest", -- Required
description = "Locked chest",
locked = true,
burnable = true,
texture="default_wood.png", -- Required
craft={{"default:chest","default:steel_ingot"}},
})
# default.register_fence({
name = "apple_wood", -- Required
texture = "plants_apple_wood.png", -- Required
craft={{"group:stick","group:stick","group:stick"}}
})
# default.register_chair({
name = "apple_wood", -- Required
description = "Apple wood chair",
burnable = true,
texture = "plants_apple_wood.png", -- Required
craft={{"group:stick","wood",""}}
})
# default.workbench.register_craft({ -- register craft recipe for a item with workbenchs
output="mod:name",
recipe={
{"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
{"","group:stick",""},
{"","group:stick",""},
}
},
})
# default.date(param,compare_time)
-- param:
-- "get" get current time (return os.time())
-- "s" secunds
-- "m" minuts
-- "h" hours
-- "d" days
-- example:
-- local time = default.date("get")
-- if default.date("h",time) > 3 then
# default.register_eatable(itemtype,name,hp,gaps,def)
-- itemtype "node"/"tool"/"craftitem"
-- name "mod:name"
-- hp number health to add at each use
-- gaps number parts to eat,
-- def itemdef table
def.groups = { -- can be nil
eatable = 2 nil/hp -- adds hp
gaps = 4 nil/gaps -- gaps to eat
wet = -1 nil/-0.1 -- gives thurst while eating
}
# default.register_door({
name="apple_wood_door", --Required: name of item
description = "Apple wood door",
texture="plants_apple_wood.png",
burnable = true,
craft={
{"plants:apple_wood","plants:apple_wood",""},
{"plants:apple_wood","plants:apple_wood",""},
{"plants:apple_wood","plants:apple_wood",""},
}
})
# default.register_plant({ -- generating a nodedef with default settings, you can change all of them
name="anthriscus_sylvestris" --Required: name of item
description = ""
tiles={"parsnip.png"}
decoration={noise_params={
offset=-0.0015
scale=0.015
seed=3365
}},
groups={spreading_plant=10}
visual_scale=1.1
})
default.register_tree({
name="apple", -- Required: name of items
fruit={ -- Spawning fruits
hp=1,
gaps=4,
description = "Apple",
tiles={"plants_apple.png"},
inventory_image="plants_apple.png",
},
tree={tiles={"tree_top.png","tree_top.png","tree.png"}}, -- tree
sapling={tiles={"plants_apple_treesapling.png"}}, -- sapling
wood={tiles={"plants_apple_wood.png"}}, -- wood
leaves={tiles={"plants_apple_leaves.png"}}, -- leaves
schematic=modpath.."tree.mts", -- Required: genrating the tree
sapling_place_schematic=function(pos) -- Required: growing tree from sapling
minetest.place_schematic(pos, modpat ..tree.mts)
end
})
==== default.registry_mineral(def)
-- auto generating mineral items: block, ore, lump, ingot, pick, shovel axe, vineyardknife, hoe and crafting
-- tool craft-recipes are registered as workbench crafting
-- Options:
-- all options have default values, so you don't have to fill a table if you just want to add 1 value inside it except tool_capabilities, example of this in default/items.lua.
-- the table of settings will be set as nodedef / itemdef
# default.registry_mineral({
name "itemname", --Required: name used for all items
texture "img.png", --Required: used as default texture for all items
not_lump nil/true --disable lump (drop)
lump={
description nil/""
inventory_image nil/"img.png"
}
drop={ --can be set if not_lump = true
name nil/""
inventory_image nil/"img.png"/diamond/longcrystal/round(tinemeald/oval/crystal/quartz/emeald
description nil/""
}
not_ingot nil/true --disable ingot
not_ingot_craft nil/true --disable automatic recipe
ingot={
description nil/""
inventory_image nil/"img.png"
},
not_block nil/true --disable block
not_block_craft nil/true --disable automatic recipe
block={
tiles tiles/table
description nil/""
sounds nil/sounds
groups nil/table
}
not_ore nil/true --disable block
ore={
tiles tiles/table
description nil/""
sounds nil/sounds
groups nil/table
}
ore_settings nil/table can be used even not_ore = true through name
name nil/string
wherein nil/"node"
clust_scarcity nil/number
clust_num_ores nil/number
clust_size nil/number
y_min nil/number
y_max nil/number
}
not_pick nil/true --disable pick
pick={
description ="", nil/""
sounds = sounds nil/sounds
inventory_image = "img.png"
tool_capabilities = {
full_punch_interval
max_drop_level
damage_groups
groupcaps
}
}
not_shovel nil/true --disable shovel
shovel={
description nil/""
sounds nil/sounds
inventory_image nil/"img.png"
tool_capabilities nil or {
full_punch_interval
max_drop_level
damage_groups
groupcaps
}
}
not_axe nil/true --disable axe
axe={
description nil/""
sounds nil/sounds
inventory_image nil/"img.png"
tool_capabilities nil or {
full_punch_interval
max_drop_level
damage_groups
groupcaps
}
}
not_vineyardknife nil/true --disable vineyardknife
vineyardknife={
description nil/""
sounds nil/sounds
inventory_image nil/"img.png"
tool_capabilities nil or {
full_punch_interval
max_drop_level
damage_groups
groupcaps
}
}
not_hoe nil/true --disable hoe
hoe={
description nil/""
sounds nil/sounds
inventory_image nil/"img.png"
tool_capabilities nil or {
full_punch_interval
max_drop_level
damage_groups
groupcaps
}
}
regular_additional_craft={ -- default crafting, can contain multiple recipes
{output="default:coalblock",
recipe={
{"default:coal_lump","default:coal_lump","default:coal_lump"},
{"default:coal_lump","default:coal_lump","default:coal_lump"},
{"default:coal_lump","default:coal_lump","default:coal_lump"},
}
}
}
workbench_additional_craf={ -- workbench crafting, can contain multiple recipes
{output="default:coalblock",
recipe={
{"default:coal_lump","default:coal_lump","default:coal_lump"},
{"default:coal_lump","default:coal_lump","default:coal_lump"},
{"default:coal_lump","default:coal_lump","default:coal_lump"},
}
}
}
})
# default.register_blockdetails({-- registers and block with texture/object above, is mostly used by flat ocean decorations, everything can be nil except name.
name="name", -- required
node={ -- node def
block="default:sand" -- is set while dug
tiles = {"default_sand.png","default_stick.png"} -- the second one is the detail on the block
},
item={}, -- item/drop def ... item={type="node"} for node
ddef={}, -- decoration generating def
})
# default.register_pebble({ -- everything can be nil except name.
name="stone",
tiles={"default_stone.png","default_sand.png"}, -- the second one is used by ocean decorations
block="default:sand", -- is set while dug
decoration={} -- decoration generating def
})
# bows.register_arrow(name,{ --everything can be nil except then name.
description = "",
damage = 1,
on_hit_sound = "default_dig_dig_immediate",
on_hit_object = function(self,target,hp,user,lastpos)
end,
on_hit_node = function(self,pos,user,lastpos)
end,
on_step = function(self,dtime,user,pos,oldpos)
end,
groups = {},
craft_count = 4,
craft = {
{"default:flint","group:stick","examobs:feather"}
{"","",""},
}
})
# bows.register_bow(name,{ -- everything can be nil except name.
description = "",
uses = 49, -- amount of uses before it breaks
level = 6, -- arrow power/velocity
shots = 1, -- amount of shots at same time
texture = "default_wood.png"
groups = {},
craft = {
{"","group:stick","materials:string"},
{"group:stick","","materials:string"},
{"","group:stick","materials:string"}
},
})
# bows.arrow_remove(self) -- remove the arrow
# apos(pos,x,y,z) -- simply add number to position, everything can be nil except pos, eg apos(pos,0,2)
# default.set_on_player_death(playername,eventname,value/function) -- run / delete value on player death/leave
# default.get_on_player_death(playername,eventname) -- get event
# default.defpos(pos,"buildable_to") -- safe returns minetest.registered_nodes[minetest.get_node(pos).name].subdef
# default.defname(name,"buildable_to") -- same as above, but requires name insead
# default.def(name) -- returns minetest.registered_nodes[node_name] without crashing while failing
# default.registry_bucket("default:water_source") -- creates a bucket
# default.wieldlight(user_name,wield_index,item_to_wear) -- wield light / flashlight
# default.punch(target,puncher,dmg/nil) --punch object
# default.punch_pos(pos,damage/nil,even_items true/nil) -- punch objects in a position (a<=1)
# default.take_item(clicker) -- take wield item
# default.dye_texturing(index,{ -- returns a modified string, everything can be nil
opacity = 150,
image_w = 16,
image_h = 16,
palette_w = 7,
palette = "default_palette.png",
})
# default.dye_coloring(pos, node, player, pointed_thing) -- used by colorable nodes, eg .on_punch=default.dye_coloring
# default.treasure({ -- adds a node with treasure-listed items
level = 1, -- nil to 3, (auto usage), level of treasure
items = {}, -- can be nil, customized items to put in
node = "default:chest", -- can be nil, node to set
})
# default.pickupable(entity/self,player) -- allows player to pick up object
# default.is_decoration(object,item) -- if object is meant to be a decoration / not efected by players/mobs..., checks for entitydef decoration = true
# default.watersplash(pos,item true/nil) -- creates a water splash
# default.flowing(object) -- makes object flowing in flowing source, use in a on_step def
# Coin(player,count) -- add couns to player
# num(number) -- returns if number is a number
# memory_mb() -- returns curennt memory used by lua
# default.respawn_player(player,drop_bones true/nil)
default.node_sound_defaults() -- nodedef sounds
default.node_sound_stone_defaults()
default.node_sound_wood_defaults()
default.node_sound_water_defaults()
default.node_sound_metal_defaults()
default.node_sound_dirt_defaults(a)
default.node_sound_leaves_defaults()
default.node_sound_gravel_defaults()
default.node_sound_glass_defaults()
default.node_sound_clay_defaults()
default.node_sound_snow_defaults()
default.node_sound_sand_defaults()
default.tool_breaks_defaults(a) -- itemdef tool break sound
Mobs ##########################################################
depends = examobs
# examobs.register_mob({ -- shows the most options, you can explore the examobs/mina.lua to find more
name = "name", -- name
type = "npc", -- mob type
dmg = 1, -- punching damage
aggressivity = 1, -- -2 to 2, -2: flee from everything, -1: flee from monsters, 0: no reaction, 1: fight monsters, 2: fight everything
walk_speed = 4,
run_speed = 8,
hp = 20 -- health
physical = true
collisionbox = {-0.35,0,-0.35,0.35,1.8,0.35}
visual = "mesh"
visual_size = {x=1,y=1}
mesh = "character.b3d"
makes_footstep_sound = true
lay_on_death = -- 0/1 (off/on)
textures = {"character.png"}
team = "default"
range = 15 -- view range
reach = 4 -- can reach & punch
punch_chance = 5
bottom = 0 -- checking nodes from here (pos.y+bottom)
breathing = 1 -- 0/1 (breathing as fishes/drowning)
resist_nodes = {} -- {["default:lava_source"]=1,["fire:basic_flame"]=true}
swiming = 1 -- 0/1 (swiming/drowning while it is in water, as an deathtrap)
inv = {} -- inventory/drops {["default:stick"]=2,["default:dirt"]=89}
flee_from_threats_only = 0 -- 1/0 (off/on)
floating = {} -- {["default:water_source"]=1,["default:gass"]=true}
floating_in_group = -- alternative to above, "water"
updatetime = 1 -- run/cycle time
spawning = nil -- nil/false automatic spawning, false = no spawning
spawn_chance = 100
spawn_on = {"group:dirt","group:sand"}
spawn_in = -- node or group-name
light_min = 9
light_max = 15
lifetime = 300 -- before its removed
add_wear = 10000 -- adds tool wear
animation = "default" -- or {stand={x=1,y=39},walk={x=41,y=61,},run={x=41,y=61,speed=60},attack={x=65,y=75},lay={x=113,y=123}}
step = function(self) -- on_step
on_dying = function(self)
death = function(self)
on_punched = function(self,puncher)
on_punching = function(self)
before_punching = function(self)
before_spawn = function(pos)
on_spawn = function(self)
on_load = function(self)
is_food = function(self,item_string) -- return true to use item as food
on_lifedeadline = function(self) -- runned while mob lifetime expended, return true to reset it
on_walk = function(self,x,y,z)
on_fly = function(self,x,y,z)
on_stand = function(self)
on_click = function(self,clicker)
})
# examobs.register_bird(def) -- as to above, adapted for birds
# examobs.register_fish(def) -- fish
# self:eat_item(self,item,nil or hp)
# self:heal(self,hp,gaps,num)
# self:pos() -- return self.object:get_pos()
# self:hurt(dmg)
# examobs.jump(self)
# examobs.stand(self)
# examobs.walk(self,run)
# examobs.lookat(self,pos)
# examobs.anim(self,type)
# examobs.num(a) --check number
# examobs.team(object)
# examobs.known(self,object,type,get)
# examobs.visiable(pos1,pos2)
# examobs.gethp(ob,even_dead)
# examobs.viewfield(self,ob2)
# examobs.faceside(self,ob)
# examobs.pointat(self,d)
# examobs.distance(pos1,pos2)
# examobs.punch(puncher,target,damage)
# examobs.showtext(self,text,color)
# examobs.dropall(self)
# examobs.dying(self,set)
# walkable(pos)
# examobs.shoot_arrow(self,pos2,"examobs:arrow")
##########################################################
Yet undocumentation #############################################
##########################################################
villages
sign
plasma
paintnings