X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=mods%2Fmob%2Finit.lua;h=53f4fd5721a7694324462b7a24904126d030205f;hb=c51428110827d7f2489a68bca2fe33dbb8b8572b;hp=bf15a464c604b6c4c5ac88e3b5b0fad18091289f;hpb=b2b155f1fbc3261bd7f64fd5e5deb1fa97624778;p=Crafter.git diff --git a/mods/mob/init.lua b/mods/mob/init.lua index bf15a46..53f4fd5 100644 --- a/mods/mob/init.lua +++ b/mods/mob/init.lua @@ -1,8 +1,8 @@ +local minetest,math,vector = minetest,math,vector --this is where mobs are defined --this is going to be used to set an active mob limit global_mob_amount = 0 -mob_limit = 100 local path = minetest.get_modpath(minetest.get_current_modname()) @@ -68,9 +68,15 @@ mobs.register_mob( attacked_hostile = false, attack_type = "punch", group_attack = true, + + --explosion_radius = 4, -- how far away the mob has to be to initialize the explosion --explosion_power = 7, -- how big the explosion has to be --explosion_time = 3, -- how long it takes for a mob to explode + fire_table = { + visual_size = vector.new(1/3,2/3,1/3), + position = vector.new(0,3,0), + } } ) @@ -148,8 +154,13 @@ mobs.register_mob( pos.y = pos.y + 0.5 minetest.throw_item(pos,{name="weather:snow_block"}) end - end + end, + fire_table = { + visual_size = vector.new(1/3,2/3,1/3), + position = vector.new(0,3,0), } + } + ) mobs.register_mob( @@ -213,6 +224,10 @@ mobs.register_mob( --explosion_radius = 4, -- how far away the mob has to be to initialize the explosion --explosion_power = 7, -- how big the explosion has to be --explosion_time = 3, -- how long it takes for a mob to explode + fire_table = { + visual_size = vector.new(1/6,1/2.2,1/6), + position = vector.new(0,2.3,0), + } } ) @@ -223,7 +238,7 @@ mobs.register_mob( collide_with_objects = false, collisionbox = {-0.37, 0, -0.37, 0.37, 1.75, 0.37}, visual = "mesh", - visual_size = {x = 3, y = 3}, + visual_size = {x = 9, y = 9}, mesh = "snowman.b3d", textures = { "snowman.png","snowman.png","snowman.png","snowman.png","snowman.png","snowman.png", @@ -233,15 +248,16 @@ mobs.register_mob( ----- - --head_bone = "Bone", + head_bone = "head", debug_head_pos = false, - head_directional_offset = 0, --used in vector.multiply(minetest.yaw_to_dir(body_yaw),head_offset) - head_height_offset = 1.625, --added to the base y position + rotational_correction = math.pi/2, + head_directional_offset = 0.01, --used in vector.multiply(minetest.yaw_to_dir(body_yaw),head_offset) + head_height_offset = 1.65, --added to the base y position --use this to correct the head position initially because it becomes severly offset - look at your blender model to get this perfect - head_position_correction = vector.new(0,4.6,0), + head_position_correction = vector.new(0,0.6,0), --this is used to tell the game the orientation of the bone (swaps x to and y, then z and y) head_coord = "vertical", - --rotational_correction = math.pi/2, + flip_pitch = true, ----- is_visible = true, @@ -268,7 +284,8 @@ mobs.register_mob( die_sound = "wool", - hostile = true, + hostile = false, + attacked_hostile = true, attack_type = "projectile", projectile_type = "weather:snowball", projectile_timer_cooldown = 1, @@ -296,6 +313,10 @@ mobs.register_mob( }) end end, + fire_table = { + visual_size = vector.new(1/4,2/3,1/4), + position = vector.new(0,3.3,0), + } } ) @@ -363,6 +384,10 @@ mobs.register_mob( --explosion_radius = 4, -- how far away the mob has to be to initialize the explosion --explosion_power = 7, -- how big the explosion has to be --explosion_time = 3, -- how long it takes for a mob to explode + fire_table = { + visual_size = vector.new(1/3,2/3,1/3), + position = vector.new(0,3,0), + } } ) @@ -401,9 +426,17 @@ mobs.register_mob( custom_on_death = function(self) local pos = self.object:get_pos() for i = 1,4 do - minetest.add_entity(pos,"mob:medium_slime") + local obj = minetest.add_entity(pos,"mob:medium_slime") + if self.on_fire then + start_fire(obj) + end end end, + --this is used to properly position fire when the mob catches on fire + fire_table = { + visual_size = vector.new(1/5.8,1/3.3,1/5.8), + position = vector.new(0,1.5,0), + } } ) @@ -441,9 +474,16 @@ mobs.register_mob( local pos = self.object:get_pos() pos.y = pos.y + 0.2 for i = 1,4 do - minetest.add_entity(pos,"mob:small_slime") + local obj = minetest.add_entity(pos,"mob:small_slime") + if self.on_fire then + start_fire(obj) + end end end, + fire_table = { + visual_size = vector.new(1/5.8,1/3.3,1/5.8), + position = vector.new(0,1.5,0), + } } ) @@ -477,7 +517,11 @@ mobs.register_mob( die_sound = "slime_die", attack_damage = 1, attack_type = "punch", - item_drop = "mob:slimeball" + item_drop = "mob:slimeball", + fire_table = { + visual_size = vector.new(1/5.8,1/3.3,1/5.8), + position = vector.new(0,1.5,0), + } } ) @@ -603,9 +647,82 @@ mobs.register_mob( die_in_light = false, --die_in_light_level = 12, + fire_table = { + visual_size = vector.new(1/4,2/3,1/4), + position = vector.new(0,3.3,0), + } } ) +mobs.register_mob( + { + mobname = "sneeper", + physical = true, + collide_with_objects = false, + collisionbox = {-0.37,0, -0.37, 0.37, 1.5, 0.37}, + visual = "mesh", + visual_size = {x = 3.2, y = 3.2}, + mesh = "creeper.b3d", + textures = { + "sneeper.png" + }, + is_visible = true, + pointable = true, + automatic_face_movement_max_rotation_per_sec = 300, + makes_footstep_sound = false, + hp = 27, + gravity = {x = 0, y = -9.81, z = 0}, + movement_type = "walk", + max_speed = 5.5, + hostile = true, + hostile_cooldown = false, + state = 0, + view_distance = 32, + item_drop = "mob:gunpowder", + + standing_frame = {x=0,y=0}, + moving_frame = {x=0,y=40}, + animation_multiplier = 20, + ---- + pathfinds = true, + + --these are used to anchor a point to the head position + ----- + automatic_face_movement_dir = 0, + head_bone = "head", + debug_head_pos = false, + --this always has to be slightly positive + head_directional_offset = 0.01, + head_height_offset = 1.45, --added to the base y position + --use this to correct the head position initially because it becomes severly offset - look at your blender model to get this perfect + head_position_correction = vector.new(0,2.4,0), + head_coord = "vertical", + ----- + + damage_color = "blue", + + death_rotation = "x", + + hurt_sound = "creeper_hurt", + die_sound = "creeper_hurt", + + attack_type = "explode", + explosion_type = "weather:snow_block", + --projectile_timer_cooldown = 5, + --projectile_type = "tnt:tnt", + + explosion_radius = 4, -- how far away the mob has to be to initialize the explosion + explosion_power = 4, -- how big the explosion has to be + explosion_time = 3, -- how long it takes for a mob to explode + + die_in_light = false, + --die_in_light_level = 12, + fire_table = { + visual_size = vector.new(1/4,2/3,1/4), + position = vector.new(0,3.3,0), + } + } +) mobs.register_mob( @@ -627,7 +744,7 @@ mobs.register_mob( hp = 40, gravity = {x = 0, y = -9.81, z = 0}, movement_type = "walk", - max_speed = 9, + max_speed = 6, hostile = true, hostile_cooldown = false, state = 0, @@ -666,15 +783,39 @@ mobs.register_mob( --projectile_type = "tnt:tnt", explosion_radius = 6, -- how far away the mob has to be to initialize the explosion - explosion_power = 14, -- how big the explosion is (radius) + explosion_power = 6, -- how big the explosion is (radius) explosion_time = 3, -- how long it takes for a mob to explode explosion_blink_timer = 0.1, -- how fast the blinking happens die_in_light = false, --die_in_light_level = 12, + fire_table = { + visual_size = vector.new(1/4,2/3,1/4), + position = vector.new(0,3.3,0), + } } ) +local spider_eyes = {} + +spider_eyes.initial_properties = { + visual = "mesh", + mesh = "spider_eyes.b3d", + textures = {"spider_eyes.png"}, + pointable = false, + collisionbox = {0, 0, 0, 0, 0, 0} +} +spider_eyes.glow = -1 +spider_eyes.on_step = function(self) + if not self.owner or not self.owner:get_luaentity() then + self.object:remove() + else + local owner_head_bone = self.owner:get_luaentity().head_bone + local position,rotation = self.owner:get_bone_position(owner_head_bone) + self.object:set_attach(self.owner, owner_head_bone, vector.new(0,0,0), rotation) + end +end +minetest.register_entity("mob:spider_eyes",spider_eyes) mobs.register_mob( { @@ -736,6 +877,9 @@ mobs.register_mob( group_attack = true, custom_on_activate = function(self) + local eyes = minetest.add_entity(self.object:get_pos(), "mob:spider_eyes") + eyes:set_attach(self.object, "body.head", vector.new(0,0,0), vector.new(0,0,0)) + eyes:get_luaentity().owner = self.object if math.random() > 0.998 then local obj = minetest.add_entity(self.object:get_pos(),"mob:pig") local obj2 = minetest.add_entity(self.object:get_pos(),"tnt:tnt") @@ -751,9 +895,83 @@ mobs.register_mob( obj:set_properties({visual_size={x=1,y=1}}) obj2:set_properties({visual_size={x=1/3,y=1/3}}) end - end + end, + --explosion_radius = 4, -- how far away the mob has to be to initialize the explosion + --explosion_power = 7, -- how big the explosion has to be + --explosion_time = 3, -- how long it takes for a mob to explode + --this is used to properly position fire when the mob catches on fire + fire_table = { + visual_size = vector.new(1.3/3,2/3,1.3/3), + position = vector.new(0,4,0), + } + } +) + +mobs.register_mob( + { + mobname = "snoider", + physical = true, + collide_with_objects = false, + collisionbox = {-0.37, 0, -0.37, 0.37, 0.85, 0.37}, + visual = "mesh", + visual_size = {x = 3, y = 3}, + mesh = "spider.b3d", + textures = { + "snoider.png" + }, + + --these are used to anchor a point to the head position + ----- + head_bone = "body.head", + debug_head_pos = false, + rotational_correction = -math.pi/2, + head_directional_offset = 0.3, --used in vector.multiply(minetest.yaw_to_dir(body_yaw),head_offset) + head_height_offset = 0.63, --added to the base y position + --use this to correct the head position initially because it becomes severly offset - look at your blender model to get this perfect + head_position_correction = vector.new(0,1.24,0), + --this is used to tell the game the orientation of the bone (swaps x to and y, then z and y) + head_coord = "horizontal", + ----- + + is_visible = true, + pointable = true, + automatic_face_movement_dir = 90, + automatic_face_movement_max_rotation_per_sec = 300, + makes_footstep_sound = false, + hp = 30, + gravity = {x = 0, y = -9.81, z = 0}, + movement_type = "walk", + max_speed = 6, + state = 0, + view_distance = 32, + + item_drop = "mob:string", + standing_frame = {x=21,y=21}, + moving_frame = {x=0,y=20}, + animation_multiplier = 20, + ---- + ---- + death_rotation = "z", + + hurt_sound = "spider", + die_sound = "spider_die", + + + pathfinds = true, + + hostile = true, + friendly_in_daylight = true, + attacked_hostile = true, + attack_damage = 3, + attack_type = "punch", + group_attack = true, + --explosion_radius = 4, -- how far away the mob has to be to initialize the explosion --explosion_power = 7, -- how big the explosion has to be --explosion_time = 3, -- how long it takes for a mob to explode + fire_table = { + visual_size = vector.new(1.3/3,2/3,1.3/3), + position = vector.new(0,4,0), + } } )