diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 98a8df19b7c..bf1546680a2 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -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" diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index 3aa6c41de4f..412902b0c56 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -8,6 +8,7 @@ GLOBAL_LIST_INIT(phobia_types, sort_list(list( "authority", "birds", "blood", + "carps", "clowns", "doctors", "falling", @@ -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"), @@ -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, @@ -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, diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index e88ffbee11f..897b858ecc9 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -171,6 +171,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, diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm index 3360ed36052..725c92ab7e8 100644 --- a/code/datums/brain_damage/phobia.dm +++ b/code/datums/brain_damage/phobia.dm @@ -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 diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index a8c09dbb12e..e3973b61b58 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -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, @@ -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)) diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm index b96b52ec366..8fd6559c39a 100644 --- a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm @@ -791,3 +791,154 @@ Basically, we fill the time between now and 2s from now with hands based off the return hearing_args[HEARING_RAW_MESSAGE] = "[hearing_args[HEARING_RAW_MESSAGE]]" + +/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) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 204ac96fce4..399b2d662be 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -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) . = ..() @@ -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) . = ..() @@ -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) . = ..() @@ -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) . = ..() @@ -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) . = ..() @@ -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) . = ..() @@ -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) . = ..() diff --git a/code/modules/surgery/bodyparts/wounds.dm b/code/modules/surgery/bodyparts/wounds.dm index 94c503614a2..deaa734dd64 100644 --- a/code/modules/surgery/bodyparts/wounds.dm +++ b/code/modules/surgery/bodyparts/wounds.dm @@ -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) diff --git a/strings/phobia.json b/strings/phobia.json index 3f45b9f2364..88ad23b774d 100644 --- a/strings/phobia.json +++ b/strings/phobia.json @@ -113,6 +113,23 @@ "transfusion" ], + "carps": [ + "aquarium", + "carp", + "carps", + "carpotoxin", + "fin", + "fins", + "fish", + "fang", + "gnash", + "migration", + "slash", + "shred", + "teeth", + "tooth" + ], + "clowns": [ "banana", "clown",