master
Lean Rada 2015-01-23 02:16:11 +08:00
parent 225d3c35b2
commit 2153abf0ee
5 changed files with 76 additions and 5 deletions

View File

@ -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)

View 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,
})

View File

@ -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,
})

View File

@ -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