diff --git a/api.lua b/api.lua index d34242a..0e66aec 100644 --- a/api.lua +++ b/api.lua @@ -6,7 +6,7 @@ local use_cmi = minetest.global_exists("cmi") mobs = { mod = "redo", - version = "20200619", + version = "20200620", intllib = S, invis = minetest.global_exists("invisibility") and invisibility or {} } @@ -645,7 +645,14 @@ local effect = function(pos, amount, texture, min_size, max_size, max_size = max_size or 1 gravity = gravity or -10 glow = glow or 0 - fall = fall and 0 or -radius + + if fall == true then + fall = 0 + elseif fall == false then + fall = radius + else + fall = -radius + end minetest.add_particlespawner({ amount = amount, @@ -665,6 +672,12 @@ local effect = function(pos, amount, texture, min_size, max_size, }) end +function mobs:effect(pos, amount, texture, min_size, max_size, + radius, gravity, glow, fall) + + effect(pos, amount, texture, min_size, max_size, radius, gravity, glow, fall) +end + -- update nametag colour function mob_class:update_tag() @@ -3862,6 +3875,7 @@ function mobs:register_arrow(name, def) drop = def.drop or false, -- drops arrow as registered item when true collisionbox = def.collisionbox or {-.1, -.1, -.1, .1, .1, .1}, timer = 0, + lifetime = def.lifetime or 4.5, switch = 0, owner_id = def.owner_id, rotate = def.rotate, @@ -3876,11 +3890,11 @@ function mobs:register_arrow(name, def) on_step = def.on_step or function(self, dtime) - self.timer = self.timer + 1 + self.timer = self.timer + dtime local pos = self.object:get_pos() - if self.switch == 0 or self.timer > 150 then + if self.switch == 0 or self.timer > self.lifetime then self.object:remove() ; -- print("removed arrow") diff --git a/api.txt b/api.txt index fb846b6..ee7cef0 100644 --- a/api.txt +++ b/api.txt @@ -293,7 +293,8 @@ enhance mob functionality and have them do many interesting things: 'custom_attack' when set this function is called instead of the normal mob melee attack, parameters are (self, to_attack) and if true is returned normal attack function continued. - 'on_die' a function that is called when mob is killed (self, pos) + 'on_die' a function that is called when mob is killed (self, pos), also + has access to self.cause_of_death table. 'do_custom' a custom function that is called every tick while mob is active and which has access to all of the self.* variables e.g. (self.health for health or self.standing_in for node @@ -387,6 +388,24 @@ true the mob will not spawn. 'name' is the name of the animal/monster +Particle Effects +---------------- + +mobs:effect(pos, amount, texture, min_size, max_size, radius, gravity, glow, fall) + +This function provides a quick way to spawn particles as an effect. + + 'pos' center position of particle effect. + 'amount' how many particles. + 'texture' texture filename to use for effect. + 'min_size' smallest particle size. + 'max_size' largest particle size. + 'radius' how far particles spread outward from center. + 'gravity' gravity applied to particles once they spawn. + 'glow' number between 1 and 15 for glowing particles. + 'fall' when true particles fall, false has them rising, nil has them scatter. + + Making Arrows ------------- @@ -422,7 +441,9 @@ This function registers a arrow for mobs with the attack type shoot. 'on_step' is a custom function when arrow is active, nil for default. 'on_punch' is a custom function when arrow is punched, nil by default - 'collisionbox' is hitbox table for arrow, {0,0,0,0,0,0} by default. + 'collisionbox' is hitbox table for arrow, {-.1,-.1,-.1,.1,.1,.1} by default. + 'lifetime' contains float value for how many seconds arrow exists in + world before being removed (default is 4.5 seconds). Spawn Eggs