From 9aa77b7df1840c4207b7306c7cb701718cef2da6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 26 Dec 2017 15:58:02 -0600 Subject: [PATCH] [MIRROR] Rebalances virus healing (#4543) * Rebalances virus healing (#33815) * Rebalances virus healing * carbon * Rebalances virus healing --- code/datums/diseases/advance/symptoms/heal.dm | 152 +++++++++--------- 1 file changed, 77 insertions(+), 75 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 104a4c00c2..4f208b826b 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -1,10 +1,10 @@ /datum/symptom/heal name = "Basic Healing (does nothing)" //warning for adminspawn viruses desc = "You should not be seeing this." - stealth = 1 - resistance = -4 - stage_speed = -4 - transmittable = -4 + stealth = 0 + resistance = 0 + stage_speed = 0 + transmittable = 0 level = 0 //not obtainable base_message_chance = 20 //here used for the overlays symptom_delay_min = 1 @@ -22,7 +22,6 @@ /datum/symptom/heal/Activate(datum/disease/advance/A) if(!..()) return - //100% chance to activate for slow but consistent healing var/mob/living/M = A.affected_mob switch(A.stage) if(4, 5) @@ -45,20 +44,20 @@ return TRUE -/datum/symptom/heal/toxin +/datum/symptom/heal/starlight name = "Starlight Condensation" - desc = "The virus reacts to direct starlight, producing regenerative chemicals that can cure toxin damage." - stealth = 1 - resistance = -3 - stage_speed = -3 - transmittable = -3 + desc = "The virus reacts to direct starlight, producing regenerative chemicals. Works best against toxin-based damage." + stealth = -1 + resistance = -2 + stage_speed = 0 + transmittable = 1 level = 6 passive_message = "You miss the feeling of starlight on your skin." var/nearspace_penalty = 0.3 threshold_desc = "Stage Speed 6: Increases healing speed.
\ Transmission 6: Removes penalty for only being close to space." -/datum/symptom/heal/toxin/Start(datum/disease/advance/A) +/datum/symptom/heal/starlight/Start(datum/disease/advance/A) if(!..()) return if(A.properties["transmission"] >= 6) @@ -66,7 +65,7 @@ if(A.properties["stage_rate"] >= 6) power = 2 -/datum/symptom/heal/toxin/CanHeal(datum/disease/advance/A) +/datum/symptom/heal/starlight/CanHeal(datum/disease/advance/A) var/mob/living/M = A.affected_mob if(istype(get_turf(M), /turf/open/space)) return power @@ -75,15 +74,25 @@ if(istype(T, /turf/open/space)) return power * nearspace_penalty -/datum/symptom/heal/toxin/Heal(mob/living/M, datum/disease/advance/A, actual_power) +/datum/symptom/heal/starlight/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) var/heal_amt = actual_power if(M.getToxLoss() && prob(5)) - to_chat(M, "Your skin tingles as the starlight purges toxins from your bloodstream.") - M.adjustToxLoss(-heal_amt) + to_chat(M, "Your skin tingles as the starlight seems to heal you.") + + M.adjustToxLoss(-(4 * heal_amt)) //most effective on toxins + + var/list/parts = M.get_damaged_bodyparts(1,1) + + if(!parts.len) + return + + for(var/obj/item/bodypart/L in parts) + if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len)) + M.update_damage_overlays() return 1 -/datum/symptom/heal/toxin/passive_message_condition(mob/living/M) - if(M.getToxLoss()) +/datum/symptom/heal/starlight/passive_message_condition(mob/living/M) + if(M.getBruteLoss() || M.getFireLoss() || M.getToxLoss()) return TRUE return FALSE @@ -91,7 +100,7 @@ name = "Toxolysis" stealth = 0 resistance = -2 - stage_speed = -2 + stage_speed = 2 transmittable = -2 level = 7 var/food_conversion = FALSE @@ -153,58 +162,50 @@ to_chat(C, "You feel an odd gurgle in your stomach, as if it was working much faster than normal.") return 1 -/datum/symptom/heal/brute - name = "Cellular Molding" - desc = "The virus is able to shift cells around when in conditions of high heat, repairing existing physical damage." - stealth = 1 - resistance = -3 - stage_speed = -3 - transmittable = -3 +/datum/symptom/heal/darkness + name = "Nocturnal Regeneration" + desc = "The virus is able to mend the host's flesh when in conditions of low light, repairing physical damage. More effective against brute damage." + stealth = 2 + resistance = -1 + stage_speed = -2 + transmittable = -1 level = 6 - passive_message = "You feel the flesh pulsing under your skin for a moment, but it's too cold to move." + passive_message = "You feel tingling on your skin as light passes over it." threshold_desc = "Stage Speed 8: Doubles healing speed." -/datum/symptom/heal/brute/Start(datum/disease/advance/A) +/datum/symptom/heal/darkness/Start(datum/disease/advance/A) if(!..()) return if(A.properties["stage_rate"] >= 8) power = 2 -/datum/symptom/heal/brute/CanHeal(datum/disease/advance/A) +/datum/symptom/heal/darkness/CanHeal(datum/disease/advance/A) var/mob/living/M = A.affected_mob - switch(M.bodytemperature) - if(0 to 340) - return FALSE - if(340 to BODYTEMP_HEAT_DAMAGE_LIMIT) - . = 0.3 * power - if(BODYTEMP_HEAT_DAMAGE_LIMIT to 400) - . = 0.75 * power - if(400 to 460) - . = power - else - . = 1.5 * power + var/light_amount = 0 + if(isturf(M.loc)) //else, there's considered to be no light + var/turf/T = M.loc + light_amount = min(1,T.get_lumcount()) - 0.5 + if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) + return power - if(M.on_fire) - . *= 2 - -/datum/symptom/heal/brute/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) +/datum/symptom/heal/darkness/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) var/heal_amt = 2 * actual_power - var/list/parts = M.get_damaged_bodyparts(1,0) //brute only + var/list/parts = M.get_damaged_bodyparts(1,1) if(!parts.len) return if(prob(5)) - to_chat(M, "You feel your flesh moving beneath your heated skin, mending your wounds.") + to_chat(M, "The darkness soothes and mends your wounds.") for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(heal_amt/parts.len, 0)) + if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len * 0.5)) //more effective on brute M.update_damage_overlays() return 1 -/datum/symptom/heal/brute/passive_message_condition(mob/living/M) - if(M.getBruteLoss()) +/datum/symptom/heal/darkness/passive_message_condition(mob/living/M) + if(M.getBruteLoss() || M.getFireLoss()) return TRUE return FALSE @@ -212,8 +213,8 @@ name = "Regenerative Coma" desc = "The virus causes the host to fall into a death-like coma when severely damaged, then rapidly fixes the damage." stealth = 0 - resistance = 0 - stage_speed = -2 + resistance = 2 + stage_speed = -3 transmittable = -2 level = 8 passive_message = "The pain from your wounds makes you feel oddly sleepy..." @@ -283,20 +284,20 @@ return TRUE return FALSE -/datum/symptom/heal/burn +/datum/symptom/heal/water name = "Tissue Hydration" - desc = "The virus uses excess water inside and outside the body to repair burned tisue cells." - stealth = 1 - resistance = -3 - stage_speed = -3 - transmittable = -3 + desc = "The virus uses excess water inside and outside the body to repair damaged tissue cells. More effective against burns." + stealth = 0 + resistance = -1 + stage_speed = 0 + transmittable = 1 level = 6 - passive_message = "Your burned skin feels oddly dry..." + passive_message = "Your skin feels oddly dry..." var/absorption_coeff = 1 threshold_desc = "Resistance 5: Water is consumed at a much slower rate.
\ Stage Speed 7: Increases healing speed." -/datum/symptom/heal/burn/Start(datum/disease/advance/A) +/datum/symptom/heal/water/Start(datum/disease/advance/A) if(!..()) return if(A.properties["stage_rate"] >= 7) @@ -304,7 +305,7 @@ if(A.properties["stealth"] >= 2) absorption_coeff = 0.25 -/datum/symptom/heal/burn/CanHeal(datum/disease/advance/A) +/datum/symptom/heal/water/CanHeal(datum/disease/advance/A) . = 0 var/mob/living/M = A.affected_mob if(M.fire_stacks < 0) @@ -317,33 +318,33 @@ M.reagents.remove_reagent("water", 0.5 * absorption_coeff) . += power * 0.5 -/datum/symptom/heal/burn/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) +/datum/symptom/heal/water/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) var/heal_amt = 2 * actual_power - var/list/parts = M.get_damaged_bodyparts(0,1) //burn only + var/list/parts = M.get_damaged_bodyparts(1,1) //more effective on burns if(!parts.len) return if(prob(5)) - to_chat(M, "You feel yourself absorbing the water around you to soothe your burned skin.") + to_chat(M, "You feel yourself absorbing the water around you to soothe your damaged skin.") for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(0, heal_amt/parts.len)) + if(L.heal_damage(heal_amt/parts.len * 0.5, heal_amt/parts.len)) M.update_damage_overlays() return 1 -/datum/symptom/heal/burn/passive_message_condition(mob/living/M) - if(M.getFireLoss()) +/datum/symptom/heal/water/passive_message_condition(mob/living/M) + if(M.getBruteLoss() || M.getFireLoss()) return TRUE return FALSE /datum/symptom/heal/plasma name = "Plasma Fixation" - desc = "The virus draws plasma from the atmosphere and from inside the body to stabilize body temperature and heal burns." + desc = "The virus draws plasma from the atmosphere and from inside the body to heal and stabilize body temperature." stealth = 0 - resistance = 0 + resistance = 3 stage_speed = -2 transmittable = -2 level = 8 @@ -379,8 +380,6 @@ /datum/symptom/heal/plasma/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) var/heal_amt = 4 * actual_power - var/list/parts = M.get_damaged_bodyparts(0,1) //burn only - if(prob(5)) to_chat(M, "You feel yourself absorbing plasma inside and around you...") @@ -393,24 +392,25 @@ if(prob(5)) to_chat(M, "You feel warmer.") + M.adjustToxLoss(-heal_amt) + + var/list/parts = M.get_damaged_bodyparts(1,1) if(!parts.len) return if(prob(5)) - to_chat(M, "The pain from your burns fades rapidly.") - + to_chat(M, "The pain from your wounds fades rapidly.") for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(0, heal_amt/parts.len)) + if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len)) M.update_damage_overlays() return 1 - /datum/symptom/heal/radiation name = "Radioactive Resonance" desc = "The virus uses radiation to fix damage through dna mutations." stealth = -1 resistance = -2 - stage_speed = 0 + stage_speed = 2 transmittable = -3 level = 6 symptom_delay_min = 1 @@ -450,6 +450,8 @@ if(cellular_damage) M.adjustCloneLoss(-heal_amt * 0.5) + M.adjustToxLoss(-(2 * heal_amt)) + var/list/parts = M.get_damaged_bodyparts(1,1) if(!parts.len)