From 2fc283a42a8c982d0b5e4b7d4b9ce8b45616ff98 Mon Sep 17 00:00:00 2001 From: teknomunk Date: Sat, 4 May 2024 09:37:30 +0000 Subject: [PATCH 01/15] Create node entity --- mods/ENTITIES/vl_node_entity/init.lua | 38 +++++++++++++++++++++++++++ mods/ENTITIES/vl_node_entity/mod.conf | 4 +++ 2 files changed, 42 insertions(+) create mode 100644 mods/ENTITIES/vl_node_entity/init.lua create mode 100644 mods/ENTITIES/vl_node_entity/mod.conf diff --git a/mods/ENTITIES/vl_node_entity/init.lua b/mods/ENTITIES/vl_node_entity/init.lua new file mode 100644 index 000000000..b0ca52748 --- /dev/null +++ b/mods/ENTITIES/vl_node_entity/init.lua @@ -0,0 +1,38 @@ +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +vl_node_entity = {} +local mod = vl_node_entity + +local cube_node_entity = { + initial_properties = { + hp_max = 1, + physical = true, + pointable = false, + collide_with_objects = true, + collision_box = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, + }, + visual = "wielditem", + textures = { "mcl_core:dirt_with_grass" }, +} +function cube_node_entity:on_activate(staticdata, dtime_unloaded) + local staticdata = minetest.deserialize(staticdata) + self._staticdata = staticdata + + local props = { + visual = "wielditem", + textures = { staticdata.nodename }, + } + self.object:set_properties(props) +end +function cube_node_entity:get_staticdata() + return minetest.serialize(self._staticdata) +end +minetest.register_entity("vl_node_entity:cube_node", cube_node_entity) + +function mod.create_node_entity(pos, nodename) + local staticdata = { + nodename = nodename + } + return minetest.add_entity(pos, "vl_node_entity:cube_node",minetest.serialize(staticdata)) +end + diff --git a/mods/ENTITIES/vl_node_entity/mod.conf b/mods/ENTITIES/vl_node_entity/mod.conf new file mode 100644 index 000000000..92c06b5de --- /dev/null +++ b/mods/ENTITIES/vl_node_entity/mod.conf @@ -0,0 +1,4 @@ +name = vl_node_entity +author = teknomunk +description = An entity that duplicates a registered node +depends = mcl_core From 25321a5ac760a70978fbb89d5700bbaf69463eb6 Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sun, 5 May 2024 20:17:26 +0200 Subject: [PATCH 02/15] Move vl_node_entity to vl_held_item --- mods/ENTITIES/{vl_node_entity => vl_held_item}/init.lua | 0 mods/ENTITIES/{vl_node_entity => vl_held_item}/mod.conf | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename mods/ENTITIES/{vl_node_entity => vl_held_item}/init.lua (100%) rename mods/ENTITIES/{vl_node_entity => vl_held_item}/mod.conf (100%) diff --git a/mods/ENTITIES/vl_node_entity/init.lua b/mods/ENTITIES/vl_held_item/init.lua similarity index 100% rename from mods/ENTITIES/vl_node_entity/init.lua rename to mods/ENTITIES/vl_held_item/init.lua diff --git a/mods/ENTITIES/vl_node_entity/mod.conf b/mods/ENTITIES/vl_held_item/mod.conf similarity index 100% rename from mods/ENTITIES/vl_node_entity/mod.conf rename to mods/ENTITIES/vl_held_item/mod.conf From b9ec1a46118435757f5004d4ea8909c4e6e8a226 Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sun, 5 May 2024 20:25:19 +0200 Subject: [PATCH 03/15] Complete migration to vl_held_item --- mods/ENTITIES/vl_held_item/init.lua | 22 ++++++++++++---------- mods/ENTITIES/vl_held_item/mod.conf | 6 +++--- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/mods/ENTITIES/vl_held_item/init.lua b/mods/ENTITIES/vl_held_item/init.lua index b0ca52748..f64ad9928 100644 --- a/mods/ENTITIES/vl_held_item/init.lua +++ b/mods/ENTITIES/vl_held_item/init.lua @@ -1,38 +1,40 @@ local modname = minetest.get_current_modname() local modpath = minetest.get_modpath(modname) -vl_node_entity = {} -local mod = vl_node_entity +vl_held_item = {} +local mod = vl_held_item -local cube_node_entity = { +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 cube_node_entity:on_activate(staticdata, dtime_unloaded) +function held_item_entity:on_activate(staticdata, dtime_unloaded) local staticdata = minetest.deserialize(staticdata) self._staticdata = staticdata local props = { visual = "wielditem", - textures = { staticdata.nodename }, + textures = { staticdata.itemname }, } self.object:set_properties(props) end -function cube_node_entity:get_staticdata() +function held_item_entity:get_staticdata() return minetest.serialize(self._staticdata) end -minetest.register_entity("vl_node_entity:cube_node", cube_node_entity) +minetest.register_entity("vl_held_item:held_item_entity", held_item_entity) -function mod.create_node_entity(pos, nodename) +function mod.create_item_entity(pos, itemname) local staticdata = { - nodename = nodename + itemname = itemname } - return minetest.add_entity(pos, "vl_node_entity:cube_node",minetest.serialize(staticdata)) + 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 index 92c06b5de..c5068855f 100644 --- a/mods/ENTITIES/vl_held_item/mod.conf +++ b/mods/ENTITIES/vl_held_item/mod.conf @@ -1,4 +1,4 @@ -name = vl_node_entity -author = teknomunk -description = An entity that duplicates a registered node +name = vl_held_item +author = teknomunk, Herowl +description = An entity that represents an item held by a mob depends = mcl_core From 1219b09851d70f10c4398c43aaab72ca80da9224 Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sun, 5 May 2024 21:05:45 +0200 Subject: [PATCH 04/15] Migrated enderman to the new visuals Also made the node holding use vl_held_item --- mods/ENTITIES/mcl_mobs/init.lua | 1 + mods/ENTITIES/mobs_mc/enderman.lua | 239 ++++------------------ mods/ENTITIES/mobs_mc/models/vl_rover.b3d | Bin 0 -> 149442 bytes textures/vl_mobs_rover.png | Bin 0 -> 2458 bytes textures/vl_mobs_rover_face.png | Bin 0 -> 144 bytes textures/vl_mobs_rover_face_angry.png | Bin 0 -> 148 bytes 6 files changed, 41 insertions(+), 199 deletions(-) create mode 100644 mods/ENTITIES/mobs_mc/models/vl_rover.b3d create mode 100644 textures/vl_mobs_rover.png create mode 100644 textures/vl_mobs_rover_face.png create mode 100644 textures/vl_mobs_rover_face_angry.png 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/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index d3ce1e5cc..f298ac615 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.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 { @@ -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, 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 0000000000000000000000000000000000000000..9d9a2809ebe040fb1e501c03bdd3ab330c51934c GIT binary patch literal 149442 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 literal 0 HcmV?d00001 diff --git a/textures/vl_mobs_rover.png b/textures/vl_mobs_rover.png new file mode 100644 index 0000000000000000000000000000000000000000..0c26297487167a82f337cc8592a764c71bfc4e5d GIT binary patch literal 2458 zcmV;L31#+)P)^y+K#UOpP*oMyb%oX%LI?nWloEa4BgP1047Ao*mIX0J@uT~H{P;2L`;K84 z_`47S0Ki&{s;VG_z&y{0G15JeQUU;Y@3Czgy!TK_p>11et+8zzvMj^0EC2wlHH1DTUkZ25T+6_jq}E`QiO( zQ9=mB7~!15`FzH@u6TNSLQxd>79pQLeL@HU*XtDkkW#`pj%eE!#u#kdhO#Unguv-^ zLen%D#}Q>&qAW|q7?I~WrfGtFD*#$+NGUN*6NC^*DdEG15BTum1FW@}=b0hvoI{pn z_%makXIN|DoI_cbn5GE;@bdD47$bxbD9iG9*L+1Mx~{{^%L^Zl)*2xMJU>6f7{ft| zF=E>`JUu(>?;T1h48s7W z6oe2AU8NLaj2MOi-g|uf_z_Y{G)=?EqfG(eHE!Dmr4*{F!oKhPJ?R*smvrJy1UTpT z!t3>l=jUfUKR>f3T(4Jb+lKS`%!?u9G)?nn0LF1-foqzE@1eCup64iv0&UwuDaH3| znuc|O4ut4qjNyO~9cYwgiK?ogl!9~ab)L5tNa900bkRaMxw4g0=BN{J8x@;rz49$A**%a<>FKgt+{v~AlUr9|7d z99;2^^(84KE|&|YX=1orYwsv>guZhQMNwcF280mAd$P=t634Vh>OIdhq?B0KmD6nB z_k8MPcfvGR7nT2|)7RC+~fFe0)qohy(z6o?}@S zjN=IJJ*>6JvJ6s6q?8as;DA_b`DDI+PE}PUYi+9QIw_^@=5fwp+cp+2I$6pp+qU6) zz4F3^5ENKGT`46akJdy~P)b2ciD4M9?>pMIy+gGo(I|=n<2Z7()^$Zn2}&vCdCn() z6qRpJp14I~SXC9euH*lN5a7KB04&Rbec$gkLHE#FGt?>2(=?&3Ypm;v5CR)8(vc7X zilTt`p0h+s3EQ^u{NyhPrOUEFrj#Irz`pOW)?!^(v~A1o$~kwp(6THcrG%6cMN!~% zI`MUsGHJqTns7d!?_3=rg;f4H2<~m$@+JuSRaHSsiE$jEl)6*>loC=($n%^J<lf zAvBS&p3i3x@+3L1bzS*OiaJ62dc7iq0Ambpw;S_bYYn9o>bl0|a^e5dARVZx3dR^1 zW6-uO#&Kkb()`94-V_CikVJDG1(y5<(MKu8=%CDCt>t-y5XiC&Pft(i`<@Y^kNI() zXAZ*AozcmX(1Z~96jDmeQ5x1-)OCHAuE@}M?>UQn{`?uY+l{}YRJLu~UHT#qf7BWZ z7Aby=5&OO)%Q6hZfYa&3NL$wx^E@-Eh~7d7C?Uju@;paM38&MEi;T8y*=!U=0VyT> zf9D*!u0v52tl9+Oq9`DQKnMZzJfkRzSI@0A#&LuYg6R`Nz%)%hfNrSQJ*Y&__< zrfKf1=&!&2ig}*-WaxyuuEX>5Gh&R$vW(X-jw7zuE4r@3IF3xsbzS+sL=S@g!@~n3 z_^1)fvY@J}S483;9#jrb(}b$3m^Sk~^I=fIM0BGKQ<}~5{LbujUB~G=guo(Csg)?z zb=})m_sSkiZNmwM>bJM3x5ol_+Eup zmL)IZcDu2$IJ!8>xkXXXZ+}Hp)9G}=vMhI}O+}G023^BL&_4Kg{s(IEi9 z<#M^}0Z<^juDdIeh$8P<_YvmFd(Y+UH?N-=$$OvjJinuv5aMpWqA1d*PoM7QJ)h6X zd!GO#Aw>Gx!cRhowE&{m zcYA^~@v%T5J4qZp_T7GFQ1#a|4fB_Dg*s3)kN2MQ__r;zrfIn6(6%l60kX?f;89bC ztI6+}6Y;ftOe8v#I;e3%xtMh6XW;+sSe6CWTAWTNe$+(*M`A~TAe&3ylM^J5Ko4e) zbpjcv_jHBD@j=AVy!?$r{DJUt%B3efB82@=E z_`Q*38Fzz;3RFT_^Tx~@albzCQq`V+;D&j)@4zkkC>N5gY$w0iIFG~zopr0L(Zut^fc4 literal 0 HcmV?d00001 diff --git a/textures/vl_mobs_rover_face_angry.png b/textures/vl_mobs_rover_face_angry.png new file mode 100644 index 0000000000000000000000000000000000000000..f03db92bcabefc6390a52b1a0a88b77f0c0a88cc GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQqi6+jv*QM-d@_s+hD-Ma-gMk zhT`W723)+S_#~CA4JKx4IyjXah<%;^@97i<28-~;$0y&8=Gh*!_Q=MZUb&T1KgjKg w-zPk4``0gbrx%`@FaKcGpXqKua~Xb2l}(J1RIT; Date: Sun, 5 May 2024 21:09:35 +0200 Subject: [PATCH 05/15] Optimized the new textures --- textures/vl_mobs_rover.png | Bin 2458 -> 1557 bytes textures/vl_mobs_rover_face.png | Bin 144 -> 125 bytes textures/vl_mobs_rover_face_angry.png | Bin 148 -> 127 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/textures/vl_mobs_rover.png b/textures/vl_mobs_rover.png index 0c26297487167a82f337cc8592a764c71bfc4e5d..6bda2ca0f3a2ce5f1c21c501b552c78f3b866e6d 100644 GIT binary patch delta 1540 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 BB{u*7 delta 114 zcmV-&0FD2BkO7b+Y*$G{K~!ko?bM+WfG`jQzz?NS0TtkB0s%$fu^1|#wV-e?#0GZN z&&{b59{~XHQ|Ya+Hq)$07*qoM6N<$f&qgtPyhe` diff --git a/textures/vl_mobs_rover_face_angry.png b/textures/vl_mobs_rover_face_angry.png index f03db92bcabefc6390a52b1a0a88b77f0c0a88cc..a6ea6dd27b98c0c61eced9890624a017f3b9a42a 100644 GIT binary patch delta 97 zcmV-n0G|Jp0e_GrTSiGlK~!ko?a;9ez#t3+KvrX;EEBN`4v00000NkvXXu0mjf DhI}Sk delta 118 zcmV-+0Ez#9lmU<=a9c@4K~!ko?b5LgfG`XMz=VaEA@k5M3JuB*86rC{k!dMFLUh1g z>u>($lmGxYSEI+1+gl8`Qmw?XY>ghNmGB Date: Sun, 5 May 2024 21:12:37 +0200 Subject: [PATCH 06/15] Going on with renaming the mob --- mods/ENTITIES/mobs_mc/enderman.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index f298ac615..94ad07b7c 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.lua @@ -110,7 +110,7 @@ local psdefs = {{ }} mcl_mobs.register_mob("mobs_mc:enderman", { - description = S("Enderman"), + description = S("Rover"), type = "monster", spawn_class = "passive", can_despawn = true, @@ -696,4 +696,4 @@ 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:enderman", S("Rover"), "#252525", "#151515", 0) From d2a49799aeee8becbbbaf0e609bd71f3e14867f7 Mon Sep 17 00:00:00 2001 From: teknomunk Date: Sun, 5 May 2024 16:22:19 +0000 Subject: [PATCH 07/15] Change over internal name so that /spawn_mob works --- mods/ENTITIES/mobs_mc/enderman.lua | 12 ++++++------ mods/ITEMS/mcl_bows/arrow.lua | 2 +- mods/ITEMS/mcl_bows/rocket.lua | 2 +- mods/ITEMS/mcl_farming/pumpkin.lua | 2 +- mods/ITEMS/mcl_mobspawners/init.lua | 2 +- mods/ITEMS/mcl_potions/tipped_arrow.lua | 2 +- mods/MAPGEN/mcl_end_island/init.lua | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index 94ad07b7c..cd2cb54c1 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.lua @@ -109,7 +109,7 @@ local psdefs = {{ texture = "mcl_portals_particle"..math.random(1, 5)..".png", }} -mcl_mobs.register_mob("mobs_mc:enderman", { +mcl_mobs.register_mob("mobs_mc:rover", { description = S("Rover"), type = "monster", spawn_class = "passive", @@ -495,7 +495,7 @@ mcl_mobs.register_mob("mobs_mc:enderman", { -- End spawn mcl_mobs:spawn_specific( -"mobs_mc:enderman", +"mobs_mc:rover", "end", "ground", { @@ -515,7 +515,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", { @@ -664,7 +664,7 @@ mcl_vars.mg_overworld_max) -- Nether spawn (rare) mcl_mobs:spawn_specific( -"mobs_mc:enderman", +"mobs_mc:rover", "nether", "ground", { @@ -681,7 +681,7 @@ mcl_vars.mg_nether_max) -- Warped Forest spawn (common) mcl_mobs:spawn_specific( -"mobs_mc:enderman", +"mobs_mc:rover", "nether", "ground", { @@ -696,4 +696,4 @@ mcl_vars.mg_nether_min, mcl_vars.mg_nether_max) -- spawn eggs -mcl_mobs.register_egg("mobs_mc:enderman", S("Rover"), "#252525", "#151515", 0) +mcl_mobs.register_egg("mobs_mc:rover", S("Rover"), "#252525", "#151515", 0) 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_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) From d826a587da9b68a97396413a70082b812692e0b4 Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sun, 5 May 2024 22:55:25 +0200 Subject: [PATCH 08/15] Compatibility conversion --- mods/ENTITIES/mobs_mc/enderman.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index cd2cb54c1..c44ef21f4 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.lua @@ -493,6 +493,14 @@ mcl_mobs.register_mob("mobs_mc:rover", { 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) + self.object:remove() + end, +}) + -- End spawn mcl_mobs:spawn_specific( "mobs_mc:rover", @@ -697,3 +705,4 @@ mcl_vars.mg_nether_max) -- spawn eggs mcl_mobs.register_egg("mobs_mc:rover", S("Rover"), "#252525", "#151515", 0) +minetest.register_alias("mobs_mc:enderman", "mobs_mc:rover") From 970f6cf377ad99fc2169fa171ddef05a1b27aabf Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sun, 12 May 2024 06:02:15 +0200 Subject: [PATCH 09/15] Stalker model and mechanics implemented --- mods/ENTITIES/mcl_mobs/combat.lua | 1 + mods/ENTITIES/mobs_mc/creeper.lua | 70 +++++++++++++++----- mods/ENTITIES/mobs_mc/models/vl_stalker.b3d | Bin 0 -> 191856 bytes textures/vl_mobs_stalker_overlay.png | Bin 0 -> 233 bytes textures/vl_mobs_stalker_overlay_angry.png | Bin 0 -> 244 bytes textures/vl_stalker_charge.png | Bin 0 -> 1373 bytes textures/vl_stalker_default.png | Bin 0 -> 478 bytes 7 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 mods/ENTITIES/mobs_mc/models/vl_stalker.b3d create mode 100644 textures/vl_mobs_stalker_overlay.png create mode 100644 textures/vl_mobs_stalker_overlay_angry.png create mode 100644 textures/vl_stalker_charge.png create mode 100644 textures/vl_stalker_default.png diff --git a/mods/ENTITIES/mcl_mobs/combat.lua b/mods/ENTITIES/mcl_mobs/combat.lua index 745a06c5c..1b47e599f 100644 --- a/mods/ENTITIES/mcl_mobs/combat.lua +++ b/mods/ENTITIES/mcl_mobs/combat.lua @@ -957,6 +957,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/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua index 2c95407c8..c67d67fef 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/creeper.lua @@ -3,10 +3,47 @@ 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 ~= "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 + mcl_mobs.register_mob("mobs_mc:creeper", { @@ -21,16 +58,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", + {"([combine:16x24:0,0=vl_stalker_default.png:0,16=vl_stalker_default.png)^vl_mobs_stalker_overlay.png", "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", @@ -86,6 +123,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 @@ -115,20 +153,16 @@ mcl_mobs.register_mob("mobs_mc:creeper", { 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, @@ -146,15 +180,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"}, + {"([combine:16x24:0,0=vl_stalker_default.png:0,16=vl_stalker_default.png)^vl_mobs_stalker_overlay.png", + "vl_stalker_charge.png"}, }, - 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", @@ -208,6 +243,7 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", { self:boom(mcl_util.get_object_center(self.object), self.explosion_strength) end end + self.object:set_properties({textures={get_texture(self), "vl_stalker_charge.png"}}) end, on_die = function(self, pos, cmi_cause) -- Drop a random music disc when killed by skeleton or stray 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 0000000000000000000000000000000000000000..c47edf5b22dbc895ed33d473a19fca25d98343db GIT binary patch literal 191856 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 literal 0 HcmV?d00001 diff --git a/textures/vl_mobs_stalker_overlay.png b/textures/vl_mobs_stalker_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9897665613cdb6dce014c0996a3532d0a63005 GIT binary patch literal 233 zcmVST5Jev-Vvk5v-hd4}LK;}bqGAtM8Nm_*q@kvYM8y(mF2xxO6e%!(zw{-a&+mM9 zkd>8{r7C1ZFabUM^cHIE;#$!00000NkvXXu0mjf_C!|Y literal 0 HcmV?d00001 diff --git a/textures/vl_mobs_stalker_overlay_angry.png b/textures/vl_mobs_stalker_overlay_angry.png new file mode 100644 index 0000000000000000000000000000000000000000..473ad7b7f091002ad78030a56542fb08c7deb444 GIT binary patch literal 244 zcmVIgJmc%UR5Oc-k`g4N-gw%y}zy;`0 uqs<5%x^9=&|BA6~uzD3|=9{E?OaBIt?Q5MSo*AtG0000>D?^VbkK^Egd-(KAz5a)nsPM>!BV{xVhLErJa@wFJ zVQ`91QuN#(jB=&Q#-_|Tj2FhaIWoh@=S89cKn+Syb2qD$$DM56*v5gKy?hr4)0M0v zt*cUW1j2NeT6yHFLDoeiQX|l&8%YHyP^H6d7Ul68?$SEr5$n^rFV%$o$6-p(53{|> zBO470x9pflV&^C|Njj9(X(aCbjUND#b=2L{E)&Bs#+8;H-nlwS$Tvf@*UyOv1h?hz zM1zys_xlN@nOM2;7P0uWkI>_DS?W@yeKyAR`V4AkV+<=(QF<06ky)RLc5ONhfIr8A z*ms%Nc4dodvyK#ipT{`=dLOG2G%Sk3Z89;i5cY(xR%3E_2D8AqpR}%GP*oBo%pQ@l&815FiVnH!gMVb}ud}jE@w&zIK_9WQbFy}DlF&1`6aYyJ zt?aGx$i@~g)#t{LsYW(8{X(At`fJndJ?o?I;2#7uOFXj4q$AgE<%lMeV6ctBKS+^P?{Bo;qYI4pKqc3{0Mu*iJQ{X7a)A}Pd3INu&01;ZjVR2 z+(Y}KWD4VTXxc~V|36XLIaxayrDvX*9mh&UqtbGbRn<0h$vW!1Zs9-WW8#fodaq9L z?o5mrz&tY$K0#3|(2bUbvdL^J{@@d~BEFgVRDD`}O*@8^l-5tvQVvHZImys#}D z-9U(8lR_@QV@}p)Sy)n{%6tGNHI8+yqfGC}$L@$@%Zd)UOAFeuFeja6o?6z%!Ru4} ztUv<5p#hF>%3w~ik@WydgOlQOBb>G>0I)TOrT5rzr5R}+3ejoQkiH><)irira;Y-O zq`~esi}FC2_5xKpl#705uTS&#U<86;{@QnmuS^Q!$+;|_h;qIui>0@l5JeVDfbqHc zR4i(hmH8I7m^GA%0#!Op3ON~OHuVMA-jc`H2L|}kH^cs-MD|~sLe(gkeKQ;arZbJa zoMmA_-#F^2yTooq0liI6?R123uUq&JUFD}}jG)&o{5AvDDjVxJWU$(z!R>Vm|8w)H zs7oWUIh#5FQP(9u_+yHl77aDQC|y-H_Fwe##Y~ie7)*3kijGCCvNA=_%JDF56H!{d zZsD)LAV2LH=XtG0!C+Fz&5UPFV3x(3v#>UGa-%ebXNN=hEbX$|X2A7g9=RV4P}(ty z|AB7#=;1=~@Dh*Qssv`}@2V6Xc@`X26V4*NDC0k4VJ*+W0DwmTFgC^a4?RzO|4?uUb3&M7Y)V;IbgsoC zH13G8DI!mN|6p7q@+4at?K;$pIaaeju-=J?3p&@5gfQoR^?Fd|I|Y|@g~*e# zt^l~4&SYUm7G~NwiHmG$CXCpHE`9&dCIEN&QUYy2e;cH_qk^M1#-<90W=6%@z$29T zPTw2N3SmAWnCy)k7@H1F>PqEiOY<_*F7W*WV^ccUs_}^-a5uO*jVC(|=8;v_o08oscBqSbTl^6V3cEKtyxL>_`63uJeaqwVZOIdF>H2Z^w zDM}uDq Date: Sun, 12 May 2024 06:21:37 +0200 Subject: [PATCH 10/15] Stalker rename (partial) --- mods/ENTITIES/mobs_mc/README.md | 4 +- mods/ENTITIES/mobs_mc/creeper.lua | 42 +++++++++---------- mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr | 2 +- mods/ENTITIES/mobs_mc/locale/mobs_mc.dk.tr | 4 +- mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr | 2 +- mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr | 2 +- mods/ENTITIES/mobs_mc/locale/mobs_mc.oc.tr | 2 +- mods/ENTITIES/mobs_mc/locale/mobs_mc.pt_BR.tr | 2 +- mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr | 2 +- mods/ENTITIES/mobs_mc/locale/template.txt | 2 +- mods/ENTITIES/mobs_mc/skeleton+stray.lua | 2 +- mods/ENTITIES/mobs_mc/zombie.lua | 2 +- mods/HELP/mcl_item_id/init.lua | 4 +- mods/HELP/mcl_tt/locale/mcl_tt.de.tr | 2 +- mods/HELP/mcl_tt/locale/mcl_tt.es.tr | 2 +- mods/HELP/mcl_tt/locale/mcl_tt.fr.tr | 2 +- mods/HELP/mcl_tt/locale/mcl_tt.pl.tr | 2 +- mods/HELP/mcl_tt/locale/mcl_tt.pt_BR.tr | 2 +- mods/HELP/mcl_tt/locale/mcl_tt.ru.tr | 2 +- mods/HELP/mcl_tt/locale/template.txt | 2 +- mods/HELP/mcl_tt/snippets_mcl.lua | 4 +- mods/ITEMS/REDSTONE/mesecons_mvps/init.lua | 2 +- .../mcl_banners/locale/mcl_banners.ru.tr | 2 +- mods/ITEMS/mcl_banners/patterncraft.lua | 2 +- mods/ITEMS/mcl_heads/init.lua | 10 ++--- mods/ITEMS/mcl_heads/locale/mcl_heads.de.tr | 4 +- mods/ITEMS/mcl_heads/locale/mcl_heads.es.tr | 4 +- mods/ITEMS/mcl_heads/locale/mcl_heads.fr.tr | 4 +- mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr | 4 +- .../ITEMS/mcl_heads/locale/mcl_heads.pt_BR.tr | 4 +- mods/ITEMS/mcl_heads/locale/mcl_heads.ru.tr | 4 +- mods/ITEMS/mcl_heads/locale/template.txt | 4 +- tools/colors.txt | 6 +-- tools/dicts/polish.dic | 6 +-- 34 files changed, 71 insertions(+), 75 deletions(-) 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/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua index c67d67fef..6f883e6c9 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/creeper.lua @@ -46,8 +46,8 @@ 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, @@ -93,8 +93,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 @@ -146,8 +146,8 @@ 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,}, @@ -169,8 +169,8 @@ mcl_mobs.register_mob("mobs_mc:creeper", { view_range = 16, }) -mcl_mobs.register_mob("mobs_mc:creeper_charged", { - description = S("Charged Creeper"), +mcl_mobs.register_mob("mobs_mc:stalker_charged", { + description = S("Charged Stalker"), type = "monster", spawn_class = "hostile", hp_min = 20, @@ -213,8 +213,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 @@ -258,7 +258,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_charged") return true end, maxdrops = 2, @@ -270,27 +270,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 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, @@ -301,7 +297,7 @@ mcl_mobs.register_mob("mobs_mc:creeper_charged", { }) mcl_mobs:spawn_specific( -"mobs_mc:creeper", +"mobs_mc:stalker", "overworld", "ground", { @@ -449,4 +445,4 @@ 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) 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/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/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/HELP/mcl_item_id/init.lua b/mods/HELP/mcl_item_id/init.lua index 0e029932b..7dc25d720 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", @@ -59,4 +59,4 @@ tt.register_snippet(function(itemstring) if minetest.settings:get_bool("mcl_item_id_debug", false) then return new_id, "#555555" end -end) \ No newline at end of file +end) diff --git a/mods/HELP/mcl_tt/locale/mcl_tt.de.tr b/mods/HELP/mcl_tt/locale/mcl_tt.de.tr index 54c376c3b..be8d2f325 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 bc962eef8..6d57bbdce 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 77e9a35b0..1762bdad2 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 aecc15d1e..12a865126 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 9d00a06d4..86a9a71b1 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 def0a6d1d..82a8fffaf 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 6fb735b13..da0c1a228 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 825776f5f..5e7fd975b 100644 --- a/mods/HELP/mcl_tt/snippets_mcl.lua +++ b/mods/HELP/mcl_tt/snippets_mcl.lua @@ -102,8 +102,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_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/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 From 22b6c25458c0efab6e5cc239e144076d67d04659 Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sun, 12 May 2024 06:28:24 +0200 Subject: [PATCH 11/15] Convert old mob to the new stalker --- mods/ENTITIES/mobs_mc/creeper.lua | 37 +++++++++++++++++++++++++++--- mods/ENTITIES/mobs_mc/enderman.lua | 5 ++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua index 6f883e6c9..d1c52767f 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/creeper.lua @@ -11,7 +11,7 @@ local function get_texture(self) local on_name = self.standing_on local texture local texture_suff = "" - if on_name ~= "air" then + if on_name and on_name ~= "air" then local tiles = minetest.registered_nodes[on_name].tiles if tiles then local tile = tiles[1] @@ -64,7 +64,7 @@ mcl_mobs.register_mob("mobs_mc:stalker", { head_eye_height = 1.8; curiosity = 2, textures = { - {"([combine:16x24:0,0=vl_stalker_default.png:0,16=vl_stalker_default.png)^vl_mobs_stalker_overlay.png", + {get_texture({}), "mobs_mc_empty.png"}, }, visual_size = {x=2, y=2}, @@ -185,7 +185,7 @@ mcl_mobs.register_mob("mobs_mc:stalker_charged", { --BOOM textures = { - {"([combine:16x24:0,0=vl_stalker_default.png:0,16=vl_stalker_default.png)^vl_mobs_stalker_overlay.png", + {get_texture({}), "vl_stalker_charge.png"}, }, use_texture_alpha = true, @@ -296,6 +296,36 @@ mcl_mobs.register_mob("mobs_mc:stalker_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_charged", staticdata) + obj:set_properties({ + visual_size = {x=2, y=2}, + mesh = "vl_stalker.b3d", + textures = { + {get_texture({}), + "vl_stalker_charge.png"}, + }, + }) + self.object:remove() + end, +}) + mcl_mobs:spawn_specific( "mobs_mc:stalker", "overworld", @@ -446,3 +476,4 @@ mcl_vars.mg_overworld_max) -- spawn eggs mcl_mobs.register_egg("mobs_mc:stalker", S("Stalker"), "#0da70a", "#000000", 0) +minetest.register_alias("mobs_mc:creeper", "mobs_mc:stalker") diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index c44ef21f4..272c22617 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.lua @@ -497,6 +497,11 @@ mcl_mobs.register_mob("mobs_mc:rover", { 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, }) From 18af03b99c134aae71eb4cc2b589c032d9fa7591 Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sun, 12 May 2024 07:14:28 +0200 Subject: [PATCH 12/15] Animated charged stalker aura --- mods/ENTITIES/mobs_mc/creeper.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua index d1c52767f..65564b11d 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/creeper.lua @@ -44,6 +44,14 @@ local function get_texture(self) return texture end +local AURA = "vl_stalker_charge.png" +local function get_charged_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:stalker", { @@ -243,7 +251,9 @@ mcl_mobs.register_mob("mobs_mc:stalker_charged", { self:boom(mcl_util.get_object_center(self.object), self.explosion_strength) end end - self.object:set_properties({textures={get_texture(self), "vl_stalker_charge.png"}}) + 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_charged_aura(self._aura_timer)}}) end, on_die = function(self, pos, cmi_cause) -- Drop a random music disc when killed by skeleton or stray @@ -477,3 +487,4 @@ mcl_vars.mg_overworld_max) -- spawn eggs 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_charged", S("Charged Stalker"), "#00a77a", "#000000", 0) From af13bd063555d181bc17b65b20f4506984be08e9 Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sun, 19 May 2024 02:49:40 +0200 Subject: [PATCH 13/15] Stalker may be overloaded, but never charged --- mods/ENTITIES/mobs_mc/creeper.lua | 22 +++++++++--------- ...rge.png => vl_stalker_overloaded_aura.png} | Bin 2 files changed, 11 insertions(+), 11 deletions(-) rename textures/{vl_stalker_charge.png => vl_stalker_overloaded_aura.png} (100%) diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua index 65564b11d..0c9655006 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/creeper.lua @@ -44,8 +44,8 @@ local function get_texture(self) return texture end -local AURA = "vl_stalker_charge.png" -local function get_charged_aura(timer) +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) @@ -177,8 +177,8 @@ mcl_mobs.register_mob("mobs_mc:stalker", { view_range = 16, }) -mcl_mobs.register_mob("mobs_mc:stalker_charged", { - description = S("Charged Stalker"), +mcl_mobs.register_mob("mobs_mc:stalker_overloaded", { + description = S("Overloaded Stalker"), type = "monster", spawn_class = "hostile", hp_min = 20, @@ -194,7 +194,7 @@ mcl_mobs.register_mob("mobs_mc:stalker_charged", { textures = { {get_texture({}), - "vl_stalker_charge.png"}, + AURA}, }, use_texture_alpha = true, visual_size = {x=2, y=2}, @@ -253,7 +253,7 @@ mcl_mobs.register_mob("mobs_mc:stalker_charged", { 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_charged_aura(self._aura_timer)}}) + 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 @@ -268,7 +268,7 @@ mcl_mobs.register_mob("mobs_mc:stalker_charged", { end end, on_lightning_strike = function(self, pos, pos2, objects) - mcl_util.replace_mob(self.object, "mobs_mc:stalker_charged") + mcl_util.replace_mob(self.object, "mobs_mc:stalker_overloaded") return true end, maxdrops = 2, @@ -280,7 +280,7 @@ mcl_mobs.register_mob("mobs_mc:stalker_charged", { looting = "common",}, -- Head - -- TODO: Only drop if killed by charged stalker + -- TODO: Only drop if killed by overloaded stalker {name = "mcl_heads:stalker", chance = 200, -- 0.5% min = 1, @@ -323,13 +323,13 @@ minetest.register_entity("mobs_mc:creeper", { }) 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_charged", staticdata) + 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({}), - "vl_stalker_charge.png"}, + AURA}, }, }) self.object:remove() @@ -487,4 +487,4 @@ mcl_vars.mg_overworld_max) -- spawn eggs 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_charged", S("Charged Stalker"), "#00a77a", "#000000", 0) +mcl_mobs.register_egg("mobs_mc:stalker_overloaded", S("Overloaded Stalker"), "#00a77a", "#000000", 0) diff --git a/textures/vl_stalker_charge.png b/textures/vl_stalker_overloaded_aura.png similarity index 100% rename from textures/vl_stalker_charge.png rename to textures/vl_stalker_overloaded_aura.png From d22d26b971674cf086fe584539995ce6ba0e3524 Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sun, 19 May 2024 03:03:11 +0200 Subject: [PATCH 14/15] New stalker head texture --- textures/mcl_heads_stalker.png | Bin 0 -> 426 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 textures/mcl_heads_stalker.png diff --git a/textures/mcl_heads_stalker.png b/textures/mcl_heads_stalker.png new file mode 100644 index 0000000000000000000000000000000000000000..79978bb453d587fe36445b8df9f79bb788b44c1e GIT binary patch literal 426 zcmV;b0agBqP)fg?6zuOMSpfZ>j<`Q&zG#>t$T_bZLM# zhp}hkXAP9LL{kEk#zu>00pyZ{dEE1n`A6~C7MSO;b_B4J<-0#J3jxXl=#~I?;_J5r zkGFN#Cld7=09ob6$AsREZ)yv02d@{-W61I?F Date: Wed, 22 May 2024 14:26:18 +0200 Subject: [PATCH 15/15] Rename the files --- mods/ENTITIES/mobs_mc/{enderman.lua => rover.lua} | 0 mods/ENTITIES/mobs_mc/{creeper.lua => stalker.lua} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename mods/ENTITIES/mobs_mc/{enderman.lua => rover.lua} (100%) rename mods/ENTITIES/mobs_mc/{creeper.lua => stalker.lua} (100%) diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/rover.lua similarity index 100% rename from mods/ENTITIES/mobs_mc/enderman.lua rename to mods/ENTITIES/mobs_mc/rover.lua diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/stalker.lua similarity index 100% rename from mods/ENTITIES/mobs_mc/creeper.lua rename to mods/ENTITIES/mobs_mc/stalker.lua