From 5bf2ceabcafdd0bb1e97963a749b7cf2be023f3f Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 11 Feb 2022 21:18:23 +0100 Subject: [PATCH] brutally replace mobs with old (mcla) mobs --- mods/ENTITIES/mcl_burning/api.lua | 1 + .../backup_code_api.txt => api.lua} | 5736 +++++++++++------ mods/ENTITIES/mcl_mobs/api.txt | 32 +- mods/ENTITIES/mcl_mobs/api/api.lua | 736 --- .../mcl_mobs/api/mob_functions/ai.lua | 1128 ---- .../mcl_mobs/api/mob_functions/animation.lua | 257 - .../attack_type_instructions.lua | 347 - .../mcl_mobs/api/mob_functions/breeding.lua | 179 - .../mcl_mobs/api/mob_functions/collision.lua | 135 - .../api/mob_functions/death_logic.lua | 161 - .../api/mob_functions/environment.lua | 250 - .../mcl_mobs/api/mob_functions/flow_lib.lua | 78 - .../mcl_mobs/api/mob_functions/head_logic.lua | 98 - .../api/mob_functions/interaction.lua | 276 - .../api/mob_functions/mob_effects.lua | 150 - .../mcl_mobs/api/mob_functions/movement.lua | 390 -- .../api/mob_functions/projectile_handling.lua | 43 - .../mcl_mobs/api/mob_functions/set_up.lua | 224 - .../api/mob_functions/sound_handling.lua | 59 - mods/ENTITIES/mcl_mobs/api/spawning.lua | 709 -- mods/ENTITIES/mcl_mobs/crafts.lua | 2 +- mods/ENTITIES/mcl_mobs/init.lua | 11 +- mods/ENTITIES/mcl_mobs/locale/mcl_mobs.pl.tr | 11 - mods/ENTITIES/mcl_mobs/lucky_block.lua | 8 + mods/ENTITIES/mcl_mobs/mod.conf | 5 +- mods/ENTITIES/mcl_mobs/{api => }/mount.lua | 99 +- .../mcl_mobs/{README.md => readme.MD} | 0 mods/ENTITIES/mcl_mobs/sounds/attributes.txt | 4 - .../mcl_mobs/sounds/default_punch.1.ogg | Bin 12658 -> 0 bytes .../mcl_mobs/sounds/default_punch.2.ogg | Bin 12801 -> 0 bytes .../mcl_mobs/sounds/default_punch.3.ogg | Bin 12943 -> 0 bytes .../mcl_mobs/sounds/default_punch.ogg | Bin 0 -> 5946 bytes mods/ENTITIES/mcl_mobs/todo.txt | 1 - mods/ENTITIES/mobs_mc/0_gameconfig.lua | 13 +- mods/ENTITIES/mobs_mc/1_items_default.lua | 70 +- mods/ENTITIES/mobs_mc/2_throwing.lua | 22 +- mods/ENTITIES/mobs_mc/4_heads.lua | 3 +- mods/ENTITIES/mobs_mc/LICENSE-media.md | 5 +- mods/ENTITIES/mobs_mc/agent.lua | 4 +- mods/ENTITIES/mobs_mc/bat.lua | 84 +- mods/ENTITIES/mobs_mc/blaze.lua | 104 +- mods/ENTITIES/mobs_mc/chicken.lua | 107 +- mods/ENTITIES/mobs_mc/cow+mooshroom.lua | 137 +- mods/ENTITIES/mobs_mc/creeper.lua | 218 +- mods/ENTITIES/mobs_mc/depends.txt | 1 - mods/ENTITIES/mobs_mc/ender_dragon.lua | 80 +- mods/ENTITIES/mobs_mc/enderman.lua | 313 +- mods/ENTITIES/mobs_mc/endermite.lua | 6 +- mods/ENTITIES/mobs_mc/ghast.lua | 84 +- mods/ENTITIES/mobs_mc/guardian.lua | 8 +- mods/ENTITIES/mobs_mc/guardian_elder.lua | 10 +- mods/ENTITIES/mobs_mc/horse.lua | 213 +- mods/ENTITIES/mobs_mc/init.lua | 2 +- mods/ENTITIES/mobs_mc/iron_golem.lua | 12 +- mods/ENTITIES/mobs_mc/llama.lua | 154 +- mods/ENTITIES/mobs_mc/locale/mobs_mc.pl.tr | 75 - mods/ENTITIES/mobs_mc/locale/template.txt | 1 - mods/ENTITIES/mobs_mc/mod.conf | 4 +- mods/ENTITIES/mobs_mc/models/attributes.txt | 1 - mods/ENTITIES/mobs_mc/models/mobs_mc_cat.b3d | Bin 50977 -> 54146 bytes mods/ENTITIES/mobs_mc/models/mobs_mc_cow.b3d | Bin 71850 -> 75074 bytes .../mobs_mc/models/mobs_mc_creeper.b3d | Bin 139359 -> 44319 bytes .../ENTITIES/mobs_mc/models/mobs_mc_ghast.b3d | Bin 69843 -> 75657 bytes .../mobs_mc/models/mobs_mc_mooshroom.b3d | Bin 71850 -> 54175 bytes .../mobs_mc/models/mobs_mc_skeleton.b3d | Bin 212014 -> 221065 bytes .../ENTITIES/mobs_mc/models/mobs_mc_slime.b3d | Bin 6346 -> 4732 bytes .../models/mobs_mc_villager_zombie.b3d | Bin 97769 -> 33648 bytes .../mobs_mc/models/mobs_mc_witherskeleton.b3d | Bin 212014 -> 185727 bytes .../mobs_mc/models/mobs_mc_zombie.b3d | Bin 114629 -> 38539 bytes mods/ENTITIES/mobs_mc/ocelot.lua | 38 +- mods/ENTITIES/mobs_mc/parrot.lua | 32 +- mods/ENTITIES/mobs_mc/pig.lua | 111 +- mods/ENTITIES/mobs_mc/polar_bear.lua | 25 +- mods/ENTITIES/mobs_mc/rabbit.lua | 75 +- mods/ENTITIES/mobs_mc/sheep.lua | 150 +- mods/ENTITIES/mobs_mc/shulker.lua | 22 +- mods/ENTITIES/mobs_mc/silverfish.lua | 16 +- mods/ENTITIES/mobs_mc/skeleton+stray.lua | 247 +- mods/ENTITIES/mobs_mc/skeleton_wither.lua | 25 +- mods/ENTITIES/mobs_mc/slime+magma_cube.lua | 267 +- mods/ENTITIES/mobs_mc/snowman.lua | 11 +- .../mobs_mc/sounds/mobs_mc_villager.1.ogg | Bin 14734 -> 0 bytes .../mobs_mc/sounds/mobs_mc_villager.2.ogg | Bin 14564 -> 0 bytes .../mobs_mc/sounds/mobs_mc_villager.3.ogg | Bin 14773 -> 0 bytes .../mobs_mc/sounds/mobs_mc_villager.4.ogg | Bin 14731 -> 0 bytes .../mobs_mc/sounds/mobs_mc_villager.5.ogg | Bin 11187 -> 0 bytes .../mobs_mc/sounds/mobs_mc_villager.6.ogg | Bin 11068 -> 0 bytes .../sounds/mobs_mc_villager_hurt.1.ogg | Bin 10341 -> 0 bytes mods/ENTITIES/mobs_mc/spider.lua | 170 +- mods/ENTITIES/mobs_mc/squid.lua | 161 +- .../mobs_mc/textures/mobs_mc_ghast_firing.png | Bin 1532 -> 0 bytes .../textures/mobs_mc_horse_skeleton.png | Bin 4115 -> 5972 bytes .../mobs_mc/textures/mobs_mc_horse_zombie.png | Bin 0 -> 11350 bytes .../mobs_mc/textures/mobs_mc_llama_chest.png | Bin 20594 -> 0 bytes .../textures/mobs_mc_llama_decor_black.png | Bin 4602 -> 0 bytes .../textures/mobs_mc_llama_decor_blue.png | Bin 6585 -> 0 bytes .../textures/mobs_mc_llama_decor_brown.png | Bin 6231 -> 0 bytes .../textures/mobs_mc_llama_decor_cyan.png | Bin 7612 -> 0 bytes .../textures/mobs_mc_llama_decor_gray.png | Bin 5236 -> 0 bytes .../textures/mobs_mc_llama_decor_green.png | Bin 5809 -> 0 bytes .../mobs_mc_llama_decor_light_blue.png | Bin 7643 -> 0 bytes .../mobs_mc_llama_decor_light_gray.png | Bin 6354 -> 0 bytes .../textures/mobs_mc_llama_decor_lime.png | Bin 7388 -> 0 bytes .../textures/mobs_mc_llama_decor_magenta.png | Bin 7352 -> 0 bytes .../textures/mobs_mc_llama_decor_orange.png | Bin 7396 -> 0 bytes .../textures/mobs_mc_llama_decor_pink.png | Bin 7732 -> 0 bytes .../textures/mobs_mc_llama_decor_purple.png | Bin 5790 -> 0 bytes .../textures/mobs_mc_llama_decor_red.png | Bin 6659 -> 0 bytes .../textures/mobs_mc_llama_decor_white.png | Bin 6866 -> 0 bytes .../textures/mobs_mc_llama_decor_yellow.png | Bin 7571 -> 0 bytes .../mobs_mc/textures/mobs_mc_slime.png | Bin 2052 -> 2040 bytes .../mobs_mc_spawn_icon_rabbit_caerbannog.png | Bin 1897 -> 0 bytes .../mobs_mc/textures/mobs_mc_spit.png | Bin 677 -> 0 bytes .../textures/mobs_mc_stray_overlay.png | Bin 1021 -> 790 bytes .../textures/mobs_mc_wither_half_health.png | Bin 1323 -> 0 bytes mods/ENTITIES/mobs_mc/vex.lua | 4 +- mods/ENTITIES/mobs_mc/villager.lua | 49 +- mods/ENTITIES/mobs_mc/villager_evoker.lua | 7 +- mods/ENTITIES/mobs_mc/villager_illusioner.lua | 11 +- mods/ENTITIES/mobs_mc/villager_vindicator.lua | 7 +- mods/ENTITIES/mobs_mc/villager_zombie.lua | 120 +- mods/ENTITIES/mobs_mc/witch.lua | 11 +- mods/ENTITIES/mobs_mc/wither.lua | 21 +- mods/ENTITIES/mobs_mc/wolf.lua | 80 +- mods/ENTITIES/mobs_mc/zombie.lua | 270 +- mods/ENTITIES/mobs_mc/zombiepig.lua | 57 +- mods/ENTITIES/mobs_mc_gameconfig/init.lua | 16 +- mods/ENTITIES/mobs_mc_gameconfig/mod.conf | 2 - 128 files changed, 4285 insertions(+), 10581 deletions(-) rename mods/ENTITIES/mcl_mobs/{api/mob_functions/backup_code_api.txt => api.lua} (50%) delete mode 100644 mods/ENTITIES/mcl_mobs/api/api.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/animation.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/attack_type_instructions.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/breeding.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/collision.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/environment.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/flow_lib.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/head_logic.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/interaction.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/mob_effects.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/movement.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/projectile_handling.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/set_up.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/sound_handling.lua delete mode 100644 mods/ENTITIES/mcl_mobs/api/spawning.lua delete mode 100644 mods/ENTITIES/mcl_mobs/locale/mcl_mobs.pl.tr create mode 100644 mods/ENTITIES/mcl_mobs/lucky_block.lua rename mods/ENTITIES/mcl_mobs/{api => }/mount.lua (86%) rename mods/ENTITIES/mcl_mobs/{README.md => readme.MD} (100%) delete mode 100644 mods/ENTITIES/mcl_mobs/sounds/attributes.txt delete mode 100644 mods/ENTITIES/mcl_mobs/sounds/default_punch.1.ogg delete mode 100644 mods/ENTITIES/mcl_mobs/sounds/default_punch.2.ogg delete mode 100644 mods/ENTITIES/mcl_mobs/sounds/default_punch.3.ogg create mode 100644 mods/ENTITIES/mcl_mobs/sounds/default_punch.ogg delete mode 100644 mods/ENTITIES/mcl_mobs/todo.txt delete mode 100644 mods/ENTITIES/mobs_mc/depends.txt delete mode 100644 mods/ENTITIES/mobs_mc/locale/mobs_mc.pl.tr delete mode 100644 mods/ENTITIES/mobs_mc/models/attributes.txt delete mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg delete mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg delete mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.3.ogg delete mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg delete mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg delete mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg delete mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast_firing.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_zombie.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_chest.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_black.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_blue.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_brown.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_cyan.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_gray.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_green.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_blue.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_gray.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_lime.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_magenta.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_orange.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_pink.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_purple.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_red.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_white.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_yellow.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_rabbit_caerbannog.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_spit.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_wither_half_health.png diff --git a/mods/ENTITIES/mcl_burning/api.lua b/mods/ENTITIES/mcl_burning/api.lua index 9699852053..ca2be7af2b 100644 --- a/mods/ENTITIES/mcl_burning/api.lua +++ b/mods/ENTITIES/mcl_burning/api.lua @@ -115,6 +115,7 @@ function mcl_burning.extinguish(obj) end function mcl_burning.tick(obj, dtime, storage) + if storage.burn_time then storage.burn_time = storage.burn_time - dtime diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/backup_code_api.txt b/mods/ENTITIES/mcl_mobs/api.lua similarity index 50% rename from mods/ENTITIES/mcl_mobs/api/mob_functions/backup_code_api.txt rename to mods/ENTITIES/mcl_mobs/api.lua index 48233d0b4f..cb43ce1e79 100644 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/backup_code_api.txt +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -1,7 +1,128 @@ -local math = math -local vector = vector -local function disable_physics(object, luaentity, ignore_check, reset_movement) +-- API for Mobs Redo: MineClone 2 Edition (MRM) + +mobs = {} +mobs.mod = "mrm" +mobs.version = "20210106" -- don't rely too much on this, rarely updated, if ever + +local MAX_MOB_NAME_LENGTH = 30 +local HORNY_TIME = 30 +local HORNY_AGAIN_TIME = 300 +local CHILD_GROW_TIME = 60*20 +local DEATH_DELAY = 0.5 +local DEFAULT_FALL_SPEED = -10 +local FLOP_HEIGHT = 5.0 +local FLOP_HOR_SPEED = 1.5 + +local LIGHT_SUN = minetest.LIGHT_MAX + 1 + +local MOB_CAP = {} +MOB_CAP.hostile = 70 +MOB_CAP.passive = 10 +MOB_CAP.ambient = 15 +MOB_CAP.water = 15 + +-- Localize +local S = minetest.get_translator("mcl_mobs") + +-- CMI support check +local use_cmi = minetest.global_exists("cmi") + + +-- Invisibility mod check +mobs.invis = {} +if minetest.global_exists("invisibility") then + mobs.invis = invisibility +end + + +-- creative check +function mobs.is_creative(name) + return minetest.is_creative_enabled(name) +end + + +-- localize math functions +local pi = math.pi +local sin = math.sin +local cos = math.cos +local abs = math.abs +local min = math.min +local max = math.max +local atann = math.atan +local random = math.random +local floor = math.floor +local atan = function(x) + if not x or x ~= x then + return 0 + else + return atann(x) + end +end + + +-- Load settings +local damage_enabled = minetest.settings:get_bool("enable_damage") +local mobs_spawn = minetest.settings:get_bool("mobs_spawn", true) ~= false + +local disable_blood = minetest.settings:get_bool("mobs_disable_blood") +local mobs_drop_items = minetest.settings:get_bool("mobs_drop_items") ~= false +local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false +local spawn_protected = minetest.settings:get_bool("mobs_spawn_protected") ~= false +local remove_far = true +local difficulty = tonumber(minetest.settings:get("mob_difficulty")) or 1.0 +local show_health = false +local max_per_block = tonumber(minetest.settings:get("max_objects_per_block") or 64) +local mobs_spawn_chance = tonumber(minetest.settings:get("mobs_spawn_chance") or 2.5) + +-- Shows helpful debug info above each mob +local mobs_debug = minetest.settings:get_bool("mobs_debug", false) + +-- Peaceful mode message so players will know there are no monsters +if minetest.settings:get_bool("only_peaceful_mobs", false) then + minetest.register_on_joinplayer(function(player) + minetest.chat_send_player(player:get_player_name(), + S("Peaceful mode active! No monsters will spawn.")) + end) +end + +-- calculate aoc range for mob count +local aosrb = tonumber(minetest.settings:get("active_object_send_range_blocks")) +local abr = tonumber(minetest.settings:get("active_block_range")) +local aoc_range = max(aosrb, abr) * 16 + +-- pathfinding settings +local enable_pathfinding = true +local stuck_timeout = 3 -- how long before mob gets stuck in place and starts searching +local stuck_path_timeout = 10 -- how long will mob follow path before giving up + +-- default nodes +local node_ice = "mcl_core:ice" +local node_snowblock = "mcl_core:snowblock" +local node_snow = "mcl_core:snow" +mobs.fallback_node = minetest.registered_aliases["mapgen_dirt"] or "mcl_core:dirt" + +local mod_weather = minetest.get_modpath("mcl_weather") ~= nil +local mod_explosions = minetest.get_modpath("mcl_explosions") ~= nil +local mod_mobspawners = minetest.get_modpath("mcl_mobspawners") ~= nil +local mod_hunger = minetest.get_modpath("mcl_hunger") ~= nil +local mod_worlds = minetest.get_modpath("mcl_worlds") ~= nil +local mod_armor = minetest.get_modpath("mcl_armor") ~= nil +local mod_experience = minetest.get_modpath("mcl_experience") ~= nil + +----For Water Flowing: +local enable_physics = function(object, luaentity, ignore_check) + if luaentity.physical_state == false or ignore_check == true then + luaentity.physical_state = true + object:set_properties({ + physical = true + }) + object:set_velocity({x=0,y=0,z=0}) + object:set_acceleration({x=0,y=-9.81,z=0}) + end +end + +local disable_physics = function(object, luaentity, ignore_check, reset_movement) if luaentity.physical_state == true or ignore_check == true then luaentity.physical_state = false object:set_properties({ @@ -14,174 +135,1212 @@ local function disable_physics(object, luaentity, ignore_check, reset_movement) end end -----For Water Flowing: -local function enable_physics(object, luaentity, ignore_check) - if luaentity.physical_state == false or ignore_check == true then - luaentity.physical_state = true - object:set_properties({ - physical = true - }) - object:set_velocity({x=0,y=0,z=0}) - object:set_acceleration({x=0,y=-9.81,z=0}) + +-- play sound +local mob_sound = function(self, soundname, is_opinion, fixed_pitch) + + local soundinfo + if self.sounds_child and self.child then + soundinfo = self.sounds_child + elseif self.sounds then + soundinfo = self.sounds + end + if not soundinfo then + return + end + local sound = soundinfo[soundname] + if sound then + if is_opinion and self.opinion_sound_cooloff > 0 then + return + end + local pitch + if not fixed_pitch then + local base_pitch = soundinfo.base_pitch + if not base_pitch then + base_pitch = 1 + end + if self.child and (not self.sounds_child) then + -- Children have higher pitch + pitch = base_pitch * 1.5 + else + pitch = base_pitch + end + -- randomize the pitch a bit + pitch = pitch + math.random(-10, 10) * 0.005 + end + minetest.sound_play(sound, { + object = self.object, + gain = 1.0, + max_hear_distance = self.sounds.distance, + pitch = pitch, + }, true) + self.opinion_sound_cooloff = 1 end end ---[[ -local timer = 0 -minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer < 1 then return end - for _, player in pairs(minetest.get_connected_players()) do - local pos = player:get_pos() - for _, obj in pairs(minetest_get_objects_inside_radius(pos, 47)) do - local lua = obj:get_luaentity() - if lua and lua._cmi_is_mob then - lua.lifetimer = math.max(20, lua.lifetimer) - lua.despawn_immediately = false - end - end +-- Return true if object is in view_range +local function object_in_range(self, object) + if not object then + return false + end + local factor + -- Apply view range reduction for special player armor + if object:is_player() and mod_armor then + factor = armor:get_mob_view_range_factor(object, self.name) + end + -- Distance check + local dist + if factor and factor == 0 then + return false + elseif factor then + dist = self.view_range * factor + else + dist = self.view_range end - timer = 0 -end) -]]-- --- compatibility function for old entities to new modpack entities -function mobs:alias_mob(old_name, new_name) - - -- spawn egg - minetest.register_alias(old_name, new_name) - - -- entity - minetest.register_entity(":" .. old_name, { - - physical = false, - - on_step = function(self) - - if minetest_registered_entities[new_name] then - minetest_add_entity(self.object:get_pos(), new_name) - end - - self.object:remove() - end - }) + local p1, p2 = self.object:get_pos(), object:get_pos() + return p1 and p2 and (vector.distance(p1, p2) <= dist) end --- Spawn a child -function mobs:spawn_child(pos, mob_type) - local child = minetest_add_entity(pos, mob_type) - if not child then +-- attack player/mob +local do_attack = function(self, player) + + if self.state == "attack" or self.state == "die" then return end - local ent = child:get_luaentity() - effect(pos, 15, "mcl_particles_smoke.png", 1, 2, 2, 15, 5) + self.attack = player + self.state = "attack" - ent.child = true + -- TODO: Implement war_cry sound without being annoying + --if random(0, 100) < 90 then + --mob_sound(self, "war_cry", true) + --end +end - local textures - -- using specific child texture (if found) - if ent.child_texture then - textures = ent.child_texture[1] + +-- collision function borrowed amended from jordan4ibanez open_ai mod +local collision = function(self) + + local pos = self.object:get_pos() + local vel = self.object:get_velocity() + local x = 0 + local z = 0 + local width = -self.collisionbox[1] + self.collisionbox[4] + 0.5 + + for _,object in ipairs(minetest.get_objects_inside_radius(pos, width)) do + + if object:is_player() + or (object:get_luaentity()._cmi_is_mob == true and object ~= self.object) then + + local pos2 = object:get_pos() + local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z} + local force = (width + 0.5) - vector.distance( + {x = pos.x, y = 0, z = pos.z}, + {x = pos2.x, y = 0, z = pos2.z}) + + x = x + (vec.x * force) + z = z + (vec.z * force) + end end - -- and resize to half height - child:set_properties({ - textures = textures, - visual_size = { - x = ent.base_size.x * .5, - y = ent.base_size.y * .5, - }, - collisionbox = { - ent.base_colbox[1] * .5, - ent.base_colbox[2] * .5, - ent.base_colbox[3] * .5, - ent.base_colbox[4] * .5, - ent.base_colbox[5] * .5, - ent.base_colbox[6] * .5, - }, - selectionbox = { - ent.base_selbox[1] * .5, - ent.base_selbox[2] * .5, - ent.base_selbox[3] * .5, - ent.base_selbox[4] * .5, - ent.base_selbox[5] * .5, - ent.base_selbox[6] * .5, - }, - }) + return({x,z}) +end - return child +-- move mob in facing direction +local set_velocity = function(self, v) + + local c_x, c_y = 0, 0 + + -- can mob be pushed, if so calculate direction + if self.pushable then + c_x, c_y = unpack(collision(self)) + end + + -- halt mob if it has been ordered to stay + if self.order == "stand" then + self.object:set_velocity({x = 0, y = 0, z = 0}) + return + end + + local yaw = (self.object:get_yaw() or 0) + self.rotate + + self.object:set_velocity({ + x = (sin(yaw) * -v) + c_x, + y = self.object:get_velocity().y, + z = (cos(yaw) * v) + c_y, + }) end --- feeding, taming and breeding (thanks blert2112) -function mobs:feed_tame(self, clicker, feed_count, breed, tame) - if not self.follow then +-- calculate mob velocity +local get_velocity = function(self) + + local v = self.object:get_velocity() + if v then + return (v.x * v.x + v.z * v.z) ^ 0.5 + end + + return 0 +end + + +-- set and return valid yaw +local set_yaw = function(self, yaw, delay, dtime) + + if not yaw or yaw ~= yaw then + yaw = 0 + end + + delay = delay or 0 + + if delay == 0 then + if self.shaking and dtime then + yaw = yaw + (math.random() * 2 - 1) * 5 * dtime + end + self.object:set_yaw(yaw) + return yaw + end + + self.target_yaw = yaw + self.delay = delay + + return self.target_yaw +end + +-- global function to set mob yaw +function mobs:yaw(self, yaw, delay, dtime) + set_yaw(self, yaw, delay, dtime) +end + +local add_texture_mod = function(self, mod) + local full_mod = "" + local already_added = false + for i=1, #self.texture_mods do + if mod == self.texture_mods[i] then + already_added = true + end + full_mod = full_mod .. self.texture_mods[i] + end + if not already_added then + full_mod = full_mod .. mod + table.insert(self.texture_mods, mod) + end + self.object:set_texture_mod(full_mod) +end +local remove_texture_mod = function(self, mod) + local full_mod = "" + local remove = {} + for i=1, #self.texture_mods do + if self.texture_mods[i] ~= mod then + full_mod = full_mod .. self.texture_mods[i] + else + table.insert(remove, i) + end + end + for i=#remove, 1 do + table.remove(self.texture_mods, remove[i]) + end + self.object:set_texture_mod(full_mod) +end + +-- set defined animation +local set_animation = function(self, anim, fixed_frame) + if not self.animation or not anim then + return + end + if self.state == "die" and anim ~= "die" and anim ~= "stand" then + return + end + + self.animation.current = self.animation.current or "" + + if (anim == self.animation.current + or not self.animation[anim .. "_start"] + or not self.animation[anim .. "_end"]) and self.state ~= "die" then + return + end + + self.animation.current = anim + + local a_start = self.animation[anim .. "_start"] + local a_end + if fixed_frame then + a_end = a_start + else + a_end = self.animation[anim .. "_end"] + end + + self.object:set_animation({ + x = a_start, + y = a_end}, + self.animation[anim .. "_speed"] or self.animation.speed_normal or 15, + 0, self.animation[anim .. "_loop"] ~= false) +end + + +-- above function exported for mount.lua +function mobs:set_animation(self, anim) + set_animation(self, anim) +end + +-- Returns true is node can deal damage to self +local is_node_dangerous = function(self, nodename) + local nn = nodename + if self.lava_damage > 0 then + if minetest.get_item_group(nn, "lava") ~= 0 then + return true + end + end + if self.fire_damage > 0 then + if minetest.get_item_group(nn, "fire") ~= 0 then + return true + end + end + if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].damage_per_second and minetest.registered_nodes[nn].damage_per_second > 0 then + return true + end + return false +end + + +-- Returns true if node is a water hazard +local is_node_waterhazard = function(self, nodename) + local nn = nodename + if self.water_damage > 0 then + if minetest.get_item_group(nn, "water") ~= 0 then + return true + end + end + if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].drowning and minetest.registered_nodes[nn].drowning > 0 then + if self.breath_max ~= -1 then + -- check if the mob is water-breathing _and_ the block is water; only return true if neither is the case + -- this will prevent water-breathing mobs to classify water or e.g. sand below them as dangerous + if not self.breathes_in_water and minetest.get_item_group(nn, "water") ~= 0 then + return true + end + end + end + return false +end + + +-- check line of sight (BrunoMine) +local line_of_sight = function(self, pos1, pos2, stepsize) + + stepsize = stepsize or 1 + + local s, pos = minetest.line_of_sight(pos1, pos2, stepsize) + + -- normal walking and flying mobs can see you through air + if s == true then + return true + end + + -- New pos1 to be analyzed + local npos1 = {x = pos1.x, y = pos1.y, z = pos1.z} + + local r, pos = minetest.line_of_sight(npos1, pos2, stepsize) + + -- Checks the return + if r == true then return true end + + -- Nodename found + local nn = minetest.get_node(pos).name + + -- Target Distance (td) to travel + local td = vector.distance(pos1, pos2) + + -- Actual Distance (ad) traveled + local ad = 0 + + -- It continues to advance in the line of sight in search of a real + -- obstruction which counts as 'normal' nodebox. + while minetest.registered_nodes[nn] + and minetest.registered_nodes[nn].walkable == false do + + -- Check if you can still move forward + if td < ad + stepsize then + return true -- Reached the target + end + + -- Moves the analyzed pos + local d = vector.distance(pos1, pos2) + + npos1.x = ((pos2.x - pos1.x) / d * stepsize) + pos1.x + npos1.y = ((pos2.y - pos1.y) / d * stepsize) + pos1.y + npos1.z = ((pos2.z - pos1.z) / d * stepsize) + pos1.z + + -- NaN checks + if d == 0 + or npos1.x ~= npos1.x + or npos1.y ~= npos1.y + or npos1.z ~= npos1.z then + return false + end + + ad = ad + stepsize + + -- scan again + r, pos = minetest.line_of_sight(npos1, pos2, stepsize) + + if r == true then return true end + + -- New Nodename found + nn = minetest.get_node(pos).name + + end + + return false +end + + +-- are we flying in what we are suppose to? (taikedz) +local flight_check = function(self) + + local nod = self.standing_in + local def = minetest.registered_nodes[nod] + + if not def then return false end -- nil check + + local fly_in + if type(self.fly_in) == "string" then + fly_in = { self.fly_in } + elseif type(self.fly_in) == "table" then + fly_in = self.fly_in + else return false end - -- can eat/tame with item in hand - if follow_holding(self, clicker) then - - -- if not in creative then take item - if not mobs.is_creative(clicker:get_player_name()) then - - local item = clicker:get_wielded_item() - - item:take_item() - - clicker:set_wielded_item(item) - end - - mob_sound(self, "eat", nil, true) - - -- increase health - self.health = self.health + 4 - - if self.health >= self.hp_max then - - self.health = self.hp_max - - if self.htimer < 1 then - self.htimer = 5 - end - end - - self.object:set_hp(self.health) - - update_tag(self) - - -- make children grow quicker - if self.child == true then - - -- deduct 10% of the time to adulthood - self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) - + for _,checknode in pairs(fly_in) do + if nod == checknode then + return true + elseif checknode == "__airlike" and def.walkable == false and + (def.liquidtype == "none" or minetest.get_item_group(nod, "fake_liquid") == 1) then return true end + end - -- feed and tame - self.food = (self.food or 0) + 1 - if self.food >= feed_count then + return false +end - self.food = 0 - if breed and self.hornytimer == 0 then - self.horny = true +-- custom particle effects +local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow, go_down) + + radius = radius or 2 + min_size = min_size or 0.5 + max_size = max_size or 1 + gravity = gravity or -10 + glow = glow or 0 + go_down = go_down or false + + local ym + if go_down then + ym = 0 + else + ym = -radius + end + + minetest.add_particlespawner({ + amount = amount, + time = 0.25, + minpos = pos, + maxpos = pos, + minvel = {x = -radius, y = ym, z = -radius}, + maxvel = {x = radius, y = radius, z = radius}, + minacc = {x = 0, y = gravity, z = 0}, + maxacc = {x = 0, y = gravity, z = 0}, + minexptime = 0.1, + maxexptime = 1, + minsize = min_size, + maxsize = max_size, + texture = texture, + glow = glow, + }) +end + +local damage_effect = function(self, damage) + -- damage particles + if (not disable_blood) and damage > 0 then + + local amount_large = math.floor(damage / 2) + local amount_small = damage % 2 + + local pos = self.object:get_pos() + + pos.y = pos.y + (self.collisionbox[5] - self.collisionbox[2]) * .5 + + local texture = "mobs_blood.png" + -- full heart damage (one particle for each 2 HP damage) + if amount_large > 0 then + effect(pos, amount_large, texture, 2, 2, 1.75, 0, nil, true) + end + -- half heart damage (one additional particle if damage is an odd number) + if amount_small > 0 then + -- TODO: Use "half heart" + effect(pos, amount_small, texture, 1, 1, 1.75, 0, nil, true) + end + end +end + +mobs.death_effect = function(pos, yaw, collisionbox, rotate) + local min, max + if collisionbox then + min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} + max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} + else + min = { x = -0.5, y = 0, z = -0.5 } + max = { x = 0.5, y = 0.5, z = 0.5 } + end + if rotate then + min = vector.rotate(min, {x=0, y=yaw, z=pi/2}) + max = vector.rotate(max, {x=0, y=yaw, z=pi/2}) + min, max = vector.sort(min, max) + min = vector.multiply(min, 0.5) + max = vector.multiply(max, 0.5) + end + + minetest.add_particlespawner({ + amount = 50, + time = 0.001, + minpos = vector.add(pos, min), + maxpos = vector.add(pos, max), + minvel = vector.new(-5,-5,-5), + maxvel = vector.new(5,5,5), + minexptime = 1.1, + maxexptime = 1.5, + minsize = 1, + maxsize = 2, + collisiondetection = false, + vertical = false, + texture = "mcl_particles_mob_death.png^[colorize:#000000:255", + }) + + minetest.sound_play("mcl_mobs_mob_poof", { + pos = pos, + gain = 1.0, + max_hear_distance = 8, + }, true) +end + +local update_tag = function(self) + local tag + if mobs_debug then + tag = "nametag = '"..tostring(self.nametag).."'\n".. + "state = '"..tostring(self.state).."'\n".. + "order = '"..tostring(self.order).."'\n".. + "attack = "..tostring(self.attack).."\n".. + "health = "..tostring(self.health).."\n".. + "breath = "..tostring(self.breath).."\n".. + "gotten = "..tostring(self.gotten).."\n".. + "tamed = "..tostring(self.tamed).."\n".. + "horny = "..tostring(self.horny).."\n".. + "hornytimer = "..tostring(self.hornytimer).."\n".. + "runaway_timer = "..tostring(self.runaway_timer).."\n".. + "following = "..tostring(self.following) + else + tag = self.nametag + end + self.object:set_properties({ + nametag = tag, + }) + +end + + +-- drop items +local item_drop = function(self, cooked, looting_level) + + -- no drops if disabled by setting + if not mobs_drop_items then return end + + looting_level = looting_level or 0 + + -- no drops for child mobs (except monster) + if (self.child and self.type ~= "monster") then + return + end + + local obj, item, num + local pos = self.object:get_pos() + + self.drops = self.drops or {} -- nil check + + for n = 1, #self.drops do + local dropdef = self.drops[n] + local chance = 1 / dropdef.chance + local looting_type = dropdef.looting + + if looting_level > 0 then + local chance_function = dropdef.looting_chance_function + if chance_function then + chance = chance_function(looting_level) + elseif looting_type == "rare" then + chance = chance + (dropdef.looting_factor or 0.01) * looting_level end + end - if tame then + local num = 0 + local do_common_looting = (looting_level > 0 and looting_type == "common") + if random() < chance then + num = random(dropdef.min or 1, dropdef.max or 1) + elseif not dropdef.looting_ignore_chance then + do_common_looting = false + end - self.tamed = true + if do_common_looting then + num = num + math.floor(math.random(0, looting_level) + 0.5) + end - if not self.owner or self.owner == "" then - self.owner = clicker:get_player_name() + if num > 0 then + item = dropdef.name + + -- cook items when true + if cooked then + + local output = minetest.get_craft_result({ + method = "cooking", width = 1, items = {item}}) + + if output and output.item and not output.item:is_empty() then + item = output.item:get_name() end end - -- make sound when fed so many times - mob_sound(self, "random", true) + -- add item if it exists + obj = minetest.add_item(pos, ItemStack(item .. " " .. num)) + + if obj and obj:get_luaentity() then + + obj:set_velocity({ + x = random(-10, 10) / 9, + y = 6, + z = random(-10, 10) / 9, + }) + elseif obj then + obj:remove() -- item does not exist + end + end + end + + self.drops = {} +end + + +-- check if mob is dead or only hurt +local check_for_death = function(self, cause, cmi_cause) + + if self.state == "die" then + return true + end + + -- has health actually changed? + if self.health == self.old_health and self.health > 0 then + return false + end + + local damaged = self.health < self.old_health + self.old_health = self.health + + -- still got some health? + if self.health > 0 then + + -- make sure health isn't higher than max + if self.health > self.hp_max then + self.health = self.hp_max + end + + -- play damage sound if health was reduced and make mob flash red. + if damaged then + add_texture_mod(self, "^[colorize:#FF000040") + minetest.after(.2, function(self) + if self and self.object then + remove_texture_mod(self, "^[colorize:#FF000040") + end + end, self) + mob_sound(self, "damage") + end + + -- backup nametag so we can show health stats + if not self.nametag2 then + self.nametag2 = self.nametag or "" + end + + if show_health + and (cmi_cause and cmi_cause.type == "punch") then + + self.htimer = 2 + self.nametag = "♥ " .. self.health .. " / " .. self.hp_max + + update_tag(self) + end + + return false + end + + mob_sound(self, "death") + + local function death_handle(self) + -- dropped cooked item if mob died in fire or lava + if cause == "lava" or cause == "fire" then + item_drop(self, true, 0) + else + local wielditem = ItemStack() + if cause == "hit" then + local puncher = cmi_cause.puncher + if puncher then + wielditem = puncher:get_wielded_item() + end + end + local cooked = mcl_burning.is_burning(self.object) or mcl_enchanting.has_enchantment(wielditem, "fire_aspect") + local looting = mcl_enchanting.get_enchantment(wielditem, "looting") + item_drop(self, cooked, looting) + + if mod_experience and ((not self.child) or self.type ~= "animal") and (minetest.get_us_time() - self.xp_timestamp <= 5000000) then + mcl_experience.throw_experience(self.object:get_pos(), math.random(self.xp_min, self.xp_max)) + end + end + end + + -- execute custom death function + if self.on_die then + + local pos = self.object:get_pos() + local on_die_exit = self.on_die(self, pos, cmi_cause) + if on_die_exit ~= true then + death_handle(self) + end + + if use_cmi then + cmi.notify_die(self.object, cmi_cause) + end + + if on_die_exit == true then + self.state = "die" + mcl_burning.extinguish(self.object) + self.object:remove() + return true + end + end + + local collisionbox + if self.collisionbox then + collisionbox = table.copy(self.collisionbox) + end + + self.state = "die" + self.attack = nil + self.v_start = false + self.fall_speed = DEFAULT_FALL_SPEED + self.timer = 0 + self.blinktimer = 0 + remove_texture_mod(self, "^[colorize:#FF000040") + remove_texture_mod(self, "^[brighten") + self.passive = true + self.object:set_properties({ + pointable = false, + collide_with_objects = false, + }) + set_velocity(self, 0) + local acc = self.object:get_acceleration() + acc.x, acc.y, acc.z = 0, DEFAULT_FALL_SPEED, 0 + self.object:set_acceleration(acc) + + local length + -- default death function and die animation (if defined) + if self.instant_death then + length = 0 + elseif self.animation + and self.animation.die_start + and self.animation.die_end then + + local frames = self.animation.die_end - self.animation.die_start + local speed = self.animation.die_speed or 15 + length = max(frames / speed, 0) + DEATH_DELAY + set_animation(self, "die") + else + local rot = self.object:get_rotation() + rot.z = pi/2 + self.object:set_rotation(rot) + length = 1 + DEATH_DELAY + set_animation(self, "stand", true) + end + + + -- Remove body after a few seconds and drop stuff + local kill = function(self) + if not self.object:get_luaentity() then + return + end + if use_cmi then + cmi.notify_die(self.object, cmi_cause) + end + + death_handle(self) + local dpos = self.object:get_pos() + local cbox = self.collisionbox + local yaw = self.object:get_rotation().y + mcl_burning.extinguish(self.object) + self.object:remove() + mobs.death_effect(dpos, yaw, cbox, not self.instant_death) + end + if length <= 0 then + kill(self) + else + minetest.after(length, kill, self) + end + + return true +end + + +-- check if within physical map limits (-30911 to 30927) +local within_limits, wmin, wmax = nil, -30913, 30928 +within_limits = function(pos, radius) + if mcl_vars then + if mcl_vars.mapgen_edge_min and mcl_vars.mapgen_edge_max then + wmin, wmax = mcl_vars.mapgen_edge_min, mcl_vars.mapgen_edge_max + within_limits = function(pos, radius) + return pos + and (pos.x - radius) > wmin and (pos.x + radius) < wmax + and (pos.y - radius) > wmin and (pos.y + radius) < wmax + and (pos.z - radius) > wmin and (pos.z + radius) < wmax + end + end + end + return pos + and (pos.x - radius) > wmin and (pos.x + radius) < wmax + and (pos.y - radius) > wmin and (pos.y + radius) < wmax + and (pos.z - radius) > wmin and (pos.z + radius) < wmax +end + + +-- is mob facing a cliff or danger +local is_at_cliff_or_danger = function(self) + + if self.fear_height == 0 then -- 0 for no falling protection! + return false + end + + if not self.object:get_luaentity() then + return false + end + local yaw = self.object:get_yaw() + local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) + local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) + local pos = self.object:get_pos() + local ypos = pos.y + self.collisionbox[2] -- just above floor + + local free_fall, blocker = minetest.line_of_sight( + {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, + {x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z}) + if free_fall then + return true + else + local bnode = minetest.get_node(blocker) + local danger = is_node_dangerous(self, bnode.name) + if danger then + return true + else + local def = minetest.registered_nodes[bnode.name] + if def and def.walkable then + return false + end + end + end + + return false +end + + +-- copy the 'mob facing cliff_or_danger check' from above, and rework to avoid water +local is_at_water_danger = function(self) + + + if not self.object:get_luaentity() then + return false + end + local yaw = self.object:get_yaw() + local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) + local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) + local pos = self.object:get_pos() + local ypos = pos.y + self.collisionbox[2] -- just above floor + + local free_fall, blocker = minetest.line_of_sight( + {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, + {x = pos.x + dir_x, y = ypos - 3, z = pos.z + dir_z}) + if free_fall then + return true + else + local bnode = minetest.get_node(blocker) + local waterdanger = is_node_waterhazard(self, bnode.name) + if + waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) then + return false + elseif waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) == false then + return true + else + local def = minetest.registered_nodes[bnode.name] + if def and def.walkable then + return false + end + end + end + + return false +end + + +-- get node but use fallback for nil or unknown +local node_ok = function(pos, fallback) + + fallback = fallback or mobs.fallback_node + + local node = minetest.get_node_or_nil(pos) + + if node and minetest.registered_nodes[node.name] then + return node + end + + return minetest.registered_nodes[fallback] +end + + +-- environmental damage (water, lava, fire, light etc.) +local do_env_damage = function(self) + + -- feed/tame text timer (so mob 'full' messages dont spam chat) + if self.htimer > 0 then + self.htimer = self.htimer - 1 + end + + -- reset nametag after showing health stats + if self.htimer < 1 and self.nametag2 then + + self.nametag = self.nametag2 + self.nametag2 = nil + + update_tag(self) + end + + local pos = self.object:get_pos() + + self.time_of_day = minetest.get_timeofday() + + -- remove mob if beyond map limits + if not within_limits(pos, 0) then + mcl_burning.extinguish(self.object) + self.object:remove() + return true + end + + + -- Deal light damage to mob, returns true if mob died + local deal_light_damage = function(self, pos, damage) + if not (mod_weather and (mcl_weather.rain.raining or mcl_weather.state == "snow") and mcl_weather.is_outdoor(pos)) then + self.health = self.health - damage + + effect(pos, 5, "mcl_particles_smoke.png") + + if check_for_death(self, "light", {type = "light"}) then + return true + end + end + end + + -- bright light harms mob + if self.light_damage ~= 0 and (minetest.get_node_light(pos) or 0) > 12 then + if deal_light_damage(self, pos, self.light_damage) then + return true + end + end + local _, dim = nil, "overworld" + if mod_worlds then + _, dim = mcl_worlds.y_to_layer(pos.y) + end + if (self.sunlight_damage ~= 0 or self.ignited_by_sunlight) and (minetest.get_node_light(pos) or 0) == LIGHT_SUN and dim == "overworld" then + if self.ignited_by_sunlight then + mcl_burning.set_on_fire(self.object, 10) + else + deal_light_damage(self, pos, self.sunlight_damage) + return true + end + end + + local y_level = self.collisionbox[2] + + if self.child then + y_level = self.collisionbox[2] * 0.5 + end + + -- what is mob standing in? + pos.y = pos.y + y_level + 0.25 -- foot level + local pos2 = {x=pos.x, y=pos.y-1, z=pos.z} + self.standing_in = node_ok(pos, "air").name + self.standing_on = node_ok(pos2, "air").name + + -- don't fall when on ignore, just stand still + if self.standing_in == "ignore" then + self.object:set_velocity({x = 0, y = 0, z = 0}) + end + + local nodef = minetest.registered_nodes[self.standing_in] + + -- rain + if self.rain_damage > 0 and mod_weather then + if mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then + + self.health = self.health - self.rain_damage + + if check_for_death(self, "rain", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + end + + pos.y = pos.y + 1 -- for particle effect position + + -- water damage + if self.water_damage > 0 + and nodef.groups.water then + + if self.water_damage ~= 0 then + + self.health = self.health - self.water_damage + + effect(pos, 5, "mcl_particles_smoke.png", nil, nil, 1, nil) + + if check_for_death(self, "water", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + + -- lava damage + elseif self.lava_damage > 0 + and (nodef.groups.lava) then + + if self.lava_damage ~= 0 then + + self.health = self.health - self.lava_damage + + effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) + + if check_for_death(self, "lava", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + + -- fire damage + elseif self.fire_damage > 0 + and (nodef.groups.fire) then + + if self.fire_damage ~= 0 then + + self.health = self.health - self.fire_damage + + effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) + + if check_for_death(self, "fire", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + + -- damage_per_second node check + elseif nodef.damage_per_second ~= 0 and not nodef.groups.lava and not nodef.groups.fire then + + self.health = self.health - nodef.damage_per_second + + effect(pos, 5, "mcl_particles_smoke.png") + + if check_for_death(self, "dps", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + + -- Drowning damage + if self.breath_max ~= -1 then + local drowning = false + if self.breathes_in_water then + if minetest.get_item_group(self.standing_in, "water") == 0 then + drowning = true + end + elseif nodef.drowning > 0 then + drowning = true + end + if drowning then + + self.breath = math.max(0, self.breath - 1) + + effect(pos, 2, "bubble.png", nil, nil, 1, nil) + if self.breath <= 0 then + local dmg + if nodef.drowning > 0 then + dmg = nodef.drowning + else + dmg = 4 + end + damage_effect(self, dmg) + self.health = self.health - dmg + end + if check_for_death(self, "drowning", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + else + self.breath = math.min(self.breath_max, self.breath + 1) + end + end + + --- suffocation inside solid node + -- FIXME: Redundant with mcl_playerplus + if (self.suffocation == true) + and (nodef.walkable == nil or nodef.walkable == true) + and (nodef.collision_box == nil or nodef.collision_box.type == "regular") + and (nodef.node_box == nil or nodef.node_box.type == "regular") + and (nodef.groups.disable_suffocation ~= 1) + and (nodef.groups.opaque == 1) then + + -- Short grace period before starting to take suffocation damage. + -- This is different from players, who take damage instantly. + -- This has been done because mobs might briefly be inside solid nodes + -- when e.g. climbing up stairs. + -- This is a bit hacky because it assumes that do_env_damage + -- is called roughly every second only. + self.suffocation_timer = self.suffocation_timer + 1 + if self.suffocation_timer >= 3 then + -- 2 damage per second + -- TODO: Deal this damage once every 1/2 second + self.health = self.health - 2 + + if check_for_death(self, "suffocation", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + else + self.suffocation_timer = 0 + end + + return check_for_death(self, "", {type = "unknown"}) +end + + +-- jump if facing a solid node (not fences or gates) +local do_jump = function(self) + + if not self.jump + or self.jump_height == 0 + or self.fly + or (self.child and self.type ~= "monster") + or self.order == "stand" then + return false + end + + self.facing_fence = false + + -- something stopping us while moving? + if self.state ~= "stand" + and get_velocity(self) > 0.5 + and self.object:get_velocity().y ~= 0 then + return false + end + + local pos = self.object:get_pos() + local yaw = self.object:get_yaw() + + -- what is mob standing on? + pos.y = pos.y + self.collisionbox[2] - 0.2 + + local nod = node_ok(pos) + + if minetest.registered_nodes[nod.name].walkable == false then + return false + end + + -- where is front + local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) + local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) + + -- what is in front of mob? + nod = node_ok({ + x = pos.x + dir_x, + y = pos.y + 0.5, + z = pos.z + dir_z + }) + + -- this is used to detect if there's a block on top of the block in front of the mob. + -- If there is, there is no point in jumping as we won't manage. + local nodTop = node_ok({ + x = pos.x + dir_x, + y = pos.y + 1.5, + z = pos.z + dir_z + }, "air") + + -- we don't attempt to jump if there's a stack of blocks blocking + if minetest.registered_nodes[nodTop.name].walkable == true then + return false + end + + -- thin blocks that do not need to be jumped + if nod.name == node_snow then + return false + end + + if self.walk_chance == 0 + or minetest.registered_items[nod.name].walkable then + + if minetest.get_item_group(nod.name, "fence") == 0 + and minetest.get_item_group(nod.name, "fence_gate") == 0 + and minetest.get_item_group(nod.name, "wall") == 0 then + + local v = self.object:get_velocity() + + v.y = self.jump_height + + set_animation(self, "jump") -- only when defined + + self.object:set_velocity(v) + + -- when in air move forward + minetest.after(0.3, function(self, v) + if (not self.object) or (not self.object:get_luaentity()) or (self.state == "die") then + return + end + self.object:set_acceleration({ + x = v.x * 2, + y = -10, + z = v.z * 2, + }) + end, self, v) + + if self.jump_sound_cooloff <= 0 then + mob_sound(self, "jump") + self.jump_sound_cooloff = 0.5 + end + else + self.facing_fence = true + end + + -- if we jumped against a block/wall 4 times then turn + if self.object:get_velocity().x ~= 0 + and self.object:get_velocity().z ~= 0 then + + self.jump_count = (self.jump_count or 0) + 1 + + if self.jump_count == 4 then + + local yaw = self.object:get_yaw() or 0 + + yaw = set_yaw(self, yaw + 1.35, 8) + + self.jump_count = 0 + end end return true @@ -190,101 +1349,668 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame) return false end --- no damage to nodes explosion -function mobs:safe_boom(self, pos, strength) - minetest_sound_play(self.sounds and self.sounds.explode or "tnt_explode", { - pos = pos, - gain = 1.0, - max_hear_distance = self.sounds and self.sounds.distance or 32 - }, true) - local radius = strength - entity_physics(pos, radius) - effect(pos, 32, "mcl_particles_smoke.png", radius * 3, radius * 5, radius, 1, 0) -end +-- blast damage to entities nearby +local entity_physics = function(pos, radius) --- make explosion with protection and tnt mod check -function mobs:boom(self, pos, strength, fire) - self.object:remove() - if mod_explosions then - if mobs_griefing and not minetest_is_protected(pos, "") then - mcl_explosions.explode(pos, strength, { drop_chance = 1.0, fire = fire }, self.object) - else - mobs:safe_boom(self, pos, strength) - end - else - mobs:safe_boom(self, pos, strength) + radius = radius * 2 + + local objs = minetest.get_objects_inside_radius(pos, radius) + local obj_pos, dist + + for n = 1, #objs do + + obj_pos = objs[n]:get_pos() + + dist = vector.distance(pos, obj_pos) + if dist < 1 then dist = 1 end + + local damage = floor((4 / dist) * radius) + local ent = objs[n]:get_luaentity() + + -- punches work on entities AND players + objs[n]:punch(objs[n], 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = damage}, + }, pos) end end --- falling and fall damage --- returns true if mob died -local falling = function(self, pos) - if self.fly and self.state ~= "die" then +-- should mob follow what I'm holding ? +local follow_holding = function(self, clicker) + + if mobs.invis[clicker:get_player_name()] then + return false + end + + local item = clicker:get_wielded_item() + local t = type(self.follow) + + -- single item + if t == "string" + and item:get_name() == self.follow then + return true + + -- multiple items + elseif t == "table" then + + for no = 1, #self.follow do + + if self.follow[no] == item:get_name() then + return true + end + end + end + + return false +end + + +-- find two animals of same type and breed if nearby and horny +local breed = function(self) + + -- child takes a long time before growing into adult + if self.child == true then + + -- When a child, hornytimer is used to count age until adulthood + self.hornytimer = self.hornytimer + 1 + + if self.hornytimer >= CHILD_GROW_TIME then + + self.child = false + self.hornytimer = 0 + + self.object:set_properties({ + textures = self.base_texture, + mesh = self.base_mesh, + visual_size = self.base_size, + collisionbox = self.base_colbox, + selectionbox = self.base_selbox, + }) + + -- custom function when child grows up + if self.on_grown then + self.on_grown(self) + else + -- jump when fully grown so as not to fall into ground + self.object:set_velocity({ + x = 0, + y = self.jump_height, + z = 0 + }) + end + end + return end - if mcl_portals ~= nil then - if mcl_portals.nether_portal_cooloff(self.object) then - return false -- mob has teleported through Nether portal - it's 99% not falling + -- horny animal can mate for HORNY_TIME seconds, + -- afterwards horny animal cannot mate again for HORNY_AGAIN_TIME seconds + if self.horny == true + and self.hornytimer < HORNY_TIME + HORNY_AGAIN_TIME then + + self.hornytimer = self.hornytimer + 1 + + if self.hornytimer >= HORNY_TIME + HORNY_AGAIN_TIME then + self.hornytimer = 0 + self.horny = false end end - -- floating in water (or falling) - local v = self.object:get_velocity() + -- find another same animal who is also horny and mate if nearby + if self.horny == true + and self.hornytimer <= HORNY_TIME then - if v.y > 0 then + local pos = self.object:get_pos() - -- apply gravity when moving up - self.object:set_acceleration({ - x = 0, - y = -10, - z = 0 - }) + effect({x = pos.x, y = pos.y + 1, z = pos.z}, 8, "heart.png", 3, 4, 1, 0.1) - elseif v.y <= 0 and v.y > self.fall_speed then + local objs = minetest.get_objects_inside_radius(pos, 3) + local num = 0 + local ent = nil - -- fall downwards at set speed - self.object:set_acceleration({ - x = 0, - y = self.fall_speed, - z = 0 - }) - else - -- stop accelerating once max fall speed hit - self.object:set_acceleration({x = 0, y = 0, z = 0}) - end + for n = 1, #objs do - if minetest_registered_nodes[node_ok(pos).name].groups.lava then + ent = objs[n]:get_luaentity() - if self.floats_on_lava == 1 then + -- check for same animal with different colour + local canmate = false - self.object:set_acceleration({ - x = 0, - y = -self.fall_speed / (max(1, v.y) ^ 2), - z = 0 - }) + if ent then + + if ent.name == self.name then + canmate = true + else + local entname = string.split(ent.name,":") + local selfname = string.split(self.name,":") + + if entname[1] == selfname[1] then + entname = string.split(entname[2],"_") + selfname = string.split(selfname[2],"_") + + if entname[1] == selfname[1] then + canmate = true + end + end + end + end + + if ent + and canmate == true + and ent.horny == true + and ent.hornytimer <= HORNY_TIME then + num = num + 1 + end + + -- found your mate? then have a baby + if num > 1 then + + self.hornytimer = HORNY_TIME + 1 + ent.hornytimer = HORNY_TIME + 1 + + -- spawn baby + minetest.after(5, function(parent1, parent2, pos) + if not parent1.object:get_luaentity() then + return + end + if not parent2.object:get_luaentity() then + return + end + + -- Give XP + if mod_experience then + mcl_experience.throw_experience(pos, math.random(1, 7)) + end + + -- custom breed function + if parent1.on_breed then + -- when false, skip going any further + if parent1.on_breed(parent1, parent2) == false then + return + end + end + + local child = mobs:spawn_child(pos, parent1.name) + + local ent_c = child:get_luaentity() + + + -- Use texture of one of the parents + local p = math.random(1, 2) + if p == 1 then + ent_c.base_texture = parent1.base_texture + else + ent_c.base_texture = parent2.base_texture + end + child:set_properties({ + textures = ent_c.base_texture + }) + + -- tamed and owned by parents' owner + ent_c.tamed = true + ent_c.owner = parent1.owner + end, self, ent, pos) + + num = 0 + + break + end end end - - -- in water then float up - if minetest_registered_nodes[node_ok(pos).name].groups.water then - - if self.floats == 1 then - - self.object:set_acceleration({ - x = 0, - y = -self.fall_speed / (math.max(1, v.y) ^ 2), - z = 0 - }) - end - else - - end end +-- find and replace what mob is looking for (grass, wheat etc.) +local replace = function(self, pos) + + if not self.replace_rate + or not self.replace_what + or self.child == true + or self.object:get_velocity().y ~= 0 + or random(1, self.replace_rate) > 1 then + return + end + + local what, with, y_offset + + if type(self.replace_what[1]) == "table" then + + local num = random(#self.replace_what) + + what = self.replace_what[num][1] or "" + with = self.replace_what[num][2] or "" + y_offset = self.replace_what[num][3] or 0 + else + what = self.replace_what + with = self.replace_with or "" + y_offset = self.replace_offset or 0 + end + + pos.y = pos.y + y_offset + + local node = minetest.get_node(pos) + if node.name == what then + + local oldnode = {name = what, param2 = node.param2} + local newnode = {name = with, param2 = node.param2} + local on_replace_return + + if self.on_replace then + on_replace_return = self.on_replace(self, pos, oldnode, newnode) + end + + if on_replace_return ~= false then + + if mobs_griefing then + minetest.set_node(pos, newnode) + end + + end + end +end + + +-- check if daytime and also if mob is docile during daylight hours +local day_docile = function(self) + + if self.docile_by_day == false then + + return false + + elseif self.docile_by_day == true + and self.time_of_day > 0.2 + and self.time_of_day < 0.8 then + + return true + end +end + + +local los_switcher = false +local height_switcher = false + +-- path finding and smart mob routine by rnd, line_of_sight and other edits by Elkien3 +local smart_mobs = function(self, s, p, dist, dtime) + + local s1 = self.path.lastpos + + local target_pos = self.attack:get_pos() + + -- is it becoming stuck? + if abs(s1.x - s.x) + abs(s1.z - s.z) < .5 then + self.path.stuck_timer = self.path.stuck_timer + dtime + else + self.path.stuck_timer = 0 + end + + self.path.lastpos = {x = s.x, y = s.y, z = s.z} + + local use_pathfind = false + local has_lineofsight = minetest.line_of_sight( + {x = s.x, y = (s.y) + .5, z = s.z}, + {x = target_pos.x, y = (target_pos.y) + 1.5, z = target_pos.z}, .2) + + -- im stuck, search for path + if not has_lineofsight then + + if los_switcher == true then + use_pathfind = true + los_switcher = false + end -- cannot see target! + else + if los_switcher == false then + + los_switcher = true + use_pathfind = false + + minetest.after(1, function(self) + if not self.object:get_luaentity() then + return + end + if has_lineofsight then self.path.following = false end + end, self) + end -- can see target! + end + + if (self.path.stuck_timer > stuck_timeout and not self.path.following) then + + use_pathfind = true + self.path.stuck_timer = 0 + + minetest.after(1, function(self) + if not self.object:get_luaentity() then + return + end + if has_lineofsight then self.path.following = false end + end, self) + end + + if (self.path.stuck_timer > stuck_path_timeout and self.path.following) then + + use_pathfind = true + self.path.stuck_timer = 0 + + minetest.after(1, function(self) + if not self.object:get_luaentity() then + return + end + if has_lineofsight then self.path.following = false end + end, self) + end + + if math.abs(vector.subtract(s,target_pos).y) > self.stepheight then + + if height_switcher then + use_pathfind = true + height_switcher = false + end + else + if not height_switcher then + use_pathfind = false + height_switcher = true + end + end + + if use_pathfind then + -- lets try find a path, first take care of positions + -- since pathfinder is very sensitive + local sheight = self.collisionbox[5] - self.collisionbox[2] + + -- round position to center of node to avoid stuck in walls + -- also adjust height for player models! + s.x = floor(s.x + 0.5) + s.z = floor(s.z + 0.5) + + local ssight, sground = minetest.line_of_sight(s, { + x = s.x, y = s.y - 4, z = s.z}, 1) + + -- determine node above ground + if not ssight then + s.y = sground.y + 1 + end + + local p1 = self.attack:get_pos() + + p1.x = floor(p1.x + 0.5) + p1.y = floor(p1.y + 0.5) + p1.z = floor(p1.z + 0.5) + + local dropheight = 12 + if self.fear_height ~= 0 then dropheight = self.fear_height end + local jumpheight = 0 + if self.jump and self.jump_height >= 4 then + jumpheight = math.min(math.ceil(self.jump_height / 4), 4) + elseif self.stepheight > 0.5 then + jumpheight = 1 + end + self.path.way = minetest.find_path(s, p1, 16, jumpheight, dropheight, "A*_noprefetch") + + self.state = "" + do_attack(self, self.attack) + + -- no path found, try something else + if not self.path.way then + + self.path.following = false + + -- lets make way by digging/building if not accessible + if self.pathfinding == 2 and mobs_griefing then + + -- is player higher than mob? + if s.y < p1.y then + + -- build upwards + if not minetest.is_protected(s, "") then + + local ndef1 = minetest.registered_nodes[self.standing_in] + + if ndef1 and (ndef1.buildable_to or ndef1.groups.liquid) then + + minetest.set_node(s, {name = mobs.fallback_node}) + end + end + + local sheight = math.ceil(self.collisionbox[5]) + 1 + + -- assume mob is 2 blocks high so it digs above its head + s.y = s.y + sheight + + -- remove one block above to make room to jump + if not minetest.is_protected(s, "") then + + local node1 = node_ok(s, "air").name + local ndef1 = minetest.registered_nodes[node1] + + if node1 ~= "air" + and node1 ~= "ignore" + and ndef1 + and not ndef1.groups.level + and not ndef1.groups.unbreakable + and not ndef1.groups.liquid then + + minetest.set_node(s, {name = "air"}) + minetest.add_item(s, ItemStack(node1)) + + end + end + + s.y = s.y - sheight + self.object:set_pos({x = s.x, y = s.y + 2, z = s.z}) + + else -- dig 2 blocks to make door toward player direction + + local yaw1 = self.object:get_yaw() + pi / 2 + local p1 = { + x = s.x + cos(yaw1), + y = s.y, + z = s.z + sin(yaw1) + } + + if not minetest.is_protected(p1, "") then + + local node1 = node_ok(p1, "air").name + local ndef1 = minetest.registered_nodes[node1] + + if node1 ~= "air" + and node1 ~= "ignore" + and ndef1 + and not ndef1.groups.level + and not ndef1.groups.unbreakable + and not ndef1.groups.liquid then + + minetest.add_item(p1, ItemStack(node1)) + minetest.set_node(p1, {name = "air"}) + end + + p1.y = p1.y + 1 + node1 = node_ok(p1, "air").name + ndef1 = minetest.registered_nodes[node1] + + if node1 ~= "air" + and node1 ~= "ignore" + and ndef1 + and not ndef1.groups.level + and not ndef1.groups.unbreakable + and not ndef1.groups.liquid then + + minetest.add_item(p1, ItemStack(node1)) + minetest.set_node(p1, {name = "air"}) + end + + end + end + end + + -- will try again in 2 seconds + self.path.stuck_timer = stuck_timeout - 2 + elseif s.y < p1.y and (not self.fly) then + do_jump(self) --add jump to pathfinding + self.path.following = true + -- Yay, I found path! + -- TODO: Implement war_cry sound without being annoying + --mob_sound(self, "war_cry", true) + else + set_velocity(self, self.walk_velocity) + + -- follow path now that it has it + self.path.following = true + end + end +end + + +-- specific attacks +local specific_attack = function(list, what) + + -- no list so attack default (player, animals etc.) + if list == nil then + return true + end + + -- found entity on list to attack? + for no = 1, #list do + + if list[no] == what then + return true + end + end + + return false +end + +-- monster find someone to attack +local monster_attack = function(self) + + if self.type ~= "monster" + or not damage_enabled + or minetest.is_creative_enabled("") + or self.passive + or self.state == "attack" + or day_docile(self) then + return + end + + local s = self.object:get_pos() + local p, sp, dist + local player, obj, min_player + local type, name = "", "" + local min_dist = self.view_range + 1 + local objs = minetest.get_objects_inside_radius(s, self.view_range) + + for n = 1, #objs do + + if objs[n]:is_player() then + + if mobs.invis[ objs[n]:get_player_name() ] or (not object_in_range(self, objs[n])) then + type = "" + else + player = objs[n] + type = "player" + name = "player" + end + else + obj = objs[n]:get_luaentity() + + if obj then + player = obj.object + type = obj.type + name = obj.name or "" + end + end + + -- find specific mob to attack, failing that attack player/npc/animal + if specific_attack(self.specific_attack, name) + and (type == "player" or type == "npc" + or (type == "animal" and self.attack_animals == true)) then + + p = player:get_pos() + sp = s + + dist = vector.distance(p, s) + + -- aim higher to make looking up hills more realistic + p.y = p.y + 1 + sp.y = sp.y + 1 + + + -- choose closest player to attack + if dist < min_dist + and line_of_sight(self, sp, p, 2) == true then + min_dist = dist + min_player = player + end + end + end + + -- attack player + if min_player then + do_attack(self, min_player) + end +end + + +-- npc, find closest monster to attack +local npc_attack = function(self) + + if self.type ~= "npc" + or not self.attacks_monsters + or self.state == "attack" then + return + end + + local p, sp, obj, min_player + local s = self.object:get_pos() + local min_dist = self.view_range + 1 + local objs = minetest.get_objects_inside_radius(s, self.view_range) + + for n = 1, #objs do + + obj = objs[n]:get_luaentity() + + if obj and obj.type == "monster" then + + p = obj.object:get_pos() + sp = s + + local dist = vector.distance(p, s) + + -- aim higher to make looking up hills more realistic + p.y = p.y + 1 + sp.y = sp.y + 1 + + if dist < min_dist + and line_of_sight(self, sp, p, 2) == true then + min_dist = dist + min_player = obj.object + end + end + end + + if min_player then + do_attack(self, min_player) + end +end + + +-- specific runaway +local specific_runaway = function(list, what) + + -- no list so do not run + if list == nil then + return false + end + + -- found entity on list to attack? + for no = 1, #list do + + if list[no] == what then + return true + end + end + + return false +end -- find someone to runaway from @@ -299,7 +2025,7 @@ local runaway_from = function(self) local player, obj, min_player local type, name = "", "" local min_dist = self.view_range + 1 - local objs = minetest_get_objects_inside_radius(s, self.view_range) + local objs = minetest.get_objects_inside_radius(s, self.view_range) for n = 1, #objs do @@ -356,10 +2082,10 @@ local runaway_from = function(self) z = lp.z - s.z } - local yaw = (atan(vec.z / vec.x) + 3 * math_pi / 2) - self.rotate + local yaw = (atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate if lp.x > s.x then - yaw = yaw + math_pi + yaw = yaw + pi end yaw = set_yaw(self, yaw, 4) @@ -370,26 +2096,6 @@ local runaway_from = function(self) end --- specific runaway -local specific_runaway = function(list, what) - - -- no list so do not run - if list == nil then - return false - end - - -- found entity on list to attack? - for no = 1, #list do - - if list[no] == what then - return true - end - end - - return false -end - - -- follow player if owner or holding item, if fish outta water then flop local follow_flop = function(self) @@ -468,9 +2174,9 @@ local follow_flop = function(self) z = p.z - s.z } - local yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate + local yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - if p.x > s.x then yaw = yaw + math_pi end + if p.x > s.x then yaw = yaw + pi end set_yaw(self, yaw, 2.35) @@ -501,7 +2207,7 @@ local follow_flop = function(self) self.state = "flop" self.object:set_acceleration({x = 0, y = DEFAULT_FALL_SPEED, z = 0}) - local sdef = minetest_registered_nodes[self.standing_on] + local sdef = minetest.registered_nodes[self.standing_on] -- Flop on ground if sdef and sdef.walkable then mob_sound(self, "flop") @@ -524,141 +2230,7 @@ local follow_flop = function(self) end --- npc, find closest monster to attack -local npc_attack = function(self) - - if self.type ~= "npc" - or not self.attacks_monsters - or self.state == "attack" then - return - end - - local p, sp, obj, min_player - local s = self.object:get_pos() - local min_dist = self.view_range + 1 - local objs = minetest_get_objects_inside_radius(s, self.view_range) - - for n = 1, #objs do - - obj = objs[n]:get_luaentity() - - if obj and obj.type == "monster" then - - p = obj.object:get_pos() - sp = s - - local dist = vector.distance(p, s) - - -- aim higher to make looking up hills more realistic - p.y = p.y + 1 - sp.y = sp.y + 1 - - if dist < min_dist - and line_of_sight(self, sp, p, 2) == true then - min_dist = dist - min_player = obj.object - end - end - end - - if min_player then - do_attack(self, min_player) - end -end - - --- monster find someone to attack -local monster_attack = function(self) - - if self.type ~= "monster" - or not damage_enabled - or minetest_is_creative_enabled("") - or self.passive - or self.state == "attack" - or day_docile(self) then - return - end - - local s = self.object:get_pos() - local p, sp, dist - local player, obj, min_player - local type, name = "", "" - local min_dist = self.view_range + 1 - local objs = minetest_get_objects_inside_radius(s, self.view_range) - - for n = 1, #objs do - - if objs[n]:is_player() then - - if mobs.invis[ objs[n]:get_player_name() ] or (not object_in_range(self, objs[n])) then - type = "" - else - player = objs[n] - type = "player" - name = "player" - end - else - obj = objs[n]:get_luaentity() - - if obj then - player = obj.object - type = obj.type - name = obj.name or "" - end - end - - -- find specific mob to attack, failing that attack player/npc/animal - if specific_attack(self.specific_attack, name) - and (type == "player" or type == "npc" - or (type == "animal" and self.attack_animals == true)) then - - p = player:get_pos() - sp = s - - dist = vector.distance(p, s) - - -- aim higher to make looking up hills more realistic - p.y = p.y + 1 - sp.y = sp.y + 1 - - - -- choose closest player to attack - if dist < min_dist - and line_of_sight(self, sp, p, 2) == true then - min_dist = dist - min_player = player - end - end - end - - -- attack player - if min_player then - do_attack(self, min_player) - end -end - - --- specific attacks -local specific_attack = function(list, what) - - -- no list so attack default (player, animals etc.) - if list == nil then - return true - end - - -- found entity on list to attack? - for no = 1, #list do - - if list[no] == what then - return true - end - end - - return false -end - - --- dogfight attack switch and counter function +-- dogshoot attack switch and counter function local dogswitch = function(self, dtime) -- switch mode not activated @@ -686,1491 +2258,19 @@ local dogswitch = function(self, dtime) return self.dogshoot_switch end --- path finding and smart mob routine by rnd, line_of_sight and other edits by Elkien3 -local smart_mobs = function(self, s, p, dist, dtime) +-- execute current state (stand, walk, run, attacks) +-- returns true if mob has died +local do_states = function(self, dtime) - local s1 = self.path.lastpos - - local target_pos = self.attack:get_pos() - - -- is it becoming stuck? - if math_abs(s1.x - s.x) + math_abs(s1.z - s.z) < .5 then - self.path.stuck_timer = self.path.stuck_timer + dtime - else - self.path.stuck_timer = 0 - end - - self.path.lastpos = {x = s.x, y = s.y, z = s.z} - - local use_pathfind = false - local has_lineofsight = minetest_line_of_sight( - {x = s.x, y = (s.y) + .5, z = s.z}, - {x = target_pos.x, y = (target_pos.y) + 1.5, z = target_pos.z}, .2) - - -- im stuck, search for path - if not has_lineofsight then - - if los_switcher == true then - use_pathfind = true - los_switcher = false - end -- cannot see target! - else - if los_switcher == false then - - los_switcher = true - use_pathfind = false - - minetest_after(1, function(self) - if not self.object:get_luaentity() then - return - end - if has_lineofsight then self.path.following = false end - end, self) - end -- can see target! - end - - if (self.path.stuck_timer > stuck_timeout and not self.path.following) then - - use_pathfind = true - self.path.stuck_timer = 0 - - minetest_after(1, function(self) - if not self.object:get_luaentity() then - return - end - if has_lineofsight then self.path.following = false end - end, self) - end - - if (self.path.stuck_timer > stuck_path_timeout and self.path.following) then - - use_pathfind = true - self.path.stuck_timer = 0 - - minetest_after(1, function(self) - if not self.object:get_luaentity() then - return - end - if has_lineofsight then self.path.following = false end - end, self) - end - - if math_abs(vector.subtract(s,target_pos).y) > self.stepheight then - - if height_switcher then - use_pathfind = true - height_switcher = false - end - else - if not height_switcher then - use_pathfind = false - height_switcher = true - end - end - - if use_pathfind then - -- lets try find a path, first take care of positions - -- since pathfinder is very sensitive - local sheight = self.collisionbox[5] - self.collisionbox[2] - - -- round position to center of node to avoid stuck in walls - -- also adjust height for player models! - s.x = math_floor(s.x + 0.5) - s.z = math_floor(s.z + 0.5) - - local ssight, sground = minetest_line_of_sight(s, { - x = s.x, y = s.y - 4, z = s.z}, 1) - - -- determine node above ground - if not ssight then - s.y = sground.y + 1 - end - - local p1 = self.attack:get_pos() - - p1.x = math_floor(p1.x + 0.5) - p1.y = math_floor(p1.y + 0.5) - p1.z = math_floor(p1.z + 0.5) - - local dropheight = 12 - if self.fear_height ~= 0 then dropheight = self.fear_height end - local jumpheight = 0 - if self.jump and self.jump_height >= 4 then - jumpheight = math.min(math.ceil(self.jump_height / 4), 4) - elseif self.stepheight > 0.5 then - jumpheight = 1 - end - self.path.way = minetest_find_path(s, p1, 16, jumpheight, dropheight, "A*_noprefetch") - - self.state = "" - do_attack(self, self.attack) - - -- no path found, try something else - if not self.path.way then - - self.path.following = false - - -- lets make way by digging/building if not accessible - if self.pathfinding == 2 and mobs_griefing then - - -- is player higher than mob? - if s.y < p1.y then - - -- build upwards - if not minetest_is_protected(s, "") then - - local ndef1 = minetest_registered_nodes[self.standing_in] - - if ndef1 and (ndef1.buildable_to or ndef1.groups.liquid) then - - minetest_set_node(s, {name = mobs.fallback_node}) - end - end - - local sheight = math.ceil(self.collisionbox[5]) + 1 - - -- assume mob is 2 blocks high so it digs above its head - s.y = s.y + sheight - - -- remove one block above to make room to jump - if not minetest_is_protected(s, "") then - - local node1 = node_ok(s, "air").name - local ndef1 = minetest_registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest_set_node(s, {name = "air"}) - minetest_add_item(s, ItemStack(node1)) - - end - end - - s.y = s.y - sheight - self.object:set_pos({x = s.x, y = s.y + 2, z = s.z}) - - else -- dig 2 blocks to make door toward player direction - - local yaw1 = self.object:get_yaw() + math_pi / 2 - local p1 = { - x = s.x + math_cos(yaw1), - y = s.y, - z = s.z + math_sin(yaw1) - } - - if not minetest_is_protected(p1, "") then - - local node1 = node_ok(p1, "air").name - local ndef1 = minetest_registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest_add_item(p1, ItemStack(node1)) - minetest_set_node(p1, {name = "air"}) - end - - p1.y = p1.y + 1 - node1 = node_ok(p1, "air").name - ndef1 = minetest_registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest_add_item(p1, ItemStack(node1)) - minetest_set_node(p1, {name = "air"}) - end - - end - end - end - - -- will try again in 2 seconds - self.path.stuck_timer = stuck_timeout - 2 - elseif s.y < p1.y and (not self.fly) then - do_jump(self) --add jump to pathfinding - self.path.following = true - -- Yay, I found path! - -- TODO: Implement war_cry sound without being annoying - --mob_sound(self, "war_cry", true) - else - set_velocity(self, self.walk_velocity) - - -- follow path now that it has it - self.path.following = true - end - end -end - - - - - - --- check if mob is dead or only hurt -local check_for_death = function(self, cause, cmi_cause) - - if self.state == "die" then - return true - end - - -- has health actually changed? - if self.health == self.old_health and self.health > 0 then - return false - end - - local damaged = self.health < self.old_health - self.old_health = self.health - - -- still got some health? - if self.health > 0 then - - -- make sure health isn't higher than max - if self.health > self.hp_max then - self.health = self.hp_max - end - - -- play damage sound if health was reduced and make mob flash red. - if damaged then - add_texture_mod(self, "^[colorize:red:130") - minetest_after(.2, function(self) - if self and self.object then - remove_texture_mod(self, "^[colorize:red:130") - end - end, self) - mob_sound(self, "damage") - end - - -- backup nametag so we can show health stats - if not self.nametag2 then - self.nametag2 = self.nametag or "" - end - - if show_health - and (cmi_cause and cmi_cause.type == "punch") then - - self.htimer = 2 - self.nametag = "♥ " .. self.health .. " / " .. self.hp_max - - update_tag(self) - end - - return false - end - - mob_sound(self, "death") - - local function death_handle(self) - -- dropped cooked item if mob died in fire or lava - if cause == "lava" or cause == "fire" then - item_drop(self, true, 0) - else - local wielditem = ItemStack() - if cause == "hit" then - local puncher = cmi_cause.puncher - if puncher then - wielditem = puncher:get_wielded_item() - end - end - local cooked = mcl_burning.is_burning(self.object) or mcl_enchanting.has_enchantment(wielditem, "fire_aspect") - local looting = mcl_enchanting.get_enchantment(wielditem, "looting") - item_drop(self, cooked, looting) - - if mod_experience and ((not self.child) or self.type ~= "animal") and (minetest_get_us_time() - self.xp_timestamp <= 5000000) then - mcl_experience.throw_experience(self.object:get_pos(), math.random(self.xp_min, self.xp_max)) - end - end - end - - -- execute custom death function - if self.on_die then - - local pos = self.object:get_pos() - local on_die_exit = self.on_die(self, pos, cmi_cause) - if on_die_exit ~= true then - death_handle(self) - end - - if use_cmi then - cmi.notify_die(self.object, cmi_cause) - end - - if on_die_exit == true then - self.state = "die" - mcl_burning.extinguish(self.object) - self.object:remove() - return true - end - end - - local collisionbox - if self.collisionbox then - collisionbox = table.copy(self.collisionbox) - end - - self.state = "die" - self.attack = nil - self.v_start = false - self.fall_speed = DEFAULT_FALL_SPEED - self.timer = 0 - self.blinktimer = 0 - remove_texture_mod(self, "^[colorize:#FF000040") - remove_texture_mod(self, "^[brighten") - self.passive = true - - self.object:set_properties({ - pointable = false, - collide_with_objects = false, - }) - - set_velocity(self, 0) - local acc = self.object:get_acceleration() - acc.x, acc.y, acc.z = 0, DEFAULT_FALL_SPEED, 0 - self.object:set_acceleration(acc) - - local length - -- default death function and die animation (if defined) - if self.instant_death then - length = 0 - elseif self.animation - and self.animation.die_start - and self.animation.die_end then - - local frames = self.animation.die_end - self.animation.die_start - local speed = self.animation.die_speed or 15 - length = max(frames / speed, 0) + DEATH_DELAY - set_animation(self, "die") - else - local rot = self.object:get_rotation() - rot.z = math_pi/2 - self.object:set_rotation(rot) - length = 1 + DEATH_DELAY - set_animation(self, "stand", true) - end - - - -- Remove body after a few seconds and drop stuff - local kill = function(self) - if not self.object:get_luaentity() then - return - end - if use_cmi then - cmi.notify_die(self.object, cmi_cause) - end - - death_handle(self) - local dpos = self.object:get_pos() - local cbox = self.collisionbox - local yaw = self.object:get_rotation().y - mcl_burning.extinguish(self.object) - self.object:remove() - mobs.death_effect(dpos, yaw, cbox, not self.instant_death) - end - if length <= 0 then - kill(self) - else - minetest_after(length, kill, self) - end - - return true -end - -local damage_effect = function(self, damage) - -- damage particles - if (not disable_blood) and damage > 0 then - - local amount_large = math_floor(damage / 2) - local amount_small = damage % 2 - - local pos = self.object:get_pos() - - pos.y = pos.y + (self.collisionbox[5] - self.collisionbox[2]) * .5 - - local texture = "mobs_blood.png" - -- full heart damage (one particle for each 2 HP damage) - if amount_large > 0 then - effect(pos, amount_large, texture, 2, 2, 1.75, 0, nil, true) - end - -- half heart damage (one additional particle if damage is an odd number) - if amount_small > 0 then - -- TODO: Use "half heart" - effect(pos, amount_small, texture, 1, 1, 1.75, 0, nil, true) - end - end -end - - --- custom particle effects -local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow, go_down) - - radius = radius or 2 - min_size = min_size or 0.5 - max_size = max_size or 1 - gravity = gravity or -10 - glow = glow or 0 - go_down = go_down or false - - local ym - if go_down then - ym = 0 - else - ym = -radius - end - - minetest_add_particlespawner({ - amount = amount, - time = 0.25, - minpos = pos, - maxpos = pos, - minvel = {x = -radius, y = ym, z = -radius}, - maxvel = {x = radius, y = radius, z = radius}, - minacc = {x = 0, y = gravity, z = 0}, - maxacc = {x = 0, y = gravity, z = 0}, - minexptime = 0.1, - maxexptime = 1, - minsize = min_size, - maxsize = max_size, - texture = texture, - glow = glow, - }) -end - - --- are we flying in what we are suppose to? (taikedz) -local flight_check = function(self) - - local nod = self.standing_in - local def = minetest_registered_nodes[nod] - - if not def then return false end -- nil check - - local fly_in - if type(self.fly_in) == "string" then - fly_in = { self.fly_in } - elseif type(self.fly_in) == "table" then - fly_in = self.fly_in - else - return false - end - - for _,checknode in pairs(fly_in) do - if nod == checknode then - return true - elseif checknode == "__airlike" and def.walkable == false and - (def.liquidtype == "none" or minetest_get_item_group(nod, "fake_liquid") == 1) then - return true - end - end - - return false -end - - --- check line of sight (BrunoMine) -local line_of_sight = function(self, pos1, pos2, stepsize) - - stepsize = stepsize or 1 - - local s, pos = minetest_line_of_sight(pos1, pos2, stepsize) - - -- normal walking and flying mobs can see you through air - if s == true then - return true - end - - -- New pos1 to be analyzed - local npos1 = {x = pos1.x, y = pos1.y, z = pos1.z} - - local r, pos = minetest_line_of_sight(npos1, pos2, stepsize) - - -- Checks the return - if r == true then return true end - - -- Nodename found - local nn = minetest_get_node(pos).name - - -- Target Distance (td) to travel - local td = vector.distance(pos1, pos2) - - -- Actual Distance (ad) traveled - local ad = 0 - - -- It continues to advance in the line of sight in search of a real - -- obstruction which counts as 'normal' nodebox. - while minetest_registered_nodes[nn] - and minetest_registered_nodes[nn].walkable == false do - - -- Check if you can still move forward - if td < ad + stepsize then - return true -- Reached the target - end - - -- Moves the analyzed pos - local d = vector.distance(pos1, pos2) - - npos1.x = ((pos2.x - pos1.x) / d * stepsize) + pos1.x - npos1.y = ((pos2.y - pos1.y) / d * stepsize) + pos1.y - npos1.z = ((pos2.z - pos1.z) / d * stepsize) + pos1.z - - -- NaN checks - if d == 0 - or npos1.x ~= npos1.x - or npos1.y ~= npos1.y - or npos1.z ~= npos1.z then - return false - end - - ad = ad + stepsize - - -- scan again - r, pos = minetest_line_of_sight(npos1, pos2, stepsize) - - if r == true then return true end - - -- New Nodename found - nn = minetest_get_node(pos).name - - end - - return false -end - --- Returns true if node is a water hazard -local is_node_waterhazard = function(self, nodename) - local nn = nodename - if self.water_damage > 0 then - if minetest_get_item_group(nn, "water") ~= 0 then - return true - end - end - if minetest_registered_nodes[nn] and minetest_registered_nodes[nn].drowning and minetest_registered_nodes[nn].drowning > 0 then - if self.breath_max ~= -1 then - -- check if the mob is water-breathing _and_ the block is water; only return true if neither is the case - -- this will prevent water-breathing mobs to classify water or e.g. sand below them as dangerous - if not self.breathes_in_water and minetest_get_item_group(nn, "water") ~= 0 then - return true - end - end - end - return false -end - - --- Returns true is node can deal damage to self -local is_node_dangerous = function(self, nodename) - local nn = nodename - if self.lava_damage > 0 then - if minetest_get_item_group(nn, "lava") ~= 0 then - return true - end - end - if self.fire_damage > 0 then - if minetest_get_item_group(nn, "fire") ~= 0 then - return true - end - end - if minetest_registered_nodes[nn] and minetest_registered_nodes[nn].damage_per_second and minetest_registered_nodes[nn].damage_per_second > 0 then - return true - end - return false -end - - -local add_texture_mod = function(self, mod) - local full_mod = "" - local already_added = false - for i=1, #self.texture_mods do - if mod == self.texture_mods[i] then - already_added = true - end - full_mod = full_mod .. self.texture_mods[i] - end - if not already_added then - full_mod = full_mod .. mod - table.insert(self.texture_mods, mod) - end - self.object:set_texture_mod(full_mod) -end - - -local remove_texture_mod = function(self, mod) - local full_mod = "" - local remove = {} - for i=1, #self.texture_mods do - if self.texture_mods[i] ~= mod then - full_mod = full_mod .. self.texture_mods[i] - else - table.insert(remove, i) - end - end - for i=#remove, 1 do - table.remove(self.texture_mods, remove[i]) - end - self.object:set_texture_mod(full_mod) -end - - --- Return true if object is in view_range -local function object_in_range(self, object) - if not object then - return false - end - local factor - -- Apply view range reduction for special player armor - if not object then - return false - end - local factor - -- Apply view range reduction for special player armor - if object:is_player() and mod_armor then - local factors = mcl_armor.player_view_range_factors[object] - factor = factors and factors[self.name] - end - -- Distance check - local dist - if factor and factor == 0 then - return false - elseif factor then - dist = self.view_range * factor - else - dist = self.view_range - end - - local p1, p2 = self.object:get_pos(), object:get_pos() - return p1 and p2 and (vector.distance(p1, p2) <= dist) -end - --- attack player/mob -local do_attack = function(self, player) - - if self.state == "attack" or self.state == "die" then - return - end - - self.attack = player - self.state = "attack" - - -- TODO: Implement war_cry sound without being annoying - --if math.random(0, 100) < 90 then - --mob_sound(self, "war_cry", true) - --end -end - - --- play sound -local mob_sound = function(self, soundname, is_opinion, fixed_pitch) - local soundinfo - if self.sounds_child and self.child then - soundinfo = self.sounds_child - elseif self.sounds then - soundinfo = self.sounds - end - if not soundinfo then - return - end - local sound = soundinfo[soundname] - if sound then - if is_opinion and self.opinion_sound_cooloff > 0 then - return - end - local pitch - if not fixed_pitch then - local base_pitch = soundinfo.base_pitch - if not base_pitch then - base_pitch = 1 - end - if self.child and (not self.sounds_child) then - -- Children have higher pitch - pitch = base_pitch * 1.5 - else - pitch = base_pitch - end - -- randomize the pitch a bit - pitch = pitch + math.random(-10, 10) * 0.005 - end - minetest_sound_play(sound, { - object = self.object, - gain = 1.0, - max_hear_distance = self.sounds.distance, - pitch = pitch, - }, true) - self.opinion_sound_cooloff = 1 - end -end - - -local function update_roll(self) - local is_Fleckenstein = self.nametag == "Fleckenstein" - local was_Fleckenstein = false - - local rot = self.object:get_rotation() - rot.z = is_Fleckenstein and math_pi or 0 - self.object:set_rotation(rot) - - local cbox = table.copy(self.collisionbox) - local acbox = self.object:get_properties().collisionbox - - if math_abs(cbox[2] - acbox[2]) > 0.1 then - was_Fleckenstein = true - end - - if is_Fleckenstein ~= was_Fleckenstein then - local pos = self.object:get_pos() - pos.y = pos.y + (acbox[2] + acbox[5]) - self.object:set_pos(pos) - end - - if is_Fleckenstein then - cbox[2], cbox[5] = -cbox[5], -cbox[2] - end - - self.object:set_properties({collisionbox = cbox}) -end - - - --- is mob facing a cliff or danger -local is_at_cliff_or_danger = function(self) - - if self.fear_height == 0 then -- 0 for no falling protection! - return false - end - - if not self.object:get_luaentity() then - return false - end - local yaw = self.object:get_yaw() - local dir_x = -math_sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = math_cos(yaw) * (self.collisionbox[4] + 0.5) - local pos = self.object:get_pos() - local ypos = pos.y + self.collisionbox[2] -- just above floor - - local free_fall, blocker = minetest_line_of_sight( - {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, - {x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z}) - if free_fall then - return true - else - local bnode = minetest_get_node(blocker) - local danger = is_node_dangerous(self, bnode.name) - if danger then - return true - else - local def = minetest_registered_nodes[bnode.name] - if def and def.walkable then - return false - end - end - end - - return false -end - - --- copy the 'mob facing cliff_or_danger check' from above, and rework to avoid water -local is_at_water_danger = function(self) - - - if not self.object:get_luaentity() then - return false - end - local yaw = self.object:get_yaw() - local dir_x = -math_sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = math_cos(yaw) * (self.collisionbox[4] + 0.5) - local pos = self.object:get_pos() - local ypos = pos.y + self.collisionbox[2] -- just above floor - - local free_fall, blocker = minetest_line_of_sight( - {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, - {x = pos.x + dir_x, y = ypos - 3, z = pos.z + dir_z}) - if free_fall then - return true - else - local bnode = minetest_get_node(blocker) - local waterdanger = is_node_waterhazard(self, bnode.name) - if - waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) then - return false - elseif waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) == false then - return true - else - local def = minetest_registered_nodes[bnode.name] - if def and def.walkable then - return false - end - end - end - - return false -end - -local function get_light(pos, tod) - local ok, light = pcall(minetest.get_natural_light or minetest.get_node_light, pos, tod) - if ok then - return light - else - return 0 - end -end - --- environmental damage (water, lava, fire, light etc.) -local do_env_damage = function(self) - - -- feed/tame text timer (so mob 'full' messages dont spam chat) - if self.htimer > 0 then - self.htimer = self.htimer - 1 - end - - -- reset nametag after showing health stats - if self.htimer < 1 and self.nametag2 then - - self.nametag = self.nametag2 - self.nametag2 = nil - - update_tag(self) - end - - local pos = self.object:get_pos() - - self.time_of_day = minetest.get_timeofday() - - -- remove mob if beyond map limits - if not within_limits(pos, 0) then - mcl_burning.extinguish(self.object) - self.object:remove() - return true - end - - - -- Deal light damage to mob, returns true if mob died - local deal_light_damage = function(self, pos, damage) - if not (mod_weather and (mcl_weather.rain.raining or mcl_weather.state == "snow") and mcl_weather.is_outdoor(pos)) then - self.health = self.health - damage - - effect(pos, 5, "mcl_particles_smoke.png") - - if check_for_death(self, "light", {type = "light"}) then - return true - end - end - end - - -- Use get_node_light for Minetest version 5.3 where get_natural_light - -- does not exist yet. - local sunlight = get_light(pos, self.time_of_day) - - -- bright light harms mob - if self.light_damage ~= 0 and (sunlight or 0) > 12 then - if deal_light_damage(self, pos, self.light_damage) then - return true - end - end - local _, dim = nil, "overworld" - if mod_worlds then - _, dim = mcl_worlds.y_to_layer(pos.y) - end - if (self.sunlight_damage ~= 0 or self.ignited_by_sunlight) and (sunlight or 0) >= minetest.LIGHT_MAX and dim == "overworld" then - if self.ignited_by_sunlight then - mcl_burning.set_on_fire(self.object, 10) - else - deal_light_damage(self, pos, self.sunlight_damage) - return true - end - end - - local y_level = self.collisionbox[2] - - if self.child then - y_level = self.collisionbox[2] * 0.5 - end - - -- what is mob standing in? - pos.y = pos.y + y_level + 0.25 -- foot level - local pos2 = {x=pos.x, y=pos.y-1, z=pos.z} - self.standing_in = node_ok(pos, "air").name - self.standing_on = node_ok(pos2, "air").name - - -- don't fall when on ignore, just stand still - if self.standing_in == "ignore" then - self.object:set_velocity({x = 0, y = 0, z = 0}) - end - - local nodef = minetest_registered_nodes[self.standing_in] - - -- rain - if self.rain_damage > 0 and mod_weather then - if mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then - - self.health = self.health - self.rain_damage - - if check_for_death(self, "rain", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - end - - pos.y = pos.y + 1 -- for particle effect position - - -- water damage - if self.water_damage > 0 - and nodef.groups.water then - - if self.water_damage ~= 0 then - - self.health = self.health - self.water_damage - - effect(pos, 5, "mcl_particles_smoke.png", nil, nil, 1, nil) - - if check_for_death(self, "water", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- lava damage - elseif self.lava_damage > 0 - and (nodef.groups.lava) then - - if self.lava_damage ~= 0 then - - self.health = self.health - self.lava_damage - - mcl_burning.set_on_fire(self.object, 15) - - effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) - - if check_for_death(self, "lava", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- fire damage - elseif self.fire_damage > 0 - and (nodef.groups.fire) then - - if self.fire_damage ~= 0 then - - self.health = self.health - self.fire_damage - - mcl_burning.set_on_fire(self.object, 8) - - effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) - - if check_for_death(self, "fire", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- damage_per_second node check - elseif nodef.damage_per_second ~= 0 and not nodef.groups.lava and not nodef.groups.fire then - - self.health = self.health - nodef.damage_per_second - - effect(pos, 5, "mcl_particles_smoke.png") - - if check_for_death(self, "dps", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- Drowning damage - if self.breath_max ~= -1 then - local drowning = false - if self.breathes_in_water then - if minetest_get_item_group(self.standing_in, "water") == 0 then - drowning = true - end - elseif nodef.drowning > 0 then - drowning = true - end - if drowning then - - self.breath = math.max(0, self.breath - 1) - - effect(pos, 2, "bubble.png", nil, nil, 1, nil) - if self.breath <= 0 then - local dmg - if nodef.drowning > 0 then - dmg = nodef.drowning - else - dmg = 4 - end - damage_effect(self, dmg) - self.health = self.health - dmg - end - if check_for_death(self, "drowning", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - else - self.breath = math_min(self.breath_max, self.breath + 1) - end - end - - --- suffocation inside solid node - -- FIXME: Redundant with mcl_playerplus - if (self.suffocation == true) - and (nodef.walkable == nil or nodef.walkable == true) - and (nodef.collision_box == nil or nodef.collision_box.type == "regular") - and (nodef.node_box == nil or nodef.node_box.type == "regular") - and (nodef.groups.disable_suffocation ~= 1) - and (nodef.groups.opaque == 1) then - - -- Short grace period before starting to take suffocation damage. - -- This is different from players, who take damage instantly. - -- This has been done because mobs might briefly be inside solid nodes - -- when e.g. climbing up stairs. - -- This is a bit hacky because it assumes that do_env_damage - -- is called roughly every second only. - self.suffocation_timer = self.suffocation_timer + 1 - if self.suffocation_timer >= 3 then - -- 2 damage per second - -- TODO: Deal this damage once every 1/2 second - self.health = self.health - 2 - - if check_for_death(self, "suffocation", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - else - self.suffocation_timer = 0 - end - - return check_for_death(self, "", {type = "unknown"}) -end - - --- jump if facing a solid node (not fences or gates) -local do_jump = function(self) - - if not self.jump - or self.jump_height == 0 - or self.fly - or (self.child and self.type ~= "monster") - or self.order == "stand" then - return false - end - - self.facing_fence = false - - -- something stopping us while moving? - if self.state ~= "stand" - and get_velocity(self) > 0.5 - and self.object:get_velocity().y ~= 0 then - return false - end - - local pos = self.object:get_pos() - local yaw = self.object:get_yaw() - - -- what is mob standing on? - pos.y = pos.y + self.collisionbox[2] - 0.2 - - local nod = node_ok(pos) - - if minetest_registered_nodes[nod.name].walkable == false then - return false - end - - -- where is front - local dir_x = -math_sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = math_cos(yaw) * (self.collisionbox[4] + 0.5) - - -- what is in front of mob? - nod = node_ok({ - x = pos.x + dir_x, - y = pos.y + 0.5, - z = pos.z + dir_z - }) - - -- this is used to detect if there's a block on top of the block in front of the mob. - -- If there is, there is no point in jumping as we won't manage. - local nodTop = node_ok({ - x = pos.x + dir_x, - y = pos.y + 1.5, - z = pos.z + dir_z - }, "air") - - -- we don't attempt to jump if there's a stack of blocks blocking - if minetest_registered_nodes[nodTop.name].walkable == true then - return false - end - - -- thin blocks that do not need to be jumped - if nod.name == node_snow then - return false - end - - if self.walk_chance == 0 - or minetest_registered_items[nod.name].walkable then - - if minetest_get_item_group(nod.name, "fence") == 0 - and minetest_get_item_group(nod.name, "fence_gate") == 0 - and minetest_get_item_group(nod.name, "wall") == 0 then - - local v = self.object:get_velocity() - - v.y = self.jump_height - - set_animation(self, "jump") -- only when defined - - self.object:set_velocity(v) - - -- when in air move forward - minetest_after(0.3, function(self, v) - if (not self.object) or (not self.object:get_luaentity()) or (self.state == "die") then - return - end - self.object:set_acceleration({ - x = v.x * 2, - y = -10, - z = v.z * 2, - }) - end, self, v) - - if self.jump_sound_cooloff <= 0 then - mob_sound(self, "jump") - self.jump_sound_cooloff = 0.5 - end - else - self.facing_fence = true - end - - -- if we jumped against a block/wall 4 times then turn - if self.object:get_velocity().x ~= 0 - and self.object:get_velocity().z ~= 0 then - - self.jump_count = (self.jump_count or 0) + 1 - - if self.jump_count == 4 then - - local yaw = self.object:get_yaw() or 0 - - yaw = set_yaw(self, yaw + 1.35, 8) - - self.jump_count = 0 - end - end - - return true - end - - return false -end - - --- blast damage to entities nearby -local entity_physics = function(pos, radius) - - radius = radius * 2 - - local objs = minetest_get_objects_inside_radius(pos, radius) - local obj_pos, dist - - for n = 1, #objs do - - obj_pos = objs[n]:get_pos() - - dist = vector.distance(pos, obj_pos) - if dist < 1 then dist = 1 end - - local damage = math_floor((4 / dist) * radius) - local ent = objs[n]:get_luaentity() - - -- punches work on entities AND players - objs[n]:punch(objs[n], 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, pos) - end -end - - --- should mob follow what I'm holding ? -local follow_holding = function(self, clicker) - - if mobs.invis[clicker:get_player_name()] then - return false - end - - local item = clicker:get_wielded_item() - local t = type(self.follow) - - -- single item - if t == "string" - and item:get_name() == self.follow then - return true - - -- multiple items - elseif t == "table" then - - for no = 1, #self.follow do - - if self.follow[no] == item:get_name() then - return true - end - end - end - - return false -end - - --- find two animals of same type and breed if nearby and horny -local breed = function(self) - - -- child takes a long time before growing into adult - if self.child == true then - - -- When a child, hornytimer is used to count age until adulthood - self.hornytimer = self.hornytimer + 1 - - if self.hornytimer >= CHILD_GROW_TIME then - - self.child = false - self.hornytimer = 0 - - self.object:set_properties({ - textures = self.base_texture, - mesh = self.base_mesh, - visual_size = self.base_size, - collisionbox = self.base_colbox, - selectionbox = self.base_selbox, - }) - - -- custom function when child grows up - if self.on_grown then - self.on_grown(self) - else - -- jump when fully grown so as not to fall into ground - self.object:set_velocity({ - x = 0, - y = self.jump_height, - z = 0 - }) - end - end - - return - end - - -- horny animal can mate for BREED_TIME seconds, - -- afterwards horny animal cannot mate again for BREED_TIME_AGAIN seconds - if self.horny == true - and self.hornytimer < BREED_TIME + BREED_TIME_AGAIN then - - self.hornytimer = self.hornytimer + 1 - - if self.hornytimer >= BREED_TIME + BREED_TIME_AGAIN then - self.hornytimer = 0 - self.horny = false - end - end - - -- find another same animal who is also horny and mate if nearby - if self.horny == true - and self.hornytimer <= BREED_TIME then - - local pos = self.object:get_pos() - - effect({x = pos.x, y = pos.y + 1, z = pos.z}, 8, "heart.png", 3, 4, 1, 0.1) - - local objs = minetest_get_objects_inside_radius(pos, 3) - local num = 0 - local ent = nil - - for n = 1, #objs do - - ent = objs[n]:get_luaentity() - - -- check for same animal with different colour - local canmate = false - - if ent then - - if ent.name == self.name then - canmate = true - else - local entname = string.split(ent.name,":") - local selfname = string.split(self.name,":") - - if entname[1] == selfname[1] then - entname = string.split(entname[2],"_") - selfname = string.split(selfname[2],"_") - - if entname[1] == selfname[1] then - canmate = true - end - end - end - end - - if ent - and canmate == true - and ent.horny == true - and ent.hornytimer <= BREED_TIME then - num = num + 1 - end - - -- found your mate? then have a baby - if num > 1 then - - self.hornytimer = BREED_TIME + 1 - ent.hornytimer = BREED_TIME + 1 - - -- spawn baby - minetest_after(5, function(parent1, parent2, pos) - if not parent1.object:get_luaentity() then - return - end - if not parent2.object:get_luaentity() then - return - end - - -- Give XP - if mod_experience then - mcl_experience.throw_experience(pos, math.random(1, 7)) - end - - -- custom breed function - if parent1.on_breed then - -- when false, skip going any further - if parent1.on_breed(parent1, parent2) == false then - return - end - end - - local child = mobs:spawn_child(pos, parent1.name) - - local ent_c = child:get_luaentity() - - - -- Use texture of one of the parents - local p = math.random(1, 2) - if p == 1 then - ent_c.base_texture = parent1.base_texture - else - ent_c.base_texture = parent2.base_texture - end - child:set_properties({ - textures = ent_c.base_texture - }) - - -- tamed and owned by parents' owner - ent_c.tamed = true - ent_c.owner = parent1.owner - end, self, ent, pos) - - num = 0 - - break - end - end - end -end - --- find and replace what mob is looking for (grass, wheat etc.) -local replace = function(self, pos) - - if not self.replace_rate - or not self.replace_what - or self.child == true - or self.object:get_velocity().y ~= 0 - or math.random(1, self.replace_rate) > 1 then - return - end - - local what, with, y_offset - - if type(self.replace_what[1]) == "table" then - - local num = math.random(#self.replace_what) - - what = self.replace_what[num][1] or "" - with = self.replace_what[num][2] or "" - y_offset = self.replace_what[num][3] or 0 - else - what = self.replace_what - with = self.replace_with or "" - y_offset = self.replace_offset or 0 - end - - pos.y = pos.y + y_offset - - local node = minetest_get_node(pos) - if node.name == what then - - local oldnode = {name = what, param2 = node.param2} - local newnode = {name = with, param2 = node.param2} - local on_replace_return - - if self.on_replace then - on_replace_return = self.on_replace(self, pos, oldnode, newnode) - end - - if on_replace_return ~= false then - - if mobs_griefing then - minetest_set_node(pos, newnode) - end - - end - end -end - - --- check if daytime and also if mob is docile during daylight hours -local day_docile = function(self) - - if self.docile_by_day == false then - - return false - - elseif self.docile_by_day == true - and self.time_of_day > 0.2 - and self.time_of_day < 0.8 then - - return true - end -end - - - -local mob_detach_child = function(self, child) - - if self.driver == child then - self.driver = nil - end - -end - -function do_states(self) + local yaw = self.object:get_yaw() or 0 if self.state == "stand" then - if math.random(1, 4) == 1 then + if random(1, 4) == 1 then local lp = nil local s = self.object:get_pos() - local objs = minetest_get_objects_inside_radius(s, 3) + local objs = minetest.get_objects_inside_radius(s, 3) for n = 1, #objs do @@ -2188,11 +2288,11 @@ function do_states(self) z = lp.z - s.z } - yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate + yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - if lp.x > s.x then yaw = yaw + math_pi end + if lp.x > s.x then yaw = yaw + pi end else - yaw = yaw + math.random(-0.5, 0.5) + yaw = yaw + random(-0.5, 0.5) end yaw = set_yaw(self, yaw, 8) @@ -2207,7 +2307,7 @@ function do_states(self) if self.walk_chance ~= 0 and self.facing_fence ~= true - and math.random(1, 100) <= self.walk_chance + and random(1, 100) <= self.walk_chance and is_at_cliff_or_danger(self) == false then set_velocity(self, self.walk_velocity) @@ -2226,19 +2326,19 @@ function do_states(self) and self.lava_damage > 0) or self.breath_max ~= -1 then - lp = minetest_find_node_near(s, 1, {"group:water", "group:lava"}) + lp = minetest.find_node_near(s, 1, {"group:water", "group:lava"}) elseif self.water_damage > 0 then - lp = minetest_find_node_near(s, 1, {"group:water"}) + lp = minetest.find_node_near(s, 1, {"group:water"}) elseif self.lava_damage > 0 then - lp = minetest_find_node_near(s, 1, {"group:lava"}) + lp = minetest.find_node_near(s, 1, {"group:lava"}) elseif self.fire_damage > 0 then - lp = minetest_find_node_near(s, 1, {"group:fire"}) + lp = minetest.find_node_near(s, 1, {"group:fire"}) end @@ -2252,12 +2352,12 @@ function do_states(self) -- If mob in or on dangerous block, look for land if is_in_danger then -- Better way to find shore - copied from upstream - lp = minetest_find_nodes_in_area_under_air( + lp = minetest.find_nodes_in_area_under_air( {x = s.x - 5, y = s.y - 0.5, z = s.z - 5}, {x = s.x + 5, y = s.y + 1, z = s.z + 5}, {"group:solid"}) - lp = #lp > 0 and lp[math.random(#lp)] + lp = #lp > 0 and lp[random(#lp)] -- did we find land? if lp then @@ -2267,10 +2367,10 @@ function do_states(self) z = lp.z - s.z } - yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate + yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - if lp.x > s.x then yaw = yaw + math_pi end + if lp.x > s.x then yaw = yaw + pi end -- look towards land and move in that direction yaw = set_yaw(self, yaw, 6) @@ -2283,8 +2383,8 @@ function do_states(self) else -- Randomly turn - if math.random(1, 100) <= 30 then - yaw = yaw + math.random(-0.5, 0.5) + if random(1, 100) <= 30 then + yaw = yaw + random(-0.5, 0.5) yaw = set_yaw(self, yaw, 8) end end @@ -2292,9 +2392,9 @@ function do_states(self) yaw = set_yaw(self, yaw, 8) -- otherwise randomly turn - elseif math.random(1, 100) <= 30 then + elseif random(1, 100) <= 30 then - yaw = yaw + math.random(-0.5, 0.5) + yaw = yaw + random(-0.5, 0.5) yaw = set_yaw(self, yaw, 8) end @@ -2305,7 +2405,7 @@ function do_states(self) end if self.facing_fence == true or cliff_or_danger - or math.random(1, 100) <= 30 then + or random(1, 100) <= 30 then set_velocity(self, 0) self.state = "stand" @@ -2380,9 +2480,9 @@ function do_states(self) z = p.z - s.z } - yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate + yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - if p.x > s.x then yaw = yaw + math_pi end + if p.x > s.x then yaw = yaw + pi end yaw = set_yaw(self, yaw, 0, dtime) @@ -2448,10 +2548,10 @@ function do_states(self) local pos = self.object:get_pos() if mod_explosions then - if mobs_griefing and not minetest_is_protected(pos, "") then + if mobs_griefing and not minetest.is_protected(pos, "") then mcl_explosions.explode(mcl_util.get_object_center(self.object), self.explosion_strength, { drop_chance = 1.0 }, self.object) else - minetest_sound_play(self.sounds.explode, { + minetest.sound_play(self.sounds.explode, { pos = pos, gain = 1.0, max_hear_distance = self.sounds.distance or 32 @@ -2476,9 +2576,9 @@ function do_states(self) and dist > self.reach then local p1 = s - local me_y = math_floor(p1.y) + local me_y = floor(p1.y) local p2 = p - local p_y = math_floor(p2.y + 1) + local p_y = floor(p2.y + 1) local v = self.object:get_velocity() if flight_check(self, s) then @@ -2539,7 +2639,7 @@ function do_states(self) return end - if math_abs(p1.x-s.x) + math_abs(p1.z - s.z) < 0.6 then + if abs(p1.x-s.x) + abs(p1.z - s.z) < 0.6 then -- reached waypoint, remove it from queue table.remove(self.path.way, 1) end @@ -2553,9 +2653,9 @@ function do_states(self) z = p.z - s.z } - yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate + yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - if p.x > s.x then yaw = yaw + math_pi end + if p.x > s.x then yaw = yaw + pi end yaw = set_yaw(self, yaw, 0, dtime) @@ -2605,7 +2705,7 @@ function do_states(self) self.timer = 0 if self.double_melee_attack - and math.random(1, 2) == 1 then + and random(1, 2) == 1 then set_animation(self, "punch2") else set_animation(self, "punch") @@ -2658,9 +2758,9 @@ function do_states(self) z = p.z - s.z } - yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate + yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - if p.x > s.x then yaw = yaw + math_pi end + if p.x > s.x then yaw = yaw + pi end yaw = set_yaw(self, yaw, 0, dtime) @@ -2671,8 +2771,8 @@ function do_states(self) if self.shoot_interval and self.timer > self.shoot_interval - and not minetest_raycast(p, self.attack:get_pos(), false, false):next() - and math.random(1, 100) <= 60 then + and not minetest.raycast(p, self.attack:get_pos(), false, false):next() + and random(1, 100) <= 60 then self.timer = 0 set_animation(self, "shoot") @@ -2681,16 +2781,12 @@ function do_states(self) mob_sound(self, "shoot_attack") -- Shoot arrow - if minetest_registered_entities[self.arrow] then + if minetest.registered_entities[self.arrow] then local arrow, ent local v = 1 if not self.shoot_arrow then - self.firing = true - minetest_after(1, function() - self.firing = false - end) - arrow = minetest_add_entity(p, self.arrow) + arrow = minetest.add_entity(p, self.arrow) ent = arrow:get_luaentity() if ent.velocity then v = ent.velocity @@ -2718,251 +2814,794 @@ function do_states(self) end +-- falling and fall damage +-- returns true if mob died +local falling = function(self, pos) - --- above function exported for mount.lua -function mobs:set_animation(self, anim) - set_animation(self, anim) -end - - --- set defined animation -local set_animation = function(self, anim, fixed_frame) - if not self.animation or not anim then - return - end - if self.state == "die" and anim ~= "die" and anim ~= "stand" then + if self.fly and self.state ~= "die" then return end - self.animation.current = self.animation.current or "" - - if (anim == self.animation.current - or not self.animation[anim .. "_start"] - or not self.animation[anim .. "_end"]) and self.state ~= "die" then - return + if mcl_portals ~= nil then + if mcl_portals.nether_portal_cooloff[self.object] then + return false -- mob has teleported through Nether portal - it's 99% not falling + end end - self.animation.current = anim + -- floating in water (or falling) + local v = self.object:get_velocity() - local a_start = self.animation[anim .. "_start"] - local a_end - if fixed_frame then - a_end = a_start + if v.y > 0 then + + -- apply gravity when moving up + self.object:set_acceleration({ + x = 0, + y = -10, + z = 0 + }) + + elseif v.y <= 0 and v.y > self.fall_speed then + + -- fall downwards at set speed + self.object:set_acceleration({ + x = 0, + y = self.fall_speed, + z = 0 + }) else - a_end = self.animation[anim .. "_end"] + -- stop accelerating once max fall speed hit + self.object:set_acceleration({x = 0, y = 0, z = 0}) end - self.object:set_animation({ - x = a_start, - y = a_end}, - self.animation[anim .. "_speed"] or self.animation.speed_normal or 15, - 0, self.animation[anim .. "_loop"] ~= false) -end + -- in water then float up + if minetest.registered_nodes[node_ok(pos).name].groups.water then + if self.floats == 1 then --- Code to execute before custom on_rightclick handling -local function on_rightclick_prefix(self, clicker) - local item = clicker:get_wielded_item() + self.object:set_acceleration({ + x = 0, + y = -self.fall_speed / (max(1, v.y) ^ 2), + z = 0 + }) + end + else - -- Name mob with nametag - if not self.ignores_nametag and item:get_name() == "mcl_mobs:nametag" then + -- fall damage onto solid ground + if self.fall_damage == 1 + and self.object:get_velocity().y == 0 then - local tag = item:get_meta():get_string("name") - if tag ~= "" then - if string.len(tag) > MAX_MOB_NAME_LENGTH then - tag = string.sub(tag, 1, MAX_MOB_NAME_LENGTH) + local d = (self.old_y or 0) - self.object:get_pos().y + + if d > 5 then + + local add = minetest.get_item_group(self.standing_on, "fall_damage_add_percent") + local damage = d - 5 + if add ~= 0 then + damage = damage + damage * (add/100) + end + damage = floor(damage) + if damage > 0 then + self.health = self.health - damage + + effect(pos, 5, "mcl_particles_smoke.png", 1, 2, 2, nil) + + if check_for_death(self, "fall", {type = "fall"}) then + return true + end + end end - self.nametag = tag - update_tag(self) - - if not mobs.is_creative(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - return true + self.old_y = self.object:get_pos().y end - end - return false end ---[[local function create_mob_on_rightclick(on_rightclick) - return function(self, clicker) - local stop = on_rightclick_prefix(self, clicker) - if (not stop) and (on_rightclick) then - on_rightclick(self, clicker) +local teleport = function(self, target) + if self.do_teleport then + if self.do_teleport(self, target) == false then + return end end -end]] - --- set and return valid yaw -local function set_yaw(self, yaw, delay, dtime) - - if not yaw or yaw ~= yaw then - yaw = 0 - end - - delay = delay or 0 - - if delay == 0 then - if self.shaking and dtime then - yaw = yaw + (math.random() * 2 - 1) * 5 * dtime - end - self.yaw(yaw) - update_roll(self) - return yaw - end - - self.target_yaw = yaw - self.delay = delay - - return self.target_yaw end --- global function to set mob yaw -function mobs:yaw(self, yaw, delay, dtime) - set_yaw(self, yaw, delay, dtime) -end +-- deal damage and effects when mob punched +local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) - ---mob_step = function() - --if self.state == "die" then - -- print("need custom die stop moving thing") - -- return - --end - - --if not self.fire_resistant then - -- mcl_burning.tick(self.object, dtime, self) - --end - - --if use_cmi then - --cmi.notify_step(self.object, dtime) - --end - - --local pos = self.object:get_pos() - --local yaw = 0 - - --if mobs_debug then - --update_tag(self) - --end - - - - --if self.jump_sound_cooloff > 0 then - -- self.jump_sound_cooloff = self.jump_sound_cooloff - dtime - --end - - --if self.opinion_sound_cooloff > 0 then - -- self.opinion_sound_cooloff = self.opinion_sound_cooloff - dtime - --end - - --if falling(self, pos) then - -- Return if mob died after falling - -- return - --end - - - -- run custom function (defined in mob lua file) - --if self.do_custom then + -- custom punch function + if self.do_punch then -- when false skip going any further - --if self.do_custom(self, dtime) == false then - -- return - --end - --end + if self.do_punch(self, hitter, tflp, tool_capabilities, dir) == false then + return + end + end + + -- error checking when mod profiling is enabled + if not tool_capabilities then + minetest.log("warning", "[mobs] Mod profiling enabled, damage not enabled") + return + end + + local is_player = hitter:is_player() + + if is_player then + -- is mob protected? + if self.protected and minetest.is_protected(self.object:get_pos(), hitter:get_player_name()) then + return + end + + -- set/update 'drop xp' timestamp if hitted by player + self.xp_timestamp = minetest.get_us_time() + end + + + -- punch interval + local weapon = hitter:get_wielded_item() + local punch_interval = 1.4 + + -- exhaust attacker + if mod_hunger and is_player then + mcl_hunger.exhaust(hitter:get_player_name(), mcl_hunger.EXHAUST_ATTACK) + end + + -- calculate mob damage + local damage = 0 + local armor = self.object:get_armor_groups() or {} + local tmp + + -- quick error check incase it ends up 0 (serialize.h check test) + if tflp == 0 then + tflp = 0.2 + end + + if use_cmi then + damage = cmi.calculate_damage(self.object, hitter, tflp, tool_capabilities, dir) + else + + for group,_ in pairs( (tool_capabilities.damage_groups or {}) ) do + + tmp = tflp / (tool_capabilities.full_punch_interval or 1.4) + + if tmp < 0 then + tmp = 0.0 + elseif tmp > 1 then + tmp = 1.0 + end + + damage = damage + (tool_capabilities.damage_groups[group] or 0) + * tmp * ((armor[group] or 0) / 100.0) + end + end + + if weapon then + local fire_aspect_level = mcl_enchanting.get_enchantment(weapon, "fire_aspect") + if fire_aspect_level > 0 then + mcl_burning.set_on_fire(self.object, fire_aspect_level * 4) + end + end + + -- check for tool immunity or special damage + for n = 1, #self.immune_to do + + if self.immune_to[n][1] == weapon:get_name() then + + damage = self.immune_to[n][2] or 0 + break + end + end + + -- healing + if damage <= -1 then + self.health = self.health - floor(damage) + return + end + + if use_cmi then + + local cancel = cmi.notify_punch(self.object, hitter, tflp, tool_capabilities, dir, damage) + + if cancel then return end + end + + if tool_capabilities then + punch_interval = tool_capabilities.full_punch_interval or 1.4 + end + + -- add weapon wear manually + -- Required because we have custom health handling ("health" property) + if minetest.is_creative_enabled("") ~= true + and tool_capabilities then + if tool_capabilities.punch_attack_uses then + -- Without this delay, the wear does not work. Quite hacky ... + minetest.after(0, function(name) + local player = minetest.get_player_by_name(name) + if not player then return end + local weapon = hitter:get_wielded_item(player) + local def = weapon:get_definition() + if def.tool_capabilities and def.tool_capabilities.punch_attack_uses then + local wear = floor(65535/tool_capabilities.punch_attack_uses) + weapon:add_wear(wear) + hitter:set_wielded_item(weapon) + end + end, hitter:get_player_name()) + end + end + + local die = false + + -- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately. + if damage >= 0.1 then + + -- weapon sounds + if weapon:get_definition().sounds ~= nil then + + local s = random(0, #weapon:get_definition().sounds) + + minetest.sound_play(weapon:get_definition().sounds[s], { + object = self.object, --hitter, + max_hear_distance = 8 + }, true) + else + minetest.sound_play("default_punch", { + object = self.object, + max_hear_distance = 5 + }, true) + end + + damage_effect(self, damage) + + -- do damage + self.health = self.health - damage + + -- skip future functions if dead, except alerting others + if check_for_death(self, "hit", {type = "punch", puncher = hitter}) then + die = true + end + + -- knock back effect (only on full punch) + if not die + and self.knock_back + and tflp >= punch_interval then + + local v = self.object:get_velocity() + local r = 1.4 - min(punch_interval, 1.4) + local kb = r * 2.0 + local up = 2 + + -- if already in air then dont go up anymore when hit + if v.y ~= 0 + or self.fly then + up = 0 + end + + -- direction error check + dir = dir or {x = 0, y = 0, z = 0} + + -- check if tool already has specific knockback value + if tool_capabilities.damage_groups["knockback"] then + kb = tool_capabilities.damage_groups["knockback"] + else + kb = kb * 1.5 + end + + + local luaentity + if hitter then + luaentity = hitter:get_luaentity() + end + if hitter and is_player then + local wielditem = hitter:get_wielded_item() + kb = kb + 3 * mcl_enchanting.get_enchantment(wielditem, "knockback") + elseif luaentity and luaentity._knockback then + kb = kb + luaentity._knockback + end + + self.object:set_velocity({ + x = dir.x * kb, + y = dir.y * kb + up * 2, + z = dir.z * kb + }) + + self.pause_timer = 0.25 + end + end -- END if damage + + -- if skittish then run away + if not die and self.runaway == true and self.state ~= "flop" then + + local lp = hitter: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 + } + + local yaw = (atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate + + if lp.x > s.x then + yaw = yaw + pi + end + + yaw = set_yaw(self, yaw, 6) + self.state = "runaway" + self.runaway_timer = 0 + self.following = nil + end + + local name = hitter:get_player_name() or "" + + -- attack puncher and call other mobs for help + if self.passive == false + and self.state ~= "flop" + and (self.child == false or self.type == "monster") + and hitter:get_player_name() ~= self.owner + and not mobs.invis[ name ] then + + if not die then + -- attack whoever punched mob + self.state = "" + do_attack(self, hitter) + end + + -- alert others to the attack + local objs = minetest.get_objects_inside_radius(hitter:get_pos(), self.view_range) + local obj = nil + + for n = 1, #objs do + + obj = objs[n]:get_luaentity() + + if obj then + + -- only alert members of same mob or friends + if obj.group_attack + and obj.state ~= "attack" + and obj.owner ~= name then + if obj.name == self.name then + do_attack(obj, hitter) + elseif type(obj.group_attack) == "table" then + for i=1, #obj.group_attack do + if obj.name == obj.group_attack[i] then + do_attack(obj, hitter) + break + end + end + end + end + + -- have owned mobs attack player threat + if obj.owner == name and obj.owner_loyal then + do_attack(obj, self.object) + end + end + end + end +end + +local mob_detach_child = function(self, child) + + if self.driver == child then + self.driver = nil + end + +end + +-- get entity staticdata +local mob_staticdata = function(self) + +--[[ + -- remove mob when out of range unless tamed + if remove_far + and self.can_despawn + and self.remove_ok + and ((not self.nametag) or (self.nametag == "")) + and self.lifetimer <= 20 then + + minetest.log("action", "Mob "..name.." despawns in mob_staticdata at "..minetest.pos_to_string(self.object.get_pos(), 1)) + mcl_burning.extinguish(self.object) + self.object:remove() + + return ""-- nil + end +--]] + self.remove_ok = true + self.attack = nil + self.following = nil + self.state = "stand" + + if use_cmi then + self.serialized_cmi_components = cmi.serialize_components(self._cmi_components) + end + + local tmp = {} + + for _,stat in pairs(self) do + + local t = type(stat) + + if t ~= "function" + and t ~= "nil" + and t ~= "userdata" + and _ ~= "_cmi_components" then + tmp[_] = self[_] + end + end + + return minetest.serialize(tmp) +end + + +-- activate mob and reload settings +local mob_activate = function(self, staticdata, def, dtime) + + -- remove monsters in peaceful mode + if self.type == "monster" + and minetest.settings:get_bool("only_peaceful_mobs", false) then + mcl_burning.extinguish(self.object) + self.object:remove() + + return + end + + -- load entity variables + local tmp = minetest.deserialize(staticdata) + + if tmp then + for _,stat in pairs(tmp) do + self[_] = stat + end + end + + -- select random texture, set model and size + if not self.base_texture then + + -- compatiblity with old simple mobs textures + if type(def.textures[1]) == "string" then + def.textures = {def.textures} + end + + self.base_texture = def.textures[random(1, #def.textures)] + self.base_mesh = def.mesh + self.base_size = self.visual_size + self.base_colbox = self.collisionbox + self.base_selbox = self.selectionbox + end + + -- for current mobs that dont have this set + if not self.base_selbox then + self.base_selbox = self.selectionbox or self.base_colbox + end + + -- set texture, model and size + local textures = self.base_texture + local mesh = self.base_mesh + local vis_size = self.base_size + local colbox = self.base_colbox + local selbox = self.base_selbox + + -- specific texture if gotten + if self.gotten == true + and def.gotten_texture then + textures = def.gotten_texture + end + + -- specific mesh if gotten + if self.gotten == true + and def.gotten_mesh then + mesh = def.gotten_mesh + end + + -- set child objects to half size + if self.child == true then + + vis_size = { + x = self.base_size.x * .5, + y = self.base_size.y * .5, + } + + if def.child_texture then + textures = def.child_texture[1] + end + + colbox = { + self.base_colbox[1] * .5, + self.base_colbox[2] * .5, + self.base_colbox[3] * .5, + self.base_colbox[4] * .5, + self.base_colbox[5] * .5, + self.base_colbox[6] * .5 + } + selbox = { + self.base_selbox[1] * .5, + self.base_selbox[2] * .5, + self.base_selbox[3] * .5, + self.base_selbox[4] * .5, + self.base_selbox[5] * .5, + self.base_selbox[6] * .5 + } + end + + if self.health == 0 then + self.health = random (self.hp_min, self.hp_max) + end + if self.breath == nil then + self.breath = self.breath_max + end + + -- pathfinding init + self.path = {} + self.path.way = {} -- path to follow, table of positions + self.path.lastpos = {x = 0, y = 0, z = 0} + self.path.stuck = false + self.path.following = false -- currently following path? + self.path.stuck_timer = 0 -- if stuck for too long search for path + + -- Armor groups + -- immortal=1 because we use custom health + -- handling (using "health" property) + local armor + if type(self.armor) == "table" then + armor = table.copy(self.armor) + armor.immortal = 1 + else + armor = {immortal=1, fleshy = self.armor} + end + self.object:set_armor_groups(armor) + self.old_y = self.object:get_pos().y + self.old_health = self.health + self.sounds.distance = self.sounds.distance or 10 + self.textures = textures + self.mesh = mesh + self.collisionbox = colbox + self.selectionbox = selbox + self.visual_size = vis_size + self.standing_in = "ignore" + self.standing_on = "ignore" + self.jump_sound_cooloff = 0 -- used to prevent jump sound from being played too often in short time + self.opinion_sound_cooloff = 0 -- used to prevent sound spam of particular sound types + + self.texture_mods = {} + self.object:set_texture_mod("") + + self.v_start = false + self.timer = 0 + self.blinktimer = 0 + self.blinkstatus = false + + -- check existing nametag + if not self.nametag then + self.nametag = def.nametag + end + + -- set anything changed above + self.object:set_properties(self) + set_yaw(self, (random(0, 360) - 180) / 180 * pi, 6) + update_tag(self) + set_animation(self, "stand") + + -- run on_spawn function if found + if self.on_spawn and not self.on_spawn_run then + if self.on_spawn(self) then + self.on_spawn_run = true -- if true, set flag to run once only + end + end + + -- run after_activate + if def.after_activate then + def.after_activate(self, staticdata, def, dtime) + end + + if use_cmi then + self._cmi_components = cmi.activate_components(self.serialized_cmi_components) + cmi.notify_activate(self.object, dtime) + end +end + + +-- main mob function +local mob_step = function(self, dtime) + + if not self.fire_resistant then + mcl_burning.tick(self.object, dtime) + end + + if use_cmi then + cmi.notify_step(self.object, dtime) + end + + local pos = self.object:get_pos() + local yaw = 0 + + if mobs_debug then + update_tag(self) + end + + if self.state == "die" then + return + end + + if self.jump_sound_cooloff > 0 then + self.jump_sound_cooloff = self.jump_sound_cooloff - dtime + end + if self.opinion_sound_cooloff > 0 then + self.opinion_sound_cooloff = self.opinion_sound_cooloff - dtime + end + if falling(self, pos) then + -- Return if mob died after falling + return + end + + -- smooth rotation by ThomasMonroe314 + + if self.delay and self.delay > 0 then + + local yaw = self.object:get_yaw() or 0 + + if self.delay == 1 then + yaw = self.target_yaw + else + local dif = abs(yaw - self.target_yaw) + + if yaw > self.target_yaw then + + if dif > pi then + dif = 2 * pi - dif -- need to add + yaw = yaw + dif / self.delay + else + yaw = yaw - dif / self.delay -- need to subtract + end + + elseif yaw < self.target_yaw then + + if dif > pi then + dif = 2 * pi - dif + yaw = yaw - dif / self.delay -- need to subtract + else + yaw = yaw + dif / self.delay -- need to add + end + end + + if yaw > (pi * 2) then yaw = yaw - (pi * 2) end + if yaw < 0 then yaw = yaw + (pi * 2) end + end + + self.delay = self.delay - 1 + if self.shaking then + yaw = yaw + (math.random() * 2 - 1) * 5 * dtime + end + self.object:set_yaw(yaw) + end + + -- end rotation -- knockback timer - --if self.pause_timer > 0 then + if self.pause_timer > 0 then - -- self.pause_timer = self.pause_timer - dtime + self.pause_timer = self.pause_timer - dtime - -- return - --end + return + end + + -- run custom function (defined in mob lua file) + if self.do_custom then + + -- when false skip going any further + if self.do_custom(self, dtime) == false then + return + end + end -- attack timer - --self.timer = self.timer + dtime + self.timer = self.timer + dtime - --[[ if self.state ~= "attack" then if self.timer < 1 then - print("returning>>error code 1") return end self.timer = 0 end - ]]-- -- never go over 100 - --if self.timer > 100 then - -- self.timer = 1 - --end + if self.timer > 100 then + self.timer = 1 + end -- mob plays random sound at times - --if math.random(1, 70) == 1 then - -- mob_sound(self, "random", true) - --end + if random(1, 100) == 1 then + mob_sound(self, "random", true) + end -- environmental damage timer (every 1 second) - --self.env_damage_timer = self.env_damage_timer + dtime + self.env_damage_timer = self.env_damage_timer + dtime + + if (self.state == "attack" and self.env_damage_timer > 1) + or self.state ~= "attack" then + + self.env_damage_timer = 0 + + -- check for environmental damage (water, fire, lava etc.) + if do_env_damage(self) then + return + end - --if (self.state == "attack" and self.env_damage_timer > 1) - --or self.state ~= "attack" then - -- - -- self.env_damage_timer = 0 - -- - -- -- check for environmental damage (water, fire, lava etc.) - -- if do_env_damage(self) then - -- return - -- end - -- -- node replace check (cow eats grass etc.) - -- replace(self, pos) - --end + replace(self, pos) + end - --monster_attack(self) + monster_attack(self) - --npc_attack(self) + npc_attack(self) - --breed(self) + breed(self) - --do_jump(self) - - --runaway_from(self) - - - --if is_at_water_danger(self) and self.state ~= "attack" then - -- if math.random(1, 10) <= 6 then - -- set_velocity(self, 0) - -- self.state = "stand" - -- set_animation(self, "stand") - -- yaw = yaw + math.random(-0.5, 0.5) - -- yaw = set_yaw(self, yaw, 8) - -- end - --end - - - -- Add water flowing for mobs from mcl_item_entity - --[[ - local p, node, nn, def - p = self.object:get_pos() - node = minetest_get_node_or_nil(p) - if node then - nn = node.name - def = minetest_registered_nodes[nnenable_physicss if not on/in flowing liquid - self._flowing = false - enable_physics(self.object, self, true) + if do_states(self, dtime) then return end + if not self.object:get_luaentity() then + return false + end + + do_jump(self) + + runaway_from(self) + + if is_at_water_danger(self) and self.state ~= "attack" then + if random(1, 10) <= 6 then + set_velocity(self, 0) + self.state = "stand" + set_animation(self, "stand") + yaw = yaw + random(-0.5, 0.5) + yaw = set_yaw(self, yaw, 8) + end + end + + -- Add water flowing for mobs from mcl_item_entity + local p, node, nn, def + p = self.object:get_pos() + node = minetest.get_node_or_nil(p) + if node then + nn = node.name + def = minetest.registered_nodes[nn] + end + + -- Move item around on flowing liquids + if def and def.liquidtype == "flowing" then + + --[[ Get flowing direction (function call from flowlib), if there's a liquid. + NOTE: According to Qwertymine, flowlib.quickflow is only reliable for liquids with a flowing distance of 7. + Luckily, this is exactly what we need if we only care about water, which has this flowing distance. ]] + local vec = flowlib.quick_flow(p, node) + -- Just to make sure we don't manipulate the speed for no reason + if vec.x ~= 0 or vec.y ~= 0 or vec.z ~= 0 then + -- Minecraft Wiki: Flowing speed is "about 1.39 meters per second" + local f = 1.39 + -- Set new item moving speed into the direciton of the liquid + local newv = vector.multiply(vec, f) + self.object:set_acceleration({x = 0, y = 0, z = 0}) + self.object:set_velocity({x = newv.x, y = -0.22, z = newv.z}) + + self.physical_state = true + self._flowing = true + self.object:set_properties({ + physical = true + }) + return + end + elseif self._flowing == true then + -- Disable flowing physics if not on/in flowing liquid + self._flowing = false + enable_physics(self.object, self, true) + return + end + --Mob following code. follow_flop(self) - if is_at_cliff_or_danger(self) then set_velocity(self, 0) self.state = "stand" @@ -2991,6 +3630,963 @@ end end end end - ]]-- +end ---end + +-- default function when mobs are blown up with TNT +local do_tnt = function(obj, damage) + + obj.object:punch(obj.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = damage}, + }, nil) + + return false, true, {} +end + + +mobs.spawning_mobs = {} + +-- Code to execute before custom on_rightclick handling +local on_rightclick_prefix = function(self, clicker) + local item = clicker:get_wielded_item() + + -- Name mob with nametag + if not self.ignores_nametag and item:get_name() == "mcl_mobs:nametag" then + + local tag = item:get_meta():get_string("name") + if tag ~= "" then + if string.len(tag) > MAX_MOB_NAME_LENGTH then + tag = string.sub(tag, 1, MAX_MOB_NAME_LENGTH) + end + self.nametag = tag + + update_tag(self) + + if not mobs.is_creative(clicker:get_player_name()) then + item:take_item() + clicker:set_wielded_item(item) + end + return true + end + + end + return false +end + +local create_mob_on_rightclick = function(on_rightclick) + return function(self, clicker) + local stop = on_rightclick_prefix(self, clicker) + if (not stop) and (on_rightclick) then + on_rightclick(self, clicker) + end + end +end + +-- register mob entity +function mobs:register_mob(name, def) + + mobs.spawning_mobs[name] = true + +local can_despawn +if def.can_despawn ~= nil then + can_despawn = def.can_despawn +else + can_despawn = true +end + +local function scale_difficulty(value, default, min, special) + if (not value) or (value == default) or (value == special) then + return default + else + return max(min, value * difficulty) + end +end + +local collisionbox = def.collisionbox or {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25} +-- Workaround for : +-- Increase upper Y limit to avoid mobs glitching through solid nodes. +-- FIXME: Remove workaround if it's no longer needed. +if collisionbox[5] < 0.79 then + collisionbox[5] = 0.79 +end + +minetest.register_entity(name, { + + use_texture_alpha = def.use_texture_alpha, + stepheight = def.stepheight or 0.6, + name = name, + type = def.type, + attack_type = def.attack_type, + fly = def.fly, + fly_in = def.fly_in or {"air", "__airlike"}, + owner = def.owner or "", + order = def.order or "", + on_die = def.on_die, + spawn_small_alternative = def.spawn_small_alternative, + do_custom = def.do_custom, + jump_height = def.jump_height or 4, -- was 6 + rotate = math.rad(def.rotate or 0), -- 0=front, 90=side, 180=back, 270=side2 + lifetimer = def.lifetimer or 57.73, + hp_min = scale_difficulty(def.hp_min, 5, 1), + hp_max = scale_difficulty(def.hp_max, 10, 1), + xp_min = def.xp_min or 0, + xp_max = def.xp_max or 0, + xp_timestamp = 0, + breath_max = def.breath_max or 15, + breathes_in_water = def.breathes_in_water or false, + physical = true, + collisionbox = collisionbox, + selectionbox = def.selectionbox or def.collisionbox, + visual = def.visual, + visual_size = def.visual_size or {x = 1, y = 1}, + mesh = def.mesh, + makes_footstep_sound = def.makes_footstep_sound or false, + view_range = def.view_range or 16, + walk_velocity = def.walk_velocity or 1, + run_velocity = def.run_velocity or 2, + damage = scale_difficulty(def.damage, 0, 0), + light_damage = def.light_damage or 0, + sunlight_damage = def.sunlight_damage or 0, + water_damage = def.water_damage or 0, + lava_damage = def.lava_damage or 8, + fire_damage = def.fire_damage or 1, + suffocation = def.suffocation or true, + fall_damage = def.fall_damage or 1, + fall_speed = def.fall_speed or DEFAULT_FALL_SPEED, -- must be lower than -2 + drops = def.drops or {}, + armor = def.armor or 100, + on_rightclick = create_mob_on_rightclick(def.on_rightclick), + arrow = def.arrow, + shoot_interval = def.shoot_interval, + sounds = def.sounds or {}, + animation = def.animation, + follow = def.follow, + jump = def.jump ~= false, + walk_chance = def.walk_chance or 50, + attacks_monsters = def.attacks_monsters or false, + group_attack = def.group_attack or false, + passive = def.passive or false, + knock_back = def.knock_back ~= false, + shoot_offset = def.shoot_offset or 0, + floats = def.floats or 1, -- floats in water by default + replace_rate = def.replace_rate, + replace_what = def.replace_what, + replace_with = def.replace_with, + replace_offset = def.replace_offset or 0, + on_replace = def.on_replace, + timer = 0, + env_damage_timer = 0, + tamed = false, + pause_timer = 0, + horny = false, + hornytimer = 0, + gotten = false, + health = 0, + reach = def.reach or 3, + htimer = 0, + texture_list = def.textures, + child_texture = def.child_texture, + docile_by_day = def.docile_by_day or false, + time_of_day = 0.5, + fear_height = def.fear_height or 0, + runaway = def.runaway, + runaway_timer = 0, + pathfinding = def.pathfinding, + immune_to = def.immune_to or {}, + explosion_radius = def.explosion_radius, -- LEGACY + explosion_damage_radius = def.explosion_damage_radius, -- LEGACY + explosiontimer_reset_radius = def.explosiontimer_reset_radius, + explosion_timer = def.explosion_timer or 3, + allow_fuse_reset = def.allow_fuse_reset ~= false, + stop_to_explode = def.stop_to_explode ~= false, + custom_attack = def.custom_attack, + double_melee_attack = def.double_melee_attack, + dogshoot_switch = def.dogshoot_switch, + dogshoot_count = 0, + dogshoot_count_max = def.dogshoot_count_max or 5, + dogshoot_count2_max = def.dogshoot_count2_max or (def.dogshoot_count_max or 5), + attack_animals = def.attack_animals or false, + specific_attack = def.specific_attack, + runaway_from = def.runaway_from, + owner_loyal = def.owner_loyal, + facing_fence = false, + _cmi_is_mob = true, + pushable = def.pushable or true, + + + -- MCL2 extensions + teleport = teleport, + do_teleport = def.do_teleport, + spawn_class = def.spawn_class, + ignores_nametag = def.ignores_nametag or false, + rain_damage = def.rain_damage or 0, + glow = def.glow, + can_despawn = can_despawn, + child = def.child or false, + texture_mods = {}, + shoot_arrow = def.shoot_arrow, + sounds_child = def.sounds_child, + explosion_strength = def.explosion_strength, + suffocation_timer = 0, + follow_velocity = def.follow_velocity or 2.4, + instant_death = def.instant_death or false, + fire_resistant = def.fire_resistant or false, + fire_damage_resistant = def.fire_damage_resistant or false, + ignited_by_sunlight = def.ignited_by_sunlight or false, + -- End of MCL2 extensions + + on_spawn = def.on_spawn, + + on_blast = def.on_blast or do_tnt, + + on_step = mob_step, + + do_punch = def.do_punch, + + on_punch = mob_punch, + + on_breed = def.on_breed, + + on_grown = def.on_grown, + + on_detach_child = mob_detach_child, + + on_activate = function(self, staticdata, dtime) + return mob_activate(self, staticdata, def, dtime) + end, + + get_staticdata = function(self) + return mob_staticdata(self) + end, + + harmed_by_heal = def.harmed_by_heal, + +}) + +if minetest.get_modpath("doc_identifier") ~= nil then + doc.sub.identifier.register_object(name, "basics", "mobs") +end + +end -- END mobs:register_mob function + + +-- count how many mobs of one type are inside an area +local count_mobs = function(pos, mobtype) + + local num = 0 + local objs = minetest.get_objects_inside_radius(pos, aoc_range) + + for n = 1, #objs do + + local obj = objs[n]:get_luaentity() + + if obj and obj.name and obj._cmi_is_mob then + + -- count passive mobs only + if mobtype == "!passive" then + if obj.spawn_class == "passive" then + num = num + 1 + end + -- count hostile mobs only + elseif mobtype == "!hostile" then + if obj.spawn_class == "hostile" then + num = num + 1 + end + -- count ambient mobs only + elseif mobtype == "!ambient" then + if obj.spawn_class == "ambient" then + num = num + 1 + end + -- count water mobs only + elseif mobtype == "!water" then + if obj.spawn_class == "water" then + num = num + 1 + end + -- count mob type + elseif mobtype and obj.name == mobtype then + num = num + 1 + -- count total mobs + elseif not mobtype then + num = num + 1 + end + end + end + + return num +end + + +-- global functions + +function mobs:spawn_abm_check(pos, node, name) + -- global function to add additional spawn checks + -- return true to stop spawning mob +end + + +function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, + interval, chance, aoc, min_height, max_height, day_toggle, on_spawn) + + -- Do mobs spawn at all? + if not mobs_spawn then + return + end + + -- chance/spawn number override in minetest.conf for registered mob + local numbers = minetest.settings:get(name) + + if numbers then + numbers = numbers:split(",") + chance = tonumber(numbers[1]) or chance + aoc = tonumber(numbers[2]) or aoc + + if chance == 0 then + minetest.log("warning", string.format("[mobs] %s has spawning disabled", name)) + return + end + + minetest.log("action", + string.format("[mobs] Chance setting for %s changed to %s (total: %s)", name, chance, aoc)) + + end + + local spawn_action + spawn_action = function(pos, node, active_object_count, active_object_count_wider, name) + + local orig_pos = table.copy(pos) + -- is mob actually registered? + if not mobs.spawning_mobs[name] + or not minetest.registered_entities[name] then + minetest.log("warning", "Mob spawn of "..name.." failed, unknown entity or mob is not registered for spawning!") + return + end + + -- additional custom checks for spawning mob + if mobs:spawn_abm_check(pos, node, name) == true then + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, ABM check rejected!") + return + end + + -- count nearby mobs in same spawn class + local entdef = minetest.registered_entities[name] + local spawn_class = entdef and entdef.spawn_class + if not spawn_class then + if entdef.type == "monster" then + spawn_class = "hostile" + else + spawn_class = "passive" + end + end + local in_class_cap = count_mobs(pos, "!"..spawn_class) < MOB_CAP[spawn_class] + -- do not spawn if too many of same mob in area + if active_object_count_wider >= max_per_block -- large-range mob cap + or (not in_class_cap) -- spawn class mob cap + or count_mobs(pos, name) >= aoc then -- per-mob mob cap + -- too many entities + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too crowded!") + return + end + + -- if toggle set to nil then ignore day/night check + if day_toggle ~= nil then + + local tod = (minetest.get_timeofday() or 0) * 24000 + + if tod > 4500 and tod < 19500 then + -- daylight, but mob wants night + if day_toggle == false then + -- mob needs night + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, mob needs light!") + return + end + else + -- night time but mob wants day + if day_toggle == true then + -- mob needs day + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, mob needs daylight!") + return + end + end + end + + -- spawn above node + pos.y = pos.y + 1 + + -- only spawn away from player + local objs = minetest.get_objects_inside_radius(pos, 24) + + for n = 1, #objs do + + if objs[n]:is_player() then + -- player too close + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, player too close!") + return + end + end + + -- mobs cannot spawn in protected areas when enabled + if not spawn_protected + and minetest.is_protected(pos, "") then + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, position is protected!") + return + end + + -- are we spawning within height limits? + if pos.y > max_height + or pos.y < min_height then + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, out of height limit!") + return + end + + -- are light levels ok? + local light = minetest.get_node_light(pos) + if not light + or light > max_light + or light < min_light then + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, bad light!") + return + end + + -- do we have enough space to spawn mob? + local ent = minetest.registered_entities[name] + local width_x = max(1, math.ceil(ent.collisionbox[4] - ent.collisionbox[1])) + local min_x, max_x + if width_x % 2 == 0 then + max_x = math.floor(width_x/2) + min_x = -(max_x-1) + else + max_x = math.floor(width_x/2) + min_x = -max_x + end + + local width_z = max(1, math.ceil(ent.collisionbox[6] - ent.collisionbox[3])) + local min_z, max_z + if width_z % 2 == 0 then + max_z = math.floor(width_z/2) + min_z = -(max_z-1) + else + max_z = math.floor(width_z/2) + min_z = -max_z + end + + local max_y = max(0, math.ceil(ent.collisionbox[5] - ent.collisionbox[2]) - 1) + + for y = 0, max_y do + for x = min_x, max_x do + for z = min_z, max_z do + local pos2 = {x = pos.x+x, y = pos.y+y, z = pos.z+z} + if minetest.registered_nodes[node_ok(pos2).name].walkable == true then + -- inside block + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too little space!") + if ent.spawn_small_alternative ~= nil and (not minetest.registered_nodes[node_ok(pos).name].walkable) then + minetest.log("info", "Trying to spawn smaller alternative mob: "..ent.spawn_small_alternative) + spawn_action(orig_pos, node, active_object_count, active_object_count_wider, ent.spawn_small_alternative) + end + return + end + end + end + end + + -- tweak X/Y/Z spawn pos + if width_x % 2 == 0 then + pos.x = pos.x + 0.5 + end + if width_z % 2 == 0 then + pos.z = pos.z + 0.5 + end + pos.y = pos.y - 0.5 + + local mob = minetest.add_entity(pos, name) + minetest.log("action", "Mob spawned: "..name.." at "..minetest.pos_to_string(pos)) + + if on_spawn then + + local ent = mob:get_luaentity() + + on_spawn(ent, pos) + end + end + + local function spawn_abm_action(pos, node, active_object_count, active_object_count_wider) + spawn_action(pos, node, active_object_count, active_object_count_wider, name) + end + + minetest.register_abm({ + label = name .. " spawning", + nodenames = nodes, + neighbors = neighbors, + interval = interval, + chance = floor(max(1, chance * mobs_spawn_chance)), + catch_up = false, + action = spawn_abm_action, + }) +end + + +-- compatibility with older mob registration +function mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, day_toggle) + + mobs:spawn_specific(name, nodes, {"air"}, min_light, max_light, 30, + chance, active_object_count, -31000, max_height, day_toggle) +end + + +-- MarkBu's spawn function +function mobs:spawn(def) + + local name = def.name + local nodes = def.nodes or {"group:soil", "group:stone"} + local neighbors = def.neighbors or {"air"} + local min_light = def.min_light or 0 + local max_light = def.max_light or 15 + local interval = def.interval or 30 + local chance = def.chance or 5000 + local active_object_count = def.active_object_count or 1 + local min_height = def.min_height or -31000 + local max_height = def.max_height or 31000 + local day_toggle = def.day_toggle + local on_spawn = def.on_spawn + + mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, interval, + chance, active_object_count, min_height, max_height, day_toggle, on_spawn) +end + + +-- register arrow for shoot attack +function mobs:register_arrow(name, def) + + if not name or not def then return end -- errorcheck + + minetest.register_entity(name, { + + physical = false, + visual = def.visual, + visual_size = def.visual_size, + textures = def.textures, + velocity = def.velocity, + hit_player = def.hit_player, + hit_node = def.hit_node, + hit_mob = def.hit_mob, + hit_object = def.hit_object, + drop = def.drop or false, -- drops arrow as registered item when true + collisionbox = {0, 0, 0, 0, 0, 0}, -- remove box around arrows + timer = 0, + switch = 0, + owner_id = def.owner_id, + rotate = def.rotate, + automatic_face_movement_dir = def.rotate + and (def.rotate - (pi / 180)) or false, + + on_activate = def.on_activate, + + on_step = def.on_step or function(self, dtime) + + self.timer = self.timer + 1 + + local pos = self.object:get_pos() + + if self.switch == 0 + or self.timer > 150 + or not within_limits(pos, 0) then + mcl_burning.extinguish(self.object) + self.object:remove(); + + return + end + + -- does arrow have a tail (fireball) + if def.tail + and def.tail == 1 + and def.tail_texture then + + minetest.add_particle({ + pos = pos, + velocity = {x = 0, y = 0, z = 0}, + acceleration = {x = 0, y = 0, z = 0}, + expirationtime = def.expire or 0.25, + collisiondetection = false, + texture = def.tail_texture, + size = def.tail_size or 5, + glow = def.glow or 0, + }) + end + + if self.hit_node then + + local node = node_ok(pos).name + + if minetest.registered_nodes[node].walkable then + + self.hit_node(self, pos, node) + + if self.drop == true then + + pos.y = pos.y + 1 + + self.lastpos = (self.lastpos or pos) + + minetest.add_item(self.lastpos, self.object:get_luaentity().name) + end + + self.object:remove(); + + return + end + end + + if self.hit_player or self.hit_mob or self.hit_object then + + for _,player in pairs(minetest.get_objects_inside_radius(pos, 1.0)) do + + if self.hit_player + and player:is_player() then + + self.hit_player(self, player) + self.object:remove(); + return + end + + local entity = player:get_luaentity() + + if entity + and self.hit_mob + and entity._cmi_is_mob == true + and tostring(player) ~= self.owner_id + and entity.name ~= self.object:get_luaentity().name then + self.hit_mob(self, player) + self.object:remove(); + return + end + + if entity + and self.hit_object + and (not entity._cmi_is_mob) + and tostring(player) ~= self.owner_id + and entity.name ~= self.object:get_luaentity().name then + self.hit_object(self, player) + self.object:remove(); + return + end + end + end + + self.lastpos = pos + end + }) +end + + +-- no damage to nodes explosion +function mobs:safe_boom(self, pos, strength) + minetest.sound_play(self.sounds and self.sounds.explode or "tnt_explode", { + pos = pos, + gain = 1.0, + max_hear_distance = self.sounds and self.sounds.distance or 32 + }, true) + local radius = strength + entity_physics(pos, radius) + effect(pos, 32, "mcl_particles_smoke.png", radius * 3, radius * 5, radius, 1, 0) +end + + +-- make explosion with protection and tnt mod check +function mobs:boom(self, pos, strength, fire) + + if mod_explosions then + if mobs_griefing and not minetest.is_protected(pos, "") then + mcl_explosions.explode(pos, strength, { drop_chance = 1.0, fire = fire }, self.object) + else + mobs:safe_boom(self, pos, strength) + end + else + mobs:safe_boom(self, pos, strength) + end +end + + +-- Register spawn eggs + +-- Note: This also introduces the “spawn_egg” group: +-- * spawn_egg=1: Spawn egg (generic mob, no metadata) +-- * spawn_egg=2: Spawn egg (captured/tamed mob, metadata) +function mobs:register_egg(mob, desc, background, addegg, no_creative) + + local grp = {spawn_egg = 1} + + -- do NOT add this egg to creative inventory (e.g. dungeon master) + if no_creative == true then + grp.not_in_creative_inventory = 1 + end + + local invimg = background + + if addegg == 1 then + invimg = "mobs_chicken_egg.png^(" .. invimg .. + "^[mask:mobs_chicken_egg_overlay.png)" + end + + -- register old stackable mob egg + minetest.register_craftitem(mob, { + + description = desc, + inventory_image = invimg, + groups = grp, + + _doc_items_longdesc = S("This allows you to place a single mob."), + _doc_items_usagehelp = S("Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns."), + + on_place = function(itemstack, placer, pointed_thing) + + local pos = pointed_thing.above + + -- am I clicking on something with existing on_rightclick function? + local under = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, under, placer, itemstack) + end + + if pos + and within_limits(pos, 0) + and not minetest.is_protected(pos, placer:get_player_name()) then + + local name = placer:get_player_name() + local privs = minetest.get_player_privs(name) + if mod_mobspawners and under.name == "mcl_mobspawners:spawner" then + if minetest.is_protected(pointed_thing.under, name) then + minetest.record_protection_violation(pointed_thing.under, name) + return itemstack + end + if not privs.maphack then + minetest.chat_send_player(name, S("You need the “maphack” privilege to change the mob spawner.")) + return itemstack + end + mcl_mobspawners.setup_spawner(pointed_thing.under, itemstack:get_name()) + if not mobs.is_creative(name) then + itemstack:take_item() + end + return itemstack + end + + if not minetest.registered_entities[mob] then + return itemstack + end + + if minetest.settings:get_bool("only_peaceful_mobs", false) + and minetest.registered_entities[mob].type == "monster" then + minetest.chat_send_player(name, S("Only peaceful mobs allowed!")) + return itemstack + end + + pos.y = pos.y - 0.5 + + local mob = minetest.add_entity(pos, mob) + minetest.log("action", "Mob spawned: "..name.." at "..minetest.pos_to_string(pos)) + local ent = mob:get_luaentity() + + -- don't set owner if monster or sneak pressed + if ent.type ~= "monster" + and not placer:get_player_control().sneak then + ent.owner = placer:get_player_name() + ent.tamed = true + end + + -- set nametag + local nametag = itemstack:get_meta():get_string("name") + if nametag ~= "" then + if string.len(nametag) > MAX_MOB_NAME_LENGTH then + nametag = string.sub(nametag, 1, MAX_MOB_NAME_LENGTH) + end + ent.nametag = nametag + update_tag(ent) + end + + -- if not in creative then take item + if not mobs.is_creative(placer:get_player_name()) then + itemstack:take_item() + end + end + + return itemstack + end, + }) + +end + + +-- No-op in MCL2 (capturing mobs is not possible). +-- Provided for compability with Mobs Redo +function mobs:capture_mob(self, clicker, chance_hand, chance_net, chance_lasso, force_take, replacewith) + return false +end + + +-- No-op in MCL2 (protecting mobs is not possible). +function mobs:protect(self, clicker) + return false +end + + +-- feeding, taming and breeding (thanks blert2112) +function mobs:feed_tame(self, clicker, feed_count, breed, tame) + if not self.follow then + return false + end + + -- can eat/tame with item in hand + if follow_holding(self, clicker) then + + -- if not in creative then take item + if not mobs.is_creative(clicker:get_player_name()) then + + local item = clicker:get_wielded_item() + + item:take_item() + + clicker:set_wielded_item(item) + end + + mob_sound(self, "eat", nil, true) + + -- increase health + self.health = self.health + 4 + + if self.health >= self.hp_max then + + self.health = self.hp_max + + if self.htimer < 1 then + self.htimer = 5 + end + end + + self.object:set_hp(self.health) + + update_tag(self) + + -- make children grow quicker + if self.child == true then + + -- deduct 10% of the time to adulthood + self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) + + return true + end + + -- feed and tame + self.food = (self.food or 0) + 1 + if self.food >= feed_count then + + self.food = 0 + + if breed and self.hornytimer == 0 then + self.horny = true + end + + if tame then + + self.tamed = true + + if not self.owner or self.owner == "" then + self.owner = clicker:get_player_name() + end + end + + -- make sound when fed so many times + mob_sound(self, "random", true) + end + + return true + end + + return false +end + +-- Spawn a child +function mobs:spawn_child(pos, mob_type) + local child = minetest.add_entity(pos, mob_type) + if not child then + return + end + + local ent = child:get_luaentity() + effect(pos, 15, "mcl_particles_smoke.png", 1, 2, 2, 15, 5) + + ent.child = true + + local textures + -- using specific child texture (if found) + if ent.child_texture then + textures = ent.child_texture[1] + end + + -- and resize to half height + child:set_properties({ + textures = textures, + visual_size = { + x = ent.base_size.x * .5, + y = ent.base_size.y * .5, + }, + collisionbox = { + ent.base_colbox[1] * .5, + ent.base_colbox[2] * .5, + ent.base_colbox[3] * .5, + ent.base_colbox[4] * .5, + ent.base_colbox[5] * .5, + ent.base_colbox[6] * .5, + }, + selectionbox = { + ent.base_selbox[1] * .5, + ent.base_selbox[2] * .5, + ent.base_selbox[3] * .5, + ent.base_selbox[4] * .5, + ent.base_selbox[5] * .5, + ent.base_selbox[6] * .5, + }, + }) + + return child +end + + +-- compatibility function for old entities to new modpack entities +function mobs:alias_mob(old_name, new_name) + + -- spawn egg + minetest.register_alias(old_name, new_name) + + -- entity + minetest.register_entity(":" .. old_name, { + + physical = false, + + on_step = function(self) + + if minetest.registered_entities[new_name] then + minetest.add_entity(self.object:get_pos(), new_name) + end + + self.object:remove() + end + }) + +end + +local timer = 0 +minetest.register_globalstep(function(dtime) + timer = timer + dtime + if timer < 1 then return end + for _, player in ipairs(minetest.get_connected_players()) do + local pos = player:get_pos() + for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 47)) do + local lua = obj:get_luaentity() + if lua and lua._cmi_is_mob then + lua.lifetimer = math.max(20, lua.lifetimer) + lua.despawn_immediately = false + end + end + end + timer = 0 +end) diff --git a/mods/ENTITIES/mcl_mobs/api.txt b/mods/ENTITIES/mcl_mobs/api.txt index 2d8cef5b0e..eda74aeb42 100644 --- a/mods/ENTITIES/mcl_mobs/api.txt +++ b/mods/ENTITIES/mcl_mobs/api.txt @@ -502,6 +502,20 @@ and damages any entity caught inside the blast radius. Protection will limit node destruction but not entity damage. +mobs:capture_mob +---------------- + +mobs:capture_mob(...) + +Does nothing and returns false. + +This function is provided for compability with Mobs Redo for an attempt to +capture a mob. +Mobs cannot be captured in MineClone 2. + +In Mobs Redo, this is generally called inside the on_rightclick section of the mob +api code, it provides a chance of capturing the mob. See Mobs Redo documentation +of parameters. Feeding and Taming/Breeding --------------------------- @@ -521,6 +535,19 @@ Will return true when mob is fed with item it likes. them up +Protecting Mobs +--------------- + +mobs:protect(self, clicker) + +This function can be used to right-click any tamed mob with mobs:protector item, +this will protect the mob from harm inside of a protected area from other +players. Will return true when mob right-clicked with mobs:protector item. + + 'self' mob information + 'clicker' player information + + Riding Mobs ----------- @@ -578,7 +605,7 @@ Note: animation names above are from the pre-defined animation lists inside mob registry without extensions. -mobs.set_mob_animation(self, name) +mobs:set_animation(self, name) This function sets the current animation for mob, defaulting to "stand" if not found. @@ -754,5 +781,8 @@ mobs:register_mob("mob_horse:horse", { inv:remove_item("main", "mobs:saddle") end end + + -- used to capture horse with magic lasso + mobs:capture_mob(self, clicker, 0, 0, 80, false, nil) end }) diff --git a/mods/ENTITIES/mcl_mobs/api/api.lua b/mods/ENTITIES/mcl_mobs/api/api.lua deleted file mode 100644 index 639eb517d4..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/api.lua +++ /dev/null @@ -1,736 +0,0 @@ --- API for Mobs Redo: MineClone 2 Delux 2.0 DRM Free Early Access Super Extreme Edition - --- mobs library -mobs = {} - --- lua locals - can grab from this to easily plop them into the api lua files - ---localize minetest functions -local minetest_settings = minetest.settings -local minetest_get_objects_inside_radius = minetest.get_objects_inside_radius -local minetest_get_modpath = minetest.get_modpath -local minetest_registered_nodes = minetest.registered_nodes -local minetest_get_node = minetest.get_node ---local minetest_get_item_group = minetest.get_item_group -local minetest_registered_entities = minetest.registered_entities ---local minetest_line_of_sight = minetest.line_of_sight ---local minetest_after = minetest.after ---local minetest_sound_play = minetest.sound_play ---local minetest_add_particlespawner = minetest.add_particlespawner ---local minetest_registered_items = minetest.registered_items ---local minetest_set_node = minetest.set_node -local minetest_add_item = minetest.add_item ---local minetest_get_craft_result = minetest.get_craft_result ---local minetest_find_path = minetest.find_path -local minetest_is_creative_enabled = minetest.is_creative_enabled ---local minetest_find_node_near = minetest.find_node_near ---local minetest_find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air ---local minetest_raycast = minetest.raycast ---local minetest_get_us_time = minetest.get_us_time -local minetest_add_entity = minetest.add_entity ---local minetest_get_natural_light = minetest.get_natural_light ---local minetest_get_node_or_nil = minetest.get_node_or_nil - --- localize math functions -local math = math - --- localize vector functions -local vector = vector - -local string = string - --- mob constants ---local BREED_TIME = 30 ---local BREED_TIME_AGAIN = 300 ---local CHILD_GROW_TIME = 60*20 ---local DEATH_DELAY = 0.5 -local DEFAULT_FALL_SPEED = -10 ---local FLOP_HEIGHT = 5.0 ---local FLOP_HOR_SPEED = 1.5 -local GRAVITY = minetest_settings:get("movement_gravity")-- + 9.81 - -local MAX_MOB_NAME_LENGTH = 30 - - ---[[local MOB_CAP = {} -MOB_CAP.hostile = 70 -MOB_CAP.passive = 10 -MOB_CAP.ambient = 15 -MOB_CAP.water = 15 -]] - --- Load main settings ---local damage_enabled = minetest_settings:get_bool("enable_damage") ---local disable_blood = minetest_settings:get_bool("mobs_disable_blood") ---local mobs_drop_items = minetest_settings:get_bool("mobs_drop_items") ~= false ---local mobs_griefing = minetest_settings:get_bool("mobs_griefing") ~= false ---local spawn_protected = minetest_settings:get_bool("mobs_spawn_protected") ~= false ---local remove_far = true -local difficulty = tonumber(minetest_settings:get("mob_difficulty")) or 1.0 ---local show_health = false ---local max_per_block = tonumber(minetest_settings:get("max_objects_per_block") or 64) ----local mobs_spawn_chance = tonumber(minetest_settings:get("mobs_spawn_chance") or 2.5) - --- pathfinding settings ---local enable_pathfinding = true ---local stuck_timeout = 3 -- how long before mob gets stuck in place and starts searching ---local stuck_path_timeout = 10 -- how long will mob follow path before giving up - --- default nodes ---local node_ice = "mcl_core:ice" ---local node_snowblock = "mcl_core:snowblock" ---local node_snow = "mcl_core:snow" -mobs.fallback_node = minetest.registered_aliases["mapgen_dirt"] or "mcl_core:dirt" - ---local mod_weather = minetest_get_modpath("mcl_weather") ---local mod_explosions = minetest_get_modpath("mcl_explosions") -local mod_mobspawners = minetest_get_modpath("mcl_mobspawners") ---local mod_hunger = minetest_get_modpath("mcl_hunger") ---local mod_worlds = minetest_get_modpath("mcl_worlds") ---local mod_armor = minetest_get_modpath("mcl_armor") ---local mod_experience = minetest_get_modpath("mcl_experience") - - --- random locals I found ---local los_switcher = false ---local height_switcher = false - --- Get translator -local S = minetest.get_translator(minetest.get_current_modname()) - --- CMI support check ---local use_cmi = minetest.global_exists("cmi") - --- creative check -function mobs.is_creative(name) - return minetest_is_creative_enabled(name) -end - ---[[local function atan(x) - if not x or x ~= x then - return 0 - else - return math.atan(x) - end -end]] - --- Shows helpful debug info above each mob ---local mobs_debug = minetest_settings:get_bool("mobs_debug", false) - --- Peaceful mode message so players will know there are no monsters -if minetest_settings:get_bool("only_peaceful_mobs", false) then - minetest.register_on_joinplayer(function(player) - minetest.chat_send_player(player:get_player_name(), - S("Peaceful mode active! No monsters will spawn.")) - end) -end - - -local api_path = minetest.get_modpath(minetest.get_current_modname()).."/api/mob_functions/" - ---ignite all parts of the api -dofile(api_path .. "flow_lib.lua") -dofile(api_path .. "ai.lua") -dofile(api_path .. "animation.lua") -dofile(api_path .. "collision.lua") -dofile(api_path .. "environment.lua") -dofile(api_path .. "interaction.lua") -dofile(api_path .. "movement.lua") -dofile(api_path .. "set_up.lua") -dofile(api_path .. "attack_type_instructions.lua") -dofile(api_path .. "sound_handling.lua") -dofile(api_path .. "death_logic.lua") -dofile(api_path .. "mob_effects.lua") -dofile(api_path .. "projectile_handling.lua") -dofile(api_path .. "breeding.lua") -dofile(api_path .. "head_logic.lua") - - -mobs.spawning_mobs = {} - - - - --- register mob entity -function mobs:register_mob(name, def) - - local collisionbox = def.collisionbox or {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25} - - -- Workaround for : - -- Increase upper Y limit to avoid mobs glitching through solid nodes. - -- FIXME: Remove workaround if it's no longer needed. - - if collisionbox[5] < 0.79 then - collisionbox[5] = 0.79 - end - - mobs.spawning_mobs[name] = true - - local function scale_difficulty(value, default, min, special) - if (not value) or (value == default) or (value == special) then - return default - else - return math.max(min, value * difficulty) - end - end - - minetest.register_entity(name, { - description = def.description, - use_texture_alpha = def.use_texture_alpha, - stepheight = def.stepheight or 0.6, - stepheight_backup = def.stepheight or 0.6, - name = name, - type = def.type, - attack_type = def.attack_type, - fly = def.fly, - fly_in = def.fly_in or {"air", "__airlike"}, - owner = def.owner or "", - order = def.order or "", - on_die = def.on_die, - spawn_small_alternative = def.spawn_small_alternative, - do_custom = def.do_custom, - jump_height = def.jump_height or 4, -- was 6 - rotate = def.rotate or 0, -- 0=front, 90=side, 180=back, 270=side2 - hp_min = scale_difficulty(def.hp_min, 5, 1), - hp_max = scale_difficulty(def.hp_max, 10, 1), - xp_min = def.xp_min or 1, - xp_max = def.xp_max or 5, - breath_max = def.breath_max or 6, - breathes_in_water = def.breathes_in_water or false, - physical = true, - collisionbox = collisionbox, - collide_with_objects = def.collide_with_objects or false, - selectionbox = def.selectionbox or def.collisionbox, - visual = def.visual, - visual_size = def.visual_size or {x = 1, y = 1}, - mesh = def.mesh, - makes_footstep_sound = def.makes_footstep_sound or false, - view_range = def.view_range or 16, - walk_velocity = def.walk_velocity or 1, - run_velocity = def.run_velocity or 2, - damage = scale_difficulty(def.damage, 0, 0), - light_damage = def.light_damage or 0, - sunlight_damage = def.sunlight_damage or 0, - water_damage = def.water_damage or 0, - lava_damage = def.lava_damage or 8, - fire_damage = def.fire_damage or 1, - suffocation = def.suffocation or true, - fall_damage = def.fall_damage or 1, - fall_speed = def.fall_speed or DEFAULT_FALL_SPEED, -- must be lower than -2 - drops = def.drops or {}, - armor = def.armor or 100, - on_rightclick = mobs.create_mob_on_rightclick(def.on_rightclick), - arrow = def.arrow, - shoot_interval = def.shoot_interval, - sounds = def.sounds or {}, - animation = def.animation, - jump = def.jump ~= false, - walk_chance = def.walk_chance or 50, - attacks_monsters = def.attacks_monsters or false, - group_attack = def.group_attack or false, - passive = def.passive or false, - knock_back = def.knock_back ~= false, - shoot_offset = def.shoot_offset or 0, - floats = def.floats or 1, -- floats in water by default - floats_on_lava = def.floats_on_lava or 0, - replace_rate = def.replace_rate, - replace_what = def.replace_what, - replace_with = def.replace_with, - replace_offset = def.replace_offset or 0, - on_replace = def.on_replace, - timer = 0, - state_timer = 0, - env_damage_timer = 0, - tamed = false, - pause_timer = 0, - gotten = false, - reach = def.reach or 3, - htimer = 0, - texture_list = def.textures, - child_texture = def.child_texture, - docile_by_day = def.docile_by_day or false, - time_of_day = 0.5, - fear_height = def.fear_height or 0, - runaway = def.runaway, - runaway_timer = 0, - pathfinding = def.pathfinding, - immune_to = def.immune_to or {}, - explosion_radius = def.explosion_radius, -- LEGACY - explosion_damage_radius = def.explosion_damage_radius, -- LEGACY - explosiontimer_reset_radius = def.explosiontimer_reset_radius, - explosion_timer = def.explosion_timer or 3, - allow_fuse_reset = def.allow_fuse_reset ~= false, - stop_to_explode = def.stop_to_explode ~= false, - custom_attack = def.custom_attack, - double_melee_attack = def.double_melee_attack, - dogshoot_switch = def.dogshoot_switch, - dogshoot_count = 0, - dogshoot_count_max = def.dogshoot_count_max or 5, - dogshoot_count2_max = def.dogshoot_count2_max or (def.dogshoot_count_max or 5), - attack_animals = def.attack_animals or false, - specific_attack = def.specific_attack, - runaway_from = def.runaway_from, - owner_loyal = def.owner_loyal, - facing_fence = false, - - _cmi_is_mob = true, - - pushable = def.pushable or true, - - --j4i stuff - yaw = 0, - automatic_face_movement_dir = def.rotate or 0, -- 0=front, 90=side, 180=back, 270=side2 - automatic_face_movement_max_rotation_per_sec = 360, --degrees - backface_culling = true, - walk_timer = 0, - stand_timer = 0, - current_animation = "", - gravity = GRAVITY, - swim = def.swim, - swim_in = def.swim_in or {mobs_mc.items.water_source, "mcl_core:water_flowing", mobs_mc.items.river_water_source}, - pitch_switch = "static", - jump_only = def.jump_only, - hostile = def.hostile, - neutral = def.neutral, - attacking = nil, - visual_size_origin = def.visual_size or {x = 1, y = 1, z = 1}, - punch_timer_cooloff = def.punch_timer_cooloff or 0.5, - death_animation_timer = 0, - hostile_cooldown = def.hostile_cooldown or 15, - tilt_fly = def.tilt_fly, - tilt_swim = def.tilt_swim, - fall_slow = def.fall_slow, - projectile_cooldown_min = def.projectile_cooldown_min or 2, - projectile_cooldown_max = def.projectile_cooldown_max or 6, - skittish = def.skittish, - - minimum_follow_distance = def.minimum_follow_distance or 0.5, --make mobs not freak out when underneath - - memory = 0, -- memory timer if chasing/following - fly_random_while_attack = def.fly_random_while_attack, - - --for spiders - always_climb = def.always_climb, - - --despawn mechanic variables - lifetimer_reset = 30, --30 seconds - lifetimer = 30, --30 seconds - - --breeding stuff - breed_timer = 0, - breed_lookout_timer = 0, - breed_distance = def.breed_distance or 1.5, --how far away mobs have to be to begin actual breeding - breed_lookout_timer_goal = 30, --30 seconds (this timer is for how long the mob looks for a mate) - breed_timer_cooloff = 5*60, -- 5 minutes (this timer is for how long the mob has to wait before being bred again) - bred = false, - follow = def.follow, --this item is also used for the breeding mechanism - follow_distance = def.follow_distance or 2, - baby_size = def.baby_size or 0.5, - baby = false, - grow_up_timer = 0, - grow_up_goal = 20*60, --in 20 minutes the mob grows up - special_breed_timer = 0, --this is used for the AHEM AHEM part of breeding - - backup_visual_size = def.visual_size, - backup_collisionbox = collisionbox, - backup_selectionbox = def.selectionbox or def.collisionbox, - - - --fire timer - burn_timer = 0, - - ignores_cobwebs = def.ignores_cobwebs, - breath = def.breath_max or 6, - - random_sound_timer_min = 3, - random_sound_timer_max = 10, - - --head code variables - --defaults are for the cow's default - --because I don't know what else to set them - --to :P - - --you must use these to adjust the mob's head positions - - --has_head is used as a logic gate (quick easy check) - has_head = def.has_head or false, - --head_bone is the actual bone in the model which the head - --is attached to for animation - head_bone = def.head_bone or "head", - - --this part controls the base position of the head calculations - --localized to the mob's visual yaw when gotten (self.object:get_yaw()) - --you can enable the debug in /mob_functions/head_logic.lua by uncommenting the - --particle spawner code - head_height_offset = def.head_height_offset or 1.0525, - head_direction_offset = def.head_direction_offset or 0.5, - - --this part controls the visual of the head - head_bone_pos_y = def.head_bone_pos_y or 3.6, - head_bone_pos_z = def.head_bone_pos_z or -0.6, - head_pitch_modifier = def.head_pitch_modifier or 0, - - --these variables are switches in case the model - --moves the wrong way - swap_y_with_x = def.swap_y_with_x or false, - reverse_head_yaw = def.reverse_head_yaw or false, - - --END HEAD CODE VARIABLES - - --end j4i stuff - - -- MCL2 extensions - teleport = mobs.teleport, - do_teleport = def.do_teleport, - spawn_class = def.spawn_class, - ignores_nametag = def.ignores_nametag or false, - rain_damage = def.rain_damage or 0, - glow = def.glow, - --can_despawn = can_despawn, - child = def.child or false, - texture_mods = {}, - shoot_arrow = def.shoot_arrow, - sounds_child = def.sounds_child, - explosion_strength = def.explosion_strength, - suffocation_timer = 0, - follow_velocity = def.follow_velocity or 2.4, - instant_death = def.instant_death or false, - fire_resistant = def.fire_resistant or false, - fire_damage_resistant = def.fire_damage_resistant or false, - ignited_by_sunlight = def.ignited_by_sunlight or false, - eye_height = def.eye_height or 1.5, - defuse_reach = def.defuse_reach or 4, - -- End of MCL2 extensions - - on_spawn = def.on_spawn, - - --on_blast = def.on_blast or do_tnt, - - on_step = mobs.mob_step, - - --do_punch = def.do_punch, - - on_punch = mobs.mob_punch, - - --on_breed = def.on_breed, - - --on_grown = def.on_grown, - - --on_detach_child = mob_detach_child, - - on_activate = function(self, staticdata, dtime) - self.object:set_acceleration(vector.new(0,-GRAVITY, 0)) - return mobs.mob_activate(self, staticdata, def, dtime) - end, - - get_staticdata = function(self) - return mobs.mob_staticdata(self) - end, - - --harmed_by_heal = def.harmed_by_heal, - }) - - if minetest_get_modpath("doc_identifier") then - doc.sub.identifier.register_object(name, "basics", "mobs") - end - -end -- END mobs:register_mob function - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --- register arrow for shoot attack -function mobs:register_arrow(name, def) - - -- errorcheck - if not name or not def then - print("failed to register arrow entity") - return - end - - minetest.register_entity(name.."_entity", { - - physical = false, - visual = def.visual, - visual_size = def.visual_size, - textures = def.textures, - velocity = def.velocity, - hit_player = def.hit_player, - hit_node = def.hit_node, - hit_mob = def.hit_mob, - hit_object = def.hit_object, - drop = def.drop or false, -- drops arrow as registered item when true - collisionbox = {0, 0, 0, 0, 0, 0}, -- remove box around arrows - timer = 0, - switch = 0, - owner_id = def.owner_id, - rotate = def.rotate, - speed = def.speed or nil, - on_step = function(self) - - local vel = self.object:get_velocity() - - local pos = self.object:get_pos() - - if self.timer > 150 - or not mobs.within_limits(pos, 0) then - mcl_burning.extinguish(self.object) - self.object:remove(); - return - end - - -- does arrow have a tail (fireball) - if def.tail - and def.tail == 1 - and def.tail_texture then - - --do this to prevent clipping through main entity sprite - local pos_adjustment = vector.multiply(vector.normalize(vel), -1) - local divider = def.tail_distance_divider or 1 - pos_adjustment = vector.divide(pos_adjustment, divider) - local new_pos = vector.add(pos, pos_adjustment) - minetest.add_particle({ - pos = new_pos, - velocity = {x = 0, y = 0, z = 0}, - acceleration = {x = 0, y = 0, z = 0}, - expirationtime = def.expire or 0.25, - collisiondetection = false, - texture = def.tail_texture, - size = def.tail_size or 5, - glow = def.glow or 0, - }) - end - - if self.hit_node then - - local node = minetest_get_node(pos).name - - if minetest_registered_nodes[node].walkable then - - self.hit_node(self, pos, node) - - if self.drop == true then - - pos.y = pos.y + 1 - - self.lastpos = (self.lastpos or pos) - - minetest_add_item(self.lastpos, self.object:get_luaentity().name) - end - - self.object:remove(); - - return - end - end - - if self.hit_player or self.hit_mob or self.hit_object then - - for _,player in pairs(minetest_get_objects_inside_radius(pos, 1.5)) do - - if self.hit_player - and player:is_player() then - - if self.hit_player then - self.hit_player(self, player) - else - mobs.arrow_hit(self, player) - end - - self.object:remove(); - return - end - - --[[ - local entity = player:get_luaentity() - - if entity - and self.hit_mob - and entity._cmi_is_mob == true - and tostring(player) ~= self.owner_id - and entity.name ~= self.object:get_luaentity().name - and (self._shooter and entity.name ~= self._shooter:get_luaentity().name) then - - --self.hit_mob(self, player) - self.object:remove(); - return - end - ]]-- - - --[[ - if entity - and self.hit_object - and (not entity._cmi_is_mob) - and tostring(player) ~= self.owner_id - and entity.name ~= self.object:get_luaentity().name - and (self._shooter and entity.name ~= self._shooter:get_luaentity().name) then - - --self.hit_object(self, player) - self.object:remove(); - return - end - ]]-- - end - end - - self.lastpos = pos - end - }) -end - --- Register spawn eggs - --- Note: This also introduces the “spawn_egg” group: --- * spawn_egg=1: Spawn egg (generic mob, no metadata) --- * spawn_egg=2: Spawn egg (captured/tamed mob, metadata) -function mobs:register_egg(mob, desc, background, addegg, no_creative) - - local grp = {spawn_egg = 1} - - -- do NOT add this egg to creative inventory (e.g. dungeon master) - if no_creative == true then - grp.not_in_creative_inventory = 1 - end - - local invimg = background - - if addegg == 1 then - invimg = "mobs_chicken_egg.png^(" .. invimg .. - "^[mask:mobs_chicken_egg_overlay.png)" - end - - -- register old stackable mob egg - minetest.register_craftitem(mob, { - - description = desc, - inventory_image = invimg, - groups = grp, - - _doc_items_longdesc = S("This allows you to place a single mob."), - _doc_items_usagehelp = S("Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns."), - - on_place = function(itemstack, placer, pointed_thing) - - local pos = pointed_thing.above - - -- am I clicking on something with existing on_rightclick function? - local under = minetest_get_node(pointed_thing.under) - local def = minetest_registered_nodes[under.name] - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, under, placer, itemstack) - end - - if pos - --and within_limits(pos, 0) - and not minetest.is_protected(pos, placer:get_player_name()) then - - local name = placer:get_player_name() - local privs = minetest.get_player_privs(name) - if mod_mobspawners and under.name == "mcl_mobspawners:spawner" then - if minetest.is_protected(pointed_thing.under, name) then - minetest.record_protection_violation(pointed_thing.under, name) - return itemstack - end - if not privs.maphack then - minetest.chat_send_player(name, S("You need the “maphack” privilege to change the mob spawner.")) - return itemstack - end - mcl_mobspawners.setup_spawner(pointed_thing.under, itemstack:get_name()) - if not mobs.is_creative(name) then - itemstack:take_item() - end - return itemstack - end - - if not minetest_registered_entities[mob] then - return itemstack - end - - if minetest_settings:get_bool("only_peaceful_mobs", false) - and minetest_registered_entities[mob].type == "monster" then - minetest.chat_send_player(name, S("Only peaceful mobs allowed!")) - return itemstack - end - - local mob = minetest_add_entity(pos, mob) - minetest.log("action", "Mob spawned: "..name.." at "..minetest.pos_to_string(pos)) - local ent = mob:get_luaentity() - - -- don't set owner if monster or sneak pressed - --[[ - if ent.type ~= "monster" - and not placer:get_player_control().sneak then - ent.owner = placer:get_player_name() - ent.tamed = true - end - ]]-- - - -- set nametag - local nametag = itemstack:get_meta():get_string("name") - if nametag ~= "" then - if string.len(nametag) > MAX_MOB_NAME_LENGTH then - nametag = string.sub(nametag, 1, MAX_MOB_NAME_LENGTH) - end - ent.nametag = nametag - --update_tag(ent) - end - - -- if not in creative then take item - if not mobs.is_creative(placer:get_player_name()) then - itemstack:take_item() - end - end - - return itemstack - end, - }) - -end - - diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua deleted file mode 100644 index 88ce3274bb..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua +++ /dev/null @@ -1,1128 +0,0 @@ -local math = math -local vector = vector -local string = string - -local tonumber = tonumber - -local minetest_yaw_to_dir = minetest.yaw_to_dir -local minetest_get_item_group = minetest.get_item_group -local minetest_get_node = minetest.get_node -local minetest_line_of_sight = minetest.line_of_sight -local minetest_get_node_light = minetest.get_node_light -local minetest_registered_nodes = minetest.registered_nodes -local flow = mobs.get_flowing_dir - -local DOUBLE_PI = math.pi * 2 -local THIRTY_SECONDTH_PI = DOUBLE_PI * 0.03125 - ---a simple helper function which is too small to move into movement.lua -local function quick_rotate(self,dtime) - self.yaw = self.yaw + THIRTY_SECONDTH_PI - if self.yaw > DOUBLE_PI then - self.yaw = self.yaw - DOUBLE_PI - end -end - ---a simple helper function for rounding ---http://lua-users.org/wiki/SimpleRound -local function round2(num, numDecimalPlaces) - return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num)) -end - - ---[[ - _ _ -| | | | -| | __ _ _ __ __| | -| | / _` | '_ \ / _` | -| |___| (_| | | | | (_| | -\_____/\__,_|_| |_|\__,_| -]]-- - ---this is basically reverse jump_check -local function cliff_check(self,dtime) - --mobs will flip out if they are falling without this - if self.object:get_velocity().y ~= 0 then - return false - end - - local pos = self.object:get_pos() - local dir = minetest_yaw_to_dir(self.yaw) - local collisionbox = self.object:get_properties().collisionbox - local radius = collisionbox[4] + 0.5 - - dir = vector.multiply(dir,radius) - - local free_fall = minetest_line_of_sight( - {x = pos.x + dir.x, y = pos.y, z = pos.z + dir.z}, - {x = pos.x + dir.x, y = pos.y - self.fear_height, z = pos.z + dir.z}) - - return free_fall -end - --- state switching logic (stand, walk, run, attacks) -local land_state_list_wandering = {"stand", "walk"} - -local function land_state_switch(self, dtime) - - --do math before sure not attacking, following, or running away so continue - --doing random walking for mobs if all states are not met - self.state_timer = self.state_timer - dtime - - --only run away - if self.skittish and self.state == "run" then - self.run_timer = self.run_timer - dtime - if self.run_timer > 0 then - return - end - --continue - end - - --ignore everything else if breeding - if self.breed_lookout_timer and self.breed_lookout_timer > 0 then - self.state = "breed" - return - --reset the state timer to get the mob out of - --the breed state - elseif self.state == "breed" then - self.state_timer = 0 - end - - --ignore everything else if following - if mobs.check_following(self) and - (not self.breed_lookout_timer or (self.breed_lookout_timer and self.breed_lookout_timer == 0)) and - (not self.breed_timer or (self.breed_timer and self.breed_timer == 0)) then - self.state = "follow" - return - --reset the state timer to get the mob out of - --the follow state - not the cleanest option - --but the easiest - elseif self.state == "follow" then - self.state_timer = 0 - end - - --only attack - if self.hostile and self.attacking then - self.state = "attack" - return - end - - --if finally reached here then do random wander - if self.state_timer <= 0 then - self.state_timer = math.random(4,10) + math.random() - self.state = land_state_list_wandering[math.random(1,#land_state_list_wandering)] - end - -end - --- states are executed here -local function land_state_execution(self, dtime) - - --[[ -- this is a debug which shows the timer and makes mobs breed 100 times faster - print(self.breed_timer) - if self.breed_timer > 0 then - self.breed_timer = self.breed_timer - (dtime * 100) - if self.breed_timer <= 0 then - self.breed_timer = 0 - end - end - ]]-- - - --no collisionbox exception - if not self.object:get_properties() then - return - end - - --timer to time out looking for mate - if self.breed_lookout_timer and self.breed_lookout_timer > 0 then - self.breed_lookout_timer = self.breed_lookout_timer - dtime - --looking for mate failed - if self.breed_lookout_timer <= 0 then - self.breed_lookout_timer = 0 - end - end - - --cool off after breeding - if self.breed_timer and self.breed_timer > 0 then - self.breed_timer = self.breed_timer - dtime - --do this to skip the first check, using as switch - if self.breed_timer <= 0 then - self.breed_timer = 0 - end - end - - - local pos = self.object:get_pos() - local collisionbox = self.object:get_properties().collisionbox - --get the center of the mob - pos.y = pos.y + (collisionbox[2] + collisionbox[5] / 2) - local current_node = minetest_get_node(pos).name - local float_now = false - - --recheck if in water or lava - if minetest_get_item_group(current_node, "water") ~= 0 or minetest_get_item_group(current_node, "lava") ~= 0 then - float_now = true - end - - --make slow falling mobs fall slow - if self.fall_slow then - local velocity = self.object:get_velocity() - if velocity then - if velocity.y < 0 then - --lua is acting really weird so we have to help it - if round2(self.object:get_acceleration().y, 1) == -self.gravity then - self.object:set_acceleration(vector.new(0,0,0)) - mobs.mob_fall_slow(self) - end - else - if round2(self.object:get_acceleration().y, 1) == 0 then - self.object:set_acceleration(vector.new(0,-self.gravity,0)) - end - end - end - end - - --calculate fall damage - if self.fall_damage then - mobs.calculate_fall_damage(self) - end - - if self.state == "stand" then - - --do animation - mobs.set_mob_animation(self, "stand") - - --set the velocity of the mob - mobs.set_velocity(self,0) - - --animation fixes for explosive mobs - if self.attack_type == "explode" then - mobs.reverse_explosion_animation(self,dtime) - end - - mobs.lock_yaw(self) - elseif self.state == "follow" then - --always look at players - mobs.set_yaw_while_following(self) - - --check distance - local distance_from_follow_person = vector.distance(self.object:get_pos(), self.following_person:get_pos()) - local distance_2d = mobs.get_2d_distance(self.object:get_pos(), self.following_person:get_pos()) - --don't push the player if too close - --don't spin around randomly - if self.follow_distance < distance_from_follow_person and self.minimum_follow_distance < distance_2d then - mobs.set_mob_animation(self, "run") - mobs.set_velocity(self,self.run_velocity) - - if mobs.jump_check(self) == 1 then - mobs.jump(self) - end - else - mobs.set_mob_animation(self, "stand") - mobs.set_velocity(self,0) - end - - elseif self.state == "walk" then - - self.walk_timer = self.walk_timer - dtime - - --reset the walk timer - if self.walk_timer <= 0 then - - --re-randomize the walk timer - self.walk_timer = math.random(1,6) + math.random() - - --set the mob into a random direction - self.yaw = (math.random() * (math.pi * 2)) - end - - --do animation - mobs.set_mob_animation(self, "walk") - - --enable rotation locking - mobs.movement_rotation_lock(self) - - --check for nodes to jump over - local node_in_front_of = mobs.jump_check(self) - - if node_in_front_of == 1 then - mobs.jump(self) - --turn if on the edge of cliff - --(this is written like this because unlike - --jump_check which simply tells the mob to jump - --this requires a mob to turn, removing the - --ease of a full implementation for it in a single - --function) - elseif node_in_front_of == 2 or (self.fear_height ~= 0 and cliff_check(self,dtime)) then - --turn 45 degrees if so - quick_rotate(self,dtime) - --stop the mob so it doesn't fall off - mobs.set_velocity(self,0) - end - - --only move forward if path is clear - if node_in_front_of == 0 or node_in_front_of == 1 then - --set the velocity of the mob - mobs.set_velocity(self,self.walk_velocity) - end - - --animation fixes for explosive mobs - if self.attack_type == "explode" then - mobs.reverse_explosion_animation(self,dtime) - end - - elseif self.state == "run" then - - --do animation - mobs.set_mob_animation(self, "run") - - --enable rotation locking - mobs.movement_rotation_lock(self) - - --check for nodes to jump over - local node_in_front_of = mobs.jump_check(self) - - if node_in_front_of == 1 then - mobs.jump(self) - --turn if on the edge of cliff - --(this is written like this because unlike - --jump_check which simply tells the mob to jump - --this requires a mob to turn, removing the - --ease of a full implementation for it in a single - --function) - elseif node_in_front_of == 2 or (self.fear_height ~= 0 and cliff_check(self,dtime)) then - --turn 45 degrees if so - quick_rotate(self,dtime) - --stop the mob so it doesn't fall off - mobs.set_velocity(self,0) - end - - --only move forward if path is clear - if node_in_front_of == 0 or node_in_front_of == 1 then - --set the velocity of the mob - mobs.set_velocity(self,self.run_velocity) - end - - elseif self.state == "attack" then - - --execute mob attack type - if self.attack_type == "explode" then - - mobs.explode_attack_walk(self, dtime) - - elseif self.attack_type == "punch" then - - mobs.punch_attack_walk(self,dtime) - - elseif self.attack_type == "projectile" then - - mobs.projectile_attack_walk(self,dtime) - - end - elseif self.state == "breed" then - - mobs.breeding_effect(self) - - local mate = mobs.look_for_mate(self) - - --found a mate - if mate then - mobs.set_yaw_while_breeding(self,mate) - mobs.set_velocity(self, self.walk_velocity) - - --smoosh together basically - if vector.distance(self.object:get_pos(), mate:get_pos()) <= self.breed_distance then - mobs.set_mob_animation(self, "stand") - if self.special_breed_timer == 0 then - self.special_breed_timer = 2 --breeding takes 2 seconds - end - - self.special_breed_timer = self.special_breed_timer - dtime - if self.special_breed_timer <= 0 then - - --pop a baby out, it's a miracle! - local baby_pos = vector.divide(vector.add(self.object:get_pos(), mate:get_pos()), 2) - minetest.add_entity(baby_pos, self.name, minetest.serialize({baby = true, grow_up_timer = self.grow_up_goal, bred = true})) - - mobs.play_sound_specific(self,"item_drop_pickup") - - self.special_breed_timer = 0 - self.breed_lookout_timer = 0 - self.breed_timer = self.breed_timer_cooloff - - mate:get_luaentity().special_breed_timer = 0 - mate:get_luaentity().breed_lookout_timer = 0 - mate:get_luaentity().breed_timer = self.breed_timer_cooloff -- can reuse because it's the same mob - end - else - mobs.set_mob_animation(self, "walk") - end - --couldn't find a mate, just stand there until the player pushes it towards one - --or the timer runs out - else - mobs.set_mob_animation(self, "stand") - mobs.set_velocity(self,0) - end - - end - if float_now then - mobs.float(self) - else - local acceleration = self.object:get_acceleration() - if acceleration and acceleration.y == 0 then - self.object:set_acceleration(vector.new(0,-self.gravity,0)) - end - end -end - - - - ---[[ - _____ _ -/ ___| (_) -\ `--.__ ___ _ __ ___ - `--. \ \ /\ / / | '_ ` _ \ -/\__/ /\ V V /| | | | | | | -\____/ \_/\_/ |_|_| |_| |_| -]]-- - - - --- state switching logic (stand, walk, run, attacks) -local swim_state_list_wandering = {"stand", "swim"} - -local function swim_state_switch(self, dtime) - self.state_timer = self.state_timer - dtime - if self.state_timer <= 0 then - self.state_timer = math.random(4,10) + math.random() - self.state = swim_state_list_wandering[math.random(1,#swim_state_list_wandering)] - end -end - - ---check if a mob needs to turn while swimming -local function swim_turn_check(self,dtime) - - local pos = self.object:get_pos() - pos.y = pos.y + 0.1 - local dir = minetest_yaw_to_dir(self.yaw) - - local collisionbox = self.object:get_properties().collisionbox - local radius = collisionbox[4] + 0.5 - - vector.multiply(dir, radius) - - local test_dir = vector.add(pos,dir) - - local green_flag_1 = minetest_get_item_group(minetest_get_node(test_dir).name, "solid") ~= 0 - - return green_flag_1 -end - ---this is to swap the built in engine acceleration modifier -local function swim_physics_swapper(self, inside_swim_node) - --should be swimming, gravity is applied, switch to floating - if inside_swim_node and self.object:get_acceleration().y ~= 0 then - self.object:set_acceleration(vector.new(0,0,0)) - --not be swim, gravity isn't applied, switch to falling - elseif not inside_swim_node and self.object:get_acceleration().y == 0 then - self.pitch = 0 - self.object:set_acceleration(vector.new(0,-self.gravity,0)) - end -end - - -local random_pitch_multiplier = {-1,1} --- states are executed here -local function swim_state_execution(self, dtime) - - local pos = self.object:get_pos() - - pos.y = pos.y + self.object:get_properties().collisionbox[5] - local current_node = minetest_get_node(pos).name - local inside_swim_node = false - - --quick scan everything to see if inside swim node - for _,id in pairs(self.swim_in) do - if id == current_node then - inside_swim_node = true - break - end - end - - --turn gravity on or off - swim_physics_swapper(self, inside_swim_node) - - --swim properly if inside swim node - if inside_swim_node then - - if self.state == "stand" then - - --do animation - mobs.set_mob_animation(self, "stand") - - mobs.set_swim_velocity(self,0) - - if self.tilt_swim then - mobs.set_static_pitch(self) - end - - mobs.lock_yaw(self) - elseif self.state == "swim" then - self.walk_timer = self.walk_timer - dtime - --reset the walk timer - if self.walk_timer <= 0 then - --re-randomize the walk timer - self.walk_timer = math.random(1,6) + math.random() - --set the mob into a random direction - self.yaw = (math.random() * (math.pi * 2)) - - --create a truly random pitch, since there is no easy access to pitch math that I can find - self.pitch = math.random() * math.random(1,3) * random_pitch_multiplier[math.random(1,2)] - end - - --do animation - mobs.set_mob_animation(self, "walk") - - --do a quick turn to make mob continuously move - --if in a fish tank or something - if swim_turn_check(self,dtime) then - quick_rotate(self,dtime) - end - - mobs.set_swim_velocity(self,self.walk_velocity) - - --only enable tilt swimming if enabled - if self.tilt_swim then - mobs.set_dynamic_pitch(self) - end - - --enable rotation locking - mobs.movement_rotation_lock(self) - end - --flop around if not inside swim node - else - --do animation - mobs.set_mob_animation(self, "stand") - - mobs.flop(self) - - if self.tilt_swim then - mobs.set_static_pitch(self) - end - end - -end - - ---[[ -______ _ -| ___| | -| |_ | |_ _ -| _| | | | | | -| | | | |_| | -\_| |_|\__, | - __/ | - |___/ -]]-- - --- state switching logic (stand, walk, run, attacks) -local fly_state_list_wandering = {"stand", "fly"} - -local function fly_state_switch(self, dtime) - - if self.hostile and self.attacking then - self.state = "attack" - return - end - - self.state_timer = self.state_timer - dtime - if self.state_timer <= 0 then - self.state_timer = math.random(4,10) + math.random() - self.state = fly_state_list_wandering[math.random(1,#fly_state_list_wandering)] - end -end - - ---check if a mob needs to turn while flying -local function fly_turn_check(self, dtime) - - local pos = self.object:get_pos() - pos.y = pos.y + 0.1 - local dir = minetest_yaw_to_dir(self.yaw) - - local collisionbox = self.object:get_properties().collisionbox - local radius = collisionbox[4] + 0.5 - - vector.multiply(dir, radius) - - local test_dir = vector.add(pos,dir) - - local green_flag_1 = minetest_get_item_group(minetest_get_node(test_dir).name, "solid") ~= 0 - - return green_flag_1 -end - ---this is to swap the built in engine acceleration modifier -local function fly_physics_swapper(self, inside_fly_node) - - --should be flyming, gravity is applied, switch to floating - if inside_fly_node and self.object:get_acceleration().y ~= 0 then - self.object:set_acceleration(vector.new(0,0,0)) - --not be fly, gravity isn't applied, switch to falling - elseif not inside_fly_node and self.object:get_acceleration().y == 0 then - self.pitch = 0 - self.object:set_acceleration(vector.new(0,-self.gravity,0)) - end -end - - -local random_pitch_multiplier = {-1,1} --- states are executed here -local function fly_state_execution(self, dtime) - local pos = self.object:get_pos() - pos.y = pos.y + 0.1 - local current_node = minetest_get_node(pos).name - local inside_fly_node = minetest_get_item_group(current_node, "solid") == 0 - - local float_now = false - --recheck if in water or lava - if minetest_get_item_group(current_node, "water") ~= 0 or minetest_get_item_group(current_node, "lava") ~= 0 then - inside_fly_node = false - float_now = true - end - - --turn gravity on or off - fly_physics_swapper(self,inside_fly_node) - - --fly properly if inside fly node - if inside_fly_node then - if self.state == "stand" then - - --do animation - mobs.set_mob_animation(self, "stand") - - mobs.set_fly_velocity(self,0) - - if self.tilt_fly then - mobs.set_static_pitch(self) - end - - mobs.lock_yaw(self) - - elseif self.state == "fly" then - - self.walk_timer = self.walk_timer - dtime - - --reset the walk timer - if self.walk_timer <= 0 then - --re-randomize the walk timer - self.walk_timer = math.random(1,6) + math.random() - --set the mob into a random direction - self.yaw = (math.random() * (math.pi * 2)) - - --create a truly random pitch, since there is no easy access to pitch math that I can find - self.pitch = math.random() * math.random(1,3) * random_pitch_multiplier[math.random(1,2)] - end - - --do animation - mobs.set_mob_animation(self, "walk") - - --do a quick turn to make mob continuously move - --if in a bird cage or something - if fly_turn_check(self,dtime) then - quick_rotate(self,dtime) - end - - if self.tilt_fly then - mobs.set_dynamic_pitch(self) - end - - mobs.set_fly_velocity(self,self.walk_velocity) - - --enable rotation locking - mobs.movement_rotation_lock(self) - elseif self.state == "attack" then - --execute mob attack type - --if self.attack_type == "explode" then - - --mobs.explode_attack_fly(self, dtime) - - --elseif self.attack_type == "punch" then - - --mobs.punch_attack_fly(self,dtime) - - if self.attack_type == "projectile" then - - mobs.projectile_attack_fly(self,dtime) - - end - end - else - --make the mob float - if self.floats and float_now then - mobs.set_velocity(self, 0) - - mobs.float(self) - - if self.tilt_fly then - mobs.set_static_pitch(self) - end - end - end -end - - ---[[ - ___ - |_ | - | |_ _ _ __ ___ _ __ - | | | | | '_ ` _ \| '_ \ -/\__/ / |_| | | | | | | |_) | -\____/ \__,_|_| |_| |_| .__/ - | | - |_| -]]-- - - ---check if a mob needs to turn while jumping ---[[local function jump_turn_check(self, dtime) - local pos = self.object:get_pos() - pos.y = pos.y + 0.1 - local dir = minetest_yaw_to_dir(self.yaw) - - local collisionbox = self.object:get_properties().collisionbox - local radius = collisionbox[4] + 0.5 - - vector.multiply(dir, radius) - - local test_dir = vector.add(pos,dir) - - local green_flag_1 = minetest_get_item_group(minetest_get_node(test_dir).name, "solid") ~= 0 - - return green_flag_1 -end]] - --- state switching logic (stand, jump, run, attacks) -local jump_state_list_wandering = {"stand", "jump"} - -local function jump_state_switch(self, dtime) - self.state_timer = self.state_timer - dtime - if self.state_timer <= 0 then - self.state_timer = math.random(4,10) + math.random() - self.state = jump_state_list_wandering[math.random(1,#jump_state_list_wandering)] - end -end - --- states are executed here -local function jump_state_execution(self, dtime) - local node_in_front_of = mobs.jump_check(self) - local pos = self.object:get_pos() - local collisionbox = self.object:get_properties().collisionbox - --get the center of the mob - pos.y = pos.y + (collisionbox[2] + collisionbox[5] / 2) - local current_node = minetest_get_node(pos).name - - local float_now = false - - --recheck if in water or lava - if minetest_get_item_group(current_node, "water") ~= 0 or minetest_get_item_group(current_node, "lava") ~= 0 then - float_now = true - end - - if self.state == "stand" then - - --do animation - mobs.set_mob_animation(self, "stand") - - --set the velocity of the mob - mobs.set_velocity(self,0) - - mobs.lock_yaw(self) - - elseif self.state == "jump" then - - self.walk_timer = self.walk_timer - dtime - - --reset the jump timer - if self.walk_timer <= 0 then - - --re-randomize the jump timer - self.walk_timer = math.random(1,6) + math.random() - - --set the mob into a random direction - self.yaw = (math.random() * (math.pi * 2)) - end - - --do animation - mobs.set_mob_animation(self, "walk") - - --enable rotation locking - mobs.movement_rotation_lock(self) - - --jumping mobs are more loosey goosey - if node_in_front_of == 1 then - quick_rotate(self,dtime) - end - - --only move forward if path is clear - mobs.jump_move(self,self.walk_velocity) - - elseif self.state == "run" then - print("run") - elseif self.state == "attack" then - print("attack") - end - if float_now then - mobs.float(self) - end -end - - - - ---[[ -___ ___ _ _ _ -| \/ | (_) | | (_) -| . . | __ _ _ _ __ | | ___ __ _ _ ___ -| |\/| |/ _` | | '_ \ | | / _ \ / _` | |/ __| -| | | | (_| | | | | | | |___| (_) | (_| | | (__ -\_| |_/\__,_|_|_| |_| \_____/\___/ \__, |_|\___| - __/ | - |___/ -]]-- - ---the main loop -function mobs.mob_step(self, dtime) - - --do not continue if non-existent - if not self or not self.object or not self.object:get_luaentity() then - self.object:remove() - return false - end - - - --DEBUG TIME! - --REMEMBER TO MOVE THIS AFTER DEATH CHECK - - --if self.has_head then - -- mobs.do_head_logic(self,dtime) - --end - - - - --if true then--DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG - -- return - --end - - --despawn mechanism - --don't despawned tamed or bred mobs - if not self.tamed and not self.bred then - self.lifetimer = self.lifetimer - dtime - if self.lifetimer <= 0 then - self.lifetimer = self.lifetimer_reset - if not mobs.check_for_player_within_area(self, 64) then - --print("removing in MAIN LOGIC!") - self.object:remove() - return - end - end - end - - --color modifier which coincides with the pause_timer - if self.old_health and self.health < self.old_health then - self.object:set_texture_mod("^[colorize:red:120") - --fix double death sound - if self.health > 0 then - mobs.play_sound(self,"damage") - end - end - self.old_health = self.health - - --do death logic (animation, poof, explosion, etc) - if self.health <= 0 or self.dead then - --play death sound once - if not self.played_death_sound then - self.dead = true - mobs.play_sound(self,"death") - self.played_death_sound = true - end - - mobs.death_logic(self, dtime) - - --this is here because the mob must continue to move - --while stunned before coming to a complete halt even during - --the death tilt - if self.pause_timer > 0 then - self.pause_timer = self.pause_timer - dtime - --perfectly reset pause_timer - if self.pause_timer < 0 then - self.pause_timer = 0 - end - end - - return - end - - mobs.random_sound_handling(self,dtime) - - --mobs drowning mechanic - if not self.breathes_in_water then - - local pos = self.object:get_pos() - - pos.y = pos.y + self.eye_height - - local node = minetest_get_node(pos).name - - if minetest_get_item_group(node, "water") ~= 0 then - self.breath = self.breath - dtime - - --reset breath when drowning - if self.breath <= 0 then - self.health = self.health - 4 - self.breath = 1 - self.pause_timer = 0.5 - end - - elseif self.breath < self.breath_max then - self.breath = self.breath + dtime - --clean timer reset - if self.breath > self.breath_max then - self.breath = self.breath_max - end - end - end - - --set mobs on fire when burned by sunlight - if self.ignited_by_sunlight then - local pos = self.object:get_pos() - pos.y = pos.y + 0.1 - - if self.burn_timer > 0 then - self.burn_timer = self.burn_timer - dtime - - if self.burn_timer <= 0 then - self.health = self.health - 4 - self.burn_timer = 0 - end - end - - if self.burn_timer == 0 then - local light_current, light_day = minetest_get_node_light(pos), minetest_get_node_light(pos, 0.5) - if light_current and light_day and light_current > 12 and light_day == 15 then - mcl_burning.set_on_fire(self.object, 1) - self.burn_timer = 1 --1.7 seconds - self.pause_timer = 0.4 - end - end - end - - --baby grows up - if self.baby then - --print(self.grow_up_timer) - --catch missing timer - if not self.grow_up_timer then - self.grow_up_timer = self.grow_up_goal - end - - self.grow_up_timer = self.grow_up_timer - dtime - - --baby grows up! - if self.grow_up_timer <= 0 then - self.grow_up_timer = 0 - mobs.baby_grow_up(self) - end - end - - --do custom mob instructions - if self.do_custom then - -- when false skip going any further - if self.do_custom(self, dtime) == false then - --this needs to be here or the mob becomes immortal - if self.pause_timer > 0 then - self.pause_timer = self.pause_timer - dtime - --perfectly reset pause_timer - if self.pause_timer <= 0 then - self.pause_timer = 0 - self.object:set_texture_mod("") - end - end - --this overrides internal lua collision detection - return - end - end - - local attacking = nil - - --scan for players within eyesight - if self.hostile then - --true for line_of_sight is debug - attacking = mobs.detect_closest_player_within_radius(self,true,self.view_range,self.eye_height) - - --go get the closest player - if attacking then - - self.memory = 6 --6 seconds of memory - - --set initial punch timer - if self.attacking == nil then - if self.attack_type == "punch" then - self.punch_timer = -1 - end - end - self.attacking = attacking - - --no player in area - elseif self.memory > 0 then - --try to remember - self.memory = self.memory - dtime - --get if memory player is within viewing range - if self.attacking and self.attacking:is_player() then - local distance = vector.distance(self.object:get_pos(), self.attacking:get_pos()) - if distance > self.view_range then - self.memory = 0 - end - --out of viewing range, forget em - else - self.memory = 0 - end - - if self.memory <= 0 then - - --reset states when coming out of hostile state - if self.attacking then - self.state_timer = -1 - end - - self.attacking = nil - self.memory = 0 - end - end - end - - --count down hostile cooldown timer when no players in range - if self.neutral and self.hostile and not attacking and self.hostile_cooldown_timer then - - self.hostile_cooldown_timer = self.hostile_cooldown_timer - dtime - - if self.hostile_cooldown_timer <= 0 then - self.hostile = false - self.hostile_cooldown_timer = 0 - end - end - - --mobs flow from Crafter - local pos = self.object:get_pos() - if pos then - local flow_dir = flow(pos) - if flow_dir then - flow_dir = vector.multiply(flow_dir,10) - local vel = self.object:get_velocity() - local acceleration = vector.new(flow_dir.x-vel.x,flow_dir.y-vel.y,flow_dir.z-vel.z) - acceleration = vector.multiply(acceleration, 0.01) - self.object:add_velocity(acceleration) - end - end - - --mob is stunned after being hit - if self.pause_timer > 0 then - self.pause_timer = self.pause_timer - dtime - --don't break eye contact - if self.hostile and self.attacking then - mobs.set_yaw_while_attacking(self) - end - - --perfectly reset pause_timer - if self.pause_timer <= 0 then - self.pause_timer = 0 - self.object:set_texture_mod("") - end - - --stop walking mobs from falling through the water - if not self.jump_only and not self.swim and not self.fly then - local pos = self.object:get_pos() - local collisionbox = self.object:get_properties().collisionbox - --get the center of the mob - pos.y = pos.y + (collisionbox[2] + collisionbox[5] / 2) - local current_node = minetest_get_node(pos).name - - --recheck if in water or lava - if minetest_get_item_group(current_node, "water") ~= 0 or minetest_get_item_group(current_node, "lava") ~= 0 then - mobs.float(self) - end - end - - --stop projectile mobs from being completely disabled while stunned - if self.projectile_timer and self.projectile_timer > 0.01 then - self.projectile_timer = self.projectile_timer - dtime - if self.projectile_timer < 0.01 then - self.projectile_timer = 0.01 - end - end - - return -- don't allow collision detection - --do normal ai - else - --jump only (like slimes) - if self.jump_only then - jump_state_switch(self, dtime) - jump_state_execution(self, dtime) - --swimming - elseif self.swim then - swim_state_switch(self, dtime) - swim_state_execution(self, dtime) - --flying - elseif self.fly then - fly_state_switch(self, dtime) - fly_state_execution(self,dtime) - --regular mobs that walk around - else - land_state_switch(self, dtime) - land_state_execution(self,dtime) - end - end - - --do not continue if non-existent - if not self or not self.object or not self.object:get_luaentity() then - self.object:remove() - return false - end - - --make it so mobs do not glitch out when walking around/jumping - mobs.swap_auto_step_height_adjust(self) - - - -- can mob be pushed, if so calculate direction -- do this last (overrides everything) - if self.pushable then - mobs.collision(self) - end - - --overrides absolutely everything - --mobs get stuck in cobwebs like players - if not self.ignores_cobwebs then - local pos = self.object:get_pos() - local node = pos and minetest_get_node(pos).name - if node == "mcl_core:cobweb" then - --fight the rest of the api - if self.object:get_acceleration().y ~= 0 then - self.object:set_acceleration(vector.new(0,0,0)) - end - mobs.stick_in_cobweb(self) - self.was_stuck_in_cobweb = true - else - --do not override other functions - if self.was_stuck_in_cobweb == true then - --return the mob back to normal - self.was_stuck_in_cobweb = nil - if self.object:get_acceleration().y == 0 and not self.swim and not self.fly then - self.object:set_acceleration(vector.new(0,-self.gravity,0)) - end - end - end - end - - self.old_velocity = self.object:get_velocity() - self.old_pos = self.object:get_pos() -end diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/animation.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/animation.lua deleted file mode 100644 index cea6d838b2..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/animation.lua +++ /dev/null @@ -1,257 +0,0 @@ -local math = math -local vector = vector - -local HALF_PI = math.pi/2 - - -local vector_direction = vector.direction -local vector_distance = vector.distance -local vector_new = vector.new - -local minetest_dir_to_yaw = minetest.dir_to_yaw - --- set defined animation -mobs.set_mob_animation = function(self, anim, fixed_frame) - - if not self.animation or not anim then - return - end - - if self.state == "die" and anim ~= "die" and anim ~= "stand" then - return - end - - - if (not self.animation[anim .. "_start"] or not self.animation[anim .. "_end"]) then - return - end - - --animations break if they are constantly set - --so we put this return gate to check if it is - --already at the animation we are trying to implement - if self.current_animation == anim then - return - end - - local a_start = self.animation[anim .. "_start"] - local a_end - - if fixed_frame then - a_end = a_start - else - a_end = self.animation[anim .. "_end"] - end - - self.object:set_animation({ - x = a_start, - y = a_end}, - self.animation[anim .. "_speed"] or self.animation.speed_normal or 15, - 0, self.animation[anim .. "_loop"] ~= false) - - self.current_animation = anim -end - - - - -mobs.death_effect = function(pos, yaw, collisionbox, rotate) - local min, max - if collisionbox then - min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} - max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} - else - min = { x = -0.5, y = 0, z = -0.5 } - max = { x = 0.5, y = 0.5, z = 0.5 } - end - if rotate then - min = vector.rotate(min, {x=0, y=yaw, z=math.pi/2}) - max = vector.rotate(max, {x=0, y=yaw, z=math.pi/2}) - min, max = vector.sort(min, max) - min = vector.multiply(min, 0.5) - max = vector.multiply(max, 0.5) - end - - minetest.add_particlespawner({ - amount = 50, - time = 0.001, - minpos = vector.add(pos, min), - maxpos = vector.add(pos, max), - minvel = vector_new(-5,-5,-5), - maxvel = vector_new(5,5,5), - minexptime = 1.1, - maxexptime = 1.5, - minsize = 1, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_mob_death.png^[colorize:#000000:255", - }) - - minetest.sound_play("mcl_mobs_mob_poof", { - pos = pos, - gain = 1.0, - max_hear_distance = 8, - }, true) -end - - ---this allows auto facedir rotation while making it so mobs ---don't look like wet noodles flopping around -mobs.movement_rotation_lock = function(self) - local current_engine_yaw = self.object:get_yaw() - local current_lua_yaw = self.yaw - - if current_engine_yaw > math.pi * 2 then - current_engine_yaw = current_engine_yaw - (math.pi * 2) - end - - if math.abs(current_engine_yaw - current_lua_yaw) <= 0.05 and self.object:get_properties().automatic_face_movement_dir then - self.object:set_properties{automatic_face_movement_dir = false} - elseif math.abs(current_engine_yaw - current_lua_yaw) > 0.05 and self.object:get_properties().automatic_face_movement_dir == false then - self.object:set_properties{automatic_face_movement_dir = self.rotate} - end -end - - ---this is used when a mob is chasing a player -mobs.set_yaw_while_attacking = function(self) - - if self.object:get_properties().automatic_face_movement_dir then - self.object:set_properties{automatic_face_movement_dir = false} - end - - --turn positions into pseudo 2d vectors - local pos1 = self.object:get_pos() - pos1.y = 0 - - local pos2 = self.attacking:get_pos() - pos2.y = 0 - - local new_direction = vector_direction(pos1,pos2) - local new_yaw = minetest_dir_to_yaw(new_direction) - - self.object:set_yaw(new_yaw) - self.yaw = new_yaw -end - ---this is used to unlock a mob's yaw after attacking -mobs.unlock_yaw = function(self) - if self.object:get_properties().automatic_face_movement_dir == false then - self.object:set_properties{automatic_face_movement_dir = self.rotate} - end -end - ---this is used to lock a mob's yaw when they're standing -mobs.lock_yaw = function(self) - if self.object:get_properties().automatic_face_movement_dir then - self.object:set_properties{automatic_face_movement_dir = false} - end -end - - -local calculate_pitch = function(self) - local pos = self.object:get_pos() - local pos2 = self.old_pos - - if pos == nil or pos2 == nil then - return false - end - - return minetest_dir_to_yaw(vector_new(vector_distance(vector_new(pos.x,0,pos.z),vector_new(pos2.x,0,pos2.z)),0,pos.y - pos2.y)) + HALF_PI -end - ---this is a helper function used to make mobs pitch rotation dynamically flow when flying/swimming -mobs.set_dynamic_pitch = function(self) - local pitch = calculate_pitch(self) - - if not pitch then - return - end - - local current_rotation = self.object:get_rotation() - - current_rotation.x = pitch - - self.object:set_rotation(current_rotation) - - self.pitch_switch = "dynamic" -end - ---this is a helper function used to make mobs pitch rotation reset when flying/swimming -mobs.set_static_pitch = function(self) - - if self.pitch_switch == "static" then - return - end - - local current_rotation = self.object:get_rotation() - - current_rotation.x = 0 - - self.object:set_rotation(current_rotation) - self.pitch_switch = "static" -end - ---this is a helper function for mobs explosion animation -mobs.handle_explosion_animation = function(self) - - --secondary catch-all - if not self.explosion_animation then - self.explosion_animation = 0 - end - - --the timer works from 0 for sense of a 0 based counting - --but this just bumps it up so it's usable in here - local explosion_timer_adjust = self.explosion_animation + 1 - - - local visual_size_modified = table.copy(self.visual_size_origin) - - visual_size_modified.x = visual_size_modified.x * (explosion_timer_adjust ^ 3) - visual_size_modified.y = visual_size_modified.y * explosion_timer_adjust - - self.object:set_properties({visual_size = visual_size_modified}) -end - - ---this is used when a mob is following player -mobs.set_yaw_while_following = function(self) - - if self.object:get_properties().automatic_face_movement_dir then - self.object:set_properties{automatic_face_movement_dir = false} - end - - --turn positions into pseudo 2d vectors - local pos1 = self.object:get_pos() - pos1.y = 0 - - local pos2 = self.following_person:get_pos() - pos2.y = 0 - - local new_direction = vector_direction(pos1,pos2) - local new_yaw = minetest_dir_to_yaw(new_direction) - - self.object:set_yaw(new_yaw) - self.yaw = new_yaw -end - ---this is used for when mobs breed -mobs.set_yaw_while_breeding = function(self, mate) - - if self.object:get_properties().automatic_face_movement_dir then - self.object:set_properties{automatic_face_movement_dir = false} - end - - --turn positions into pseudo 2d vectors - local pos1 = self.object:get_pos() - pos1.y = 0 - - local pos2 = mate:get_pos() - pos2.y = 0 - - local new_direction = vector_direction(pos1,pos2) - local new_yaw = minetest_dir_to_yaw(new_direction) - - self.object:set_yaw(new_yaw) - self.yaw = new_yaw -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/attack_type_instructions.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/attack_type_instructions.lua deleted file mode 100644 index ac10194e58..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/attack_type_instructions.lua +++ /dev/null @@ -1,347 +0,0 @@ -local vector_direction = vector.direction ---local minetest_dir_to_yaw = minetest.dir_to_yaw -local vector_distance = vector.distance -local vector_multiply = vector.multiply -local math_random = math.random - ---[[ - _ _ _ _ -| | | | | | | | -| | | | __ _ _ __ __| | | | -| | | | / _` | '_ \ / _` | | | -|_| | |___| (_| | | | | (_| | |_| -(_) \_____/\__,_|_| |_|\__,_| (_) -]]-- - - - ---[[ - _____ _ _ -| ___| | | | | -| |____ ___ __ | | ___ __| | ___ -| __\ \/ / '_ \| |/ _ \ / _` |/ _ \ -| |___> <| |_) | | (_) | (_| | __/ -\____/_/\_\ .__/|_|\___/ \__,_|\___| - | | - |_| -]]-- - -mobs.explode_attack_walk = function(self,dtime) - - --this needs an exception - if self.attacking == nil or not self.attacking:is_player() then - self.attacking = nil - return - end - - mobs.set_yaw_while_attacking(self) - - local distance_from_attacking = vector_distance(self.object:get_pos(), self.attacking:get_pos()) - - --make mob walk up to player within 2 nodes distance then start exploding - if distance_from_attacking >= self.reach and - --don't allow explosion to cancel unless out of the reach boundary - not (self.explosion_animation and self.explosion_animation > 0 and distance_from_attacking <= self.defuse_reach) then - - mobs.set_velocity(self, self.run_velocity) - mobs.set_mob_animation(self,"run") - - mobs.reverse_explosion_animation(self,dtime) - else - mobs.set_velocity(self,0) - - --this is the only way I can reference this without dumping extra data on all mobs - if not self.explosion_animation then - self.explosion_animation = 0 - end - - --play ignite sound - if self.explosion_animation == 0 then - mobs.play_sound(self,"attack") - end - - mobs.set_mob_animation(self,"stand") - - mobs.handle_explosion_animation(self) - - self.explosion_animation = self.explosion_animation + (dtime/2.5) - end - - --make explosive mobs jump - --check for nodes to jump over - --explosive mobs will just ride against walls for now - local node_in_front_of = mobs.jump_check(self) - if node_in_front_of == 1 then - mobs.jump(self) - end - - --do biggening explosion thing - if self.explosion_animation and self.explosion_animation > self.explosion_timer then - mcl_explosions.explode(self.object:get_pos(), self.explosion_strength,{ drop_chance = 1.0 }) - self.object:remove() - end -end - - ---this is a small helper function to make working with explosion animations easier -mobs.reverse_explosion_animation = function(self,dtime) - --if explosion animation was greater than 0 then reverse it - if self.explosion_animation and self.explosion_animation > 0 then - self.explosion_animation = self.explosion_animation - dtime - if self.explosion_animation < 0 then - self.explosion_animation = 0 - end - end - - mobs.handle_explosion_animation(self) -end - - - - ---[[ -______ _ -| ___ \ | | -| |_/ / _ _ __ ___| |__ -| __/ | | | '_ \ / __| '_ \ -| | | |_| | | | | (__| | | | -\_| \__,_|_| |_|\___|_| |_| -]]-- - - - -mobs.punch_attack_walk = function(self,dtime) - --this needs an exception - if self.attacking == nil or not self.attacking:is_player() then - self.attacking = nil - return - end - - local distance_from_attacking = mobs.get_2d_distance(self.object:get_pos(), self.attacking:get_pos()) - - if distance_from_attacking >= self.minimum_follow_distance then - mobs.set_velocity(self, self.run_velocity) - mobs.set_mob_animation(self, "run") - else - mobs.set_velocity(self, 0) - mobs.set_mob_animation(self, "stand") - end - - mobs.set_yaw_while_attacking(self) - - --make punchy mobs jump - --check for nodes to jump over - --explosive mobs will just ride against walls for now - local node_in_front_of = mobs.jump_check(self) - - if node_in_front_of == 1 then - mobs.jump(self) - end - - --mobs that can climb over stuff - if self.always_climb and node_in_front_of > 0 then - mobs.climb(self) - end - - - --auto reset punch_timer - if not self.punch_timer then - self.punch_timer = 0 - end - - if self.punch_timer > 0 then - self.punch_timer = self.punch_timer - dtime - end -end - -mobs.punch_attack = function(self) - - self.attacking:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = self.damage} - }, nil) - - self.punch_timer = self.punch_timer_cooloff - - - --knockback - local pos1 = self.object:get_pos() - pos1.y = 0 - local pos2 = self.attacking:get_pos() - pos2.y = 0 - local dir = vector_direction(pos1,pos2) - - dir = vector_multiply(dir,3) - - if self.attacking:get_velocity().y <= 1 then - dir.y = 5 - end - - self.attacking:add_velocity(dir) -end - - - - ---[[ -______ _ _ _ _ -| ___ \ (_) | | (_) | -| |_/ / __ ___ _ ___ ___| |_ _| | ___ -| __/ '__/ _ \| |/ _ \/ __| __| | |/ _ \ -| | | | | (_) | | __/ (__| |_| | | __/ -\_| |_| \___/| |\___|\___|\__|_|_|\___| - _/ | - |__/ -]]-- - - -mobs.projectile_attack_walk = function(self,dtime) - - --this needs an exception - if self.attacking == nil or not self.attacking:is_player() then - self.attacking = nil - return - end - - mobs.set_yaw_while_attacking(self) - - local distance_from_attacking = vector_distance(self.object:get_pos(), self.attacking:get_pos()) - - - if distance_from_attacking >= self.reach then - mobs.set_velocity(self, self.run_velocity) - mobs.set_mob_animation(self,"run") - else - mobs.set_velocity(self,0) - mobs.set_mob_animation(self,"stand") - end - - --do this to not load data into other mobs - if not self.projectile_timer then - self.projectile_timer = math_random(self.projectile_cooldown_min, self.projectile_cooldown_max) - end - - --run projectile timer - if self.projectile_timer > 0 then - self.projectile_timer = self.projectile_timer - dtime - - --shoot - if self.projectile_timer <= 0 then - --reset timer - self.projectile_timer = math_random(self.projectile_cooldown_min, self.projectile_cooldown_max) - mobs.shoot_projectile(self) - end - end - - --make shooty mobs jump - --check for nodes to jump over - --explosive mobs will just ride against walls for now - local node_in_front_of = mobs.jump_check(self) - if node_in_front_of == 1 then - mobs.jump(self) - end - -end - - - - - - - - - ---[[ - _ ______ _ _ -| | | ___| | | | -| | | |_ | |_ _ | | -| | | _| | | | | | | | -|_| | | | | |_| | |_| -(_) \_| |_|\__, | (_) - __/ | - |___/ -]]-- - - - - ---[[ -______ _ _ _ _ -| ___ \ (_) | | (_) | -| |_/ / __ ___ _ ___ ___| |_ _| | ___ -| __/ '__/ _ \| |/ _ \/ __| __| | |/ _ \ -| | | | | (_) | | __/ (__| |_| | | __/ -\_| |_| \___/| |\___|\___|\__|_|_|\___| - _/ | - |__/ -]]-- - -local random_pitch_multiplier = {-1,1} - -mobs.projectile_attack_fly = function(self, dtime) - --this needs an exception - if self.attacking == nil or not self.attacking:is_player() then - self.attacking = nil - return - end - - --this is specifically for random ghast movement - if self.fly_random_while_attack then - - --enable rotation locking - mobs.movement_rotation_lock(self) - - self.walk_timer = self.walk_timer - dtime - - --reset the walk timer - if self.walk_timer <= 0 then - --re-randomize the walk timer - self.walk_timer = math.random(1,6) + math.random() - --set the mob into a random direction - self.yaw = (math_random() * (math.pi * 2)) - --create a truly random pitch, since there is no easy access to pitch math that I can find - self.pitch = math_random() * math.random(1,3) * random_pitch_multiplier[math_random(1,2)] - end - - mobs.set_fly_velocity(self, self.run_velocity) - - else - - mobs.set_yaw_while_attacking(self) - - local distance_from_attacking = vector_distance(self.object:get_pos(), self.attacking:get_pos()) - - if distance_from_attacking >= self.reach then - mobs.set_pitch_while_attacking(self) - mobs.set_fly_velocity(self, self.run_velocity) - mobs.set_mob_animation(self,"run") - else - mobs.set_pitch_while_attacking(self) - mobs.set_fly_velocity(self, 0) - mobs.set_mob_animation(self,"stand") - end - end - - - --do this to not load data into other mobs - if not self.projectile_timer then - self.projectile_timer = math_random(self.projectile_cooldown_min, self.projectile_cooldown_max) - end - - --run projectile timer - if self.projectile_timer > 0 then - self.projectile_timer = self.projectile_timer - dtime - - --shoot - if self.projectile_timer <= 0 then - - if self.fly_random_while_attack then - mobs.set_yaw_while_attacking(self) - self.walk_timer = 0 - end - --reset timer - self.projectile_timer = math_random(self.projectile_cooldown_min, self.projectile_cooldown_max) - mobs.shoot_projectile(self) - end - end -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/breeding.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/breeding.lua deleted file mode 100644 index c50fb63001..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/breeding.lua +++ /dev/null @@ -1,179 +0,0 @@ -local minetest_get_objects_inside_radius = minetest.get_objects_inside_radius - -local vector = vector - ---check to see if someone nearby has some tasty food -mobs.check_following = function(self) -- returns true or false - --ignore - if not self.follow then - self.following_person = nil - return false - end - - --hey look, this thing works for passive mobs too! - local follower = mobs.detect_closest_player_within_radius(self,true,self.view_range,self.eye_height) - - --check if the follower is a player incase they log out - if follower and follower:is_player() then - local stack = follower:get_wielded_item() - --safety check - if not stack then - self.following_person = nil - return false - end - - local item_name = stack:get_name() - --all checks have passed, that guy has some good looking food - if item_name == self.follow then - self.following_person = follower - return true - end - end - - --everything failed - self.following_person = nil - return false -end - ---a function which attempts to make mobs enter ---the breeding state -mobs.enter_breed_state = function(self,clicker) - - --do not breed if baby - if self.baby then - return false - end - - --do not do anything if looking for mate or - --if cooling off from breeding - if self.breed_lookout_timer > 0 or self.breed_timer > 0 then - return false - end - - --if this is caught, that means something has gone - --seriously wrong - if not clicker or not clicker:is_player() then - return false - end - - local stack = clicker:get_wielded_item() - --safety check - if not stack then - return false - end - - local item_name = stack:get_name() - --all checks have passed, that guy has some good looking food - if item_name == self.follow then - if not minetest.is_creative_enabled(clicker:get_player_name()) then - stack:take_item() - clicker:set_wielded_item(stack) - end - self.breed_lookout_timer = self.breed_lookout_timer_goal - self.bred = true - mobs.play_sound_specific(self,"mobs_mc_animal_eat_generic") - return true - end - - --everything failed - return false -end - - ---find the closest mate in the area -mobs.look_for_mate = function(self) - - local pos1 = self.object:get_pos() - pos1.y = pos1.y + self.eye_height - - local mates_in_area = {} - local winner_mate = nil - local mates_detected = 0 - local radius = self.view_range - - --get mates in radius - for _,mate in pairs(minetest_get_objects_inside_radius(pos1, radius)) do - - --look for a breeding mate - if mate and mate:get_luaentity() - and mate:get_luaentity()._cmi_is_mob - and mate:get_luaentity().name == self.name - and mate:get_luaentity().breed_lookout_timer > 0 - and mate:get_luaentity() ~= self then - - local pos2 = mate:get_pos() - - local distance = vector.distance(pos1,pos2) - - if distance <= radius then - if minetest.line_of_sight then - --must add eye height or stuff breaks randomly because of - --seethrough nodes being a blocker (like grass) - if minetest.line_of_sight( - vector.new(pos1.x, pos1.y, pos1.z), - vector.new(pos2.x, pos2.y + mate:get_properties().eye_height, pos2.z) - ) then - mates_detected = mates_detected + 1 - mates_in_area[mate] = distance - end - else - mates_detected = mates_detected + 1 - mates_in_area[mate] = distance - end - end - end - end - - - --return if there's no one near by - if mates_detected <= 0 then --handle negative numbers for some crazy error that could possibly happen - return nil - end - - --do a default radius max - local shortest_distance = radius + 1 - - --sort through mates and find the closest mate - for mate,distance in pairs(mates_in_area) do - if distance < shortest_distance then - shortest_distance = distance - winner_mate = mate - end - end - return winner_mate -end - ---make the baby grow up -mobs.baby_grow_up = function(self) - self.baby = nil - self.visual_size = self.backup_visual_size - self.collisionbox = self.backup_collisionbox - self.selectionbox = self.backup_selectionbox - self.object:set_properties(self) -end - ---makes the baby grow up faster with diminishing returns -mobs.make_baby_grow_faster = function(self,clicker) - if clicker and clicker:is_player() then - local stack = clicker:get_wielded_item() - --safety check - if not stack then - return false - end - - local item_name = stack:get_name() - --all checks have passed, that guy has some good looking food - if item_name == self.follow then - self.grow_up_timer = self.grow_up_timer - (self.grow_up_timer * 0.10) --take 10 percent off - diminishing returns - - if not minetest.is_creative_enabled(clicker:get_player_name()) then - stack:take_item() - clicker:set_wielded_item(stack) - end - - mobs.play_sound_specific(self,"mobs_mc_animal_eat_generic") - return true - end - end - return false -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/collision.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/collision.lua deleted file mode 100644 index ed9aec6cd4..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/collision.lua +++ /dev/null @@ -1,135 +0,0 @@ -local minetest_get_objects_inside_radius = minetest.get_objects_inside_radius - -local math_random = math.random -local vector_multiply = vector.multiply - -local vector_direction = vector.direction - -local integer_test = {-1,1} - -mobs.collision = function(self) - local pos = self.object:get_pos() - - if not self or not self.object or not self.object:get_luaentity() then - return - end - - --do collision detection from the base of the mob - local collisionbox = self.object:get_properties().collisionbox - - pos.y = pos.y + collisionbox[2] - - local collision_boundary = collisionbox[4] - - local radius = collision_boundary - - if collisionbox[5] > collision_boundary then - radius = collisionbox[5] - end - - local collision_count = 0 - - - local check_for_attack = false - - if self.attack_type == "punch" and self.hostile and self.attacking then - check_for_attack = true - end - - for _,object in ipairs(minetest_get_objects_inside_radius(pos, radius*1.25)) do - if object and object ~= self.object and (object:is_player() or (object:get_luaentity() and object:get_luaentity()._cmi_is_mob == true and object:get_luaentity().health > 0)) and - --don't collide with rider, rider don't collide with thing - (not object:get_attach() or (object:get_attach() and object:get_attach() ~= self.object)) and - (not self.object:get_attach() or (self.object:get_attach() and self.object:get_attach() ~= object)) then - --stop infinite loop - collision_count = collision_count + 1 - --mob cramming - if collision_count > 30 then - self.health = -20 - break - end - - local pos2 = object:get_pos() - - local object_collisionbox = object:get_properties().collisionbox - - pos2.y = pos2.y + object_collisionbox[2] - - local object_collision_boundary = object_collisionbox[4] - - - --this is checking the difference of the object collided with's possision - --if positive top of other object is inside (y axis) of current object - local y_base_diff = (pos2.y + object_collisionbox[5]) - pos.y - - local y_top_diff = (pos.y + collisionbox[5]) - pos2.y - - - local distance = vector.distance(vector.new(pos.x,0,pos.z),vector.new(pos2.x,0,pos2.z)) - - if distance <= collision_boundary + object_collision_boundary and y_base_diff >= 0 and y_top_diff >= 0 then - - local dir = vector.direction(pos,pos2) - - dir.y = 0 - - --eliminate mob being stuck in corners - if dir.x == 0 and dir.z == 0 then - --slightly adjust mob position to prevent equal length - --corner/wall sticking - dir.x = dir.x + ((math_random()/10)*integer_test[math.random(1,2)]) - dir.z = dir.z + ((math_random()/10)*integer_test[math.random(1,2)]) - end - - local velocity = dir - - --0.5 is the max force multiplier - local force = 0.5 - (0.5 * distance / (collision_boundary + object_collision_boundary)) - - local vel1 = vector.multiply(velocity, -1.5) - local vel2 = vector.multiply(velocity, 1.5) - - vel1 = vector.multiply(vel1, force * 10) - vel2 = vector.multiply(vel2, force) - - if object:is_player() then - vel2 = vector_multiply(vel2, 2.5) - - --integrate mob punching into collision detection - if check_for_attack and self.punch_timer <= 0 then - if object == self.attacking then - mobs.punch_attack(self) - end - end - end - self.object:add_velocity(vel1) - object:add_velocity(vel2) - end - end - end -end - - ---this is used for arrow collisions -mobs.arrow_hit = function(self, player) - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = self._damage} - }, nil) - - - --knockback - local pos1 = self.object:get_pos() - pos1.y = 0 - local pos2 = player:get_pos() - pos2.y = 0 - local dir = vector_direction(pos1,pos2) - - dir = vector_multiply(dir,3) - - if player:get_velocity().y <= 1 then - dir.y = 5 - end - - player:add_velocity(dir) -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua deleted file mode 100644 index 4e6b7ca462..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua +++ /dev/null @@ -1,161 +0,0 @@ -local minetest_add_item = minetest.add_item ---local minetest_sound_play = minetest.sound_play - -local math_pi = math.pi -local math_random = math.random -local math_floor = math.floor -local HALF_PI = math_pi / 2 - -local vector_new = vector.new - - --- drop items -local item_drop = function(self, cooked, looting_level) - - looting_level = looting_level or 0 - - -- no drops for child mobs (except monster) - if (self.child and self.type ~= "monster") then - return - end - - local obj, item - local pos = self.object:get_pos() - - self.drops = self.drops or {} -- nil check - - for n = 1, #self.drops do - local dropdef = self.drops[n] - local chance = 1 / dropdef.chance - local looting_type = dropdef.looting - - if looting_level > 0 then - local chance_function = dropdef.looting_chance_function - if chance_function then - chance = chance_function(looting_level) - elseif looting_type == "rare" then - chance = chance + (dropdef.looting_factor or 0.01) * looting_level - end - end - - local num = 0 - local do_common_looting = (looting_level > 0 and looting_type == "common") - if math_random() < chance then - num = math_random(dropdef.min or 1, dropdef.max or 1) - elseif not dropdef.looting_ignore_chance then - do_common_looting = false - end - - if do_common_looting then - num = num + math_floor(math_random(0, looting_level) + 0.5) - end - - if num > 0 then - item = dropdef.name - - -- cook items when true - if cooked then - - local output = minetest.get_craft_result({ - method = "cooking", - width = 1, - items = {item}, - }) - - if output and output.item and not output.item:is_empty() then - item = output.item:get_name() - end - end - - -- add item if it exists - for x = 1, num do - obj = minetest_add_item(pos, ItemStack(item .. " " .. 1)) - end - - if obj and obj:get_luaentity() then - - obj:set_velocity({ - x = math_random(-10, 10) / 9, - y = 6, - z = math_random(-10, 10) / 9, - }) - elseif obj then - obj:remove() -- item does not exist - end - end - end - - self.drops = {} -end - - -mobs.death_logic = function(self, dtime) - - --stop crashing game when object is nil - if not self or not self.object or not self.object:get_luaentity() then - return - end - - self.death_animation_timer = self.death_animation_timer + dtime - - --get all attached entities and sort through them - local attached_entities = self.object:get_children() - if #attached_entities > 0 then - for _,entity in pairs(attached_entities) do - --kick the player off - if entity:is_player() then - mobs.detach(entity) - --kick mobs off - --if there is scaling issues, this needs an additional check - else - entity:set_detach() - end - end - end - - --stop mob from getting in the way of other mobs you're fighting - if self.object:get_properties().pointable then - self.object:set_properties({pointable = false}) - end - - --the final POOF of a mob despawning - if self.death_animation_timer >= 1.25 then - item_drop(self,false,1) - mobs.death_effect(self) - mcl_experience.throw_xp(self.object:get_pos(), math_random(self.xp_min, self.xp_max)) - if self.on_die then - self.on_die(self, self.object:get_pos()) - end - self.object:remove() - return - end - - --I'm sure there's a more efficient way to do this - --but this is the easiest, easier to work with 1 variable synced - --this is also not smooth - local death_animation_roll = self.death_animation_timer * 2 -- * 2 to make it faster - if death_animation_roll > 1 then - death_animation_roll = 1 - end - - local rot = self.object:get_rotation() --(no pun intended) - - rot.z = death_animation_roll * HALF_PI - - self.object:set_rotation(rot) - - mobs.set_mob_animation(self,"stand", true) - - - --flying and swimming mobs just fall down - if self.fly or self.swim then - if self.object:get_acceleration().y ~= -self.gravity then - self.object:set_acceleration(vector_new(0,-self.gravity,0)) - end - end - - --when landing allow mob to slow down and just fall if in air - if self.pause_timer <= 0 then - mobs.set_velocity(self,0) - end -end diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/environment.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/environment.lua deleted file mode 100644 index 5c431135e8..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/environment.lua +++ /dev/null @@ -1,250 +0,0 @@ -local minetest_line_of_sight = minetest.line_of_sight ---local minetest_dir_to_yaw = minetest.dir_to_yaw -local minetest_yaw_to_dir = minetest.yaw_to_dir -local minetest_get_node = minetest.get_node -local minetest_get_item_group = minetest.get_item_group -local minetest_get_objects_inside_radius = minetest.get_objects_inside_radius -local minetest_get_node_or_nil = minetest.get_node_or_nil -local minetest_registered_nodes = minetest.registered_nodes -local minetest_get_connected_players = minetest.get_connected_players - -local vector_new = vector.new -local vector_add = vector.add -local vector_multiply = vector.multiply -local vector_distance = vector.distance - -local table_copy = table.copy - -local math_abs = math.abs - --- default function when mobs are blown up with TNT ---[[local function do_tnt(obj, damage) - obj.object:punch(obj.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, nil) - return false, true, {} -end]] - ---a fast function to be able to detect only players without using objects_in_radius -mobs.detect_closest_player_within_radius = function(self, line_of_sight, radius, object_height_adder) - local pos1 = self.object:get_pos() - local players_in_area = {} - local winner_player = nil - local players_detected = 0 - - --get players in radius - for _,player in pairs(minetest.get_connected_players()) do - if player and player:get_hp() > 0 then - - local pos2 = player:get_pos() - - local distance = vector_distance(pos1,pos2) - - if distance <= radius then - if line_of_sight then - --must add eye height or stuff breaks randomly because of - --seethrough nodes being a blocker (like grass) - if minetest_line_of_sight( - vector_new(pos1.x, pos1.y + object_height_adder, pos1.z), - vector_new(pos2.x, pos2.y + player:get_properties().eye_height, pos2.z) - ) then - players_detected = players_detected + 1 - players_in_area[player] = distance - end - else - players_detected = players_detected + 1 - players_in_area[player] = distance - end - end - end - end - - - --return if there's no one near by - if players_detected <= 0 then --handle negative numbers for some crazy error that could possibly happen - return nil - end - - --do a default radius max - local shortest_distance = radius + 1 - - --sort through players and find the closest player - for player,distance in pairs(players_in_area) do - if distance < shortest_distance then - shortest_distance = distance - winner_player = player - end - end - return winner_player -end - - ---check if a mob needs to jump -mobs.jump_check = function(self,dtime) - - local pos = self.object:get_pos() - pos.y = pos.y + 0.1 - local dir = minetest_yaw_to_dir(self.yaw) - - local collisionbox = self.object:get_properties().collisionbox - local radius = collisionbox[4] + 0.5 - - vector_multiply(dir, radius) - - --only jump if there's a node and a non-solid node above it - local test_dir = vector_add(pos,dir) - - local green_flag_1 = minetest_get_item_group(minetest_get_node(test_dir).name, "solid") ~= 0 - - test_dir.y = test_dir.y + 1 - - local green_flag_2 = minetest_get_item_group(minetest_get_node(test_dir).name, "solid") == 0 - - if green_flag_1 and green_flag_2 then - --can jump over node - return 1 - elseif green_flag_1 and not green_flag_2 then - --wall in front of mob - return 2 - end - --nothing to jump over - return 0 -end - --- a helper function to quickly turn neutral passive mobs hostile -local turn_hostile = function(self,detected_mob) - --drop in variables for attacking (stops crash) - detected_mob.punch_timer = 0 - --set to hostile - detected_mob.hostile = true - --hostile_cooldown timer is initialized here - detected_mob.hostile_cooldown_timer = detected_mob.hostile_cooldown - --set target to the same - detected_mob.attacking = self.attacking -end - ---allow hostile mobs to signal to other mobs ---to switch from neutal passive to neutral hostile -mobs.group_attack_initialization = function(self) - - --get basic data - local friends_list - - if self.group_attack == true then - friends_list = {self.name} - else - friends_list = table_copy(self.group_attack) - end - - local objects_in_area = minetest_get_objects_inside_radius(self.object:get_pos(), self.view_range) - - --get the player's name - local name = self.attacking:get_player_name() - - --re-use local variable - local detected_mob - - --run through mobs in viewing distance - for _,object in pairs(objects_in_area) do - if object and object:get_luaentity() then - detected_mob = object:get_luaentity() - -- only alert members of same mob or friends - if detected_mob._cmi_is_mob and detected_mob.state ~= "attack" and detected_mob.owner ~= name then - if detected_mob.name == self.name then - turn_hostile(self,detected_mob) - else - for _,id in pairs(friends_list) do - if detected_mob.name == id then - turn_hostile(self,detected_mob) - break - end - end - end - end - - --THIS NEEDS TO BE RE-IMPLEMENTED AS A GLOBAL HIT IN MOB_PUNCH!! - -- have owned mobs attack player threat - --if obj.owner == name and obj.owner_loyal then - -- do_attack(obj, self.object) - --end - end - end -end - --- check if within physical map limits (-30911 to 30927) --- within_limits, wmin, wmax = nil, -30913, 30928 -mobs.within_limits = function(pos, radius) - local wmin, wmax - if mcl_vars then - if mcl_vars.mapgen_edge_min and mcl_vars.mapgen_edge_max then - wmin, wmax = mcl_vars.mapgen_edge_min, mcl_vars.mapgen_edge_max - end - end - return pos - and (pos.x - radius) > wmin and (pos.x + radius) < wmax - and (pos.y - radius) > wmin and (pos.y + radius) < wmax - and (pos.z - radius) > wmin and (pos.z + radius) < wmax -end - --- get node but use fallback for nil or unknown -mobs.node_ok = function(pos, fallback) - - fallback = fallback or mobs.fallback_node - - local node = minetest_get_node_or_nil(pos) - - if node and minetest_registered_nodes[node.name] then - return node - end - - return minetest_registered_nodes[fallback] -end - - ---a teleport functoin -mobs.teleport = function(self, target) - if self.do_teleport then - if self.do_teleport(self, target) == false then - return - end - end -end - ---a function used for despawning mobs -mobs.check_for_player_within_area = function(self, radius) - local pos1 = self.object:get_pos() - --get players in radius - for _,player in pairs(minetest_get_connected_players()) do - if player and player:get_hp() > 0 then - local pos2 = player:get_pos() - local distance = vector_distance(pos1,pos2) - if distance < radius then - --found a player - return true - end - end - end - --did not find a player - return false -end - - ---a simple helper function for mobs following -mobs.get_2d_distance = function(pos1,pos2) - pos1.y = 0 - pos2.y = 0 - return vector_distance(pos1, pos2) -end - --- fall damage onto solid ground -mobs.calculate_fall_damage = function(self) - if self.old_velocity and self.old_velocity.y < -7 and self.object:get_velocity().y == 0 then - local vel = self.object:get_velocity() - if vel then - local damage = math_abs(self.old_velocity.y + 7) * 2 - self.pause_timer = 0.4 - self.health = self.health - damage - end - end -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/flow_lib.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/flow_lib.lua deleted file mode 100644 index aa64bfb4e6..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/flow_lib.lua +++ /dev/null @@ -1,78 +0,0 @@ ---this is from https://github.com/HybridDog/builtin_item/blob/e6dfd9dce86503b3cbd1474257eca5f6f6ca71c2/init.lua#L50 -local -minetest,vector,math,pairs,minetest_get_node,vector_subtract,minetest_registered_nodes -= -minetest,vector,math,pairs,minetest.get_node,vector.subtract,minetest.registered_nodes - -local tab -local n -local function get_nodes(pos) - tab,n = {},1 - for i = -1,1,2 do - for _,p in pairs({ - {x=pos.x+i, y=pos.y, z=pos.z}, - {x=pos.x, y=pos.y, z=pos.z+i} - }) do - tab[n] = {p, minetest_get_node(p)} - n = n+1 - end - end - return tab -end - - -local data -local param2 -local nd -local par2 -local name -local tmp -local c_node -function mobs.get_flowing_dir(pos) - c_node = minetest_get_node(pos).name - if c_node ~= "mcl_core:water_flowing" and c_node ~= "mcl_core:water" then - return nil - end - data = get_nodes(pos) - param2 = minetest_get_node(pos).param2 - if param2 > 7 then - return nil - end - if c_node == "mcl_core:water" then - for _,i in pairs(data) do - nd = i[2] - name = nd.name - par2 = nd.param2 - if name == "mcl_core:water_flowing" and par2 == 7 then - return(vector_subtract(i[1],pos)) - end - end - end - for _,i in pairs(data) do - nd = i[2] - name = nd.name - par2 = nd.param2 - if name == "mcl_core:water_flowing" and par2 < param2 then - return(vector_subtract(i[1],pos)) - end - end - for _,i in pairs(data) do - nd = i[2] - name = nd.name - par2 = nd.param2 - if name == "mcl_core:water_flowing" and par2 >= 11 then - return(vector_subtract(i[1],pos)) - end - end - for _,i in pairs(data) do - nd = i[2] - name = nd.name - par2 = nd.param2 - tmp = minetest_registered_nodes[name] - if tmp and not tmp.walkable and name ~= "mcl_core:water_flowing" and name ~= "mcl_core:water" then - return(vector_subtract(i[1],pos)) - end - end - - return nil -end diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/head_logic.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/head_logic.lua deleted file mode 100644 index 0f5615504d..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/head_logic.lua +++ /dev/null @@ -1,98 +0,0 @@ -local math = math -local vector = vector - ---converts yaw to degrees -local degrees = function(yaw) - return yaw*180.0/math.pi -end - -mobs.do_head_logic = function(self,dtime) - - local player = minetest.get_player_by_name("singleplayer") - - local look_at = player:get_pos() - look_at.y = look_at.y + player:get_properties().eye_height - - local pos = self.object:get_pos() - - local body_yaw = self.object:get_yaw() - - local body_dir = minetest.yaw_to_dir(body_yaw) - - pos.y = pos.y + self.head_height_offset - - local head_offset = vector.multiply(body_dir, self.head_direction_offset) - - pos = vector.add(pos, head_offset) - - minetest.add_particle({ - pos = pos, - velocity = {x=0, y=0, z=0}, - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.2, - size = 1, - texture = "default_dirt.png", - }) - - local bone_pos = vector.new(0,0,0) - - --(horizontal) - bone_pos.y = self.head_bone_pos_y - - --(vertical) - bone_pos.z = self.head_bone_pos_z - - --print(yaw) - - --local _, bone_rot = self.object:get_bone_position("head") - - --bone_rot.x = bone_rot.x + (dtime * 10) - --bone_rot.z = bone_rot.z + (dtime * 10) - - local head_yaw = minetest.dir_to_yaw(vector.direction(pos,look_at)) - body_yaw - - if self.reverse_head_yaw then - head_yaw = head_yaw * -1 - end - - --over rotation protection - --stops radians from going out of spec - if head_yaw > math.pi then - head_yaw = head_yaw - (math.pi * 2) - elseif head_yaw < -math.pi then - head_yaw = head_yaw + (math.pi * 2) - end - - - local check_failed = false - --upper check + 90 degrees or upper math.radians (3.14/2) - if head_yaw > math.pi - (math.pi/2) then - head_yaw = 0 - check_failed = true - --lower check - 90 degrees or lower negative math.radians (-3.14/2) - elseif head_yaw < -math.pi + (math.pi/2) then - head_yaw = 0 - check_failed = true - end - - local head_pitch = 0 - - --DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG - --head_yaw = 0 - --DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG - - if not check_failed then - head_pitch = minetest.dir_to_yaw(vector.new(vector.distance(vector.new(pos.x,0,pos.z),vector.new(look_at.x,0,look_at.z)),0,pos.y-look_at.y))+(math.pi/2) - end - - if self.head_pitch_modifier then - head_pitch = head_pitch + self.head_pitch_modifier - end - - if self.swap_y_with_x then - self.object:set_bone_position(self.head_bone, bone_pos, vector.new(degrees(head_pitch),degrees(head_yaw),0)) - else - self.object:set_bone_position(self.head_bone, bone_pos, vector.new(degrees(head_pitch),0,degrees(head_yaw))) - end - --set_bone_position([bone, position, rotation]) -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/interaction.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/interaction.lua deleted file mode 100644 index fa5b312102..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/interaction.lua +++ /dev/null @@ -1,276 +0,0 @@ -local minetest_after = minetest.after -local minetest_sound_play = minetest.sound_play -local minetest_dir_to_yaw = minetest.dir_to_yaw - -local math = math -local vector = vector - -local MAX_MOB_NAME_LENGTH = 30 - -local mod_hunger = minetest.get_modpath("mcl_hunger") - -mobs.feed_tame = function(self) - return nil -end - --- Code to execute before custom on_rightclick handling -local function on_rightclick_prefix(self, clicker) - local item = clicker:get_wielded_item() - - -- Name mob with nametag - if not self.ignores_nametag and item:get_name() == "mcl_mobs:nametag" then - - local tag = item:get_meta():get_string("name") - if tag ~= "" then - if string.len(tag) > MAX_MOB_NAME_LENGTH then - tag = string.sub(tag, 1, MAX_MOB_NAME_LENGTH) - end - self.nametag = tag - - mobs.update_tag(self) - - if not mobs.is_creative(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - return true - end - - end - return false -end - --- I have no idea what this does -mobs.create_mob_on_rightclick = function(on_rightclick) - return function(self, clicker) - --don't allow rightclicking dead mobs - if self.health <= 0 then - return - end - local stop = on_rightclick_prefix(self, clicker) - if (not stop) and (on_rightclick) then - on_rightclick(self, clicker) - end - end -end - - --- deal damage and effects when mob punched -mobs.mob_punch = function(self, hitter, tflp, tool_capabilities, dir) - --don't do anything if the mob is already dead - if self.health <= 0 then - return - end - - --neutral passive mobs switch to neutral hostile - if self.neutral then - --drop in variables for attacking (stops crash) - self.attacking = hitter - self.punch_timer = 0 - self.hostile = true - --hostile_cooldown timer is initialized here - self.hostile_cooldown_timer = self.hostile_cooldown - - --initialize the group attack (check for other mobs in area, make them neutral hostile) - if self.group_attack then - mobs.group_attack_initialization(self) - end - end - - --turn skittish mobs away and RUN - if self.skittish then - - self.state = "run" - - self.run_timer = 5 --arbitrary 5 seconds - - local pos1 = self.object:get_pos() - pos1.y = 0 - local pos2 = hitter:get_pos() - pos2.y = 0 - - - local dir = vector.direction(pos2,pos1) - - local yaw = minetest_dir_to_yaw(dir) - - self.yaw = yaw - end - - -- custom punch function - if self.do_punch then - -- when false skip going any further - if self.do_punch(self, hitter, tflp, tool_capabilities, dir) == false then - return - end - end - - --don't do damage until pause timer resets - if self.pause_timer > 0 then - return - end - - -- error checking when mod profiling is enabled - if not tool_capabilities then - minetest.log("warning", "[mobs_mc] Mod profiling enabled, damage not enabled") - return - end - - local is_player = hitter:is_player() - - -- punch interval - local weapon = hitter:get_wielded_item() - - --local punch_interval = 1.4 - - -- exhaust attacker - if mod_hunger and is_player then - mcl_hunger.exhaust(hitter:get_player_name(), mcl_hunger.EXHAUST_ATTACK) - end - - -- calculate mob damage - local damage = 0 - local armor = self.object:get_armor_groups() or {} - - --calculate damage groups - for group,_ in pairs( (tool_capabilities.damage_groups or {}) ) do - damage = damage + (tool_capabilities.damage_groups[group] or 0) * ((armor[group] or 0) / 100.0) - end - - if weapon then - local fire_aspect_level = mcl_enchanting.get_enchantment(weapon, "fire_aspect") - if fire_aspect_level > 0 then - mcl_burning.set_on_fire(self.object, fire_aspect_level * 4) - end - end - - -- check for tool immunity or special damage - for n = 1, #self.immune_to do - if self.immune_to[n][1] == weapon:get_name() then - damage = self.immune_to[n][2] or 0 - break - end - end - - -- healing - if damage <= -1 then - self.health = self.health - math.floor(damage) - return - end - - --if tool_capabilities then - -- punch_interval = tool_capabilities.full_punch_interval or 1.4 - --end - - -- add weapon wear manually - -- Required because we have custom health handling ("health" property) - --minetest_is_creative_enabled("") ~= true --removed for now - if tool_capabilities then - if tool_capabilities.punch_attack_uses then - -- Without this delay, the wear does not work. Quite hacky ... - minetest_after(0, function(name) - local player = minetest.get_player_by_name(name) - if not player then return end - local weapon = hitter:get_wielded_item(player) - local def = weapon:get_definition() - if def.tool_capabilities and def.tool_capabilities.punch_attack_uses then - local wear = math.floor(65535/tool_capabilities.punch_attack_uses) - weapon:add_wear(wear) - hitter:set_wielded_item(weapon) - end - end, hitter:get_player_name()) - end - end - - - --if player is falling multiply damage by 1.5 - --critical hit - if hitter:get_velocity().y < 0 then - damage = damage * 1.5 - mobs.critical_effect(self) - end - - - -- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately. - if damage >= 0.1 then - - minetest_sound_play("default_punch", { - object = self.object, - max_hear_distance = 16 - }, true) - - -- do damage - self.health = self.health - damage - - - --0.4 seconds until you can hurt the mob again - self.pause_timer = 0.4 - - --don't do knockback from a rider - for _,obj in pairs(self.object:get_children()) do - if obj == hitter then - return - end - end - - -- knock back effect - local velocity = self.object:get_velocity() - - --2d direction - local pos1 = self.object:get_pos() - pos1.y = 0 - local pos2 = hitter:get_pos() - pos2.y = 0 - - local dir = vector.direction(pos2,pos1) - - local up = 3 - - -- if already in air then dont go up anymore when hit - if velocity.y ~= 0 then - up = 0 - end - - --0.75 for perfect distance to not be too easy, and not be too hard - local multiplier = 0.75 - - -- check if tool already has specific knockback value - local knockback_enchant = mcl_enchanting.get_enchantment(hitter:get_wielded_item(), "knockback") - if knockback_enchant and knockback_enchant > 0 then - multiplier = knockback_enchant + 1 --(starts from 1, 1 would be no change) - end - - --do this to sure you can punch a mob back when - --it's coming for you - if self.hostile then - multiplier = multiplier + 2 - end - dir = vector.multiply(dir,multiplier) - dir.y = up - --add the velocity - self.object:add_velocity(dir) - end -end - ---do internal per mob projectile calculations -mobs.shoot_projectile = function(self) - local pos1 = self.object:get_pos() - --add mob eye height - pos1.y = pos1.y + self.eye_height - - local pos2 = self.attacking:get_pos() - --add player eye height - pos2.y = pos2.y + self.attacking:get_properties().eye_height - - --get direction - local dir = vector.direction(pos1,pos2) - - --call internal shoot_arrow function - self.shoot_arrow(self,pos1,dir) -end - -mobs.update_tag = function(self) - self.object:set_properties({ - nametag = self.nametag, - }) -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/mob_effects.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/mob_effects.lua deleted file mode 100644 index 83df809928..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/mob_effects.lua +++ /dev/null @@ -1,150 +0,0 @@ -local minetest_add_particlespawner = minetest.add_particlespawner - -mobs.death_effect = function(self) - local pos = self.object:get_pos() - --local yaw = self.object:get_yaw() - local collisionbox = self.object:get_properties().collisionbox - - local min, max - - if collisionbox then - min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} - max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} - end - - minetest_add_particlespawner({ - amount = 50, - time = 0.0001, - minpos = vector.add(pos, min), - maxpos = vector.add(pos, max), - minvel = vector.new(-0.5,0.5,-0.5), - maxvel = vector.new(0.5,1,0.5), - minexptime = 1.1, - maxexptime = 1.5, - minsize = 1, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_mob_death.png", -- this particle looks strange - }) -end - -mobs.critical_effect = function(self) - - local pos = self.object:get_pos() - --local yaw = self.object:get_yaw() - local collisionbox = self.object:get_properties().collisionbox - - local min, max - - if collisionbox then - min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} - max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} - end - - minetest_add_particlespawner({ - amount = 10, - time = 0.0001, - minpos = vector.add(pos, min), - maxpos = vector.add(pos, max), - minvel = vector.new(-1,1,-1), - maxvel = vector.new(1,3,1), - minexptime = 0.7, - maxexptime = 1, - minsize = 1, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "heart.png^[colorize:black:255", - }) -end - ---when feeding a mob -mobs.feed_effect = function(self) - local pos = self.object:get_pos() - --local yaw = self.object:get_yaw() - local collisionbox = self.object:get_properties().collisionbox - - local min, max - - if collisionbox then - min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} - max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} - end - - minetest_add_particlespawner({ - amount = 10, - time = 0.0001, - minpos = vector.add(pos, min), - maxpos = vector.add(pos, max), - minvel = vector.new(-1,1,-1), - maxvel = vector.new(1,3,1), - minexptime = 0.7, - maxexptime = 1, - minsize = 1, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "heart.png^[colorize:gray:255", - }) -end - ---hearts when tamed -mobs.tamed_effect = function(self) - local pos = self.object:get_pos() - --local yaw = self.object:get_yaw() - local collisionbox = self.object:get_properties().collisionbox - - local min, max - - if collisionbox then - min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} - max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} - end - - minetest_add_particlespawner({ - amount = 30, - time = 0.0001, - minpos = vector.add(pos, min), - maxpos = vector.add(pos, max), - minvel = vector.new(-1,1,-1), - maxvel = vector.new(1,3,1), - minexptime = 0.7, - maxexptime = 1, - minsize = 1, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "heart.png", - }) -end - ---hearts when breeding -mobs.breeding_effect = function(self) - local pos = self.object:get_pos() - --local yaw = self.object:get_yaw() - local collisionbox = self.object:get_properties().collisionbox - - local min, max - - if collisionbox then - min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} - max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} - end - - minetest_add_particlespawner({ - amount = 2, - time = 0.0001, - minpos = vector.add(pos, min), - maxpos = vector.add(pos, max), - minvel = vector.new(-1,1,-1), - maxvel = vector.new(1,3,1), - minexptime = 0.7, - maxexptime = 1, - minsize = 1, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "heart.png", - }) -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/movement.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/movement.lua deleted file mode 100644 index d9698a0a75..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/movement.lua +++ /dev/null @@ -1,390 +0,0 @@ --- localize math functions -local math = math -local HALF_PI = math.pi / 2 -local DOUBLE_PI = math.pi * 2 - --- localize vector functions -local vector = vector - -local minetest_yaw_to_dir = minetest.yaw_to_dir -local minetest_dir_to_yaw = minetest.dir_to_yaw - -local DEFAULT_JUMP_HEIGHT = 5 -local DEFAULT_FLOAT_SPEED = 4 -local DEFAULT_CLIMB_SPEED = 3 - -mobs.stick_in_cobweb = function(self) - local current_velocity = self.object:get_velocity() - - local goal_velocity = vector.multiply(vector.normalize(current_velocity), 0.4) - - goal_velocity.y = -0.5 - - local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) - - --smooths out mobs a bit - if vector.length(new_velocity_addition) >= 0.0001 then - self.object:add_velocity(new_velocity_addition) - end -end - ---this is a generic float function -mobs.float = function(self) - - local acceleration = self.object:get_acceleration() - - if not acceleration then - return - end - - if acceleration.y ~= 0 then - self.object:set_acceleration({x=0, y=0, z=0}) - end - - local current_velocity = self.object:get_velocity() - - local goal_velocity = { - x = 0, - y = DEFAULT_FLOAT_SPEED, - z = 0, - } - - local new_velocity_addition = vector.subtract(goal_velocity, current_velocity) - - new_velocity_addition.x = 0 - new_velocity_addition.z = 0 - - --smooths out mobs a bit - if vector.length(new_velocity_addition) >= 0.0001 then - self.object:add_velocity(new_velocity_addition) - end -end - ---this is a generic climb function -mobs.climb = function(self) - - local current_velocity = self.object:get_velocity() - - local goal_velocity = { - x = 0, - y = DEFAULT_CLIMB_SPEED, - z = 0, - } - - local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) - - new_velocity_addition.x = 0 - new_velocity_addition.z = 0 - - --smooths out mobs a bit - if vector.length(new_velocity_addition) >= 0.0001 then - self.object:add_velocity(new_velocity_addition) - end -end - - - ---[[ - _ _ -| | | | -| | __ _ _ __ __| | -| | / _` | '_ \ / _` | -| |___| (_| | | | | (_| | -\_____/\__,_|_| |_|\__,_| -]] - - --- move mob in facing direction ---this has been modified to be internal ---internal = lua (self.yaw) ---engine = c++ (self.object:get_yaw()) -mobs.set_velocity = function(self, v) - - local yaw = (self.yaw or 0) - - local current_velocity = self.object:get_velocity() - - local goal_velocity = { - x = (math.sin(yaw) * -v), - y = 0, - z = (math.cos(yaw) * v), - } - - - local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) - - if vector.length(new_velocity_addition) > vector.length(goal_velocity) then - vector.multiply(new_velocity_addition, (vector.length(goal_velocity) / vector.length(new_velocity_addition))) - end - - new_velocity_addition.y = 0 - - --smooths out mobs a bit - if vector.length(new_velocity_addition) >= 0.0001 then - self.object:add_velocity(new_velocity_addition) - end -end - - - --- calculate mob velocity -mobs.get_velocity = function(self) - - local v = self.object:get_velocity() - - v.y = 0 - - if v then - return vector.length(v) - end - - return 0 -end - ---make mobs jump -mobs.jump = function(self, velocity) - - if self.object:get_velocity().y ~= 0 or not self.old_velocity or (self.old_velocity and self.old_velocity.y > 0) then - return - end - - --fallback velocity to allow modularity - velocity = velocity or DEFAULT_JUMP_HEIGHT - - self.object:add_velocity(vector.new(0,velocity,0)) -end - ---make mobs fall slowly -mobs.mob_fall_slow = function(self) - - local current_velocity = self.object:get_velocity() - - local goal_velocity = { - x = 0, - y = -2, - z = 0, - } - - - local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) - - new_velocity_addition.x = 0 - new_velocity_addition.z = 0 - - if vector.length(new_velocity_addition) > vector.length(goal_velocity) then - vector.multiply(new_velocity_addition, (vector.length(goal_velocity) / vector.length(new_velocity_addition))) - end - - new_velocity_addition.x = 0 - new_velocity_addition.z = 0 - - --smooths out mobs a bit - if vector.length(new_velocity_addition) >= 0.0001 then - self.object:add_velocity(new_velocity_addition) - end - -end - - ---[[ - _____ _ -/ ___| (_) -\ `--.__ ___ _ __ ___ - `--. \ \ /\ / / | '_ ` _ \ -/\__/ /\ V V /| | | | | | | -\____/ \_/\_/ |_|_| |_| |_| -]]-- - - - - ---make mobs flop -mobs.flop = function(self, velocity) - - if self.object:get_velocity().y ~= 0 or not self.old_velocity or (self.old_velocity and self.old_velocity.y > 0) then - return false - end - - mobs.set_velocity(self, 0) - - --fallback velocity to allow modularity - velocity = velocity or DEFAULT_JUMP_HEIGHT - - --create a random direction (2d yaw) - local dir = DOUBLE_PI * math.random() - - --create a random force value - local force = math.random(0,3) + math.random() - - --convert the yaw to a direction vector then multiply it times the force - local final_additional_force = vector.multiply(minetest_yaw_to_dir(dir), force) - - --place in the "flop" velocity to make the mob flop - final_additional_force.y = velocity - - self.object:add_velocity(final_additional_force) - - return true -end - - - --- move mob in facing direction ---this has been modified to be internal ---internal = lua (self.yaw) ---engine = c++ (self.object:get_yaw()) -mobs.set_swim_velocity = function(self, v) - - local yaw = (self.yaw or 0) - local pitch = (self.pitch or 0) - - if v == 0 then - pitch = 0 - end - - local current_velocity = self.object:get_velocity() - - local goal_velocity = { - x = (math.sin(yaw) * -v), - y = pitch, - z = (math.cos(yaw) * v), - } - - - local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) - - if vector.length(new_velocity_addition) > vector.length(goal_velocity) then - vector.multiply(new_velocity_addition, (vector.length(goal_velocity) / vector.length(new_velocity_addition))) - end - - --smooths out mobs a bit - if vector.length(new_velocity_addition) >= 0.0001 then - self.object:add_velocity(new_velocity_addition) - end -end - ---[[ -______ _ -| ___| | -| |_ | |_ _ -| _| | | | | | -| | | | |_| | -\_| |_|\__, | - __/ | - |___/ -]]-- - --- move mob in facing direction ---this has been modified to be internal ---internal = lua (self.yaw) ---engine = c++ (self.object:get_yaw()) -mobs.set_fly_velocity = function(self, v) - - local yaw = (self.yaw or 0) - local pitch = (self.pitch or 0) - - if v == 0 then - pitch = 0 - end - - local current_velocity = self.object:get_velocity() - - local goal_velocity = { - x = (math.sin(yaw) * -v), - y = pitch, - z = (math.cos(yaw) * v), - } - - - local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) - - if vector.length(new_velocity_addition) > vector.length(goal_velocity) then - vector.multiply(new_velocity_addition, (vector.length(goal_velocity) / vector.length(new_velocity_addition))) - end - - --smooths out mobs a bit - if vector.length(new_velocity_addition) >= 0.0001 then - self.object:add_velocity(new_velocity_addition) - end -end - ---a quick and simple pitch calculation between two vector positions -mobs.calculate_pitch = function(pos1, pos2) - - if pos1 == nil or pos2 == nil then - return false - end - - return minetest_dir_to_yaw(vector.new(vector.distance(vector.new(pos1.x,0,pos1.z),vector.new(pos2.x,0,pos2.z)),0,pos1.y - pos2.y)) + HALF_PI -end - ---make mobs fly up or down based on their y difference -mobs.set_pitch_while_attacking = function(self) - local pos1 = self.object:get_pos() - local pos2 = self.attacking:get_pos() - - local pitch = mobs.calculate_pitch(pos2,pos1) - - self.pitch = pitch -end - - - ---[[ - ___ - |_ | - | |_ _ _ __ ___ _ __ - | | | | | '_ ` _ \| '_ \ -/\__/ / |_| | | | | | | |_) | -\____/ \__,_|_| |_| |_| .__/ - | | - |_| -]]-- - ---special mob jump movement -mobs.jump_move = function(self, velocity) - - if self.object:get_velocity().y ~= 0 or not self.old_velocity or (self.old_velocity and self.old_velocity.y > 0) then - return - end - - --make the mob stick for a split second - mobs.set_velocity(self,0) - - --fallback velocity to allow modularity - local jump_height = DEFAULT_JUMP_HEIGHT - - local yaw = (self.yaw or 0) - - local current_velocity = self.object:get_velocity() - - local goal_velocity = { - x = (math.sin(yaw) * -velocity), - y = jump_height, - z = (math.cos(yaw) * velocity), - } - - - local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) - - if vector.length(new_velocity_addition) > vector.length(goal_velocity) then - vector.multiply(new_velocity_addition, (vector.length(goal_velocity) / vector.length(new_velocity_addition))) - end - - --smooths out mobs a bit - if vector.length(new_velocity_addition) >= 0.0001 then - self.object:add_velocity(new_velocity_addition) - end -end - ---make it so mobs do not glitch out and freak out ---when moving around over nodes -mobs.swap_auto_step_height_adjust = function(self) - local y_vel = self.object:get_velocity().y - - if y_vel == 0 and self.stepheight ~= self.stepheight_backup then - self.stepheight = self.stepheight_backup - elseif y_vel ~= 0 and self.stepheight ~= 0 then - self.stepheight = 0 - end -end diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/projectile_handling.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/projectile_handling.lua deleted file mode 100644 index a4b4c075ea..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/projectile_handling.lua +++ /dev/null @@ -1,43 +0,0 @@ -local GRAVITY = minetest.settings:get("movement_gravity")-- + 9.81 - -mobs.shoot_projectile_handling = function(arrow_item, pos, dir, yaw, shooter, power, damage, is_critical, bow_stack, collectable, gravity) - local obj = minetest.add_entity({x=pos.x,y=pos.y,z=pos.z}, arrow_item.."_entity") - if power == nil then - power = 19 - end - if damage == nil then - damage = 3 - end - - gravity = gravity or -GRAVITY - - local knockback - if bow_stack then - local enchantments = mcl_enchanting.get_enchantments(bow_stack) - if enchantments.power then - damage = damage + (enchantments.power + 1) / 4 - end - if enchantments.punch then - knockback = enchantments.punch * 3 - end - if enchantments.flame then - mcl_burning.set_on_fire(obj, math.huge) - end - end - obj:set_velocity({x=dir.x*power, y=dir.y*power, z=dir.z*power}) - obj:set_acceleration({x=0, y=gravity, z=0}) - obj:set_yaw(yaw-math.pi/2) - local le = obj:get_luaentity() - le._shooter = shooter - le._damage = damage - le._is_critical = is_critical - le._startpos = pos - le._knockback = knockback - le._collectable = collectable - - --play custom shoot sound - if shooter and shooter.shoot_sound then - minetest.sound_play(shooter.shoot_sound, {pos=pos, max_hear_distance=16}, true) - end - return obj -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/set_up.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/set_up.lua deleted file mode 100644 index 65ba764f66..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/set_up.lua +++ /dev/null @@ -1,224 +0,0 @@ -local math_random = math.random - -local minetest_settings = minetest.settings - --- CMI support check -local use_cmi = minetest.global_exists("cmi") - --- get entity staticdata -mobs.mob_staticdata = function(self) - --despawn mechanism - --don't despawned tamed or bred mobs - if not self.tamed and not self.bred then - if not mobs.check_for_player_within_area(self, 64) then - --print("removing SERIALIZED!") - self.object:remove() - return - end - end - - self.remove_ok = true - self.attack = nil - self.following = nil - - if use_cmi then - self.serialized_cmi_components = cmi.serialize_components(self._cmi_components) - end - - local tmp = {} - - for _,stat in pairs(self) do - - local t = type(stat) - - if t ~= "function" - and t ~= "nil" - and t ~= "userdata" - and _ ~= "_cmi_components" then - tmp[_] = self[_] - end - end - - return minetest.serialize(tmp) -end - - --- activate mob and reload settings -mobs.mob_activate = function(self, staticdata, def, dtime) - - -- remove monsters in peaceful mode - if self.type == "monster" and minetest_settings:get_bool("only_peaceful_mobs", false) then - mcl_burning.extinguish(self.object) - self.object:remove() - return - end - - -- load entity variables - local tmp = minetest.deserialize(staticdata) - - if tmp then - for _,stat in pairs(tmp) do - self[_] = stat - end - end - - --set up wandering - if not self.wandering then - self.wandering = true - end - - --clear animation - self.current_animation = nil - - -- select random texture, set model and size - if not self.base_texture then - - -- compatiblity with old simple mobs textures - if type(def.textures[1]) == "string" then - def.textures = {def.textures} - end - - self.base_texture = def.textures[math_random(1, #def.textures)] - self.base_mesh = def.mesh - self.base_size = self.visual_size - self.base_colbox = self.collisionbox - self.base_selbox = self.selectionbox - end - - -- for current mobs that dont have this set - if not self.base_selbox then - self.base_selbox = self.selectionbox or self.base_colbox - end - - -- set texture, model and size - local textures = self.base_texture - local mesh = self.base_mesh - local vis_size = self.base_size - local colbox = self.base_colbox - local selbox = self.base_selbox - - -- specific texture if gotten - if self.gotten == true - and def.gotten_texture then - textures = def.gotten_texture - end - - -- specific mesh if gotten - if self.gotten == true - and def.gotten_mesh then - mesh = def.gotten_mesh - end - - -- set baby mobs to half size - if self.baby == true then - - vis_size = { - x = self.base_size.x * self.baby_size, - y = self.base_size.y * self.baby_size, - } - - if def.child_texture then - textures = def.child_texture[1] - end - - colbox = { - self.base_colbox[1] * self.baby_size, - self.base_colbox[2] * self.baby_size, - self.base_colbox[3] * self.baby_size, - self.base_colbox[4] * self.baby_size, - self.base_colbox[5] * self.baby_size, - self.base_colbox[6] * self.baby_size - } - selbox = { - self.base_selbox[1] * self.baby_size, - self.base_selbox[2] * self.baby_size, - self.base_selbox[3] * self.baby_size, - self.base_selbox[4] * self.baby_size, - self.base_selbox[5] * self.baby_size, - self.base_selbox[6] * self.baby_size - } - end - - --stop mobs from reviving - if not self.dead and not self.health then - self.health = math_random (self.hp_min, self.hp_max) - end - - if not self.random_sound_timer then - self.random_sound_timer = math_random(self.random_sound_timer_min,self.random_sound_timer_max) - end - - if self.breath == nil then - self.breath = self.breath_max - end - - -- pathfinding init - self.path = {} - self.path.way = {} -- path to follow, table of positions - self.path.lastpos = {x = 0, y = 0, z = 0} - self.path.stuck = false - self.path.following = false -- currently following path? - self.path.stuck_timer = 0 -- if stuck for too long search for path - - -- Armor groups - -- immortal=1 because we use custom health - -- handling (using "health" property) - local armor - if type(self.armor) == "table" then - armor = table.copy(self.armor) - armor.immortal = 1 - else - armor = {immortal=1, fleshy = self.armor} - end - self.object:set_armor_groups(armor) - self.old_y = self.object:get_pos().y - self.old_health = self.health - self.sounds.distance = self.sounds.distance or 10 - self.textures = textures - self.mesh = mesh - self.collisionbox = colbox - self.selectionbox = selbox - self.visual_size = vis_size - self.standing_in = "ignore" - self.standing_on = "ignore" - self.jump_sound_cooloff = 0 -- used to prevent jump sound from being played too often in short time - self.opinion_sound_cooloff = 0 -- used to prevent sound spam of particular sound types - - self.texture_mods = {} - - self.v_start = false - self.timer = 0 - self.blinktimer = 0 - self.blinkstatus = false - - - --continue mob effect on server restart - if self.dead or self.health <= 0 then - self.object:set_texture_mod("^[colorize:red:120") - else - self.object:set_texture_mod("") - end - - -- set anything changed above - self.object:set_properties(self) - - --update_tag(self) - --mobs.set_animation(self, "stand") - - -- run on_spawn function if found - if self.on_spawn and not self.on_spawn_run then - if self.on_spawn(self) then - self.on_spawn_run = true -- if true, set flag to run once only - end - end - - -- run after_activate - if def.after_activate then - def.after_activate(self, staticdata, def, dtime) - end - - if use_cmi then - self._cmi_components = cmi.activate_components(self.serialized_cmi_components) - cmi.notify_activate(self.object, dtime) - end -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/sound_handling.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/sound_handling.lua deleted file mode 100644 index 98d2644e80..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/sound_handling.lua +++ /dev/null @@ -1,59 +0,0 @@ -local math_random = math.random - - ---generic call for sound handler for mobs (data access) -mobs.play_sound = function(self,sound) - local soundinfo = self.sounds - - if not soundinfo then - return - end - - local play_sound = soundinfo[sound] - - if not play_sound then - return - end - - mobs.play_sound_handler(self, play_sound) -end - - ---generic sound handler for mobs -mobs.play_sound_handler = function(self, sound) - local pitch = (100 + math_random(-15,15) + math_random()) / 100 - local distance = self.sounds.distance or 16 - - minetest.sound_play(sound, { - object = self.object, - gain = 1.0, - max_hear_distance = distance, - pitch = pitch, - }, true) -end - - ---random sound timing handler -mobs.random_sound_handling = function(self,dtime) - - self.random_sound_timer = self.random_sound_timer - dtime - - --play sound and reset timer - if self.random_sound_timer <= 0 then - mobs.play_sound(self,"random") - self.random_sound_timer = math_random(self.random_sound_timer_min,self.random_sound_timer_max) - end -end - ---used for playing a non-mob internal sound at random pitches -mobs.play_sound_specific = function(self,soundname) - local pitch = (100 + math_random(-15,15) + math_random()) / 100 - local distance = self.sounds.distance or 16 - - minetest.sound_play(soundname, { - object = self.object, - gain = 1.0, - max_hear_distance = distance, - pitch = pitch, - }, true) -end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/spawning.lua b/mods/ENTITIES/mcl_mobs/api/spawning.lua deleted file mode 100644 index bf07ca94d5..0000000000 --- a/mods/ENTITIES/mcl_mobs/api/spawning.lua +++ /dev/null @@ -1,709 +0,0 @@ ---lua locals -local get_node = minetest.get_node -local get_item_group = minetest.get_item_group -local get_node_light = minetest.get_node_light -local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air -local get_biome_name = minetest.get_biome_name -local get_objects_inside_radius = minetest.get_objects_inside_radius -local get_connected_players = minetest.get_connected_players - - -local math_random = math.random -local math_floor = math.floor ---local max = math.max - ---local vector_distance = vector.distance -local vector_new = vector.new -local vector_floor = vector.floor - -local table_copy = table.copy -local table_remove = table.remove - -local pairs = pairs - --- range for mob count -local aoc_range = 48 - ---do mobs spawn? -local mobs_spawn = minetest.settings:get_bool("mobs_spawn", true) ~= false - ---[[ - -THIS IS THE BIG LIST OF ALL BIOMES - used for programming/updating mobs - -underground: -"FlowerForest_underground", -"JungleEdge_underground",local spawning_position = spawning_position_list[math.random(1,#spawning_position_list)] -"ColdTaiga_underground", -"IcePlains_underground", -"IcePlainsSpikes_underground", -"MegaTaiga_underground", -"Taiga_underground", -"ExtremeHills+_underground", -"JungleM_underground", -"ExtremeHillsM_underground", -"JungleEdgeM_underground", - -ocean: -"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", - -water or beach? -"MesaPlateauFM_sandlevel", -"MesaPlateauF_sandlevel", -"MesaBryce_sandlevel", -"Mesa_sandlevel", - -beach: -"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", - -dimension biome: -"Nether", -"End", - -Overworld regular: -"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", -]]-- - - - --- count how many mobs are in an area -local function count_mobs(pos) - local num = 0 - for _,object in pairs(get_objects_inside_radius(pos, aoc_range)) do - if object and object:get_luaentity() and object:get_luaentity()._cmi_is_mob then - num = num + 1 - end - end - return num -end - - --- global functions - -function mobs:spawn_abm_check(pos, node, name) - -- global function to add additional spawn checks - -- return true to stop spawning mob -end - - ---[[ - Custom elements changed: - -name: -the mobs name - -dimension: -"overworld" -"nether" -"end" - -types of spawning: -"water" -"ground" -"lava" - -biomes: tells the spawner to allow certain mobs to spawn in certain biomes -{"this", "that", "grasslands", "whatever"} - - -what is aoc??? objects in area - -WARNING: BIOME INTEGRATION NEEDED -> How to get biome through lua?? -]]-- - - ---this is where all of the spawning information is kept -local spawn_dictionary = {} - -function mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_light, max_light, interval, chance, aoc, min_height, max_height, day_toggle, on_spawn) - - --print(dump(biomes)) - - -- Do mobs spawn at all? - if not mobs_spawn then - return - end - - -- chance/spawn number override in minetest.conf for registered mob - local numbers = minetest.settings:get(name) - - if numbers then - numbers = numbers:split(",") - chance = tonumber(numbers[1]) or chance - aoc = tonumber(numbers[2]) or aoc - - if chance == 0 then - minetest.log("warning", string.format("[mobs] %s has spawning disabled", name)) - return - end - - minetest.log("action", - string.format("[mobs] Chance setting for %s changed to %s (total: %s)", name, chance, aoc)) - end - - --[[ - local function spawn_action(pos, node, active_object_count, active_object_count_wider, name) - - local orig_pos = table.copy(pos) - -- is mob actually registered? - if not mobs.spawning_mobs[name] - or not minetest.registered_entities[name] then - minetest.log("warning", "Mob spawn of "..name.." failed, unknown entity or mob is not registered for spawning!") - return - end - - -- additional custom checks for spawning mob - if mobs:spawn_abm_check(pos, node, name) == true then - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, ABM check rejected!") - return - end - - -- count nearby mobs in same spawn class - local entdef = minetest.registered_entities[name] - local spawn_class = entdef and entdef.spawn_class - if not spawn_class then - if entdef.type == "monster" then - spawn_class = "hostile" - else - spawn_class = "passive" - end - end - local in_class_cap = count_mobs(pos, "!"..spawn_class) < MOB_CAP[spawn_class] - -- do not spawn if too many of same mob in area - if active_object_count_wider >= max_per_block -- large-range mob cap - or (not in_class_cap) -- spawn class mob cap - or count_mobs(pos, name) >= aoc then -- per-mob mob cap - -- too many entities - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too crowded!") - return - end - - -- if toggle set to nil then ignore day/night check - if day_toggle then - - local tod = (minetest.get_timeofday() or 0) * 24000 - - if tod > 4500 and tod < 19500 then - -- daylight, but mob wants night - if day_toggle == false then - -- mob needs night - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, mob needs light!") - return - end - else - -- night time but mob wants day - if day_toggle == true then - -- mob needs day - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, mob needs daylight!") - return - end - end - end - - -- spawn above node - pos.y = pos.y + 1 - - -- only spawn away from player - local objs = minetest.get_objects_inside_radius(pos, 24) - - for n = 1, #objs do - - if objs[n]:is_player() then - -- player too close - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, player too close!") - return - end - end - - -- mobs cannot spawn in protected areas when enabled - if not spawn_protected - and minetest.is_protected(pos, "") then - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, position is protected!") - return - end - - -- are we spawning within height limits? - if pos.y > max_height - or pos.y < min_height then - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, out of height limit!") - return - end - - -- are light levels ok? - local light = minetest.get_node_light(pos) - if not light - or light > max_light - or light < min_light then - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, bad light!") - return - end - - -- do we have enough space to spawn mob? - local ent = minetest.registered_entities[name] - local width_x = max(1, math.ceil(ent.collisionbox[4] - ent.collisionbox[1])) - local min_x, max_x - if width_x % 2 == 0 then - max_x = math.floor(width_x/2) - min_x = -(max_x-1) - else - max_x = math.floor(width_x/2) - min_x = -max_x - end - - local width_z = max(1, math.ceil(ent.collisionbox[6] - ent.collisionbox[3])) - local min_z, max_z - if width_z % 2 == 0 then - max_z = math.floor(width_z/2) - min_z = -(max_z-1) - else - max_z = math.floor(width_z/2) - min_z = -max_z - end - - local max_y = max(0, math.ceil(ent.collisionbox[5] - ent.collisionbox[2]) - 1) - - for y = 0, max_y do - for x = min_x, max_x do - for z = min_z, max_z do - local pos2 = {x = pos.x+x, y = pos.y+y, z = pos.z+z} - if minetest.registered_nodes[node_ok(pos2).name].walkable == true then - -- inside block - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too little space!") - if ent.spawn_small_alternative and (not minetest.registered_nodes[node_ok(pos).name].walkable) then - minetest.log("info", "Trying to spawn smaller alternative mob: "..ent.spawn_small_alternative) - spawn_action(orig_pos, node, active_object_count, active_object_count_wider, ent.spawn_small_alternative) - end - return - end - end - end - end - - -- tweak X/Y/Z spawn pos - if width_x % 2 == 0 then - pos.x = pos.x + 0.5 - end - if width_z % 2 == 0 then - pos.z = pos.z + 0.5 - end - pos.y = pos.y - 0.5 - - local mob = minetest.add_entity(pos, name) - minetest.log("action", "Mob spawned: "..name.." at "..minetest.pos_to_string(pos)) - - if on_spawn then - - local ent = mob:get_luaentity() - - on_spawn(ent, pos) - end - end - - local function spawn_abm_action(pos, node, active_object_count, active_object_count_wider) - spawn_action(pos, node, active_object_count, active_object_count_wider, name) - end - ]]-- - - local entdef = minetest.registered_entities[name] - local spawn_class - if entdef.type == "monster" then - spawn_class = "hostile" - else - spawn_class = "passive" - end - - --load information into the spawn dictionary - local key = #spawn_dictionary + 1 - spawn_dictionary[key] = {} - spawn_dictionary[key]["name"] = name - spawn_dictionary[key]["dimension"] = dimension - spawn_dictionary[key]["type_of_spawning"] = type_of_spawning - spawn_dictionary[key]["biomes"] = biomes - spawn_dictionary[key]["min_light"] = min_light - spawn_dictionary[key]["max_light"] = max_light - spawn_dictionary[key]["interval"] = interval - spawn_dictionary[key]["chance"] = chance - spawn_dictionary[key]["aoc"] = aoc - spawn_dictionary[key]["min_height"] = min_height - spawn_dictionary[key]["max_height"] = max_height - spawn_dictionary[key]["day_toggle"] = day_toggle - --spawn_dictionary[key]["on_spawn"] = spawn_abm_action - spawn_dictionary[key]["spawn_class"] = spawn_class - - --[[ - minetest.register_abm({ - label = name .. " spawning", - nodenames = nodes, - neighbors = neighbors, - interval = interval, - chance = floor(max(1, chance * mobs_spawn_chance)), - catch_up = false, - action = spawn_abm_action, - }) - ]]-- -end - --- compatibility with older mob registration --- we're going to forget about this for now -j4i ---[[ -function mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, day_toggle) - - mobs:spawn_specific(name, nodes, {"air"}, min_light, max_light, 30, - chance, active_object_count, -31000, max_height, day_toggle) -end -]]-- - - ---Don't disable this yet-j4i --- MarkBu's spawn function - -function mobs:spawn(def) - --does nothing for now - --[[ - local name = def.name - local nodes = def.nodes or {"group:soil", "group:stone"} - local neighbors = def.neighbors or {"air"} - local min_light = def.min_light or 0 - local max_light = def.max_light or 15 - local interval = def.interval or 30 - local chance = def.chance or 5000 - local active_object_count = def.active_object_count or 1 - local min_height = def.min_height or -31000 - local max_height = def.max_height or 31000 - local day_toggle = def.day_toggle - local on_spawn = def.on_spawn - - mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, interval, - chance, active_object_count, min_height, max_height, day_toggle, on_spawn) - ]]-- -end - - - -local axis ---inner and outer part of square donut radius -local inner = 15 -local outer = 64 -local int = {-1,1} - -local function position_calculation(pos) - - pos = vector_floor(pos) - - --this is used to determine the axis buffer from the player - axis = math_random(0,1) - - --cast towards the direction - if axis == 0 then --x - pos.x = pos.x + math_random(inner,outer)*int[math_random(1,2)] - pos.z = pos.z + math_random(-outer,outer) - else --z - pos.z = pos.z + math_random(inner,outer)*int[math_random(1,2)] - pos.x = pos.x + math_random(-outer,outer) - end - return pos -end - ---[[ -local decypher_limits_dictionary = { - ["overworld"] = {mcl_vars.mg_overworld_min,mcl_vars.mg_overworld_max}, - ["nether"] = {mcl_vars.mg_nether_min, mcl_vars.mg_nether_max}, - ["end"] = {mcl_vars.mg_end_min, mcl_vars.mg_end_max} -} -]]-- - -local function decypher_limits(posy) - --local min_max_table = decypher_limits_dictionary[dimension] - --return min_max_table[1],min_max_table[2] - posy = math_floor(posy) - return posy - 32, posy + 32 -end - ---a simple helper function for mob_spawn -local function biome_check(biome_list, biome_goal) - for _,data in ipairs(biome_list) do - if data == biome_goal then - return true - end - end - - return false -end - - ---todo mob limiting ---MAIN LOOP - -if mobs_spawn then - local timer = 0 - minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer >= 10 then - timer = 0 - for _,player in pairs(get_connected_players()) do - -- after this line each "break" means "continue" - local do_mob_spawning = true - repeat - --don't need to get these variables more than once - --they happen in a single server step - - local player_pos = player:get_pos() - local dimension = mcl_worlds.pos_to_dimension(player_pos) - - if dimension == "void" or dimension == "default" then - break -- ignore void and unloaded area - end - - local min, max = decypher_limits(player_pos.y) - - for i = 1, math_random(1,4) do - -- after this line each "break" means "continue" - local do_mob_algorithm = true - repeat - - local goal_pos = position_calculation(player_pos) - - local spawning_position_list = find_nodes_in_area_under_air(vector_new(goal_pos.x,min,goal_pos.z), vector_new(goal_pos.x,max,goal_pos.z), {"group:solid", "group:water", "group:lava"}) - - --couldn't find node - if #spawning_position_list <= 0 then - break - end - - local spawning_position = spawning_position_list[math_random(1,#spawning_position_list)] - - --Prevent strange behavior --- this is commented out: /too close to player --fixed with inner circle - if not spawning_position then -- or vector_distance(player_pos, spawning_position) < 15 - break - end - - --hard code mob limit in area to 5 for now - if count_mobs(spawning_position) >= 5 then - break - end - - local gotten_node = get_node(spawning_position).name - - if not gotten_node or gotten_node == "air" then --skip air nodes - break - end - - local gotten_biome = minetest.get_biome_data(spawning_position) - - if not gotten_biome then - break --skip if in unloaded area - end - - gotten_biome = get_biome_name(gotten_biome.biome) --makes it easier to work with - - --add this so mobs don't spawn inside nodes - spawning_position.y = spawning_position.y + 1 - - --only need to poll for node light if everything else worked - local gotten_light = get_node_light(spawning_position) - - local is_water = get_item_group(gotten_node, "water") ~= 0 - local is_lava = get_item_group(gotten_node, "lava") ~= 0 - - local mob_def = nil - - --create a disconnected clone of the spawn dictionary - --prevents memory leak - local mob_library_worker_table = table_copy(spawn_dictionary) - - --grab mob that fits into the spawning location - --randomly grab a mob, don't exclude any possibilities - local repeat_mob_search = true - repeat - - --do not infinite loop - if #mob_library_worker_table <= 0 then - --print("breaking infinite loop") - break - end - - local skip = false - - --use this for removing table elements of mobs that do not match - local temp_index = math_random(1,#mob_library_worker_table) - - local temp_def = mob_library_worker_table[temp_index] - - --skip if something ridiculous happens (nil mob def) - --something truly horrible has happened if skip gets - --activated at this point - if not temp_def then - skip = true - end - - if not skip and (spawning_position.y < temp_def.min_height or spawning_position.y > temp_def.max_height) then - skip = true - end - - --skip if not correct dimension - if not skip and (temp_def.dimension ~= dimension) then - skip = true - end - - --skip if not in correct biome - if not skip and (not biome_check(temp_def.biomes, gotten_biome)) then - skip = true - end - - --don't spawn if not in light limits - if not skip and (gotten_light < temp_def.min_light or gotten_light > temp_def.max_light) then - skip = true - end - - --skip if not in correct spawning type - if not skip and (temp_def.type_of_spawning == "ground" and is_water) then - skip = true - end - - if not skip and (temp_def.type_of_spawning == "ground" and is_lava) then - skip = true - end - - --found a mob, exit out of loop - if not skip then - --minetest.log("warning", "found mob:"..temp_def.name) - --print("found mob:"..temp_def.name) - mob_def = table_copy(temp_def) - break - else - --minetest.log("warning", "deleting temp index "..temp_index) - --print("deleting temp index") - table_remove(mob_library_worker_table, temp_index) - end - - until repeat_mob_search == false --this is needed to sort through mobs randomly - - - --catch if went through all mobs and something went horribly wrong - --could not find a valid mob to spawn that fits the environment - if not mob_def then - break - end - - --adjust the position for water and lava mobs - if mob_def.type_of_spawning == "water" or mob_def.type_of_spawning == "lava" then - spawning_position.y = spawning_position.y - 1 - end - - --print("spawning: " .. mob_def.name) - - --everything is correct, spawn mob - minetest.add_entity(spawning_position, mob_def.name) - - break - until do_mob_algorithm == false --this is a safety catch - end - - break - until do_mob_spawning == false --this is a performance catch - end - end - end) -end diff --git a/mods/ENTITIES/mcl_mobs/crafts.lua b/mods/ENTITIES/mcl_mobs/crafts.lua index 2b23c6f58b..e8a5b60fc2 100644 --- a/mods/ENTITIES/mcl_mobs/crafts.lua +++ b/mods/ENTITIES/mcl_mobs/crafts.lua @@ -1,5 +1,5 @@ -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mcl_mobs") -- name tag minetest.register_craftitem("mcl_mobs:nametag", { diff --git a/mods/ENTITIES/mcl_mobs/init.lua b/mods/ENTITIES/mcl_mobs/init.lua index b0daba2c4b..c2d6cb21bc 100644 --- a/mods/ENTITIES/mcl_mobs/init.lua +++ b/mods/ENTITIES/mcl_mobs/init.lua @@ -1,16 +1,11 @@ local path = minetest.get_modpath(minetest.get_current_modname()) -local api_path = path.."/api" - -- Mob API -dofile(api_path .. "/api.lua") - --- Spawning Algorithm -dofile(api_path .. "/spawning.lua") +dofile(path .. "/api.lua") -- Rideable Mobs -dofile(api_path .. "/mount.lua") +dofile(path .. "/mount.lua") -- Mob Items -dofile(path .. "/crafts.lua") \ No newline at end of file +dofile(path .. "/crafts.lua") diff --git a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.pl.tr b/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.pl.tr deleted file mode 100644 index 96dc1ea155..0000000000 --- a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.pl.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_mobs -Peaceful mode active! No monsters will spawn.=Tryb pokojowy aktywowany! Potwory nie będą się pojawiać. -This allows you to place a single mob.=To pozwala na przywołanie jednego moba. -Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=Postaw to w miejscu w którym chcesz aby pojawił się mob. Zwierzęta pojawią się jako oswojone chyba, że będziesz się skradał podczas stawiania. Jeśli postawisz to na spawnerze to zmienisz którego moba przywołuje. -You need the “maphack” privilege to change the mob spawner.=Potrzebujesz przywileju "maphack", aby zmienić spawner. -Name Tag=Znacznik -A name tag is an item to name a mob.=Znacznik jest przedmiotem pozwalającym nazwać moba. -Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=Zanim użyjesz znacznika musisz wybrać imię przy kowadle. Następnie możesz użyć znacznika by nazwać moba. To zużywa znacznik. -Only peaceful mobs allowed!=Tylko pokojowe moby są dozwolone! -Give names to mobs=Nazwij moby -Set name at anvil=Wybierz imię przy kowadle diff --git a/mods/ENTITIES/mcl_mobs/lucky_block.lua b/mods/ENTITIES/mcl_mobs/lucky_block.lua new file mode 100644 index 0000000000..ea90de74ac --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/lucky_block.lua @@ -0,0 +1,8 @@ + +if minetest.get_modpath("lucky_block") then + + lucky_block:add_blocks({ + {"dro", {"mcl_mobs:nametag"}, 1}, + {"lig"}, + }) +end diff --git a/mods/ENTITIES/mcl_mobs/mod.conf b/mods/ENTITIES/mcl_mobs/mod.conf index 2a91a7764b..c25ccd80dc 100644 --- a/mods/ENTITIES/mcl_mobs/mod.conf +++ b/mods/ENTITIES/mcl_mobs/mod.conf @@ -1,5 +1,4 @@ name = mcl_mobs -author = PilzAdam -description = Adds a mob API for mods to add animals or monsters, etc. depends = mcl_particles -optional_depends = mcl_weather, mcl_explosions, mcl_hunger, mcl_worlds, cmi, doc_identifier, mcl_armor, mcl_portals, mcl_experience +optional_depends = mcl_weather, mcl_explosions, mcl_hunger, mcl_worlds, invisibility, lucky_block, cmi, doc_identifier, mcl_armor, mcl_portals, mcl_experience +description = Adds a mob API for mods to add animals or monsters, etc. diff --git a/mods/ENTITIES/mcl_mobs/api/mount.lua b/mods/ENTITIES/mcl_mobs/mount.lua similarity index 86% rename from mods/ENTITIES/mcl_mobs/api/mount.lua rename to mods/ENTITIES/mcl_mobs/mount.lua index 0ed54a46e2..8c4a6aa551 100644 --- a/mods/ENTITIES/mcl_mobs/api/mount.lua +++ b/mods/ENTITIES/mcl_mobs/mount.lua @@ -1,11 +1,8 @@ -- lib_mount by Blert2112 (edited by TenPlus1) ---local enable_crash = false ---local crash_threshold = 6.5 -- ignored if enable_crash=false - -local math = math -local vector = vector +local enable_crash = false +local crash_threshold = 6.5 -- ignored if enable_crash=false ------------------------------------------------------------------------------ @@ -13,7 +10,7 @@ local vector = vector -- Helper functions -- ---[[local function node_ok(pos, fallback) +local node_ok = function(pos, fallback) fallback = fallback or mobs.fallback_node @@ -24,10 +21,10 @@ local vector = vector end return {name = fallback} -end]] +end ---[[local function node_is(pos) +local function node_is(pos) local node = node_ok(pos) @@ -48,7 +45,7 @@ end]] end return "other" -end]] +end local function get_sign(i) @@ -63,11 +60,13 @@ local function get_sign(i) end ---[[local function get_velocity(v, yaw, y) +local function get_velocity(v, yaw, y) + local x = -math.sin(yaw) * v local z = math.cos(yaw) * v + return {x = x, y = y, z = z} -end]] +end local function get_v(v) @@ -155,7 +154,7 @@ function mobs.attach(entity, player) minetest.after(0.2, function(name) local player = minetest.get_player_by_name(name) if player then - mcl_player.player_set_animation(player, "sit_mount" , 30) + mcl_player.player_set_animation(player, "sit" , 30) end end, player:get_player_name()) @@ -169,32 +168,28 @@ function mobs.detach(player, offset) mcl_player.player_set_animation(player, "stand" , 30) - --local pos = player:get_pos() + local pos = player:get_pos() - --pos = {x = pos.x + offset.x, y = pos.y + 0.2 + offset.y, z = pos.z + offset.z} + pos = {x = pos.x + offset.x, y = pos.y + 0.2 + offset.y, z = pos.z + offset.z} - player:add_velocity(vector.new(math.random(-6,6), math.random(5,8), math.random(-6,6))) --throw the rider off - - --[[ minetest.after(0.1, function(name, pos) local player = minetest.get_player_by_name(name) if player then player:set_pos(pos) end end, player:get_player_name(), pos) - ]]-- end function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) - --local rot_view = 0 + local rot_view = 0 - --if entity.player_rotation.y == 90 then - -- rot_view = math.pi/2 - --end + if entity.player_rotation.y == 90 then + rot_view = math.pi/2 + end - --local acce_y = 0 + local acce_y = 0 local velo = entity.object:get_velocity() entity.v = get_v(velo) * get_sign(entity.v) @@ -207,30 +202,21 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) -- move forwards if ctrl.up then - mobs.set_velocity(entity, entity.run_velocity) - - mobs.set_mob_animation(entity, moving_anim) + entity.v = entity.v + entity.accel / 10 -- move backwards elseif ctrl.down then - mobs.set_velocity(entity, -entity.run_velocity) + if entity.max_speed_reverse == 0 and entity.v == 0 then + return + end - mobs.set_mob_animation(entity, moving_anim) - - --halt - else - - mobs.set_velocity(entity, 0) - - mobs.set_mob_animation(entity, stand_anim) + entity.v = entity.v - entity.accel / 10 end - -- mob rotation + -- fix mob rotation entity.object:set_yaw(entity.driver:get_look_horizontal() - entity.rotate) - entity.yaw = entity.driver:get_look_horizontal() - entity.rotate - --[[ if can_fly then -- fly up @@ -254,21 +240,32 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) end else - ]]-- - -- jump - if ctrl.jump then + -- jump + if ctrl.jump then + + if velo.y == 0 then + velo.y = velo.y + entity.jump_height + acce_y = acce_y + (acce_y * 3) + 1 + end + end - mobs.jump(entity) end - - --end end - --[[ + -- if not moving then set animation and return + if entity.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then + + if stand_anim then + mobs:set_animation(entity, stand_anim) + end + + return + end + -- set moving animation if moving_anim then - mobs:set_mob_animation(entity, moving_anim) + mobs:set_animation(entity, moving_anim) end -- Stop! @@ -382,17 +379,13 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) end entity.v2 = v - ]]-- end -- directional flying routine by D00Med (edited by TenPlus1) function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim) - if true then - print("succ") - return - end + local ctrl = entity.driver:get_player_control() local velo = entity.object:get_velocity() local dir = entity.driver:get_look_dir() @@ -443,9 +436,9 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim) -- change animation if stopped if velo.x == 0 and velo.y == 0 and velo.z == 0 then - mobs:set_mob_animation(entity, stand_anim) + mobs:set_animation(entity, stand_anim) else -- moving animation - mobs:set_mob_animation(entity, moving_anim) + mobs:set_animation(entity, moving_anim) end end diff --git a/mods/ENTITIES/mcl_mobs/README.md b/mods/ENTITIES/mcl_mobs/readme.MD similarity index 100% rename from mods/ENTITIES/mcl_mobs/README.md rename to mods/ENTITIES/mcl_mobs/readme.MD diff --git a/mods/ENTITIES/mcl_mobs/sounds/attributes.txt b/mods/ENTITIES/mcl_mobs/sounds/attributes.txt deleted file mode 100644 index 1228dd9d7d..0000000000 --- a/mods/ENTITIES/mcl_mobs/sounds/attributes.txt +++ /dev/null @@ -1,4 +0,0 @@ - -default_punch.1 = https://freesound.org/people/Merrick079/sounds/566436/ -default_punch.2 = https://freesound.org/people/Merrick079/sounds/566435/ -default_punch.3 = https://freesound.org/people/Merrick079/sounds/566434/ diff --git a/mods/ENTITIES/mcl_mobs/sounds/default_punch.1.ogg b/mods/ENTITIES/mcl_mobs/sounds/default_punch.1.ogg deleted file mode 100644 index 4d7ba8015eb13ce415ea09f4223a427bc4d2e17d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12658 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 diff --git a/mods/ENTITIES/mcl_mobs/sounds/default_punch.2.ogg b/mods/ENTITIES/mcl_mobs/sounds/default_punch.2.ogg deleted file mode 100644 index c022d94f871345810b7d90ab953a01985e2d369b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12801 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 R&zZhFM!opw0l>!ge*lM|2+9Be diff --git a/mods/ENTITIES/mcl_mobs/sounds/default_punch.3.ogg b/mods/ENTITIES/mcl_mobs/sounds/default_punch.3.ogg deleted file mode 100644 index 4c5e3f9b301e682372399f6213210a42d86fc558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12943 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.2 then local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1.5) for k, obj in pairs(objs) do - if obj:get_luaentity() then + if obj:get_luaentity() ~= nil then if obj:get_luaentity().name ~= "mobs_mc:arrow_entity" and obj:get_luaentity().name ~= "__builtin:item" then local damage = 3 minetest.sound_play("damage", {pos = pos}, true) @@ -108,7 +108,7 @@ THROWING_ARROW_ENTITY.on_step = function(self, dtime) if self.lastpos.x~=nil then if node.name ~= "air" then minetest.sound_play("bowhit1", {pos = pos}, true) - minetest.add_item(self.lastpos, "mobs_mc:arrow") + minetest.add_item(self.lastpos, 'mobs_mc:arrow') self.object:remove() end end @@ -122,7 +122,7 @@ local arrows = { } local throwing_shoot_arrow = function(itemstack, player) - for _,arrow in pairs(arrows) do + for _,arrow in ipairs(arrows) do if player:get_inventory():get_stack("main", player:get_wield_index()+1):get_name() == arrow[1] then if not minetest.is_creative_enabled(player:get_player_name()) then player:get_inventory():remove_item("main", arrow[1]) @@ -155,7 +155,7 @@ end if c("arrow") and c("flint") and c("feather") and c("stick") then minetest.register_craft({ - output = "mobs_mc:arrow 4", + output = 'mobs_mc:arrow 4', recipe = { {mobs_mc.items.flint}, {mobs_mc.items.stick}, @@ -181,11 +181,11 @@ if c("bow") then }) minetest.register_craft({ - output = "mobs_mc:bow_wood", + output = 'mobs_mc:bow_wood', recipe = { - {mobs_mc.items.string, mobs_mc.items.stick, ""}, - {mobs_mc.items.string, "", mobs_mc.items.stick}, - {mobs_mc.items.string, mobs_mc.items.stick, ""}, + {mobs_mc.items.string, mobs_mc.items.stick, ''}, + {mobs_mc.items.string, '', mobs_mc.items.stick}, + {mobs_mc.items.string, mobs_mc.items.stick, ''}, } }) end @@ -259,7 +259,7 @@ if c("egg") then }) -- shoot egg - local function mobs_shoot_egg(item, player, pointed_thing) + local mobs_shoot_egg = function (item, player, pointed_thing) local playerpos = player:get_pos() @@ -349,7 +349,7 @@ mobs:register_arrow("mobs_mc:snowball_entity", { if c("snowball") then -- shoot snowball - local function mobs_shoot_snowball(item, player, pointed_thing) + local mobs_shoot_snowball = function (item, player, pointed_thing) local playerpos = player:get_pos() diff --git a/mods/ENTITIES/mobs_mc/4_heads.lua b/mods/ENTITIES/mobs_mc/4_heads.lua index ecd09ee021..01b8ee5775 100644 --- a/mods/ENTITIES/mobs_mc/4_heads.lua +++ b/mods/ENTITIES/mobs_mc/4_heads.lua @@ -3,9 +3,8 @@ -- NOTE: Strings intentionally not marked for translation, other mods already have these items. -- TODO: Remove this file eventually, all items here are already outsourced in other mods. --- TODO: Add translation. ---local S = local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") -- Heads system diff --git a/mods/ENTITIES/mobs_mc/LICENSE-media.md b/mods/ENTITIES/mobs_mc/LICENSE-media.md index 3bfe70a151..dad31abb85 100644 --- a/mods/ENTITIES/mobs_mc/LICENSE-media.md +++ b/mods/ENTITIES/mobs_mc/LICENSE-media.md @@ -190,10 +190,9 @@ Origin of those models: * [Spennnyyy](https://freesound.org/people/Spennnyyy/) (CC0) * `mcl_totems_totem.ogg` * Source: -* [Baŝto](https://opengameart.org/users/ba%C5%9Dto) (remixer) and [kantouth](https://freesound.org/people/kantouth/) (original author) +* [Baŝto](https://opengameart.org/users/ba%C5%9Dto) * `mobs_mc_skeleton_random.*.ogg` (CC BY 3.0) * Source: - * Based on: * [spookymodem](https://freesound.org/people/spookymodem/) * `mobs_mc_skeleton_death.ogg` (CC0) * @@ -307,4 +306,4 @@ Origin of those models: Note: Many of these sounds have been more or less modified to fit the game. -Sounds not mentioned here are licensed under CC0. +Sounds not mentioned hre are licensed under CC0. diff --git a/mods/ENTITIES/mobs_mc/agent.lua b/mods/ENTITIES/mobs_mc/agent.lua index 8475f92fce..8fa7314cf2 100644 --- a/mods/ENTITIES/mobs_mc/agent.lua +++ b/mods/ENTITIES/mobs_mc/agent.lua @@ -1,8 +1,8 @@ --################### ---################### AGENT - seemingly unused +--################### AGENT --################### -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:agent", { type = "npc", diff --git a/mods/ENTITIES/mobs_mc/bat.lua b/mods/ENTITIES/mobs_mc/bat.lua index 5492add742..103579b67f 100644 --- a/mods/ENTITIES/mobs_mc/bat.lua +++ b/mods/ENTITIES/mobs_mc/bat.lua @@ -1,16 +1,12 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:bat", { - description = S("Bat"), type = "animal", spawn_class = "ambient", can_despawn = true, passive = true, - rotate = 270, - tilt_fly = true, - fly = true, hp_min = 6, hp_max = 6, collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.89, 0.25}, @@ -48,7 +44,9 @@ mobs:register_mob("mobs_mc:bat", { fall_damage = 0, view_range = 16, fear_height = 0, + jump = false, + fly = true, makes_footstep_sound = false, }) @@ -66,81 +64,7 @@ else end -- Spawn on solid blocks at or below Sea level and the selected light level -mobs:spawn_specific( -"mobs_mc:bat", -"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", -"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", -}, -0, -maxlight, -20, -5000, -2, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.water-1) +mobs:spawn_specific("mobs_mc:bat", mobs_mc.spawn.solid, {"air"}, 0, maxlight, 20, 5000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-1) -- spawn eggs diff --git a/mods/ENTITIES/mobs_mc/blaze.lua b/mods/ENTITIES/mobs_mc/blaze.lua index 0f62c5388d..20fa86a1f3 100644 --- a/mods/ENTITIES/mobs_mc/blaze.lua +++ b/mods/ENTITIES/mobs_mc/blaze.lua @@ -1,9 +1,9 @@ -- daufinsyd -- My work is under the LGPL terms --- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models -hi 22i ~jordan4ibanez +-- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models -- blaze.lua partial copy of mobs_mc/ghast.lua -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### BLAZE @@ -11,16 +11,12 @@ local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:blaze", { - description = S("Blaze"), type = "monster", spawn_class = "hostile", hp_min = 20, hp_max = 20, xp_min = 10, xp_max = 10, - tilt_fly = false, - hostile = true, - --rotate = 270, collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.79, 0.3}, rotate = -180, visual = "mesh", @@ -39,7 +35,7 @@ mobs:register_mob("mobs_mc:blaze", { walk_velocity = .8, run_velocity = 1.6, damage = 6, - reach = 4, -- don't want blaze getting too close + reach = 2, pathfinding = 1, drops = { {name = mobs_mc.items.blaze_rod, @@ -67,7 +63,7 @@ mobs:register_mob("mobs_mc:blaze", { fall_speed = -2.25, light_damage = 0, view_range = 16, - attack_type = "projectile", + attack_type = "dogshoot", arrow = "mobs_mc:blaze_fireball", shoot_interval = 3.5, shoot_offset = 1.0, @@ -79,80 +75,9 @@ mobs:register_mob("mobs_mc:blaze", { fear_height = 0, glow = 14, fire_resistant = true, - eye_height = 0.75, - projectile_cooldown_min = 2, - projectile_cooldown_max = 3, - shoot_arrow = function(self, pos, dir) - -- 2-4 damage per arrow - local dmg = math.random(2,4) - mobs.shoot_projectile_handling("mobs_mc:blaze_fireball", pos, dir, self.object:get_yaw(), self.object, 7, dmg,nil,nil,nil,-0.4) - end, - - do_custom = function(self) - if self.attacking and self.state == "attack" and vector.distance(self.object:get_pos(), self.attacking:get_pos()) < 1.2 then - mcl_burning.set_on_fire(self.attacking, 5) - end - local pos = self.object:get_pos() - minetest.add_particle({ - pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, - velocity = {x=0, y=math.random(1,1), z=0}, - expirationtime = math.random(), - size = math.random(1, 4), - collisiondetection = true, - vertical = false, - texture = "mcl_particles_smoke_anim.png^[colorize:#2c2c2c:255", - animation = { - type = "vertical_frames", - aspect_w = 8, - aspect_h = 8, - length = 2.05, - }, - }) - minetest.add_particle({ - pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, - velocity = {x=0, y=math.random(1,1), z=0}, - expirationtime = math.random(), - size = math.random(1, 4), - collisiondetection = true, - vertical = false, - texture = "mcl_particles_smoke_anim.png^[colorize:#424242:255", - animation = { - type = "vertical_frames", - aspect_w = 8, - aspect_h = 8, - length = 2.05, - }, - }) - minetest.add_particle({ - pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, - velocity = {x=0, y=math.random(1,1), z=0}, - expirationtime = math.random(), - size = math.random(1, 4), - collisiondetection = true, - vertical = false, - texture = "mcl_particles_smoke_anim.png^[colorize:#0f0f0f:255", - animation = { - type = "vertical_frames", - aspect_w = 8, - aspect_h = 8, - length = 2.05, - }, - }) - end, }) -mobs:spawn_specific( -"mobs_mc:blaze", -"nether", -"ground", -{"Nether"}, -0, -minetest.LIGHT_MAX+1, -30, -5000, -3, -mobs_mc.spawn_height.nether_min, -mobs_mc.spawn_height.nether_max) +mobs:spawn_specific("mobs_mc:blaze", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 5000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) -- Blaze fireball mobs:register_arrow("mobs_mc:blaze_fireball", { @@ -160,19 +85,16 @@ mobs:register_arrow("mobs_mc:blaze_fireball", { visual_size = {x = 0.3, y = 0.3}, textures = {"mcl_fire_fire_charge.png"}, velocity = 15, - speed = 5, - tail = 1, - tail_texture = "mobs_mc_spit.png^[colorize:black:255", --repurpose spit texture - tail_size = 2, - tail_distance_divider = 3, - _is_fireball = true, -- Direct hit, no fire... just plenty of pain hit_player = function(self, player) - mcl_burning.set_on_fire(player, 5) + if rawget(_G, "armor") and armor.last_damage_types then + armor.last_damage_types[player:get_player_name()] = "fireball" + end + mcl_burning.set_on_fire(player, 5, "blaze") player:punch(self.object, 1.0, { full_punch_interval = 1.0, - damage_groups = {fleshy = self._damage}, + damage_groups = {fleshy = 5}, }, nil) end, @@ -180,7 +102,7 @@ mobs:register_arrow("mobs_mc:blaze_fireball", { mcl_burning.set_on_fire(mob, 5) mob:punch(self.object, 1.0, { full_punch_interval = 1.0, - damage_groups = {fleshy = self._damage}, + damage_groups = {fleshy = 5}, }, nil) end, @@ -195,9 +117,7 @@ mobs:register_arrow("mobs_mc:blaze_fireball", { -- Node hit, make fire hit_node = function(self, pos, node) - if node.name ~= "air" then - local pos_above = table.copy(pos) - pos_above.y = pos_above.y + 1 + if node.name == "air" then minetest.set_node(pos_above, {name=mobs_mc.items.fire}) else local v = self.object:get_velocity() diff --git a/mods/ENTITIES/mobs_mc/chicken.lua b/mods/ENTITIES/mobs_mc/chicken.lua index ffaebca2be..325371e2b2 100644 --- a/mods/ENTITIES/mobs_mc/chicken.lua +++ b/mods/ENTITIES/mobs_mc/chicken.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### CHICKEN @@ -9,7 +9,6 @@ local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:chicken", { - description = S("Chicken"), type = "animal", spawn_class = "passive", @@ -18,8 +17,7 @@ mobs:register_mob("mobs_mc:chicken", { xp_min = 1, xp_max = 3, collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.69, 0.2}, - skittish = true, - fall_slow = true, + runaway = true, floats = 1, visual = "mesh", mesh = "mobs_mc_chicken.b3d", @@ -27,10 +25,9 @@ mobs:register_mob("mobs_mc:chicken", { {"mobs_mc_chicken.png"}, }, visual_size = {x=2.2, y=2.2}, - rotate = 270, + makes_footstep_sound = true, walk_velocity = 1, - run_velocity = 3, drops = { {name = mobs_mc.items.chicken_raw, chance = 1, @@ -66,25 +63,14 @@ mobs:register_mob("mobs_mc:chicken", { run_start = 0, run_end = 40, }, - follow = "mcl_farming:wheat_seeds", - breed_distance = 1.5, - baby_size = 0.5, - follow_distance = 2, + follow = mobs_mc.follow.chicken, view_range = 16, fear_height = 4, - --why do chickend breed if they lay eggs?? on_rightclick = function(self, clicker) - --attempt to enter breed state - if mobs.enter_breed_state(self,clicker) then - return - end - - --make baby grow faster - if self.baby then - mobs.make_baby_grow_faster(self,clicker) - return - end + if mobs:feed_tame(self, clicker, 1, true, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 0, 60, 5, false, nil) then return end end, do_custom = function(self, dtime) @@ -109,85 +95,12 @@ mobs:register_mob("mobs_mc:chicken", { gain = 1.0, max_hear_distance = 16, }, true) - end, - - --head code - has_head = true, - head_bone = "head", - - swap_y_with_x = false, - reverse_head_yaw = false, - - head_bone_pos_y = 1.675, - head_bone_pos_z = 0, - - head_height_offset = 0.55, - head_direction_offset = 0.0925, - - head_pitch_modifier = -math.pi/2, - --end head code + end, + }) --spawn -mobs:spawn_specific( -"mobs_mc:chicken", -"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", -}, -9, -minetest.LIGHT_MAX+1, -30, 17000, -3, -mobs_mc.spawn_height.water, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:chicken", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:chicken", S("Chicken"), "mobs_mc_spawn_icon_chicken.png", 0) diff --git a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua index 17c4e1e620..005af29807 100644 --- a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua +++ b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua @@ -1,16 +1,14 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") local cow_def = { - description = S("Cow"), type = "animal", spawn_class = "passive", hp_min = 10, hp_max = 10, xp_min = 1, xp_max = 3, - rotate = 270, collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.39, 0.45}, visual = "mesh", mesh = "mobs_mc_cow.b3d", @@ -21,7 +19,6 @@ local cow_def = { visual_size = {x=2.8, y=2.8}, makes_footstep_sound = true, walk_velocity = 1, - run_velocity = 3, drops = { {name = mobs_mc.items.beef_raw, chance = 1, @@ -34,7 +31,7 @@ local cow_def = { max = 2, looting = "common",}, }, - skittish = true, + runaway = true, sounds = { random = "mobs_mc_cow", damage = "mobs_mc_cow_hurt", @@ -46,20 +43,15 @@ local cow_def = { stand_speed = 25, walk_speed = 40, run_speed = 60, stand_start = 0, stand_end = 0, walk_start = 0, - walk_end = 40, run_start = 0, + walk_end = 40, run_start = 0, run_end = 40, }, - --follow = mobs_mc.follow.cow, + follow = mobs_mc.follow.cow, on_rightclick = function(self, clicker) + if mobs:feed_tame(self, clicker, 1, true, true) then return end + if mobs:protect(self, clicker) then return end - --attempt to enter breed state - if mobs.enter_breed_state(self,clicker) then - return - end - - --make baby grow faster - if self.baby then - mobs.make_baby_grow_faster(self,clicker) + if self.child then return end @@ -78,49 +70,27 @@ local cow_def = { end return end + mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end, - breed_distance = 1.5, - baby_size = 0.5, - follow_distance = 2, follow = mobs_mc.items.wheat, view_range = 10, fear_height = 4, - - --head code - has_head = true, - head_bone = "head", - - swap_y_with_x = false, - reverse_head_yaw = false, - - head_bone_pos_y = 3.6, - head_bone_pos_z = -0.6, - - head_height_offset = 1.0525, - head_direction_offset = 0.5, - head_pitch_modifier = 0, - --end head code } mobs:register_mob("mobs_mc:cow", cow_def) -- Mooshroom local mooshroom_def = table.copy(cow_def) -mooshroom_def.description = S("Mooshroom") + mooshroom_def.mesh = "mobs_mc_cow.b3d" mooshroom_def.textures = { {"mobs_mc_mooshroom.png", "mobs_mc_mushroom_red.png"}, {"mobs_mc_mooshroom_brown.png", "mobs_mc_mushroom_brown.png" } } mooshroom_def.on_rightclick = function(self, clicker) - --attempt to enter breed state - if mobs.enter_breed_state(self,clicker) then + if mobs:feed_tame(self, clicker, 1, true, true) then return end + if mobs:protect(self, clicker) then return end + + if self.child then return end - - --make baby grow faster - if self.baby then - mobs.make_baby_grow_faster(self,clicker) - return - end - local item = clicker:get_wielded_item() -- Use shears to get mushrooms and turn mooshroom into cow if item:get_name() == mobs_mc.items.shears then @@ -169,89 +139,14 @@ mooshroom_def.on_rightclick = function(self, clicker) minetest.add_item(pos, {name = mobs_mc.items.mushroom_stew}) end end + mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end mobs:register_mob("mobs_mc:mooshroom", mooshroom_def) -- Spawning -mobs:spawn_specific( -"mobs_mc:cow", -"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", -}, -9, -minetest.LIGHT_MAX+1, -30, -17000, -10, -mobs_mc.spawn_height.water, -mobs_mc.spawn_height.overworld_max) - - - -mobs:spawn_specific( -"mobs_mc:mooshroom", -"overworld", -"ground", -{ -"MushroomIslandShore", -"MushroomIsland" -}, -9, -minetest.LIGHT_MAX+1, -30, -17000, -5, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:cow", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 10, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:mooshroom", mobs_mc.spawn.mushroom_island, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 5, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- spawn egg mobs:register_egg("mobs_mc:cow", S("Cow"), "mobs_mc_spawn_icon_cow.png", 0) diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua index a7e33d1bd0..9ee9e9d248 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/creeper.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### CREEPER @@ -12,8 +12,6 @@ local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:creeper", { type = "monster", spawn_class = "hostile", - hostile = true, - rotate = 270, hp_min = 20, hp_max = 20, xp_min = 5, @@ -35,44 +33,26 @@ mobs:register_mob("mobs_mc:creeper", { explode = "tnt_explode", distance = 16, }, - makes_footstep_sound = false, + makes_footstep_sound = true, walk_velocity = 1.05, run_velocity = 2.1, runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" }, attack_type = "explode", - eye_height = 1.25, - --hssssssssssss explosion_strength = 3, - --explosion_radius = 3, - --explosion_damage_radius = 6, - --explosiontimer_reset_radius = 6, + explosion_radius = 3.5, + explosion_damage_radius = 3.5, + explosiontimer_reset_radius = 6, reach = 3, - defuse_reach = 5.2, - explosion_timer = 0.3, + explosion_timer = 1.5, allow_fuse_reset = true, stop_to_explode = true, - --head code - has_head = true, - head_bone = "head", - - swap_y_with_x = true, - reverse_head_yaw = true, - - head_bone_pos_y = 2.4, - head_bone_pos_z = 0, - - head_height_offset = 1.1, - head_direction_offset = 0, - head_pitch_modifier = 0, - --end head code - -- Force-ignite creeper with flint and steel and explode after 1.5 seconds. -- TODO: Make creeper flash after doing this as well. -- TODO: Test and debug this code. on_rightclick = function(self, clicker) - if self._forced_explosion_countdown_timer then + if self._forced_explosion_countdown_timer ~= nil then return end local item = clicker:get_wielded_item() @@ -92,11 +72,11 @@ mobs:register_mob("mobs_mc:creeper", { end end, do_custom = function(self, dtime) - if self._forced_explosion_countdown_timer then + if self._forced_explosion_countdown_timer ~= nil then self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime if self._forced_explosion_countdown_timer <= 0 then - local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false - mcl_explosions.explode(mcl_util.get_object_center(self.object), self.explosion_strength, { griefing = mobs_griefing, drop_chance = 1.0}, self.object) + mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength) + self.object:remove() end end end, @@ -149,10 +129,8 @@ mobs:register_mob("mobs_mc:creeper", { }) mobs:register_mob("mobs_mc:creeper_charged", { - description = S("Charged Creeper"), type = "monster", spawn_class = "hostile", - hostile = true, hp_min = 20, hp_max = 20, xp_min = 5, @@ -161,15 +139,11 @@ mobs:register_mob("mobs_mc:creeper_charged", { pathfinding = 1, visual = "mesh", mesh = "mobs_mc_creeper.b3d", - - --BOOM - textures = { {"mobs_mc_creeper.png", "mobs_mc_creeper_charge.png"}, }, visual_size = {x=3, y=3}, - rotate = 270, sounds = { attack = "tnt_ignite", death = "mobs_mc_creeper_death", @@ -178,19 +152,18 @@ mobs:register_mob("mobs_mc:creeper_charged", { explode = "tnt_explode", distance = 16, }, - makes_footstep_sound = false, + makes_footstep_sound = true, walk_velocity = 1.05, run_velocity = 2.1, runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" }, attack_type = "explode", explosion_strength = 6, - --explosion_radius = 3, - --explosion_damage_radius = 6, - --explosiontimer_reset_radius = 3, + explosion_radius = 8, + explosion_damage_radius = 8, + explosiontimer_reset_radius = 6, reach = 3, - defuse_reach = 5.2, - explosion_timer = 0.3, + explosion_timer = 1.5, allow_fuse_reset = true, stop_to_explode = true, @@ -198,7 +171,7 @@ mobs:register_mob("mobs_mc:creeper_charged", { -- TODO: Make creeper flash after doing this as well. -- TODO: Test and debug this code. on_rightclick = function(self, clicker) - if self._forced_explosion_countdown_timer then + if self._forced_explosion_countdown_timer ~= nil then return end local item = clicker:get_wielded_item() @@ -218,11 +191,11 @@ mobs:register_mob("mobs_mc:creeper_charged", { end end, do_custom = function(self, dtime) - if self._forced_explosion_countdown_timer then + if self._forced_explosion_countdown_timer ~= nil then self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime if self._forced_explosion_countdown_timer <= 0 then - local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false - mcl_explosions.explode(mcl_util.get_object_center(self.object), self.explosion_strength, { griefing = mobs_griefing, drop_chance = 1.0}, self.object) + mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength) + self.object:remove() end end end, @@ -277,158 +250,7 @@ mobs:register_mob("mobs_mc:creeper_charged", { glow = 3, }) -mobs:spawn_specific( -"mobs_mc:creeper", -"overworld", -"ground", -{ -"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, -7, -20, -16500, -2, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:creeper", mobs_mc.spawn.solid, {"air"}, 0, 7, 20, 16500, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:creeper", S("Creeper"), "mobs_mc_spawn_icon_creeper.png", 0) diff --git a/mods/ENTITIES/mobs_mc/depends.txt b/mods/ENTITIES/mobs_mc/depends.txt deleted file mode 100644 index 674eb80940..0000000000 --- a/mods/ENTITIES/mobs_mc/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mcl_mobs \ No newline at end of file diff --git a/mods/ENTITIES/mobs_mc/ender_dragon.lua b/mods/ENTITIES/mobs_mc/ender_dragon.lua index 3634e20f41..50b7819039 100644 --- a/mods/ENTITIES/mobs_mc/ender_dragon.lua +++ b/mods/ENTITIES/mobs_mc/ender_dragon.lua @@ -2,28 +2,20 @@ --################### ENDERDRAGON --################### -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:enderdragon", { - description = S("Ender Dragon"), type = "monster", spawn_class = "hostile", + pathfinding = 1, attacks_animals = true, walk_chance = 100, - rotate = 270, - tilt_fly = true, - hostile = true, - shoot_arrow = function(self, pos, dir) - -- 2-4 damage per arrow - local dmg = math.random(2,4) - mobs.shoot_projectile_handling("mobs_mc:dragon_fireball", pos, dir, self.object:get_yaw(), self.object, nil, dmg) - end, hp_max = 200, hp_min = 200, xp_min = 500, xp_max = 500, - collisionbox = {-2, 0, -2, 2, 2, 2}, - eye_height = 1, + collisionbox = {-2, 3, -2, 2, 5, 2}, + physical = false, visual = "mesh", mesh = "mobs_mc_dragon.b3d", textures = { @@ -31,7 +23,6 @@ mobs:register_mob("mobs_mc:enderdragon", { }, visual_size = {x=3, y=3}, view_range = 35, - reach = 20, walk_velocity = 6, run_velocity = 6, can_despawn = false, @@ -55,10 +46,12 @@ mobs:register_mob("mobs_mc:enderdragon", { lava_damage = 0, fire_damage = 0, on_rightclick = nil, - attack_type = "projectile", + attack_type = "dogshoot", arrow = "mobs_mc:dragon_fireball", shoot_interval = 0.5, shoot_offset = -1.0, + xp_min = 12000, + xp_max = 12000, animation = { fly_speed = 8, stand_speed = 8, stand_start = 0, stand_end = 20, @@ -66,53 +59,21 @@ mobs:register_mob("mobs_mc:enderdragon", { run_start = 0, run_end = 20, }, ignores_nametag = true, - do_custom = function(self) - mcl_bossbars.update_boss(self.object, "Ender Dragon", "light_purple") - for _, obj in ipairs(minetest.get_objects_inside_radius(self.object:get_pos(), 80)) do - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_end:crystal" then - if luaentity.beam then - if luaentity.beam == self.beam then - break - end - else - if self.beam then - self.beam:remove() - end - minetest.add_entity(self.object:get_pos(), "mcl_end:crystal_beam"):get_luaentity():init(self.object, obj) - break - end - end - end - if self._portal_pos then - -- migrate old format - if type(self._portal_pos) == "string" then - self._portal_pos = minetest.string_to_pos(self._portal_pos) - end - local portal_center = vector.add(self._portal_pos, vector.new(3, 11, 3)) - local pos = self.object:get_pos() - if vector.distance(pos, portal_center) > 50 then - self.object:set_pos(self._last_good_pos or portal_center) - else - self._last_good_pos = pos - end - end - end, - on_die = function(self, pos) - if self._portal_pos then - mcl_portals.spawn_gateway_portal() - mcl_structures.call_struct(self._portal_pos, "end_exit_portal_open") - if self._initial then - mcl_experience.throw_xp(pos, 11500) -- 500 + 11500 = 12000 - minetest.set_node(vector.add(self._portal_pos, vector.new(3, 5, 3)), {name = mobs_mc.items.dragon_egg}) - end + on_die = function(self, own_pos) + if self._egg_spawn_pos then + local pos = minetest.string_to_pos(self._egg_spawn_pos) + --if minetest.get_node(pos).buildable_to then + minetest.set_node(pos, {name = mobs_mc.items.dragon_egg}) + return + --end end + minetest.add_item(own_pos, mobs_mc.items.dragon_egg) end, fire_resistant = true, }) ---TODO: replace this setting by a proper gamerules system -local mobs_griefing = minetest.settings:get_bool("mobs_griefing", true) + +local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false -- dragon fireball (projectile) mobs:register_arrow("mobs_mc:dragon_fireball", { @@ -139,13 +100,8 @@ mobs:register_arrow("mobs_mc:dragon_fireball", { -- node hit, explode hit_node = function(self, pos, node) - --mobs:boom(self, pos, 2) - if mobs_griefing then - mcl_explosions.explode(self.object:get_pos(), 2, { drop_chance = 1.0 }) - end + mobs:boom(self, pos, 2) end }) mobs:register_egg("mobs_mc:enderdragon", S("Ender Dragon"), "mobs_mc_spawn_icon_dragon.png", 0, true) - ---mcl_wip.register_wip_item("mobs_mc:enderdragon") diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index a821bd7695..efc789344a 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.lua @@ -24,11 +24,9 @@ -- added rain damage. -- fixed the grass_with_dirt issue. -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") -local vector = vector - -local function telesound(pos, is_source) +local telesound = function(pos, is_source) local snd if is_source then snd = "mobs_mc_enderman_teleport_src" @@ -192,22 +190,20 @@ end local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false mobs:register_mob("mobs_mc:enderman", { - description = S("Enderman"), type = "monster", spawn_class = "passive", - neutral = true, + passive = true, + pathfinding = 1, hp_min = 40, hp_max = 40, xp_min = 5, xp_max = 5, - rotate = 270, collisionbox = {-0.3, -0.01, -0.3, 0.3, 2.89, 0.3}, visual = "mesh", mesh = "mobs_mc_enderman.b3d", textures = create_enderman_textures(), visual_size = {x=3, y=3}, makes_footstep_sound = true, - eye_height = 2.5, sounds = { -- TODO: Custom war cry sound war_cry = "mobs_sandmonster", @@ -216,8 +212,8 @@ mobs:register_mob("mobs_mc:enderman", { random = {name="mobs_mc_enderman_random", gain=0.5}, distance = 16, }, - walk_velocity = 1, - run_velocity = 4, + walk_velocity = 0.2, + run_velocity = 3.4, damage = 7, reach = 2, drops = { @@ -227,22 +223,6 @@ mobs:register_mob("mobs_mc:enderman", { max = 1, looting = "common"}, }, - - --head code - has_head = false, - head_bone = "head.low", - - swap_y_with_x = false, - reverse_head_yaw = false, - - head_bone_pos_y = 2.4, - head_bone_pos_z = 0, - - head_height_offset = 1.1, - head_direction_offset = 0, - head_pitch_modifier = 0, - --end head code - animation = select_enderman_animation("normal"), _taken_node = "", do_custom = function(self, dtime) @@ -301,10 +281,10 @@ mobs:register_mob("mobs_mc:enderman", { --self:teleport(nil) --self.state = "" --else - if self.attacking then - local target = self.attacking + if self.attack then + local target = self.attack local pos = target:get_pos() - if pos then + if pos ~= nil then if vector.distance(self.object:get_pos(), target:get_pos()) > 10 then self:teleport(target) end @@ -315,20 +295,19 @@ mobs:register_mob("mobs_mc:enderman", { -- ARROW / DAYTIME PEOPLE AVOIDANCE BEHAVIOUR HERE. -- Check for arrows and people nearby. local enderpos = self.object:get_pos() - enderpos.y = enderpos.y + 1.5 - local objs = minetest.get_objects_inside_radius(enderpos, 2) + local objs = minetest.get_objects_inside_radius(enderpos, 4) for n = 1, #objs do local obj = objs[n] if obj then - --if minetest.is_player(obj) then + if minetest.is_player(obj) then -- Warp from players during day. --if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then -- self:teleport(nil) --end - if not obj:is_player() then + else local lua = obj:get_luaentity() if lua then - if lua.name == "mcl_bows:arrow_entity" or lua.name == "mcl_throwing:snowball_entity" then + if lua.name == "mcl_bows:arrow_entity" then self:teleport(nil) end end @@ -343,55 +322,41 @@ mobs:register_mob("mobs_mc:enderman", { -- self:teleport(nil) -- self.state = "" --else - if self.attack and not minetest.settings:get_bool("creative_mode") then - self.state = "attack" + if self.attack ~= nil then + self.state = 'attack' end --end end -- Check to see if people are near by enough to look at us. - for _,obj in pairs(minetest.get_connected_players()) do - - --check if they are within radius - local player_pos = obj:get_pos() - if player_pos then -- prevent crashing in 1 in a million scenario - - local ender_distance = vector.distance(enderpos, player_pos) - if ender_distance <= 64 then - + local objs = minetest.get_objects_inside_radius(enderpos, 64) + local obj + for n = 1, #objs do + obj = objs[n] + if obj then + if minetest.is_player(obj) then -- Check if they are looking at us. + local player_pos = obj:get_pos() local look_dir_not_normalized = obj:get_look_dir() local look_dir = vector.normalize(look_dir_not_normalized) - local player_eye_height = obj:get_properties().eye_height - - --skip player if they have no data - log it - if not player_eye_height then - minetest.log("error", "Enderman at location: ".. dump(enderpos).." has indexed a null player!") - else - - --calculate very quickly the exact location the player is looking - --within the distance between the two "heads" (player and enderman) - local look_pos = vector.new(player_pos.x, player_pos.y + player_eye_height, player_pos.z) - local look_pos_base = look_pos - local ender_eye_pos = vector.new(enderpos.x, enderpos.y + 2.75, enderpos.z) - local eye_distance_from_player = vector.distance(ender_eye_pos, look_pos) - look_pos = vector.add(look_pos, vector.multiply(look_dir, eye_distance_from_player)) - - --if looking in general head position, turn hostile - if minetest.line_of_sight(ender_eye_pos, look_pos_base) and vector.distance(look_pos, ender_eye_pos) <= 0.4 then - self.provoked = "staring" - self.state = "stand" - self.hostile = false + local look_pos = vector.new({x = look_dir.x+player_pos.x, y = look_dir.y+player_pos.y + 1.5, z = look_dir.z+player_pos.z}) -- Arbitrary value (1.5) is head level according to player info mod. + -- Cast up to 64 to see if player is looking at enderman. + for n = 1,64,.25 do + local node = minetest.get_node(look_pos) + if node.name ~= "air" then + break + end + if look_pos.x-1enderpos.x and look_pos.y-2.89enderpos.y and look_pos.z-1enderpos.z then + self.provoked = "staring" + self.attack = minetest.get_player_by_name(obj:get_player_name()) break - --begin attacking the player else if self.provoked == "staring" then self.provoked = "broke_contact" - self.hostile = true - self.state = "attack" - self.attacking = obj end end - + look_pos.x = look_pos.x + (.25 * look_dir.x) + look_pos.y = look_pos.y + (.25 * look_dir.y) + look_pos.z = look_pos.z + (.25 * look_dir.z) end end end @@ -454,14 +419,14 @@ mobs:register_mob("mobs_mc:enderman", { self.base_texture = create_enderman_textures(block_type, self._taken_node) self.object:set_properties({ textures = self.base_texture }) self.animation = select_enderman_animation("block") - mobs.set_mob_animation(self, self.animation.current) + mobs:set_animation(self, self.animation.current) if def.sounds and def.sounds.dug then minetest.sound_play(def.sounds.dug, {pos = take_pos, max_hear_distance = 16}, true) end end end end - elseif self._taken_node and self._taken_node ~= "" and self._take_place_timer >= self._next_take_place_time then + elseif self._taken_node ~= nil and self._taken_node ~= "" and self._take_place_timer >= self._next_take_place_time then -- Place taken node self._take_place_timer = 0 self._next_take_place_time = math.random(take_frequency_min, take_frequency_max) @@ -477,7 +442,7 @@ mobs:register_mob("mobs_mc:enderman", { local def = minetest.registered_nodes[self._taken_node] -- Update animation accordingly (removes visible block) self.animation = select_enderman_animation("normal") - mobs.set_mob_animation(self, self.animation.current) + mobs:set_animation(self, self.animation.current) if def.sounds and def.sounds.place then minetest.sound_play(def.sounds.place, {pos = place_pos, max_hear_distance = 16}, true) end @@ -487,12 +452,12 @@ mobs:register_mob("mobs_mc:enderman", { end end, do_teleport = function(self, target) - if target then + if target ~= nil then local target_pos = target:get_pos() -- Find all solid nodes below air in a 10×10×10 cuboid centered on the target local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(target_pos, 5), vector.add(target_pos, 5), {"group:solid", "group:cracky", "group:crumbly"}) local telepos - if nodes then + if nodes ~= nil then if #nodes > 0 then -- Up to 64 attempts to teleport for n=1, math.min(64, #nodes) do @@ -527,7 +492,7 @@ mobs:register_mob("mobs_mc:enderman", { -- We need to add (or subtract) different random numbers to each vector component, so it couldn't be done with a nice single vector.add() or .subtract(): local randomCube = vector.new( pos.x + 8*(pr:next(0,16)-8), pos.y + 8*(pr:next(0,16)-8), pos.z + 8*(pr:next(0,16)-8) ) local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(randomCube, 4), vector.add(randomCube, 4), {"group:solid", "group:cracky", "group:crumbly"}) - if nodes then + if nodes ~= nil then if #nodes > 0 then -- Up to 8 low-level (in total up to 8*8 = 64) attempts to teleport for n=1, math.min(8, #nodes) do @@ -559,21 +524,19 @@ mobs:register_mob("mobs_mc:enderman", { end, on_die = function(self, pos) -- Drop carried node on death - if self._taken_node and self._taken_node ~= "" then + if self._taken_node ~= nil and self._taken_node ~= "" then minetest.add_item(pos, self._taken_node) end end, do_punch = function(self, hitter, tflp, tool_caps, dir) -- damage from rain caused by itself so we don't want it to attack itself. - if hitter ~= self.object and hitter then + if hitter ~= self.object and hitter ~= nil then --if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then -- self:teleport(nil) --else - if pr:next(1, 8) == 8 then --FIXME: real mc rate self:teleport(hitter) - end - self.attack=hitter - self.state="attack" + self.attack=hitter + self.state="attack" --end end end, @@ -581,194 +544,16 @@ mobs:register_mob("mobs_mc:enderman", { water_damage = 8, view_range = 64, fear_height = 4, - attack_type = "punch", + attack_type = "dogfight", }) -- End spawn -mobs:spawn_specific( -"mobs_mc:enderman", -"end", -"ground", -{ -"End" -}, -0, -minetest.LIGHT_MAX+1, -30, -3000, -12, -mobs_mc.spawn_height.end_min, -mobs_mc.spawn_height.end_max) +mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 3000, 12, mobs_mc.spawn_height.end_min, mobs_mc.spawn_height.end_max) -- Overworld spawn -mobs:spawn_specific( -"mobs_mc:enderman", -"overworld", -"ground", -{ -"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, -7, -30, -19000, -2, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) - +mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 19000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- Nether spawn (rare) -mobs:spawn_specific( -"mobs_mc:enderman", -"nether", -"ground", -{ -"Nether" -}, -0, -7, -30, -27500, -4, -mobs_mc.spawn_height.nether_min, -mobs_mc.spawn_height.nether_max) +mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 27500, 4, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) -- spawn eggs mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0) diff --git a/mods/ENTITIES/mobs_mc/endermite.lua b/mods/ENTITIES/mobs_mc/endermite.lua index 29a887c067..da3922a106 100644 --- a/mods/ENTITIES/mobs_mc/endermite.lua +++ b/mods/ENTITIES/mobs_mc/endermite.lua @@ -2,22 +2,18 @@ --################### ENDERMITE --################### -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:endermite", { - description = S("Endermite"), type = "monster", spawn_class = "hostile", passive = false, - rotate = 270, - hostile = true, hp_min = 8, hp_max = 8, xp_min = 3, xp_max = 3, armor = {fleshy = 100, arthropod = 100}, group_attack = true, - attack_type = "punch", collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.29, 0.2}, visual = "mesh", mesh = "mobs_mc_endermite.b3d", diff --git a/mods/ENTITIES/mobs_mc/ghast.lua b/mods/ENTITIES/mobs_mc/ghast.lua index dc47411fdf..679a28c13d 100644 --- a/mods/ENTITIES/mobs_mc/ghast.lua +++ b/mods/ENTITIES/mobs_mc/ghast.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### GHAST @@ -11,20 +11,15 @@ local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:ghast", { - description = S("Ghast"), type = "monster", spawn_class = "hostile", + pathfinding = 1, group_attack = true, - hostile = true, - fly_random_while_attack = true, hp_min = 10, hp_max = 10, - rotate = 270, xp_min = 5, xp_max = 5, - reach = 20, - eye_height = 2.5, - collisionbox = {-2, 0, -2, 2, 4, 2}, + collisionbox = {-2, 5, -2, 2, 9, 2}, visual = "mesh", mesh = "mobs_mc_ghast.b3d", textures = { @@ -40,10 +35,8 @@ mobs:register_mob("mobs_mc:ghast", { -- TODO: damage -- TODO: better death }, - walk_velocity = 1.6, run_velocity = 3.2, - drops = { {name = mobs_mc.items.gunpowder, chance = 1, min = 0, max = 2, looting = "common"}, {name = mobs_mc.items.ghast_tear, chance = 10/6, min = 0, max = 1, looting = "common", looting_ignore_chance = true}, @@ -54,86 +47,55 @@ mobs:register_mob("mobs_mc:ghast", { walk_start = 0, walk_end = 40, run_start = 0, run_end = 40, }, - fall_damage = 0, - view_range = 28, - attack_type = "projectile", - arrow = "mobs_mc:ghast_fireball", + view_range = 100, + attack_type = "dogshoot", + arrow = "mobs_mc:fireball", + shoot_interval = 3.5, + shoot_offset = -5, + dogshoot_switch = 1, + dogshoot_count_max =1, + passive = false, + jump = true, + jump_height = 4, floats=1, fly = true, makes_footstep_sound = false, + instant_death = true, fire_resistant = true, - projectile_cooldown_min = 5, - projectile_cooldown_max = 7, - shoot_arrow = function(self, pos, dir) - -- 2-4 damage per arrow - local dmg = math.random(2,4) - mobs.shoot_projectile_handling("mobs_mc:ghast_fireball", pos, dir, self.object:get_yaw(), self.object, 11, dmg,nil,nil,nil,-0.6) - end, - --[[ - do_custom = function(self) - if self.firing == true then - self.base_texture = {"mobs_mc_ghast_firing.png"} - self.object:set_properties({textures=self.base_texture}) - else - self.base_texture = {"mobs_mc_ghast.png"} - self.object:set_properties({textures=self.base_texture}) - end - end, - ]]-- }) -mobs:spawn_specific( -"mobs_mc:ghast", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -18000, -2, -mobs_mc.spawn_height.nether_min, -mobs_mc.spawn_height.nether_max) +mobs:spawn_specific("mobs_mc:ghast", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 18000, 2, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) -- fireball (projectile) -mobs:register_arrow("mobs_mc:ghast_fireball", { +mobs:register_arrow("mobs_mc:fireball", { visual = "sprite", visual_size = {x = 1, y = 1}, textures = {"mcl_fire_fire_charge.png"}, velocity = 15, - collisionbox = {-.5, -.5, -.5, .5, .5, .5}, - tail = 1, - tail_texture = "mobs_mc_spit.png^[colorize:black:255", --repurpose spit texture - tail_size = 5, - _is_fireball = true, hit_player = function(self, player) - --[[ + if rawget(_G, "armor") and armor.last_damage_types then + armor.last_damage_types[player:get_player_name()] = "fireball" + end player:punch(self.object, 1.0, { full_punch_interval = 1.0, damage_groups = {fleshy = 6}, }, nil) - ]]-- - --mobs:boom(self, self.object:get_pos(), 1, true) - mcl_explosions.explode(self.object:get_pos(), 3,{ drop_chance = 1.0 }) + mobs:boom(self, self.object:get_pos(), 1, true) end, hit_mob = function(self, mob) mob:punch(self.object, 1.0, { full_punch_interval = 1.0, - damage_groups = {fleshy = self._damage}, + damage_groups = {fleshy = 6}, }, nil) - --mobs:boom(self, self.object:get_pos(), 1, true) - mcl_explosions.explode(self.object:get_pos(), 3,{ drop_chance = 1.0 }) + mobs:boom(self, self.object:get_pos(), 1, true) end, hit_node = function(self, pos, node) - --mobs:boom(self, pos, 1, true) - mcl_explosions.explode(self.object:get_pos(), 3,{ drop_chance = 1.0 }) + mobs:boom(self, pos, 1, true) end }) diff --git a/mods/ENTITIES/mobs_mc/guardian.lua b/mods/ENTITIES/mobs_mc/guardian.lua index 3e1a4f8537..13c857ea39 100644 --- a/mods/ENTITIES/mobs_mc/guardian.lua +++ b/mods/ENTITIES/mobs_mc/guardian.lua @@ -2,10 +2,9 @@ --################### GUARDIAN --################### -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:guardian", { - description = S("Guardian"), type = "monster", spawn_class = "hostile", hp_min = 30, @@ -13,8 +12,8 @@ mobs:register_mob("mobs_mc:guardian", { xp_min = 10, xp_max = 10, breath_max = -1, - passive = false, - attack_type = "punch", + passive = false, + attack_type = "dogfight", pathfinding = 1, view_range = 16, walk_velocity = 2, @@ -94,6 +93,7 @@ mobs:register_mob("mobs_mc:guardian", { makes_footstep_sound = false, fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, jump = false, + view_range = 16, }) -- Spawning disabled due to size issues diff --git a/mods/ENTITIES/mobs_mc/guardian_elder.lua b/mods/ENTITIES/mobs_mc/guardian_elder.lua index 2bb0e984a8..a58a4a5b76 100644 --- a/mods/ENTITIES/mobs_mc/guardian_elder.lua +++ b/mods/ENTITIES/mobs_mc/guardian_elder.lua @@ -4,10 +4,9 @@ --################### GUARDIAN --################### -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:guardian_elder", { - description = S("Elder Guardian"), type = "monster", spawn_class = "hostile", hp_min = 80, @@ -15,8 +14,8 @@ mobs:register_mob("mobs_mc:guardian_elder", { xp_min = 10, xp_max = 10, breath_max = -1, - passive = false, - attack_type = "punch", + passive = false, + attack_type = "dogfight", pathfinding = 1, view_range = 16, walk_velocity = 2, @@ -104,9 +103,10 @@ mobs:register_mob("mobs_mc:guardian_elder", { makes_footstep_sound = false, fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, jump = false, + view_range = 16, }) --- Spawning disabled due to size issues <- what do you mean? -j4i +-- Spawning disabled due to size issues -- TODO: Re-enable spawning -- mobs:spawn_specific("mobs_mc:guardian_elder", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 40000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-18) diff --git a/mods/ENTITIES/mobs_mc/horse.lua b/mods/ENTITIES/mobs_mc/horse.lua index 4b33515d5c..b9d82660c6 100644 --- a/mods/ENTITIES/mobs_mc/horse.lua +++ b/mods/ENTITIES/mobs_mc/horse.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### HORSE @@ -38,9 +38,9 @@ end local can_equip_horse_armor = function(entity_id) return entity_id == "mobs_mc:horse" or entity_id == "mobs_mc:skeleton_horse" or entity_id == "mobs_mc:zombie_horse" end ---[[local can_equip_chest = function(entity_id) +local can_equip_chest = function(entity_id) return entity_id == "mobs_mc:mule" or entity_id == "mobs_mc:donkey" -end]] +end local can_breed = function(entity_id) return entity_id == "mobs_mc:horse" or "mobs_mc:mule" or entity_id == "mobs_mc:donkey" end @@ -83,15 +83,10 @@ end -- Horse local horse = { - description = S("Horse"), type = "animal", spawn_class = "passive", visual = "mesh", mesh = "mobs_mc_horse.b3d", - rotate = 270, - walk_velocity = 1, - run_velocity = 8, - skittish = true, visual_size = {x=3.0, y=3.0}, collisionbox = {-0.69825, -0.01, -0.69825, 0.69825, 1.59, 0.69825}, animation = { @@ -101,7 +96,7 @@ local horse = { walk_speed = 25, walk_start = 0, walk_end = 40, - run_speed = 120, + run_speed = 60, run_start = 0, run_end = 40, }, @@ -118,8 +113,7 @@ local horse = { fly = false, walk_chance = 60, view_range = 16, - follow = "mcl_farming:wheat_item", - follow_distance = 3, + follow = mobs_mc.follow.horse, passive = true, hp_min = 15, hp_max = 30, @@ -163,31 +157,10 @@ local horse = { self._regentimer = 0 end - -- Some weird human is riding. Buck them off? - if self.driver and not self.tamed and self.buck_off_time <= 0 then - if math.random() < 0.2 then - mobs.detach(self.driver, {x = 1, y = 0, z = 1}) - -- TODO bucking animation - else - -- Nah, can't be bothered. Think about it again in one second - self.buck_off_time = 20 - end - end + -- if driver present allow control of horse + if self.driver then - -- Tick the timer for trying to buck the player off - if self.buck_off_time then - if self.driver then - self.buck_off_time = self.buck_off_time - 1 - else - -- Player isn't riding anymore so no need to count - self.buck_off_time = nil - end - end - - -- if driver present and horse has a saddle allow control of horse - if self.driver and self._saddle then - - mobs.drive(self, "run", "stand", false, dtime) + mobs.drive(self, "walk", "stand", false, dtime) return false -- skip rest of mob functions end @@ -218,73 +191,6 @@ local horse = { local item = clicker:get_wielded_item() local iname = item:get_name() local heal = 0 - - --sneak click to breed the horse/feed it - if self.owner and self.owner == clicker:get_player_name() then - --attempt to enter breed state - if mobs.enter_breed_state(self,clicker) then - return - end - end - - --don't do any other logic with the baby - --make baby grow faster - if self.baby then - mobs.make_baby_grow_faster(self,clicker) - return - end - - -- Taming - self.temper = self.temper or (math.random(1,100)) - - if not self.tamed then - local temper_increase = 0 - - -- Feeding, intentionally not using mobs:feed_tame because horse taming is - -- different and more complicated - if (iname == mobs_mc.items.sugar) then - temper_increase = 3 - elseif (iname == mobs_mc.items.wheat) then - temper_increase = 3 - elseif (iname == mobs_mc.items.apple) then - temper_increase = 3 - elseif (iname == mobs_mc.items.golden_carrot) then - temper_increase = 5 - elseif (iname == mobs_mc.items.golden_apple) then - temper_increase = 10 - -- Trying to ride - elseif not self.driver then - self.object:set_properties({stepheight = 1.1}) - mobs.attach(self, clicker) - self.buck_off_time = 40 -- TODO how long does it take in minecraft? - if self.temper > 100 then - self.tamed = true -- NOTE taming can only be finished by riding the horse - mobs.tamed_effect(self) - if not self.owner or self.owner == "" then - self.owner = clicker:get_player_name() - end - end - temper_increase = 5 - - -- Clicking on the horse while riding ==> unmount - elseif self.driver and self.driver == clicker then - mobs.detach(clicker, {x = 1, y = 0, z = 1}) - end - - -- If nothing happened temper_increase = 0 and addition does nothing - self.temper = self.temper + temper_increase - - --give the player some kind of idea - --of what's happening with the horse's temper - if self.temper <= 100 then - mobs.feed_effect(self) - else - mobs.tamed_effect(self) - end - - return - end - if can_breed(self.name) then -- Breed horse with golden apple or golden carrot if (iname == mobs_mc.items.golden_apple) then @@ -296,8 +202,7 @@ local horse = { return end end - -- Feed with anything else - -- TODO heal amounts don't work + -- Feed/tame with anything else if (iname == mobs_mc.items.sugar) then heal = 1 elseif (iname == mobs_mc.items.wheat) then @@ -307,14 +212,18 @@ local horse = { elseif (iname == mobs_mc.items.hay_bale) then heal = 20 end - if heal > 0 and mobs:feed_tame(self, clicker, heal, false, false) then + if heal > 0 and mobs:feed_tame(self, clicker, heal, false, true) then + return + end + + if mobs:protect(self, clicker) then return end -- Make sure tamed horse is mature and being clicked by owner only if self.tamed and not self.child and self.owner == clicker:get_player_name() then - --local inv = clicker:get_inventory() + local inv = clicker:get_inventory() -- detatch player already riding horse if self.driver and clicker == self.driver then @@ -382,6 +291,9 @@ local horse = { self.object:set_properties({stepheight = 1.1}) mobs.attach(self, clicker) + -- Used to capture horse + elseif not self.driver and iname ~= "" then + mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end end end, @@ -441,7 +353,6 @@ mobs:register_mob("mobs_mc:horse", horse) -- Skeleton horse local skeleton_horse = table.copy(horse) -skeleton_horse.description = S("Skeleton Horse") skeleton_horse.breath_max = -1 skeleton_horse.armor = {undead = 100, fleshy = 100} skeleton_horse.textures = {{"blank.png", "mobs_mc_horse_skeleton.png", "blank.png"}} @@ -464,7 +375,6 @@ mobs:register_mob("mobs_mc:skeleton_horse", skeleton_horse) -- Zombie horse local zombie_horse = table.copy(horse) -zombie_horse.description = S("Zombie Horse") zombie_horse.breath_max = -1 zombie_horse.armor = {undead = 100, fleshy = 100} zombie_horse.textures = {{"blank.png", "mobs_mc_horse_zombie.png", "blank.png"}} @@ -489,7 +399,6 @@ mobs:register_mob("mobs_mc:zombie_horse", zombie_horse) -- Donkey local d = 0.86 -- donkey scale local donkey = table.copy(horse) -donkey.description = S("Donkey") donkey.textures = {{"blank.png", "mobs_mc_donkey.png", "blank.png"}} donkey.animation = { speed_normal = 25, @@ -520,7 +429,6 @@ mobs:register_mob("mobs_mc:donkey", donkey) -- Mule local m = 0.94 local mule = table.copy(donkey) -mule.description = S("Mule") mule.textures = {{"blank.png", "mobs_mc_mule.png", "blank.png"}} mule.visual_size = { x=horse.visual_size.x*m, y=horse.visual_size.y*m } mule.sounds = table.copy(donkey.sounds) @@ -537,91 +445,12 @@ mobs:register_mob("mobs_mc:mule", mule) --=========================== --Spawn Function -mobs:spawn_specific( -"mobs_mc:horse", -"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, -4, -mobs_mc.spawn_height.water+3, -mobs_mc.spawn_height.overworld_max) - - -mobs:spawn_specific( -"mobs_mc:donkey", -"overworld", -"ground", -{ -"Mesa", -"MesaPlateauFM_grasstop", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -}, -0, -minetest.LIGHT_MAX+1, -30, -15000, -4, -mobs_mc.spawn_height.water+3, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:horse", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:donkey", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:horse", S("Horse"), "mobs_mc_spawn_icon_horse.png", 0) mobs:register_egg("mobs_mc:skeleton_horse", S("Skeleton Horse"), "mobs_mc_spawn_icon_horse_skeleton.png", 0) ---mobs:register_egg("mobs_mc:zombie_horse", S("Zombie Horse"), "mobs_mc_spawn_icon_horse_zombie.png", 0) +mobs:register_egg("mobs_mc:zombie_horse", S("Zombie Horse"), "mobs_mc_spawn_icon_horse_zombie.png", 0) mobs:register_egg("mobs_mc:donkey", S("Donkey"), "mobs_mc_spawn_icon_donkey.png", 0) mobs:register_egg("mobs_mc:mule", S("Mule"), "mobs_mc_spawn_icon_mule.png", 0) diff --git a/mods/ENTITIES/mobs_mc/init.lua b/mods/ENTITIES/mobs_mc/init.lua index d7600e927d..58006fe90e 100644 --- a/mods/ENTITIES/mobs_mc/init.lua +++ b/mods/ENTITIES/mobs_mc/init.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local path = minetest.get_modpath(minetest.get_current_modname()) +local path = minetest.get_modpath("mobs_mc") if not minetest.get_modpath("mobs_mc_gameconfig") then mobs_mc = {} diff --git a/mods/ENTITIES/mobs_mc/iron_golem.lua b/mods/ENTITIES/mobs_mc/iron_golem.lua index 939412abbd..2ccee2d0a2 100644 --- a/mods/ENTITIES/mobs_mc/iron_golem.lua +++ b/mods/ENTITIES/mobs_mc/iron_golem.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### IRON GOLEM @@ -12,15 +12,11 @@ local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:iron_golem", { - description = S("Iron Golem"), type = "npc", spawn_class = "passive", passive = true, - rotate = 270, hp_min = 100, hp_max = 100, - protect = true, - neutral = true, breath_max = -1, collisionbox = {-0.7, -0.01, -0.7, 0.7, 2.69, 0.7}, visual = "mesh", @@ -43,7 +39,7 @@ mobs:register_mob("mobs_mc:iron_golem", { reach = 3, group_attack = true, attacks_monsters = true, - attack_type = "punch", + attack_type = "dogfight", drops = { {name = mobs_mc.items.iron_ingot, chance = 1, @@ -158,11 +154,11 @@ mobs_mc.tools.check_iron_golem_summon = function(pos) if ok then -- Remove the nodes minetest.remove_node(pos) - minetest.check_for_falling(pos) + core.check_for_falling(pos) for i=1, 4 do local cpos = vector.add(pos, checks[c][i]) minetest.remove_node(cpos) - minetest.check_for_falling(cpos) + core.check_for_falling(cpos) end -- Summon iron golem local place diff --git a/mods/ENTITIES/mobs_mc/llama.lua b/mods/ENTITIES/mobs_mc/llama.lua index 9c3f681b18..36d020a656 100644 --- a/mods/ENTITIES/mobs_mc/llama.lua +++ b/mods/ENTITIES/mobs_mc/llama.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### LLAMA @@ -25,18 +25,8 @@ local carpets = { } mobs:register_mob("mobs_mc:llama", { - description = S("Llama"), type = "animal", spawn_class = "passive", - rotate = 270, - neutral = true, - group_attack = true, - attack_type = "projectile", - shoot_arrow = function(self, pos, dir) - -- 2-4 damage per arrow - local dmg = 1 - mobs.shoot_projectile_handling("mobs_mc:spit", pos, dir, self.object:get_yaw(), self.object, nil, dmg) - end, hp_min = 15, hp_max = 30, xp_min = 1, @@ -59,11 +49,7 @@ mobs:register_mob("mobs_mc:llama", { walk_velocity = 1, run_velocity = 4.4, follow_velocity = 4.4, - breed_distance = 1.5, - baby_size = 0.5, - follow_distance = 2, floats = 1, - reach = 6, drops = { {name = mobs_mc.items.leather, chance = 1, @@ -96,7 +82,7 @@ mobs:register_mob("mobs_mc:llama", { look_start = 78, look_end = 108, }, - follow = mobs_mc.items.hay_bale, + follow = mobs_mc.follow.llama, view_range = 16, do_custom = function(self, dtime) @@ -139,71 +125,30 @@ mobs:register_mob("mobs_mc:llama", { return end - --owner is broken for this - --we'll make the owner this guy - --attempt to enter breed state - if mobs.enter_breed_state(self,clicker) then - self.tamed = true - self.owner = clicker:get_player_name() - return + local item = clicker:get_wielded_item() + if item:get_name() == mobs_mc.items.hay_bale then + -- Breed with hay bale + if mobs:feed_tame(self, clicker, 1, true, false) then return end + else + -- Feed with anything else + if mobs:feed_tame(self, clicker, 1, false, true) then return end end - - --ignore other logic - --make baby grow faster - if self.baby then - mobs.make_baby_grow_faster(self,clicker) - return - end - + if mobs:protect(self, clicker) then return end -- Make sure tamed llama is mature and being clicked by owner only if self.tamed and not self.child and self.owner == clicker:get_player_name() then - local item = clicker:get_wielded_item() - --safety catch - if not item then - return - end - - - - --put chest on carpeted llama - if self.carpet and not self.chest and item:get_name() == "mcl_chests:chest" then - if not minetest.is_creative_enabled(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - - self.base_texture = table.copy(self.base_texture) - self.base_texture[1] = "mobs_mc_llama_chest.png" - self.object:set_properties({ - textures = self.base_texture, - }) - self.chest = true - - return --don't attempt to ride - end - - -- Place carpet - --TODO: Re-enable this code when carpet textures arrived. - if minetest.get_item_group(item:get_name(), "carpet") == 1 then - + --[[ TODO: Re-enable this code when carpet textures arrived. + if minetest.get_item_group(item:get_name(), "carpet") == 1 and not self.carpet then for group, carpetdata in pairs(carpets) do if minetest.get_item_group(item:get_name(), group) == 1 then if not minetest.is_creative_enabled(clicker:get_player_name()) then item:take_item() clicker:set_wielded_item(item) - - --shoot off old carpet - if self.carpet then - minetest.add_item(self.object:get_pos(), self.carpet) - end end - local substr = carpetdata[2] local tex_carpet = "mobs_mc_llama_decor_"..substr..".png" - self.base_texture = table.copy(self.base_texture) self.base_texture[2] = tex_carpet self.object:set_properties({ @@ -224,21 +169,23 @@ mobs:register_mob("mobs_mc:llama", { end end end + ]] - if self.carpet then - -- detatch player already riding llama - if self.driver and clicker == self.driver then + -- detatch player already riding llama + if self.driver and clicker == self.driver then - mobs.detach(clicker, {x = 1, y = 0, z = 1}) + mobs.detach(clicker, {x = 1, y = 0, z = 1}) - -- attach player to llama - elseif not self.driver then + -- attach player to llama + elseif not self.driver then - self.object:set_properties({stepheight = 1.1}) - mobs.attach(self, clicker) - end + self.object:set_properties({stepheight = 1.1}) + mobs.attach(self, clicker) end + -- Used to capture llama + elseif not self.driver and clicker:get_wielded_item():get_name() ~= "" then + mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end end, @@ -270,60 +217,7 @@ mobs:register_mob("mobs_mc:llama", { }) --spawn -mobs:spawn_specific( -"mobs_mc:llama", -"overworld", -"ground", -{ -"Mesa", -"MesaPlateauFM_grasstop", -"MesaPlateauF", -"MesaPlateauFM", -"MesaPlateauF_grasstop", -"MesaBryce", -}, -0, -minetest.LIGHT_MAX+1, -30, -15000, -5, -mobs_mc.spawn_height.water+15, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:llama", mobs_mc.spawn.savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 5, mobs_mc.spawn_height.water+15, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:llama", S("Llama"), "mobs_mc_spawn_icon_llama.png", 0) - - --- llama spit -mobs:register_arrow("mobs_mc:spit", { - visual = "sprite", - visual_size = {x = 0.3, y = 0.3}, - textures = {"mobs_mc_spit.png"}, - velocity = 1, - speed = 1, - tail = 1, - tail_texture = "mobs_mc_spit.png", - tail_size = 2, - tail_distance_divider = 4, - - hit_player = function(self, player) - --[[if rawget(_G, "armor") and armor.last_damage_types then - armor.last_damage_types[player:get_player_name()] = "spit" - end]] - player:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = self._damage}, - }, nil) - end, - - hit_mob = function(self, mob) - mob:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = self._damage}, - }, nil) - end, - - hit_node = function(self, pos, node) - --does nothing - end -}) \ No newline at end of file diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.pl.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.pl.tr deleted file mode 100644 index 06eaa457a6..0000000000 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.pl.tr +++ /dev/null @@ -1,75 +0,0 @@ -# textdomain: mobs_mc -Totem of Undying=Token nieśmiertelności -A totem of undying is a rare artifact which may safe you from certain death.=Totem nieśmiertelności to rzadki artefakt, który może uchronić cię przed pewną śmiercią. -The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Totem działa tylko kiedy trzymasz go w dłoni. Jeśli otrzymasz obrażenia od upadku zostaniesz oszczędzony i pozostanie ci 1 HP, jednak totem zostanie wtedy zniszczony. -Agent=Agent -Bat=Nietoperz -Blaze=Płomyk -Chicken=Kurczak -Cow=Krowa -Mooshroom=Muuuchomor -Creeper=Creeper -Ender Dragon=Smok kresu -Enderman=Enderman -Endermite=Endermit -Ghast=Ghast -Elder Guardian=Prastrażnik -Guardian=Strażnik -Horse=Koń -Skeleton Horse=Koń szkielet -Zombie Horse=Koń zombie -Donkey=Osioł -Mule=Muł -Iron Golem=Żelazny golem -Llama=Lama -Ocelot=Ocelot -Parrot=Papuga -Pig=Świnia -Polar Bear=Niedźwiedź polarny -Rabbit=Królik -Killer Bunny=Królik zabójca -Sheep=Owca -Shulker=Shulker -Silverfish=Rybik cukrowy -Skeleton=Szkielet -Stray=Tułacz -Wither Skeleton=Witherowy szkielet -Magma Cube=Kostka magmy -Slime=Szlam -Snow Golem=Śnieżny golem -Spider=Pająk -Cave Spider=Pająk jaskiniowy -Squid=Kałamarnica -Vex=Dręczyciel -Evoker=Przywoływacz -Illusioner=Iluzjonista -Villager=Osadnik -Vindicator=Obrońca -Zombie Villager=Osadnik zombie -Witch=Wiedźma -Wither=Wither -Wolf=Wilk -Husk=Posuch -Zombie=Zombie -Zombie Pigman=Świniak zombie -Iron Horse Armor=Żelazna zbroja dla konia -Iron horse armor can be worn by horses to increase their protection from harm a bit.=Żelazna zbroja dla konia może być noszona przez konie aby nieco zwiększyć ich odporność na obrażenia. -Golden Horse Armor=Złota zbroja dla konia -Golden horse armor can be worn by horses to increase their protection from harm.=Złota zbroja dla konia może być noszona przez konie aby zwiększyć ich odporność na obrażenia. -Diamond Horse Armor=Diamentowa zbroja dla konia -Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Diamentowa zbroja dla konia może być noszona przez konie aby istotnie zwiększyć ich odporność na obrażenia. -Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Połóż ją na koniu aby założyć zbroję dla konia. Osły i muły nie mogą nosić zbroi dla konia. -Farmer=Rolnik -Fisherman=Rybak -Fletcher=Łuczarz -Shepherd=Pasterz -Librarian=Bibliotekarz -Cartographer=Kartograf -Armorer=Płatnerz -Leatherworker=Rymarz -Butcher=Rzeźnik -Weapon Smith=Zbrojmistrz -Tool Smith=Narzędziarz -Cleric=Kapłan -Nitwit=Głupiec -Protects you from death while wielding it=Chroni przed śmiercią gdy go trzymasz diff --git a/mods/ENTITIES/mobs_mc/locale/template.txt b/mods/ENTITIES/mobs_mc/locale/template.txt index 7b55c1b89e..04ba9e4658 100644 --- a/mods/ENTITIES/mobs_mc/locale/template.txt +++ b/mods/ENTITIES/mobs_mc/locale/template.txt @@ -28,7 +28,6 @@ Pig= Polar Bear= Rabbit= Killer Bunny= -The Killer Bunny= Sheep= Shulker= Silverfish= diff --git a/mods/ENTITIES/mobs_mc/mod.conf b/mods/ENTITIES/mobs_mc/mod.conf index 98f48b388a..9f7da0e12c 100644 --- a/mods/ENTITIES/mobs_mc/mod.conf +++ b/mods/ENTITIES/mobs_mc/mod.conf @@ -1,6 +1,4 @@ name = mobs_mc -author = maikerumine description = Adds Minecraft-like monsters and animals. -depends = mcl_init, mcl_particles, mcl_mobs, mcl_wip +depends = mcl_init, mcl_particles, mcl_mobs optional_depends = default, mcl_tnt, mcl_bows, mcl_throwing, mcl_fishing, bones, mesecons_materials, mobs_mc_gameconfig, doc_items - diff --git a/mods/ENTITIES/mobs_mc/models/attributes.txt b/mods/ENTITIES/mobs_mc/models/attributes.txt deleted file mode 100644 index ec59e0f702..0000000000 --- a/mods/ENTITIES/mobs_mc/models/attributes.txt +++ /dev/null @@ -1 +0,0 @@ -Ghast fixed by epCode - Thanks! \ No newline at end of file diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_cat.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_cat.b3d index 1a6ecbbe82a74536be40bd5a427822847acd00f0..9ab4fc10ccbda15e9210e2702e858b35a1d76ff6 100644 GIT binary patch literal 54146 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 bLehWdeBH6GwauP_;>vq{d9HGOx!?XDEjuxb literal 50977 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 diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_cow.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_cow.b3d index c009839191e272db590eb0e08be0c90356b4acf6..2f13ba9c465a28ec5b289e0ae3cb02730ace6023 100644 GIT binary patch literal 75074 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 RwK41)rPcK_*f*xy{{jnz_mltt literal 71850 zcmeI52bdK_y7v!JkRUlL2N)Po;yHqV&h(IT&Y$Ac?%iE=uUEeJ-~I17XWH(e>fXKI=RQ02JTN#N znl=qK-%=)rFNe?P>)5Gzi{SvHxMGr3ZYz!Q+O$5X&{U;&;Gy zEOcnmt#ye~KHq%_J-c@A_EizjSq64$L+W7KU{CS^$4@1s87y<~j&Qpu|$c_Y$( zFJ&R`UNZ7lReC*Tq?xzG%)`E`C2z2~FY-c0=Dca<$z++mD$kkcwy#?qxYbqW^TlWQk~1H3=Zw7A z=OXW3a^~`^W6peTR(YB057)zIUJvIrayyT0KTbD_6nH)5SpRA%KHm{@U*t7Q-WZ>k zw4Hh1EG;X#{m_|t*f%aO8M;{B4YRz=`_S5mWMo? zn{^(@3mIN{C@+3rw>ogEE7VKud~qH=$1&q`eJ-EtH|sf8_t@82FV?=9>mJw0=X#CY z>Y&8X^b`1u0vXpbWFQac`*22{-zdPm)*08*%EP&}%g76vx>#PwtkcZ@ogEE1X;Gd~qH=$1&qrd@i5sH!_zO ztAp6NS^GNb&%C~F$LCfD$NqXTIrZVPDP1m?mFw0WZEw;g$xD;GldrAZ&^)QbGdA_8~dBe@T%=;p5 zU^4P>%+B&~ZqD*zd9d|-NtyRWo^`&lI&ln; z+^l^w*ZpMkm@{7^Gtb;Na~=46^2`{x$N!M=teVe^fqUqW8F}WjVCKc1RVxqo?k922 zuiQgMEH5PYuKCQw?Tb9Wv8U0=WPFCz9$5D-@-jaQAyem;=iGN2%d^@X-1mM1d9k($ zc_Gg{lo!7*>cv?HZgrLUd~qH=$1&q`eJ-DCwqbE~kA0o>V(p91z_D0$Z@qurj?b+Q z)?aELg^l@soc)YE*k*BgN$Z&RRh<2dJnS2nmz+7zvY#{WYuV3Nf1GZ9hPAI{cOoxV zo|%{Im51Yt-}f5JvyS;B>NE*?v2!!?lD+a`=WFfjRtIi%mHB)<&%@{PxxUQhS)ZG^ zUd%jS=K8bjXSd^XtAj)7?Tw|q+ohcPtC8aKos_oyUNZ7t{%m#1$&9>|;;* zzh`+T%wryCmWMo?TQno@Ub0sn%8TFEtq$Dk3iT2@-~IBrJ|E64cFZ^ypYP|Nn_|{; ztnRU|vtF!yGuJ(?kll_(NlZix>ujqQge z=9idHVgaVHU07lvi3KG-!ZfyvNh~T6T`a|!#m*e)lrti&=B%QKDb z$0R-~v4X^kOk=yU#7YwV601l=8r#(*R+X3_F_CF(KQ6I`#Oe~CU>e)CCDxKyQ(_&a zu^o_DPhwq(L8h_YKw^D~PfC1>X>2!^*hpeSiBB_)ZCr3%q-P}JVL=+(O(iywm?E*6 zM5M9ZQeq2<%_X*C8ry9pwvpIcVmqd>-BDr(iR~qJVjA0BC3cb6Sz2c( zxK!d2iOZSB_DYE>B)%ze71P*WD{+m))e_e+jqSH2ZjiWM;zp*iy+z_?iJK&Dm54O9 zcSzhWaht@qna1``iSJ5$N8&D~vAtK~9*Mgp?qeF;VTlJM?w1&08rz2?9+dc=#KTNu z`>4eCB_5IZ0n^w%A@R7xV-llGWBatkQxZ=~JR=clY@e5SPU2aK7nsKOWr>$0UX*x+ zX>4DUcvWJ$#Oq9B`}Nc>3RhY~+#8rw}ew&_q%h)~`9JH9D8nQO|$ zFguyk7gm3=@Rwaus(ko`oJYvGe}B3e|B}1DAu(D#^}AqV>UWW*ojSHSnb#~q{)CJi z=4QyqN#-JRlX*yMmyq!g)A`8!v85kLDnQ|k+sP>WL>fz z86bn?lVp9e0r?c!kZeRYCZ8ssA(O~t(jZgFCS+5x8QGj{LAE4Yk*&!#WLvTw*`Dk` zb|gEIoyjg_SF#(~o$NvOBzuv)$v$LXvLE>@`5f7w96$~v2a$uxA>>dpl}satk;BOm zY zhc&bXG_(aZw1qUZg*CK~XlRRQXp3rSi)mKIEAI9Q5&5) ztajSOabqXf9-W#t+1K}Khv?1z?NheoN;Ba0*>UK}+(C&ExQK|E-NRTP9A29UcqJm> zb%%gg83JBY2zUh{;PrxlR|f)K3kYcP5zw3?ps7YcGmL;H76HvC0-8nyG1U%LVcw`aqI3nOtL%?H%fJX$uZ~nFV@UV&776G>;0&X`1 z+)4 z>`C?_dy{?0zGOf0S@JouKRJLLXwvFK#O7e8hmb?bR5FbmMh+)OkR!=avWB&}wk>+W2oy6!6gE+%C_l792EiPqM63THFBofNm70<8RJnI?4?pIjwU765VzuDpD|^Eu z<(b$Z&qhTTt$n-$2JQ)@yaD$g38Ilqh6F88TIy8~ShCq}NyGyJ7I%ayXw9{0Ty z*xKxg$fwdappB^Pp+(vE8*dKG|FUl6u(UbXrR}NWqP35APJz{dFN!sc+>y3yzqDxy zS!mOf7X`XrHX_BOjjS$hWz{US;j%LV=km9TtdX{NnzX^yve0fUIX-YUM~4X7bhPb> zE?S%y;xn%e4CHLxCGxerE7r?9qq>XMKDXj`dj@{G&@Hl0-a*ynT~s3rt@C+u zHMoa^2Mrk&^A30KC~ahWhfgn%am!EgS}_70n{9-5NP$mV1VvL)Gy zY)!Ty+mh|b_GAaLBiV`UOm-o=lHJJeWDl|@*^BH=_96R{{m5s@=g9u#0CJ$okTHlH zOb#K3lBr}GIgA`mjvz;pqsYr$InAUsBL$l;GW`N-iUplW&qM$d%+O zay6Ol9aqrMdA-(+lt7Og;qSn;Ecmxh2a^(L(J=<#WA4lJ!z$brSkqZY+F4KWuZMEsSrGM z=~~#frt)Q>-CUqjP&~x2ZKdVULYq4wAt)YV_%5wK+dGV}U;B7Zep@xzXZ60YZB^Rd zVZ7F^GpDs`dx!B_yW9(_b_X^$NsNpTD|nq)!M1nkrXB9z8R$8qM&w1Yu748iS`4Y5 z-4AxTL+)%3G;UohGM`qv?H#(68;EQSj2Ie-*xrEc9lB}9eX%M~b5g^I?Pb{BVZ7F^ zhp#?a9Ju#oa>VvtZ12!bd$-o?fOv=z+bgoYLpN=Q@23RBLyXwomhBz7X}_N{H1K)j z&KX{u?H#&loz|-D9lB}7GYn44nLlECowj%AroG(qZ-Lu~3Po&h*7gqFwBi{CX6`H& zvAty5J9N{YUwAhl9%2NZ;Q{dwZST;j#XZq$#f^Y?h!NYXx4lEB7S}Fm`PqPYh!J>( z=q<3l!+0$w_(8jP{?UMVh!J>(3*}z3y+b$crJ9j|c!-f7<=(|T47=8?J;U*izp^(V z9%2N~1fGqGS!kWTG5##H9S-YcHruf;=5$U-ZgVeoqLqOjeIRy7Ol+5D}7 z2g}X~+r4wuveM@05ZqC6eE6z(hHb?|O!Uy2?Mdq{!6vT_46hZ>@Eh?Et9xj1ZsHjR z%iZl6wtFdSWTACFZ}1MwNTU`TJe)XU*zn1|i_um_$w3`ba{sBHdC%c<5C_ZX;Sd=; z{B!o`q15s(%|8qo^~|FR838g#K1tRm8<0+HYZzBj)kUT^lCXbNslmF`eq5b~L^?>&u{6jA-{KMZk{6nV}?|MY| zhkYIXp;K$WgW(^xbohr}TKI>v9R8tGYuX!f4Db(2JN!eZ);n*L$B*p#p>;U9Ww-TXtR)~*LP|In$mk0Fiz;Y)G; zp_kUpKXhvCI)i^W+~FTOwe~TLrGHqLqfqb*gPNY2Exo zFRjzwgn#Izb@LCsw3l4`Loe+j7yr;pd(Oo_bZYHu4F9l!_=j6L>I?tSskN`gGxQJb z(Pa3CUfM-*{^0`phhAFvhn2-YMBfJPVfcq`S{(DZIR6kMi0}`+v~K>Pm)6Zcbkm|P z-26kQ)~;VS|In$m>(|Xc^wPTdhhADY|IkZ&PW;2S#Xn3J|F9kXLoaO(@eiAce`wD( zfq&?wb@LCsw9e-(esZZfdKhyL>+ULRl)pbD+dY)3$K!~At{4P7MhJLB5d7xf?BPSp zJ+!`Djw-R-L+i`sNL%iq^` E%(s+k~z|C@JB+nduY|eC=2G7)v;*}A6j2xN7@=b zw7#^C^aT8oFwuhfMRsgXX8L(@3OSXWM!rD4Nd9vTAIgtsn#Ub7mXX%*VaRxs=@sNk zauvCnTtluU*OBYV4dh$oMsgFmnY7%)kYTxp@>*lQ9k+;bY$&bi8h&+!28d358brCa+zG} zRc>#W$)#S}<}$f-p-e8d&4@g54qjSJF8!@cE}bGnhwC`G)J+SMN`?*t`#HI^Bqx`8 zX)(FJ*UXjVA zLu7JkRhj74gOf|Ww3u9ag_BFih#8FGLoaRo4p>9;buw5|+qg*my@ON+^+zjI73_0m?B$)$Z{ za_Ppn$)#S}-^t|CT#m`5URtNQYP*MS&l@I}KH->L>Qyc#m!>-=m%3?j|H{x|a0w@u zHsRz_H!bRSJSUg#le!IXa;Z~`GNFBvlS^yMHQUa~rB1Ewz6|8#(&jRBn3t1F-Lx1& z+$57rm&)YQx#Aj*;^a~L zX_vUkrC!?loLqWEo?$%8m0X@7yWC?kxl~-l$Zz5%mwJ`^lT0pM=$KsU)Y|ns+hua8 zm-ezuF6}OpON+)$E_G^gyomc{a_JeFT)Ily-WNEz)TyY$;%=Dq4Ayiz7DrE_Yz(3a59mekO~ zDO9cB(i++_8rrfN+Hx9Nj2Wt)8wM#3!sW@&FkoBjkJJLGloJm^?ySlSxB{HJLPIe8Bu;*V;>*u(!X*q`0&vGMeIfmBHawBayhStw>BW*c`*3WYzZ8?V4&vYYgIfmBH zbR%s!hStw@BW*c`*3We#{XZQowBLUVAMpNzW2mZyW2mZyW2mZyW2mZyW2mZyW2mZy zW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZy zW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mb2YiQvZs+J4K zP*n@ZP*n@ZP*n@ZP*n@ZP*n@ZP*n@ZP*n@ZP*n@ZuoxXfYaZ#C)@jDy&j*bIH%t8s zd4?eaPdzLhJkcPYRuE4jh^Gw169nSv0R1HHYNT<;g18$&+-V^0A`o{7h^r6c%7VCR z;N#>IWKFUbS(~gw)-`D@M1;)%(?Rk{vOd{>e2SEzVly-%8AXP9dj~)5sUd7s;2% zm&sSiSIOyQhgpuah^(o8&F>Hu)j>5qXFFm~;*q+V8)}1Kxi*Wq(y|E)8vN4Q(C`ZC(xSLmJwA z8ru9C+J`l?1vIn;HME5^w1qXak7#I%XlRRSXp3oRi)(00XlP4nXiI5mOKWJ$XlTo7 zXv=A6%WG&WXlNhR&_1T2t*D{(YiKKJXe(=It7vEwG_+MUwAD1Ui5lAK8rm8fT6l)V zrBRzSeB!uqW6as4>G#K<7_z2;QGU%hdHY*aqCtDm@IPeGP-6C=p;R-1-~5|BXxN1H z(3EUOHYZz_&DcdyqZJUSw~w580ROM?OnF zNA@QNkORp<7Wk{m^jCdZIt$#LX(asoM#oJ3A0pC_k~Q^{%M z3*?LBOXSPsE99%>bTUM~M$RB-lC#L! zNvwoC$oI*kgpuah^(o8&F>Hu)j>5qXFFm~^^^_WQ5&1Kxi*Wq(y|E)8vN4Q(C`ZC(xS zLmJwA8ru9C+J`l?1vIn;HME5^w1qXak7#I%XlRRSXp3oRi)(00XlP4nXiI5mOKWJ$ zXlTo7Xv=A6%WG&WXlNhR&_1T2t*D{(YiKKJXe(=It7vEwG_+MUwAD1Ui5lAK8rm8f zTDXSzg;KbNV`@J?ethc0!Q+O$;5*bhpRxOgA}P(rtPvC7=l=awj^7Tt;sfITe2P5p6oz&Bs-Cv$u4A9vK!f*>_PS+2FOV;iFOe^kuaK{j)5#F|8aacUNzNi?lXJ+qRBHiXxJGp~=n|z0Sm)uG2 zB6pK}$i3t~azA;143iP^J@O!Vh&)UlA>SvDk{^)A$m8S*QeF;bI7yx&Pm^cJv*bDQ zJb8hJq;xiqx7 zHMDs&w0SkO4{2!gX=w9nXdl+l7SPZZ)X)~v&=%IvKBA#5qMwAKzasCO~HY5MziF#Xl4uG21_sx<>Gu zf3y9=Caj01WHYik*@A3Iwjx`TZOFD{JF-35f$T_jB0G~^$gX5JvOC#>>`C?_dy{?0 zzGOf0S@JouKRJLLNDd+glS9a%WGb0P4kL$?Bgm2DC~`D8h8#8}+@)KkK>(HWG>)i5kx-X$;*Y4fY@dA{PLn7Xr zN8cQ1+BrT6gRDUy^RU&ZTnAd0+%I{OUU?@W-qW>xOT<@tO^WMAaP_LUztV0llN z`&#AIV0k^v&#;cQy5u#LePem@BM2-nwy)1uDu3^2)hi2AZY*zm5~bmI9(yKe<{inE zBgsC#3X->=-k(!uXXN>OWn|xlk{8?8=Sx`B&8Q{i-9LSkW>d&m@m}eZ$eaCaRPwCj zTPbu*!eT6rkWxAyZ2QRFRY^#qUE=UXj#*mr40UdTAY@@ATO*i(MYg5}N1$n*KO zvb^KwXP^#zz8x$tmM1@Jma}Wz+;Xy0_;uLr?6*XPa=(N*mbZ2VK>5VLmJz#pI~pnK7)OPG`3-< zz^;KE1Um$2Y{MRa{Q!Fd?|Y=NjrT6z(|E7ry^1up@qWYm5bw{5Ok*4G5xjT&67ilu z8rx{E(Z1t-fc6+^Y(Fj$?I_yaCz!@|ZHcuc)|6O>X>2#?*ro%{0|7c&RHP}|*3pA} zKC8oRVf7~qf7vCa%76_0?6fPl(Iz(qj71wg>XK(G%M7Xtwo0s$8V0hNz{i-Ld)f`E&IfQx{Di-Uj* zgMf>KfQx~Ei-dp+gn)~MfQy2Fi-mv-hk%QQ;5YyN|Lbu3nZqd8Z*rHm54?W3PU(tT zTuW6g9x7EW?g>>b?i*Dt?k!a~hoM+?*@S!n|>6p+m%yU6;9J z*Jv);<<#2GbNrHB)461qm$soS*_Gy4vdgKpk71ZB*;U`MWS3KmV}Kq@c1@5ayS8y< zV3;>v+D~Q4u5VO=?KZXAVqK1hj^Tw&gHADT@=aOA@xDq$a8>iO3&jxYHt`@RnR~|0e<)z&$OLi@hCA;Ry zl3gRYWS5t=k}TPEMV9QED);Vx$*RsUZ=72DcrSCwF0AIfflGEdwf6BkS5Wt7QSMV* zvg@im!(VdAE@!#+F&vjAySB=bUG|FaFmK$n(BGFOyXHHV>~d=D^*6vgR&@T*nVo!dE=!$AE^*Lb?I98 zj#xJP#lo?zoA_g}%iUa{Qcx_M@L{oRuCM85E=cNCZtjGHpjbHJyIgP(oi|?EliyYi z_F26zY`2Q&ym4ynI&-$RwsqrnycbsO4s33c7#Sh0_&RCD(Rt%6*FLx5{+)rIGipR$ zO2Mv4nVtj{?UL~I1yMj3*}xz=Z%;4 zQq4#}ES$)XV%gvxwyhiIG2nQ|U)dWF3nzkS0?$T8mvZs>&^o;de-_$~hZBR13hfTV zOTn{@&Ku|P+V`X^MjAZrdnerS)_~~e(ni?Ujoa}q__A&=_tTrhSEbFtLdfX6@hbO= zVhw`}3ak#>3oN7a#!D-fP4Ig1qHyA*j!}4l=)CdLp3UDXc(Ck@u*HL|G`sgkE{p`f`S+L8dt+a} zTo1T@uy4Gyuy20juy34N+^dMNZ~8jy8>iO3hhX2dbl5juTG%(U9QKV46tuX zJM0^$);%PI|$Mvi5fa_s}>&;?J@GJ6X?G2(qeGx3J0ggNHdP^8!v7A z;MA+~dO-J$m-ZZpx(#q}%Be+}&_2n* zsoHYQw#&7%%^SCK8_2<_=F)YOmxEKza#1F_a5l-{)KVFonk%NwC=O0}Y5g)dl`ex* zQ)r&s=1u%D*vET`gHyxgnOM)kDQCI1_Su1Z0_k(AMY_ndR!yEcze}Cj+WH)vx+2do zo@I33c$Irh2B*ZtiTsA$yXe00(*7iaQwtq~Q%)`F3~{#0;FOp4vJ6gjm%*u`af4G% zEzS*bzYI>Dk-@1|()PZvM^MpcV3DOD}Tq*S#qYE-o_YE-r8vr*Ne&qh@X zqefK=qefK=qefMWF)39o#-voWFltn_7?V=fVoXX^i!muxEyko&wJ>T_wHT99)nZIa zRSTm=Rf{nxRV|DfRV|!ERV~J(RJAZ_RJ9c~w0;dOj2hKrfKj8W#h8?;7GqMXT8v4l zYB46Is)bRbs>PU;sup8Xs#+K|H>Gh;9W>FJN^Gx}IsXCcL1!B_Qp*zj=HFkAVPjvv z?Df1;qmQT6Hy%_EFl#G~3>#G~3>#G~3>#G~3>#G~3>#G~3>#G~3>#G~44YdtZ1mUj z4&{)KVz4*S6@UOY9|0~r0^D;1xZVhGs}b;KLBLxB0dE8ZwDt&S$q~>>BcKIFK)#3P^xRp;yS5naV=G~ zxZbK-+!Lx=+&8LP+*_(z+<&TC+@q>m+{da~-0P}ZJP)c`JTt0VJXfk(JbS8IJfEss zJj1G5Jm;!fv<0eKv=^#cv?;1uv^%O=v`wm7v|p-Pv~j9hw1cWzw3Vt_w5O_CST?F! zST?F!ST?F!zlIi;jcU2DY*e+dY*e+dY*e+dY*e+dY*e+dY*e+dY*e+dY*e+dY;H^A z{@+}WHfGvjSPmg%Sf)+LuuL17S;>6Mvto&6-TtB5RX% z$e;bZ4c8OSUQf|lSNTEpfcsB%T}hZWs#=&fs#=&fs#=&fs#=&fs#=&fs#=&fs#=&f zs#-k5s#-kfs#>%Ks#>%cs#=&fs#=&fs#=&fs#=&fs#=&fs#=&fs#=&fs#=&fs#=&f zs#=&fs#=&fs#?E>7ViMna`B!})#6>Es>S<8Rf~6$suu4pRW06as#?7NRJC|Vs%l}{ z;2To^ll2s1_D$?J6D|AZm)3O?GOVr}nQkg|1iQoPx{=@AWZLSw2^m(`O~|miZbHUC zrt2nTSoTfGu7O~->7O~->7QwPEyt4y``$fyG>P#_n)d3??_c`ynXZET@UOZXWxVj zygOib;JpB%%?Ht*gJ`Qkw8J3USn&VN&{W94vxd*Za|GfU0sSWbwYxdtLYR&!|MXlL?qo_6eZxpp=|Ba&7 z?7vaen*BG5TC@K~QET?!C~D3A8%3?zf1{}NYdrI2|BYg~uy0h`60`qCv0StNMp0|_ a-zaL${u@QD*?*&`g?*!153p}kwf`5<-Z2;e diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_creeper.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_creeper.b3d index e04ffc7b07334a928c0494deca10668e3c46db65..54341579c7a4b4b9e9cde54d30469dad7c312f4d 100644 GIT binary patch delta 7091 zcmeI0ZE%#u9l$TSBzMPg$vq@+7Y;b`B9|A@+&v_L9J$35!S^VoIBgLnrZR+@gVrgS z8je8h7)nE62@p_l+7AMv#AgdsptFf2aYjVNu`;z|D|Mm{2^SqZO&x3K?mqu#^PKmw zU+*R#ZvXr2f8T!j-R|>`KKs#+(rtBh>Qc`umOZu&_TwilmKF8&EBEx4+8(H1dgp>w zme)?$a&k&6{Iju+$L1`zkiMLA8M$to#lrq9X`<4yEw1%oWqJXAHP3GKG>Gp`E7V}``KEeWLE<9t*AP>r3 zHp45djWO#vUc0s6L4DR9cxGsxK5H+O@BP7k+~zH{j=qJ(tY$)d*MvSxACzwmb@KWt zv!MLW>$oDn%(~*k4l(Ji`F87nPCh46_~DVVd-U>LD37!HYx$+J&22O7>6c&U3*{_= zN1zvHF_ifz_RK7`j=<>VL7b18uU-Jk#;kNGEZg|3@9@c$$l{P(c9Qm*^BL)G8@>Zw z#}BV9CiP1)vP9igC%OA)gQCve)Z!}t?}f!(@fZyp*jdqt4>b9e-bYu|wjGbrvgI>_ zv^7jJ@!=+)ORGLzJ2tVEzBb$*JdVfMb6v+WBdgwRrSCfif*FN1#D>SBg;VIkZi%7$tx6sFNFciQ?H~5vuPqsyty|kG=8;pb& z9H}Hu-b#t@Xpf96+e{CxuG4ltTuG+l`b|Eiqsd*zYO z*E~c0H+E?6=Pn|O$oI$tw#Xy>tuzaN%ks^SU93I-!B#r|t0UT(Yc(WSwCw-wuWE1Y zh|#v2FKhNE!X!_$obl=K;^1d7x*W%ztXI5x34OiqSVi55u<8*l&$E{EJ7Q?bI}3u2 zC&H>%L<4#+Xz7~W!PD1j)O;Rwt=30^e)rT+a1cM*T%LI)caiGjb!nII%gw4|Wov0D zceqNO&9}(0iLFFK?H05iJEKL$YN3zMq7Yjx)h~L2l|`_!>Rg=jluv2UcL6QCvP@Ht zRH_A{f7mUwchO2MfN9jPe53CsTKV02t)!<~Ey71P&T?<5h_sbIgVIWNXa(_wYB3*- z(y7ydw%f3lR#>CnB2rc^JY5@~*oyEUey<(F(T#qEFxs{skD*HPTtDETyDlx?0;TjjsSDjC3*nN(Kz-UkeDODT+I>r0CNPGt8Nhm z%n@L&Dk2|XjFjw;0kr+_&r!qLM9<`gg|#e6UZ<`gg|w}_O0In^;ohb86|Fed>qOu(E1 z=A?v2@tMPm4O4${PB--_+M*2@%-Y%g5@)b>q+jA}vNmgF;B2yXd`RMKvNn4bpBlBLGi6`zmn@r<&66c7n@5wC z&7zJ;WgmJ&vTRZ|Z<(xY-f~jeb1q7jP0HpilaknlosN0Hrulo$}b$7ELgADxGh|dMk z>;A?SBYxwE0`6WtB4IbVo9COxez3N&AFN4*^C+BDP~%@`h4^oq1NV*l6k{=k%A2ax zDPlx$YBA}YXZZdmO~sG>+vkE)i>`CrH5zb?x8JYbHML637P;WWVp2KF<&Y}J?i)p} z1cl=zH~fm!_kDY`0Z)xOP2@_}I3HKC#(58u8XvtO(Kl(Fw@lVJi@Fjtj$e%X4eUYT zZ^sRVv!@yM-Z3>(oK*0GV}1p2r|V|}NY)@QpTG2JW_e;OA zNmLlTsfrYelyF!vS)8X-^wWw-;~XYHUe`G8WjPZRZV8il96IB)V$wLznXGXZWg5@J z>%J-xH@StYEN6e?PIIR2a_m-_y33{Ra>oCA>MobM%cbse{FR020Ko5t@&KT}vPj+K yo<1AFb=fr^;_yLCtnSu?sBQSoJU-TQg=E1b=?1Rm-`>rG~!wS literal 139359 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 V09X&5s-C+ER1az5QHx%`0RZsDdanQg delta 18141 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 KUl*Z12>%DJKTiJu diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_mooshroom.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_mooshroom.b3d index c009839191e272db590eb0e08be0c90356b4acf6..725268ea9838cc579f732c857b0b31eb72b80fb7 100644 GIT binary patch literal 54175 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 literal 71850 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 a-zaL${u@QD*?*&`g?*!153p}kwf`5<-Z2;e diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_skeleton.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_skeleton.b3d index aa1681dbeec2940f8bf06c05412718e20ff0840d..be4094c1bc93d27acc18def22cae0ab655dc9a9c 100644 GIT binary patch literal 221065 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

;N@xa$ZQENj-TjrE^_bcUD)9HWikv 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 B;1B=+ literal 212014 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

`hXTeEBkp~gOh=j|UVsMC=p68Fk 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 F@;?IJlnnp? diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_white.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_white.png deleted file mode 100644 index c6ae669dd830fe5a581a46f6dc7d3f07494b9748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6866 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 x#<<0c0CfxOfJ(VdIP5a0Sb-{{j9sLxTVS diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_yellow.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_yellow.png deleted file mode 100644 index 6318e163d74b28c3aa5247821c0ebffa5cdbf140..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7571 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 O0000BFRo9Qxac#bwSN&IGT}2 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 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spit.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spit.png deleted file mode 100644 index 6cdb3e0b3cb7127f61d4aaf9f4cf422111d8b8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677 zcmV;W0$TlvP)EX>4Tx04R}tkv&MmKpe$i(@I4uA{G>J$WX<>f~bh2R-p(LLaorMgUO{|(4-+r zad8w}3l4rPRvlcNb#-tR1i=pwH#a9m7b)?7Nufoo2gm(*ckglc4iIW3rdfe;K+|nA z8IOtS%&HiCMF9Qi#VC9-vy3@ON}%odx`&UicTt|z{@kCVTg_Sw@QK8;%rI@@4dUrd z+u*!U9A*VsB|aw}GwFiFk6c$ge&d{XS>TyrGnJet4ik&{7FJrA6-D&>*{h@IUz7t(BXc@RC9?pyS1HK8AtdE>N#J&iAq7)K38aGjOFh{pA`k^GSNO zsYQ-}o^9abx~VC9z~v4w@MOrQ>`H!`LM{iqpV2pEfWBLxYt8Gev5(USAVpmzZh(VB zU?fl3>uuiM+1lH`XBz$e06}GPlbdAG@Bjb+24YJ`L;(K){{a7>y{D4^000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jv785h)`{*3PK_000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001dNkll4QwuwQqcV2oV@5h6uc#qK6(aNpT}0RTWj8iUD{M z)G8^Zi)i+tZnfu0wCzUgdi(dB@Rm%}6Ot4F0!wg~R*u55y8Af}EGd6QY{v_m00000 LNkvXXu0mjfiR>Ik diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_stray_overlay.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_stray_overlay.png index b4b47a9fb9ec52e2e3722e5883c4ada5e900421c..ab00032b22e66672f41c26e6beef1f357ca3ed4d 100644 GIT binary patch delta 766 zcmV;M1)b4f%&RA@uxmO+kMF%U$#O{7TKWPcYaQnt}-<_x(+a+DD} z#DX&b2jE%>W%)%#$%b!8@(Gkw>UMY8zuKQan#Co&fA`_1`1#Y96H>3T#|6W`zPz50 zOQ^EPg%6(>p>>r#E_~?xH9X}7kU!-Gc>XjO@brHKH6)kdq+VtJFBmA_FmJin6TP2W z)>+SfwJ{%B=6_o34FX%e)*fFguQujG&v>qnSU6kzlG5li$r^j_;uCU1m|{)TzyiaQ zy9WAR(a%fWU0eVLp&Nv~3!twvau0PsKhM6K3viRkb0%B+xERibu3@cMkD3oMj7f5t zBd@Y9Qcon$H970qArn1LMQiU=&W@I;5%w@uHwyi7{C`ub}yfF)oNArir$l!v%2tyUPBCF4z_gX zSnd1=qP*U zQpZ5_6@Puu%u`G5YjL~XmN_Pkz=z4}uopSA0t|-vo@AqZB+wDp` z)=CdO{j-qx7GhEnV&akxs!lI8dCuG0Tk)-)B0vAb;ZWkSe!`2$2aHmN_4Z`Qhe%!a z6``+Fljpc+hih8>E?OH$D5KxL|0n}$t*8s34|i2ZmqR+eC+0aVw&s|O+;|N&7-nUj zx>J30XvuSMB6~0KCbSM5r3NFHabG*L{_*Qe@!*5|WdhItI52YyHHaeT`JkSogMdrR wxBgGy54?sg_@KOHwA5J(=)C9szlX)*7xILs{3dsfJOBUy07*qoM6N<$g7KVc;{X5v delta 973 zcmV;;12X)U2K@(+Bo78+OGiWi{{a60|De66laW3if8_)Z6*U6}Yh;iB00W9iL_t(& z-rZQSY8yciojKH{h_w0x8(}cGaT6=pIF&7&BCcJCBb{-RE`dNGUDBm7Mi7$2g=@Qr zkUJTfQx}MYj7&)WKr2;gFOBE2ySIC{^4;l777nd$=jP4K&d$yZLc&;GSpxt7#+dY; za}EFie>b;7$aAc&tOW`9n1+AJhKMl+)k-#)ic`Kg>zB3Oo z=Nu-}85A}0z<1{TU{O22D12vLcPw(`f$z-YcB1ts)7e6TVBYv8TOo?N0rJMj&HA?S zZ0Rg-T32b+V5Ra9)`KGPakIW{6b)y*RH{ z%96|4;H%1u@6zHs6ig=58BC@#s4Xu^1aXN6t&z~`H)5bN2~;$`qa#!Wq}@kEX-?lU zf5s$lQF*FLsu4U1Kk0T5@yRo6@tx6l5EAwLZn#MExN7g_b{L@-0Y~EjnD}$fVKg3u z)g0#>uKQO=>okw6_HJ&65qh;!H1Q|i7zBa&jzqgkGmb~%J&dWU+4Olp8sXy6%1D3}WhdlQQ&6E*)3*6K~s^M0^$=1Vux3llH3nBT`+P)=A*t z;2@1T5QoTB2kwFsV*)AS6b?zWfrwp*wCIY_%e)=U>@V#~ve*yI?wgr?JM-p!@6B4z zLIUjVyCXO*(Cpd%pBXo-g zM4RIRwL0MUfD7M?E5EPRQ8?;NdFA&xv6?tSw|L%XujwZ;#iVA5m8ms2Zoa;yF~B*; z^acp}`TFvLf?rZwVKKmMnBxFt0*cJ)q}DgHMSHg)4M+3|`oOLY9E3t%-;{kcuX+=9 zy{XL_;qjl=bOs3eBG8%od`~WvPkMbbF-016Ixg_~Um^c=4d?=R$7F7xDY2TE=V@X5 zz8wHvN3_-IGF5UNyS7|7wfP=!u?eG&xKyfhc|tpw9N%@!9z&a==m;O~Tk!_aow!UBQ~5}q zp>i?{$P+ky#=3`xkD~6{dJy$Q(;QiUc=#x13{bhK<6{w=c?Y>emYj@ZD2+(+)6vxGyI3+n(SfmsPh@_4IpYe)fBbQMznM1DLp&g^zK3 z*6_=6@;UIN^8cA`u-Hhi&f6`utN zKm3@ifxCFpc)mdGKUqKK8(UZwPy-X&RU^2IYsT9(>;~uzfEy=_>(AM}p?!%E{TfWe=>-pJ**zf5X>W;|58z8R8fcgrq+gYq2IO`IbnV$rwEs-&$O7(d|e|YrN znlA-Rc^;5ENI#11+TwZ;$~Mz3(>WpO95MG85LeqnzZlc6zI@>ap*#qgVue~bmF0{v z_ZTp%5}CPsfZK@fo>H!c`z;K;SE6jK9f*>d&&L>guYmil=vY+`$vW>yQNlKxAXt^i zWGImtjcsLFOH(4V0^bt_k!raMMewAP9*rX}p=Umw;#>KRy(a#APq;ppD^#dZp+bcU h6)IGyP@%%?@judG-R$kK*4Y36002ovPDHLkV1kb7etZA` diff --git a/mods/ENTITIES/mobs_mc/vex.lua b/mods/ENTITIES/mobs_mc/vex.lua index 22f1e70d23..cccdebe7a5 100644 --- a/mods/ENTITIES/mobs_mc/vex.lua +++ b/mods/ENTITIES/mobs_mc/vex.lua @@ -3,14 +3,13 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### VEX --################### mobs:register_mob("mobs_mc:vex", { - description = S("Vex"), type = "monster", spawn_class = "hostile", pathfinding = 1, @@ -36,6 +35,7 @@ mobs:register_mob("mobs_mc:vex", { view_range = 16, walk_velocity = 3.2, run_velocity = 5.9, + attack_type = "dogfight", sounds = { -- TODO: random death = "mobs_mc_vex_death", diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index ce2e765754..0021a1adba 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -19,7 +19,7 @@ -- TODO: Internal inventory, pick up items, trade with other villagers -- TODO: Farm stuff -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") local N = function(s) return s end local F = minetest.formspec_escape @@ -195,7 +195,7 @@ local professions = { { -- TODO: replace with empty map - { { "mcl_core:emerald", 7, 11}, { "mcl_maps:empty_map", 1, 1 } }, + { { "mcl_core:emerald", 7, 11}, { "mcl_maps:filled_map", 1, 1 } }, }, -- TODO: special maps @@ -409,7 +409,7 @@ local init_trades = function(self, inv) local offered_stack = ItemStack({name = offered_item, count = offered_count}) if mcl_enchanting.is_enchanted(offered_item) then if mcl_enchanting.is_book(offered_item) then - mcl_enchanting.enchant_uniform_randomly(offered_stack, {"soul_speed"}) + offered_stack = mcl_enchanting.get_uniform_randomly_enchanted_book({"soul_speed"}) else mcl_enchanting.enchant_randomly(offered_stack, math.random(5, 19), false, false, true) mcl_enchanting.unload_enchantments(offered_stack) @@ -927,7 +927,6 @@ end) --[=======[ MOB REGISTRATION AND SPAWNING ]=======] mobs:register_mob("mobs_mc:villager", { - description = S("Villager"), type = "npc", spawn_class = "passive", hp_min = 20, @@ -961,21 +960,13 @@ mobs:register_mob("mobs_mc:villager", { "mobs_mc_villager_smith.png", --hat }, }, - visual_size = {x=2.75, y=2.75}, - rotate = 270, - skittish = true, + visual_size = {x=3, y=3}, makes_footstep_sound = true, walk_velocity = 1.2, - run_velocity = 3, + run_velocity = 2.4, drops = {}, can_despawn = false, -- TODO: sounds - sounds = { - random = "mobs_mc_villager", - damage = "mobs_mc_villager_hurt", - death = "mobs_mc_villager_hurt", - distance = 10, - }, animation = { stand_speed = 25, stand_start = 40, @@ -1079,35 +1070,7 @@ mobs:register_mob("mobs_mc:villager", { -mobs:spawn_specific( -"mobs_mc:villager", -"overworld", -"ground", -{ -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"ColdTaiga", -"SunflowerPlains", -"RoofedForest", -"MesaPlateauFM_grasstop", -"ExtremeHillsM", -"BirchForestM", -}, -0, -minetest.LIGHT_MAX+1, -30, -20, -4, -mobs_mc.spawn_height.water+1, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:villager", mobs_mc.spawn.village, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 20, 4, mobs_mc.spawn_height.water+1, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0) diff --git a/mods/ENTITIES/mobs_mc/villager_evoker.lua b/mods/ENTITIES/mobs_mc/villager_evoker.lua index 030da54704..226c82a326 100644 --- a/mods/ENTITIES/mobs_mc/villager_evoker.lua +++ b/mods/ENTITIES/mobs_mc/villager_evoker.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### EVOKER @@ -12,7 +12,6 @@ local S = minetest.get_translator(minetest.get_current_modname()) local pr = PseudoRandom(os.time()*666) mobs:register_mob("mobs_mc:evoker", { - description = S("Evoker"), type = "monster", spawn_class = "hostile", physical = true, @@ -29,13 +28,13 @@ mobs:register_mob("mobs_mc:evoker", { "blank.png", --no hat -- TODO: Attack glow } }, - visual_size = {x=2.75, y=2.75}, + visual_size = {x=3, y=3}, makes_footstep_sound = true, damage = 6, walk_velocity = 0.2, run_velocity = 1.4, group_attack = true, - attack_type = "punch", + attack_type = "dogfight", -- Summon vexes custom_attack = function(self, to_attack) local r = pr:next(2,4) diff --git a/mods/ENTITIES/mobs_mc/villager_illusioner.lua b/mods/ENTITIES/mobs_mc/villager_illusioner.lua index bec5762e5a..30e9f6f364 100644 --- a/mods/ENTITIES/mobs_mc/villager_illusioner.lua +++ b/mods/ENTITIES/mobs_mc/villager_illusioner.lua @@ -3,14 +3,13 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_bows = minetest.get_modpath("mcl_bows") +local S = minetest.get_translator("mobs_mc") +local mod_bows = minetest.get_modpath("mcl_bows") ~= nil mobs:register_mob("mobs_mc:illusioner", { - description = S("Illusioner"), type = "monster", spawn_class = "hostile", - attack_type = "projectile", + attack_type = "shoot", shoot_interval = 2.5, shoot_offset = 1.5, arrow = "mcl_bows:arrow_entity", @@ -18,7 +17,7 @@ mobs:register_mob("mobs_mc:illusioner", { if mod_bows then -- 1-4 damage per arrow local dmg = math.random(1, 4) - mobs.shoot_projectile_handling("mcl_bows:arrow", pos, dir, self.object:get_yaw(), self.object, nil, dmg) + mcl_bows.shoot_arrow("mcl_bows:arrow", pos, dir, self.object:get_yaw(), self.object, nil, dmg) end end, hp_min = 32, @@ -37,7 +36,7 @@ mobs:register_mob("mobs_mc:illusioner", { -- TODO: more sounds distance = 16, }, - visual_size = {x=2.75, y=2.75}, + visual_size = {x=3, y=3}, walk_velocity = 0.6, run_velocity = 2, jump = true, diff --git a/mods/ENTITIES/mobs_mc/villager_vindicator.lua b/mods/ENTITIES/mobs_mc/villager_vindicator.lua index 6a6999b96e..3e611acddb 100644 --- a/mods/ENTITIES/mobs_mc/villager_vindicator.lua +++ b/mods/ENTITIES/mobs_mc/villager_vindicator.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### VINDICATOR @@ -11,7 +11,6 @@ local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:vindicator", { - description = S("Vindicator"), type = "monster", spawn_class = "hostile", physical = false, @@ -31,13 +30,13 @@ mobs:register_mob("mobs_mc:vindicator", { -- TODO: Glow when attacking (mobs_mc_vindicator.png) }, }, - visual_size = {x=2.75, y=2.75}, + visual_size = {x=3, y=3}, makes_footstep_sound = true, damage = 13, reach = 2, walk_velocity = 1.2, run_velocity = 2.4, - attack_type = "punch", + attack_type = "dogfight", drops = { {name = mobs_mc.items.emerald, chance = 1, diff --git a/mods/ENTITIES/mobs_mc/villager_zombie.lua b/mods/ENTITIES/mobs_mc/villager_zombie.lua index 088839b659..d7f2203e13 100644 --- a/mods/ENTITIES/mobs_mc/villager_zombie.lua +++ b/mods/ENTITIES/mobs_mc/villager_zombie.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### ZOMBIE VILLAGER @@ -26,12 +26,8 @@ local professions = { } mobs:register_mob("mobs_mc:villager_zombie", { - description = S("Zombie Villager"), type = "monster", spawn_class = "hostile", - hostile = true, - rotate = 270, - eye_height = 1.65, hp_min = 20, hp_max = 20, xp_min = 5, @@ -42,20 +38,20 @@ mobs:register_mob("mobs_mc:villager_zombie", { visual = "mesh", mesh = "mobs_mc_villager_zombie.b3d", textures = { - {"mobs_mc_empty.png", "mobs_mc_zombie_butcher.png", "mobs_mc_empty.png"}, - {"mobs_mc_empty.png", "mobs_mc_zombie_farmer.png", "mobs_mc_empty.png"}, - {"mobs_mc_empty.png", "mobs_mc_zombie_librarian.png", "mobs_mc_empty.png"}, - {"mobs_mc_empty.png", "mobs_mc_zombie_priest.png", "mobs_mc_empty.png"}, - {"mobs_mc_empty.png", "mobs_mc_zombie_smith.png", "mobs_mc_empty.png"}, - {"mobs_mc_empty.png", "mobs_mc_zombie_villager.png", "mobs_mc_empty.png"}, + {"mobs_mc_zombie_butcher.png"}, + {"mobs_mc_zombie_farmer.png"}, + {"mobs_mc_zombie_librarian.png"}, + {"mobs_mc_zombie_priest.png"}, + {"mobs_mc_zombie_smith.png"}, + {"mobs_mc_zombie_villager.png"} }, - visual_size = {x=2.75, y=2.75}, + visual_size = {x=3, y=3}, makes_footstep_sound = true, damage = 3, reach = 2, walk_velocity = 1.2, - run_velocity = 3.5, - attack_type = "punch", + run_velocity = 2.4, + attack_type = "dogfight", group_attack = true, drops = { {name = mobs_mc.items.rotten_flesh, @@ -150,99 +146,9 @@ mobs:register_mob("mobs_mc:villager_zombie", { harmed_by_heal = true, }) -mobs:spawn_specific( -"mobs_mc:villager_zombie", -"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", -"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", -}, -0, -7, -30, -4090, -4, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) ---mobs:spawn_specific("mobs_mc:villager_zombie", "overworld", "ground", 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:villager_zombie", mobs_mc.spawn.village, {"air"}, 0, 7, 30, 4090, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:villager_zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:villager_zombie", S("Zombie Villager"), "mobs_mc_spawn_icon_zombie_villager.png", 0) + diff --git a/mods/ENTITIES/mobs_mc/witch.lua b/mods/ENTITIES/mobs_mc/witch.lua index 34492a1b78..e95357564a 100644 --- a/mods/ENTITIES/mobs_mc/witch.lua +++ b/mods/ENTITIES/mobs_mc/witch.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### WITCH @@ -13,7 +13,6 @@ local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:witch", { - description = S("Witch"), type = "monster", spawn_class = "hostile", hp_min = 26, @@ -26,7 +25,7 @@ mobs:register_mob("mobs_mc:witch", { textures = { {"mobs_mc_witch.png"}, }, - visual_size = {x=2.75, y=2.75}, + visual_size = {x=3, y=3}, makes_footstep_sound = true, damage = 2, reach = 2, @@ -34,7 +33,7 @@ mobs:register_mob("mobs_mc:witch", { run_velocity = 2.4, pathfinding = 1, group_attack = true, - attack_type = "projectile", + attack_type = "dogshoot", arrow = "mobs_mc:potion_arrow", shoot_interval = 2.5, shoot_offset = 1, @@ -100,10 +99,8 @@ mobs:register_arrow("mobs_mc:potion_arrow", { end }) --- TODO: Spawn when witch works properly <- eventually -j4i +-- TODO: Spawn when witch works properly --mobs:spawn_specific("mobs_mc:witch", mobs_mc.spawn.jungle, {"air"}, 0, minetest.LIGHT_MAX-6, 12, 20000, 2, mobs_mc.spawn_height.water-6, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:witch", S("Witch"), "mobs_mc_spawn_icon_witch.png", 0, true) - -mcl_wip.register_wip_item("mobs_mc:witch") diff --git a/mods/ENTITIES/mobs_mc/wither.lua b/mods/ENTITIES/mobs_mc/wither.lua index 22e095d98d..8e90ddc159 100644 --- a/mods/ENTITIES/mobs_mc/wither.lua +++ b/mods/ENTITIES/mobs_mc/wither.lua @@ -3,21 +3,20 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### WITHER --################### mobs:register_mob("mobs_mc:wither", { - description = S("Wither"), type = "monster", spawn_class = "hostile", hp_max = 300, hp_min = 300, xp_min = 50, xp_max = 50, - armor = {undead = 80, fleshy = 100}, + armor = {undead = 80, fleshy = 80}, -- This deviates from MC Wiki's size, which makes no sense collisionbox = {-0.9, 0.4, -0.9, 0.9, 2.45, 0.9}, visual = "mesh", @@ -26,6 +25,7 @@ mobs:register_mob("mobs_mc:wither", { {"mobs_mc_wither.png"}, }, visual_size = {x=4, y=4}, + makes_footstep_sound = true, view_range = 16, fear_height = 4, walk_velocity = 2, @@ -52,7 +52,7 @@ mobs:register_mob("mobs_mc:wither", { }, lava_damage = 0, fire_damage = 0, - attack_type = "projectile", + attack_type = "dogshoot", explosion_strength = 8, dogshoot_stop = true, arrow = "mobs_mc:wither_skull", @@ -66,21 +66,12 @@ mobs:register_mob("mobs_mc:wither", { run_start = 0, run_end = 20, }, harmed_by_heal = true, - do_custom = function(self) - if self.health < (self.hp_max / 2) then - self.base_texture = "mobs_mc_wither_half_health.png" - self.fly = false - self.object:set_properties({textures={self.base_texture}}) - self.armor = {undead = 80, fleshy = 80} - end - mcl_bossbars.update_boss(self.object, "Wither", "dark_purple") - end, on_spawn = function(self) minetest.sound_play("mobs_mc_wither_spawn", {object=self.object, gain=1.0, max_hear_distance=64}) end, }) ---local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false +local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false mobs:register_arrow("mobs_mc:wither_skull", { visual = "sprite", @@ -115,5 +106,3 @@ mobs:register_arrow("mobs_mc:wither_skull", { --Spawn egg mobs:register_egg("mobs_mc:wither", S("Wither"), "mobs_mc_spawn_icon_wither.png", 0, true) - -mcl_wip.register_wip_item("mobs_mc:wither") diff --git a/mods/ENTITIES/mobs_mc/wolf.lua b/mods/ENTITIES/mobs_mc/wolf.lua index 0b685d40f0..fe30318954 100644 --- a/mods/ENTITIES/mobs_mc/wolf.lua +++ b/mods/ENTITIES/mobs_mc/wolf.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") local default_walk_chance = 50 @@ -19,35 +19,16 @@ end -- Wolf local wolf = { - description = S("Wolf"), type = "animal", spawn_class = "passive", can_despawn = true, - neutral = true, hp_min = 8, hp_max = 8, xp_min = 1, xp_max = 3, - rotate = 270, passive = false, group_attack = true, - - --head code - has_head = false, - head_bone = "head", - - swap_y_with_x = false, - reverse_head_yaw = false, - - head_bone_pos_y = 3.6, - head_bone_pos_z = -0.6, - - head_height_offset = 1.0525, - head_direction_offset = 0.5, - head_pitch_modifier = 0, - --end head code - - collisionbox = {-0.3, -0.00, -0.3, 0.3, 0.85, 0.3}, + collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.84, 0.3}, visual = "mesh", mesh = "mobs_mc_wolf.b3d", textures = { @@ -71,7 +52,7 @@ local wolf = { run_velocity = 3, damage = 4, reach = 2, - attack_type = "punch", + attack_type = "dogfight", fear_height = 4, follow = mobs_mc.follow.wolf, on_rightclick = function(self, clicker) @@ -93,7 +74,6 @@ local wolf = { dog:set_yaw(yaw) ent = dog:get_luaentity() ent.owner = clicker:get_player_name() - ent.tamed = true -- cornfirm taming minetest.sound_play("mobs_mc_wolf_bark", {object=dog, max_hear_distance=16}, true) -- Replace wolf @@ -158,35 +138,23 @@ dog.owner = "" -- TODO: Start sitting by default dog.order = "roam" dog.owner_loyal = true -dog.follow_velocity = 3.2 +dog.follow_velocity = 3.2 -- Automatically teleport dog to owner dog.do_custom = mobs_mc.make_owner_teleport_function(12) +dog.follow = mobs_mc.follow.dog dog.attack_animals = nil dog.specific_attack = nil -dog.breed_distance = 1.5 -dog.baby_size = 0.5 -dog.follow_distance = 2 -dog.follow = "mcl_mobitems:beef" - dog.on_rightclick = function(self, clicker) local item = clicker:get_wielded_item() - --owner is broken for this - --attempt to enter breed state - if mobs.enter_breed_state(self,clicker) then + if mobs:protect(self, clicker) then return - end - - --make baby grow faster - if self.baby then - mobs.make_baby_grow_faster(self,clicker) + elseif item:get_name() ~= "" and mobs:capture_mob(self, clicker, 0, 2, 80, false, nil) then return - end - - if is_food(item:get_name()) then + elseif is_food(item:get_name()) then -- Feed to increase health local hp = self.health - local hp_add + local hp_add = 0 -- Use eatable group to determine health boost local eatable = minetest.get_item_group(item, "eatable") if eatable > 0 then @@ -264,34 +232,6 @@ end mobs:register_mob("mobs_mc:dog", dog) -- Spawn -mobs:spawn_specific( -"mobs_mc:wolf", -"overworld", -"ground", -{ -"FlowerForest", -"Swampland", -"Taiga", -"ExtremeHills", -"BirchForest", -"MegaSpruceTaiga", -"MegaTaiga", -"ExtremeHills+", -"Forest", -"Plains", -"ColdTaiga", -"SunflowerPlains", -"RoofedForest", -"MesaPlateauFM_grasstop", -"ExtremeHillsM", -"BirchForestM", -}, -0, -minetest.LIGHT_MAX+1, -30, -9000, -7, -mobs_mc.spawn_height.water+3, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:wolf", mobs_mc.spawn.wolf, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 9000, 7, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max) mobs:register_egg("mobs_mc:wolf", S("Wolf"), "mobs_mc_spawn_icon_wolf.png", 0) diff --git a/mods/ENTITIES/mobs_mc/zombie.lua b/mods/ENTITIES/mobs_mc/zombie.lua index e1247d8bdd..df9727d34f 100644 --- a/mods/ENTITIES/mobs_mc/zombie.lua +++ b/mods/ENTITIES/mobs_mc/zombie.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### ZOMBIE @@ -46,11 +46,8 @@ table.insert(drops_zombie, { }) local zombie = { - description = S("Zombie"), type = "monster", spawn_class = "hostile", - hostile = true, - rotate = 270, hp_min = 20, hp_max = 20, xp_min = 5, @@ -61,11 +58,7 @@ local zombie = { visual = "mesh", mesh = "mobs_mc_zombie.b3d", textures = { - { - "mobs_mc_empty.png", -- armor - "mobs_mc_zombie.png", -- texture - "mobs_mc_empty.png", -- wielded_item - } + {"mobs_mc_zombie.png"}, }, visual_size = {x=3, y=3}, makes_footstep_sound = true, @@ -76,25 +69,8 @@ local zombie = { damage = "mobs_mc_zombie_hurt", distance = 16, }, - - --head code - has_head = false, - head_bone = "Head", - - swap_y_with_x = true, - reverse_head_yaw = true, - - head_bone_pos_y = 2.4, - head_bone_pos_z = 0, - - head_height_offset = 1.1, - head_direction_offset = 0, - head_pitch_modifier = 0, - --end head code - - eye_height = 1.65, - walk_velocity = 1, - run_velocity = 3.5, + walk_velocity = .8, + run_velocity = 1.6, damage = 3, reach = 2, fear_height = 4, @@ -112,8 +88,7 @@ local zombie = { ignited_by_sunlight = true, sunlight_damage = 2, view_range = 16, - attack_type = "punch", - punch_timer_cooloff = 0.5, + attack_type = "dogfight", harmed_by_heal = true, } @@ -123,7 +98,6 @@ mobs:register_mob("mobs_mc:zombie", zombie) -- A smaller and more dangerous variant of the zombie local baby_zombie = table.copy(zombie) -baby_zombie.description = S("Baby Zombie") baby_zombie.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} baby_zombie.xp_min = 12 baby_zombie.xp_max = 12 @@ -137,14 +111,7 @@ mobs:register_mob("mobs_mc:baby_zombie", baby_zombie) -- Husk. -- Desert variant of the zombie local husk = table.copy(zombie) -husk.description = S("Husk") -husk.textures = { - { - "mobs_mc_empty.png", -- armor - "mobs_mc_husk.png", -- texture - "mobs_mc_empty.png", -- wielded_item - } - } +husk.textures = {{"mobs_mc_husk.png"}} husk.ignited_by_sunlight = false husk.sunlight_damage = 0 husk.drops = drops_common @@ -155,7 +122,6 @@ mobs:register_mob("mobs_mc:husk", husk) -- Baby husk. -- A smaller and more dangerous variant of the husk local baby_husk = table.copy(husk) -baby_husk.description = S("Baby Husk") baby_husk.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} baby_husk.xp_min = 12 baby_husk.xp_max = 12 @@ -169,227 +135,11 @@ mobs:register_mob("mobs_mc:baby_husk", baby_husk) -- Spawning -mobs:spawn_specific( -"mobs_mc:zombie", -"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", -"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", -}, -0, -7, -30, -6000, -4, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 6000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- Baby zombie is 20 times less likely than regular zombies -mobs:spawn_specific( -"mobs_mc:baby_zombie", -"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", -"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", -}, -0, -7, -30, -60000, -4, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) - - -mobs:spawn_specific( -"mobs_mc:husk", -"overworld", -"ground", -{ -"Desert", -"SavannaM", -"Savanna", -"Savanna_beach", -}, -0, -7, -30, -6500, -4, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) -mobs:spawn_specific( -"mobs_mc:baby_husk", -"overworld", -"ground", -{ -"Desert", -"SavannaM", -"Savanna", -"Savanna_beach", -}, -0, -7, -30, -65000, -4, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:baby_zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:husk", mobs_mc.spawn.desert, {"air"}, 0, 7, 30, 6500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:baby_husk", mobs_mc.spawn.desert, {"air"}, 0, 7, 30, 65000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- Spawn eggs mobs:register_egg("mobs_mc:husk", S("Husk"), "mobs_mc_spawn_icon_husk.png", 0) diff --git a/mods/ENTITIES/mobs_mc/zombiepig.lua b/mods/ENTITIES/mobs_mc/zombiepig.lua index b4088deef4..8c29a4bff7 100644 --- a/mods/ENTITIES/mobs_mc/zombiepig.lua +++ b/mods/ENTITIES/mobs_mc/zombiepig.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### ZOMBIE PIGMAN @@ -11,20 +11,16 @@ local S = minetest.get_translator(minetest.get_current_modname()) local pigman = { - description = S("Zombie Pigman"), -- type="animal", passive=false: This combination is needed for a neutral mob which becomes hostile, if attacked type = "animal", passive = false, - neutral = true, - rotate = 270, spawn_class = "passive", - hostile_cooldown = 15, --seconds hp_min = 20, hp_max = 20, xp_min = 6, xp_max = 6, armor = {undead = 90, fleshy = 90}, - attack_type = "punch", + attack_type = "dogfight", group_attack = { "mobs_mc:pigman", "mobs_mc:baby_pigman" }, damage = 9, reach = 2, @@ -44,22 +40,6 @@ local pigman = { damage = "mobs_mc_zombiepig_hurt", distance = 16, }, - - --head code - has_head = false, - head_bone = "head", - - swap_y_with_x = true, - reverse_head_yaw = true, - - head_bone_pos_y = 2.4, - head_bone_pos_z = 0, - - head_height_offset = 1.1, - head_direction_offset = 0, - head_pitch_modifier = 0, - --end head code - jump = true, makes_footstep_sound = true, walk_velocity = .8, @@ -114,7 +94,6 @@ mobs:register_mob("mobs_mc:pigman", pigman) -- A smaller and more dangerous variant of the pigman local baby_pigman = table.copy(pigman) -baby_pigman.description = S("Baby Zombie Pigman") baby_pigman.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} baby_pigman.xp_min = 13 baby_pigman.xp_max = 13 @@ -132,38 +111,12 @@ baby_pigman.child = 1 mobs:register_mob("mobs_mc:baby_pigman", baby_pigman) -- Regular spawning in the Nether -mobs:spawn_specific( -"mobs_mc:pigman", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -6000, -3, -mobs_mc.spawn_height.nether_min, -mobs_mc.spawn_height.nether_max) +mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) -- Baby zombie is 20 times less likely than regular zombies -mobs:spawn_specific( -"mobs_mc:baby_pigman", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -100000, -4, -mobs_mc.spawn_height.nether_min, -mobs_mc.spawn_height.nether_max) +mobs:spawn_specific("mobs_mc:baby_pigman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 100000, 4, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) -- Spawning in Nether portals in the Overworld ---mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.nether_portal, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.nether_portal, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:pigman", S("Zombie Pigman"), "mobs_mc_spawn_icon_zombie_pigman.png", 0) diff --git a/mods/ENTITIES/mobs_mc_gameconfig/init.lua b/mods/ENTITIES/mobs_mc_gameconfig/init.lua index 27cb4b4bf3..06d7eb87fa 100644 --- a/mods/ENTITIES/mobs_mc_gameconfig/init.lua +++ b/mods/ENTITIES/mobs_mc_gameconfig/init.lua @@ -200,14 +200,14 @@ end mobs_mc.override.enderman_block_texture_overrides = { ["mcl_core:cactus"] = ctable, -- FIXME: replace colorize colors with colors from palette - ["mcl_core:dirt_with_grass"] = { - "mcl_core_grass_block_top.png^[colorize:green:90", - "default_dirt.png", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", - }, + ["mcl_core:dirt_with_grass"] = + { + "mcl_core_grass_block_top.png^[colorize:green:90", + "default_dirt.png", + "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", + "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", + "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", + "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)"} } -- List of nodes on which mobs can spawn diff --git a/mods/ENTITIES/mobs_mc_gameconfig/mod.conf b/mods/ENTITIES/mobs_mc_gameconfig/mod.conf index a9d0d3d7b4..5709db5a5f 100644 --- a/mods/ENTITIES/mobs_mc_gameconfig/mod.conf +++ b/mods/ENTITIES/mobs_mc_gameconfig/mod.conf @@ -1,4 +1,2 @@ name = mobs_mc_gameconfig -author = Wuzzy -description = mobs_mc game configuration for MCL2 depends = mcl_init, mcl_core

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 K=r-~@PrBcABSo+P diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_slime.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_slime.b3d index b426ee23da764a0c2e45caafa5105f7781b743eb..18cc3d6294d8911689a88435d94eb4d5cf94adb8 100644 GIT binary patch literal 4732 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 Kb@;d5uzvxzrA2T6 diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_villager_zombie.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_villager_zombie.b3d index b7dd9d7ee137c9c0f5ecbe9b66f0280c5da299bb..9958b281aad8965333b536d281ec68e2ba004b37 100644 GIT binary patch literal 33648 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 lJE$$?ptiJw+AmEge*xxa8(IJW diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_witherskeleton.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_witherskeleton.b3d index c1b808307cf00f93fa9ff4f070016c6fc626c3fe..6f78392fe7f72ba73073636789d4c1bff443ee07 100644 GIT binary patch literal 185727 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½dNt^gx@*18rsxv{^jRX7xau%>!+A541Tv(B||& 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 Q?_H^NP}^cA#pRm)ACock_5c6? literal 212014 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 Ji01k2e*ka)4%`3$ literal 114629 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 STi=HEGaK3lHna_GX#Wp$A797- diff --git a/mods/ENTITIES/mobs_mc/ocelot.lua b/mods/ENTITIES/mobs_mc/ocelot.lua index aea543895e..eca74d3ba5 100644 --- a/mods/ENTITIES/mobs_mc/ocelot.lua +++ b/mods/ENTITIES/mobs_mc/ocelot.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### OCELOT AND CAT @@ -27,12 +27,9 @@ end -- Ocelot local ocelot = { - description = S("Ocelot"), type = "animal", spawn_class = "passive", can_despawn = true, - rotate = 270, - skittish = true, hp_min = 10, hp_max = 10, xp_min = 1, @@ -45,7 +42,7 @@ local ocelot = { makes_footstep_sound = true, walk_chance = default_walk_chance, walk_velocity = 1, - run_velocity = 10, + run_velocity = 3, follow_velocity = 1, floats = 1, runaway = true, @@ -59,7 +56,7 @@ local ocelot = { }, animation = { speed_normal = 25, - run_speed = 150, + run_speed = 50, stand_start = 0, stand_end = 0, walk_start = 0, @@ -105,7 +102,6 @@ mobs:register_mob("mobs_mc:ocelot", ocelot) -- Cat local cat = table.copy(ocelot) -cat.description = S("Cat") cat.textures = {{"mobs_mc_cat_black.png"}, {"mobs_mc_cat_red.png"}, {"mobs_mc_cat_siamese.png"}} cat.can_despawn = false cat.owner = "" @@ -125,6 +121,8 @@ cat.sounds = { } cat.on_rightclick = function(self, clicker) if mobs:feed_tame(self, clicker, 1, true, false) then return end + if mobs:capture_mob(self, clicker, 0, 60, 5, false, nil) then return end + if mobs:protect(self, clicker) then return end if self.child then return end @@ -151,28 +149,9 @@ end mobs:register_mob("mobs_mc:cat", cat) ---local base_spawn_chance = 5000 +local base_spawn_chance = 5000 -- Spawn ocelot ---they get the same as the llama because I'm trying to rework so much of this code right now -j4i -mobs:spawn_specific( -"mobs_mc:ocelot", -"overworld", -"ground", -{ -"Jungle", -"JungleEdgeM", -"JungleM", -"JungleEdge", -}, -0, -minetest.LIGHT_MAX+1, -30, -15000, -5, -mobs_mc.spawn_height.water+15, -mobs_mc.spawn_height.overworld_max) ---[[ mobs:spawn({ name = "mobs_mc:ocelot", nodes = mobs_mc.spawn.jungle, @@ -184,8 +163,8 @@ mobs:spawn({ min_height = mobs_mc.spawn_height.water+1, -- Right above ocean level max_height = mobs_mc.spawn_height.overworld_max, on_spawn = function(self, pos) - Note: Minecraft has a 1/3 spawn failure rate. - In this mod it is emulated by reducing the spawn rate accordingly (see above). + --[[ Note: Minecraft has a 1/3 spawn failure rate. + In this mod it is emulated by reducing the spawn rate accordingly (see above). ]] -- 1/7 chance to spawn 2 ocelot kittens if pr:next(1,7) == 1 then @@ -228,7 +207,6 @@ mobs:spawn({ end end, }) -]]-- -- spawn eggs -- FIXME: The spawn icon shows a cat texture, not an ocelot texture diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index affcac4966..407cb44667 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### PARROT @@ -12,7 +12,6 @@ local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:parrot", { - description = S("Parrot"), type = "npc", spawn_class = "passive", pathfinding = 1, @@ -20,14 +19,11 @@ mobs:register_mob("mobs_mc:parrot", { hp_max = 6, xp_min = 1, xp_max = 3, - tilt_fly = true, - collisionbox = {-0.25, 0, -0.25, 0.25, 0.9, 0.25}, - eye_height = 0.45, + collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.89, 0.25}, visual = "mesh", mesh = "mobs_mc_parrot.b3d", textures = {{"mobs_mc_parrot_blue.png"},{"mobs_mc_parrot_green.png"},{"mobs_mc_parrot_grey.png"},{"mobs_mc_parrot_red_blue.png"},{"mobs_mc_parrot_yellow_blue.png"}}, visual_size = {x=3, y=3}, - rotate = 270, walk_velocity = 3, run_velocity = 5, sounds = { @@ -44,7 +40,7 @@ mobs:register_mob("mobs_mc:parrot", { max = 2, looting = "common",}, }, - animation = { + animation = { stand_speed = 50, walk_speed = 50, fly_speed = 50, @@ -88,28 +84,14 @@ mobs:register_mob("mobs_mc:parrot", { -- Feed to tame, but not breed if mobs:feed_tame(self, clicker, 1, false, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 0, 50, 80, false, nil) then return end end, }) --- Parrots spawn rarely in jungles. TODO: Also check for jungle *biome* <- I'll get to this eventually -j4i -mobs:spawn_specific( -"mobs_mc:parrot", -"overworld", -"ground", -{ -"Jungle", -"JungleEdgeM", -"JungleM", -"JungleEdge", -}, -0, -minetest.LIGHT_MAX+1, -7, -30000, -1, -mobs_mc.spawn_height.water+7, -mobs_mc.spawn_height.overworld_max) +-- Parrots spawn rarely in jungles. TODO: Also check for jungle *biome* +mobs:spawn_specific("mobs_mc:parrot", {"mcl_core:jungletree", "mcl_core:jungleleaves"}, {"air"}, 0, minetest.LIGHT_MAX+1, 7, 30000, 1, mobs_mc.spawn_height.water+7, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:parrot", S("Parrot"), "mobs_mc_spawn_icon_parrot.png", 0) diff --git a/mods/ENTITIES/mobs_mc/pig.lua b/mods/ENTITIES/mobs_mc/pig.lua index 84ff996f2e..38700b6ca7 100644 --- a/mods/ENTITIES/mobs_mc/pig.lua +++ b/mods/ENTITIES/mobs_mc/pig.lua @@ -1,13 +1,11 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:pig", { - description = S("Pig"), type = "animal", spawn_class = "passive", - skittish = true, - rotate = 270, + runaway = true, hp_min = 10, hp_max = 10, xp_min = 1, @@ -20,30 +18,11 @@ mobs:register_mob("mobs_mc:pig", { "mobs_mc_pig.png", -- base "blank.png", -- saddle }}, - - --head code - has_head = true, - head_bone = "head", - - swap_y_with_x = false, - reverse_head_yaw = false, - - head_bone_pos_y = 2.4, - head_bone_pos_z = 0, - - head_height_offset = 1.1, - head_direction_offset = 0, - head_pitch_modifier = 0, - --end head code - visual_size = {x=2.5, y=2.5}, makes_footstep_sound = true, walk_velocity = 1, run_velocity = 3, follow_velocity = 3.4, - breed_distance = 1.5, - baby_size = 0.5, - follow_distance = 2, drops = { {name = mobs_mc.items.porkchop_raw, chance = 1, @@ -70,7 +49,7 @@ mobs:register_mob("mobs_mc:pig", { run_start = 0, run_end = 40, }, - follow = "mcl_farming:carrot_item", + follow = mobs_mc.follow.pig, view_range = 8, do_custom = function(self, dtime) @@ -111,17 +90,12 @@ mobs:register_mob("mobs_mc:pig", { return end - --attempt to enter breed state - if mobs.enter_breed_state(self,clicker) then - return - end - - --ignore other logic - --make baby grow faster - if self.baby then - mobs.make_baby_grow_faster(self,clicker) - return + local wielditem = clicker:get_wielded_item() + -- Feed pig + if wielditem:get_name() ~= mobs_mc.items.carrot_on_a_stick 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 @@ -129,8 +103,6 @@ mobs:register_mob("mobs_mc:pig", { -- Put saddle on pig local item = clicker:get_wielded_item() - local wielditem = item - if item:get_name() == mobs_mc.items.saddle and self.saddle ~= "yes" then self.base_texture = { "blank.png", -- baby @@ -163,7 +135,7 @@ mobs:register_mob("mobs_mc:pig", { end -- Mount or detach player - --local name = clicker:get_player_name() + local name = clicker:get_player_name() if self.driver and clicker == self.driver then -- Detach if already attached mobs.detach(clicker, {x=1, y=0, z=0}) @@ -191,6 +163,10 @@ mobs:register_mob("mobs_mc:pig", { inv:set_stack("main",self.driver:get_wield_index(), wielditem) end return + + -- Capture pig + elseif not self.driver and clicker:get_wielded_item():get_name() ~= "" then + mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end end, @@ -206,66 +182,7 @@ mobs:register_mob("mobs_mc:pig", { end, }) -mobs:spawn_specific( -"mobs_mc:pig", -"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", -}, -9, -minetest.LIGHT_MAX+1, -30, -15000, -8, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:pig", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 15000, 8, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:pig", S("Pig"), "mobs_mc_spawn_icon_pig.png", 0) diff --git a/mods/ENTITIES/mobs_mc/polar_bear.lua b/mods/ENTITIES/mobs_mc/polar_bear.lua index 0f5296d351..459ca29b4a 100644 --- a/mods/ENTITIES/mobs_mc/polar_bear.lua +++ b/mods/ENTITIES/mobs_mc/polar_bear.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### POLARBEAR @@ -8,7 +8,6 @@ local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:polar_bear", { - description = S("Polar Bear"), type = "animal", spawn_class = "passive", runaway = false, @@ -31,14 +30,14 @@ mobs:register_mob("mobs_mc:polar_bear", { walk_velocity = 1.2, run_velocity = 2.4, group_attack = true, - attack_type = "punch", + attack_type = "dogfight", drops = { -- 3/4 chance to drop raw fish (poor approximation) {name = mobs_mc.items.fish_raw, chance = 2, min = 0, max = 2, - looting = "common",}, + looting = "common",}, -- 1/4 to drop raw salmon {name = mobs_mc.items.salmon_raw, chance = 4, @@ -68,23 +67,7 @@ mobs:register_mob("mobs_mc:polar_bear", { }) -mobs:spawn_specific( -"mobs_mc:polar_bear", -"overworld", -"ground", -{ -"ColdTaiga", -"IcePlainsSpikes", -"IcePlains", -"ExtremeHills+_snowtop", -}, -0, -minetest.LIGHT_MAX+1, -30, -7000, -3, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:polar_bear", mobs_mc.spawn.snow, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 7000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- spawn egg mobs:register_egg("mobs_mc:polar_bear", S("Polar Bear"), "mobs_mc_spawn_icon_polarbear.png", 0) diff --git a/mods/ENTITIES/mobs_mc/rabbit.lua b/mods/ENTITIES/mobs_mc/rabbit.lua index 51235a3f93..34684bdcec 100644 --- a/mods/ENTITIES/mobs_mc/rabbit.lua +++ b/mods/ENTITIES/mobs_mc/rabbit.lua @@ -1,14 +1,13 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") local rabbit = { - description = S("Rabbit"), type = "animal", spawn_class = "passive", passive = true, reach = 1, - rotate = 270, + hp_min = 3, hp_max = 3, xp_min = 1, @@ -62,6 +61,8 @@ local rabbit = { on_rightclick = function(self, clicker) -- Feed, tame protect or capture if mobs:feed_tame(self, clicker, 1, true, true) then return end + if mobs:protect(self, clicker) then return end + if mobs:capture_mob(self, clicker, 0, 50, 80, false, nil) then return end end, do_custom = function(self) -- Easter egg: Change texture if rabbit is named “Toast” @@ -82,7 +83,6 @@ mobs:register_mob("mobs_mc:rabbit", rabbit) -- The killer bunny (Only with spawn egg) local killer_bunny = table.copy(rabbit) -killer_bunny.description = S("Killer Bunny") killer_bunny.type = "monster" killer_bunny.spawn_class = "hostile" killer_bunny.attack_type = "dogfight" @@ -107,70 +107,8 @@ end mobs:register_mob("mobs_mc:killer_bunny", killer_bunny) -- Mob spawning rules. --- Different skins depending on spawn location <- we'll get to this when the spawning algorithm is fleshed out +-- Different skins depending on spawn location -mobs:spawn_specific( -"mobs_mc:rabbit", -"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", -}, -9, -minetest.LIGHT_MAX+1, -30, -15000, -8, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) - ---[[ local spawn = { name = "mobs_mc:rabbit", neighbors = {"air"}, @@ -227,10 +165,9 @@ spawn_grass.on_spawn = function(self, pos) self.object:set_properties({textures = self.base_texture}) end mobs:spawn(spawn_grass) -]]-- -- Spawn egg mobs:register_egg("mobs_mc:rabbit", S("Rabbit"), "mobs_mc_spawn_icon_rabbit.png", 0) -- Note: This spawn egg does not exist in Minecraft -mobs:register_egg("mobs_mc:killer_bunny", S("Killer Bunny"), "mobs_mc_spawn_icon_rabbit_caerbannog.png", 0) +mobs:register_egg("mobs_mc:killer_bunny", S("Killer Bunny"), "mobs_mc_spawn_icon_rabbit.png^[colorize:#FF0000:192", 0) -- TODO: Update inventory image diff --git a/mods/ENTITIES/mobs_mc/sheep.lua b/mods/ENTITIES/mobs_mc/sheep.lua index 76f933a6b0..681c68e1b4 100644 --- a/mods/ENTITIES/mobs_mc/sheep.lua +++ b/mods/ENTITIES/mobs_mc/sheep.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### SHEEP @@ -25,20 +25,7 @@ local colors = { unicolor_black = { mobs_mc.items.wool_black, "#000000D0" }, } -local rainbow_colors = { - "unicolor_light_red", - "unicolor_red", - "unicolor_orange", - "unicolor_yellow", - "unicolor_green", - "unicolor_dark_green", - "unicolor_light_blue", - "unicolor_blue", - "unicolor_violet", - "unicolor_red_violet" -} - -if minetest.get_modpath("mcl_wool") then +if minetest.get_modpath("mcl_wool") ~= nil then colors["unicolor_light_blue"] = { mobs_mc.items.wool_light_blue, "#5050FFD0" } end @@ -56,20 +43,14 @@ local gotten_texture = { "blank.png", "mobs_mc_sheep.png" } --mcsheep mobs:register_mob("mobs_mc:sheep", { - description = S("Sheep"), type = "animal", spawn_class = "passive", hp_min = 8, hp_max = 8, xp_min = 1, xp_max = 3, - skittish = true, - breed_distance = 1.5, - baby_size = 0.5, - follow_distance = 2, - follow = mobs_mc.items.wheat, collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.29, 0.45}, - rotate = 270, + visual = "mesh", visual_size = {x=3, y=3}, mesh = "mobs_mc_sheepfur.b3d", @@ -78,23 +59,6 @@ mobs:register_mob("mobs_mc:sheep", { color = "unicolor_white", makes_footstep_sound = true, walk_velocity = 1, - run_velocity = 3, - - --head code - has_head = true, - head_bone = "head", - - swap_y_with_x = false, - reverse_head_yaw = false, - - head_bone_pos_y = 3.6, - head_bone_pos_z = -0.6, - - head_height_offset = 1.0525, - head_direction_offset = 0.5, - head_pitch_modifier = 0, - --end head code - drops = { {name = mobs_mc.items.mutton_raw, chance = 1, @@ -121,6 +85,7 @@ mobs:register_mob("mobs_mc:sheep", { walk_start = 0, walk_end = 40, run_start = 0, run_end = 40, }, + follow = mobs_mc.follow.sheep, view_range = 12, -- Eat grass @@ -147,9 +112,10 @@ mobs:register_mob("mobs_mc:sheep", { end, -- Set random color on spawn - do_custom = function(self, dtime) + do_custom = function(self) if not self.initial_color_set then local r = math.random(0,100000) + local textures if r <= 81836 then -- 81.836% self.color = "unicolor_white" @@ -183,48 +149,13 @@ mobs:register_mob("mobs_mc:sheep", { } self.initial_color_set = true end - - local is_kay27 = self.nametag == "kay27" - - if self.color_change_timer then - local old_color = self.color - if is_kay27 then - self.color_change_timer = self.color_change_timer - dtime - if self.color_change_timer < 0 then - self.color_change_timer = 0.5 - self.color_index = (self.color_index + 1) % #rainbow_colors - self.color = rainbow_colors[self.color_index + 1] - end - else - self.color_change_timer = nil - self.color_index = nil - self.color = self.initial_color - end - - if old_color ~= self.color then - self.base_texture = sheep_texture(self.color) - self.object:set_properties({textures = self.base_texture}) - end - elseif is_kay27 then - self.initial_color = self.color - self.color_change_timer = 0 - self.color_index = -1 - end end, - + on_rightclick = function(self, clicker) local item = clicker:get_wielded_item() - --attempt to enter breed state - if mobs.enter_breed_state(self,clicker) then - return - end - - --make baby grow faster - if self.baby then - mobs.make_baby_grow_faster(self,clicker) - return - end + if mobs:feed_tame(self, clicker, 1, true, true) then return end + if mobs:protect(self, clicker) then return end if item:get_name() == mobs_mc.items.shears and not self.gotten and not self.child then self.gotten = true @@ -280,6 +211,7 @@ mobs:register_mob("mobs_mc:sheep", { end return end + if mobs:capture_mob(self, clicker, 0, 5, 70, false, nil) then return end end, on_breed = function(parent1, parent2) -- Breed sheep and choose a fur color for the child. @@ -331,67 +263,7 @@ mobs:register_mob("mobs_mc:sheep", { end end, }) -mobs:spawn_specific( -"mobs_mc:sheep", -"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) +mobs:spawn_specific("mobs_mc:sheep", mobs_mc.spawn.grassland, {"air"}, 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("mobs_mc:sheep", S("Sheep"), "mobs_mc_spawn_icon_sheep.png", 0) - diff --git a/mods/ENTITIES/mobs_mc/shulker.lua b/mods/ENTITIES/mobs_mc/shulker.lua index 1a5c4ec84d..faaf2ac405 100644 --- a/mods/ENTITIES/mobs_mc/shulker.lua +++ b/mods/ENTITIES/mobs_mc/shulker.lua @@ -3,19 +3,18 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### SHULKER --################### -- animation 45-80 is transition between passive and attack stance - + mobs:register_mob("mobs_mc:shulker", { - description = S("Shulker"), type = "monster", spawn_class = "hostile", - attack_type = "projectile", + attack_type = "shoot", shoot_interval = 0.5, arrow = "mobs_mc:shulkerbullet", shoot_offset = 0.5, @@ -82,17 +81,4 @@ mobs:register_arrow("mobs_mc:shulkerbullet", { mobs:register_egg("mobs_mc:shulker", S("Shulker"), "mobs_mc_spawn_icon_shulker.png", 0) -mobs:spawn_specific( -"mobs_mc:shulker", -"end", -"ground", -{ -"End" -}, -0, -minetest.LIGHT_MAX+1, -30, -5000, -2, -mobs_mc.spawn_height.end_min, -mobs_mc.spawn_height.end_max) +mobs:spawn_specific("mobs_mc:shulker", mobs_mc.spawn.end_city, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 5000, 2, mobs_mc.spawn_height.end_min, mobs_mc.spawn_height.end_max) diff --git a/mods/ENTITIES/mobs_mc/silverfish.lua b/mods/ENTITIES/mobs_mc/silverfish.lua index ac3991ad1b..433211503b 100644 --- a/mods/ENTITIES/mobs_mc/silverfish.lua +++ b/mods/ENTITIES/mobs_mc/silverfish.lua @@ -2,10 +2,9 @@ --################### SILVERFISH --################### -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:silverfish", { - description = S("Silverfish"), type = "monster", spawn_class = "hostile", passive = false, @@ -44,8 +43,9 @@ mobs:register_mob("mobs_mc:silverfish", { run_start = 0, run_end = 20, }, view_range = 16, - attack_type = "punch", + attack_type = "dogfight", damage = 1, + reach = 1, }) mobs:register_egg("mobs_mc:silverfish", S("Silverfish"), "mobs_mc_spawn_icon_silverfish.png", 0) @@ -61,7 +61,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then description = "Stone Monster Egg", tiles = {"default_stone.png"}, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = "", + drop = '', is_ground_content = true, sounds = default.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, @@ -72,7 +72,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then tiles = {"default_cobble.png"}, is_ground_content = false, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = "", + drop = '', sounds = default.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, }) @@ -82,7 +82,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then tiles = {"default_mossycobble.png"}, is_ground_content = false, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = "", + drop = '', sounds = default.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, }) @@ -94,7 +94,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then tiles = {"default_stone_brick.png"}, is_ground_content = false, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = "", + drop = '', sounds = default.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, }) @@ -104,7 +104,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then tiles = {"default_stone_block.png"}, is_ground_content = false, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = "", + drop = '', sounds = default.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, }) diff --git a/mods/ENTITIES/mobs_mc/skeleton+stray.lua b/mods/ENTITIES/mobs_mc/skeleton+stray.lua index f0e728e083..cb12e905d5 100644 --- a/mods/ENTITIES/mobs_mc/skeleton+stray.lua +++ b/mods/ENTITIES/mobs_mc/skeleton+stray.lua @@ -3,8 +3,8 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_bows = minetest.get_modpath("mcl_bows") +local S = minetest.get_translator("mobs_mc") +local mod_bows = minetest.get_modpath("mcl_bows") ~= nil --################### --################### SKELETON @@ -13,53 +13,35 @@ local mod_bows = minetest.get_modpath("mcl_bows") local skeleton = { - description = S("Skeleton"), type = "monster", spawn_class = "hostile", - hostile = true, - rotate = 270, hp_min = 20, hp_max = 20, xp_min = 6, xp_max = 6, breath_max = -1, - eye_height = 1.5, - projectile_cooldown = 1.5, armor = {undead = 100, fleshy = 100}, collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.98, 0.3}, pathfinding = 1, group_attack = true, visual = "mesh", mesh = "mobs_mc_skeleton.b3d", - - --head code - has_head = false, - head_bone = "head", - - swap_y_with_x = true, - reverse_head_yaw = true, - - head_bone_pos_y = 2.4, - head_bone_pos_z = 0, - - head_height_offset = 1.1, - head_direction_offset = 0, - head_pitch_modifier = 0, - --end head code - - visual_size = {x=1, y=1}, + textures = { { + "mcl_bows_bow_0.png", -- bow + "mobs_mc_skeleton.png", -- skeleton + } }, + visual_size = {x=3, y=3}, makes_footstep_sound = true, - textures = { - { - "mobs_mc_empty.png", -- armor - "mobs_mc_skeleton.png", -- texture - "mcl_bows_bow_0.png", -- wielded_item - } + sounds = { + random = "mobs_mc_skeleton_random", + death = "mobs_mc_skeleton_death", + damage = "mobs_mc_skeleton_hurt", + distance = 16, }, walk_velocity = 1.2, run_velocity = 2.4, damage = 2, - reach = 3, + reach = 2, drops = { {name = mobs_mc.items.arrow, chance = 1, @@ -91,8 +73,6 @@ local skeleton = { walk_speed = 15, walk_start = 40, walk_end = 60, - run_start = 40, - run_end = 60, run_speed = 30, shoot_start = 70, shoot_end = 90, @@ -104,13 +84,13 @@ local skeleton = { ignited_by_sunlight = true, view_range = 16, fear_height = 4, - attack_type = "projectile", + attack_type = "dogshoot", arrow = "mcl_bows:arrow_entity", shoot_arrow = function(self, pos, dir) if mod_bows then -- 2-4 damage per arrow - local dmg = math.random(2,4) - mobs.shoot_projectile_handling("mcl_bows:arrow", pos, dir, self.object:get_yaw(), self.object, nil, dmg) + local dmg = math.max(4, math.random(2, 8)) + mcl_bows.shoot_arrow("mcl_bows:arrow", pos, dir, self.object:get_yaw(), self.object, nil, dmg) end end, shoot_interval = 2, @@ -128,13 +108,12 @@ mobs:register_mob("mobs_mc:skeleton", skeleton) --################### local stray = table.copy(skeleton) -stray.description = S("Stray") -stray.mesh = "mobs_mc_skeleton.b3d" +stray.mesh = "mobs_mc_stray.b3d" stray.textures = { { - "mobs_mc_stray_overlay.png", - "mobs_mc_stray.png", "mcl_bows_bow_0.png", + "mobs_mc_stray.png", + "mobs_mc_stray_overlay.png", }, } -- TODO: different sound (w/ echo) @@ -160,195 +139,13 @@ table.insert(stray.drops, { mobs:register_mob("mobs_mc:stray", stray) -- Overworld spawn -mobs:spawn_specific( -"mobs_mc:skeleton", -"overworld", -"ground", -{ -"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, -7, -20, -17000, -2, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) - - +mobs:spawn_specific("mobs_mc:skeleton", mobs_mc.spawn.solid, {"air"}, 0, 7, 20, 17000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- Nether spawn -mobs:spawn_specific( -"mobs_mc:skeleton", -"nether", -"ground", -{ -"Nether" -}, -0, -7, -30, -10000, -3, -mobs_mc.spawn_height.nether_min, -mobs_mc.spawn_height.nether_max) +mobs:spawn_specific("mobs_mc:skeleton", mobs_mc.spawn.nether_fortress, {"air"}, 0, 7, 30, 10000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) -- Stray spawn -- TODO: Spawn directly under the sky -mobs:spawn_specific( -"mobs_mc:stray", -"overworld", -"ground", -{ -"ColdTaiga", -"IcePlainsSpikes", -"IcePlains", -"ExtremeHills+_snowtop", -}, -0, -7, -20, -19000, -2, -mobs_mc.spawn_height.water, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:stray", mobs_mc.spawn.snow, {"air"}, 0, 7, 20, 19000, 2, mobs_mc.spawn_height.water, mobs_mc.spawn_height.overworld_max) -- spawn eggs diff --git a/mods/ENTITIES/mobs_mc/skeleton_wither.lua b/mods/ENTITIES/mobs_mc/skeleton_wither.lua index a6b48d4281..e4a1f86fc6 100644 --- a/mods/ENTITIES/mobs_mc/skeleton_wither.lua +++ b/mods/ENTITIES/mobs_mc/skeleton_wither.lua @@ -3,14 +3,13 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### WITHER SKELETON --################### mobs:register_mob("mobs_mc:witherskeleton", { - description = S("Wither Skeleton"), type = "monster", spawn_class = "hostile", hp_min = 20, @@ -26,12 +25,11 @@ mobs:register_mob("mobs_mc:witherskeleton", { mesh = "mobs_mc_witherskeleton.b3d", textures = { { - "mobs_mc_empty.png", -- armor - "mobs_mc_wither_skeleton.png", -- wither skeleton "default_tool_stonesword.png", -- sword + "mobs_mc_wither_skeleton.png", -- wither skeleton } }, - visual_size = {x=1.2, y=1.2}, + visual_size = {x=3.6, y=3.6}, makes_footstep_sound = true, sounds = { random = "mobs_mc_skeleton_random", @@ -87,7 +85,7 @@ mobs:register_mob("mobs_mc:witherskeleton", { fire_damage = 0, light_damage = 0, view_range = 16, - attack_type = "punch", + attack_type = "dogfight", dogshoot_switch = 1, dogshoot_count_max =0.5, fear_height = 4, @@ -96,20 +94,7 @@ mobs:register_mob("mobs_mc:witherskeleton", { }) --spawn -mobs:spawn_specific( -"mobs_mc:witherskeleton", -"nether", -"ground", -{ -"Nether" -}, -0, -7, -30, -5000, -5, -mobs_mc.spawn_height.nether_min, -mobs_mc.spawn_height.nether_max) +mobs:spawn_specific("mobs_mc:witherskeleton", mobs_mc.spawn.nether_fortress, {"air"}, 0, 7, 30, 5000, 5, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) -- spawn eggs mobs:register_egg("mobs_mc:witherskeleton", S("Wither Skeleton"), "mobs_mc_spawn_icon_witherskeleton.png", 0) diff --git a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua index 9236b255e3..54269b46e6 100644 --- a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua +++ b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") -- Returns a function that spawns children in a circle around pos. -- To be used as on_die callback. @@ -31,45 +31,43 @@ local spawn_children_on_die = function(child_mob, children_count, spawn_distance speed_penalty = 0.5 end local mob = minetest.add_entity(newpos, child_mob) - if mob then - if (not mother_stuck) then - mob:set_velocity(vector.multiply(dir, eject_speed * speed_penalty)) - end - mob:set_yaw(angle - math.pi/2) - table.insert(children, mob) - angle = angle + (math.pi*2)/children_count + if (not mother_stuck) then + mob:set_velocity(vector.multiply(dir, eject_speed * speed_penalty)) end + mob:set_yaw(angle - math.pi/2) + table.insert(children, mob) + angle = angle + (math.pi*2)/children_count end -- If mother was murdered, children attack the killer after 1 second if self.state == "attack" then minetest.after(1.0, function(children, enemy) - for c = 1, #children do + for c=1, #children do local child = children[c] local le = child:get_luaentity() - if le then + if le ~= nil then le.state = "attack" le.attack = enemy end end end, children, self.attack) end + return true end end -- Slime local slime_big = { - description = S("Slime"), type = "monster", spawn_class = "hostile", + pathfinding = 1, group_attack = { "mobs_mc:slime_big", "mobs_mc:slime_small", "mobs_mc:slime_tiny" }, hp_min = 16, hp_max = 16, xp_min = 4, xp_max = 4, - rotate = 270, collisionbox = {-1.02, -0.01, -1.02, 1.02, 2.03, 1.02}, visual_size = {x=12.5, y=12.5}, - textures = {{"mobs_mc_slime.png", "mobs_mc_slime.png"}}, + textures = {{"mobs_mc_slime.png"}}, visual = "mesh", mesh = "mobs_mc_slime.b3d", makes_footstep_sound = true, @@ -86,21 +84,23 @@ local slime_big = { drops = {}, -- TODO: Fix animations animation = { - jump_speed = 17, - stand_speed = 17, - walk_speed = 17, - jump_start = 1, - jump_end = 20, - stand_start = 1, - stand_end = 20, - walk_start = 1, - walk_end = 20, + speed_normal = 24, + speed_run = 48, + stand_start = 0, + stand_end = 23, + walk_start = 24, + walk_end = 47, + run_start = 48, + run_end = 62, + hurt_start = 64, + hurt_end = 86, + death_start = 88, + death_end = 118, }, fall_damage = 0, view_range = 16, - attack_type = "jump_punch", + attack_type = "dogfight", passive = false, - jump_only = true, jump = true, walk_velocity = 2.5, run_velocity = 2.5, @@ -109,6 +109,7 @@ local slime_big = { fear_height = 0, spawn_small_alternative = "mobs_mc:slime_small", on_die = spawn_children_on_die("mobs_mc:slime_small", 4, 1.0, 1.5), + fire_resistant = true, use_texture_alpha = true, } mobs:register_mob("mobs_mc:slime_big", slime_big) @@ -158,141 +159,12 @@ mobs:register_mob("mobs_mc:slime_tiny", slime_tiny) local smin = mobs_mc.spawn_height.overworld_min local smax = mobs_mc.spawn_height.water - 23 -mobs:spawn_specific( -"mobs_mc:slime_tiny", -"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, -12000, -4, -smin, -smax) - -mobs:spawn_specific( -"mobs_mc:slime_small", -"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) - -mobs:spawn_specific( -"mobs_mc:slime_big", -"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, -10000, -4, -smin, -smax) +mobs:spawn_specific("mobs_mc:slime_tiny", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 12000, 4, smin, smax) +mobs:spawn_specific("mobs_mc:slime_small", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 8500, 4, smin, smax) +mobs:spawn_specific("mobs_mc:slime_big", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 10000, 4, smin, smax) -- Magma cube local magma_cube_big = { - description = S("Magma Cube"), type = "monster", spawn_class = "hostile", hp_min = 16, @@ -301,7 +173,7 @@ local magma_cube_big = { xp_max = 4, collisionbox = {-1.02, -0.01, -1.02, 1.02, 2.03, 1.02}, visual_size = {x=12.5, y=12.5}, - textures = {{ "mobs_mc_magmacube.png", "mobs_mc_magmacube.png" }}, + textures = {{ "mobs_mc_magmacube.png" }}, visual = "mesh", mesh = "mobs_mc_magmacube.b3d", makes_footstep_sound = true, @@ -313,7 +185,6 @@ local magma_cube_big = { }, walk_velocity = 4, run_velocity = 4, - rotate = 270, damage = 6, reach = 3, armor = 53, @@ -325,25 +196,27 @@ local magma_cube_big = { }, -- TODO: Fix animations animation = { - jump_speed = 20, - stand_speed = 20, - walk_speed = 20, - jump_start = 1, - jump_end = 40, - stand_start = 1, - stand_end = 1, - walk_start = 1, - walk_end = 40, + speed_normal = 24, + speed_run = 48, + stand_start = 0, + stand_end = 23, + walk_start = 24, + walk_end = 47, + run_start = 48, + run_end = 62, + hurt_start = 64, + hurt_end = 86, + death_start = 88, + death_end = 118, }, water_damage = 0, lava_damage = 0, - fire_damage = 0, + fire_damage = 0, light_damage = 0, fall_damage = 0, view_range = 16, - attack_type = "jump_punch", + attack_type = "dogfight", passive = false, - jump_only = true, jump = true, jump_height = 8, walk_chance = 0, @@ -401,55 +274,13 @@ mobs:register_mob("mobs_mc:magma_cube_tiny", magma_cube_tiny) local mmin = mobs_mc.spawn_height.nether_min local mmax = mobs_mc.spawn_height.nether_max -mobs:spawn_specific( -"mobs_mc:magma_cube_tiny", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -15000, -4, -mmin, -mmax) +mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mmin, mmax) +mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15500, 4, mmin, mmax) +mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 16000, 4, mmin, mmax) - -mobs:spawn_specific( -"mobs_mc:magma_cube_small", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -15500, -4, -mmin, -mmax) - -mobs:spawn_specific( -"mobs_mc:magma_cube_big", -"nether", -"ground", -{ -"Nether" -}, -0, -minetest.LIGHT_MAX+1, -30, -16000, -4, -mmin, -mmax) - ---mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax) ---mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax) ---mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax) +mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax) +mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax) +mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax) -- spawn eggs diff --git a/mods/ENTITIES/mobs_mc/snowman.lua b/mods/ENTITIES/mobs_mc/snowman.lua index 0726b8da0c..1ee88b3623 100644 --- a/mods/ENTITIES/mobs_mc/snowman.lua +++ b/mods/ENTITIES/mobs_mc/snowman.lua @@ -3,12 +3,12 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") local snow_trail_frequency = 0.5 -- Time in seconds for checking to add a new snow trail local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false -local mod_throwing = minetest.get_modpath("mcl_throwing") +local mod_throwing = minetest.get_modpath("mcl_throwing") ~= nil local gotten_texture = { "mobs_mc_snowman.png", @@ -21,7 +21,6 @@ local gotten_texture = { } mobs:register_mob("mobs_mc:snowman", { - description = S("Snow Golem"), type = "npc", spawn_class = "passive", passive = true, @@ -179,9 +178,9 @@ mobs_mc.tools.check_snow_golem_summon = function(pos) minetest.remove_node(pos) minetest.remove_node(b1) minetest.remove_node(b2) - minetest.check_for_falling(pos) - minetest.check_for_falling(b1) - minetest.check_for_falling(b2) + core.check_for_falling(pos) + core.check_for_falling(b1) + core.check_for_falling(b2) local obj = minetest.add_entity(place, "mobs_mc:snowman") if obj then summon_particles(obj) diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg deleted file mode 100644 index 9c56b0f65bc367e060329fee2843eb9ccc5c9753..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14734 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 Fe*pY9T<8D* diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg deleted file mode 100644 index bafc77b7eab6f58d17dbd56ddc2f4c1da53d86db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14564 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 ZUU0tu;-eYfb3&=*j_1BOjmEXW{|EX3(7*ry diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg deleted file mode 100644 index acb236445e2b530640a1c98a54c81d20a9a3672a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14731 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 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg deleted file mode 100644 index 1ef7a522744a727da6082e2a3a1f2bf36fc77604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11187 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 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg deleted file mode 100644 index c2743fbcc640651eedc1529bbed4e3c209552fc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11068 zcmeHtcT|%}+xLVTstF_^AYkYr1|>jPKy*V1hAIgJLjWbANVOrX-B1kyEP#j<7eWyt zQ6dBtcNLHzh#*K2u`D($h-=wZS=)OD+X=Do%5XUzjw|s%v^KLT=!gM<~IXt zHf#t23gBBhA9tB1uO>}S&%lgfX`8lk<5T1W1P4u6zgqWS6q$XQCdus*JQT2rNy~2Y*ap}=g$J? z5RC>v3Gnc02WqCh69%0(V66^pt#XbJa5{lg70{=g)w+JSjM`Y=TA#Ra(Aom76{-v^ z98hQ`*(ip*;POp!uu!qzaBHv0iHfc2godgNb-P|%rk~xj+M)oLXALz6T%O}whuk%6 zT5tIHk;X!zPW`MBu{&kZ`ANmMLT!E>IOtp4RrI3~?r{0^eCztstX#S}44bccL!|4HhwZ6B!TwArrADkxi@BMWdNXZLXlZuXxjmuhvco2_Bi?6o zusPrIhdsZ%m*@GV<6xl5%(>*Dwb0Z+_`q4Hn3dC{0HWn8!KoFRS{K%M*T*KDiZ5@A zJK2`pe}>q9MsuD8z#tZRs){eG|G#oaaS+;Yx}tlvi)_>?`&g_|0$8pGJ_I9RLc+P`1Ue57Gw1W@IaQZOY1< zDgHMhRme5+Kd1D0e}NWaQW;y4z=PW#;>@ds2ThBuhI?o(NP-yn)sJvxLuGFVoVCjy zS2d!_M>=zZ%dO5gmX^<3FlkW#A!JMItH)$j$A-#M2E8@Q>K1A{bjnr5jW-~g{*wyr z9(@kP7k{Hnwec1U8XG!PHr;R@1=Vtk%dMp6gBRxe<`#|XDh4~9??WSUC(9Ght3^Py zx#)_Q18Q>GKi!7{*^M)S?WxSb?Kz;rMVZu_6d7+js9jV=>b0≦!)j)0i2^(6_4F zmNCC_8~|B}c`yF6n0Ms`FRm>V5U%1|uG#ey*f5@vHpr200m9fd`uQ|^GR1K zG6USz77YAn*xdJwx&IB~z#E4(ZyknpsdNYbAaukqI&}mS6XX~%LXH_> z#*C%K+-i#nJG&>e?OVVsgv~EEQ~wq@@(?j~KJbuMsPx~FQ-we9!0CXQccFP`q2-Q} z4Y_5F$BsX16srFta^eIhN(CqQf+zd~_}r5C+%nO5Vbax8GwuI2{}nl_x0*v4iX7@z z^S?z-2g%R_il#F}|F;WkTsaIWbQ@Lg?*;&%BCvUV%88=4R8@!!UW=pbBk!a8Ruew6DMn{S^&;6`{zJC+`v9kAe;8%1;j{ zbqqUDbXQVzsSC~jtb_zP(3PP4Z5l|>a4>Ax;hQW-N{2m_;sBi_|9Scsvgl;kn!m}S zIQUb7{r_`G|2xC~YT(~$0CI7dHuQsWuQpk#z;l9u{SPUHIPX^uyr|GuuG`RUfH z4QC}NxQ=AScR6rG|N7&20PtX{fCqH1QvUj;8k!COPKD8-5Wb)l#=rnCCiJ)}0EIC- zjQ{mC|L@d)2!!$Q0PGjCFq;kg6%Is&QVNM0k)gm}ak~Kp1(P!?$iHr}g9Szv?+|SP z5XxX`GphfF1O1UxNnO0KcMH*X#Pe_r1cGu+9iS@m_>&#=YS-UF>&6R&@e0uK0;yeD zu6D;bAEI_(T(1wnnS+k|P9=|b2=M|4KZ&kxA@;xZq@(CW1~E1vwKl;^vVUUOY6e{S;9#c%iLdB@#VvKee?k8YL1^f%_N$^AXwL_yAv#qFx+T$ zwG2BSo4OK)vdNJ`pGI6QgJG=3C}dWDU8ZEc)d( zY7~joq1FhbsBAgj6^UlL+T{Abnaa5>SN=?U2c-AZ82xkdIh(FauY49@5PxEf@2H$Lg9d2ykS586H78E(NhJE5 zhiDQRHnD(;FAtOVCW^_{k5halW9+CVsbx)mp`6wv9XBmz*!7@-pjug$ZO?mbR1@h5 zyGW<&gK>}z#GDBEf?0GyV-Fj09JQGI0-LeoltE=cS?L5Q7FahceI|xeqo!xfn>WmP z=ne_FUXR?vmVu5jn5CGG8{zYfy8cTrc5-oDMRE7^qWSm*1VY;zZ2lyq02my;aN(4<;qZl* z4$AlQ!Pn}U)A5wepUXe`o|w{!qLC~dNs=B zp=iiuj7k4`%C+A9l)51w z7W+re@>OK_fdR!RuTAxvK0F9A8@=QD>hPHcA>PB^BmteBkJqScb-vr#*_l4!mM=3j zG~^#EJ$4NGT!DZk36a4=x`iS64N?U!abtD?E9i1-M_^N!o2T1wLNFbrghJSMw{rw& zi{*CoQ(g1`9j+|edCQX-^WWNC+!HKoo|hy>owareb$VxYd8_l9w-Qm9is6+>Fhc+0i}y!%zDz3J{lkFJ{methN1ZF2g6!ZQ?IkrXS#M+FkMkFK^1pk#LK>BA z-Y2WIh)~U=Pb#=(l|FyPdhV{Or>}cChj*~q2)L?%y|IR={+pZeDm`TKqYxLnL0bGNtd#zv&qStk{0Qt zM%ue~6QL|!4M{?E4qH$*E^ZVM*kV&Iy@1Z_honeVk_ru%Eza`Y*w}8sBI)A%Mx~7wPK2& zsp;mp!?4vNVG;&+0_);_8i;bOe^B=*Fqyf`;odaKIOsKFYeO61QZya9`8+Cdf6?of zZ{*BJ<~dhJ$HvA&Ac+;+1Q#IDQGQFu#cY9%m_32#GP^P3#AfeN5jKYram>De|)XDJ$a+n14JHAC9FB&w)nHo{@|IQwta0b4AH>OM$DI+ zvWvf%@xQK(c+cs`m@s8~X5|X~b%~R%hn)O=*`+SivDr>gZOqiasA$3(;pu7Fqz?zflA4S@X+$dZ>D0> zqFWR_x61d1e*Jq$83K-%Gis0ntG zzjX3;n7=fr8znKogzY*h5{8_#SzBmjUI16~=Igj!EIoHF;G_zy8E#Nuibc60>2f?q z%e9z~9};?Igb4W^i3{@s@eG2!}Y$w;u_%O$wx{mx04zkcN6 zDsRSH>Du(38(SlNPpPRb0>O@FJ$AMwz4O{RN)3xiSy8*8KXy~?>WJ3Lu`+`~wZfvq z3OuZot8}@&EK-eq+lxAu;q@rzWryhm` zO1fD9$1>IuLbSZN@wVK2nwghOgc~==loBvONiUL`*-2>KDYyomU?S5i>Onryoe62u zpQtKP5SFMoicCsFAW#L!5`jvSfJ^UQ8l5U-{Hp7@ZTDd%6eVBS$!lbB?+0R#krL(YgZlc-LRwPkQ$tT$5oD45#X;9$a0 zA^V>k*P?i8l3=&T^1AglBA!`?=CoypL-6E<|63lIg%aVo?I~CAicKgRo zv<)%`8?BMn1X(+*L4FQ#@!Zc}o)xiJ2s5rt6&u-vOW?$p<&c*WFoF=O3{05z?ZENy zIIfYebR(5W7Cs%d#%QX5<$$je<(cOwRqHsNEkxQ9Od(~pTD>Dr{yL z!aYPN1ug=DwSae{3D;r{0-;)lg3!>qtELHm)XG8z!>Saz7u$x@-Mn})tj)@E?%@hK z$jWgRin`xRiZv4o#3BrJDP|ZA{B#o&usJ4J;e(1q1-K(zgwYuHU+g~`tc!FSTm(1e zPq3E?1YTneA<9g8#|{7jmCc?uW89d5AStNvV5-Nk5Fc5aNtQlNN_ImiSB zm=K3?fk40qpmVd0=Eh}O;Lw9$u`Dhy8Gw7ADVZ!Jaui+`OPjmzrrXx?k%&xNNFRXT zK$$cXg@h?0FLNabb9#)XdCH6^$W(}5jw5*Qe@2ir(R5`*qPkGv#Z=CW#C+YsNk1Xtlj(HL;9x}hN*+nX zLW?t)Vm@7#0dE@(Z(t+LTqM+O33<*+E?_%~ro|IrS$r0E%wXI<33}6YQwHO?(xLi~ zYT(erwc8pDlqD)iU_3lMckpD43NQ3c@71(LS`dg@r&gIkD$mPYfARBk&56uQ`fLA5 zc#j5=YmOA^>h=UbFwOTX)nLHwk6<}COX$)7fO#OGobS5PouyyWk38}ybTX3K#Kv>| zlj1Yu2ik4Kp`Fd9B{@tfYN=&{h@+gy<*(S_wdOCZl!H_r5!?&|UkaF;OrLf>+-3)n$TZy<%#%F7QD4Hq}_3{$^dk=`!RlNEb5 z1%B6;aM$N*x>1;q;GAK%p|cN+V}me5=<05s$CS;&9`*5zPUA3=Cu(HeOCsPDX_aKe z$5&^dC4>;B7T(1Zodi?PS9eJ=!br!KX~Kr9$ExF)p6J0Jf0QK)F5R+JBH2*U9&Y3< zsubL<$4g%xAHA{CwwXZnJK502>Tbh^8#Vi)NM00GA(P7V9C{k81;7p}RcoXzl(hp zM=W;ir7d~)`~Cb`&Zgmwb{k^6k1x5gf6pGLs9h6bt$LiWv^7T_^maBL;BSlU^5H0u zFt~iV?SW)+Lcs1G7q+E^_(@xX-TW7$X4+coY?|1mEINehP()9y%Vlh7y=jR;2_X{3 zbZDretr}1Q5>uBZLWa%prkkl7#Va1`7jM85jrZhtzu z0IhUe=$@&Z(ZG*q3k7xLpfx6o0dCo_nhH=tNNsJB14mGq7&kKS*@^zX69?}VX#&#R zP7b(FO-cFX5ig9RjGzy*gKrmT1LMB%Bj?Y>T0K7cX6{+n>URg0tus4z(oXN@i`q|& zRo_Q^=)E^An^^>KeQ-N7>dJS)8ivjhNxC#y))CVlZY|&_(V(4>l2J(OR##U^EWj!T zzN+1>X-1(^l+86s$??!Pjs;3=Q6sILH*7~42#;V2;v`1w)g&P7Rso*fqU=-&g{~c6 z_<=FEb{k(^#7)xR=Vp-6fv{JE-&g3I1x#lY6-^o|tEJM!KeAeybg#fdv&($O^QAA6#h8}{xA*DJq3p1!f{@yPb3=hsdjoUsoU zMbj6BVgNXbiMOF4kD5uWPX+sxHgP(L{wYa>+*MrW2(0MmW_K(%Zyv3dB3!-Ke>uGmm*o^A$7;377EqD z=1^=Sqdqe;(=3)t;$os6pkjGYxHqwvay>_J3P6Zhe3BO*l_NEPB(6dY_b_?}MdV1rfsJ1XS0 zX|JnYLpC(e-73{KJ?l1bBw{!I;Fx~WUdQ@P4UJU)N>u0~j{l|~cKQTVJea~~D|Z`~ z9;0osk_SB{ut_LjN^qDkw6vu~fF4;lDqt>lvk{w=V8#(ic4!Ta#cuxS4tJ!6pWo89 z;NRX7ct~V{*3(wmX@OV)3M98+2jN5{&a@t9nPj*wlUQApOxZ6`UflF~{d!u$ebJ1s z-~Q?w5`Bb`$P0yLo}kub;4*AL2WIK6+M1`T(91I)tF=2~f#VWSo%(i>zea@B=> zPM4CuXu;mlDk+MaLo)@YTuu$ggn+LnFZNefLPUbSaX*Ew4BJIpGI^R=Z@+%|N{4$* z$Hgma7tP)zj2t_CbZ=FYZgrtWD8|#$v~KdMzd9Bt;|P!^ba2N?b90X=Gq5;KX#J>6 zVNay;NiQ+h)=P|3%&->K|NJwdo;uddMV=Jlg>X1KxBx>9F3|3|&QMR*E0|*qD77_A zhy)n~7b;|bmIR&UJ!Y_e`G!lc=ia)<#i%(DCwfFu_EMKkQ*}W`XUoc>P^%MRdc`U9MdQ}$XvW{;tD-jGQk%=rHqDmr|9lqa(Gb~bnPn-UwaSgKknYtvmy2VYG=bu z`~hnYeerb9{z!nNrSeG^a7dj;*;r- zn~+Fx54(v@7U40T!AM1699a*21%uyQhCL(%Ssl@yNbCp@bCwT_tSh z>hsBCIoV;oClz<^IQ-0%2hNz++rtkP&rwap;P28-(;c9l2ul$_n=;-E2O0lFB z2zy-wgmftgG?E#WkA}&B3aoP?j>Cz+i_#!VIs_0X^$Og^7fDSO1d=MDz=k_(1LE@0 z1>+Mc$XnAp?B3swj)XQm;8sVdHaGH$4j<7*w)AKmT7yC{hX^iYk%%><770_NynI6b zXuh-2K-uzm*7sY!9PP@UZdn&`N$~<@ylL>7l3T#n_FcbPyw7am?@(Cr^Xl=rrn5J| za(A=l?HZ&L}uP->(3(d>pUYdDj@33i;d~HrmXB%!g;z#^F@0$IdCwJoR z>y^E`yQAGmVv7?J#>J%xxz$ZKZTYJRc>_|k4Lg%Y-dp5QbtxkL?p$WlwxS<~SV_&W z^7hKp`fcS_`jyVl4)FIp+&FEI&^9ZnC?d1`c}=|aZyJCRaLRb+vb)5CIOE-y1CumT<*1NTxjEpl(z6?-94>( zBjbo&(&oUWj$vmv@@=$yHD>B<{6;K&gZxmJQ6pV0s2R_bkxeYL8J?g{$Os8`z}hN! z)y;e=h;I3O=Fa=_FP?Dk3_cw}X}0YC+P$v*{scQs$Cf8TcJjl|n>d|i@4CadmoiGN zVP48!{P=O0q$jr)Nsk?A@+jE? zN(hmusk^le_1*VuQk$>=hc!9mWSJ4KO8cN&^kedku>SMiq9Cay%jko;v-##h#s=rq z+M3!e*M4_htvFPOUmh3y^yyd)c~iDS@9-bpE_3JNnN~5YkZfAuFLt#V46R30aoU=% zry5UfTys0spM3W1=oBgX6IkQ`i^=O=v)~ z57?YYM{559-EEL5;u1wz zq82?dMA96HCI`1ZMHsPK<77P|H#CyoDMZ=;UL@UrHun*YnBBKiGUB-ee)zyavG&`p zpLMMH}ZpiqyXFB!ckJp|d+VDRrT9$K1 z!-o&m+|=J%_xa$XmkIYXnTMV{Ku@%Ar${CKmBcOG4w+lO&Lm$0A98smx?ol8ww;UC zMJ^h*{j<`%sgVJ_WgGEj{M=(Q2wBKVp{pd1BU2$I2QID8wn=K`w(!xx#N;!SBs*Ez zfTKuxBD$uO%QIo&G6D)jip(Y~rIY2EBo@#XMM+H}TYJ37k5+21UFH@=XlobJc9~w# z+tD|hudemxB1ZR=UkWPJ)cr)9`yZZZDP~Uf+Y(I+XI9?&`ts(xmv8IBV~GC8XK!xw zjK9MAczUw%Y-6+LVpntN)z`W3Hal1hNV`*Hzt7{uXUtxkrI^h; zPT&43EE8S4;R_{jFD7Zbps=CJX`BAy<3e)+UR#gmD0zm%mH5ct?n`rz9Xl2cMIpJH zz?B4PBw*`h?FAv4OA}Zv!(JLAtq0ibvvu+QNH_XObF7U>DiC#w2!h$2>-O9^O-%k> z-K&WiNXB|fMCx(*Or)n}LZxiv_1CqBFaMC&tk5H{5vDJ?@HFL9QOiLg8h&xF%{o z-I}vUX?0HdY3Wqo^(8cuqU*I|zdznI_@S0Uh*D72+?xU08*@kS_->Q%XjqVyVZ+)U zG3(v{Vdr^rYFGMB⪼8)D-TJ`->@>Uw(8fCdv}Jn*&O4Gn>9R&mbhvv@|5CwbLtc zT+Cv#3`9_)uRYtkD#uzl*1!*`QQ&9q{K3jO=+~DCVyXK5Nwr6Jz1JP#%{V^kRk?WK zk1wAdXUG%)Uo=b*VVkj(it<5m*jbmmFMI|soRp3ewj4R&hvv_;U7I_@W6{w}I&?nG zLNkqDeRBQBOBYUs;7Egg+2OG#H{KP6UGYwtXixpBZ+GjCdh_|;wK^{TaqIK$WBy*> T_m77=o*i6O^uzS|W#GR6*1vMu diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg deleted file mode 100644 index 5c9ee492ba4d2315ab820b8149dcb5b73cfc62f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10341 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 F{0E)bG4}uf diff --git a/mods/ENTITIES/mobs_mc/spider.lua b/mods/ENTITIES/mobs_mc/spider.lua index e1be9c3ed6..0bb03a9c7c 100644 --- a/mods/ENTITIES/mobs_mc/spider.lua +++ b/mods/ENTITIES/mobs_mc/spider.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") --################### --################### SPIDER @@ -13,26 +13,20 @@ local S = minetest.get_translator(minetest.get_current_modname()) -- Spider by AspireMint (fishyWET (CC-BY-SA 3.0 license for texture) local spider = { - description = S("Spider"), type = "monster", spawn_class = "hostile", passive = false, - hostile = true, - always_climb = true, docile_by_day = true, - attack_type = "punch", - punch_timer_cooloff = 0.5, - rotate = 270, + attack_type = "dogfight", + pathfinding = 1, damage = 2, reach = 2, hp_min = 16, hp_max = 16, - ignores_cobwebs = true, xp_min = 5, xp_max = 5, - eye_height = 0.475, armor = {fleshy = 100, arthropod = 100}, - collisionbox = {-0.45, 0, -0.45, 0.45, 0.9, 0.45}, + collisionbox = {-0.7, -0.01, -0.7, 0.7, 0.89, 0.7}, visual = "mesh", mesh = "mobs_mc_spider.b3d", textures = { @@ -49,7 +43,7 @@ local spider = { distance = 16, }, walk_velocity = 1.3, - run_velocity = 2.75, --spider can become extremely difficult if any higher + run_velocity = 2.8, jump = true, jump_height = 4, view_range = 16, @@ -78,7 +72,6 @@ mobs:register_mob("mobs_mc:spider", spider) -- Cave spider local cave_spider = table.copy(spider) -cave_spider.description = S("Cave Spider") cave_spider.textures = { {"mobs_mc_cave_spider.png^(mobs_mc_spider_eyes.png^[makealpha:0,0,0)"} } -- TODO: Poison damage -- TODO: Revert damage to 2 @@ -94,158 +87,7 @@ cave_spider.sounds.base_pitch = 1.25 mobs:register_mob("mobs_mc:cave_spider", cave_spider) -mobs:spawn_specific( -"mobs_mc:spider", -"overworld", -"ground", -{ -"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, -7, -30, -17000, -2, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific("mobs_mc:spider", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 17000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:spider", S("Spider"), "mobs_mc_spawn_icon_spider.png", 0) diff --git a/mods/ENTITIES/mobs_mc/squid.lua b/mods/ENTITIES/mobs_mc/squid.lua index ccd73296ae..1877a2104c 100644 --- a/mods/ENTITIES/mobs_mc/squid.lua +++ b/mods/ENTITIES/mobs_mc/squid.lua @@ -4,10 +4,9 @@ --################### SQUID --################### -local S = minetest.get_translator(minetest.get_current_modname()) +local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:squid", { - description = S("Squid"), type = "animal", spawn_class = "water", can_despawn = true, @@ -17,8 +16,6 @@ mobs:register_mob("mobs_mc:squid", { xp_min = 1, xp_max = 3, armor = 100, - rotate = 270, - tilt_swim = true, -- FIXME: If the squid is near the floor, it turns black collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.9, 0.4}, visual = "mesh", @@ -50,7 +47,8 @@ mobs:register_mob("mobs_mc:squid", { }, visual_size = {x=3, y=3}, makes_footstep_sound = false, - swim = true, + fly = true, + fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, breathes_in_water = true, jump = false, view_range = 16, @@ -64,158 +62,7 @@ mobs:register_mob("mobs_mc:squid", { local water = mobs_mc.spawn_height.water --name, nodes, neighbours, minlight, maxlight, interval, chance, active_object_count, min_height, max_height -mobs:spawn_specific( -"mobs_mc: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) +mobs:spawn_specific("mobs_mc:squid", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 5500, 3, water-16, water) -- spawn eggs mobs:register_egg("mobs_mc:squid", S("Squid"), "mobs_mc_spawn_icon_squid.png", 0) diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast_firing.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast_firing.png deleted file mode 100644 index 3e5b41c32710a811ff75aa6a349bf4944294aaf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1532 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 literal 4115 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 N9UWusdQF$O{{h^3qk{kd diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_zombie.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_zombie.png new file mode 100644 index 0000000000000000000000000000000000000000..846769e2378b7eae0114ce99f2e5654daa364b45 GIT binary patch literal 11350 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 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_cyan.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_cyan.png deleted file mode 100644 index 83f7a8faa17d54d5e7402e7d6e94e18f50e27401..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7612 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 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_green.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_green.png deleted file mode 100644 index c3297ce9424cbcc9d6f40928e2c1f6ad9e6f13a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5809 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 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_blue.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_blue.png deleted file mode 100644 index 71eabea5365dd02619695bfe447b7a327758b534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7643 zcmb7|)l(ac^YxQJ&|*c36C8>(xVvj{30mCU-5%WCodPXE3KVy1aVze@THK-7uiuOJ z4|r#1&(55gz1WL$@!1$PRXHpSQVak9fTbWWt?_S${A+PElz%$A5FGr^H}TWb^U(O@ z4RLXEwz74wgn0P6SVAm)Y^?wQpOw9A{Zujm?8r^uSOJi3h%oj$sF@RVqzH#uyRFls zg@VJ`Tz|AiIaUF5|Bh)X_$6?l=Uz8=K`qaVgeE1}b3TQUQKb7N;ec!CZ-D5lsME!r z_oCEuYf76If97J5;3k4`adis6;^z5gdehr2_~Ui=1;?igMr+l{MHx4dp4!Sg#s2!m znD|ro~}4i&0y7?;HbKHU*1;C5o^1BPgM*MeY6J;ZB{EMW=t8rM`)1b zb8)&bO-)~8{P13VpI_efOXvUw&VNdMUjt%M5rRIr+_WF5q5b1 zo4s1Q5O%JdO#5hNqpF;FKWft5zq$UDrrWw`o|lT+*kd--{!N#C?0o!zu}ogR{j9T@ zv6rgO`!6D^zf|j|sek|4@)ljp6v5XD=Vt9f;djG4i66Aeiw{JA)H}-wL*}Q*9re*Uq$`$eP2pQX|WxnzfYM%&t+|JrN8@1nV$Q98hfl$9wOUY50 zkLL{RN~Ectcuj@(!etsWRb`Pr!cOfun?|63dy0f)j3>qQ z=8f9)vOAIg7asq8VQW_l@fprIhr&FURO@&G9i_JQ>zoefoJV-)e+$7Z&JRVL?}R;H zIA;XMG4pTyzs$jRD@Oo@wS-tJFpQ?C1_552es6gjm&DWyH`X^;eD~(TU ztXs8av8X7|QVf=vQJcRMH?BhYG4E<#@CV30V^zpNWoQKD&)Mf1)@H-JI4qOGV4kdw zfajkmw$tBH@K`Pm?L5^JRyDuf>I*8uDkDVfR`*#E(XEF!vEQqJnMFCYU%$`u&366y zO zJSfjsi6Q7XPg2uG#7v%8#A<*L$a>zlki|A574JYoJM%7egFw2~%)Lsd+aH1II$twZ za@q)EU6RA+zohnAEkcC))Wh#sB6N^$EsORwrshWi}kT)lMi-9V@8jYWZ2aTSfrbQJaDHqyL zR%~JSo|-WES#$uulFe?4Y$7yyXGN8N*iM_}htNDt#&>@jCc2YC3GE0;&whaL#+Xt7 z_Cfyse}DsduhZ_r0vsR=aP znLY4UQ#&KtbSekJ1p7*r%R7vx6s|c*rS(C2stg~}WpwGFf}*qpG1xbL?~hRDlg?Sq z)R>!`;>Iju>EQT+^q8W=Ay#a-z)z)%T3lrO6oQqe%cbpux=Z`n5Xq%zc9b4*D@@{6 zivdj>I2PS@THCfo=M0D`6M&hnK}Z*J6Ak$pXWnNi#744~p zO=PCqKJix~Ri-Z&RI-zmag7``d)%s*mOx=Nw8YI#)QW=yXZWT&KEu*)5Ay37wZL%N zN+uS^rph+jmOy4ga(A2e*SULPjWLog;M@FVHg4{+avvgFm_<;C!{8g*kb zdacuZHWo@)rC6Q7Og%7|buD8U+7ZSaOnB*lo{tOn=82DtK zWff!|b^0VR9RKPQfqXY{|6!567mw4%Olcl;%sR^zE|8CI z1WnBo?~9V0a0D-n^6Kwk<}AcZ@LM~_PlC&Bx>5rf*qs<~LuBhw{$K$G*A&aTw=d-_ z#jue|sFFlOB-(0FX6UF2Jvd(39MfYhgT6&nhHT9xXX+E-oH7~POhyq_aeRDR#t}!B zBP&q>wVS5V9)NQ0c{TU8NNjDTBpO>^za`a*GfS!-+fCHAUP#E5X3G2K%LDyj0%ZnX zQOX^dQy9as;bJu4i}sIbwlqE2JZB#79VIF|%3X=I0gsnzNv9&mpC#iA9+aw;`O;eu zyvc63-^SiB+DoCM{T^DOZSY~l-!)>0uW=g=`Fj!R!4}Rqtym*m+F~RTa~!$*Rt35cmP%-XLP1BFO4=UgFOHw>A@bIt zfN0lD0cE-ji$B-4*yXQjiYJ6&(g6R@8h-Rby~xDriIRX=f=4BvQw2GPts%+AshvVyUy$KkH zn{_&zV&4)-{=0*q$bF+(aWZ3KjPjDk|LqNC_E(AQEl0drp_3i)XCcCv&1VB*1YM3EWIg9BNxzS(=%Dca zRm|_w*s7)oc&^7kwA>Q84gGXEN;?5 z%cO;rn&>67(Sp09WrqC2QTB1(`4@78Wwum=*gx+-SXCQ^T`X3ej}K-cs_N6ABq(T$ z_GLaSias+bp$TEfhpVLpho3v>Jn%C^Wg=US+#3vtXKp|%#iFx>lhiy(dPW8g{JQ z*IYmWi=F~pzj%x|gFWpfJ^TWTIov59Zyj9?^pcs5dCk0?| zoW+fkyY)Ok&hTQ3knHtO`*tEMSgNewIcCX(axslSz8Z`h?j4!-Wo|YgS35J}BcuO3 zxK`naItcrjz3Pxv20uXqzE3u6z#jzq91}FRVbeSFN0;9#E5L3gn5B)X85_MC1p=$%jnlVrd9b;|N@Ts1>kQ5xUO5Cn%AuB7}KD+paNlx#^hM z6T|HL`jUpegvT}3V%LU2?twe|`{jo;^e-Qno1$;FTB*)XMNT(>l3nB6EKqElcE`_e zT{+T>2s=#h#EHYR#g(lxIT#fbJjhM%&M$7*M;ir;9^J321>%6BDL$DbpH(^~gu86X z^6z4#YM8zb9t@f@7$x7Q9L0_}=VP*C3UgU}*1Q^|Hfxw3RwQdIt;YL^C#R)S897)T#ZpFYeZ`x~_S z8!TSPkDw->&>p#B$FBQ62J}9YE!3QH>U;M$nnJ7EzA@)g7JK7r9c$DLN|KF)fY1V2 z_x4IIuAQ}S=t)&LVvn=>_|X7+tQrgu5CB`gnCf|A0fi(5Kl(evA$#B(Kbh{e-nEOL zn=ka+{_`V6uPxyukgz+H8RVz|m{bckiiDdin~;X_v=T77mlXgY3cY#R@}3;|xAGzA zwrgWi^L@~KS~L}FcMCRGc+Lb48DI-L1Nkg6piP2BXr(*wm9H{(<9*GqC5Pr-7!qE1 z%z=GnXYWKGb9l^*KT=%p_SNQQK+R2TBOvftGFvE`_>?%VAv|UqAbNj|>AV^Vqu z4szco%B%65hZQp;(b#yR!h{*?_!@d`fzsk2y))byn>%>lI;F7A7&e}W?rQ@r#H4U2 zh6@!BIBw$^RgN5=^T)g|5yz0b#6YfXqknwsxub|*1v8s|zw3RwC+-k}n zWEuXgv>BUJYbp;5Mr_n8%nQUDiKjv+G7tELD@w8mNfUY$b>$OpVNpP=s~F}*M1}27 z`f7r`$wJI^?kL?&z@_L`6sM6^SORs8Tn&T$nMX>=Of}lL_~U{wcnF#n{u;%?6gB|x z_rf{&Y+QH0|ilFGj(A1$xNaK6E<%_SuuLT2A7U(P4rf?K_e8gN!-6J!rzhuly0zX4~^+%E<0Z2Z&QYJ=kfOZz3zDue=x6@ zfsg!lB3uxf-2;L8{Nz4>Suy0|k=}SFrEN^O(daqLAH~AFpqO-)O@ZP2djLZGRzZBx zr)$i`&SD4M-J7@9&^29nk+r1XxA4h~uzJ<*Y zX3(S~mp|B417R@ic@b;!_mQBN@HzJdJlbD6VngyOt7iksDQFO0z6#O6T7Yiz{|moM!Vw#rv51u*(4mWuX726Xkef7&qrM)XTXsmYlb-01I|UY6*z-tNY>1n0 z)6u&iP%+IHN)Um2o&9Up#-Tj_B?07EQgjrLNR=(?-(^c_NVauLD~{d!n}uKDdt;eA zE(Xp?i6o!bs?H9V#TAo7>_2Bu~@_9!VqXX4laX zEArgZrSUpr_XD7rfxuWDZjb+9ULhowJ)nJRN~1dOZ(e7RnQ1IL-xZ3jvZ-zl_i(rS zlT^+c?WZ}iswuIjqhLSSqJT3sD0_ez_XhR#Rwyflg7q=7iM2sL=wWdl2Be*ryv8;w zfahzUat4wYr_L3}H;cO!{)V`Qc0{>&glMbSJVtgJgRIi@tKrvx%F01uGLA`pWkUs-_L3eBgs* zGC$kFAOas17T0F{urQcI_s^_v|MLIGUB0$qSMJYEE`BsK+0`Pk4uX0e^%1eZYtkt7 zCohysT4Y)!)WOUgYea*$;!x3s(<7HMt^;dYet&K**{AqC*`mE%C#7g{?nja%(SI|v z*y{W5f88fzR+ywRV_)D_JD`4xHP&c-zQ9;iXBqWP(lbX(Q&V=i)`hQp59HQf7Jz2@ zgFzD&QtE=MAI|B86hU2s;}h6k`I7N16!&*2QrZ3U#g&#&@Ai`IBz}UJ-GO|rKyUam z1y_MK^%qkWm&TdMx~l{JX>@EH-RJ0&hluNHHc**k$Zx>y>NthQ%?B+? zVNMC1Cjmi#kJ-t`FYEO2R5}BpW((W@%oT@|A3Z|z6Un4F32eSYtnGh(`!Ahbhu`{Z zqEKh-77{_dR8$ z!EVd7*+J5Y%%eTChKRT-$>R)^Wxbs}{_)z=0IUjGH~ZAW(u?;j zs;U8FpEDJx`Gtg>3Qf=Q$1X2+64IJ8G<^%kFG(bmfP}qS4%04S@59gtk)=SHcK9%! z0@l-M(lIqJi%JS1amq-qBwxREH2p6{dLKDs&(;}0g^^Pp|J^8s{hbeA!1Z!gP`P80 zAP67s(A(VylcUTHI>YkZOwJm6lRTNTxoW5esCpzKm=esU*J_*jGj_{)tWV?c$TMD| zBe_MwwU#U8_G4IJQyD`1_J)|}Zn~$wcSMCjAq6TLa_o0S{-OJ2Ge-edE<91i^ z!!48SHDedh&sn1S)aZ{|0$N6MtQFCA;tdE-hGo^EuIap76&q)6NF=?Pr^L8!+A`t4 zS?;#K-d)rl3qorEY2k_Frds)An*?%w;SXTnuJJUPK?vb-OH1ge0mOCt{&mf9P#KLb zg?Dt!lHajTr_dgbi>_YT90{Y%cJnCmG@8orv*uR2c6y;gD?o$mw*HGLu215j-egG` zqs)4pruI>n%&fIu7yNiY4_%!h;A!#4q}9?L#bY;ZMMPd6S+uu$5OmPSIa3A*?;u<|_@171kNyaZ{P-zQc9*yz|)1V%weZ z8vN+XJmz6Ycx_N?LlMTNeEryo`pk`=_xc?10>TINH zSE2SLheKf3m&E3f&P1{^ngP9>r4fDmbM+u z0aUVTqe^=4w|TvORM*VixTW#;UaNfdpV4g6e*l^&0}AQF@&={0?L8HlIrjxP`d|t6 zo0d`a5&pXN=g&YQS|=STZE~-=f_H)&qL}=(+Cnqjkrsv}7#%#_@zf?x3|YhS2joW7 zd-Pg^17c!sK)vn?b*CWt~N& zMkSn~^B*}ng_QBcDR(T`q2nEP<81o5{2f!Vd1>u1UH*O)Z(#I#eq%u}NNX2Z<#5N9 z2k-L_XSZ(+ceHqngpZGZBJ=map}`nxDBL``(vj;;ay>hVPS>|DJBs+Ri)0VwaxnaW zglA)@eMC#^vtV!v5WA22V%D>fs1_9obh&HxylpY5{J=NyRQi*s^IfQ75$Y-xHCf=) diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_gray.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_gray.png deleted file mode 100644 index 929a6095072b637a445ab8dc122209208b262619..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6354 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 DvSSw9 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_lime.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_lime.png deleted file mode 100644 index 1507d6d7956e15fe5190684a3a34df54e1db2444..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7388 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 Lid3zHX~_QoDQo#C diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_magenta.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_magenta.png deleted file mode 100644 index 809e645fb6a872106d5ffdd1a731c564bc79756a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7352 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 Ls>)PKnfU!5Wd#{H diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_orange.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_orange.png deleted file mode 100644 index ff17ff67c3f1903f27f80c44224f283c98803e23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7396 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 MtALdo6(O+y1O7G#1ONa4 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_pink.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_pink.png deleted file mode 100644 index 7009e6efc5d29ab14705578dab4f9cfbc481f759..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7732 zcmb7{WltPVw8nRFDGL-Ywz#{yyKAu)hvII<7h0@9`9pCpy128ryF+oeMT=Xp%YAV_ zz|G{GNuEq{GLz?=%r8n)T>%T@0|o#9z*16_)qdMU-a--$2bdcWhtz zz-1opsoj`8#;W4;&yIgx-M~Y)pI!nE&Rn#Ev9DjYExS&57}ig!Vs-<*X2qZV3OBD3 zaPoX;nM?aTcvG|ca+!}aBk4*-iRuNbQ50sN(RxuG(#`vw? zF|GFcR)vQIG_}X?Tm@iF`AEI^5(WJTdX+m*?5G-&=&NnF?91qUqMq*ry0;|^;idO9*|b)UaP?aK+Mhhdvv8yB zET7c}{gbganv|j;v+3EVGKG5$)0bhI%$=Ip>98f!8jDZEEGgE$`%k~h6ct6!+WwGk z#t(`-Pp0(b>kgZ>oBwsx%z5}=F@ImtcscH|-!gLXEt=S>6BR5w_Q_Cn%xcq)YhiJl zhDqs1Uri#|dM_?k3B{tqu5L(|I~}xr*_Lr*Y{!N{XX+E<4L9rIfgrqI1j|s!dbeLBqSG;D$DasAwg`dJ7$;JmQNJA1w=L+tJ1B$q$O^ThljI|x- z=umGH76jBM~w=VMoF*S0tvI|sOhr!&rt@J2S!gkXlr@6L$Z zKdP8;$!$k7{1-pJa<#^v7K-R<%6=R}lKmyphIk!qvX}%=?w`cbx)v&7>7sKblVpLy zVYBxUYUgXaeR7U2B!B7$4yl!weD~42?aUW=nfA76{Mxl^|0|ut!1Vs` z(wt4$e+VM6tp~Z6K$S^bwxD*NP(l^m71q{Ci>n7&x$HT*a&*qoFJlIYU(8gBdTU_z z1>E2YZ$reVEPjv|Pp#fmr=@dS&j%f)-w6wca;`Ety=2F35bL_~171dl6I-Lqq*gh$ zx~6gY(!u#I)s;b-MCdIK13n@4J3FDpek?~pWOqR=5k9oxrWzD~Fk3OhY9&Ta4@R(>6+sMl=n>N+t;HF1bqLisgY9>S7{?qN%jfU?cgj(Ew(xB|dE~kN z-Eh(+8Wl~cvd3z6MgsX_3`E24Rt&EVT{jbIH~nfTa<#ATzR}2(pkKenX61T)ja54R z{o(wJnax}X%N8N?pfIVjWm5;^9W}z_{IsR6rSD&`qtklu%0{lB z&oW?I^@ie>pY+w2Jb$PG8>fxC=ErJsVrf_pJ8hLrXE^&GM}mTeIHcr-S`>S)%kTZP z9R5J21`FYrpX=WX!z=(tp;HJT)t=lCWMIi;o54zY=sYeM0-5_%Y#{{5@T2Y`zM@$w zmKv^Djq5U@w=XZnvEy`8!FgZb{Q1Tt{8HRGT;YXb#Tg9a-9G6R5q-rdf{-LB%jIe0I;+ z>?}4xP1hmm&)^U(@RD6f&^bo>*6MxQTHP3{+TZhPG?xJpJ55UthR{uiO zWzQ}_D(m<|{9ib24Y&jYEuYaqO=+*$FqKM=$`mufO5zYLphDfEoKVMyKBeXCKjFLX zOumzmqU0Lv@eJpp3Y=)MbsIYY2M=o;G=~`R@5XA8Y?&?jbw6XAjP&S#E&B*8wg6w3 zd9|xz4jsB!q@6tC)WW#=CVv|bA-)hC6LcplStHc|jE$xuJ(XWX=MZ)bmq)3BR8YDfdB0CLm~Q5>W8z%oSQm$WX@6Jn z_^$GY?}xO$Uy5v;Y00FahV5q69diiAh&{6-nbU)(=dsk}xm9`62PEACWxsiwTMiPw zmDD&yb{L{hYie$XlP(e_>2=cZ(G*Ha)MCPecDePWl1=yZ#86MQr0@ zMMlyQb&S;b14)Pu4hN>}CYNlpamc-yTX>JT0UHjDu)c-)c&ctB0meuH7%?HRe%f