mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-21 11:07:46 +01:00
65 lines
2.2 KiB
Plaintext
65 lines
2.2 KiB
Plaintext
// Slipnoms from chompstation downstream, credit to cadyn for the original PR.
|
|
|
|
/mob/living
|
|
var/is_slipping = FALSE
|
|
var/slip_vore_in_progress = FALSE
|
|
var/slip_protect = 1
|
|
|
|
/mob/living/proc/can_slip_vore(var/mob/living/target)
|
|
if(!target.is_slipping) //Obviously they have to be slipping to get slip vored
|
|
return FALSE
|
|
if(world.time <= target.slip_protect)
|
|
return FALSE
|
|
if(!(src.can_be_drop_pred && target.devourable && target.can_be_drop_prey)) //Make sure both of their prefs align with what we're gonna do.
|
|
return FALSE
|
|
if(!is_vore_predator(src)) //Check their bellies and stuff
|
|
return FALSE
|
|
if(!src.vore_selected) //Gotta have one selected as well.
|
|
return FALSE
|
|
if(!slip_vore || !target.slip_vore)
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/mob/living/proc/can_be_slip_vored_by(var/mob/living/target)
|
|
if(!target.is_slipping) //Obviously they have to be slipping to get slip vored
|
|
return FALSE
|
|
if(world.time <= target.slip_protect)
|
|
return FALSE
|
|
if(!(target.can_be_drop_pred && src.devourable && src.can_be_drop_prey)) //Make sure both of their prefs align with what we're gonna do.
|
|
return FALSE
|
|
if(!is_vore_predator(target)) //Check their bellies and stuff
|
|
return FALSE
|
|
if(!target.vore_selected) //Gotta have one selected as well.
|
|
return FALSE
|
|
if(!slip_vore || !target.slip_vore)
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/mob/living/Crossed(var/atom/movable/AM)
|
|
..()
|
|
var/mob/living/target = AM
|
|
if(istype(target) && !target.incorporeal_move && !src.incorporeal_move) //The slip vore begins
|
|
if(can_slip_vore(target) && !src.slip_vore_in_progress && !target.slip_vore_in_progress) //If we can vore them go for it
|
|
perform_the_nom(src,target,src,src.vore_selected,1)
|
|
target.slip_vore_in_progress = FALSE
|
|
target.is_slipping = FALSE
|
|
return
|
|
else if(can_be_slip_vored_by(target) && !src.slip_vore_in_progress && !target.slip_vore_in_progress) //Otherwise, if they can vore us, make it happen.
|
|
perform_the_nom(target,src,target,target.vore_selected,1)
|
|
slip_vore_in_progress = FALSE
|
|
is_slipping = FALSE
|
|
return
|
|
|
|
|
|
/mob/living/carbon/slip(var/slipped_on,stun_duration=8)
|
|
. = ..()
|
|
if(.)
|
|
is_slipping = TRUE
|
|
return .
|
|
|
|
/mob/living/update_canmove()
|
|
. = ..()
|
|
if(is_slipping && !lying)
|
|
is_slipping = FALSE
|
|
return .
|