From 18a9909f43a7a7772123fc34999a92d466d1a454 Mon Sep 17 00:00:00 2001 From: Lean Rada Date: Thu, 29 Jan 2015 11:11:35 +0800 Subject: [PATCH] Update mobs --- mods/defense/mob.lua | 5 ++++- mods/defense/mobs/botete.lua | 5 ++++- mods/defense/mobs/paniki.lua | 4 ++-- mods/defense/mobs/sarangay.lua | 21 +++++++-------------- mods/defense/mobs/unggoy.lua | 21 ++++++++++++++++++++- 5 files changed, 37 insertions(+), 19 deletions(-) diff --git a/mods/defense/mob.lua b/mods/defense/mob.lua index f7ba657..ea6dbe1 100644 --- a/mods/defense/mob.lua +++ b/mods/defense/mob.lua @@ -60,7 +60,10 @@ function mobs.default_prototype:on_step(dtime) end if not defense:is_dark() then - self:damage(self.object:get_hp() * math.random() + 1) + local damage = self.object:get_hp() * math.random() + if damage >= 0.5 then + self:damage(math.ceil(damage)) + end end if self.life_timer <= 0 then diff --git a/mods/defense/mobs/botete.lua b/mods/defense/mobs/botete.lua index 54c476b..c211403 100644 --- a/mods/defense/mobs/botete.lua +++ b/mods/defense/mobs/botete.lua @@ -216,7 +216,7 @@ minetest.register_entity("defense:gooball", { space = vector.add(space, back) bnode = minetest.get_node_or_nil(space) until not bnode or bnode.name == "air" - place_goo(space, 6) + place_goo(space, 9) self.object:remove() end end, @@ -235,6 +235,9 @@ minetest.register_node("defense:goo", { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5}, }, + selection_box = { + type = "wallmounted", + }, paramtype = "light", paramtype2 = "wallmounted", liquid_viscosity = 4, diff --git a/mods/defense/mobs/paniki.lua b/mods/defense/mobs/paniki.lua index 034fcea..366e94c 100644 --- a/mods/defense/mobs/paniki.lua +++ b/mods/defense/mobs/paniki.lua @@ -1,5 +1,5 @@ defense.mobs.register_mob("defense:paniki", { - hp_max = 3, + hp_max = 7, collisionbox = {-0.3,-0.3,-0.3, 0.3,0.3,0.3}, mesh = "defense_paniki.b3d", textures = {"defense_paniki.png"}, @@ -17,7 +17,7 @@ defense.mobs.register_mob("defense:paniki", { move_speed = 16, attack_damage = 1, attack_range = 1.1, - attack_interval = 0.8, + attack_interval = 1.2, rank = 0, leader = nil, diff --git a/mods/defense/mobs/sarangay.lua b/mods/defense/mobs/sarangay.lua index 4bb9e49..e49ff30 100644 --- a/mods/defense/mobs/sarangay.lua +++ b/mods/defense/mobs/sarangay.lua @@ -46,8 +46,6 @@ defense.mobs.register_mob("defense:sarangay", { on_step = function(self, dtime) defense.mobs.default_prototype.on_step(self, dtime) if self.charging then - minetest.chat_send_all(self.charge_power) - if self.charge_power > 0.5 then self:hunt() end @@ -70,25 +68,20 @@ defense.mobs.register_mob("defense:sarangay", { else local nearest = self:find_nearest_player() if nearest then - if math.abs(self.object:getpos().y - nearest.position.y) < 4 then - if nearest.distance > 4 and math.random() < 0.1 then - self:set_charging_state(true) - self.destination = nil - elseif nearest.distance < 4 then - self:hunt() - else - local dir = vector.direction(nearest.position, self.object:getpos()) - self.destination = vector.add(nearest.position, vector.multiply(dir, 12)) - end - else + if nearest.distance > 4 and math.random() < 0.1 then + self:set_charging_state(true) + self.destination = nil + elseif nearest.distance < 4 then self:hunt() + else + local dir = vector.direction(nearest.position, self.object:getpos()) + self.destination = vector.add(nearest.position, vector.multiply(dir, 12)) end end end end, set_charging_state = function(self, state) - minetest.chat_send_all(dump(state)) self.charging = state if state then self.charge_power = 0.1 diff --git a/mods/defense/mobs/unggoy.lua b/mods/defense/mobs/unggoy.lua index b5e6026..a94730c 100644 --- a/mods/defense/mobs/unggoy.lua +++ b/mods/defense/mobs/unggoy.lua @@ -1,5 +1,5 @@ defense.mobs.register_mob("defense:unggoy", { - hp_max = 3, + hp_max = 11, collisionbox = {-0.4,-0.01,-0.4, 0.4,1.5,0.4}, mesh = "defense_unggoy.b3d", textures = {"defense_unggoy.png"}, @@ -51,4 +51,23 @@ defense.mobs.register_mob("defense:unggoy", { end end end, + + is_standing = function(self) + -- Able to stand on top of others + if defense.mobs.default_prototype.is_standing(self) then + return true + else + local pos = self.object:getpos() + pos.y = pos.y - 1 + for _,o in ipairs(minetest.get_objects_inside_radius(pos, 1)) do + if o ~= self.object then + local e = o:get_luaentity() + if e and e.name == self.name then + return true + end + end + end + return false + end + end, }) \ No newline at end of file