diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 6ea0ed6889..ff16d332fe 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -72,6 +72,7 @@ var/toxins_mod = 1 // Toxloss modifier var/radiation_mod = 1 // Radiation modifier var/flash_mod = 1 // Stun from blindness modifier. + var/chemOD_mod = 1 // Damage modifier for overdose var/vision_flags = SEE_SELF // Same flags as glasses. // Death vars. diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index ca005f7169..5015e19940 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -174,6 +174,7 @@ darksight = 4 flash_mod = 1.2 + chemOD_mod = 0.9 ambiguous_genders = TRUE diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 359aebe776..f37fb3b9b8 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -698,10 +698,9 @@ Note that amputating the affected organ does in fact remove the infection from t if(W.internal && owner.bodytemperature >= 170) var/bicardose = owner.reagents.get_reagent_amount("bicaridine") var/inaprovaline = owner.reagents.get_reagent_amount("inaprovaline") - if(!(W.can_autoheal() || (bicardose && inaprovaline))) //bicaridine and inaprovaline stop internal wounds from growing bigger with time, unless it is so small that it is already healing + var/myeldose = owner.reagents.get_reagent_amount("myelamine") + if(!(W.can_autoheal() || (bicardose && inaprovaline) || myeldose)) //bicaridine and inaprovaline stop internal wounds from growing bigger with time, unless it is so small that it is already healing W.open_wound(0.1 * wound_update_accuracy) - if(bicardose >= 30) //overdose of bicaridine begins healing IB - W.damage = max(0, W.damage - 0.2) owner.vessel.remove_reagent("blood", wound_update_accuracy * W.damage/40) //line should possibly be moved to handle_blood, so all the bleeding stuff is in one place. if(prob(1 * wound_update_accuracy)) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 9e7fbd461f..723db2ace7 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -26,7 +26,8 @@ var/touch_met = 0 var/dose = 0 var/max_dose = 0 - var/overdose = 0 + var/overdose = 0 //Amount at which overdose starts + var/overdose_mod = 2 //Modifier to overdose damage var/scannable = 0 // Shows up on health analyzers. var/affects_dead = 0 var/cup_icon_state = null @@ -60,8 +61,6 @@ return if(!affects_dead && M.stat == DEAD) return - if(overdose && (volume > overdose) && (location != CHEM_TOUCH)) - overdose(M, alien) var/removed = metabolism if(!mrate_static == TRUE) removed *= M.species.metabolic_rate @@ -80,6 +79,8 @@ affect_ingest(M, alien, removed) if(CHEM_TOUCH) affect_touch(M, alien, removed) + if(overdose && (volume > overdose) && (location != CHEM_TOUCH)) + overdose(M, alien, removed) remove_self(removed) return @@ -93,9 +94,13 @@ /datum/reagent/proc/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) return -/datum/reagent/proc/overdose(var/mob/living/carbon/M, var/alien) // Overdose effect. Doesn't happen instantly. - M.adjustToxLoss(REM) - return +/datum/reagent/proc/overdose(var/mob/living/carbon/M, var/alien, var/removed) // Overdose effect. Doesn't happen instantly. + if(alien == IS_DIONA) + return + if(ishuman(M)) + var/mob/living/carbon/human/H = M + overdose_mod *= H.species.chemOD_mod + M.adjustToxLoss(removed * overdose_mod) /datum/reagent/proc/initialize_data(var/newdata) // Called when the reagent is created. if(!isnull(newdata)) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm index 3712baa895..6760f8a9d9 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm @@ -32,6 +32,23 @@ if(alien != IS_DIONA) M.heal_organ_damage(6 * removed, 0) +/datum/reagent/bicaridine/overdose(var/mob/living/carbon/M, var/alien, var/removed) + ..() + var/wound_heal = 1.5 * removed + M.eye_blurry += (wound_heal) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + for(var/obj/item/organ/external/O in H.bad_external_organs) + for(var/datum/wound/W in O.wounds) + if(W.bleeding()) + W.damage = max(W.damage - wound_heal, 0) + if(W.damage <= 0) + O.wounds -= W + if(W.internal) + W.damage = max(W.damage - wound_heal, 0) + if(W.damage <= 0) + O.wounds -= W + /datum/reagent/kelotane name = "Kelotane" id = "kelotane" @@ -368,21 +385,23 @@ metabolism = REM * 0.5 overdose = REAGENTS_OVERDOSE * 0.5 scannable = 1 + var/repair_strength = 3 /datum/reagent/myelamine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return - M.eye_blurry += (3 * removed) + M.eye_blurry += (repair_strength * removed) if(ishuman(M)) var/mob/living/carbon/human/H = M + var/wound_heal = removed * repair_strength for(var/obj/item/organ/external/O in H.bad_external_organs) for(var/datum/wound/W in O.wounds) if(W.bleeding()) - W.damage = max(W.damage - removed, 0) + W.damage = max(W.damage - wound_heal, 0) if(W.damage <= 0) O.wounds -= W if(W.internal) - W.damage = max(W.damage - removed, 0) + W.damage = max(W.damage - wound_heal, 0) if(W.damage <= 0) O.wounds -= W diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index e13a73dd29..6e34257e4a 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -388,6 +388,7 @@ color = "#000067" metabolism = REM * 0.5 overdose = REAGENTS_OVERDOSE * 0.5 + overdose_mod = 5 //For that good, lethal feeling /datum/reagent/chloralhydrate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) @@ -413,6 +414,11 @@ if(effective_dose > 1 * threshold) M.adjustToxLoss(removed) +/datum/reagent/chloralhydrate/overdose(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.losebreath = (min(M.losebreath + 1, 10)) + M.adjustOxyLoss(removed * overdose_mod) + /datum/reagent/chloralhydrate/beer2 //disguised as normal beer for use by emagged brobots name = "Beer" id = "beer2" diff --git a/html/changelogs/Anewbe - Overdose.yml b/html/changelogs/Anewbe - Overdose.yml new file mode 100644 index 0000000000..62b4d3934c --- /dev/null +++ b/html/changelogs/Anewbe - Overdose.yml @@ -0,0 +1,38 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Anewbe + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Bicaridine and Myelamine should now properly repair internal bleeding." + - rscadd: "Overdoses are now more dangerous." + - rscadd: "Chloral Hydrate overdoses are now even more dangerous."