From 35f0cbc6177b66a260f6edf4ff5e42c622de5f6c Mon Sep 17 00:00:00 2001 From: daretmavi Date: Wed, 3 Mar 2021 23:39:58 +0100 Subject: [PATCH] Mods update --- mods/lib_api/modlib/b3d.lua | 5 +- .../mobs_mobkit/petz/petz/api/api_forms.lua | 2 +- .../mobs_mobkit/petz/petz/api/api_orders.lua | 4 +- .../mobs_mobkit/petz/petz/api/api_silk.lua | 2 +- .../petz/petz/api/api_wool_milk.lua | 2 +- .../mobs_mobkit/petz/petz/misc/hunger.lua | 42 ++++ .../mobs/mobs_mobkit/petz/petz/misc/nodes.lua | 34 +-- .../mobs_mobkit/petz/petz/mobkit/bh_fly.lua | 6 +- .../mobs_mobkit/petz/petz/mobkit/br_birds.lua | 213 ++++++++++++++++++ .../petz/petz/mobkit/br_flying.lua | 213 ++++++++++++++++++ .../petz/petz/mobkit/br_herbivore.lua | 19 +- .../mobs_mobkit/petz/petz/mobkit/mobkit.lua | 1 + .../petz/petz/petz/butterfly_mobkit.lua | 2 +- .../petz/petz/petz/moth_mobkit.lua | 2 +- .../petz/petz/petz/parrot_mobkit.lua | 2 +- .../petz/petz/petz/pigeon_mobkit.lua | 2 +- .../petz/petz/petz/toucan_mobkit.lua | 2 +- .../mobs_mobs/mobs_monster/dirt_monster.lua | 2 +- .../mobs_mobs/mobs_monster/dungeon_master.lua | 4 +- mods/mobs/mobs_mobs/mobs_monster/init.lua | 1 + .../mobs_mobs/mobs_monster/land_guard.lua | 127 +++++++++++ mods/mobs/mobs_mobs/mobs_monster/readme.md | 8 +- .../mobs_mobs/mobs_monster/sand_monster.lua | 1 + .../mobs_monster/textures/mobs_land_guard.png | Bin 0 -> 1195 bytes .../textures/mobs_land_guard2.png | Bin 0 -> 2653 bytes .../textures/mobs_land_guard3.png | Bin 0 -> 3481 bytes .../textures/mobs_land_guard4.png | Bin 0 -> 2637 bytes .../textures/mobs_land_guard5.png | Bin 0 -> 2512 bytes .../textures/mobs_land_guard6.png | Bin 0 -> 3538 bytes .../textures/mobs_land_guard7.png | Bin 0 -> 2410 bytes .../textures/mobs_land_guard8.png | Bin 0 -> 2661 bytes .../textures/mobs_sand_monster2.png | Bin 0 -> 778 bytes .../textures/mobs_tree_monster6.png | Bin 0 -> 3102 bytes .../textures/zmobs_mese_monster.png | Bin 567 -> 305 bytes .../textures/zmobs_mese_monster_old.png | Bin 0 -> 567 bytes .../mobs_mobs/mobs_monster/tree_monster.lua | 39 +++- textures_sources.txt | 4 + 37 files changed, 688 insertions(+), 51 deletions(-) create mode 100644 mods/mobs/mobs_mobkit/petz/petz/mobkit/br_birds.lua create mode 100644 mods/mobs/mobs_mobkit/petz/petz/mobkit/br_flying.lua create mode 100644 mods/mobs/mobs_mobs/mobs_monster/land_guard.lua create mode 100644 mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard.png create mode 100644 mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard2.png create mode 100644 mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard3.png create mode 100644 mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard4.png create mode 100644 mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard5.png create mode 100644 mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard6.png create mode 100644 mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard7.png create mode 100644 mods/mobs/mobs_mobs/mobs_monster/textures/mobs_land_guard8.png create mode 100644 mods/mobs/mobs_mobs/mobs_monster/textures/mobs_sand_monster2.png create mode 100755 mods/mobs/mobs_mobs/mobs_monster/textures/mobs_tree_monster6.png create mode 100644 mods/mobs/mobs_mobs/mobs_monster/textures/zmobs_mese_monster_old.png 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 0000000000000000000000000000000000000000..53100abe6d0bf46accd84e36270c765aff6e59aa GIT binary patch literal 1195 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 LNkvXXu0mjfs+Kph literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..69e86916c9611feb619efaa0a508b8279ef77c48 GIT binary patch literal 3481 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 a82RA}ei{x>=kS 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 M07*qoM6N<$f)?q*nE(I) literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6a9d0fd8b34306401cb029a298df2f24cd8696d0 GIT binary patch literal 2410 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 IM6N<$g0Hq^5dZ)H literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6e884a61a9c5f122a2a0a4ac766ca01e0196c23f GIT binary patch literal 3102 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 literal 0 HcmV?d00001 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 55f662a7a938fba8248e4f3d3ded2744c64764fe..3d3812dda3662b8f356f03a16e1bbc8e76ba60e2 100644 GIT binary patch delta 290 zcmV+-0p0$$1hE2;7=Hu<0001iRAssPH$0L;t= zbv500DGTPE!Ct=GbNc006{EL_t(2&ux$~4#OY}MZM$#y+LWD?DfFj z6J$Z+1nnLqoVgNmj$J!|LTJ2v`SHJP0qeFGR|RI$Ci0~Ejeo%FN>Y)Hsu4g;gcy08 zh@LM2A!NsRBf2Xfn;nah#6tmPM^Ru)HmIX0aK0f{y@&*~`_Q6|V=-n@2V!1}x)!fy zAm+72A-?zeRD~G;2Im~qQsCrgS}=4#dVd1){s&SE2JZ!=257*~Es%igKstH_n?LT% ojwYZWweJF4f*TIZ9XPk}12*!EY1yJM3jhEB07*qoM6N<$f~9tMkpKVy delta 554 zcmV+_0@eMo0=EQ^7=H)@0000)q>9D>000SaNLh0L01FcU01FcV0GgZ_00007bV*G` z2i*k%4i*h)DhA2`0013nR9JLFZ*6U5Zgc_CX>@2HM@dakWG-a~ z0001KP)t-s0000>J^;eR0LaP!)z|>n+5p+y0NvmK;p712=zjp{>j3Za1@Q9)@$>-k z^ab+t1@iR;^Y#Vw_XYL%1@`#`_xc6+`vv*@1^WC2`uzp_{ssL01^oX7{r?62{{{a5 z0RO50|NjO5|NnyjToM2P00DGTPE!Ct=GbNc0004EOGiW^U1eOX0003VNkl6UtYu#qSHBcSV@p84jM)4a%l@*_Pr@`pj)kpy5yJS* sewiRU{Ua#swo#DH!>@#+-W`_6AM17_UuzPOe*gdg07*qoM6N<$f(jP+g8%>k 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 0000000000000000000000000000000000000000..55f662a7a938fba8248e4f3d3ded2744c64764fe GIT binary patch literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#E-MqC7;lCa+bN)sY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4iwJ}@Ck7R(%yCqhmJ6uIK^=F2E+AR3^(sE+$jh*-+!_G_|5wB59===`pf$JAL}0=`p^3JKkL8$tp6Dp z{;y*A4`lrR-}FC52xu8&NswPKgTu2MX&_FLx4Vl{Y--FJAY0DU#WBRWEw0fiKA%Qm+Z%>cBSU3CYq#^;M zGeNW8D<*P0{Bg?czVjggJ<0CaM_pzd30<8$3->>r_f>t(iYA6-2SjfE)Osvc-uPSV z^rneZ;^mDdmj;zRT6RYM(uqsaXXYs!cUqGgFA=_9#4Xv|VSmq!KjNqVZMx`x$i%6y zb#0a4p&w`KW-3_!)p)ZlaKhQc>suDzlbv=#{&kshe74YpdSI|Ic)I$ztaD0e0swz; B_iF$E literal 0 HcmV?d00001 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