From 1219b09851d70f10c4398c43aaab72ca80da9224 Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sun, 5 May 2024 21:05:45 +0200 Subject: [PATCH] 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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 z 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 IAR&+aKkGq>w*UYD 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~JQ3~=DTp1;OPV>$H0000