Update
parent
225d3c35b2
commit
2153abf0ee
|
@ -1,6 +1,22 @@
|
|||
defense = {}
|
||||
defense.debug = false
|
||||
|
||||
minetest.register_chatcommand("debug", {
|
||||
params = "",
|
||||
description = "Toggle Defense debug mode",
|
||||
privs = {server=true},
|
||||
func = function(name, param)
|
||||
defense.debug = not defense.debug
|
||||
if defense.debug then
|
||||
regeneration.rate = 100
|
||||
minetest.set_timeofday(0.3)
|
||||
else
|
||||
regeneration.rate = 0.1
|
||||
end
|
||||
return true
|
||||
end,
|
||||
})
|
||||
|
||||
local modpath = minetest.get_modpath("defense")
|
||||
local function dofile2(file)
|
||||
dofile(modpath .. "/" .. file)
|
||||
|
|
|
@ -17,10 +17,62 @@ defense.mobs.register_mob("defense:botete", {
|
|||
move_speed = 4,
|
||||
attack_damage = 0,
|
||||
attack_range = 8,
|
||||
attack_interval = 2.2,
|
||||
attack_interval = 3.4,
|
||||
|
||||
on_step = function(self, dtime)
|
||||
defense.mobs.default_prototype.on_step(self, dtime)
|
||||
self:hunt()
|
||||
end,
|
||||
|
||||
attack = function(self, obj, dir)
|
||||
local pos = self.object:getpos()
|
||||
local hdir = vector.normalize({x=dir.x, y=0, z=dir.z})
|
||||
pos = vector.add(pos, vector.multiply(hdir, 0.4))
|
||||
local s = 9 -- Launch speed
|
||||
local g = -defense.mobs.gravity
|
||||
|
||||
-- Calculate launch angle
|
||||
local angle
|
||||
local delta = vector.subtract(obj:getpos(), pos)
|
||||
delta.y = delta.y + 1
|
||||
local x2 = delta.x*delta.x + delta.z*delta.z
|
||||
local s2 = s*s
|
||||
local r = s2*s2 - g * (g*x2 + 2*delta.y*s2)
|
||||
if r >= 0 then
|
||||
angle = math.atan((s2 + math.sqrt(r) * (math.random(0,1)*2-1))/(g*math.sqrt(x2)))
|
||||
else
|
||||
angle = math.pi/4
|
||||
end
|
||||
|
||||
local xs = math.cos(angle) * s * (0.9 + math.random() * 0.2)
|
||||
local ys = math.sin(angle) * s * (0.9 + math.random() * 0.2)
|
||||
local horiz_angle = math.atan2(delta.z, delta.x) + (math.random() * 0.1 - 0.05)
|
||||
local v = {
|
||||
x = math.cos(horiz_angle) * xs,
|
||||
y = ys,
|
||||
z = math.sin(horiz_angle) * xs
|
||||
}
|
||||
|
||||
local projectile = minetest.add_entity(pos, "defense:gooball")
|
||||
projectile:setvelocity(v)
|
||||
self.object:setvelocity(vector.multiply(v, -0.5))
|
||||
end,
|
||||
})
|
||||
|
||||
-- Botete's projectile
|
||||
minetest.register_entity("defense:gooball", {
|
||||
physical = false,
|
||||
visual = "sprite",
|
||||
visual_size = {x=1, y=1},
|
||||
textures = {"defense_gooball.png"},
|
||||
on_activate = function(self, staticdata)
|
||||
self.object:setacceleration({x=0, y=defense.mobs.gravity, z=0})
|
||||
end,
|
||||
on_step = function(self, dtime)
|
||||
local pos = self.object:getpos()
|
||||
if minetest.get_node(pos).name ~= "air" then
|
||||
-- self:on_hit()
|
||||
self.object:remove()
|
||||
end
|
||||
end,
|
||||
})
|
|
@ -16,7 +16,7 @@ defense.mobs.register_mob("defense:paniki", {
|
|||
movement = "air",
|
||||
move_speed = 16,
|
||||
attack_damage = 1,
|
||||
attack_range = 1.0,
|
||||
attack_range = 1.1,
|
||||
attack_interval = 0.8,
|
||||
|
||||
rank = 0,
|
||||
|
@ -69,8 +69,8 @@ defense.mobs.register_mob("defense:paniki", {
|
|||
end
|
||||
end,
|
||||
|
||||
attack = function(self, obj)
|
||||
attack = function(self, obj, dir)
|
||||
defense.mobs.default_prototype.attack(self, obj)
|
||||
self.flee_timer = math.random()
|
||||
self.flee_timer = math.random() * 0.5
|
||||
end,
|
||||
})
|
|
@ -130,7 +130,10 @@ defense.mobs.register_mob("defense:sarangay", {
|
|||
local myv = self.object:getvelocity()
|
||||
for _,o in pairs(minetest.get_objects_inside_radius(pos, radius)) do
|
||||
if o ~= self.object then
|
||||
o:set_hp(o:get_hp() - 1)
|
||||
o:punch(self.object, 1.0, {
|
||||
full_punch_interval=1.0,
|
||||
damage_groups = {fleshy=1}
|
||||
}, nil)
|
||||
|
||||
local e = o:get_luaentity()
|
||||
if e then
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 390 B |
Loading…
Reference in New Issue