diff --git a/mods/lib_api/modlib/b3d.lua b/mods/lib_api/modlib/b3d.lua index 64c2984..5a57ec5 100644 --- a/mods/lib_api/modlib/b3d.lua +++ b/mods/lib_api/modlib/b3d.lua @@ -63,8 +63,9 @@ function read(stream) if mantissa == 0 then return sign * math.huge end - -- TODO differentiate quiet and signalling NaN as well as positive and negative - return 0/0 + -- Differentiating quiet and signalling nan is not possible in Lua, hence we don't have to do it + -- HACK ((0/0)^1) yields nan, 0/0 yields -nan + return sign == 1 and ((0/0)^1) or 0/0 end if exponent == 0 then -- subnormal value diff --git a/mods/mobs/mobs_mobkit/petz/petz/api/api_forms.lua b/mods/mobs/mobs_mobkit/petz/petz/api/api_forms.lua index ee699ff..b7d7ee5 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/api/api_forms.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/api/api_forms.lua @@ -292,7 +292,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) mobkit.clear_queue_low(pet) petz.ownthing(pet) elseif fields.btn_alight then - petz.alight(pet) + petz.alight(pet, 0, "stand") elseif fields.btn_fly then mobkit.clear_queue_low(pet) mobkit.clear_queue_high(pet) diff --git a/mods/mobs/mobs_mobkit/petz/petz/api/api_orders.lua b/mods/mobs/mobs_mobkit/petz/petz/api/api_orders.lua index 3a12826..5874f2c 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/api/api_orders.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/api/api_orders.lua @@ -60,11 +60,11 @@ petz.follow = function(self, player) end end -petz.alight = function(self) +petz.alight = function(self, prty, end_status) mobkit.clear_queue_low(self) mobkit.clear_queue_high(self) if not(petz.node_name_in(self, "below") == "air") then mobkit.animate(self, "fly") end - petz.hq_alight(self, 0) + petz.hq_alight(self, prty, end_status) end diff --git a/mods/mobs/mobs_mobkit/petz/petz/api/api_silk.lua b/mods/mobs/mobs_mobkit/petz/petz/api/api_silk.lua index 8b3975c..365d04e 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/api/api_silk.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/api/api_silk.lua @@ -183,7 +183,7 @@ petz.init_lay_eggs = function(self) if self.eggs_count > 0 then return end - petz.alight(self) + petz.alight(self, 0, "stand") minetest.after(10.0, function() if not(mobkit.is_alive(self)) then return diff --git a/mods/mobs/mobs_mobkit/petz/petz/api/api_wool_milk.lua b/mods/mobs/mobs_mobkit/petz/petz/api/api_wool_milk.lua index a0b733b..a698a92 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/api/api_wool_milk.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/api/api_wool_milk.lua @@ -68,7 +68,7 @@ petz.milk_refill = function(self) end petz.milk_milk = function(self, clicker) - if not self.is_male then + if self.is_male then minetest.chat_send_player(clicker:get_player_name(), S("Milk only female animals!")) return end diff --git a/mods/mobs/mobs_mobkit/petz/petz/misc/hunger.lua b/mods/mobs/mobs_mobkit/petz/petz/misc/hunger.lua index 9bb5996..dca6a1a 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/misc/hunger.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/misc/hunger.lua @@ -59,4 +59,46 @@ if minetest.get_modpath("hunger_ng") ~= nil then hunger_ng.add_hunger_data('petz:candy_cane', { satiates = 6.0, }) + hunger_ng.add_hunger_data('petz:beef', { + satiates = 1.0, + }) + hunger_ng.add_hunger_data('petz:roasted_ducky', { + satiates = 3.0, + }) + hunger_ng.add_hunger_data('petz:roasted_rabbit', { + satiates = 3.0, + }) + hunger_ng.add_hunger_data('petz:roasted_goat_meat', { + satiates = 4.0, + }) + hunger_ng.add_hunger_data('petz:raw_rabbit', { + satiates = 1.0, + }) + hunger_ng.add_hunger_data('petz:frog_leg', { + satiates = 1.0, + }) + hunger_ng.add_hunger_data('petz:honey_bottle', { + satiates = 7.0, + }) + hunger_ng.add_hunger_data('petz:mini_lamb_chop', { + satiates = 1.0, + }) + hunger_ng.add_hunger_data('petz:raw_chicken', { + satiates = 1.0, + }) + hunger_ng.add_hunger_data('petz:raw_ducky', { + satiates = 1.0, + }) + hunger_ng.add_hunger_data('petz:raw_goat', { + satiates = 1.0, + }) + hunger_ng.add_hunger_data('petz:raw_parrot', { + satiates = 1.0, + }) + hunger_ng.add_hunger_data('petz:raw_porkchop', { + satiates = 1.0, + }) + hunger_ng.add_hunger_data('petz:chicken_legs', { + satiates = 1.0, + }) end diff --git a/mods/mobs/mobs_mobkit/petz/petz/misc/nodes.lua b/mods/mobs/mobs_mobkit/petz/petz/misc/nodes.lua index 73edd44..2302fdc 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/misc/nodes.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/misc/nodes.lua @@ -504,7 +504,24 @@ minetest.register_craft({ --Halloween Update -minetest.register_node("petz:jack_o_lantern", { +if minetest.get_modpath("farming") ~= nil and farming.mod == "redo" then + + minetest.register_alias("petz:jack_o_lantern", "farming:jackolantern") + + minetest.register_craft({ + type = "shapeless", + output = "petz:jack_o_lantern", + recipe = {"farming:pumpkin", "petz:beeswax_candle"}, + }) + minetest.register_craft({ + type = "shapeless", + output = "petz:jack_o_lantern", + recipe = {"farming:pumpkin", "default:torch"}, + }) + +else + + minetest.register_node("petz:jack_o_lantern", { description = S("Jack-o'-lantern"), groups = { snappy=3, flammable=3, oddly_breakable_by_hand=2 }, sounds = default.node_sound_wood_defaults({ @@ -520,19 +537,8 @@ minetest.register_node("petz:jack_o_lantern", { "petz_jackolantern_right.png", "petz_jackolantern_left.png", "petz_jackolantern_back.png", "petz_jackolantern_front.png" }, -}) - -if minetest.get_modpath("farming") ~= nil and farming.mod == "redo" then - minetest.register_craft({ - type = "shapeless", - output = "petz:jack_o_lantern", - recipe = {"farming:pumpkin", "petz:beeswax_candle"}, - }) - minetest.register_craft({ - type = "shapeless", - output = "petz:jack_o_lantern", - recipe = {"farming:pumpkin", "default:torch"}, - }) + }) + end if minetest.get_modpath("crops") ~= nil then diff --git a/mods/mobs/mobs_mobkit/petz/petz/mobkit/bh_fly.lua b/mods/mobs/mobs_mobkit/petz/petz/mobkit/bh_fly.lua index c753577..dd7760d 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/mobkit/bh_fly.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/mobkit/bh_fly.lua @@ -169,7 +169,7 @@ end -- Alight Behaviour ( 2 funtions: HQ & LQ) -- -function petz.hq_alight(self, prty) +function petz.hq_alight(self, prty, end_status) local func = function() local node_name = petz.node_name_in(self, "below") if node_name == "air" then @@ -179,9 +179,9 @@ function petz.hq_alight(self, prty) return true else --minetest.chat_send_player("singleplayer", "on ground") - mobkit.animate(self, "stand") + mobkit.animate(self, end_status) mobkit.lq_idle(self, 2400) - self.status = "stand" + self.status = end_status return true end end diff --git a/mods/mobs/mobs_mobkit/petz/petz/mobkit/br_birds.lua b/mods/mobs/mobs_mobkit/petz/petz/mobkit/br_birds.lua new file mode 100644 index 0000000..e6cfca5 --- /dev/null +++ b/mods/mobs/mobs_mobkit/petz/petz/mobkit/br_birds.lua @@ -0,0 +1,213 @@ +-- 1. FLYING MOBS BRAIN +-- + +function petz.herbivore_brain(self) + + local pos = self.object:get_pos() + + local die = false + + mobkit.vitals(self) + + if self.hp <= 0 then + die = true + elseif not(petz.is_night()) and self.die_at_daylight then --it dies when sun rises up + if pos then + local node_light = minetest.get_node_light(pos, minetest.get_timeofday()) + if node_light and self.max_daylight_level then + if node_light >= self.max_daylight_level then + die = true + end + end + end + end + + if die then + petz.on_die(self) + return + end + + --no gravity + self.object:set_acceleration({x=0, y=0, z=0}) + + petz.check_ground_suffocation(self, pos) + + if mobkit.timer(self, 1) then + + local prty = mobkit.get_queue_priority(self) + + if prty < 30 then + petz.env_damage(self, pos, 30) --enviromental damage: lava, fire... + end + + if prty < 25 then + if self.driver then + petz.hq_mountdriver(self, 25) + return + end + end + + if prty < 20 then + if self.isinliquid and not self.can_swin then + petz.hq_liquid_recovery_flying(self, 20) + end + end + + local player = mobkit.get_nearby_player(self) + + --if player then petz.move_head(self, player:get_pos()) end + + --Runaway from predator + if prty < 18 then + if petz.bh_runaway_from_predator(self, pos) then + return + end + end + + --Follow Behaviour + if prty < 16 then + if petz.bh_start_follow(self, pos, player, 16) then + return + end + end + + if prty == 16 then + if petz.bh_stop_follow(self, player) then + return + end + end + + -- hunt a prey (another congener) + if prty < 12 and self.aggressive then + petz.bh_hunt(self, 12, true) + end + + --Baby petz follow their parents + if prty < 10 then + if petz.settings.parent_search and self.parents then + if mobkit.timer(self, 5) then --each 5 seconds search for parents + petz.follow_parents(self, pos) + end + end + end + + --if prty < 7 and self.type == "moth" and mobkit.is_queue_empty_high(self) then --search for a squareball + --local pos_torch_near = minetest.find_node_near(pos, self.view_range, "default:torch") + --if pos_torch_near then + --mobkit.hq_approach_torch(self, 7, pos_torch_near) + --return + --end + --end + + if prty < 8 then + if (self.can_jump) and not(self.status) then + local random_number = math.random(1, self.jump_ratio) + if random_number == 1 then + --minetest.chat_send_player("singleplayer", "jump") + mobkit.clear_queue_high(self) + petz.hq_terrestial_jump(self, 8) + end + end + end + + --Poop + if prty < 7 then + petz.poop(self, pos) + end + + --Replace nodes by others + if prty < 6 then + petz.bh_replace(self) + end + + if prty < 5 then + petz.bh_breed(self, pos) + end + + --Herding + if prty < 4.5 and petz.settings.herding then + if mobkit.timer(self, petz.settings.herding_timing) then + if petz.bh_herding(self, pos, player) then + return + end + end + end + --search for a petz:pet_bowl or a bale + if prty < 4 and self.tamed then + local view_range = self.view_range + local nearby_nodes = minetest.find_nodes_in_area( + {x = pos.x - view_range, y = pos.y - 1, z = pos.z - view_range}, + {x = pos.x + view_range, y = pos.y + 1, z = pos.z + view_range}, + {"group:feeder"}) + if #nearby_nodes >= 1 then + local tpos = nearby_nodes[1] --the first match + local distance = vector.distance(pos, tpos) + if distance > 3.0 then + mobkit.hq_goto(self, 4, tpos) + elseif distance <= 3.0 then + if petz.settings.tamagochi_mode and not(self.fed) then + petz.do_feed(self) + if self.eat_hay then + local node = minetest.get_node_or_nil(tpos) + if node and node.name == "bale:bale" then + minetest.remove_node(tpos) + mokapi.make_sound("pos", tpos, "petz_replace", 5 or mokapi.consts.DEFAULT_MAX_HEAR_DISTANCE) + end + end + end + end + end + end + + --if prty < 5 and self.type == "puppy" and self.tamed == true and self.square_ball_attached == false then --search for a squareball + --local object_list = minetest.get_objects_inside_radius(self.object:get_pos(), 10) + --for i = 1,#object_list do + --local obj = object_list[i] + --local ent = obj:get_luaentity() + --if ent and ent.name == "__builtin:item" then + --minetest.chat_send_player("singleplayer", ent.itemstring) + --local spos = self.object:get_pos() + --local tpos = obj:get_pos() + --if vector.distance(spos, tpos) > 2 then + --if tpos then + --mobkit.hq_goto(self, 5, tpos) + --end + --else + --local meta = ent:get_meta() + --local shooter_name = meta:get_string("shooter_name") + --petz.attach_squareball(ent, self, self.object, nil) + --end + --end + --end + --end + --end + + -- Default Random Sound + mokapi.make_misc_sound(self, petz.settings.misc_sound_chance, petz.settings.max_hear_distance) + + if prty < 3 then + if self.is_arboreal then + if petz.bh_climb(self, pos, 3) then + return + end + end + end + + if prty < 2 then --Sleep Behaviour + petz.bh_sleep(self, 2) + end + + --Look_at Behaviour + if prty < 1 and player then + if petz.bh_look_at(self, player:get_pos(), 1) then + return + end + end + + --Roam default + if mobkit.is_queue_empty_high(self) and not(self.status) then + petz.hq_wanderfly(self, 0) + end + + end +end diff --git a/mods/mobs/mobs_mobkit/petz/petz/mobkit/br_flying.lua b/mods/mobs/mobs_mobkit/petz/petz/mobkit/br_flying.lua new file mode 100644 index 0000000..1fa8b99 --- /dev/null +++ b/mods/mobs/mobs_mobkit/petz/petz/mobkit/br_flying.lua @@ -0,0 +1,213 @@ +-- 1. FLYING MOBS BRAIN +-- + +function petz.flying_brain(self) + + local pos = self.object:get_pos() + + local die = false + + mobkit.vitals(self) + + if self.hp <= 0 then + die = true + elseif not(petz.is_night()) and self.die_at_daylight then --it dies when sun rises up + if pos then + local node_light = minetest.get_node_light(pos, minetest.get_timeofday()) + if node_light and self.max_daylight_level then + if node_light >= self.max_daylight_level then + die = true + end + end + end + end + + if die then + petz.on_die(self) + return + end + + --no gravity + self.object:set_acceleration({x=0, y=0, z=0}) + + petz.check_ground_suffocation(self, pos) + + if mobkit.timer(self, 1) then + + local prty = mobkit.get_queue_priority(self) + + if prty < 30 then + petz.env_damage(self, pos, 30) --enviromental damage: lava, fire... + end + + if prty < 25 then + if self.driver then + petz.hq_mountdriver(self, 25) + return + end + end + + if prty < 20 then + if self.isinliquid and not self.can_swin then + petz.hq_liquid_recovery_flying(self, 20) + end + end + + local player = mobkit.get_nearby_player(self) + + --if player then petz.move_head(self, player:get_pos()) end + + --Runaway from predator + if prty < 18 then + if petz.bh_runaway_from_predator(self, pos) then + return + end + end + + --Follow Behaviour + if prty < 16 then + if petz.bh_start_follow(self, pos, player, 16) then + return + end + end + + if prty == 16 then + if petz.bh_stop_follow(self, player) then + return + end + end + + -- hunt a prey (another congener) + if prty < 12 and self.aggressive then + petz.bh_hunt(self, 12, true) + end + + --Baby petz follow their parents + if prty < 10 then + if petz.settings.parent_search and self.parents then + if mobkit.timer(self, 5) then --each 5 seconds search for parents + petz.follow_parents(self, pos) + end + end + end + + --if prty < 7 and self.type == "moth" and mobkit.is_queue_empty_high(self) then --search for a squareball + --local pos_torch_near = minetest.find_node_near(pos, self.view_range, "default:torch") + --if pos_torch_near then + --mobkit.hq_approach_torch(self, 7, pos_torch_near) + --return + --end + --end + + if prty < 8 then + if (self.can_jump) and not(self.status) then + local random_number = math.random(1, self.jump_ratio) + if random_number == 1 then + --minetest.chat_send_player("singleplayer", "jump") + mobkit.clear_queue_high(self) + petz.hq_terrestial_jump(self, 8) + end + end + end + + --Poop + if prty < 7 then + petz.poop(self, pos) + end + + --Replace nodes by others + if prty < 6 then + petz.bh_replace(self) + end + + if prty < 5 then + petz.bh_breed(self, pos) + end + + --Herding + if prty < 4.5 and petz.settings.herding then + if mobkit.timer(self, petz.settings.herding_timing) then + if petz.bh_herding(self, pos, player) then + return + end + end + end + --search for a petz:pet_bowl or a bale + if prty < 4 and self.tamed then + local view_range = self.view_range + local nearby_nodes = minetest.find_nodes_in_area( + {x = pos.x - view_range, y = pos.y - 1, z = pos.z - view_range}, + {x = pos.x + view_range, y = pos.y + 1, z = pos.z + view_range}, + {"group:feeder"}) + if #nearby_nodes >= 1 then + local tpos = nearby_nodes[1] --the first match + local distance = vector.distance(pos, tpos) + if distance > 3.0 then + mobkit.hq_goto(self, 4, tpos) + elseif distance <= 3.0 then + if petz.settings.tamagochi_mode and not(self.fed) then + petz.do_feed(self) + if self.eat_hay then + local node = minetest.get_node_or_nil(tpos) + if node and node.name == "bale:bale" then + minetest.remove_node(tpos) + mokapi.make_sound("pos", tpos, "petz_replace", 5 or mokapi.consts.DEFAULT_MAX_HEAR_DISTANCE) + end + end + end + end + end + end + + --if prty < 5 and self.type == "puppy" and self.tamed == true and self.square_ball_attached == false then --search for a squareball + --local object_list = minetest.get_objects_inside_radius(self.object:get_pos(), 10) + --for i = 1,#object_list do + --local obj = object_list[i] + --local ent = obj:get_luaentity() + --if ent and ent.name == "__builtin:item" then + --minetest.chat_send_player("singleplayer", ent.itemstring) + --local spos = self.object:get_pos() + --local tpos = obj:get_pos() + --if vector.distance(spos, tpos) > 2 then + --if tpos then + --mobkit.hq_goto(self, 5, tpos) + --end + --else + --local meta = ent:get_meta() + --local shooter_name = meta:get_string("shooter_name") + --petz.attach_squareball(ent, self, self.object, nil) + --end + --end + --end + --end + --end + + -- Default Random Sound + mokapi.make_misc_sound(self, petz.settings.misc_sound_chance, petz.settings.max_hear_distance) + + if prty < 3 then + if self.is_arboreal then + if petz.bh_climb(self, pos, 3) then + return + end + end + end + + if prty < 2 then --Sleep Behaviour + petz.bh_sleep(self, 2) + end + + --Look_at Behaviour + if prty < 1 and player then + if petz.bh_look_at(self, player:get_pos(), 1) then + return + end + end + + --Roam default + if mobkit.is_queue_empty_high(self) and not(self.status) then + petz.hq_wanderfly(self, 0) + end + + end +end diff --git a/mods/mobs/mobs_mobkit/petz/petz/mobkit/br_herbivore.lua b/mods/mobs/mobs_mobkit/petz/petz/mobkit/br_herbivore.lua index 26993a1..eebf51f 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/mobkit/br_herbivore.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/mobkit/br_herbivore.lua @@ -1,4 +1,4 @@ --- 1. HERBIBORE/FLYING MOBS BRAIN +-- 1. HERBIBORE MOBS BRAIN -- function petz.herbivore_brain(self) @@ -27,7 +27,8 @@ function petz.herbivore_brain(self) return end - if self.can_fly or self.status == "climb" then + --no gravity + if self.status == "climb" then self.object:set_acceleration({x=0, y=0, z=0}) end @@ -50,11 +51,7 @@ function petz.herbivore_brain(self) if prty < 20 then if self.isinliquid then - if not self.can_fly then - mobkit.hq_liquid_recovery(self, 20) - else - petz.hq_liquid_recovery_flying(self, 20) - end + mobkit.hq_liquid_recovery(self, 20) return end end @@ -85,7 +82,7 @@ function petz.herbivore_brain(self) --Runaway from Player if prty < 14 then - if not(self.can_fly) and not(self.tamed) then --if no tamed + if not(self.tamed) then --if no tamed if player then local player_pos = player:get_pos() local wielded_item_name = player:get_wielded_item():get_name() @@ -226,11 +223,7 @@ function petz.herbivore_brain(self) --Roam default if mobkit.is_queue_empty_high(self) and not(self.status) then - if not(self.can_fly) then - mobkit.hq_roam(self, 0) - else - petz.hq_wanderfly(self, 0) - end + mobkit.hq_roam(self, 0) end end diff --git a/mods/mobs/mobs_mobkit/petz/petz/mobkit/mobkit.lua b/mods/mobs/mobs_mobkit/petz/petz/mobkit/mobkit.lua index 10ab66d..205594c 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/mobkit/mobkit.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/mobkit/mobkit.lua @@ -25,3 +25,4 @@ assert(loadfile(modpath .. "/mobkit/br_predator.lua"))() assert(loadfile(modpath .. "/mobkit/br_semiaquatic.lua"))() assert(loadfile(modpath .. "/mobkit/helper_functions.lua"))() assert(loadfile(modpath .. "/mobkit/bh_head.lua"))() +assert(loadfile(modpath .. "/mobkit/br_flying.lua"))() diff --git a/mods/mobs/mobs_mobkit/petz/petz/petz/butterfly_mobkit.lua b/mods/mobs/mobs_mobkit/petz/petz/petz/butterfly_mobkit.lua index 17539c5..6f5c54d 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/petz/butterfly_mobkit.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/petz/butterfly_mobkit.lua @@ -54,7 +54,7 @@ minetest.register_entity("petz:"..pet_name,{ stand_fly={range={x=0, y=6}, speed=25, loop=true}, }, - logic = petz.herbivore_brain, + logic = petz.flying_brain, on_activate = function(self, staticdata, dtime_s) --on_activate, required mobkit.actfunc(self, staticdata, dtime_s) diff --git a/mods/mobs/mobs_mobkit/petz/petz/petz/moth_mobkit.lua b/mods/mobs/mobs_mobkit/petz/petz/petz/moth_mobkit.lua index 5203b34..8bd9715 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/petz/moth_mobkit.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/petz/moth_mobkit.lua @@ -65,7 +65,7 @@ minetest.register_entity("petz:"..pet_name,{ moaning = "petz_moth_moaning", }, - logic = petz.herbivore_brain, + logic = petz.flying_brain, on_activate = function(self, staticdata, dtime_s) --on_activate, required mobkit.actfunc(self, staticdata, dtime_s) diff --git a/mods/mobs/mobs_mobkit/petz/petz/petz/parrot_mobkit.lua b/mods/mobs/mobs_mobkit/petz/petz/petz/parrot_mobkit.lua index 5dca23d..b0c5c30 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/petz/parrot_mobkit.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/petz/parrot_mobkit.lua @@ -65,7 +65,7 @@ minetest.register_entity("petz:"..pet_name,{ moaning = "petz_parrot_moaning", }, - logic = petz.herbivore_brain, + logic = petz.flying_brain, on_activate = function(self, staticdata, dtime_s) --on_activate, required mobkit.actfunc(self, staticdata, dtime_s) diff --git a/mods/mobs/mobs_mobkit/petz/petz/petz/pigeon_mobkit.lua b/mods/mobs/mobs_mobkit/petz/petz/petz/pigeon_mobkit.lua index b90c092..099c17d 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/petz/pigeon_mobkit.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/petz/pigeon_mobkit.lua @@ -65,7 +65,7 @@ minetest.register_entity("petz:"..pet_name,{ moaning = "petz_pigeon_moaning", }, - logic = petz.herbivore_brain, + logic = petz.flying_brain, on_activate = function(self, staticdata, dtime_s) --on_activate, required mobkit.actfunc(self, staticdata, dtime_s) diff --git a/mods/mobs/mobs_mobkit/petz/petz/petz/toucan_mobkit.lua b/mods/mobs/mobs_mobkit/petz/petz/petz/toucan_mobkit.lua index 9f5fd78..d7bf629 100644 --- a/mods/mobs/mobs_mobkit/petz/petz/petz/toucan_mobkit.lua +++ b/mods/mobs/mobs_mobkit/petz/petz/petz/toucan_mobkit.lua @@ -64,7 +64,7 @@ minetest.register_entity("petz:"..pet_name,{ moaning = "petz_toucan_moaning", }, - logic = petz.herbivore_brain, + logic = petz.flying_brain, on_activate = function(self, staticdata, dtime_s) --on_activate, required mobkit.actfunc(self, staticdata, dtime_s) diff --git a/mods/mobs/mobs_mobs/mobs_monster/dirt_monster.lua b/mods/mobs/mobs_mobs/mobs_monster/dirt_monster.lua index 31e515a..3631fb2 100644 --- a/mods/mobs/mobs_mobs/mobs_monster/dirt_monster.lua +++ b/mods/mobs/mobs_mobs/mobs_monster/dirt_monster.lua @@ -60,7 +60,7 @@ mobs:register_mob("mobs_monster:dirt_monster", { punch_end = 63, }, - -- check surrounding nodes and spawn a specific spider + -- check surrounding nodes and spawn a specific monster on_spawn = function(self) local pos = self.object:get_pos() ; pos.y = pos.y - 1 diff --git a/mods/mobs/mobs_mobs/mobs_monster/dungeon_master.lua b/mods/mobs/mobs_mobs/mobs_monster/dungeon_master.lua index bcc04f8..4b68184 100644 --- a/mods/mobs/mobs_mobs/mobs_monster/dungeon_master.lua +++ b/mods/mobs/mobs_mobs/mobs_monster/dungeon_master.lua @@ -16,8 +16,8 @@ mobs:register_mob("mobs_monster:dungeon_master", { shoot_interval = 2.2, arrow = "mobs_monster:fireball", shoot_offset = 1, - hp_min = 22, - hp_max = 45, + hp_min = 42, + hp_max = 75, armor = 60, collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7}, visual = "mesh", diff --git a/mods/mobs/mobs_mobs/mobs_monster/init.lua b/mods/mobs/mobs_mobs/mobs_monster/init.lua index 02142fd..4df355f 100644 --- a/mods/mobs/mobs_mobs/mobs_monster/init.lua +++ b/mods/mobs/mobs_mobs/mobs_monster/init.lua @@ -28,6 +28,7 @@ dofile(path .. "tree_monster.lua") dofile(path .. "lava_flan.lua") -- Zeg9 dofile(path .. "mese_monster.lua") dofile(path .. "spider.lua") -- AspireMint +dofile(path .. "land_guard.lua") -- Load custom spawning diff --git a/mods/mobs/mobs_mobs/mobs_monster/land_guard.lua b/mods/mobs/mobs_mobs/mobs_monster/land_guard.lua new file mode 100644 index 0000000..6545b33 --- /dev/null +++ b/mods/mobs/mobs_mobs/mobs_monster/land_guard.lua @@ -0,0 +1,127 @@ + +local S = mobs.intllib + + +local guard_types = { + + { nodes = { + "default:snow", "default:snowblock", "default:ice", + "default:dirt_with_snow" + }, + skins = {"mobs_land_guard6.png", "mobs_land_guard7.png", "mobs_land_guard8.png"}, + drops = { + {name = "default:ice", chance = 1, min = 1, max = 4}, + {name = "mobs:leather", chance = 2, min = 0, max = 2}, + {name = "default:diamond", chance = 4, min = 0, max = 2}, + }, + }, + + { nodes = { + "ethereal:dry_dirt", "default:sand", "default:desert_sand", + "default:dry_dirt_with_dry_grass", "default:dry_dirt" + }, + skins = {"mobs_land_guard4.png", "mobs_land_guard5.png"}, + drops = { + {name = "default:sandstone", chance = 1, min = 1, max = 4}, + {name = "mobs:leather", chance = 2, min = 0, max = 2}, + {name = "default:mese_crystal", chance = 4, min = 0, max = 2}, + }, + } +} + +-- Land Guard + +mobs:register_mob("mobs_monster:land_guard", { + type = "monster", + passive = false, + attack_type = "dogfight", + group_attack = true, + reach = 3, + damage = 15, + hp_min = 30, + hp_max = 65, + armor = 50, + collisionbox = {-0.5, -1.01, -0.5, 0.5, 1.6, 0.5}, + visual_size = {x = 1, y = 1}, + visual = "mesh", + mesh = "mobs_dungeon_master.b3d", + textures = { + {"mobs_land_guard.png"}, + {"mobs_land_guard2.png"}, + {"mobs_land_guard3.png"} + }, + makes_footstep_sound = true, + sounds = { + random = "mobs_dungeonmaster", + }, + walk_velocity = 1.5, + run_velocity = 3.4, + jump = true, + jump_height = 2.0, + floats = 0, + view_range = 15, + drops = { + {name = "mobs:leather", chance = 2, min = 0, max = 2}, + {name = "default:mese_crystal", chance = 3, min = 0, max = 2}, + {name = "default:diamond", chance = 4, min = 0, max = 1}, + }, + water_damage = 0, + lava_damage = 6, + light_damage = 0, + fear_height = 8, + animation = { + stand_start = 0, + stand_end = 19, + walk_start = 20, + walk_end = 35, + punch_start = 36, + punch_end = 48, + speed_normal = 15, + speed_run = 20, + }, + + -- check surrounding nodes and spawn a specific guard + on_spawn = function(self) + + local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp + + for n = 1, #guard_types do + + tmp = guard_types[n] + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = { tmp.skins[math.random(#tmp.skins)] } + self.object:set_properties({textures = self.base_texture}) + self.docile_by_day = tmp.docile + + if tmp.drops then + self.drops = tmp.drops + end + + return true + end + end + + return true -- run only once, false/nil runs every activation + end, +}) + + +if not mobs.custom_spawn_monster then +mobs:spawn({ + name = "mobs_monster:land_guard", + nodes = { + "default:snow", "default:ice", "default:stone", + "default:dry_dirt_with_dry_grass", "ethereal:dry_dirt" + }, + max_light = 7, + chance = 25000, + min_height = 0, + active_object_count = 1, +}) +end + + +mobs:register_egg("mobs_monster:land_guard", S("Land Guard"), "default_ice.png", 1) diff --git a/mods/mobs/mobs_mobs/mobs_monster/readme.md b/mods/mobs/mobs_mobs/mobs_monster/readme.md index 800079c..cd03fcb 100644 --- a/mods/mobs/mobs_mobs/mobs_monster/readme.md +++ b/mods/mobs/mobs_mobs/mobs_monster/readme.md @@ -27,7 +27,7 @@ Sand Monster Spiders -- Snowy spiders are found on higher cold areas, Tarantula's in higher jungle, Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed. +- Snowy spiders are found on higher cold areas, spitting Tarantula's in higher jungle, small Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed. Stone Monster @@ -35,6 +35,10 @@ Stone Monster Tree Monster -- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three. +- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three depending on type. Also note that green tree creepers exist and sometimes go boom. + +Land Guard + +- These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain. Lucky Blocks: 11 diff --git a/mods/mobs/mobs_mobs/mobs_monster/sand_monster.lua b/mods/mobs/mobs_mobs/mobs_monster/sand_monster.lua index a46f509..21c5af6 100644 --- a/mods/mobs/mobs_mobs/mobs_monster/sand_monster.lua +++ b/mods/mobs/mobs_mobs/mobs_monster/sand_monster.lua @@ -49,6 +49,7 @@ mobs:register_mob("mobs_monster:sand_monster", { mesh = "mobs_sand_monster.b3d", textures = { {"mobs_sand_monster.png"}, + {"mobs_sand_monster2.png"}, }, blood_texture = "default_desert_sand.png", makes_footstep_sound = true, diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard.png b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard.png new file mode 100644 index 0000000..53100ab Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard2.png b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard2.png new file mode 100644 index 0000000..cfa0630 Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard2.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard3.png b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard3.png new file mode 100644 index 0000000..69e8691 Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard3.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard4.png b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard4.png new file mode 100644 index 0000000..295282f Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard4.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard5.png b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard5.png new file mode 100644 index 0000000..3e0332d Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard5.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard6.png b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard6.png new file mode 100644 index 0000000..4ccd83e Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard6.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard7.png b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard7.png new file mode 100644 index 0000000..6a9d0fd Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard7.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard8.png b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard8.png new file mode 100644 index 0000000..73c8322 Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard8.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_sand_monster2.png b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_sand_monster2.png new file mode 100644 index 0000000..5773943 Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_sand_monster2.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_tree_monster6.png b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_tree_monster6.png new file mode 100755 index 0000000..6e884a6 Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/mobs_tree_monster6.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/zmobs_mese_monster.png b/mods/mobs/mobs_mobs/mobs_monster/textures/zmobs_mese_monster.png index 55f662a..3d3812d 100644 Binary files a/mods/mobs/mobs_mobs/mobs_monster/textures/zmobs_mese_monster.png and b/mods/mobs/mobs_mobs/mobs_monster/textures/zmobs_mese_monster.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/textures/zmobs_mese_monster_old.png b/mods/mobs/mobs_mobs/mobs_monster/textures/zmobs_mese_monster_old.png new file mode 100644 index 0000000..55f662a Binary files /dev/null and b/mods/mobs/mobs_mobs/mobs_monster/textures/zmobs_mese_monster_old.png differ diff --git a/mods/mobs/mobs_mobs/mobs_monster/tree_monster.lua b/mods/mobs/mobs_mobs/mobs_monster/tree_monster.lua index 1708e46..4276f02 100644 --- a/mods/mobs/mobs_mobs/mobs_monster/tree_monster.lua +++ b/mods/mobs/mobs_mobs/mobs_monster/tree_monster.lua @@ -31,7 +31,17 @@ local tree_types = { {name = "ethereal:yellow_tree_sapling", chance = 2, min = 0, max = 2}, {name = "ethereal:golden_apple", chance = 3, min = 0, max = 2}, } - } + }, + + { nodes = {"default:acacia_bush_leaves"}, + skins = {"mobs_tree_monster6.png"}, + drops = { + {name = "tnt:gunpowder", chance = 1, min = 0, max = 2}, + {name = "default:iron_lump", chance = 5, min = 0, max = 2}, + {name = "default:coal_lump", chance = 3, min = 0, max = 3} + }, + explode = true + }, } @@ -45,8 +55,8 @@ mobs:register_mob("mobs_monster:tree_monster", { --specific_attack = {"player", "mobs_animal:chicken"}, reach = 2, damage = 2, - hp_min = 7, - hp_max = 33, + hp_min = 20, + hp_max = 40, armor = 100, collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4}, visual = "mesh", @@ -98,7 +108,7 @@ mobs:register_mob("mobs_monster:tree_monster", { punch_end = 62, }, - -- check surrounding nodes and spawn a specific spider + -- check surrounding nodes and spawn a specific tree monster on_spawn = function(self) local pos = self.object:get_pos() ; pos.y = pos.y - 1 @@ -108,6 +118,8 @@ mobs:register_mob("mobs_monster:tree_monster", { tmp = tree_types[n] + if tmp.explode and math.random(2) == 1 then return true end + if minetest.find_node_near(pos, 1, tmp.nodes) then self.base_texture = tmp.skins @@ -117,6 +129,25 @@ mobs:register_mob("mobs_monster:tree_monster", { self.drops = tmp.drops end + if tmp.explode then + self.attack_type = "explode" + self.explosion_radius = 3 + self.explosion_timer = 3 + self.damage = 21 + self.reach = 3 + self.fear_height = 4 + self.water_damage = 2 + self.lava_damage = 15 + self.light_damage = 0 + self.makes_footstep_sound = false + self.runaway_from = {"mobs_animal:kitten"} + self.sounds = { + attack = "tnt_ignite", + explode = "tnt_explode", + fuse = "tnt_ignite" + } + end + return true end end diff --git a/textures_sources.txt b/textures_sources.txt index 5922ee2..0842717 100644 --- a/textures_sources.txt +++ b/textures_sources.txt @@ -54,3 +54,7 @@ Mod: LessDirt/default origin https://github.com/Treer/LessDirt.git (fetch) * master 59d4434 [origin/master] Update forum link in README.md Mod: LessDirt/default + +origin https://github.com/Treer/LessDirt.git (fetch) +* master 59d4434 [origin/master] Update forum link in README.md +Mod: LessDirt/default