livingnether/noodlemaster.lua

148 lines
3.5 KiB
Lua

mobs:register_mob("livingnether:noodlemaster", {
stepheight = 3,
type = "monster",
passive = false,
attack_animals = false,
damage = 15,
reach = 5,
attack_type = "dogshoot",
dogshoot_switch = 1,
dogshoot_count_max = 12, -- shoot for 10 seconds
dogshoot_count2_max = 3, -- dogfight for 3 seconds
shoot_interval = 0.2,
arrow = "livingnether:lavaball",
shoot_offset = 0.8,
hp_min = 250,
hp_max = 1000,
armor = 100,
collisionbox = {-3,-1.0,-3,3,3,3},
visual = "mesh",
mesh = "Noodlemaster.b3d",
visual_size = {x = 4.0, y = 4.0},
textures = {
{"texturenoodlemaster.png"},
},
sounds = {
death = "livingnether_noodlemaster",
random = "livingnether_noodlemaster2",
distance = 30,
},
makes_footstep_sound = false,
walk_velocity = 3,
run_velocity = 4,
fall_speed = 0,
jump = true,
jump_height = 6,
stepheight = 3,
fly = true,
drops = {
{name = "default:mese_crystal", chance = 1, min = 1, max = 3},
},
water_damage = 1,
lava_damage = 0,
light_damage = 0,
fear_height = 0,
animation = {
speed_normal = 50,
stand_start = 0,
stand_end = 100,
walk_start = 100,
walk_end = 200,
fly_start = 100, -- swim animation
fly_end = 200,
punch_start = 250,
punch_end = 350,
shoot_start = 250,
shoot_end = 350,
-- 50-70 is slide/water idle
},
fly_in = {"air"},
floats = 0,
view_range = 20,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 5, 50, 80, false, nil) then return end
end,
})
if not mobs.custom_spawn_livingnether then
mobs:spawn({
name = "livingnether:noodlemaster",
nodes = {"nether:rack_deep"},
min_light = 0,
interval = 600,
chance = 8000, -- 15000
min_height = -8000,
max_height = -3000,
})
end
mobs:register_egg("livingnether:noodlemaster", ("Noodlemaster"), "anoodlemaster.png")
-- fireball (weapon)
mobs:register_arrow("livingnether:lavaball", {
visual = "sprite",
-- visual = "wielditem",
visual_size = {x = 0.5, y = 0.5},
textures = {"lavaball.png"},
collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
velocity = 7,
tail = 1,
tail_texture = "lavaball.png",
tail_size = 10,
glow = 5,
expire = 0.1,
on_activate = function(self, staticdata, dtime_s)
-- make fireball indestructable
self.object:set_armor_groups({immortal = 1, fleshy = 100})
end,
-- if player has a good weapon with 7+ damage it can deflect fireball
on_punch = function(self, hitter, tflp, tool_capabilities, dir)
if hitter and hitter:is_player() and tool_capabilities and dir then
local damage = tool_capabilities.damage_groups and
tool_capabilities.damage_groups.fleshy or 1
local tmp = tflp / (tool_capabilities.full_punch_interval or 1.4)
if damage > 6 and tmp < 4 then
self.object:set_velocity({
x = dir.x * self.velocity,
y = dir.y * self.velocity,
z = dir.z * self.velocity,
})
end
end
end,
-- direct hit, no fire... just plenty of pain
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 8},
}, nil)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 8},
}, nil)
end,
-- node hit
hit_node = function(self, pos, node)
mobs:boom(self, pos, 1)
end
})