Skip to content

Commit

Permalink
The Inversenning : Superior Healing Medications (tgstation#79342)
Browse files Browse the repository at this point in the history
Introducing new inverse reagents for existing superior healing
medications! This push includes...

**Benzoic Acid** : Inverse of Salicylic Acid. Robust fertilizer that
provides a decent range of benefits for plant life.

**Oxymetholone** : Inverse of Oxandrolone. Anabolic steroid that
promotes the growth of muscle during and after exercise.

**Bamethan** : Inverse of Salbutamol. Blood thinner that drastically
increases the chance of receiving bleeding wounds.

**Pendetide** : Inverse of Pentetic Acid. An unusual bioradioactive drug
that purges basic radiation healing chems. Also increases the severity
of radiation poisoning.

**Hyoscyamine** : Inverse of Atropine. Heals heart and stomach damage,
and slowly removes minor toxin damage.

**Ammoniated Sludge** : Inverse of Ammoniated Mercury. A ghastly looking
mess of mercury by-product which causes bursts of manic hysteria.

**Inreziniver** : Inverse of Rezadone. Makes the user horribly afraid of
all things related to carps.

This is an effort to add more variety to the existing inverse reagent
system within chemistry. Not only should this variety serve to provide
additional options for a Chemist to experiment with, they should also
broaden the possibilities for already existing strategies.
  • Loading branch information
MGOOOOOO committed Nov 28, 2023
1 parent 3d95c0d commit c00f7d5
Show file tree
Hide file tree
Showing 9 changed files with 222 additions and 0 deletions.
2 changes: 2 additions & 0 deletions code/__DEFINES/traits/declarations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_EASILY_WOUNDED "easy_limb_wound"
#define TRAIT_HARDLY_WOUNDED "hard_limb_wound"
#define TRAIT_NEVER_WOUNDED "never_wounded"
/// Species with this trait have 50% extra chance of bleeding from piercing and slashing wounds
#define TRAIT_EASYBLEED "easybleed"
#define TRAIT_TOXINLOVER "toxinlover"
/// Doesn't get overlays from being in critical.
#define TRAIT_NOCRITOVERLAY "no_crit_overlay"
Expand Down
26 changes: 26 additions & 0 deletions code/_globalvars/phobias.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ GLOBAL_LIST_INIT(phobia_types, sort_list(list(
"authority",
"birds",
"blood",
"carps",
"clowns",
"doctors",
"falling",
Expand All @@ -32,6 +33,7 @@ GLOBAL_LIST_INIT(phobia_regexes, list(
"authority" = construct_phobia_regex("authority"),
"birds" = construct_phobia_regex("birds"),
"blood" = construct_phobia_regex("blood"),
"carps" = construct_phobia_regex("carps"),
"clowns" = construct_phobia_regex("clowns"),
"conspiracies" = construct_phobia_regex("conspiracies"),
"doctors" = construct_phobia_regex("doctors"),
Expand Down Expand Up @@ -64,6 +66,9 @@ GLOBAL_LIST_INIT(phobia_mobs, list(
/mob/living/basic/parrot,
/mob/living/basic/pet/penguin,
)),
"carps" = typecacheof(list(
/mob/living/basic/carp,
)),
"conspiracies" = typecacheof(list(
/mob/living/basic/drone,
/mob/living/basic/pet/penguin,
Expand Down Expand Up @@ -234,6 +239,27 @@ GLOBAL_LIST_INIT(phobia_objs, list(
/obj/item/reagent_containers/syringe,
/obj/machinery/iv_drip,
)),
"carps" = typecacheof(list(
/obj/item/clothing/head/hooded/carp_hood,
/obj/item/clothing/suit/hooded/carp_costume,
/obj/item/clothing/head/fedora/carpskin,
/obj/item/clothing/mask/gas/carp,
/obj/item/clothing/mask/cigarette/carp,
/obj/item/clothing/under/suit/carpskin,
/obj/item/food/cubancarp,
/obj/item/food/fishmeat/carp,
/obj/item/grenade/clusterbuster/spawner_spesscarp,
/obj/item/grenade/spawnergrenade/spesscarp,
/obj/item/knife/carp,
/obj/item/nullrod/carp,
/obj/item/organ/internal/lungs/carp,
/obj/item/organ/internal/tongue/carp,
/obj/item/organ/internal/brain/carp,
/obj/item/organ/internal/heart/carp,
/obj/item/storage/fancy/cigarettes/cigpack_carp,
/obj/item/stack/sheet/animalhide/carp,
/obj/item/toy/plush/carpplushie,
)),
"clowns" = typecacheof(list(
/obj/item/bedsheet/clown,
/obj/item/clothing/head/chaplain/clownmitre,
Expand Down
1 change: 1 addition & 0 deletions code/_globalvars/traits/_traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_DWARF" = TRAIT_DWARF,
"TRAIT_EASILY_WOUNDED" = TRAIT_EASILY_WOUNDED,
"TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER,
"TRAIT_EASYBLEED" = TRAIT_EASYBLEED,
"TRAIT_ECHOLOCATION_EXTRA_RANGE" = TRAIT_ECHOLOCATION_EXTRA_RANGE,
"TRAIT_ECHOLOCATION_RECEIVER" = TRAIT_ECHOLOCATION_RECEIVER,
"TRAIT_ELITE_CHALLENGER" = TRAIT_ELITE_CHALLENGER,
Expand Down
4 changes: 4 additions & 0 deletions code/datums/brain_damage/phobia.dm
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,10 @@
return TRUE
return ..()

/datum/brain_trauma/mild/phobia/carps
phobia_type = "carps"
random_gain = FALSE

/datum/brain_trauma/mild/phobia/clowns
phobia_type = "clowns"
random_gain = FALSE
Expand Down
4 changes: 4 additions & 0 deletions code/datums/status_effects/buffs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@
/// Having any of these reagents in your system extends the duration
var/static/list/supplementary_reagents_bonus = list(
/datum/reagent/consumable/ethanol/protein_blend = 30 SECONDS, // protein shakes are very robust
/datum/reagent/inverse/oxandrolone = 25 SECONDS,
/datum/reagent/consumable/eggwhite = 20 SECONDS,
/datum/reagent/consumable/eggyolk = 15 SECONDS,
/datum/reagent/consumable/nutriment/protein = 15 SECONDS,
Expand Down Expand Up @@ -201,6 +202,9 @@
if(new_owner.reagents.has_reagent(/datum/reagent/drug/pumpup)) // steriods? yes please!
modifier += 3

if(new_owner.reagents.has_reagent(/datum/reagent/inverse/oxandrolone)) // MOREEEEE
modifier += 2

var/food_boost = 0
for(var/datum/reagent/workout_reagent in supplementary_reagents_bonus)
if(new_owner.reagents.has_reagent(workout_reagent))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -790,3 +790,154 @@ Basically, we fill the time between now and 2s from now with hands based off the
return

hearing_args[HEARING_RAW_MESSAGE] = "<span class='[randomSpan]'>[hearing_args[HEARING_RAW_MESSAGE]]</span>"

/datum/reagent/inverse/sal_acid
name = "Benzoic Acid"
description = "Robust fertilizer that provides a decent range of benefits for plant life."
taste_description = "flowers"
reagent_state = LIQUID
color = "#e6c843"
ph = 3.4
tox_damage = 0

/datum/reagent/inverse/sal_acid/on_hydroponics_apply(obj/machinery/hydroponics/mytray, mob/user)
mytray.adjust_plant_health(round(volume * 0.5))
mytray.myseed?.adjust_production(-round(volume * 0.2))
mytray.myseed?.adjust_potency(round(volume * 0.25))
mytray.myseed?.adjust_yield(round(volume * 0.2))

/datum/reagent/inverse/oxandrolone
name = "Oxymetholone"
description = "Anabolic steroid that promotes the growth of muscle during and after exercise."
reagent_state = LIQUID
color = "#520c23"
taste_description = "sweat"
metabolization_rate = 0.4 * REM
overdose_threshold = 25
ph = 12.2
tox_damage = 0

/datum/reagent/inverse/oxandrolone/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
var/high_message = pick("You feel unstoppable.", "Giving it EVERYTHING!!", "You feel ready for anything.", "You feel like doing a thousand jumping jacks!")
if(SPT_PROB(2, seconds_per_tick))
to_chat(affected_mob, span_notice("[high_message]"))

/datum/reagent/inverse/oxandrolone/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
if(SPT_PROB(25, seconds_per_tick))
affected_mob.adjust_bodytemperature(30 * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick)
affected_mob.set_jitter_if_lower(3 SECONDS)
affected_mob.adjustStaminaLoss(5 * REM * seconds_per_tick)
else if(SPT_PROB(5, seconds_per_tick))
affected_mob.vomit(VOMIT_CATEGORY_BLOOD, lost_nutrition = 0, distance = 3)
affected_mob.Paralyze(3 SECONDS)

/datum/reagent/inverse/salbutamol
name = "Bamethan"
description = "Blood thinner that drastically increases the chance of receiving bleeding wounds."
reagent_state = LIQUID
color = "#ecd4d6"
taste_description = "paint thinner"
ph = 4.5
metabolization_rate = 0.08 * REM
tox_damage = 0

/datum/reagent/inverse/salbutamol/on_mob_metabolize(mob/living/affected_mob)
. = ..()
ADD_TRAIT(affected_mob, TRAIT_EASYBLEED, type)

/datum/reagent/inverse/salbutamol/on_mob_end_metabolize(mob/living/affected_mob)
. = ..()
REMOVE_TRAIT(affected_mob, TRAIT_EASYBLEED, type)

/datum/reagent/inverse/pen_acid
name = "Pendetide"
description = "Purges basic toxin healing medications and increases the severity of radiation poisoning."
reagent_state = LIQUID
color = "#09ff00"
ph = 3.7
taste_description = "venom"
metabolization_rate = 0.25 * REM
tox_damage = 0

/datum/reagent/inverse/pen_acid/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
holder.remove_reagent(/datum/reagent/medicine/c2/seiver, 5 * REM * seconds_per_tick)
holder.remove_reagent(/datum/reagent/medicine/potass_iodide, 5 * REM * seconds_per_tick)
holder.remove_reagent(/datum/reagent/medicine/c2/multiver, 5 * REM * seconds_per_tick)

. = ..()
if(HAS_TRAIT(affected_mob, TRAIT_IRRADIATED))
affected_mob.set_jitter_if_lower(10 SECONDS)
affected_mob.adjust_disgust(3 * REM * seconds_per_tick)
if(SPT_PROB(2.5, seconds_per_tick))
to_chat(affected_mob, span_warning("A horrible ache spreads in your insides!"))
affected_mob.adjust_confusion_up_to(10 SECONDS, 15 SECONDS)

/datum/reagent/inverse/atropine
name = "Hyoscyamine"
description = "Slowly regenerates all damaged organs, but cannot restore non-functional organs."
reagent_state = LIQUID
color = "#273333"
ph = 13.6
metabolization_rate = 0.2 * REM
tox_damage = 0
overdose_threshold = 40

/datum/reagent/inverse/atropine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
var/need_mob_update
need_mob_update = affected_mob.adjustOrganLoss(ORGAN_SLOT_STOMACH, -1 * REM * seconds_per_tick)
need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_HEART, -1 * REM * seconds_per_tick)
if(affected_mob.getToxLoss() <= 25)
need_mob_update = affected_mob.adjustToxLoss(-0.5, updating_health = FALSE, required_biotype = affected_biotype)
if(need_mob_update)
return UPDATE_MOB_HEALTH

/datum/reagent/inverse/atropine/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
var/static/list/possible_organs = list(
ORGAN_SLOT_HEART,
ORGAN_SLOT_LIVER,
ORGAN_SLOT_LUNGS,
ORGAN_SLOT_STOMACH,
ORGAN_SLOT_EYES,
ORGAN_SLOT_EARS,
ORGAN_SLOT_BRAIN,
ORGAN_SLOT_APPENDIX,
ORGAN_SLOT_TONGUE,
)
affected_mob.adjustOrganLoss(pick(possible_organs) ,2 * seconds_per_tick)
affected_mob.reagents.remove_reagent(type, 1 * REM * seconds_per_tick)

/datum/reagent/inverse/ammoniated_mercury
name = "Ammoniated Sludge"
description = "A ghastly looking mess of mercury by-product. Causes bursts of manic hysteria."
reagent_state = LIQUID
color = "#353535"
ph = 10.2
metabolization_rate = 0.4 * REM
tox_damage = 0

/datum/reagent/inverse/ammoniated_mercury/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
if(SPT_PROB(7.5, seconds_per_tick))
affected_mob.emote("scream")
affected_mob.say(pick("AAAAAAAHHHHH!!","OOOOH NOOOOOO!!","GGGUUUUHHHHH!!","AIIIIIEEEEEE!!","HAHAHAHAHAAAAAA!!","OORRRGGGHHH!!","AAAAAAAJJJJJJJJJ!!"), forced = type)

/datum/reagent/inverse/rezadone
name = "Inreziniver"
description = "Makes the user horribly afraid of all things related to carps."
reagent_state = LIQUID
color = "#c92eb4"
ph = 13.9
metabolization_rate = 0.05 * REM
tox_damage = 0

/datum/reagent/inverse/rezadone/on_mob_metabolize(mob/living/carbon/affected_mob)
. = ..()
affected_mob.gain_trauma(/datum/brain_trauma/mild/phobia/carps, TRAUMA_RESILIENCE_ABSOLUTE)

/datum/reagent/inverse/rezadone/on_mob_end_metabolize(mob/living/carbon/affected_mob)
. = ..()
affected_mob.cure_trauma_type(/datum/brain_trauma/mild/phobia/carps, resilience = TRAUMA_RESILIENCE_ABSOLUTE)
14 changes: 14 additions & 0 deletions code/modules/reagents/chemistry/reagents/medicine_reagents.dm
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,8 @@
ph = 12.2
taste_description = "fish"
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
inverse_chem_val = 0.25
inverse_chem = /datum/reagent/inverse/rezadone

/datum/reagent/medicine/rezadone/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
Expand Down Expand Up @@ -285,6 +287,8 @@
overdose_threshold = 25
ph = 10.7
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
inverse_chem_val = 0.3
inverse_chem = /datum/reagent/inverse/oxandrolone

/datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
Expand Down Expand Up @@ -478,6 +482,8 @@
overdose_threshold = 10
ph = 7
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
inverse_chem_val = 0.50
inverse_chem = /datum/reagent/inverse/ammoniated_mercury

/datum/reagent/medicine/ammoniated_mercury/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
Expand Down Expand Up @@ -528,6 +534,8 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
ph = 1 //One of the best buffers, NEVERMIND!
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
inverse_chem_val = 0.4
inverse_chem = /datum/reagent/inverse/pen_acid

/datum/reagent/medicine/pen_acid/on_mob_metabolize(mob/living/affected_mob)
. = ..()
Expand All @@ -554,6 +562,8 @@
overdose_threshold = 25
ph = 2.1
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
inverse_chem_val = 0.3
inverse_chem = /datum/reagent/inverse/sal_acid

/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
Expand All @@ -579,6 +589,8 @@
metabolization_rate = 0.25 * REAGENTS_METABOLISM
ph = 2
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
inverse_chem_val = 0.25
inverse_chem = /datum/reagent/inverse/salbutamol

/datum/reagent/medicine/salbutamol/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
Expand Down Expand Up @@ -821,6 +833,8 @@
overdose_threshold = 35
ph = 12
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
inverse_chem_val = 0.35
inverse_chem = /datum/reagent/inverse/atropine

/datum/reagent/medicine/atropine/on_mob_add(mob/living/affected_mob)
. = ..()
Expand Down
3 changes: 3 additions & 0 deletions code/modules/surgery/bodyparts/wounds.dm
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@
if(HAS_TRAIT(owner, TRAIT_EASYDISMEMBER))
damage *= 1.1

if(HAS_TRAIT(owner, TRAIT_EASYBLEED) && ((woundtype == WOUND_PIERCE) || (woundtype == WOUND_SLASH)))
damage *= 1.5

var/base_roll = rand(1, round(damage ** WOUND_DAMAGE_EXPONENT))
var/injury_roll = base_roll
injury_roll += check_woundings_mods(woundtype, damage, wound_bonus, bare_wound_bonus)
Expand Down
17 changes: 17 additions & 0 deletions strings/phobia.json
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,23 @@
"transfusion"
],

"carps": [
"aquarium",
"carp",
"carps",
"carpotoxin",
"fin",
"fins",
"fish",
"fang",
"gnash",
"migration",
"slash",
"shred",
"teeth",
"tooth"
],

"clowns": [
"banana",
"clown",
Expand Down

0 comments on commit c00f7d5

Please sign in to comment.