Adds in Drop Noms

Information to include in PR
Panel: https://i.imgur.com/Ru0Mb2w.png
Pred falling onto prey: https://i.imgur.com/Y28TaJn.gifv
Prey falling onto pred: https://i.imgur.com/DzZlQbr.gifv
Person falling onto person w/ unaligned prefs:
https://i.imgur.com/DzZlQbr.gifv
Pred falling onto prey does anywhere from 0 to 30 damage to the pred
Prey falling into pred does 0 damage to both.
Unaligned causes the faller to suffer damage & a stun, person being
fallen on gets stunned
Dropping onto someone w/ dropnom: https://i.imgur.com/PywIfAI.png
Dropping onto someone w/ dropnom: https://i.imgur.com/H7o5g9f.png
This commit is contained in:
killer653
2017-11-12 00:32:54 -05:00
parent 4f289c84c6
commit b1ce51c2b3
6 changed files with 123 additions and 47 deletions
+5 -5
View File
@@ -352,11 +352,11 @@
"You hear something slam into \the [landing].")
playsound(loc, "punch", 25, 1, -1)
var/damage = 15 // Because wounds heal rather quickly, 15 should be enough to discourage jumping off but not be enough to ruin you, at least for the first time.
for(var/mob/M in landing.contents) //VOREStation Edit Start
if(M != src)
M.visible_message("<span class='danger'>\The [src] drops onto \the [M]!</span>")
M.Weaken(8)
damage = 5 //VOREStation Edit END
var/mob/living/carbon/human/pred = src //VOREStation Edit Start
var/belly = src.vore_selected
var/datum/belly/belly_target = pred.vore_organs[belly]
if(belly_target && belly_target.internal_contents.len != 0)
damage = 5 //VOREStation Edit End
apply_damage(rand(0, damage), BRUTE, BP_HEAD)
apply_damage(rand(0, damage), BRUTE, BP_TORSO)
apply_damage(rand(0, damage), BRUTE, BP_L_LEG)
+35 -41
View File
@@ -1,52 +1,46 @@
/*/mob/handle_fall(var/turf/landing)
for(var/mob/M in landing)
if(M != src && M.CheckFall(src))
return 1
for(var/atom/A in landing)
if(!A.CanPass(src, src.loc, 1, 0))
return FALSE
// TODO - Stairs should operate thru a different mechanism, not falling, to allow side-bumping.
// Now lets move there!
if(!Move(landing))
return 1
// Detect if we made a silent landing.
if(locate(/obj/structure/stairs) in landing)
return 1
if(isopenspace(oldloc))
oldloc.visible_message("\The [src] falls down through \the [oldloc]!", "You hear something falling through the air.")
// If the turf has density, we give it first dibs
if (landing.density && landing.CheckFall(src))
return
// First hit objects in the turf!
for(var/atom/movable/A in landing)
if(A != src && A.CheckFall(src))
return
// If none of them stopped us, then hit the turf itself
landing.CheckFall(src)
*/
/mob/handle_fall(var/turf/landing)
/mob/living/handle_fall(var/turf/landing)
var/mob/drop_mob= locate(/mob, loc)
if(drop_mob)
drop_mob.visible_message("<span class='danger'>\The [drop_mob] is dropped onto by \the [src]!</span>")
if(drop_mob && drop_mob != src && ismob(drop_mob)) //Shitload of checks. This is because the game finds various ways to screw me over.
drop_mob.fall_impact(src)
// Then call parent to have us actually fall
return ..()
/mob/CheckFall(var/atom/movable/falling_atom)
return falling_atom.fall_impact(src)
/mob/fall_impact(var/atom/hit_atom)
if(ismob(hit_atom))
var/mob/M = hit_atom
M.visible_message("<span class='danger'>\The [src] falls onto \the [M]!</span>")
M.Weaken(8)
/* //Leaving this here to show my previous iterations which failed.
/mob/living/fall_impact(var/atom/hit_atom) //This is called even when a humanoid falls. Dunno why, it just does.
if(isliving(hit_atom)) //THIS WEAKENS THE PERSON FALLING & NOMS THE PERSON FALLEN ONTO. SRC is person fallen onto. hit_atom is the person falling. Confusing.
var/mob/living/pred = hit_atom
pred.visible_message("<span class='danger'>\The [pred] falls onto \the [src]! FALL IMPACT MOB</span>")
pred.Weaken(8) //Stun the person you're dropping onto! You /are/ suffering massive damage for a single stun.
if(isliving(hit_atom) && isliving(src))
var/mob/living/prey = src
if(pred.can_be_drop_pred && prey.can_be_drop_prey) //Is person falling pred & person being fallen onto prey?
pred.feed_grabbed_to_self_falling_nom(pred,prey)
else if(prey.can_be_drop_pred && pred.can_be_drop_prey) //Is person being fallen onto pred & person falling prey
pred.feed_grabbed_to_self_falling_nom(prey,pred) //oh, how the tables have turned.
*/
/mob/zshadow/fall_impact(var/atom/hit_atom) //You actually "fall" onto their shadow, first.
/*
var/floor_below = src.loc.below //holy fuck
for(var/mob/M in floor_below.contents)
if(M && M != src) //THIS WEAKENS THE MOBS YOU'RE FALLING ONTO
M.visible_message("<span class='danger'>\The [src] drops onto \the [M]! FALL IMPACT SHADOW WEAKEN 8</span>")
M.Weaken(8)
*/
if(isliving(hit_atom)) //THIS WEAKENS THE PERSON FALLING & NOMS THE PERSON FALLEN ONTO. SRC is person fallen onto. hit_atom is the person falling. Confusing.
var/mob/living/pred = hit_atom
pred.visible_message("<span class='danger'>\The [hit_atom] falls onto \the [src]!</span>")
pred.Weaken(8) //Stun the person you're dropping onto! You /are/ suffering massive damage for a single stun.
var/mob/living/prey = src.owner //The shadow's owner
if(isliving(prey))
if(pred.can_be_drop_pred && prey.can_be_drop_prey) //Is person falling pred & person being fallen onto prey?
pred.feed_grabbed_to_self_falling_nom(pred,prey)
else if(prey.can_be_drop_pred && pred.can_be_drop_prey) //Is person being fallen onto pred & person falling prey
pred.feed_grabbed_to_self_falling_nom(prey,pred) //oh, how the tables have turned.
else
prey.Weaken(8) //Just fall onto them if neither of the above apply.
/mob/proc/CanZPass(atom/A, direction)
if(z == A.z) //moving FROM this turf