diff --git a/mods/ENTITIES/mcl_mobs/combat.lua b/mods/ENTITIES/mcl_mobs/combat.lua index f39760fab..4bbfcd119 100644 --- a/mods/ENTITIES/mcl_mobs/combat.lua +++ b/mods/ENTITIES/mcl_mobs/combat.lua @@ -958,6 +958,7 @@ function mob_class:do_states_attack (dtime) if self.v_start then self.timer = self.timer + dtime self.blinktimer = (self.blinktimer or 0) + dtime + self:set_animation("fuse") if self.blinktimer > 0.2 then self.blinktimer = 0 diff --git a/mods/ENTITIES/mcl_mobs/init.lua b/mods/ENTITIES/mcl_mobs/init.lua index 65272eebf..2b18a6775 100644 --- a/mods/ENTITIES/mcl_mobs/init.lua +++ b/mods/ENTITIES/mcl_mobs/init.lua @@ -314,6 +314,7 @@ function mcl_mobs.register_mob(name, def) return self:mob_activate(staticdata, def, dtime) end, + after_activate = def.after_activate, attack_state = def.attack_state, -- custom attack state on_attack = def.on_attack, -- called after attack, useful with otherwise predefined attack states (not custom) harmed_by_heal = def.harmed_by_heal, diff --git a/mods/ENTITIES/mobs_mc/README.md b/mods/ENTITIES/mobs_mc/README.md index bdc561295..db5663abb 100644 --- a/mods/ENTITIES/mobs_mc/README.md +++ b/mods/ENTITIES/mobs_mc/README.md @@ -33,11 +33,11 @@ This mod adds mobs which closely resemble the mobs from the game Minecraft, vers * Husk * Skeleton * Stray -* Creeper +* Stalker * Slime * Spider * Cave Spider -* Enderman +* Rover * Zombie Villager * Zombie Piglin * Wither Skeleton diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr index 84aade90e..d807cfa32 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr @@ -5,7 +5,7 @@ Blaze=Lohe Chicken=Huhn Cow=Kuh Mooshroom=Pilzkuh -Creeper=Creeper +Stalker=Stalker Ender Dragon=Enderdrache Enderman=Enderman Endermite=Endermilbe diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.dk.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.dk.tr index 5df92f2f8..c125411eb 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.dk.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.dk.tr @@ -6,7 +6,7 @@ Blaze=Blaze Chicken=Kylling Cow=Ko Mooshroom=Svamp -Creeper=Creeper +Stalker=Stalker Ender Dragon=Enderdrage Enderman=Enderman Endermite=Endermide @@ -67,4 +67,4 @@ Cod=Torsk Salmon=Laks Dolphin=Delfin Pillager=Plyndrer -Tropical fish=Tropisk fisk \ No newline at end of file +Tropical fish=Tropisk fisk diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr index 47e19cc42..44b6e1ef5 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr @@ -5,7 +5,7 @@ Chicken=Pollo Cod=Bacalao Cow=Vaca Mooshroom=Champivaca -Creeper=Creeper +Stalker=Stalker Dolphin=Delfín Ender Dragon=Ender Dragon Enderman=Enderman diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr index 2c71ff47e..94b99bd49 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr @@ -6,7 +6,7 @@ Blaze=Blaze Chicken=Poulet Cow=Vache Mooshroom=Champimeuh -Creeper=Creeper +Stalker=Stalker Ender Dragon=Ender Dragon Enderman=Enderman Endermite=Endermite diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.oc.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.oc.tr index ad81ec88c..aabbe2d63 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.oc.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.oc.tr @@ -6,7 +6,7 @@ Blaze=Flamor Chicken=Polet Cow=Vacha Mooshroom=Vachairòla -Creeper=Creeper +Stalker=Stalker Ender Dragon=Dragon de Finuèit Enderman=Finuèairi Endermite=Finuèibau diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.pt_BR.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.pt_BR.tr index a20d703a8..aa68482c7 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.pt_BR.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.pt_BR.tr @@ -6,7 +6,7 @@ Blaze=Blaze Chicken=Galinha Cow=Vaca Mooshroom=Coguvaca -Creeper=Creeper +Stalker=Stalker Ender Dragon=Dragão do Fim Enderman=Enderman Endermite=Endermite diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr index 3a1af1dde..d5ee3b187 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr @@ -6,7 +6,7 @@ Blaze=Ифрит Chicken=Курица Cow=Корова Mooshroom=Грибная корова -Creeper=Крипер +Stalker=Сталкер Ender Dragon=Дракон Края Enderman=Эндермен Endermite=Эндермит diff --git a/mods/ENTITIES/mobs_mc/locale/template.txt b/mods/ENTITIES/mobs_mc/locale/template.txt index b783681ee..c81e13e41 100644 --- a/mods/ENTITIES/mobs_mc/locale/template.txt +++ b/mods/ENTITIES/mobs_mc/locale/template.txt @@ -6,7 +6,7 @@ Blaze= Chicken= Cow= Mooshroom= -Creeper= +Stalker= Ender Dragon= Enderman= Endermite= diff --git a/mods/ENTITIES/mobs_mc/models/vl_rover.b3d b/mods/ENTITIES/mobs_mc/models/vl_rover.b3d new file mode 100644 index 000000000..9d9a2809e Binary files /dev/null and b/mods/ENTITIES/mobs_mc/models/vl_rover.b3d differ diff --git a/mods/ENTITIES/mobs_mc/models/vl_stalker.b3d b/mods/ENTITIES/mobs_mc/models/vl_stalker.b3d new file mode 100644 index 000000000..c47edf5b2 Binary files /dev/null and b/mods/ENTITIES/mobs_mc/models/vl_stalker.b3d differ diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/rover.lua similarity index 75% rename from mods/ENTITIES/mobs_mc/enderman.lua rename to mods/ENTITIES/mobs_mc/rover.lua index d3ce1e5cc..272c22617 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/rover.lua @@ -31,20 +31,9 @@ local place_frequency_min = 235 local place_frequency_max = 245 minetest.register_entity("mobs_mc:ender_eyes", { - visual = "mesh", - mesh = "mobs_mc_spider.b3d", - visual_size = {x=1.01/3, y=1.01/3}, - textures = { - "mobs_mc_enderman_eyes.png", - }, on_step = function(self) - if self and self.object then - if not self.object:get_attach() then - self.object:remove() - end - end + self.object:remove() end, - glow = 50, }) local S = minetest.get_translator("mobs_mc") @@ -66,142 +55,8 @@ end local pr = PseudoRandom(os.time()*(-334)) --- Texuture overrides for enderman block. Required for cactus because it's original is a nodebox --- and the textures have tranparent pixels. -local block_texture_overrides -do - local cbackground = "mobs_mc_enderman_cactus_background.png" - local ctiles = minetest.registered_nodes["mcl_core:cactus"].tiles - - local ctable = {} - local last - for i=1, 6 do - if ctiles[i] then - last = ctiles[i] - end - table.insert(ctable, cbackground .. "^" .. last) - end - - 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)"} - } -end - --- Create the textures table for the enderman, depending on which kind of block --- the enderman holds (if any). -local create_enderman_textures = function(block_type, itemstring) - local base = "mobs_mc_enderman.png^mobs_mc_enderman_eyes.png" - - --[[ Order of the textures in the texture table: - Flower, 90 degrees - Flower, 45 degrees - Held block, backside - Held block, bottom - Held block, front - Held block, left - Held block, right - Held block, top - Enderman texture (base) - ]] - -- Regular cube - if block_type == "cube" then - local tiles = minetest.registered_nodes[itemstring].tiles - local textures = {} - local last - if block_texture_overrides[itemstring] then - -- Texture override available? Use these instead! - textures = block_texture_overrides[itemstring] - else - -- Extract the texture names - for i = 1, 6 do - if type(tiles[i]) == "string" then - last = tiles[i] - elseif type(tiles[i]) == "table" then - if tiles[i].name then - last = tiles[i].name - end - end - table.insert(textures, last) - end - end - return { - "blank.png", - "blank.png", - textures[5], - textures[2], - textures[6], - textures[3], - textures[4], - textures[1], - base, -- Enderman texture - } - -- Node of plantlike drawtype, 45° (recommended) - elseif block_type == "plantlike45" then - local textures = minetest.registered_nodes[itemstring].tiles - return { - "blank.png", - textures[1], - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - base, - } - -- Node of plantlike drawtype, 90° - elseif block_type == "plantlike90" then - local textures = minetest.registered_nodes[itemstring].tiles - return { - textures[1], - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - base, - } - elseif block_type == "unknown" then - return { - "blank.png", - "blank.png", - "unknown_node.png", - "unknown_node.png", - "unknown_node.png", - "unknown_node.png", - "unknown_node.png", - "unknown_node.png", - base, -- Enderman texture - } - -- No block held (for initial texture) - elseif block_type == "nothing" or block_type == nil then - return { - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - "blank.png", - base, -- Enderman texture - } - end -end - -- Select a new animation definition. -local select_enderman_animation = function(animation_type) +local select_rover_animation = function(animation_type) -- Enderman holds a block if animation_type == "block" then return { @@ -254,8 +109,8 @@ local psdefs = {{ texture = "mcl_portals_particle"..math.random(1, 5)..".png", }} -mcl_mobs.register_mob("mobs_mc:enderman", { - description = S("Enderman"), +mcl_mobs.register_mob("mobs_mc:rover", { + description = S("Rover"), type = "monster", spawn_class = "passive", can_despawn = true, @@ -267,23 +122,11 @@ mcl_mobs.register_mob("mobs_mc:enderman", { xp_max = 5, 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}, + mesh = "vl_rover.b3d", + textures = { "vl_mobs_rover.png^vl_mobs_rover_face.png" }, + glow = 100, + visual_size = {x=10, y=10}, makes_footstep_sound = true, - on_spawn = function(self) - local spider_eyes=false - for n = 1, #self.object:get_children() do - local obj = self.object:get_children()[n] - if obj:get_luaentity() and self.object:get_luaentity().name == "mobs_mc:ender_eyes" then - spider_eyes = true - end - end - if not spider_eyes then - minetest.add_entity(self.object:get_pos(), "mobs_mc:ender_eyes"):set_attach(self.object, "head.top", vector.new(0,2.54,-1.99), vector.new(90,0,180)) - minetest.add_entity(self.object:get_pos(), "mobs_mc:ender_eyes"):set_attach(self.object, "head.top", vector.new(1,2.54,-1.99), vector.new(90,0,180)) - end - end, sounds = { -- TODO: Custom war cry sound war_cry = "mobs_sandmonster", @@ -292,8 +135,8 @@ mcl_mobs.register_mob("mobs_mc:enderman", { random = {name="mobs_mc_enderman_random", gain=0.5}, distance = 16, }, - walk_velocity = 0.2, - run_velocity = 3.4, + walk_velocity = 2, + run_velocity = 4, damage = 7, reach = 2, particlespawners = psdefs, @@ -304,7 +147,7 @@ mcl_mobs.register_mob("mobs_mc:enderman", { max = 1, looting = "common"}, }, - animation = select_enderman_animation("normal"), + animation = select_rover_animation("normal"), _taken_node = "", can_spawn = function(pos) return #minetest.find_nodes_in_area(vector.offset(pos,0,1,0),vector.offset(pos,0,3,0),{"air"}) > 2 @@ -348,6 +191,7 @@ mcl_mobs.register_mob("mobs_mc:enderman", { -- AGRESSIVELY WARP/CHASE PLAYER BEHAVIOUR HERE. if self.state == "attack" then + self.object:set_properties({textures={"vl_mobs_rover.png^vl_mobs_rover_face_angry.png"}}) if self.attack then local target = self.attack local pos = target:get_pos() @@ -358,6 +202,7 @@ mcl_mobs.register_mob("mobs_mc:enderman", { end end else --if not attacking try to tp to the dark + self.object:set_properties({textures={"vl_mobs_rover.png^vl_mobs_rover_face.png"}}) if dim == 'overworld' then local light = minetest.get_node_light(enderpos) if light and light > minetest.LIGHT_MAX then @@ -489,38 +334,17 @@ mcl_mobs.register_mob("mobs_mc:enderman", { minetest.remove_node(take_pos) local dug = minetest.get_node_or_nil(take_pos) if dug and dug.name == "air" then - self._taken_node = node.name - self.persistent = true - local def = minetest.registered_nodes[self._taken_node] - -- Update animation and texture accordingly (adds visibly carried block) - local block_type - -- Cube-shaped - if def.drawtype == "normal" or - def.drawtype == "nodebox" or - def.drawtype == "liquid" or - def.drawtype == "flowingliquid" or - def.drawtype == "glasslike" or - def.drawtype == "glasslike_framed" or - def.drawtype == "glasslike_framed_optional" or - def.drawtype == "allfaces" or - def.drawtype == "allfaces_optional" or - def.drawtype == nil then - block_type = "cube" - elseif def.drawtype == "plantlike" then - -- Flowers and stuff - block_type = "plantlike45" - elseif def.drawtype == "airlike" then - -- Just air - block_type = nil - else - -- Fallback for complex drawtypes - block_type = "unknown" + local node_obj = vl_held_item.create_item_entity(take_pos, node.name) + if node_obj then + node_obj:set_attach(self.object, "held_node") + self._node_obj = node_obj + self._taken_node = node.name + node_obj:set_properties({visual_size={x=0.02, y=0.02}}) end - 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") + local def = minetest.registered_nodes[self._taken_node] + self.animation = select_rover_animation("block") self:set_animation(self.animation.current) - if def.sounds and def.sounds.dug then + if def and def.sounds and def.sounds.dug then minetest.sound_play(def.sounds.dug, {pos = take_pos, max_hear_distance = 16}, true) end end @@ -542,12 +366,14 @@ mcl_mobs.register_mob("mobs_mc:enderman", { local def = minetest.registered_nodes[self._taken_node] -- Update animation accordingly (removes visible block) self.persistent = false - self.animation = select_enderman_animation("normal") + self.animation = select_rover_animation("normal") self:set_animation(self.animation.current) - if def.sounds and def.sounds.place then + if def and def.sounds and def.sounds.place then minetest.sound_play(def.sounds.place, {pos = place_pos, max_hear_distance = 16}, true) end - self._taken_node = "" + self._node_obj:remove() + self._node_obj = nil + self._taken_node = nil end end end @@ -645,6 +471,21 @@ mcl_mobs.register_mob("mobs_mc:enderman", { --end end end, + after_activate = function(self, staticdata, def, dtime) + if not self._taken_node or self._taken_node == "" then + self.animation = select_rover_animation("normal") + self:set_animation(self.animation.current) + return + end + self.animation = select_rover_animation("block") + self:set_animation(self.animation.current) + local node_obj = vl_held_item.create_item_entity(self.object:get_pos(), self._taken_node) + if node_obj then + node_obj:set_attach(self.object, "held_node") + self._node_obj = node_obj + node_obj:set_properties({visual_size={x=0.02, y=0.02}}) + end + end, armor = { fleshy = 100, water_vulnerable = 100 }, water_damage = 8, view_range = 64, @@ -652,9 +493,22 @@ mcl_mobs.register_mob("mobs_mc:enderman", { attack_type = "dogfight", }) +-- compat +minetest.register_entity("mobs_mc:enderman", { + on_activate = function(self, staticdata, dtime) + minetest.add_entity(self.object:get_pos(), "mobs_mc:rover", staticdata) + obj:set_properties({ + mesh = "vl_rover.b3d", + textures = { "vl_mobs_rover.png^vl_mobs_rover_face.png" }, + visual_size = {x=10, y=10}, + }) + self.object:remove() + end, +}) + -- End spawn mcl_mobs:spawn_specific( -"mobs_mc:enderman", +"mobs_mc:rover", "end", "ground", { @@ -674,7 +528,7 @@ mcl_vars.mg_end_min, mcl_vars.mg_end_max) -- Overworld spawn mcl_mobs:spawn_specific( -"mobs_mc:enderman", +"mobs_mc:rover", "overworld", "ground", { @@ -823,7 +677,7 @@ mcl_vars.mg_overworld_max) -- Nether spawn (rare) mcl_mobs:spawn_specific( -"mobs_mc:enderman", +"mobs_mc:rover", "nether", "ground", { @@ -840,7 +694,7 @@ mcl_vars.mg_nether_max) -- Warped Forest spawn (common) mcl_mobs:spawn_specific( -"mobs_mc:enderman", +"mobs_mc:rover", "nether", "ground", { @@ -855,4 +709,5 @@ mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) -- spawn eggs -mcl_mobs.register_egg("mobs_mc:enderman", S("Enderman"), "#252525", "#151515", 0) +mcl_mobs.register_egg("mobs_mc:rover", S("Rover"), "#252525", "#151515", 0) +minetest.register_alias("mobs_mc:enderman", "mobs_mc:rover") diff --git a/mods/ENTITIES/mobs_mc/skeleton+stray.lua b/mods/ENTITIES/mobs_mc/skeleton+stray.lua index 274c8aee4..f41d57fd3 100644 --- a/mods/ENTITIES/mobs_mc/skeleton+stray.lua +++ b/mods/ENTITIES/mobs_mc/skeleton+stray.lua @@ -73,7 +73,7 @@ local skeleton = { looting = "common",}, -- Head - -- TODO: Only drop if killed by charged creeper + -- TODO: Only drop if killed by charged stalker {name = "mcl_heads:skeleton", chance = 200, -- 0.5% chance min = 1, diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/stalker.lua similarity index 71% rename from mods/ENTITIES/mobs_mc/creeper.lua rename to mods/ENTITIES/mobs_mc/stalker.lua index 2c95407c8..0c9655006 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/stalker.lua @@ -3,14 +3,59 @@ local S = minetest.get_translator("mobs_mc") --################### ---################### CREEPER +--################### STALKER --################### +local function get_texture(self) + local on_name = self.standing_on + local texture + local texture_suff = "" + if on_name and on_name ~= "air" then + local tiles = minetest.registered_nodes[on_name].tiles + if tiles then + local tile = tiles[1] + local color + if type(tile) == "table" then + texture = tile.name or tile.image + if tile.color then + color = minetest.colorspec_to_colorstring(tile.color) + end + elseif type(tile) == "string" then + texture = tile + end + if not color then + color = minetest.colorspec_to_colorstring(minetest.registered_nodes[on_name].color) + end + if color then + texture_suff = "^[multiply:" .. color .. "^[hsl:0:0:20" + end + end + end + if not texture then + texture = "vl_stalker_default.png" + end + texture = "([combine:16x24:0,0=" .. texture .. ":0,16=" .. texture .. texture_suff + if self.attack then + texture = texture .. ")^vl_mobs_stalker_overlay_angry.png" + else + texture = texture .. ")^vl_mobs_stalker_overlay.png" + end + return texture +end + +local AURA = "vl_stalker_overloaded_aura.png" +local function get_overloaded_aura(timer) + local frame = math.floor(timer*16) + local f = tostring(frame) + local nf = tostring(16-f) + return "[combine:16x24:-" .. nf ..",0=" .. AURA .. ":" .. f .. ",0=" .. AURA +end -mcl_mobs.register_mob("mobs_mc:creeper", { - description = S("Creeper"), + +mcl_mobs.register_mob("mobs_mc:stalker", { + description = S("Stalker"), type = "monster", spawn_class = "hostile", spawn_in_group = 1, @@ -21,16 +66,16 @@ mcl_mobs.register_mob("mobs_mc:creeper", { collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3}, pathfinding = 1, visual = "mesh", - mesh = "mobs_mc_creeper.b3d", - head_swivel = "Head_Control", + mesh = "vl_stalker.b3d", +-- head_swivel = "Head_Control", bone_eye_height = 2.35, head_eye_height = 1.8; curiosity = 2, textures = { - {"mobs_mc_creeper.png", + {get_texture({}), "mobs_mc_empty.png"}, }, - visual_size = {x=3, y=3}, + visual_size = {x=2, y=2}, sounds = { attack = "tnt_ignite", death = "mobs_mc_creeper_death", @@ -56,8 +101,8 @@ mcl_mobs.register_mob("mobs_mc:creeper", { allow_fuse_reset = true, stop_to_explode = true, - -- Force-ignite creeper with flint and steel and explode after 1.5 seconds. - -- TODO: Make creeper flash after doing this as well. + -- Force-ignite stalker with flint and steel and explode after 1.5 seconds. + -- TODO: Make stalker flash after doing this as well. -- TODO: Test and debug this code. on_rightclick = function(self, clicker) if self._forced_explosion_countdown_timer ~= nil then @@ -86,6 +131,7 @@ mcl_mobs.register_mob("mobs_mc:creeper", { self:boom(mcl_util.get_object_center(self.object), self.explosion_strength) end end + self.object:set_properties({textures={get_texture(self)}}) end, on_die = function(self, pos, cmi_cause) -- Drop a random music disc when killed by skeleton or stray @@ -108,35 +154,31 @@ mcl_mobs.register_mob("mobs_mc:creeper", { looting = "common",}, -- Head - -- TODO: Only drop if killed by charged creeper - {name = "mcl_heads:creeper", + -- TODO: Only drop if killed by charged stalker + {name = "mcl_heads:stalker", chance = 200, -- 0.5% min = 1, max = 1,}, }, animation = { - speed_normal = 24, - speed_run = 48, + speed_normal = 30, + speed_run = 60, stand_start = 0, stand_end = 23, walk_start = 24, walk_end = 49, run_start = 24, run_end = 49, - hurt_start = 110, - hurt_end = 139, - death_start = 140, - death_end = 189, - look_start = 50, - look_end = 108, + fuse_start = 49, + fuse_end = 80, }, floats = 1, fear_height = 4, view_range = 16, }) -mcl_mobs.register_mob("mobs_mc:creeper_charged", { - description = S("Charged Creeper"), +mcl_mobs.register_mob("mobs_mc:stalker_overloaded", { + description = S("Overloaded Stalker"), type = "monster", spawn_class = "hostile", hp_min = 20, @@ -146,15 +188,16 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", { collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3}, pathfinding = 1, visual = "mesh", - mesh = "mobs_mc_creeper.b3d", + mesh = "vl_stalker.b3d", --BOOM textures = { - {"mobs_mc_creeper.png", - "mobs_mc_creeper_charge.png"}, + {get_texture({}), + AURA}, }, - visual_size = {x=3, y=3}, + use_texture_alpha = true, + visual_size = {x=2, y=2}, sounds = { attack = "tnt_ignite", death = "mobs_mc_creeper_death", @@ -178,8 +221,8 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", { allow_fuse_reset = true, stop_to_explode = true, - -- Force-ignite creeper with flint and steel and explode after 1.5 seconds. - -- TODO: Make creeper flash after doing this as well. + -- Force-ignite stalker with flint and steel and explode after 1.5 seconds. + -- TODO: Make stalker flash after doing this as well. -- TODO: Test and debug this code. on_rightclick = function(self, clicker) if self._forced_explosion_countdown_timer ~= nil then @@ -208,6 +251,9 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", { self:boom(mcl_util.get_object_center(self.object), self.explosion_strength) end end + if not self._aura_timer or self._aura_timer > 1 then self._aura_timer = 0 end + self._aura_timer = self._aura_timer + dtime + self.object:set_properties({textures={get_texture(self), get_overloaded_aura(self._aura_timer)}}) end, on_die = function(self, pos, cmi_cause) -- Drop a random music disc when killed by skeleton or stray @@ -222,7 +268,7 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", { end end, on_lightning_strike = function(self, pos, pos2, objects) - mcl_util.replace_mob(self.object, "mobs_mc:creeper_charged") + mcl_util.replace_mob(self.object, "mobs_mc:stalker_overloaded") return true end, maxdrops = 2, @@ -234,27 +280,23 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", { looting = "common",}, -- Head - -- TODO: Only drop if killed by charged creeper - {name = "mcl_heads:creeper", + -- TODO: Only drop if killed by overloaded stalker + {name = "mcl_heads:stalker", chance = 200, -- 0.5% min = 1, max = 1,}, }, animation = { - speed_normal = 24, - speed_run = 48, + speed_normal = 30, + speed_run = 60, stand_start = 0, stand_end = 23, walk_start = 24, walk_end = 49, run_start = 24, run_end = 49, - hurt_start = 110, - hurt_end = 139, - death_start = 140, - death_end = 189, - look_start = 50, - look_end = 108, + fuse_start = 49, + fuse_end = 80, }, floats = 1, fear_height = 4, @@ -264,8 +306,38 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", { glow = 3, }) +-- compat +minetest.register_entity("mobs_mc:creeper", { + on_activate = function(self, staticdata, dtime) + local obj = minetest.add_entity(self.object:get_pos(), "mobs_mc:stalker", staticdata) + obj:set_properties({ + visual_size = {x=2, y=2}, + mesh = "vl_stalker.b3d", + textures = { + {get_texture({}), + "mobs_mc_empty.png"}, + }, + }) + self.object:remove() + end, +}) +minetest.register_entity("mobs_mc:creeper_charged", { + on_activate = function(self, staticdata, dtime) + local obj = minetest.add_entity(self.object:get_pos(), "mobs_mc:stalker_overloaded", staticdata) + obj:set_properties({ + visual_size = {x=2, y=2}, + mesh = "vl_stalker.b3d", + textures = { + {get_texture({}), + AURA}, + }, + }) + self.object:remove() + end, +}) + mcl_mobs:spawn_specific( -"mobs_mc:creeper", +"mobs_mc:stalker", "overworld", "ground", { @@ -413,4 +485,6 @@ mcl_vars.mg_overworld_min, mcl_vars.mg_overworld_max) -- spawn eggs -mcl_mobs.register_egg("mobs_mc:creeper", S("Creeper"), "#0da70a", "#000000", 0) +mcl_mobs.register_egg("mobs_mc:stalker", S("Stalker"), "#0da70a", "#000000", 0) +minetest.register_alias("mobs_mc:creeper", "mobs_mc:stalker") +mcl_mobs.register_egg("mobs_mc:stalker_overloaded", S("Overloaded Stalker"), "#00a77a", "#000000", 0) diff --git a/mods/ENTITIES/mobs_mc/zombie.lua b/mods/ENTITIES/mobs_mc/zombie.lua index cf2001f9b..2f6d7e79f 100644 --- a/mods/ENTITIES/mobs_mc/zombie.lua +++ b/mods/ENTITIES/mobs_mc/zombie.lua @@ -38,7 +38,7 @@ local drops_common = { local drops_zombie = table.copy(drops_common) table.insert(drops_zombie, { -- Zombie Head - -- TODO: Only drop if killed by charged creeper + -- TODO: Only drop if killed by charged stalker name = "mcl_heads:zombie", chance = 200, -- 0.5% min = 1, diff --git a/mods/ENTITIES/vl_held_item/init.lua b/mods/ENTITIES/vl_held_item/init.lua new file mode 100644 index 000000000..f64ad9928 --- /dev/null +++ b/mods/ENTITIES/vl_held_item/init.lua @@ -0,0 +1,40 @@ +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +vl_held_item = {} +local mod = vl_held_item + +local held_item_entity = { + initial_properties = { + hp_max = 1, + physical = true, + pointable = false, + collide_with_objects = true, + static_save = false, -- TODO remove/change later when needed to persist + -- WARNING persisting held items not recommended, mob can recreate it after_activate + collision_box = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, + }, + visual = "wielditem", + textures = { "mcl_core:dirt_with_grass" }, +} +function held_item_entity:on_activate(staticdata, dtime_unloaded) + local staticdata = minetest.deserialize(staticdata) + self._staticdata = staticdata + + local props = { + visual = "wielditem", + textures = { staticdata.itemname }, + } + self.object:set_properties(props) +end +function held_item_entity:get_staticdata() + return minetest.serialize(self._staticdata) +end +minetest.register_entity("vl_held_item:held_item_entity", held_item_entity) + +function mod.create_item_entity(pos, itemname) + local staticdata = { + itemname = itemname + } + return minetest.add_entity(pos, "vl_held_item:held_item_entity", minetest.serialize(staticdata)) +end + diff --git a/mods/ENTITIES/vl_held_item/mod.conf b/mods/ENTITIES/vl_held_item/mod.conf new file mode 100644 index 000000000..c5068855f --- /dev/null +++ b/mods/ENTITIES/vl_held_item/mod.conf @@ -0,0 +1,4 @@ +name = vl_held_item +author = teknomunk, Herowl +description = An entity that represents an item held by a mob +depends = mcl_core diff --git a/mods/HELP/mcl_item_id/init.lua b/mods/HELP/mcl_item_id/init.lua index 659edf04a..6172e4f67 100644 --- a/mods/HELP/mcl_item_id/init.lua +++ b/mods/HELP/mcl_item_id/init.lua @@ -21,7 +21,7 @@ end local same_id = { enchanting = { "table" }, experience = { "bottle" }, - heads = { "skeleton", "zombie", "creeper", "wither_skeleton" }, + heads = { "skeleton", "zombie", "stalker", "wither_skeleton" }, mobitems = { "rabbit", "chicken" }, walls = { "andesite", "brick", "cobble", "diorite", "endbricks", diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.de.tr b/mods/HELP/mcl_tt/locale/mcl_tt.de.tr index eccfbfade..5cc402167 100644 --- a/mods/HELP/mcl_tt/locale/mcl_tt.de.tr +++ b/mods/HELP/mcl_tt/locale/mcl_tt.de.tr @@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Wächst auf Grasblöcken, Pod Flammable=Entzündlich Zombie view range: -50%=Zombiesichtweite: -50% Skeleton view range: -50%=Skelettsichtweite: -50% -Creeper view range: -50%=Creepersichtweite: -50% +Stalker view range: -50%=Stalkersichtweite: -50% Damage: @1=Schaden: @1 Damage (@1): @2=Schaden (@1): @2 Healing: @1=Heilung: @1 diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.es.tr b/mods/HELP/mcl_tt/locale/mcl_tt.es.tr index 17c9c8651..b845c4102 100644 --- a/mods/HELP/mcl_tt/locale/mcl_tt.es.tr +++ b/mods/HELP/mcl_tt/locale/mcl_tt.es.tr @@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Crece sobre bloques de pasto, Flammable=Inflamable Zombie view range: -50%=Rango de visión zombie: -50% Skeleton view range: -50%=Rango de visión de esqueleto: -50% -Creeper view range: -50%=Rango de visión de creeper: -50% +Stalker view range: -50%=Rango de visión de stalker: -50% Damage: @1=Daño: @1 Damage (@1): @2=Daño (@1): @2 Healing: @1=Curación: @1 diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.fr.tr b/mods/HELP/mcl_tt/locale/mcl_tt.fr.tr index 4311e9b3e..1202581e9 100644 --- a/mods/HELP/mcl_tt/locale/mcl_tt.fr.tr +++ b/mods/HELP/mcl_tt/locale/mcl_tt.fr.tr @@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Pousse sur les blocs de gazon Flammable=Inflammable Zombie view range: -50%=Distance de vue de Zombie : -50% Skeleton view range: -50%=Distance de vue de Squelette : -50% -Creeper view range: -50%=Distance de vue de Creeper : -50% +Stalker view range: -50%=Distance de vue de Stalker : -50% Damage: @1=Dégâts : @1 Damage (@1): @2=Dégâts (@1) : @2 Healing: @1=Guérison : @1 diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.pl.tr b/mods/HELP/mcl_tt/locale/mcl_tt.pl.tr index 71e1b13a4..7eb8f4c77 100644 --- a/mods/HELP/mcl_tt/locale/mcl_tt.pl.tr +++ b/mods/HELP/mcl_tt/locale/mcl_tt.pl.tr @@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Rośnie na blokach trawy, bie Flammable=Łatwopalne Zombie view range: -50%=Zasięg widzenia zombie: -50% Skeleton view range: -50%=Zasięg widzenia szkieleta: -50% -Creeper view range: -50%=Zasięg widzenia creepera: -50% +Stalker view range: -50%=Zasięg widzenia stalkera: -50% Damage: @1=Obrażenia: @1 Damage (@1): @2=Obrażenia (@1): @2 Healing: @1=Leczenie: @1 diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.pt_BR.tr b/mods/HELP/mcl_tt/locale/mcl_tt.pt_BR.tr index 5fee59f2f..c97eb4176 100644 --- a/mods/HELP/mcl_tt/locale/mcl_tt.pt_BR.tr +++ b/mods/HELP/mcl_tt/locale/mcl_tt.pt_BR.tr @@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Cresce em blocos de grama, po Flammable=Inflamável Zombie view range: -50%=Alcançe de visão do zumbi: -50% Skeleton view range: -50%=Alcançe de visão do esqueleto: -50% -Creeper view range: -50%=Alcançe de visão do creeper: -50% +Stalker view range: -50%=Alcançe de visão do stalker: -50% Damage: @1= Dano: @1 Damage (@1): @2=Dano (@1): @2 Healing: @1=Cura: @1 diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.ru.tr b/mods/HELP/mcl_tt/locale/mcl_tt.ru.tr index fd9b9b37c..9e0487b5a 100644 --- a/mods/HELP/mcl_tt/locale/mcl_tt.ru.tr +++ b/mods/HELP/mcl_tt/locale/mcl_tt.ru.tr @@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt=Растёт на дёрне, Flammable=Воспламенимо Zombie view range: -50%=Дальность зрения зомби: -50% Skeleton view range: -50%=Дальность зрения скелета: -50% -Creeper view range: -50%=Дальность зрения крипера: -50% +Stalker view range: -50%=Дальность зрения сталкера: -50% Damage: @1=Урон: @1 Damage (@1): @2=Урон (@1): @2 Durability: @1=Прочность: @1 diff --git a/mods/HELP/mcl_tt/locale/template.txt b/mods/HELP/mcl_tt/locale/template.txt index 0acb7b599..3e3b4d300 100644 --- a/mods/HELP/mcl_tt/locale/template.txt +++ b/mods/HELP/mcl_tt/locale/template.txt @@ -14,7 +14,7 @@ Grows on grass blocks, podzol, dirt or coarse dirt= Flammable= Zombie view range: -50%= Skeleton view range: -50%= -Creeper view range: -50%= +Stalker view range: -50%= Damage: @1= Damage (@1): @2= Healing: @1= diff --git a/mods/HELP/mcl_tt/snippets_mcl.lua b/mods/HELP/mcl_tt/snippets_mcl.lua index 2066670f3..14fcc1719 100644 --- a/mods/HELP/mcl_tt/snippets_mcl.lua +++ b/mods/HELP/mcl_tt/snippets_mcl.lua @@ -108,8 +108,8 @@ tt.register_snippet(function(itemstring) return S("Zombie view range: -50%") elseif itemstring == "mcl_heads:skeleton" then return S("Skeleton view range: -50%") - elseif itemstring == "mcl_heads:creeper" then - return S("Creeper view range: -50%") + elseif itemstring == "mcl_heads:stalker" then + return S("Stalker view range: -50%") end end) diff --git a/mods/ITEMS/REDSTONE/mesecons_mvps/init.lua b/mods/ITEMS/REDSTONE/mesecons_mvps/init.lua index 9fd381b76..1d2e7820d 100644 --- a/mods/ITEMS/REDSTONE/mesecons_mvps/init.lua +++ b/mods/ITEMS/REDSTONE/mesecons_mvps/init.lua @@ -661,7 +661,7 @@ mesecon.register_mvps_unsticky("mcl_flowers:tulip_red") mesecon.register_mvps_unsticky("mcl_flowers:tulip_white") mesecon.register_mvps_unsticky("mcl_flowers:waterlily") -- Heads -mesecon.register_mvps_unsticky("mcl_heads:creeper") +mesecon.register_mvps_unsticky("mcl_heads:stalker") mesecon.register_mvps_unsticky("mcl_heads:skeleton") mesecon.register_mvps_unsticky("mcl_heads:steve") mesecon.register_mvps_unsticky("mcl_heads:wither_skeleton") diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr index 410c96687..4f2659e50 100644 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr +++ b/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr @@ -76,4 +76,4 @@ You can copy the pattern of a banner by placing two banners of the same color in And one additional layer=И один дополнительный слой And @1 additional layers=И @1 дополнительных слоёв Paintable decoration=Раскрашиваемая декорация -Preview Banner=Предпросмотр баннера \ No newline at end of file +Preview Banner=Предпросмотр баннера diff --git a/mods/ITEMS/mcl_banners/patterncraft.lua b/mods/ITEMS/mcl_banners/patterncraft.lua index 767235b1e..3beb9550d 100644 --- a/mods/ITEMS/mcl_banners/patterncraft.lua +++ b/mods/ITEMS/mcl_banners/patterncraft.lua @@ -36,7 +36,7 @@ local patterns = { ["creeper"] = { name = N("@1 Creeper Charge"), type = "shapeless", - { e, "mcl_heads:creeper", d }, + { e, "mcl_heads:stalker", d }, }, ["cross"] = { name = N("@1 Saltire"), diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua index 37e41fa6d..652819aa6 100644 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ b/mods/ITEMS/mcl_bows/arrow.lua @@ -249,7 +249,7 @@ function ARROW_ENTITY.on_step(self, dtime) end -- Punch target object but avoid hurting enderman. - if not lua or lua.name ~= "mobs_mc:enderman" then + if not lua or lua.name ~= "mobs_mc:rover" then if not self._in_player then damage_particles(vector.add(pos, vector.multiply(self.object:get_velocity(), 0.1)), self._is_critical) end diff --git a/mods/ITEMS/mcl_bows/rocket.lua b/mods/ITEMS/mcl_bows/rocket.lua index 26998bb7c..8cd690171 100644 --- a/mods/ITEMS/mcl_bows/rocket.lua +++ b/mods/ITEMS/mcl_bows/rocket.lua @@ -470,7 +470,7 @@ function ARROW_ENTITY.on_step(self, dtime) end -- Punch target object but avoid hurting enderman. - if not lua or lua.name ~= "mobs_mc:enderman" then + if not lua or lua.name ~= "mobs_mc:rover" then if self._in_player == false then damage_particles(self.object:get_pos(), self._is_critical) end diff --git a/mods/ITEMS/mcl_farming/pumpkin.lua b/mods/ITEMS/mcl_farming/pumpkin.lua index 47c2a0ddf..fe437f5cf 100644 --- a/mods/ITEMS/mcl_farming/pumpkin.lua +++ b/mods/ITEMS/mcl_farming/pumpkin.lua @@ -119,7 +119,7 @@ pumpkin_face_base_def.groups.non_combat_armor=1 pumpkin_face_base_def.groups.armor_head=1 pumpkin_face_base_def.groups.non_combat_armor_head=1 pumpkin_face_base_def._mcl_armor_mob_range_factor = 0 -pumpkin_face_base_def._mcl_armor_mob_range_mob = "mobs_mc:enderman" +pumpkin_face_base_def._mcl_armor_mob_range_mob = "mobs_mc:rover" pumpkin_face_base_def._mcl_armor_element = "head" pumpkin_face_base_def._mcl_armor_texture = "mcl_farming_pumpkin_face.png" diff --git a/mods/ITEMS/mcl_heads/init.lua b/mods/ITEMS/mcl_heads/init.lua index 69c26b97d..5409f21c4 100644 --- a/mods/ITEMS/mcl_heads/init.lua +++ b/mods/ITEMS/mcl_heads/init.lua @@ -264,11 +264,11 @@ mcl_heads.register_head{ } mcl_heads.register_head{ - name = "creeper", - texture = "mcl_heads_creeper.png", - description = S("Creeper Head"), - longdesc = S("A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%."), - range_mob = "mobs_mc:creeper", + name = "stalker", + texture = "mcl_heads_stalker.png", + description = S("Stalker Head"), + longdesc = S("A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%."), + range_mob = "mobs_mc:stalker", range_factor = 0.5, } diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.de.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.de.tr index 75e92aef9..0d829b62b 100644 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.de.tr +++ b/mods/ITEMS/mcl_heads/locale/mcl_heads.de.tr @@ -1,8 +1,8 @@ # textdomain: mcl_heads Zombie Head=Zombiekopf A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Ein Zombiekopf ist ein kleiner dekorativer Block, der so wie ein Kopf eines Zombies aussieht. Er kann auch als Helm getragen werden, was den Erkennungsradius von Zombies um 50% verringert. -Creeper Head=Creeper-Kopf -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Ein Creeperkopf ist ein kleiner dekorativer Block, der so wie ein Kopf eines Creepers aussieht. Er kann auch als Helm getragen werden, was den Erkennungsradius von Creepern um 50% verringert. +Stalker Head=Stalker-Kopf +A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=Ein Stalkerkopf ist ein kleiner dekorativer Block, der so wie ein Kopf eines Stalkers aussieht. Er kann auch als Helm getragen werden, was den Erkennungsradius von Stalkern um 50% verringert. Human Head=Menschenkopf A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Ein Menschenkopf ist ein kleiner dekorativer Block, der so wie der Kopf eines Menschen (das heißt, einer Spielerfigur) aussieht. Er kann auch als Helm zum Spaß getragen werden, aber er bietet keinerlei Schutz. Skeleton Skull=Skelettschädel diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.es.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.es.tr index 308dd8b28..3c9a2a1c1 100644 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.es.tr +++ b/mods/ITEMS/mcl_heads/locale/mcl_heads.es.tr @@ -1,8 +1,8 @@ # textdomain: mcl_heads Zombie Head=Cabeza de zombie A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de zombie es un pequeño bloque decorativo que se asemeja a la cabeza de un zombie. También se puede usar como casco por diversión, pero no ofrece ninguna protección. -Creeper Head=Cabeza de creeper -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de creeper es un pequeño bloque decorativo que se asemeja a la cabeza de un creeper. También se puede usar como casco por diversión, pero no ofrece ninguna protección. +Stalker Head=Cabeza de stalker +A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza de stalker es un pequeño bloque decorativo que se asemeja a la cabeza de un stalker. También se puede usar como casco por diversión, pero no ofrece ninguna protección. Human Head=Cabeza humana A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Una cabeza humana es un pequeño bloque decorativo que se asemeja a la cabeza de un humano (es decir, un personaje jugador). También se puede usar como casco por diversión, pero no ofrece ninguna protección. Skeleton Skull=Calavera de esqueleto diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.fr.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.fr.tr index 56436f519..dd6c20339 100644 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.fr.tr +++ b/mods/ITEMS/mcl_heads/locale/mcl_heads.fr.tr @@ -1,8 +1,8 @@ # textdomain: mcl_heads Zombie Head=Tête de Zombie A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Une tête de zombie est un petit bloc décoratif qui ressemble à la tête d'un zombie. Il peut également être porté comme un casque, ce qui réduit la plage de détection des zombies de 50%. -Creeper Head=Tête de Creeper -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Une tête de creepers est un petit bloc décoratif qui ressemble à la tête d'un creeper. Il peut également être porté comme un casque, ce qui réduit la plage de détection des creepers de 50%. +Stalker Head=Tête de Stalker +A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=Une tête de stalkers est un petit bloc décoratif qui ressemble à la tête d'un stalker. Il peut également être porté comme un casque, ce qui réduit la plage de détection des stalkers de 50%. Human Head=Tête de Joueur A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Une tête de joueur est un petit bloc décoratif qui ressemble à la tête d'un humain (c'est-à-dire un personnage de joueur). Il peut également être porté comme un casque pour le plaisir, mais n'offre aucune protection. Skeleton Skull=Crâne de Squelette diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr index 4ed4bbbee..9091f92cb 100644 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr +++ b/mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr @@ -1,8 +1,8 @@ # textdomain: mcl_heads Zombie Head=Głowa zombie A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Głowa zombie jest małym blokiem dekoracyjnym i przypomina głowę zombie. Może być noszona jako hełm co zmniejsza obszar wykrycia przez zombie o 50%. -Creeper Head=Głowa creepera -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Głowa creepera jest małym blokiem dekoracyjnym i przypomina głowę creepera. Może być noszona jako hełm co zmniejsza obszar wykrycia przez creepera o 50%. +Stalker Head=Głowa stalkera +A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=Głowa stalkera jest małym blokiem dekoracyjnym i przypomina głowę stalkera. Może być noszona jako hełm co zmniejsza obszar wykrycia przez stalkera o 50%. Human Head=Głowa człowieka A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Głowa człowieka jest małym blokiem dekoracyjnym i przypomina głowę człowieka. Może być noszona jako hełm dla zabawy, ale nie zapewnia żadnej dodatkowej ochrony. Skeleton Skull=Głowa szkieleta diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.pt_BR.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.pt_BR.tr index fb256997a..91cef7627 100644 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.pt_BR.tr +++ b/mods/ITEMS/mcl_heads/locale/mcl_heads.pt_BR.tr @@ -1,8 +1,8 @@ # textdomain: mcl_heads Zombie Head=Cabeça de Zumbi A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Uma cabeça de zumbi é um pequeno bloco decorativo ao qual remete a cabeça de um zumbi. Também pode ser usado como um capacete, o que reduz o alcançe de detecção dos zumbis em 50%. -Creeper Head=Cabeça de Creeper -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Uma cabeça de creeper é um pequeno bloco decorativo ao qual remete a cabeça de um creeper. Também pode ser usado como um capacete, o que reduz o alcançe de detecção dos creepers em 50%. +Stalker Head=Cabeça de Stalker +A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=Uma cabeça de stalker é um pequeno bloco decorativo ao qual remete a cabeça de um stalker. Também pode ser usado como um capacete, o que reduz o alcançe de detecção dos stalkers em 50%. Human Head=Cabeça Humana A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Uma cabeça de humano é um pequeno bloco decorativo ao qual remete a cabeça de um humano (ou seja, o personagem do jogador). Também pode ser usado como um capacete por diversão, mas não oferece nenhuma proteção. Skeleton Skull=Cabeça de Esqueleto diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.ru.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.ru.tr index f802ae92d..dbedbbfe0 100644 --- a/mods/ITEMS/mcl_heads/locale/mcl_heads.ru.tr +++ b/mods/ITEMS/mcl_heads/locale/mcl_heads.ru.tr @@ -1,8 +1,8 @@ # textdomain: mcl_heads Zombie Head=Голова зомби A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Голова зомби это небольшой декоративный блок, немного похожий на голову зомби. Его можно носить в качестве шлема, что уменьшит радиус обнаружения вас зомби на 50%. -Creeper Head=Голова крипера -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Голова крипера это небольшой декоративный блок, немного похожий на голову крипера. Его можно носить в качестве шлема, что уменьшит радиус обнаружения вас крипером на 50%. +Stalker Head=Голова сталкера +A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.=Голова сталкера это небольшой декоративный блок, немного похожий на голову сталкера. Его можно носить в качестве шлема, что уменьшит радиус обнаружения вас сталкером на 50%. Human Head=Голова игрока A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Голова игрока это небольшой декоративный блок, немного похожий на голову игрового персонажа. Его можно носить в качестве шлема просто для веселья, он не даёт никакой защиты. Skeleton Skull=Череп скелета diff --git a/mods/ITEMS/mcl_heads/locale/template.txt b/mods/ITEMS/mcl_heads/locale/template.txt index 59321099a..6fe2a212f 100644 --- a/mods/ITEMS/mcl_heads/locale/template.txt +++ b/mods/ITEMS/mcl_heads/locale/template.txt @@ -1,8 +1,8 @@ # textdomain: mcl_heads Zombie Head= A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.= -Creeper Head= -A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.= +Stalker Head= +A stalker head is a small decorative block which resembles the head of a stalker. It can also be worn as a helmet, which reduces the detection range of stalkers by 50%.= Human Head= A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.= Skeleton Skull= diff --git a/mods/ITEMS/mcl_mobspawners/init.lua b/mods/ITEMS/mcl_mobspawners/init.lua index 290980e78..ae6326009 100644 --- a/mods/ITEMS/mcl_mobspawners/init.lua +++ b/mods/ITEMS/mcl_mobspawners/init.lua @@ -39,7 +39,7 @@ end local doll_size_overrides = { ["mobs_mc:guardian"] = { x = 0.6, y = 0.6 }, ["mobs_mc:guardian_elder"] = { x = 0.72, y = 0.72 }, - ["mobs_mc:enderman"] = { x = 0.8, y = 0.8 }, + ["mobs_mc:rover"] = { x = 0.8, y = 0.8 }, ["mobs_mc:iron_golem"] = { x = 0.9, y = 0.9 }, ["mobs_mc:ghast"] = { x = 1.05, y = 1.05 }, ["mobs_mc:wither"] = { x = 1.2, y = 1.2 }, diff --git a/mods/ITEMS/mcl_potions/tipped_arrow.lua b/mods/ITEMS/mcl_potions/tipped_arrow.lua index 53a37705e..c0def3983 100644 --- a/mods/ITEMS/mcl_potions/tipped_arrow.lua +++ b/mods/ITEMS/mcl_potions/tipped_arrow.lua @@ -266,7 +266,7 @@ function mcl_potions.register_arrow(name, desc, color, def) -- Punch target object but avoid hurting enderman. if lua then - if lua.name ~= "mobs_mc:enderman" then + if lua.name ~= "mobs_mc:rover" then obj:punch(self.object, 1.0, { full_punch_interval=1.0, damage_groups={fleshy=self._damage}, diff --git a/mods/MAPGEN/mcl_end_island/init.lua b/mods/MAPGEN/mcl_end_island/init.lua index 434c3c6ef..46c841beb 100644 --- a/mods/MAPGEN/mcl_end_island/init.lua +++ b/mods/MAPGEN/mcl_end_island/init.lua @@ -34,7 +34,7 @@ end, function(minp,maxp,blockseed) table.shuffle(nn) if nn and #nn > 0 then for i=1,pr:next(1,math.min(5,#nn)) do - minetest.add_entity(vector.offset(nn[i],0,1,0),"mobs_mc:enderman") + minetest.add_entity(vector.offset(nn[i],0,1,0),"mobs_mc:rover") end end end, 15, true) diff --git a/textures/mcl_heads_stalker.png b/textures/mcl_heads_stalker.png new file mode 100644 index 000000000..79978bb45 Binary files /dev/null and b/textures/mcl_heads_stalker.png differ diff --git a/textures/vl_mobs_rover.png b/textures/vl_mobs_rover.png new file mode 100644 index 000000000..6bda2ca0f Binary files /dev/null and b/textures/vl_mobs_rover.png differ diff --git a/textures/vl_mobs_rover_face.png b/textures/vl_mobs_rover_face.png new file mode 100644 index 000000000..d4b6bba9a Binary files /dev/null and b/textures/vl_mobs_rover_face.png differ diff --git a/textures/vl_mobs_rover_face_angry.png b/textures/vl_mobs_rover_face_angry.png new file mode 100644 index 000000000..a6ea6dd27 Binary files /dev/null and b/textures/vl_mobs_rover_face_angry.png differ diff --git a/textures/vl_mobs_stalker_overlay.png b/textures/vl_mobs_stalker_overlay.png new file mode 100644 index 000000000..9a9897665 Binary files /dev/null and b/textures/vl_mobs_stalker_overlay.png differ diff --git a/textures/vl_mobs_stalker_overlay_angry.png b/textures/vl_mobs_stalker_overlay_angry.png new file mode 100644 index 000000000..473ad7b7f Binary files /dev/null and b/textures/vl_mobs_stalker_overlay_angry.png differ diff --git a/textures/vl_stalker_default.png b/textures/vl_stalker_default.png new file mode 100644 index 000000000..fbffb4cdf Binary files /dev/null and b/textures/vl_stalker_default.png differ diff --git a/textures/vl_stalker_overloaded_aura.png b/textures/vl_stalker_overloaded_aura.png new file mode 100644 index 000000000..8deb059d2 Binary files /dev/null and b/textures/vl_stalker_overloaded_aura.png differ diff --git a/tools/colors.txt b/tools/colors.txt index de20aa49a..86f56c422 100644 --- a/tools/colors.txt +++ b/tools/colors.txt @@ -715,9 +715,9 @@ mcl_furnaces:furnace_active 149 139 133 mcl_grindstone:grindstone 216 216 216 # mcl_heads -mcl_heads:creeper22_5 94 115 69 -mcl_heads:creeper45 94 115 69 -mcl_heads:creeper67_5 94 115 69 +mcl_heads:stalker22_5 94 115 69 +mcl_heads:stalker45 94 115 69 +mcl_heads:stalker67_5 94 115 69 mcl_heads:skeleton22_5 126 126 126 mcl_heads:skeleton45 126 126 126 mcl_heads:skeleton67_5 126 126 126 diff --git a/tools/dicts/polish.dic b/tools/dicts/polish.dic index 952ae57eb..81603e446 100644 --- a/tools/dicts/polish.dic +++ b/tools/dicts/polish.dic @@ -2,9 +2,9 @@ 1f Badlandach biomeinfo -creeper -Creeper -creepera +stalker +Stalker +stalkera czerwienit czerwienitem czerwienitowych