diff --git a/code/__DEFINES/traits/traits.dm b/code/__DEFINES/traits/traits.dm index c4f3729bb5dd..184348473f90 100644 --- a/code/__DEFINES/traits/traits.dm +++ b/code/__DEFINES/traits/traits.dm @@ -358,6 +358,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_PINPOINT_EYES "pinpoint_eyes" #define TRAIT_CHEMICAL_NIGHTVISION "chemical_nightvision" #define TRAIT_GOOD_CHEMICAL_NIGHTVISION "good_chemical_nightvision" +#define TRAIT_AGGROMETABOLISM "aggrometabolism" +#define TRAIT_BRUTEWEAK "brute_weakness" +#define TRAIT_BRUTEWEAKMAJOR "brute_weakness_major" +#define TRAIT_BURNWEAK "burn_weakness" +#define TRAIT_BURNWEAKMAJOR "burn_weakness_major" + ///Trait for dryable items #define TRAIT_DRYABLE "trait_dryable" @@ -520,5 +526,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Climbable trait, given and taken by the climbable element when added or removed. Exists to be easily checked via HAS_TRAIT(). #define TRAIT_CLIMBABLE "trait_climbable" +#define TRAIT_VETDOC "trait_vetdoc" +#define TRAIT_FIELDMEDIC "trait_fieldmedic" + +#define TRAIT_ARMOR_AVERSION "trait_armor_aversion" /// Trait applied by element #define ELEMENT_TRAIT(source) "element_trait_[source]" diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 707e850af005..cf0239a2ca4e 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -30,9 +30,15 @@ PROCESSING_SUBSYSTEM_DEF(quirks) list("Bad Touch", "Friendly"), \ list("Self-Aware", "Congenital Analgesia"), \ list("(Language) Moth Pidgin", "(Language) Solarian International", "(Language) Teceti Unified Standard", "(Language) Kalixcian Common"), \ + list("Health - Tough", "Health - Very Tough", "Health - Flimsy", "Health - Very Flimsy"),\ + list("Fists of Iron" , "Fists of Steel"),\ + list("Brute Weakness, Minor", "Brute Weakness, Major"),\ + list("Burn Weakness, Minor", "Burn Weakness, Major"),\ + list("Pain Tolerance - Weak", "Congenital Analgesia"), \ + list("Fat-Fingered", "Gunslinger")\ ) - species_blacklist = list("Blood Deficiency" = list(SPECIES_IPC, SPECIES_JELLYPERSON, SPECIES_PLASMAMAN, SPECIES_VAMPIRE)) + species_blacklist = list("Blood Deficiency" = list(SPECIES_IPC, SPECIES_JELLYPERSON, SPECIES_PLASMAMAN, SPECIES_VAMPIRE), "Aggressive metabolism" = list(SPECIES_IPC, SPECIES_JELLYPERSON, SPECIES_PLASMAMAN, SPECIES_VAMPIRE)) for(var/client/client in GLOB.clients) client?.prefs.check_quirk_compatibility() diff --git a/code/datums/traits/negative/aggrometabolism.dm b/code/datums/traits/negative/aggrometabolism.dm new file mode 100644 index 000000000000..6f0afd340bef --- /dev/null +++ b/code/datums/traits/negative/aggrometabolism.dm @@ -0,0 +1,5 @@ +/datum/quirk/aggrometabolism + name = "Aggressive metabolism" + desc = "Your body has an extremely fast metabolism, for better or worse, leading to natural healing if you are well fed, but if you are starving, your body will start eating itself up" + value = -1 + mob_traits = list(TRAIT_AGGROMETABOLISM) diff --git a/code/datums/traits/negative/chunkyfingers.dm b/code/datums/traits/negative/chunkyfingers.dm new file mode 100644 index 000000000000..94eae174e462 --- /dev/null +++ b/code/datums/traits/negative/chunkyfingers.dm @@ -0,0 +1,7 @@ +/datum/quirk/no_guns + name = "Fat-Fingered" + desc = "Due to the shape of your hands, width of your fingers or just not having fingers at all, you're unable to fire guns." + value = -3 + mob_traits = list(TRAIT_CHUNKYFINGERS) + gain_text = span_notice("Your fingers feel... thick.") + lose_text = span_notice("Your fingers feel normal again.") diff --git a/code/datums/traits/negative/damagevul.dm b/code/datums/traits/negative/damagevul.dm new file mode 100644 index 000000000000..bbd20306ed74 --- /dev/null +++ b/code/datums/traits/negative/damagevul.dm @@ -0,0 +1,64 @@ +/datum/quirk/bruteweak + name = "Brute Weakness, Minor" + desc = "You're weaker to physical trauma than others, taking 10% extra brute damage" + mob_traits = list(TRAIT_BRUTEWEAK) + value = -2 + +/datum/quirk/bruteweak/add() + var/mob/living/carbon/human/H = quirk_holder + var/datum/species/species = H.dna.species + species.brutemod += 0.1 + +/datum/quirk/bruteweak/remove() + var/mob/living/carbon/human/H = quirk_holder + var/datum/species/species = H.dna.species + species.brutemod -= 0.1 + +/datum/quirk/bruteweakmajor + name = "Brute Weakness, Major" + desc = "You're much weaker to physical trauma than others, taking 20% extra brute damage" + mob_traits = list(TRAIT_BRUTEWEAKMAJOR) + value = -4 + +/datum/quirk/bruteweakmajor/add() + var/mob/living/carbon/human/H = quirk_holder + var/datum/species/species = H.dna.species + species.brutemod += 0.2 + +/datum/quirk/bruteweakmajor/remove() + var/mob/living/carbon/human/H = quirk_holder + var/datum/species/species = H.dna.species + species.brutemod -= 0.2 + + +/datum/quirk/burnweak + name = "Burn Weakness, Minor" + desc = "You're weaker to burns than others, taking 10% extra burn damage" + mob_traits = list(TRAIT_BURNWEAK) + value = -2 + +/datum/quirk/burnweak/add() + var/mob/living/carbon/human/H = quirk_holder + var/datum/species/species = H.dna.species + species.burnmod += 0.1 + +/datum/quirk/burnweak/remove() + var/mob/living/carbon/human/H = quirk_holder + var/datum/species/species = H.dna.species + species.burnmod -= 0.1 + +/datum/quirk/burnweakmajor + name = "Burn Weakness, Major" + desc = "You're much weaker to burns than others, taking 20% extra burn damage" + mob_traits = list(TRAIT_BURNWEAKMAJOR) + value = -4 + +/datum/quirk/burnweakmajor/add() + var/mob/living/carbon/human/H = quirk_holder + var/datum/species/species = H.dna.species + species.burnmod += 0.2 + +/datum/quirk/burnweakmajor/remove() + var/mob/living/carbon/human/H = quirk_holder + var/datum/species/species = H.dna.species + species.burnmod -= 0.2 diff --git a/code/datums/traits/negative/flimsy.dm b/code/datums/traits/negative/flimsy.dm new file mode 100644 index 000000000000..592c36ea016f --- /dev/null +++ b/code/datums/traits/negative/flimsy.dm @@ -0,0 +1,35 @@ +/datum/quirk/flimsy + name = "Health - Flimsy" + desc = "You have -10 health. What this actually means is that you need to take ten less points of damage before you go into crit. " + value = -2 + gain_text = span_notice("You feel less durable.") + lose_text = span_danger("You feel less flimsy once more.") + medical_record_text = "Patient has lower capacity for injury." + +/datum/quirk/lifegiver/add() + var/mob/living/carbon/human/H = quirk_holder + H.maxHealth -= 10 + H.health -= 10 + +/datum/quirk/lifegiver/remove() + var/mob/living/carbon/human/H = quirk_holder + H.maxHealth += 10 + H.health += 10 + +/datum/quirk/flimsyplus + name = "Health - Very Flimsy" + desc = "You have -20 health. What this actually means is that you need to take twenty less points of damage before you go into crit. " + value = -5 + gain_text = span_notice("You feel very flimsy!.") + lose_text = span_danger("You don't feel as fragile as before.") + medical_record_text = "Patient has very low capacity for injury." + +/datum/quirk/lifegiverplus/add() + var/mob/living/carbon/human/H = quirk_holder + H.maxHealth -= 20 + H.health -= 20 + +/datum/quirk/lifegiverplus/remove() + var/mob/living/carbon/human/H = quirk_holder + H.maxHealth += 20 + H.health += 20 \ No newline at end of file diff --git a/code/datums/traits/negative/painintolerance.dm b/code/datums/traits/negative/painintolerance.dm new file mode 100644 index 000000000000..8081b6e2c074 --- /dev/null +++ b/code/datums/traits/negative/painintolerance.dm @@ -0,0 +1,10 @@ +/datum/quirk/weakpaintolerance + name = "Pain Tolerance - Weak" + desc = "Your pain tolerance is really low. You go into crit 25 damage points earlier than you should" + gain_text = span_danger("You feel wimpy...") + lose_text = span_notice("You feel stronger.") + value = -5 + +/datum/quirk/weakpaintolerance/on_spawn() + var/mob/living/carbon/human/H = quirk_holder + H.crit_threshold += 25 diff --git a/code/datums/traits/negative/unarmored.dm b/code/datums/traits/negative/unarmored.dm new file mode 100644 index 000000000000..480c36b49501 --- /dev/null +++ b/code/datums/traits/negative/unarmored.dm @@ -0,0 +1,13 @@ +/datum/quirk/armor_aversion + name = "Armor Aversion" + desc = "Whenever due to bravery, personal preference, or simple a hatred towards being encumbered in a big metal coffin, you are refuse to wear armor that is better than tier 2 melee, bullet, laser, or energy." + value = -3 + mob_traits = list(TRAIT_ARMOR_AVERSION) + gain_text = span_notice("You can't bring yourself to put on armor.") + lose_text = span_danger("Maybe not being so exposed isn't so bad...") + +/datum/quirk/armor_aversion/add() + var/mob/living/carbon/human/H = quirk_holder + var/obj/item/clothing/currsuit = H.wear_suit + if(!H.can_equip(currsuit,ITEM_SLOT_OCLOTHING,TRUE)) + H.dropItemToGround(currsuit,TRUE,TRUE,FALSE) diff --git a/code/datums/traits/positive/iron_fist.dm b/code/datums/traits/positive/iron_fist.dm new file mode 100644 index 000000000000..87188decb059 --- /dev/null +++ b/code/datums/traits/positive/iron_fist.dm @@ -0,0 +1,35 @@ +/datum/quirk/iron_fist + name = "Fists of Iron" + desc = "You have fists of kung-fury! Increases unarmed damage." + value = 2 + gain_text = span_notice("Your fists feel furious!") + lose_text = span_danger("Your fists feel calm again.") + medical_record_text = "Patient has claimed to have accidentally break pencils when holding them." + +/datum/quirk/iron_fist/add() + var/mob/living/carbon/human/H = quirk_holder + H.dna.species.punchdamagelow += 5 + H.dna.species.punchdamagehigh += 2 + +/datum/quirk/iron_fist/remove() + var/mob/living/carbon/human/H = quirk_holder + H.dna.species.punchdamagelow -= 5 + H.dna.species.punchdamagehigh -= 2 + +/datum/quirk/steel_fist + name = "Fists of Steel" + desc = "You have MASSIVE fists of kung-fury! Even MORE increases unarmed damage." + value = 3 + gain_text = span_notice("I trained in a barn") + lose_text = span_danger("I no longer remember my roots in Duranda") + medical_record_text = "Patient has accidentally destroyed the door handle to my office. A replacement is needed." + +/datum/quirk/steel_fist/add() + var/mob/living/carbon/human/H = quirk_holder + H.dna.species.punchdamagelow += 10 + H.dna.species.punchdamagehigh += 6 + +/datum/quirk/steel_fist/remove() + var/mob/living/carbon/human/H = quirk_holder + H.dna.species.punchdamagelow -= 10 + H.dna.species.punchdamagehigh -= 6 \ No newline at end of file diff --git a/code/datums/traits/positive/tough.dm b/code/datums/traits/positive/tough.dm new file mode 100644 index 000000000000..8ac2bfdb2f43 --- /dev/null +++ b/code/datums/traits/positive/tough.dm @@ -0,0 +1,35 @@ +/datum/quirk/lifegiver + name = "Health - Tough" + desc = "You have +10 health. What this actually means is that you need to take ten more points of damage before you go into crit. " + value = 3 + gain_text = span_notice("You feel more durable.") + lose_text = span_danger("You feel flimsy once more.") + medical_record_text = "Patient has higher capacity for injury." + +/datum/quirk/lifegiver/add() + var/mob/living/carbon/human/H = quirk_holder + H.maxHealth += 10 + H.health += 10 + +/datum/quirk/lifegiver/remove() + var/mob/living/carbon/human/H = quirk_holder + H.maxHealth -= 10 + H.health -= 10 + +/datum/quirk/lifegiverplus + name = "Health - Very Tough" + desc = "You have +20 health. What this actually means is that you need to take twenty more points of damage before you go into crit. " + value = 6 + gain_text = span_notice("You feel very durable.") + lose_text = span_danger("You feel flimsy once more.") + medical_record_text = "Patient has very high capacity for injury." + +/datum/quirk/lifegiverplus/add() + var/mob/living/carbon/human/H = quirk_holder + H.maxHealth += 20 + H.health += 20 + +/datum/quirk/lifegiverplus/remove() + var/mob/living/carbon/human/H = quirk_holder + H.maxHealth -= 20 + H.health -= 20 \ No newline at end of file diff --git a/code/datums/traits/positive/veteran_doctor.dm b/code/datums/traits/positive/veteran_doctor.dm new file mode 100644 index 000000000000..1483d9c4a8ab --- /dev/null +++ b/code/datums/traits/positive/veteran_doctor.dm @@ -0,0 +1,15 @@ +/datum/quirk/vetdoc + name = "Veteran Doctor" + desc = "After years upon years of practice, you mastered the art of healing, and are able to do certain advanced surgeries without the guidance of an OR computer and it's upgrades, and are able to scavange for medical supplies from scraps." + value = 5 + mob_traits = list(TRAIT_VETDOC) + gain_text = span_notice("Years upon years of medical practice is at your fingertips.") + lose_text = span_danger("You forget your medical experience.") + +/datum/quirk/fieldmedic + name = "Field Medic" + desc = "Due to having to work in less than optimal circumstances in your past, you have quickly mastered the ways in which you can use ordinary things into tools for surgery and tending wounds. Gain a bonus to ghetto surgeries, and are able to scavange for medical supplies from scraps." + value = 3 + mob_traits = list(TRAIT_FIELDMEDIC) + gain_text = span_notice("You really know how to poke wounds with a screwdriver.") + lose_text = span_danger("You lost your hankering to saw ribs with a hatchet.") diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 9f6a7c1dfb4d..d1269aac964d 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -488,3 +488,19 @@ amount = 1 splint_type = /datum/bodypart_aid/splint/improvised_metal merge_type = /obj/item/stack/medical/splint/improvised_metal + +/obj/item/stack/medical/bruise_pack/fieldtend + name = "a bunch of scavanged medical supplies" + singular_name = "scavanged medical supplies" + desc = "A measure of haphazardly thrown together supplies to be used for medical purposes. Good for both burns and bruises." + icon_state = "brutepack" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + heal_brute = 5 + heal_burn = 5 + amount = 1 + max_amount = 5 + self_delay = 2 SECONDS + other_delay = 2 SECONDS + experience_given = 4 + merge_type = /obj/item/stack/medical/bruise_pack/fieldtend diff --git a/code/modules/clothing/suits/armor_aversion.dm b/code/modules/clothing/suits/armor_aversion.dm new file mode 100644 index 000000000000..61e9ad02a792 --- /dev/null +++ b/code/modules/clothing/suits/armor_aversion.dm @@ -0,0 +1,11 @@ +/obj/item/clothing/suit/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning) + . = ..() + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(HAS_TRAIT(H, TRAIT_ARMOR_AVERSION)) + if( armor.melee > 20 || \ + armor.bullet > 20 || \ + armor.laser > 20 || \ + armor.energy > 20) + to_chat(M, span_danger("You can't wear this armour!")) + return FALSE diff --git a/code/modules/mob/fieldtend.dm b/code/modules/mob/fieldtend.dm new file mode 100644 index 000000000000..1dfdf615a7bf --- /dev/null +++ b/code/modules/mob/fieldtend.dm @@ -0,0 +1,17 @@ +/mob/verb/fieldtend() + set name = "Field Tending Supplies" + set category = "IC" + set desc = "Retrive your scavanged field tending supplies" + if(HAS_TRAIT(src,TRAIT_VETDOC) || HAS_TRAIT(src, TRAIT_FIELDMEDIC)) + if(isliving(src) && stat == CONSCIOUS) + var/mob/living/curruser = src + var/charges = floor(curruser.heal_reservoir) + if(charges > 0) + var/obj/item/stack/medical/bruise_pack/fieldtend/tendies = new(curruser) // Yum 🤤🤤🤤 + curruser.put_in_hands(tendies) + curruser.heal_reservoir -= 1 + to_chat(src, span_notice("You haphazardly fashion some odds and ends into a handful of makeshift field tend supplies.")) + else + to_chat(src, span_warning("You have no scavanged medical supplies at the moment, wait a bit!")) + else + to_chat(src, "You aren't capable of field tending!") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index c91d6b185474..aed4876365bc 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1358,28 +1358,38 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(HAS_TRAIT(src, TRAIT_NOHUNGER)) return //hunger is for BABIES - // nutrition decrease and satiety - if (H.nutrition > 0 && H.stat != DEAD && !HAS_TRAIT(H, TRAIT_NOHUNGER)) - // THEY HUNGER - var/hunger_rate = HUNGER_FACTOR - var/datum/component/mood/mood = H.GetComponent(/datum/component/mood) - if(mood && mood.sanity > SANITY_DISTURBED) - hunger_rate *= max(0.5, 1 - 0.002 * mood.sanity) //0.85 to 0.75 - // Whether we cap off our satiety or move it towards 0 - if(H.satiety > MAX_SATIETY) - H.satiety = MAX_SATIETY - else if(H.satiety > 0) - H.satiety-- - else if(H.satiety < -MAX_SATIETY) - H.satiety = -MAX_SATIETY - else if(H.satiety < 0) - H.satiety++ - if(prob(round(-H.satiety/40))) - H.adjust_timed_status_effect(5 SECONDS, /datum/status_effect/jitter) - hunger_rate = 3 * HUNGER_FACTOR - hunger_rate *= H.physiology.hunger_mod - H.adjust_nutrition(-hunger_rate) + // nutrition decrease and satiety + if (H.stat != DEAD && !HAS_TRAIT(H, TRAIT_NOHUNGER)) + if(H.nutrition > 0) + // THEY HUNGER + var/hunger_rate = HUNGER_FACTOR + var/datum/component/mood/mood = H.GetComponent(/datum/component/mood) + if(mood && mood.sanity > SANITY_DISTURBED) + hunger_rate *= max(0.5, 1 - 0.002 * mood.sanity) //0.85 to 0.75 + // Whether we cap off our satiety or move it towards 0 + if(H.satiety > MAX_SATIETY) + H.satiety = MAX_SATIETY + else if(H.satiety > 0) + H.satiety-- + else if(H.satiety < -MAX_SATIETY) + H.satiety = -MAX_SATIETY + else if(H.satiety < 0) + H.satiety++ + if(prob(round(-H.satiety/40))) + H.adjust_timed_status_effect(5 SECONDS, /datum/status_effect/jitter) + hunger_rate = 3 * HUNGER_FACTOR + hunger_rate *= H.physiology.hunger_mod + H.adjust_nutrition(-hunger_rate) + if(HAS_TRAIT(H,TRAIT_AGGROMETABOLISM)) + var/healing = H.nutrition / 1000 + H.adjust_nutrition(-(healing * 10)) + H.adjustToxLoss(-healing, 0) + H.adjustBruteLoss(-healing, 0) + H.adjustFireLoss(-healing, 0) + if(H.nutrition < NUTRITION_LEVEL_STARVING && HAS_TRAIT(H,TRAIT_AGGROMETABOLISM)) + H.adjustBruteLoss(0.5, 0) + H.adjustFireLoss(0.5, 0) if (H.nutrition > NUTRITION_LEVEL_FULL) if(H.overeatduration < 600) //capped so people don't take forever to unfat diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 0f60df245ddd..75bb40a3e41b 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -64,6 +64,8 @@ if(machine) machine.check_eye(src) + handle_healreservoir() + if(stat != DEAD) return 1 @@ -152,4 +154,11 @@ var/grav_stregth = gravity - GRAVITY_DAMAGE_TRESHOLD adjustBruteLoss(min(grav_stregth,3)) +/mob/living/proc/handle_healreservoir() + if(HAS_TRAIT(src,TRAIT_VETDOC)) + if(heal_reservoir < 5) + heal_reservoir += 0.01 + if(HAS_TRAIT(src,TRAIT_FIELDMEDIC)) + if(heal_reservoir < 20) + heal_reservoir += 0.04 #undef BODYTEMP_DIVISOR diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index bf99a357104e..6e9e47d5332d 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2007,3 +2007,10 @@ GLOBAL_VAR_INIT(ssd_indicator_overlay, mutable_appearance('icons/mob/ssd_indicat */ /mob/living/proc/get_reagent_amount(reagent) return reagents.get_reagent_amount(reagent) + + +/mob/living/get_status_tab_items() + . = ..() + if(HAS_TRAIT(src, TRAIT_VETDOC) || HAS_TRAIT(src, TRAIT_FIELDMEDIC)) + . += "" + . += "Healing Charges: [FLOOR(heal_reservoir, 1)]" diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index c67a58f00481..3dd362270d10 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -193,5 +193,8 @@ /// Lazy list of FOV traits that will apply a FOV view when handled. var/list/fov_traits + //reservoir for healing quirks + var/heal_reservoir = 0 + /// World time of the last time this mob heard a radio crackle, to reduce spamminess. COOLDOWN_DECLARE(radio_crackle_cooldown) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 86e97b98c4f3..5ea6d6bbfb6e 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -50,7 +50,7 @@ return FALSE // True surgeons (like abductor scientists) need no instructions - if(HAS_TRAIT(user, TRAIT_SURGEON) || HAS_TRAIT(user.mind, TRAIT_SURGEON)) + if(HAS_TRAIT(user, TRAIT_SURGEON) || HAS_TRAIT(user.mind, TRAIT_SURGEON) || HAS_TRAIT(user, TRAIT_VETDOC) || HAS_TRAIT(user.mind, TRAIT_VETDOC)) if(replaced_by) // only show top-level surgeries return FALSE else diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index b632fef0a7e5..f4313dc55e21 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -255,6 +255,8 @@ ouchie_mod *= clamp(1-target.get_drunk_amount()/SURGERY_DRUNK_MOD, 0, 1) // Drunkenness up to 40% (points? idk) will improve chances of avoiding horrible pain and suffering if(target.stat == UNCONSCIOUS) // Being "normally" asleep will SLIGHTLY improve your chances since it's intuitive behavior barring access to anything else ouchie_mod *= target.getOxyLoss() >= 50 ? 0.6 : 0.8 // Being choked out will slightly improve chances on top of that. Emergent gameplay! (people already do this) + if(HAS_TRAIT(user, TRAIT_FIELDMEDIC)) + ouchie_mod -= 0.5 var/final_ouchie_chance = SURGERY_FUCKUP_CHANCE * ouchie_mod if(!prob(final_ouchie_chance)) return diff --git a/shiptest.dme b/shiptest.dme index 4ceb267c1af1..eb6848af0b2e 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -908,19 +908,25 @@ #include "code\datums\status_effects\debuffs\speech_debuffs.dm" #include "code\datums\traits\_quirk.dm" #include "code\datums\traits\negative\addictions.dm" +#include "code\datums\traits\negative\aggrometabolism.dm" #include "code\datums\traits\negative\bad_touch.dm" #include "code\datums\traits\negative\blindness.dm" +#include "code\datums\traits\negative\chunkyfingers.dm" #include "code\datums\traits\negative\congenital_analgesia.dm" +#include "code\datums\traits\negative\damagevul.dm" #include "code\datums\traits\negative\deafness.dm" +#include "code\datums\traits\negative\flimsy.dm" #include "code\datums\traits\negative\frail.dm" #include "code\datums\traits\negative\heavy_sleeper.dm" #include "code\datums\traits\negative\light_drinker.dm" #include "code\datums\traits\negative\mute.dm" #include "code\datums\traits\negative\nearsighted.dm" +#include "code\datums\traits\negative\painintolerance.dm" #include "code\datums\traits\negative\paraplegic.dm" #include "code\datums\traits\negative\phobia.dm" #include "code\datums\traits\negative\prosopagnosia.dm" #include "code\datums\traits\negative\pushover.dm" +#include "code\datums\traits\negative\unarmored.dm" #include "code\datums\traits\neutral\ageusia.dm" #include "code\datums\traits\neutral\bald.dm" #include "code\datums\traits\neutral\deviant_tastes.dm" @@ -936,8 +942,11 @@ #include "code\datums\traits\positive\empath.dm" #include "code\datums\traits\positive\freerunning.dm" #include "code\datums\traits\positive\friendly.dm" +#include "code\datums\traits\positive\iron_fist.dm" #include "code\datums\traits\positive\light_step.dm" #include "code\datums\traits\positive\self_aware.dm" +#include "code\datums\traits\positive\tough.dm" +#include "code\datums\traits\positive\veteran_doctor.dm" #include "code\datums\votes\_vote_datum.dm" #include "code\datums\votes\custom_vote.dm" #include "code\datums\votes\restart_vote.dm" @@ -2256,6 +2265,7 @@ #include "code\modules\clothing\spacesuits\syndi.dm" #include "code\modules\clothing\suits\_suits.dm" #include "code\modules\clothing\suits\armor.dm" +#include "code\modules\clothing\suits\armor_aversion.dm" #include "code\modules\clothing\suits\bio.dm" #include "code\modules\clothing\suits\chaplainsuits.dm" #include "code\modules\clothing\suits\cloaks.dm" @@ -2640,6 +2650,7 @@ #include "code\modules\missions\outpost\research_mission.dm" #include "code\modules\mob\death.dm" #include "code\modules\mob\emote.dm" +#include "code\modules\mob\fieldtend.dm" #include "code\modules\mob\inventory.dm" #include "code\modules\mob\login.dm" #include "code\modules\mob\logout.dm"