mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-29 07:59:01 +01:00
Fixes chemical damage over time and contamination (#22454)
Several fixes to chemicals that deal brute or burn. The problem was that their damage was being healed by autoheal faster than it could add up. Damage over time chemicals with more than 1dps would suddenly double in how fast they killed you when they crossed the autoheal threshold. This fixes that by adding a 60 second delay on wounds autohealing. This also affects ALL wounds. If a wound is bandaged it starts autohealing immediately, if it's still under the authoheal threshold. To compensate, I've reduced the damage of chlorine/phoron exposure, as this change effectively increased the damage by 1. Overall phoron/chlorine exposure is now more dangerous to naked people. Less dangerous to clothed people. Less dangerous to people who do the reasonable thing and put their internals on, previously this was actually worse for you. Also fixes contamination of items from chlorine and phoron: - Contaminated items now only damage the bodyparts they cover. - Contamination now checks if the item can be contaminated before contaminating it. - Contamination is now a 100% chance per tick, multiplied by the permeability of an item. (Most items are permeability 1, labcoats & other chem resistant medical clothing are 0.5, latex gloves are 0.1, biosuits, gas masks, etc are 0). - Contamination respects the permeability of your gloves, it's safe to handle contaminated items with latex gloves now. - Air tanks are now permeability 0, your internals won't get contaminated and force you to take them off. - Contaminated clothes now deal damage even if you put a spacesuit on over the top of them. - Life no longer checks every mob's internal organs for contamination every tick.
This commit is contained in:
@@ -466,7 +466,8 @@ ABSTRACT_TYPE(/singleton/reagent/alcohol)
|
||||
value = 0.2
|
||||
|
||||
/singleton/reagent/acid/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder)
|
||||
M.take_organ_damage(0, removed * power)
|
||||
M.take_organ_damage(0, removed * power, used_weapon = "Acid burns", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE)
|
||||
|
||||
|
||||
/singleton/reagent/acid/affect_breathe(var/mob/living/carbon/human/H, var/alien, var/removed, var/datum/reagents/holder)
|
||||
. = ..()
|
||||
@@ -516,7 +517,7 @@ ABSTRACT_TYPE(/singleton/reagent/alcohol)
|
||||
return
|
||||
|
||||
if(REAGENT_VOLUME(holder, type) < meltdose) // Not enough to melt anything
|
||||
M.take_organ_damage(0, removed * power * 0.2) //burn damage, since it causes chemical burns. Acid doesn't make bones shatter, like brute trauma would.
|
||||
M.take_organ_damage(0, removed * power * 0.2, used_weapon = "Acid burns", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE) //burn damage, since it causes chemical burns. Acid doesn't make bones shatter, like brute trauma would.
|
||||
return
|
||||
if(!M.unacidable && removed > 0)
|
||||
if(ishuman(M) && REAGENT_VOLUME(holder, type) >= meltdose)
|
||||
@@ -529,7 +530,7 @@ ABSTRACT_TYPE(/singleton/reagent/alcohol)
|
||||
H.emote("scream")
|
||||
H.status_flags |= DISFIGURED
|
||||
else
|
||||
M.take_organ_damage(0, removed * power * 0.1) // Balance. The damage is instant, so it's weaker. 10 units -> 5 damage, double for pacid. 120 units beaker could deal 60, but a) it's burn, which is not as dangerous, b) it's a one-use weapon, c) missing with it will splash it over the ground and d) clothes give some protection, so not everything will hit
|
||||
M.take_organ_damage(0, removed * power * 0.1, used_weapon = "Acid burns", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE) // Balance. The damage is instant, so it's weaker. 10 units -> 5 damage, double for pacid. 120 units beaker could deal 60, but a) it's burn, which is not as dangerous, b) it's a one-use weapon, c) missing with it will splash it over the ground and d) clothes give some protection, so not everything will hit
|
||||
|
||||
/singleton/reagent/acid/touch_obj(var/obj/O, var/amount, var/datum/reagents/holder)
|
||||
if(O.unacidable)
|
||||
|
||||
@@ -420,7 +420,8 @@
|
||||
to_chat(M, SPAN_GOOD(pick("You feel pumped!", "Energy, energy, energy - so much energy!", "You could run a marathon!", "You can't sit still!", "It's difficult to focus right now... but that's not important!")))
|
||||
if(prob(5)) // average of 6 brute every 20 seconds.
|
||||
M.visible_message("[M] shudders violently.", "You shudder uncontrollably, it hurts.")
|
||||
M.take_organ_damage(6 * removed, 0)
|
||||
M.take_organ_damage(6 * removed, 0, used_weapon = "Stimm tissue damage", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE)
|
||||
|
||||
|
||||
/singleton/reagent/toxin/stimm/final_effect(mob/living/carbon/M, datum/reagents/holder)
|
||||
M.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/stimm)
|
||||
|
||||
@@ -798,7 +798,7 @@
|
||||
to_chat(M, SPAN_DANGER(pick("Your heart is beating rapidly!", "Your chest hurts!", "You've totally over-exerted yourself!")))
|
||||
if(prob(M.chem_doses[type] / 3))
|
||||
M.visible_message("<b>[M]</b> twitches violently, grimacing.", "You twitch violently and feel yourself sprain a joint.")
|
||||
M.take_organ_damage(5 * removed, 0)
|
||||
M.take_organ_damage(5 * removed, 0, used_weapon = "Hyperzine overdose", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE)
|
||||
M.adjustHalLoss(15)
|
||||
|
||||
/singleton/reagent/hyperzine/final_effect(mob/living/carbon/M, datum/reagents/holder)
|
||||
@@ -892,7 +892,7 @@
|
||||
|
||||
/singleton/reagent/hyronalin/overdose(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder)
|
||||
if(prob(60))
|
||||
M.take_organ_damage(4 * removed, 0) //Hyronaline OD deals brute damage to the same degree as Arithrazine
|
||||
M.take_organ_damage(8 * removed, 0, used_weapon = "Hyronaline overdose", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE)
|
||||
|
||||
/singleton/reagent/arithrazine
|
||||
name = "Arithrazine"
|
||||
@@ -922,11 +922,11 @@
|
||||
M.apply_radiation(-280 * removed)
|
||||
M.add_chemical_effect(CE_ITCH, M.chem_doses[type]/2)
|
||||
if(prob(60))
|
||||
M.take_organ_damage(8 * removed, 0)
|
||||
M.take_organ_damage(8 * removed, 0, used_weapon = "Arithrazine tissue damage", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE)
|
||||
|
||||
/singleton/reagent/arithrazine/overdose(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder)
|
||||
if(prob(50))
|
||||
M.take_organ_damage(6 * removed, 0) //Even more collateral damage dealt by arithrazine when overdosed.
|
||||
M.take_organ_damage(6 * removed, 0, used_weapon = "Arithrazine overdose", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE) //Even more collateral damage dealt by arithrazine when overdosed.
|
||||
|
||||
/singleton/reagent/thetamycin
|
||||
name = "Thetamycin"
|
||||
@@ -2081,7 +2081,7 @@
|
||||
to_chat(M, SPAN_WARNING(pick("You have a headache!", "Energy, energy, energy - so much energy!", "You can't sit still!", "It's difficult to focus right now... but that's not important!", "Your heart is beating rapidly!", "Your chest hurts!", "You've totally over-exerted yourself!")))
|
||||
if(prob(M.chem_doses[type] / 3))
|
||||
M.emote(pick("twitch", "blink_r", "shiver"))
|
||||
M.take_organ_damage(5 * removed, 0)
|
||||
M.take_organ_damage(5 * removed, 0, used_weapon = "Caffeine overdose", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE)
|
||||
M.adjustHalLoss(15)
|
||||
|
||||
/singleton/reagent/caffeine/final_effect(mob/living/carbon/M, alien, removed, datum/reagents/holder)
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
if((alien == IS_VAURCA) || (istype(P) && P.stage >= 3))
|
||||
return
|
||||
|
||||
M.take_organ_damage(0, removed * 0.3) //being splashed directly with phoron causes minor chemical burns
|
||||
M.take_organ_damage(0, removed * 0.3, used_weapon = "Phoron chemical burns", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE) //being splashed directly with phoron causes minor chemical burns
|
||||
if(prob(50))
|
||||
M.pl_effects()
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
if((alien == IS_VAURCA) || (istype(P) && P.stage >= 3))
|
||||
return
|
||||
|
||||
M.take_organ_damage(0, removed * 0.6) //Breathing phoron? Oh hell no boy my boy.
|
||||
M.take_organ_damage(0, removed * 0.6, used_weapon = "Phoron inhalation", damage_flags = DAMAGE_FLAG_IGNORE_PROSTHETICS, silent = TRUE) //Breathing phoron? Oh hell no boy my boy.
|
||||
if(prob(50))
|
||||
M.pl_effects()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user