Merge pull request #17941 from Cheridan/cleaning_vomit

Ends Flyman Starvation
This commit is contained in:
Joan Lung
2016-05-27 16:14:03 -04:00
3 changed files with 39 additions and 44 deletions

View File

@@ -535,40 +535,43 @@
add_abilities_to_panel() add_abilities_to_panel()
/mob/living/carbon/proc/vomit(var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1) /mob/living/carbon/proc/vomit(var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1, var/toxic = 0)
if(src.is_muzzled())
if(message)
src << "<span class='warning'>The muzzle prevents you from vomiting!</span>"
return 0
if(stun)
Stun(4)
if(nutrition < 100 && !blood) if(nutrition < 100 && !blood)
if(message) if(message)
visible_message("<span class='warning'>[src] dry heaves!</span>", \ visible_message("<span class='warning'>[src] dry heaves!</span>", \
"<span class='userdanger'>You try to throw up, but there's nothing your stomach!</span>") "<span class='userdanger'>You try to throw up, but there's nothing your stomach!</span>")
if(stun) if(stun)
Weaken(10) Weaken(10)
return 1
if(is_mouth_covered()) //make this add a blood/vomit overlay later it'll be hilarious
if(message)
visible_message("<span class='danger'>[src] throws up all over themself!</span>", \
"<span class='userdanger'>You throw up all over yourself!</span>")
distance = 0
else else
if(message) if(message)
visible_message("<span class='danger'>[src] throws up!</span>", \ visible_message("<span class='danger'>[src] throws up!</span>", "<span class='userdanger'>You throw up!</span>")
"<span class='userdanger'>You throw up!</span>")
playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1) if(stun)
var/turf/T = get_turf(src) Stun(4)
for(var/i=0 to distance)
if(blood) playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1)
if(T) var/turf/T = get_turf(src)
T.add_blood_floor(src) for(var/i=0 to distance)
if(stun) if(blood)
adjustBruteLoss(3) if(T)
else T.add_blood_floor(src)
if(T) if(stun)
T.add_vomit_floor(src) adjustBruteLoss(3)
nutrition -= lost_nutrition else
if(stun) if(T)
adjustToxLoss(-3) T.add_vomit_floor(src, 0)//toxic barf looks different
T = get_step(T, dir) nutrition -= lost_nutrition
if (is_blocked_turf(T)) adjustToxLoss(-3)
break T = get_step(T, dir)
if (is_blocked_turf(T))
break
return 1 return 1

View File

@@ -253,28 +253,17 @@
reagents.metabolize(src, can_overdose=1) reagents.metabolize(src, can_overdose=1)
dna.species.handle_chemicals_in_body(src) dna.species.handle_chemicals_in_body(src)
/mob/living/carbon/human/handle_random_events() /mob/living/carbon/human/handle_random_events()
// Puke if toxloss is too high //Puke if toxloss is too high
if(!stat) if(!stat)
if (getToxLoss() >= 45 && nutrition > 20) if(getToxLoss() >= 45 && nutrition > 20)
lastpuke ++ lastpuke ++
if(lastpuke >= 25) // about 25 second delay I guess if(lastpuke >= 25) // about 25 second delay I guess
Stun(5) vomit(20, 0, 1, 0, 1, 1)
visible_message("<span class='danger'>[src] throws up!</span>", \
"<span class='userdanger'>[src] throws up!</span>")
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
var/turf/location = loc
if (istype(location, /turf))
location.add_vomit_floor(src, 1)
nutrition -= 20
adjustToxLoss(-3)
// make it so you can only puke so fast
lastpuke = 0 lastpuke = 0
/mob/living/carbon/human/has_smoke_protection() /mob/living/carbon/human/has_smoke_protection()
if(wear_mask) if(wear_mask)
if(wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT) if(wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT)
@@ -288,6 +277,8 @@
if(NOBREATH in dna.species.specflags) if(NOBREATH in dna.species.specflags)
. = 1 . = 1
return . return .
/mob/living/carbon/human/proc/handle_embedded_objects() /mob/living/carbon/human/proc/handle_embedded_objects()
for(var/X in bodyparts) for(var/X in bodyparts)
var/obj/item/bodypart/BP = X var/obj/item/bodypart/BP = X
@@ -304,6 +295,7 @@
if(!has_embedded_objects()) if(!has_embedded_objects())
clear_alert("embeddedobject") clear_alert("embeddedobject")
/mob/living/carbon/human/proc/handle_heart() /mob/living/carbon/human/proc/handle_heart()
CHECK_DNA_AND_SPECIES(src) CHECK_DNA_AND_SPECIES(src)
var/needs_heart = (!(NOBLOOD in dna.species.specflags)) var/needs_heart = (!(NOBLOOD in dna.species.specflags))

View File

@@ -397,9 +397,9 @@
/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) /datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(istype(chem,/datum/reagent/consumable)) if(istype(chem,/datum/reagent/consumable))
var/datum/reagent/consumable/nutri_check = chem var/datum/reagent/consumable/nutri_check = chem
if(nutri_check.nutriment_factor >0) if(nutri_check.nutriment_factor > 0)
var/turf/pos = get_turf(H) var/turf/pos = get_turf(H)
H.vomit() H.vomit(0, 0, 0, 1, 1)
playsound(pos, 'sound/effects/splat.ogg', 50, 1) playsound(pos, 'sound/effects/splat.ogg', 50, 1)
H.visible_message("<span class='danger'>[H] vomits on the floor!</span>", \ H.visible_message("<span class='danger'>[H] vomits on the floor!</span>", \
"<span class='userdanger'>You throw up on the floor!</span>") "<span class='userdanger'>You throw up on the floor!</span>")