diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index 0179c60ef1..4a4e518261 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -315,7 +315,7 @@ bloodsuckerdatum.handle_eat_human_food(food_nutrition) -/datum/antagonist/bloodsucker/proc/handle_eat_human_food(var/food_nutrition) // Called from snacks.dm and drinks.dm +/datum/antagonist/bloodsucker/proc/handle_eat_human_food(food_nutrition, masquerade_override) // Called from snacks.dm and drinks.dm set waitfor = FALSE if(!owner.current || !iscarbon(owner.current)) return @@ -324,14 +324,14 @@ C.nutrition -= food_nutrition foodInGut += food_nutrition // Already ate some bad clams? Then we can back out, because we're already sick from it. - if (foodInGut != food_nutrition) + if(foodInGut != food_nutrition) return // Haven't eaten, but I'm in a Human Disguise. - else if (poweron_masquerade) + else if(poweron_masquerade && !masquerade_override) to_chat(C, "Your stomach turns, but your \"human disguise\" keeps the food down...for now.") // Keep looping until we purge. If we have activated our Human Disguise, we ignore the food. But it'll come up eventually... var/sickphase = 0 - while (foodInGut) + while(foodInGut) sleep(50) C.adjust_disgust(10 * sickphase) // Wait an interval... @@ -340,20 +340,20 @@ if(C.stat == DEAD) return // Put up disguise? Then hold off the vomit. - if(poweron_masquerade) + if(poweron_masquerade && !masquerade_override) if(sickphase > 0) to_chat(C, "Your stomach settles temporarily. You regain your composure...for now.") sickphase = 0 continue switch(sickphase) - if (1) + if(1) to_chat(C, "You feel unwell. You can taste ash on your tongue.") C.Stun(10) - if (2) + if(2) to_chat(C, "Your stomach turns. Whatever you ate tastes of grave dirt and brimstone.") C.Dizzy(15) C.Stun(13) - if (3) + if(3) to_chat(C, "You purge the food of the living from your viscera! You've never felt worse.") C.vomit(foodInGut * 4, foodInGut * 2, 0) // (var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1, var/toxic = 0) C.blood_volume = max(0, C.blood_volume - foodInGut * 2) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 7a3a7eeec2..fe8d1a0dba 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -579,8 +579,8 @@ All effects don't start immediately, but rather get worse over time; the rate is value = 1.3 /datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/C) - if((HAS_TRAIT(C, TRAIT_NOMARROW))) - return + if(isvamp(C)) + disgust_bloodsucker(FALSE, 1) //Bloodsuckers get SOME blood from it, for style reasons. if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) C.blood_volume = min((BLOOD_VOLUME_NORMAL*C.blood_ratio), C.blood_volume + 3) //Bloody Mary quickly restores blood loss. ..() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 231d37bdd8..46eaf3c0b1 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -13,7 +13,7 @@ shot_glass_icon_state = "shotglassred" pH = 7.4 -/datum/reagent/blood/reaction_mob(mob/living/L, method=TOUCH, reac_volume) +/datum/reagent/blood/reaction_mob(mob/living/L, method = TOUCH, reac_volume) if(data && data["viruses"]) for(var/thing in data["viruses"]) var/datum/disease/D = thing @@ -26,6 +26,9 @@ else //ingest, patch or inject L.ForceContractDisease(D) + if(data["blood_type"] == "SY") + disgust_bloodsucker(L, FALSE, -5, TRUE) + if(iscarbon(L)) var/mob/living/carbon/C = L var/blood_id = C.get_blood_id() @@ -175,15 +178,22 @@ /datum/reagent/blood/tomato data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"="SY","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) name = "Tomato Blood" - description = "This highly resembles blood, but it doesnt actually function like blood." + description = "This highly resembles blood, but it doesnt actually function like it, resembling more ketchup, with a more blood-like consistency." taste_description = "sap" //Like tree sap? pH = 7.45 -/datum/reagent/blood/tomato/reaction_mob(mob/living/L, method=TOUCH, reac_volume) +/datum/reagent/blood/tomato/reaction_mob(mob/living/L, method = TOUCH, reac_volume) ..() - if(isvamp(L)) - var/datum/antagonist/bloodsucker/bloodsuckerdatum = L.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - bloodsuckerdatum.handle_eat_human_food(reac_volume * 2) + disgust_bloodsucker(L, reac_volume * 2, -5, TRUE) + +/datum/reagent/proc/disgust_bloodsucker(mob/living/carbon/C, disgust, blood_change, force) + if(isvamp(C)) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = C.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if(disgust) + bloodsuckerdatum.handle_eat_human_food(disgust, force) + if(blood_change) + bloodsuckerdatum.AddBloodVolume(blood_change) + /datum/reagent/blood/jellyblood/on_mob_life(mob/living/carbon/M) if(prob(10))