forked from VoxeLibre/VoxeLibre
Merge pull request 'Fix ocelots and add in skittish mob behavior' (#1625) from jordan4ibanez/MineClone2:mineclone5 into mineclone5
Reviewed-on: MineClone2/MineClone2#1625
This commit is contained in:
commit
9486d1bf23
|
@ -337,6 +337,7 @@ function mobs:register_mob(name, def)
|
||||||
fall_slow = def.fall_slow,
|
fall_slow = def.fall_slow,
|
||||||
projectile_cooldown_min = def.projectile_cooldown_min or 2,
|
projectile_cooldown_min = def.projectile_cooldown_min or 2,
|
||||||
projectile_cooldown_max = def.projectile_cooldown_max or 6,
|
projectile_cooldown_max = def.projectile_cooldown_max or 6,
|
||||||
|
skittish = def.skittish,
|
||||||
--end j4i stuff
|
--end j4i stuff
|
||||||
|
|
||||||
-- MCL2 extensions
|
-- MCL2 extensions
|
||||||
|
|
|
@ -67,13 +67,26 @@ local land_state_list_wandering = {"stand", "walk"}
|
||||||
|
|
||||||
local land_state_switch = function(self, dtime)
|
local land_state_switch = function(self, dtime)
|
||||||
|
|
||||||
|
--do math after sure not attacking or running away
|
||||||
|
self.state_timer = self.state_timer - dtime
|
||||||
|
|
||||||
|
--only run away
|
||||||
|
if self.skittish and self.state == "run" then
|
||||||
|
self.run_timer = self.run_timer - dtime
|
||||||
|
if self.run_timer > 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
--continue
|
||||||
|
end
|
||||||
|
|
||||||
|
--only attack
|
||||||
if self.hostile and self.attacking then
|
if self.hostile and self.attacking then
|
||||||
self.state = "attack"
|
self.state = "attack"
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
--do math after sure not attacking
|
|
||||||
self.state_timer = self.state_timer - dtime
|
|
||||||
|
|
||||||
if self.state_timer <= 0 then
|
if self.state_timer <= 0 then
|
||||||
self.state_timer = math.random(4,10) + math.random()
|
self.state_timer = math.random(4,10) + math.random()
|
||||||
|
@ -185,7 +198,37 @@ local land_state_execution = function(self,dtime)
|
||||||
|
|
||||||
elseif self.state == "run" then
|
elseif self.state == "run" then
|
||||||
|
|
||||||
print("run")
|
--do animation
|
||||||
|
mobs.set_mob_animation(self, "run")
|
||||||
|
|
||||||
|
--enable rotation locking
|
||||||
|
mobs.movement_rotation_lock(self)
|
||||||
|
|
||||||
|
--check for nodes to jump over
|
||||||
|
local node_in_front_of = mobs.jump_check(self)
|
||||||
|
|
||||||
|
if node_in_front_of == 1 then
|
||||||
|
|
||||||
|
mobs.jump(self)
|
||||||
|
|
||||||
|
--turn if on the edge of cliff
|
||||||
|
--(this is written like this because unlike
|
||||||
|
--jump_check which simply tells the mob to jump
|
||||||
|
--this requires a mob to turn, removing the
|
||||||
|
--ease of a full implementation for it in a single
|
||||||
|
--function)
|
||||||
|
elseif node_in_front_of == 2 or (self.fear_height ~= 0 and cliff_check(self,dtime)) then
|
||||||
|
--turn 45 degrees if so
|
||||||
|
quick_rotate(self,dtime)
|
||||||
|
--stop the mob so it doesn't fall off
|
||||||
|
mobs.set_velocity(self,0)
|
||||||
|
end
|
||||||
|
|
||||||
|
--only move forward if path is clear
|
||||||
|
if node_in_front_of == 0 or node_in_front_of == 1 then
|
||||||
|
--set the velocity of the mob
|
||||||
|
mobs.set_velocity(self,self.run_velocity)
|
||||||
|
end
|
||||||
|
|
||||||
elseif self.state == "attack" then
|
elseif self.state == "attack" then
|
||||||
|
|
||||||
|
@ -652,7 +695,7 @@ mobs.mob_step = function(self, dtime)
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
--do death logic (animation, poof, explosion, etc)
|
--do death logic (animation, poof, explosion, etc)
|
||||||
if self.health <= 0 then
|
if self.health <= 0 then
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
local minetest_after = minetest.after
|
local minetest_after = minetest.after
|
||||||
local minetest_sound_play = minetest.sound_play
|
local minetest_sound_play = minetest.sound_play
|
||||||
|
local minetest_dir_to_yaw = minetest.dir_to_yaw
|
||||||
|
|
||||||
local math_floor = math.floor
|
local math_floor = math.floor
|
||||||
local math_min = math.min
|
local math_min = math.min
|
||||||
|
@ -63,21 +64,24 @@ mobs.mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
--neutral passive mobs switch to neutral hostile
|
--turn skittish mobs away and RUN
|
||||||
if self.neutral then
|
if self.skittish then
|
||||||
|
|
||||||
--drop in variables for attacking (stops crash)
|
self.state = "run"
|
||||||
self.attacking = hitter
|
|
||||||
self.punch_timer = 0
|
|
||||||
|
|
||||||
self.hostile = true
|
self.run_timer = 5 --arbitrary 5 seconds
|
||||||
--hostile_cooldown timer is initialized here
|
|
||||||
self.hostile_cooldown_timer = self.hostile_cooldown
|
|
||||||
|
|
||||||
--initialize the group attack (check for other mobs in area, make them neutral hostile)
|
local pos1 = self.object:get_pos()
|
||||||
if self.group_attack then
|
pos1.y = 0
|
||||||
mobs.group_attack_initialization(self)
|
local pos2 = hitter:get_pos()
|
||||||
end
|
pos2.y = 0
|
||||||
|
|
||||||
|
|
||||||
|
local dir = vector_direction(pos2,pos1)
|
||||||
|
|
||||||
|
local yaw = minetest_dir_to_yaw(dir)
|
||||||
|
|
||||||
|
self.yaw = yaw
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ mobs:register_mob("mobs_mc:chicken", {
|
||||||
xp_min = 1,
|
xp_min = 1,
|
||||||
xp_max = 3,
|
xp_max = 3,
|
||||||
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.69, 0.2},
|
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.69, 0.2},
|
||||||
runaway = true,
|
skittish = true,
|
||||||
fall_slow = true,
|
fall_slow = true,
|
||||||
floats = 1,
|
floats = 1,
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
|
|
|
@ -32,7 +32,7 @@ local cow_def = {
|
||||||
max = 2,
|
max = 2,
|
||||||
looting = "common",},
|
looting = "common",},
|
||||||
},
|
},
|
||||||
runaway = true,
|
skittish = true,
|
||||||
sounds = {
|
sounds = {
|
||||||
random = "mobs_mc_cow",
|
random = "mobs_mc_cow",
|
||||||
damage = "mobs_mc_cow_hurt",
|
damage = "mobs_mc_cow_hurt",
|
||||||
|
|
|
@ -90,6 +90,7 @@ local horse = {
|
||||||
rotate = 270,
|
rotate = 270,
|
||||||
walk_velocity = 1,
|
walk_velocity = 1,
|
||||||
run_velocity = 8,
|
run_velocity = 8,
|
||||||
|
skittish = true,
|
||||||
visual_size = {x=3.0, y=3.0},
|
visual_size = {x=3.0, y=3.0},
|
||||||
collisionbox = {-0.69825, -0.01, -0.69825, 0.69825, 1.59, 0.69825},
|
collisionbox = {-0.69825, -0.01, -0.69825, 0.69825, 1.59, 0.69825},
|
||||||
animation = {
|
animation = {
|
||||||
|
|
|
@ -15,8 +15,11 @@ mobs:register_mob("mobs_mc:iron_golem", {
|
||||||
type = "npc",
|
type = "npc",
|
||||||
spawn_class = "passive",
|
spawn_class = "passive",
|
||||||
passive = true,
|
passive = true,
|
||||||
|
rotate = 270,
|
||||||
hp_min = 100,
|
hp_min = 100,
|
||||||
hp_max = 100,
|
hp_max = 100,
|
||||||
|
protect = true,
|
||||||
|
neutral = true,
|
||||||
breath_max = -1,
|
breath_max = -1,
|
||||||
collisionbox = {-0.7, -0.01, -0.7, 0.7, 2.69, 0.7},
|
collisionbox = {-0.7, -0.01, -0.7, 0.7, 2.69, 0.7},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
|
@ -39,7 +42,7 @@ mobs:register_mob("mobs_mc:iron_golem", {
|
||||||
reach = 3,
|
reach = 3,
|
||||||
group_attack = true,
|
group_attack = true,
|
||||||
attacks_monsters = true,
|
attacks_monsters = true,
|
||||||
attack_type = "dogfight",
|
attack_type = "punch",
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.iron_ingot,
|
{name = mobs_mc.items.iron_ingot,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
|
|
|
@ -30,6 +30,8 @@ local ocelot = {
|
||||||
type = "animal",
|
type = "animal",
|
||||||
spawn_class = "passive",
|
spawn_class = "passive",
|
||||||
can_despawn = true,
|
can_despawn = true,
|
||||||
|
rotate = 270,
|
||||||
|
skittish = true,
|
||||||
hp_min = 10,
|
hp_min = 10,
|
||||||
hp_max = 10,
|
hp_max = 10,
|
||||||
xp_min = 1,
|
xp_min = 1,
|
||||||
|
|
|
@ -5,7 +5,7 @@ local S = minetest.get_translator("mobs_mc")
|
||||||
mobs:register_mob("mobs_mc:pig", {
|
mobs:register_mob("mobs_mc:pig", {
|
||||||
type = "animal",
|
type = "animal",
|
||||||
spawn_class = "passive",
|
spawn_class = "passive",
|
||||||
runaway = true,
|
skittish = true,
|
||||||
rotate = 270,
|
rotate = 270,
|
||||||
hp_min = 10,
|
hp_min = 10,
|
||||||
hp_max = 10,
|
hp_max = 10,
|
||||||
|
|
|
@ -62,6 +62,7 @@ mobs:register_mob("mobs_mc:sheep", {
|
||||||
hp_max = 8,
|
hp_max = 8,
|
||||||
xp_min = 1,
|
xp_min = 1,
|
||||||
xp_max = 3,
|
xp_max = 3,
|
||||||
|
skittish = true,
|
||||||
collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.29, 0.45},
|
collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.29, 0.45},
|
||||||
rotate = 270,
|
rotate = 270,
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
|
|
Loading…
Reference in New Issue