forked from VoxeLibre/VoxeLibre
Merge pull request 'Add in head code elements (disabled for now)' (#1659) from jordan4ibanez/MineClone2:mineclone5 into mineclone5
Reviewed-on: MineClone2/MineClone2#1659
This commit is contained in:
commit
7551f201b9
|
@ -368,9 +368,40 @@ function mobs:register_mob(name, def)
|
||||||
|
|
||||||
|
|
||||||
--head code variables
|
--head code variables
|
||||||
|
--defaults are for the cow's default
|
||||||
|
--because I don't know what else to set them
|
||||||
|
--to :P
|
||||||
|
|
||||||
has_head = def.has_head or false,
|
has_head = def.has_head or false,
|
||||||
head_bone = def.head_bone,
|
head_bone = def.head_bone,
|
||||||
|
|
||||||
|
--you must use these to adjust the mob's head positions
|
||||||
|
|
||||||
|
--has_head is used as a logic gate (quick easy check)
|
||||||
|
has_head = def.has_head or false,
|
||||||
|
--head_bone is the actual bone in the model which the head
|
||||||
|
--is attached to for animation
|
||||||
|
head_bone = def.head_bone or "head",
|
||||||
|
|
||||||
|
--this part controls the base position of the head calculations
|
||||||
|
--localized to the mob's visual yaw when gotten (self.object:get_yaw())
|
||||||
|
--you can enable the debug in /mob_functions/head_logic.lua by uncommenting the
|
||||||
|
--particle spawner code
|
||||||
|
head_height_offset = def.head_height_offset or 1.0525,
|
||||||
|
head_direction_offset = def.head_direction_offset or 0.5,
|
||||||
|
|
||||||
|
--this part controls the visual of the head
|
||||||
|
head_bone_pos_y = def.head_bone_pos_y or 3.6,
|
||||||
|
head_bone_pos_z = def.head_bone_pos_z or -0.6,
|
||||||
|
head_pitch_modifier = def.head_pitch_modifier or 0,
|
||||||
|
|
||||||
|
--these variables are switches in case the model
|
||||||
|
--moves the wrong way
|
||||||
|
swap_y_with_x = def.swap_y_with_x or false,
|
||||||
|
reverse_head_yaw = def.reverse_head_yaw or false,
|
||||||
|
|
||||||
|
--END HEAD CODE VARIABLES
|
||||||
|
|
||||||
--end j4i stuff
|
--end j4i stuff
|
||||||
|
|
||||||
-- MCL2 extensions
|
-- MCL2 extensions
|
||||||
|
|
|
@ -832,8 +832,11 @@ mobs.mob_step = function(self, dtime)
|
||||||
|
|
||||||
|
|
||||||
--DEBUG TIME!
|
--DEBUG TIME!
|
||||||
|
--REMEMBER TO MOVE THIS AFTER DEATH CHECK
|
||||||
|
|
||||||
--mobs.do_head_logic(self,dtime)
|
--if self.has_head then
|
||||||
|
-- mobs.do_head_logic(self,dtime)
|
||||||
|
--end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -855,9 +858,6 @@ mobs.mob_step = function(self, dtime)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--make it so mobs do not glitch out when walking around/jumping
|
|
||||||
mobs.swap_auto_step_height_adjust(self)
|
|
||||||
|
|
||||||
--color modifier which coincides with the pause_timer
|
--color modifier which coincides with the pause_timer
|
||||||
if self.old_health and self.health < self.old_health then
|
if self.old_health and self.health < self.old_health then
|
||||||
self.object:set_texture_mod("^[colorize:red:120")
|
self.object:set_texture_mod("^[colorize:red:120")
|
||||||
|
@ -895,9 +895,6 @@ mobs.mob_step = function(self, dtime)
|
||||||
|
|
||||||
mobs.random_sound_handling(self,dtime)
|
mobs.random_sound_handling(self,dtime)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--mobs drowning mechanic
|
--mobs drowning mechanic
|
||||||
if not self.breathes_in_water then
|
if not self.breathes_in_water then
|
||||||
|
|
||||||
|
@ -1112,6 +1109,9 @@ mobs.mob_step = function(self, dtime)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--make it so mobs do not glitch out when walking around/jumping
|
||||||
|
mobs.swap_auto_step_height_adjust(self)
|
||||||
|
|
||||||
|
|
||||||
-- can mob be pushed, if so calculate direction -- do this last (overrides everything)
|
-- can mob be pushed, if so calculate direction -- do this last (overrides everything)
|
||||||
if self.pushable then
|
if self.pushable then
|
||||||
|
|
|
@ -1,12 +1,56 @@
|
||||||
local vector_new = vector.new
|
local vector_new = vector.new
|
||||||
|
|
||||||
|
|
||||||
|
--converts yaw to degrees
|
||||||
|
local degrees = function(yaw)
|
||||||
|
return(yaw*180.0/math.pi)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
mobs.do_head_logic = function(self,dtime)
|
mobs.do_head_logic = function(self,dtime)
|
||||||
|
|
||||||
--local yaw = self.object:get_yaw()
|
local player = minetest.get_player_by_name("singleplayer")
|
||||||
|
|
||||||
|
local look_at = player:get_pos()
|
||||||
|
look_at.y = look_at.y + player:get_properties().eye_height
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--local bone_pos = vector_new(0,5,0)
|
|
||||||
|
local pos = self.object:get_pos()
|
||||||
|
|
||||||
|
local body_yaw = self.object:get_yaw()
|
||||||
|
|
||||||
|
local body_dir = minetest.yaw_to_dir(body_yaw)
|
||||||
|
|
||||||
|
|
||||||
|
pos.y = pos.y + self.head_height_offset
|
||||||
|
|
||||||
|
local head_offset = vector.multiply(body_dir, self.head_direction_offset)
|
||||||
|
|
||||||
|
pos = vector.add(pos, head_offset)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
minetest.add_particle({
|
||||||
|
pos = pos,
|
||||||
|
velocity = {x=0, y=0, z=0},
|
||||||
|
acceleration = {x=0, y=0, z=0},
|
||||||
|
expirationtime = 0.2,
|
||||||
|
size = 1,
|
||||||
|
texture = "default_dirt.png",
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
local bone_pos = vector_new(0,0,0)
|
||||||
|
|
||||||
|
|
||||||
|
--(horizontal)
|
||||||
|
bone_pos.y = self.head_bone_pos_y
|
||||||
|
|
||||||
|
--(vertical)
|
||||||
|
bone_pos.z = self.head_bone_pos_z
|
||||||
|
|
||||||
--print(yaw)
|
--print(yaw)
|
||||||
|
|
||||||
|
@ -15,8 +59,53 @@ mobs.do_head_logic = function(self,dtime)
|
||||||
--bone_rot.x = bone_rot.x + (dtime * 10)
|
--bone_rot.x = bone_rot.x + (dtime * 10)
|
||||||
--bone_rot.z = bone_rot.z + (dtime * 10)
|
--bone_rot.z = bone_rot.z + (dtime * 10)
|
||||||
|
|
||||||
--self.object:set_bone_position("head", bone_pos, bone_rot)
|
|
||||||
|
|
||||||
|
local head_yaw
|
||||||
|
head_yaw = minetest.dir_to_yaw(vector.direction(pos,look_at)) - body_yaw
|
||||||
|
|
||||||
|
if self.reverse_head_yaw then
|
||||||
|
head_yaw = head_yaw * -1
|
||||||
|
end
|
||||||
|
|
||||||
|
--over rotation protection
|
||||||
|
--stops radians from going out of spec
|
||||||
|
if head_yaw > math.pi then
|
||||||
|
head_yaw = head_yaw - (math.pi * 2)
|
||||||
|
elseif head_yaw < -math.pi then
|
||||||
|
head_yaw = head_yaw + (math.pi * 2)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local check_failed = false
|
||||||
|
--upper check + 90 degrees or upper math.radians (3.14/2)
|
||||||
|
if head_yaw > math.pi - (math.pi/2) then
|
||||||
|
head_yaw = 0
|
||||||
|
check_failed = true
|
||||||
|
--lower check - 90 degrees or lower negative math.radians (-3.14/2)
|
||||||
|
elseif head_yaw < -math.pi + (math.pi/2) then
|
||||||
|
head_yaw = 0
|
||||||
|
check_failed = true
|
||||||
|
end
|
||||||
|
|
||||||
|
local head_pitch = 0
|
||||||
|
|
||||||
|
--DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG
|
||||||
|
--head_yaw = 0
|
||||||
|
--DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG
|
||||||
|
|
||||||
|
if not check_failed then
|
||||||
|
head_pitch = minetest.dir_to_yaw(vector.new(vector.distance(vector.new(pos.x,0,pos.z),vector.new(look_at.x,0,look_at.z)),0,pos.y-look_at.y))+(math.pi/2)
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.head_pitch_modifier then
|
||||||
|
head_pitch = head_pitch + self.head_pitch_modifier
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.swap_y_with_x then
|
||||||
|
self.object:set_bone_position(self.head_bone, bone_pos, vector_new(degrees(head_pitch),degrees(head_yaw),0))
|
||||||
|
else
|
||||||
|
self.object:set_bone_position(self.head_bone, bone_pos, vector_new(degrees(head_pitch),0,degrees(head_yaw)))
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--set_bone_position([bone, position, rotation])
|
--set_bone_position([bone, position, rotation])
|
||||||
|
|
|
@ -108,8 +108,23 @@ mobs:register_mob("mobs_mc:chicken", {
|
||||||
gain = 1.0,
|
gain = 1.0,
|
||||||
max_hear_distance = 16,
|
max_hear_distance = 16,
|
||||||
}, true)
|
}, true)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
--head code
|
||||||
|
has_head = true,
|
||||||
|
head_bone = "head",
|
||||||
|
|
||||||
|
swap_y_with_x = false,
|
||||||
|
reverse_head_yaw = false,
|
||||||
|
|
||||||
|
head_bone_pos_y = 1.675,
|
||||||
|
head_bone_pos_z = 0,
|
||||||
|
|
||||||
|
head_height_offset = 0.55,
|
||||||
|
head_direction_offset = 0.0925,
|
||||||
|
|
||||||
|
head_pitch_modifier = -math.pi/2,
|
||||||
|
--end head code
|
||||||
})
|
})
|
||||||
|
|
||||||
--spawn
|
--spawn
|
||||||
|
|
|
@ -84,6 +84,21 @@ local cow_def = {
|
||||||
follow = mobs_mc.items.wheat,
|
follow = mobs_mc.items.wheat,
|
||||||
view_range = 10,
|
view_range = 10,
|
||||||
fear_height = 4,
|
fear_height = 4,
|
||||||
|
|
||||||
|
--head code
|
||||||
|
has_head = true,
|
||||||
|
head_bone = "head",
|
||||||
|
|
||||||
|
swap_y_with_x = false,
|
||||||
|
reverse_head_yaw = false,
|
||||||
|
|
||||||
|
head_bone_pos_y = 3.6,
|
||||||
|
head_bone_pos_z = -0.6,
|
||||||
|
|
||||||
|
head_height_offset = 1.0525,
|
||||||
|
head_direction_offset = 0.5,
|
||||||
|
head_pitch_modifier = 0,
|
||||||
|
--end head code
|
||||||
}
|
}
|
||||||
|
|
||||||
mobs:register_mob("mobs_mc:cow", cow_def)
|
mobs:register_mob("mobs_mc:cow", cow_def)
|
||||||
|
|
|
@ -53,6 +53,21 @@ mobs:register_mob("mobs_mc:creeper", {
|
||||||
allow_fuse_reset = true,
|
allow_fuse_reset = true,
|
||||||
stop_to_explode = true,
|
stop_to_explode = true,
|
||||||
|
|
||||||
|
--head code
|
||||||
|
has_head = true,
|
||||||
|
head_bone = "head",
|
||||||
|
|
||||||
|
swap_y_with_x = true,
|
||||||
|
reverse_head_yaw = true,
|
||||||
|
|
||||||
|
head_bone_pos_y = 2.4,
|
||||||
|
head_bone_pos_z = 0,
|
||||||
|
|
||||||
|
head_height_offset = 1.1,
|
||||||
|
head_direction_offset = 0,
|
||||||
|
head_pitch_modifier = 0,
|
||||||
|
--end head code
|
||||||
|
|
||||||
-- Force-ignite creeper with flint and steel and explode after 1.5 seconds.
|
-- Force-ignite creeper with flint and steel and explode after 1.5 seconds.
|
||||||
-- TODO: Make creeper flash after doing this as well.
|
-- TODO: Make creeper flash after doing this as well.
|
||||||
-- TODO: Test and debug this code.
|
-- TODO: Test and debug this code.
|
||||||
|
|
|
@ -224,6 +224,22 @@ mobs:register_mob("mobs_mc:enderman", {
|
||||||
max = 1,
|
max = 1,
|
||||||
looting = "common"},
|
looting = "common"},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
--head code
|
||||||
|
has_head = false,
|
||||||
|
head_bone = "head.low",
|
||||||
|
|
||||||
|
swap_y_with_x = false,
|
||||||
|
reverse_head_yaw = false,
|
||||||
|
|
||||||
|
head_bone_pos_y = 2.4,
|
||||||
|
head_bone_pos_z = 0,
|
||||||
|
|
||||||
|
head_height_offset = 1.1,
|
||||||
|
head_direction_offset = 0,
|
||||||
|
head_pitch_modifier = 0,
|
||||||
|
--end head code
|
||||||
|
|
||||||
animation = select_enderman_animation("normal"),
|
animation = select_enderman_animation("normal"),
|
||||||
_taken_node = "",
|
_taken_node = "",
|
||||||
do_custom = function(self, dtime)
|
do_custom = function(self, dtime)
|
||||||
|
|
|
@ -19,6 +19,22 @@ mobs:register_mob("mobs_mc:pig", {
|
||||||
"mobs_mc_pig.png", -- base
|
"mobs_mc_pig.png", -- base
|
||||||
"blank.png", -- saddle
|
"blank.png", -- saddle
|
||||||
}},
|
}},
|
||||||
|
|
||||||
|
--head code
|
||||||
|
has_head = true,
|
||||||
|
head_bone = "head",
|
||||||
|
|
||||||
|
swap_y_with_x = false,
|
||||||
|
reverse_head_yaw = false,
|
||||||
|
|
||||||
|
head_bone_pos_y = 2.4,
|
||||||
|
head_bone_pos_z = 0,
|
||||||
|
|
||||||
|
head_height_offset = 1.1,
|
||||||
|
head_direction_offset = 0,
|
||||||
|
head_pitch_modifier = 0,
|
||||||
|
--end head code
|
||||||
|
|
||||||
visual_size = {x=2.5, y=2.5},
|
visual_size = {x=2.5, y=2.5},
|
||||||
makes_footstep_sound = true,
|
makes_footstep_sound = true,
|
||||||
walk_velocity = 1,
|
walk_velocity = 1,
|
||||||
|
|
|
@ -78,6 +78,22 @@ mobs:register_mob("mobs_mc:sheep", {
|
||||||
makes_footstep_sound = true,
|
makes_footstep_sound = true,
|
||||||
walk_velocity = 1,
|
walk_velocity = 1,
|
||||||
run_velocity = 3,
|
run_velocity = 3,
|
||||||
|
|
||||||
|
--head code
|
||||||
|
has_head = true,
|
||||||
|
head_bone = "head",
|
||||||
|
|
||||||
|
swap_y_with_x = false,
|
||||||
|
reverse_head_yaw = false,
|
||||||
|
|
||||||
|
head_bone_pos_y = 3.6,
|
||||||
|
head_bone_pos_z = -0.6,
|
||||||
|
|
||||||
|
head_height_offset = 1.0525,
|
||||||
|
head_direction_offset = 0.5,
|
||||||
|
head_pitch_modifier = 0,
|
||||||
|
--end head code
|
||||||
|
|
||||||
drops = {
|
drops = {
|
||||||
{name = mobs_mc.items.mutton_raw,
|
{name = mobs_mc.items.mutton_raw,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
|
|
|
@ -34,6 +34,22 @@ local skeleton = {
|
||||||
"mcl_bows_bow_0.png", -- bow
|
"mcl_bows_bow_0.png", -- bow
|
||||||
"mobs_mc_skeleton.png", -- skeleton
|
"mobs_mc_skeleton.png", -- skeleton
|
||||||
} },
|
} },
|
||||||
|
|
||||||
|
--head code
|
||||||
|
has_head = false,
|
||||||
|
head_bone = "head",
|
||||||
|
|
||||||
|
swap_y_with_x = true,
|
||||||
|
reverse_head_yaw = true,
|
||||||
|
|
||||||
|
head_bone_pos_y = 2.4,
|
||||||
|
head_bone_pos_z = 0,
|
||||||
|
|
||||||
|
head_height_offset = 1.1,
|
||||||
|
head_direction_offset = 0,
|
||||||
|
head_pitch_modifier = 0,
|
||||||
|
--end head code
|
||||||
|
|
||||||
visual_size = {x=1, y=1},
|
visual_size = {x=1, y=1},
|
||||||
makes_footstep_sound = true,
|
makes_footstep_sound = true,
|
||||||
textures = {
|
textures = {
|
||||||
|
|
|
@ -30,6 +30,22 @@ local wolf = {
|
||||||
rotate = 270,
|
rotate = 270,
|
||||||
passive = false,
|
passive = false,
|
||||||
group_attack = true,
|
group_attack = true,
|
||||||
|
|
||||||
|
--head code
|
||||||
|
has_head = false,
|
||||||
|
head_bone = "head",
|
||||||
|
|
||||||
|
swap_y_with_x = false,
|
||||||
|
reverse_head_yaw = false,
|
||||||
|
|
||||||
|
head_bone_pos_y = 3.6,
|
||||||
|
head_bone_pos_z = -0.6,
|
||||||
|
|
||||||
|
head_height_offset = 1.0525,
|
||||||
|
head_direction_offset = 0.5,
|
||||||
|
head_pitch_modifier = 0,
|
||||||
|
--end head code
|
||||||
|
|
||||||
collisionbox = {-0.3, -0.00, -0.3, 0.3, 0.85, 0.3},
|
collisionbox = {-0.3, -0.00, -0.3, 0.3, 0.85, 0.3},
|
||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
mesh = "mobs_mc_wolf.b3d",
|
mesh = "mobs_mc_wolf.b3d",
|
||||||
|
|
|
@ -75,6 +75,22 @@ local zombie = {
|
||||||
damage = "mobs_mc_zombie_hurt",
|
damage = "mobs_mc_zombie_hurt",
|
||||||
distance = 16,
|
distance = 16,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
--head code
|
||||||
|
has_head = false,
|
||||||
|
head_bone = "Head",
|
||||||
|
|
||||||
|
swap_y_with_x = true,
|
||||||
|
reverse_head_yaw = true,
|
||||||
|
|
||||||
|
head_bone_pos_y = 2.4,
|
||||||
|
head_bone_pos_z = 0,
|
||||||
|
|
||||||
|
head_height_offset = 1.1,
|
||||||
|
head_direction_offset = 0,
|
||||||
|
head_pitch_modifier = 0,
|
||||||
|
--end head code
|
||||||
|
|
||||||
eye_height = 1.65,
|
eye_height = 1.65,
|
||||||
walk_velocity = 1,
|
walk_velocity = 1,
|
||||||
run_velocity = 3.5,
|
run_velocity = 3.5,
|
||||||
|
|
|
@ -43,6 +43,22 @@ local pigman = {
|
||||||
damage = "mobs_mc_zombiepig_hurt",
|
damage = "mobs_mc_zombiepig_hurt",
|
||||||
distance = 16,
|
distance = 16,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
--head code
|
||||||
|
has_head = false,
|
||||||
|
head_bone = "head",
|
||||||
|
|
||||||
|
swap_y_with_x = true,
|
||||||
|
reverse_head_yaw = true,
|
||||||
|
|
||||||
|
head_bone_pos_y = 2.4,
|
||||||
|
head_bone_pos_z = 0,
|
||||||
|
|
||||||
|
head_height_offset = 1.1,
|
||||||
|
head_direction_offset = 0,
|
||||||
|
head_pitch_modifier = 0,
|
||||||
|
--end head code
|
||||||
|
|
||||||
jump = true,
|
jump = true,
|
||||||
makes_footstep_sound = true,
|
makes_footstep_sound = true,
|
||||||
walk_velocity = .8,
|
walk_velocity = .8,
|
||||||
|
|
|
@ -168,11 +168,13 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
local c_x, c_y = unpack(player_collision(player))
|
local c_x, c_y = unpack(player_collision(player))
|
||||||
|
|
||||||
|
--[[
|
||||||
if player_velocity.x + player_velocity.y < .5 and c_x + c_y > 0 then
|
if player_velocity.x + player_velocity.y < .5 and c_x + c_y > 0 then
|
||||||
local add_velocity = player.add_player_velocity or player.add_velocity
|
local add_velocity = player.add_player_velocity or player.add_velocity
|
||||||
add_velocity(player, {x = c_x, y = 0, z = c_y})
|
add_velocity(player, {x = c_x, y = 0, z = c_y})
|
||||||
player_velocity = player:get_velocity() or player:get_player_velocity()
|
player_velocity = player:get_velocity() or player:get_player_velocity()
|
||||||
end
|
end
|
||||||
|
]]--
|
||||||
|
|
||||||
-- control head bone
|
-- control head bone
|
||||||
local pitch = - degrees(player:get_look_vertical())
|
local pitch = - degrees(player:get_look_vertical())
|
||||||
|
|
Loading…
Reference in New Issue