diff --git a/cod.lua b/cod.lua index 5d37d63..0fc83fa 100644 --- a/cod.lua +++ b/cod.lua @@ -39,6 +39,7 @@ local cod = { xp_min = 1, xp_max = 3, armor = 100, + rotate = 90, collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, visual = "mesh", mesh = "extra_mobs_cod.b3d", @@ -67,34 +68,12 @@ local cod = { }, visual_size = {x=3, y=3}, makes_footstep_sound = false, - fly = true, - fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, + swim = true, breathes_in_water = true, jump = false, view_range = 16, runaway = true, fear_height = 4, - do_custom = function(self) - self.object:set_bone_position("body", vector.new(0,1,0), vector.new(degrees(dir_to_pitch(self.object:get_velocity())) * -1 + 90,0,0)) - if minetest.get_item_group(self.standing_in, "water") ~= 0 then - if self.object:get_velocity().y < 2.5 then - self.object:add_velocity({ x = 0 , y = math.random(-.002, .002) , z = 0 }) - end - end - for _,object in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 10)) do - local lp = object:get_pos() - local s = self.object:get_pos() - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - if not object:is_player() and object:get_luaentity().name == "extra_mobs:cod" then - self.state = "runaway" - self.object:set_rotation({x=0,y=(atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate,z=0}) - end - end - end } mobs:register_mob("extra_mobs:cod", cod) @@ -102,7 +81,158 @@ mobs:register_mob("extra_mobs:cod", cod) --spawning TODO: in schools local water = mobs_mc.spawn_height.water -mobs:spawn_specific("extra_mobs:cod", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 4000, 3, water-16, water) +mobs:spawn_specific( +"extra_mobs:cod", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +3000, +3, +water-16, +water+1) --spawn egg mobs:register_egg("extra_mobs:cod", S("Cod"), "extra_mobs_spawn_icon_cod.png", 0) diff --git a/dolphin.lua b/dolphin.lua index 473bdf8..8c3a4d5 100644 --- a/dolphin.lua +++ b/dolphin.lua @@ -3,15 +3,6 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local pi = math.pi -local atann = math.atan -local atan = function(x) - if not x or x ~= x then - return 0 - else - return atann(x) - end -end local dir_to_pitch = function(dir) local dir2 = vector.normalize(dir) @@ -39,8 +30,9 @@ local dolphin = { xp_min = 1, xp_max = 3, armor = 100, - walk_chance = 100, + walk_chance = 1000, breath_max = 120, + rotate = -90, collisionbox = {-0.3, 0.0, -0.3, 0.3, 0.79, 0.3}, visual = "mesh", mesh = "extra_mobs_dolphin.b3d", @@ -65,8 +57,7 @@ local dolphin = { }, visual_size = {x=3, y=3}, makes_footstep_sound = false, - fly = true, - fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, + swim = true, breathes_in_water = true, jump = false, view_range = 16, @@ -78,20 +69,165 @@ local dolphin = { attack_type = "dogfight", do_custom = function(self) self.object:set_bone_position("body", vector.new(0,1,0), vector.new(degrees(dir_to_pitch(self.object:get_velocity())) * -1 + 90,0,0)) - if minetest.get_item_group(self.standing_in, "water") ~= 0 then - if self.object:get_velocity().y < 5 then - self.object:add_velocity({ x = 0 , y = math.random(-.007, .007), z = 0 }) - end - end end, } mobs:register_mob("extra_mobs:dolphin", dolphin) - ---spawning TODO: in schools local water = mobs_mc.spawn_height.water -mobs:spawn_specific("extra_mobs:dolphin", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 4000, 3, water-16, water) +--spawning TODO: in schools +mobs:spawn_specific( +"extra_mobs:dolphin", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +3, +water-16, +water+1) --spawn egg mobs:register_egg("extra_mobs:dolphin", S("dolphin"), "extra_mobs_spawn_icon_dolphin.png", 0) diff --git a/fox.lua b/fox.lua index b972fee..240998a 100644 --- a/fox.lua +++ b/fox.lua @@ -2,15 +2,6 @@ --maikerumine --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local pi = math.pi -local atann = math.atan -local atan = function(x) - if not x or x ~= x then - return 0 - else - return atann(x) - end -end local S = minetest.get_translator("extra_mobs") @@ -33,6 +24,7 @@ local fox = { hp_max = 10, xp_min = 1, xp_max = 2, + rotate = -90, armor = {fleshy = 90}, attack_type = "dogfight", damage = 2, @@ -55,7 +47,7 @@ local fox = { }, animation = { stand_speed = 7, - walk_speed = 7, + walk_speed = 17, run_speed = 15, stand_start = 11, stand_end = 11, @@ -68,53 +60,12 @@ local fox = { lay_start = 34, lay_end = 34, }, - runaway = true, + skittish = true, on_spawn = function(self) if minetest.find_node_near(self.object:get_pos(), 4, "mcl_core:snow") ~= nil or minetest.find_node_near(self.object:get_pos(), 4, "mcl_core:dirt_with_grass_snow") ~= nil then - minetest.chat_send_all("true") self.object:set_properties({textures={"extra_mobs_artic_fox.png", "extra_mobs_trans.png"}}) end end, - do_custom = function(self) - if self.child == true then - self.object:set_properties({textures={self.base_texture[1], self.base_texture[1]}}) - end - if self.state ~= "attack" and math.random(1, 5000) == 1 then - self.state = "lay" - self.object:set_animation({x= 12, y=16}) - minetest.after(math.random(10, 500), function() - if self.state == "lay" then - self.state = "stand" - end - end) - end - for _,object in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 8)) do - if not object:is_player() and object:get_luaentity().name == "extra_mobs:fox" and self.state ~= "attack" and math.random(1, 500) == 1 then - self.horny = true - end - local lp = object:get_pos() - local s = self.object:get_pos() - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - if object:is_player() and not object:get_player_control().sneak or not object:is_player() and object:get_luaentity().name == "mobs_mc:wolf" then - self.state = "runaway" - self.object:set_rotation({x=0,y=(atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate,z=0}) - if self.reach > vector.distance(self.object:get_pos(), object:get_pos()) and self.timer > .9 then - self.timer = 0 - object:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = self.damage} - }, nil) - end - end - end - end, - do_punch = function(self) - self.state = "runaway" - end, follow = followitem, fear_height = 4, view_range = 16, @@ -124,10 +75,66 @@ local fox = { mobs:register_mob("extra_mobs:fox", fox) -- spawning -mobs:spawn_specific("extra_mobs:fox", {"mcl_core:dirt_with_grass"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, 0, 500) - -mobs:spawn_specific("extra_mobs:fox", {"mcl_core:dirt_with_grass_snow"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, 0, 500) -mobs:spawn_specific("extra_mobs:artic_fox", {"mcl_core:snow"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, 0, 500) +mobs:spawn_specific( +"extra_mobs:fox", +"overworld", +"ground", +{ + "FlowerForest_beach", + "Forest_beach", + "StoneBeach", + "ColdTaiga_beach_water", + "Taiga_beach", + "Savanna_beach", + "Plains_beach", + "ExtremeHills_beach", + "ColdTaiga_beach", + "Swampland_shore", + "JungleM_shore", + "Jungle_shore", + "MesaPlateauFM_sandlevel", + "MesaPlateauF_sandlevel", + "MesaBryce_sandlevel", + "Mesa_sandlevel", + "Mesa", + "FlowerForest", + "Swampland", + "Taiga", + "ExtremeHills", + "Jungle", + "Savanna", + "BirchForest", + "MegaSpruceTaiga", + "MegaTaiga", + "ExtremeHills+", + "Forest", + "Plains", + "Desert", + "ColdTaiga", + "IcePlainsSpikes", + "SunflowerPlains", + "IcePlains", + "RoofedForest", + "ExtremeHills+_snowtop", + "MesaPlateauFM_grasstop", + "JungleEdgeM", + "ExtremeHillsM", + "JungleM", + "BirchForestM", + "MesaPlateauF", + "MesaPlateauFM", + "MesaPlateauF_grasstop", + "MesaBryce", + "JungleEdge", + "SavannaM", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +3, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("extra_mobs:fox", S("Fox"), "extra_mobs_spawn_icon_fox.png", 0) diff --git a/glow_squid.lua b/glow_squid.lua index d437fe0..e508e64 100644 --- a/glow_squid.lua +++ b/glow_squid.lua @@ -15,6 +15,8 @@ mobs:register_mob("extra_mobs:glow_squid",{ xp_min = 1, xp_max = 3, armor = 100, + tilt_swim = true, + rotate = -90, -- FIXME: If the qlow squid is near the floor, it turns black collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.9, 0.4}, visual = "mesh", @@ -45,8 +47,7 @@ mobs:register_mob("extra_mobs:glow_squid",{ }, visual_size = {x=3, y=3}, makes_footstep_sound = false, - fly = true, - fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, + swim = true, breathes_in_water = true, jump = false, view_range = 16, @@ -75,7 +76,159 @@ mobs:register_mob("extra_mobs:glow_squid",{ -- spawning local water = mobs_mc.spawn_height.water -mobs:spawn_specific("extra_mobs:glow_squid", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 10000, 3, water-16, water) +mobs:spawn_specific( +"extra_mobs:glow_squid", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +5500, +3, +water-16, +water+1) + -- spawn egg mobs:register_egg("extra_mobs:glow_squid", S("Glow Squid"), "extra_mobs_spawn_icon_glow_squid.png", 0) diff --git a/golum.lua b/golum.lua deleted file mode 100644 index 26bd4d1..0000000 --- a/golum.lua +++ /dev/null @@ -1,77 +0,0 @@ ---MCmobs v0.4 ---maikerumine ---made for MC like Survival game ---License for code WTFPL and otherwise stated in readmes - -local S = minetest.get_translator("extra_mobs") - ---################### ---################### gollum ---################### - - - -local gollum = { - description = S("gollum"), - type = "monster", - spawn_class = "hostile", - passive = true, - hostile = true, - always_climb = true, - docile_by_day = true, - attack_type = "punch", - punch_timer_cooloff = 0.5, - rotate = 270, - damage = 2, - reach = 2, - hp_min = 20, - hp_max = 20, - xp_min = 5, - xp_max = 5, - eye_height = 0.475, - armor = {fleshy = 100}, - collisionbox = {-0.45, 0, -0.45, 0.45, 0.9, 0.45}, - visual = "mesh", - mesh = "mobs_mc_golum.b3d", - textures = { - {"mobs_mc_golum.png"}, - }, - visual_size = {x=5, y=5}, - makes_footstep_sound = false, - sounds = { - attack = "mobs_mc_golum", - damage = "mobs_mc_golum_hiss", - death = "mobs_mc_golum_death", - -- TODO: sounds: walk - distance = 16, - }, - walk_velocity = 4, - run_velocity = 6, --gollum can become extremely difficult if any higher - jump = true, - jump_height = 4, - view_range = 16, - floats = 1, - do_custom = function(self) - if self.health < 5 and self.state ~= "runaway" then - self.state = "runaway" - --[[ - self.object:set_yaw(self.object:get_yaw())]] - end - end, - fear_height = 4, - animation = { - stand_speed = 25, - walk_speed = 25, - run_speed = 50, - stand_start = 1, - stand_end = 40, - walk_start = 41, - walk_end = 70, - run_start = 41, - run_end = 70, - jump_start = 72, - jump_end = 107, - jump_loop = false, - }, -} -mobs:register_mob("extra_mobs:gollum", gollum) diff --git a/hoglin+zoglin.lua b/hoglin+zoglin.lua index 81460c0..d2f247d 100644 --- a/hoglin+zoglin.lua +++ b/hoglin+zoglin.lua @@ -12,6 +12,7 @@ local S = minetest.get_translator("extra_mobs") local hoglin = { type = "monster", passive = false, + --hostile = true, spawn_class = "hostile", hp_min = 40, hp_max = 40, @@ -21,6 +22,7 @@ local hoglin = { attack_type = "dogfight", damage = 4, reach = 3, + rotate = -90, collisionbox = {-.6, -0.01, -.6, .6, 1.4, .6}, visual = "mesh", mesh = "extra_mobs_hoglin.b3d", @@ -115,7 +117,50 @@ baby_hoglin.child = 1 mobs:register_mob("extra_mobs:baby_hoglin", baby_hoglin)]] -- Regular spawning in the Nether -mobs:spawn_specific("extra_mobs:hoglin", {"mcl_nether:netherrack"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) +--[[ +mobs:spawn_specific( +"extra_mobs:hoglin", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +8500, +4, +smin, +smax)]] -- spawn eggs mobs:register_egg("extra_mobs:hoglin", S("Hoglin"), "extra_mobs_spawn_icon_hoglin.png", 0) diff --git a/init.lua b/init.lua index ae4d7c4..2c8b6d1 100644 --- a/init.lua +++ b/init.lua @@ -10,14 +10,13 @@ if not minetest.get_modpath("mobs_mc_gameconfig") then end --Monsters -dofile(path .. "/herobrine.lua") +--dofile(path .. "/herobrine.lua") dofile(path .. "/hoglin+zoglin.lua") dofile(path .. "/piglin.lua") -dofile(path .. "/golum.lua") --Animals dofile(path .. "/strider.lua") ---dofile(path .. "/fox.lua") +dofile(path .. "/fox.lua") dofile(path .. "/cod.lua") dofile(path .. "/salmon.lua") dofile(path .. "/dolphin.lua") diff --git a/models/extra_mobs_salmon.b3d b/models/extra_mobs_salmon.b3d index 50180af..0a69f1e 100644 Binary files a/models/extra_mobs_salmon.b3d and b/models/extra_mobs_salmon.b3d differ diff --git a/piglin.lua b/piglin.lua index 23a7a53..bc88898 100644 --- a/piglin.lua +++ b/piglin.lua @@ -26,8 +26,8 @@ local mod_bows = minetest.get_modpath("mcl_bows") ~= nil --################### local piglin = { type = "monster", - passive = false, spawn_class = "hostile", + hostile = false, hp_min = 16, hp_max = 16, xp_min = 9, @@ -35,6 +35,7 @@ local piglin = { armor = {fleshy = 90}, damage = 4, reach = 3, + rotate = -90, collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3}, visual = "mesh", mesh = "extra_mobs_piglin.b3d", @@ -69,8 +70,11 @@ local piglin = { run_start = 440, run_end = 459, }, + eye_height = 1.65, fear_height = 4, view_range = 16, + punch_timer_cooloff = 0.5, + pathfinding = 1, on_spawn = function(self) self.weapon = self.base_texture[2] self.gold_items = 0 @@ -98,17 +102,19 @@ local piglin = { if self.state ~= "attack" then self._attacked_by_player = false end - if self.state == "attack" and self.attack:is_player() then - for i=1, 6 do - local stack = self.attack:get_inventory():get_stack("armor", i) - local item = stack:get_name() - if item == "mcl_armor:chestplate_gold" or item == "mcl_armor:leggings_gold" or item == "mcl_armor:helmet_gold" or item == "mcl_armor:boots_gold" then - if self._attacked_by_player == false then - self.state = "stand" + if self.attacking then + if self.state == "attack" and self.attacking:is_player() then + for i=1, 6 do + local stack = self.attacking:get_inventory():get_stack("armor", i) + local item = stack:get_name() + if item == "mcl_armor:chestplate_gold" or item == "mcl_armor:leggings_gold" or item == "mcl_armor:helmet_gold" or item == "mcl_armor:boots_gold" then + if self._attacked_by_player == false then + self.state = "stand" + end end - end - end - end + end + end + end end, on_rightclick = function(self, clicker) if clicker:is_player() and clicker:get_wielded_item():get_name() == "mcl_core:gold_ingot" and self.state ~= "attack" and self.gold_items < 3 then @@ -137,9 +143,11 @@ local piglin = { do_punch = function(self, hitter) if hitter:is_player() then self._attacked_by_player = true + self.state = "attack" + self.attacking = hitter end end, - attack_type = "dogshoot", + attack_type = "shoot", arrow = "mcl_bows:arrow_entity", shoot_arrow = function(self, pos, dir) if mod_bows then @@ -171,7 +179,7 @@ sword_piglin.drops = { min = 1, max = 1,}, } -sword_piglin.attack_type = "dogfight" +sword_piglin.attack_type = "punch" sword_piglin.animation = { stand_speed = 30, walk_speed = 30, @@ -264,8 +272,8 @@ mobs:register_mob("extra_mobs:piglin_brute", piglin_brute) -- Regular spawning in the Nether -mobs:spawn_specific("extra_mobs:piglin", {"mcl_nether:netherrack"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) -mobs:spawn_specific("extra_mobs:sword_piglin", {"mcl_nether:netherrack"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) +--mobs:spawn_specific("extra_mobs:piglin", {"mcl_nether:netherrack"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) +--mobs:spawn_specific("extra_mobs:sword_piglin", {"mcl_nether:netherrack"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) -- spawn eggs mobs:register_egg("extra_mobs:piglin", S("piglin"), "extra_mobs_spawn_icon_piglin.png", 0) mobs:register_egg("extra_mobs:piglin_brute", S("piglin Brute"), "extra_mobs_spawn_icon_piglin.png", 0) diff --git a/salmon.lua b/salmon.lua index 84dd8a2..6f107c7 100644 --- a/salmon.lua +++ b/salmon.lua @@ -3,6 +3,17 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes +local dir_to_pitch = function(dir) + local dir2 = vector.normalize(dir) + local xz = math.abs(dir.x) + math.abs(dir.z) + return -math.atan2(-dir.y, xz) +end + +local function degrees(rad) + return rad * 180.0 / math.pi +end + + local S = minetest.get_translator("extra_mobs") --################### @@ -19,11 +30,13 @@ local salmon = { xp_min = 1, xp_max = 3, armor = 100, + walk_chance = 1000, + rotate = -90, collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.79, 0.4}, visual = "mesh", mesh = "extra_mobs_salmon.b3d", textures = { - {"extra_mobs_salmon.png"} + {"extra_mobs_salmon.png", "extra_mobs_salmon.png"} }, sounds = { }, @@ -47,8 +60,7 @@ local salmon = { }, visual_size = {x=3, y=3}, makes_footstep_sound = false, - fly = true, - fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, + swim = true, breathes_in_water = true, jump = false, view_range = 16, @@ -61,7 +73,158 @@ mobs:register_mob("extra_mobs:salmon", salmon) --spawning TODO: in schools local water = mobs_mc.spawn_height.water -mobs:spawn_specific("extra_mobs:salmon", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 4000, 3, water-16, water) +mobs:spawn_specific( +"extra_mobs:salmon", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +3, +water-16, +water+1) --spawn egg mobs:register_egg("extra_mobs:salmon", S("Salmon"), "extra_mobs_spawn_icon_salmon.png", 0) diff --git a/strider.lua b/strider.lua index 359be8c..17f840d 100644 --- a/strider.lua +++ b/strider.lua @@ -22,6 +22,7 @@ local strider = { attack_type = "dogfight", damage = 2, reach = 2, + rotate = -90, collisionbox = {-.6, -0.01, -.6, .6, 1.94, .6}, visual = "mesh", mesh = "extra_mobs_strider.b3d", @@ -35,7 +36,7 @@ local strider = { makes_footstep_sound = true, walk_velocity = 2, run_velocity = 4, - runaway = true, + skittish = true, drops = { {name = "mcl_mobsitems:string", chance = 1, @@ -124,7 +125,6 @@ local strider = { if wielditem:get_name() ~= controlitem then if mobs:feed_tame(self, clicker, 1, true, true) then return end end - if mobs:protect(self, clicker) then return end if self.child then return @@ -190,9 +190,6 @@ local strider = { inv:set_stack("main",self.driver:get_wield_index(), wielditem) end return - - elseif not self.driver and clicker:get_wielded_item():get_name() ~= "" then - mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end end, } @@ -215,9 +212,51 @@ baby_strider.run_velocity = 2.4 baby_strider.child = 1 mobs:register_mob("extra_mobs:baby_strider", baby_strider) - +--[[ -- Regular spawning in the Nether -mobs:spawn_specific("extra_mobs:strider", {"mcl_nether:nether_lava_source"}, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) +mobs:spawn_specific( +"extra_mobs:strider", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +2500, +4, +smin, +smax)]] -- spawn eggs mobs:register_egg("extra_mobs:strider", S("Strider"), "extra_mobs_spawn_icon_strider.png", 0) diff --git a/textures/mobs_mc_golum.png b/textures/mobs_mc_golum.png deleted file mode 100644 index 0cfd455..0000000 Binary files a/textures/mobs_mc_golum.png and /dev/null differ