dofile(minetest.get_modpath("mobs").."/api.lua") mobs:register_mob("mobs:dirt_monster", { type = "monster", hp_max = 5, collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, visual = "mesh", mesh = "mobs_stone_monster.x", textures = {"mobs_dirt_monster.png"}, visual_size = {x=3, y=2.6}, makes_footstep_sound = true, view_range = 15, walk_velocity = 1, run_velocity = 3, damage = 2, drops = { {name = "default:dirt", chance = 1, min = 3, max = 5,}, }, armor = 100, drawtype = "front", water_damage = 1, lava_damage = 5, light_damage = 2, on_rightclick = nil, attack_type = "dogfight", animation = { speed_normal = 15, speed_run = 15, stand_start = 0, stand_end = 14, walk_start = 15, walk_end = 38, run_start = 40, run_end = 63, punch_start = 40, punch_end = 63, } }) mobs:register_spawn("mobs:dirt_monster", {"default:dirt_with_grass"}, 3, -1, 7000, 3, 31000) mobs:register_mob("mobs:stone_monster", { type = "monster", hp_max = 10, collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, visual = "mesh", mesh = "mobs_stone_monster.x", textures = {"mobs_stone_monster.png"}, visual_size = {x=3, y=2.6}, makes_footstep_sound = true, view_range = 10, walk_velocity = 0.5, run_velocity = 2, damage = 3, drops = { {name = "default:mossycobble", chance = 1, min = 3, max = 5,}, }, light_resistant = true, armor = 80, drawtype = "front", water_damage = 0, lava_damage = 0, light_damage = 0, attack_type = "dogfight", animation = { speed_normal = 15, speed_run = 15, stand_start = 0, stand_end = 14, walk_start = 15, walk_end = 38, run_start = 40, run_end = 63, punch_start = 40, punch_end = 63, } }) mobs:register_spawn("mobs:stone_monster", {"default:stone"}, 3, -1, 7000, 3, 0) mobs:register_mob("mobs:sand_monster", { type = "monster", hp_max = 3, collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, visual = "mesh", mesh = "mobs_sand_monster.x", textures = {"mobs_sand_monster.png"}, visual_size = {x=8,y=8}, makes_footstep_sound = true, view_range = 15, walk_velocity = 1.5, run_velocity = 4, damage = 1, drops = { {name = "default:sand", chance = 1, min = 3, max = 5,}, }, light_resistant = true, armor = 100, drawtype = "front", water_damage = 3, lava_damage = 1, light_damage = 0, attack_type = "dogfight", animation = { speed_normal = 15, speed_run = 15, stand_start = 0, stand_end = 39, walk_start = 41, walk_end = 72, run_start = 74, run_end = 105, punch_start = 74, punch_end = 105, }, }) mobs:register_spawn("mobs:sand_monster", {"default:desert_sand"}, 20, -1, 7000, 3, 31000) mobs:register_mob("mobs:tree_monster", { type = "monster", hp_max = 5, collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, visual = "mesh", mesh = "mobs_tree_monster.x", textures = {"mobs_tree_monster.png"}, visual_size = {x=4.5,y=4.5}, makes_footstep_sound = true, view_range = 15, walk_velocity = 1, run_velocity = 3, damage = 2, drops = { {name = "default:sapling", chance = 3, min = 1, max = 2,}, {name = "default:junglesapling", chance = 3, min = 1, max = 2,}, }, light_resistant = true, armor = 100, drawtype = "front", water_damage = 1, lava_damage = 5, light_damage = 2, disable_fall_damage = true, attack_type = "dogfight", animation = { speed_normal = 15, speed_run = 15, stand_start = 0, stand_end = 24, walk_start = 25, walk_end = 47, run_start = 48, run_end = 62, punch_start = 48, punch_end = 62, }, }) mobs:register_spawn("mobs:tree_monster", {"default:leaves", "default:jungleleaves"}, 3, -1, 7000, 3, 31000) mobs:register_mob("mobs:sheep", { type = "animal", hp_max = 5, collisionbox = {-0.4, -0.01, -0.4, 0.4, 1, 0.4}, textures = {"mobs_sheep.png"}, visual = "mesh", mesh = "mobs_sheep.x", makes_footstep_sound = true, walk_velocity = 1, armor = 200, drops = { {name = "mobs:meat_raw", chance = 1, min = 2, max = 3,}, }, drawtype = "front", water_damage = 1, lava_damage = 5, light_damage = 0, sounds = { random = "mobs_sheep", }, animation = { speed_normal = 15, stand_start = 0, stand_end = 80, walk_start = 81, walk_end = 100, }, follow = "farming:wheat", view_range = 5, on_rightclick = function(self, clicker) local item = clicker:get_wielded_item() if item:get_name() == "farming:wheat" then if not self.tamed then if not minetest.setting_getbool("creative_mode") then item:take_item() clicker:set_wielded_item(item) end self.tamed = true elseif self.naked then if not minetest.setting_getbool("creative_mode") then item:take_item() clicker:set_wielded_item(item) end self.food = (self.food or 0) + 1 if self.food >= 8 then self.food = 0 self.naked = false self.object:set_properties({ textures = {"mobs_sheep.png"}, mesh = "mobs_sheep.x", }) end end return end if clicker:get_inventory() and not self.naked then self.naked = true if minetest.registered_items["wool:white"] then clicker:get_inventory():add_item("main", ItemStack("wool:white "..math.random(1,3))) end self.object:set_properties({ textures = {"mobs_sheep_shaved.png"}, mesh = "mobs_sheep_shaved.x", }) end end, }) mobs:register_spawn("mobs:sheep", {"default:dirt_with_grass"}, 20, 8, 9000, 1, 31000) mobs:register_mob("mobs:pig", { type = "animal", hp_max = 5, collisionbox = {-0.4, -0.01, -0.4, 0.4, 1, 0.4}, textures = {"mobs_pig.png"}, visual = "mesh", mesh = "mobs_pig.x", makes_footstep_sound = true, walk_velocity = 1, armor = 200, drops = { {name = "mobs:meat_raw", chance = 1, min = 2, max = 3,}, }, drawtype = "front", water_damage = 1, lava_damage = 5, light_damage = 0, sounds = { random = "mobs_pig", }, animation = { speed_normal = 15, stand_start = 0, stand_end = 80, walk_start = 81, walk_end = 100, }, follow = "default:apple", view_range = 5, on_rightclick = function(self, clicker) local item = clicker:get_wielded_item() if item:get_name() == "farming:wheat" then if not self.tamed then if not minetest.setting_getbool("creative_mode") then item:take_item() clicker:set_wielded_item(item) end self.tamed = true elseif self.naked then if not minetest.setting_getbool("creative_mode") then item:take_item() clicker:set_wielded_item(item) end self.food = (self.food or 0) + 1 if self.food >= 8 then self.food = 0 self.naked = false self.object:set_properties({ textures = {"mobs_pig.png"}, mesh = "mobs_pig.x", }) end end return end if clicker:get_inventory() and not self.naked then self.naked = true if minetest.registered_items["wool:white"] then clicker:get_inventory():add_item("main", ItemStack("wool:white "..math.random(1,3))) end self.object:set_properties({ textures = {"mobs_sheep_shaved.png"}, mesh = "mobs_sheep_shaved.x", }) end end, }) mobs:register_spawn("mobs:pig", {"default:dirt_with_grass"}, 20, 8, 9000, 1, 31000) minetest.register_craftitem("mobs:meat_raw", { description = "Raw Meat", inventory_image = "mobs_meat_raw.png", }) minetest.register_craftitem("mobs:meat", { description = "Meat", inventory_image = "mobs_meat.png", on_use = minetest.item_eat(8), }) minetest.register_craft({ type = "cooking", output = "mobs:meat", recipe = "mobs:meat_raw", cooktime = 5, }) mobs:register_mob("mobs:rat", { type = "animal", hp_max = 1, collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.2, 0.2}, visual = "mesh", mesh = "mobs_rat.x", textures = {"mobs_rat.png"}, makes_footstep_sound = false, walk_velocity = 1, armor = 200, drops = {}, drawtype = "front", water_damage = 0, lava_damage = 1, light_damage = 0, on_rightclick = function(self, clicker) if clicker:is_player() and clicker:get_inventory() then clicker:get_inventory():add_item("main", "mobs:rat") self.object:remove() end end, }) mobs:register_spawn("mobs:rat", {"default:dirt_with_grass", "default:stone"}, 20, -1, 7000, 1, 31000) minetest.register_craftitem("mobs:rat", { description = "Rat", inventory_image = "mobs_rat_inventory.png", on_place = function(itemstack, placer, pointed_thing) if pointed_thing.above then minetest.env:add_entity(pointed_thing.above, "mobs:rat") itemstack:take_item() end return itemstack end, }) minetest.register_craftitem("mobs:rat_cooked", { description = "Cooked Rat", inventory_image = "mobs_cooked_rat.png", on_use = minetest.item_eat(3), }) minetest.register_craft({ type = "cooking", output = "mobs:rat_cooked", recipe = "mobs:rat", cooktime = 5, }) mobs:register_mob("mobs:oerkki", { type = "monster", hp_max = 8, collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.9, 0.4}, visual = "mesh", mesh = "mobs_oerkki.x", textures = {"mobs_oerkki.png"}, visual_size = {x=5, y=5}, makes_footstep_sound = false, view_range = 15, walk_velocity = 1, run_velocity = 3, damage = 4, drops = {}, armor = 100, drawtype = "front", light_resistant = true, water_damage = 1, lava_damage = 1, light_damage = 0, attack_type = "dogfight", animation = { stand_start = 0, stand_end = 23, walk_start = 24, walk_end = 36, run_start = 37, run_end = 49, punch_start = 37, punch_end = 49, speed_normal = 15, speed_run = 15, }, }) mobs:register_spawn("mobs:oerkki", {"default:stone"}, 2, -1, 7000, 3, -10) mobs:register_mob("mobs:dungeon_master", { type = "monster", hp_max = 10, collisionbox = {-0.7, -0.01, -0.7, 0.7, 2.6, 0.7}, visual = "mesh", mesh = "mobs_dungeon_master.x", textures = {"mobs_dungeon_master.png"}, visual_size = {x=8, y=8}, makes_footstep_sound = true, view_range = 15, walk_velocity = 1, run_velocity = 3, damage = 4, drops = { {name = "default:mese", chance = 100, min = 1, max = 2,}, }, armor = 60, drawtype = "front", water_damage = 1, lava_damage = 1, light_damage = 0, on_rightclick = nil, attack_type = "shoot", arrow = "mobs:fireball", shoot_interval = 2.5, --[[sounds = { attack = "mobs_fireball", },--]] animation = { stand_start = 0, stand_end = 19, walk_start = 20, walk_end = 35, punch_start = 36, punch_end = 48, speed_normal = 15, speed_run = 15, }, }) mobs:register_spawn("mobs:dungeon_master", {"default:stone"}, 2, -1, 7000, 1, -50) mobs:register_arrow("mobs:fireball", { visual = "sprite", visual_size = {x=1, y=1}, --textures = {{name="mobs_fireball.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.5}}}, FIXME textures = {"mobs_fireball.png"}, velocity = 5, hit_player = function(self, player) local s = self.object:getpos() local p = player:getpos() local vec = {x=s.x-p.x, y=s.y-p.y, z=s.z-p.z} player:punch(self.object, 1.0, { full_punch_interval=1.0, damage_groups = {fleshy=4}, }, vec) local pos = self.object:getpos() for dx=-1,1 do for dy=-1,1 do for dz=-1,1 do local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} local n = minetest.env:get_node(pos).name if minetest.registered_nodes[n].groups.flammable or math.random(1, 100) <= 30 then minetest.env:set_node(p, {name="fire:basic_flame"}) else minetest.env:remove_node(p) end end end end end, hit_node = function(self, pos, node) for dx=-1,1 do for dy=-2,1 do for dz=-1,1 do local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} local n = minetest.env:get_node(pos).name if minetest.registered_nodes[n].groups.flammable or math.random(1, 100) <= 30 then minetest.env:set_node(p, {name="fire:basic_flame"}) else minetest.env:remove_node(p) end end end end end }) if minetest.setting_get("log_mods") then minetest.log("action", "mobs loaded") end -- add the rabbits local rabbit_colors = { "white", "grey", "brown" }; for i,v in ipairs( rabbit_colors ) do mobs:register_mob("mobs:rabbit_"..v, { type = "animal", hp_max = 2, collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.4, 0.2}, visual = "mesh", mesh = "rabbit_bigger_jumps-mobs.x", visual_size = {x=0.5, y=0.5}, textures = {"mobs_rabbit_"..v..".png"}, makes_footstep_sound = false, walk_velocity = 1, armor = 200, drops = {}, drawtype = "front", water_damage = 0, lava_damage = 1, light_damage = 0, animation = { speed_normal = 15, stand_start = 0, stand_end = 30, walk_start = 40, walk_end = 60, }, on_rightclick = function(self, clicker) if clicker:is_player() and clicker:get_inventory() then clicker:get_inventory():add_item("main", "mobs:rabbit_"..v) self.object:remove() end end, }) mobs:register_spawn("mobs:rabbit_"..v, {"default:dirt_with_grass", "default:stone"}, 20, -1, 7000, 1, 31000) end mobs:register_mob("mobs:donkey", { type = "animal", hp_max = 2, collisionbox = {-0.7, -0.01, -0.4, 0.7, 1.4, 0.4}, visual = "mesh", mesh = "mobs_donkey.x", visual_size = {x=2.0, y=2.5}, textures = {"mobs_donkey.png"}, makes_footstep_sound = false, walk_velocity = 1, armor = 200, drops = {}, drawtype = "front", water_damage = 0, lava_damage = 1, light_damage = 0, animation = { speed_normal = 15, stand_start = 1, stand_end = 40, walk_start = 40, walk_end = 60, run_start = 45, run_end = 85, }, --frames: 1-40 standing (without backpack) , 45-85 running (without backpack) , 90-130 standing (empty backpack) , 135-175 running (empty backpack) , 180-220 -- standing (full backpack) , 225-265 running (full backpack) on_rightclick = function(self, clicker) if clicker:is_player() and clicker:get_inventory() then clicker:get_inventory():add_item("main", "mobs:donkey") self.object:remove() end end, }) mobs:register_spawn("mobs:donkey", {"default:dirt_with_grass", "default:stone"}, 20, -1, 7000, 1, 31000) mobs:register_mob("mobs:donkey_backpack_empty", { type = "animal", hp_max = 2, collisionbox = {-0.7, -0.01, -0.4, 0.7, 1.4, 0.4}, visual = "mesh", mesh = "mobs_donkey.x", visual_size = {x=2.0, y=2.5}, textures = {"mobs_donkey.png"}, makes_footstep_sound = false, walk_velocity = 1, armor = 200, drops = {}, drawtype = "front", water_damage = 0, lava_damage = 1, light_damage = 0, animation = { speed_normal = 15, stand_start = 90, stand_end = 130, walk_start = 135, walk_end = 175, }, --frames: 1-40 standing (without backpack) , 45-85 running (without backpack) , 90-130 standing (empty backpack) , 135-175 running (empty backpack) , 180-220 -- standing (full backpack) , 225-265 running (full backpack) on_rightclick = function(self, clicker) if clicker:is_player() and clicker:get_inventory() then clicker:get_inventory():add_item("main", "mobs:donkey_backpack_empty") self.object:remove() end end, }) mobs:register_mob("mobs:donkey_backpack_full", { type = "animal", hp_max = 2, collisionbox = {-0.7, -0.01, -0.4, 0.7, 1.4, 0.4}, visual = "mesh", mesh = "mobs_donkey.x", visual_size = {x=2.0, y=2.5}, textures = {"mobs_donkey.png"}, makes_footstep_sound = false, walk_velocity = 1, armor = 200, drops = {}, drawtype = "front", water_damage = 0, lava_damage = 1, light_damage = 0, animation = { speed_normal = 15, stand_start = 180, stand_end = 220, walk_start = 225, walk_end = 165, }, --frames: 1-40 standing (without backpack) , 45-85 running (without backpack) , 90-130 standing (empty backpack) , 135-175 running (empty backpack) , 180-220 -- standing (full backpack) , 225-265 running (full backpack) on_rightclick = function(self, clicker) if clicker:is_player() and clicker:get_inventory() then clicker:get_inventory():add_item("main", "mobs:donkey_backpack_full") self.object:remove() end end, }) mobs:register_mob("mobs:swan", { type = "animal", hp_max = 2, collisionbox = {-0.7, -0.01, -0.4, 0.7, 1.4, 0.4}, visual = "mesh", mesh = "mobs_swan.x", visual_size = {x=2.0, y=2.5}, textures = {"mobs_swan.png"}, makes_footstep_sound = false, walk_velocity = 1, armor = 200, drops = {}, drawtype = "front", water_damage = 0, lava_damage = 1, light_damage = 0, animation = { speed_normal = 15, stand_start = 1, stand_end = 80, walk_start = 1, walk_end = 80, }, }) mobs:register_mob("mobs:turtle", { type = "animal", hp_max = 2, collisionbox = {-0.7, -0.01, -0.4, 0.7, 1.4, 0.4}, visual = "mesh", mesh = "mobs_turtle.x", visual_size = {x=1.5, y=1.5}, textures = {"mobs_turtle.png"}, makes_footstep_sound = false, walk_velocity = 1, armor = 200, drops = {}, drawtype = "front", water_damage = 0, lava_damage = 1, light_damage = 0, animation = { speed_normal = 5, stand_start = 1, stand_end = 50, walk_start = 60, walk_end = 90, punch_start = 95, punch_end = 100, }, }) mobs:register_mob("mobs:turtle_hidden", { type = "animal", hp_max = 2, collisionbox = {-0.7, -0.01, -0.4, 0.7, 1.4, 0.4}, visual = "mesh", mesh = "mobs_turtle.x", visual_size = {x=1.0, y=1.0}, textures = {"mobs_turtle.png"}, makes_footstep_sound = false, walk_velocity = 1, armor = 200, drops = {}, drawtype = "front", water_damage = 0, lava_damage = 1, light_damage = 0, animation = { speed_normal = 0, stand_start = 95, stand_end = 100, walk_start = 60, walk_end = 90, }, }) --turtle: 1-50 - doing nothing , 60-90 running , 95-100 hidden , 105-135 swimming --- swan: 1-80 doing nothing ..(not finished)