From c982ba7b1661683afd733c66053f4f77d214103d Mon Sep 17 00:00:00 2001 From: Sniblet <36427443+Sniblet@users.noreply.github.com> Date: Wed, 6 Dec 2023 20:56:32 -0500 Subject: [PATCH] Fixes and reworks panotoxin (#17813) * the pr! * changelog, overdose fiddling * more overdose fiddling. overdose now kills. * overdose hello?? * overdose is fine * associative list? dmdocs?? it still works * mayhap... you wanted... a space??/ * I... capitalize....? * dmdoc part final? --- .../mob/living/carbon/carbon_defines.dm | 2 + .../Chemistry-Reagents-Toxins.dm | 45 ++++++++++++++++++- .../reagents/reagent_containers/syringes.dm | 4 +- html/changelogs/sniblet-17813.yml | 30 +++++++++++++ 4 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 html/changelogs/sniblet-17813.yml diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index ae1dba2f410..51ba27967d1 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -16,6 +16,8 @@ var/pose = null var/list/chem_effects = list() var/list/chem_doses = list() + /// For keeping count of misc values (amount of damage, number of ticks, etc) + var/list/chem_tracking = list() var/intoxication = 0//Units of alcohol in their system var/datum/reagents/metabolism/bloodstr = null var/datum/reagents/metabolism/touching = null diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 9d3454abc90..65a022057c4 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -73,14 +73,55 @@ /singleton/reagent/toxin/panotoxin name = "Panotoxin" - description = "A strange poison from the strange panocelium mushroom that causes intense pain when injected." + description = "An insidious poison from the panocelium mushroom that causes mind-shattering pain. Known to cause fatal shock in small doses. Torturers dilute it." reagent_state = LIQUID color = "#008844" strength = 0 + overdose = 2 + od_minimum_dose = REAGENTS_OVERDOSE * 0.25 taste_description = "stinging needles" +/singleton/reagent/toxin/panotoxin/initial_effect(var/mob/living/carbon/human/M, var/alien, var/holder) + M.chem_tracking[/singleton/reagent/toxin/panotoxin] = 0 + /singleton/reagent/toxin/panotoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) - M.adjustHalLoss(removed*15) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(!H.can_feel_pain()) + return + if(prob(40)) + M.apply_effect(20, DAMAGE_PAIN) //Third of a stunbaton per proc! This gets really bad. + M.chem_tracking[/singleton/reagent/toxin/panotoxin] += 20 + else if(prob(5)) + M.Stun(4) + M.custom_pain(SPAN_DANGER("You feel [pick("a spike of horrific pain razing through every cell of your body","your insides bursting into screaming fire","your body trying to turn itself inside out","what death must be like")]!"), 40) + M.chem_tracking[/singleton/reagent/toxin/panotoxin] += 40 + M.visible_message(SPAN_WARNING("[M] [pick("writhes in agony!","seizes up!","contorts in pain!")]")) + +/singleton/reagent/toxin/panotoxin/overdose(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(!H.can_feel_pain()) + return + if(prob(5)) + M.visible_message(SPAN_WARNING("[M] [pick("twitches faintly...","quivers slightly...")]"), range = 2) + else if(prob(5)) + M.add_chemical_effect(CE_CARDIOTOXIC, 1) + M.custom_pain(SPAN_HIGHDANGER("You feel [pick("your innermost being rotting alive as it slides down a slope of sandpaper","death's crushing, scalding grip engulf you","your insides imploding into a horrific singularity","nothing at all but cold scorching agony","the end of everything, pouring into and suffusing you like a waterfall of needles")]!"), 120) + M.chem_tracking[/singleton/reagent/toxin/panotoxin] += 120 + M.visible_message(SPAN_WARNING("[M] [pick("tenses all over, and doesn't relax!","convulses violently!")]")) + +/singleton/reagent/toxin/panotoxin/final_effect(var/mob/living/carbon/human/M, var/alien, var/holder) + var/pain_to_refund = M.chem_tracking[/singleton/reagent/toxin/panotoxin] //5u does about 1900-2600 pain. + if(pain_to_refund > 80) + M.visible_message("[M] visibly untenses.") //Torturers should microdose. This saves them constant scans while preventing spam if IV'd. + to_chat(M, SPAN_GOOD("You feel the agony start to recede!")) + M.apply_effect(pain_to_refund * -0.5, DAMAGE_PAIN) //Without this, they can easily be trapped in deep pain shock for most of a round with no recourse in the game except for red nightshade. We only do half because a lot of it heals during the dose. + if(pain_to_refund > 4000) + to_chat(M, SPAN_WARNING("You're... free? Was life always so beautiful...?")) + M.apply_effect(pain_to_refund * -0.3, DAMAGE_PAIN) //If it's super bad, reduce further to mitigate OOC agony. We've been through multiple heart failures at this point. Let's be generous. + M.chem_tracking -= /singleton/reagent/toxin/panotoxin + pain_to_refund = null /singleton/reagent/toxin/phoron name = "Phoron" diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 00323f83dbf..83060e6b845 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -413,8 +413,8 @@ /obj/item/reagent_containers/syringe/drugs name = "Syringe (drugs)" - desc = "Contains aggressive drugs meant for torture." - reagents_to_add = list(/singleton/reagent/toxin/panotoxin = 5, /singleton/reagent/drugs/mindbreaker = 10) + desc = "Contains aggressive drugs meant for torture. Markered lines denote points at which to stop injecting." + reagents_to_add = list(/singleton/reagent/toxin/panotoxin = 1, /singleton/reagent/drugs/cryptobiolin = 4, /singleton/reagent/drugs/mindbreaker = 10) /obj/item/reagent_containers/syringe/drugs/Initialize() . = ..() diff --git a/html/changelogs/sniblet-17813.yml b/html/changelogs/sniblet-17813.yml new file mode 100644 index 00000000000..d3e0e5f97c6 --- /dev/null +++ b/html/changelogs/sniblet-17813.yml @@ -0,0 +1,30 @@ +# 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 +# balance +# admin +# backend +# security +# refactor + +author: Sniblet + +delete-after: True + +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# 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: "Panotoxin now works as described." + - tweak: "Changed how panotoxin is described. It now causes agonizing, life-changing, life-threatening pain in small doses." + - tweak: "Syringe (drugs) spawns now contain much less panotoxin. Otherwise they would just kill you."