From 00ba1282c3df44d3a3b009f5e0667d4215c181f8 Mon Sep 17 00:00:00 2001 From: Alberyk Date: Sun, 27 Jan 2019 09:48:12 -0200 Subject: [PATCH] Changes how pain checks works in game (#5978) This pr creates a new check, can_feel_pain, it checks for the NO_PAIN flag, if the target is under influence of mind altering drugs or strong painkillers. This check replaces all the species procs and fixes somethings, like people under the influence of pain killers still getting knocked out from pain and etc. --- code/game/gamemodes/cult/runes.dm | 2 +- code/game/machinery/crusher_piston.dm | 2 +- code/game/machinery/doors/airlock.dm | 2 +- .../machinery/kitchen/cooking_machines/fryer.dm | 2 +- code/game/machinery/suit_storage_unit.dm | 4 ++-- .../game/objects/items/weapons/material/shards.dm | 2 +- code/game/objects/structures/morgue.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 12 +++++++++++- code/modules/mob/living/carbon/carbon_powers.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../mob/living/carbon/human/human_damage.dm | 4 ++-- .../mob/living/carbon/human/human_defense.dm | 2 +- .../mob/living/carbon/human/human_movement.dm | 4 ++-- .../mob/living/carbon/human/human_organs.dm | 2 +- .../mob/living/carbon/human/human_powers.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 4 ++-- .../mob/living/carbon/human/unarmed_attack.dm | 15 +++++++++++---- code/modules/mob/living/carbon/shock.dm | 2 +- code/modules/mob/living/living.dm | 2 +- code/modules/organs/organ_external.dm | 4 ++-- code/modules/organs/pain.dm | 6 +++--- code/modules/organs/subtypes/parasite.dm | 12 ++++++------ .../Chemistry-Reagents-Dispenser.dm | 2 +- .../Chemistry-Reagents-Food-Drinks.dm | 10 +++++----- code/modules/spells/artifacts.dm | 2 +- html/changelogs/alberyk-painfix.yml | 6 ++++++ 26 files changed, 67 insertions(+), 44 deletions(-) create mode 100644 html/changelogs/alberyk-painfix.yml diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 023ac782564..990ef53eedd 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -164,7 +164,7 @@ var/list/sacrificed = list() target.adjustBrainLoss(rand(1,5), 55) initial_message = 1 - if (target.species && (target.species.flags & NO_PAIN)) + if (!target.can_feel_pain()) target.visible_message("The markings below [target] glow a bloody red.") else target.visible_message("[target] writhes in pain as the markings below \him glow a bloody red.", "AAAAAAHHHH!", "You hear an anguished scream.") diff --git a/code/game/machinery/crusher_piston.dm b/code/game/machinery/crusher_piston.dm index 3c696803053..2dd5015d29a 100644 --- a/code/game/machinery/crusher_piston.dm +++ b/code/game/machinery/crusher_piston.dm @@ -501,7 +501,7 @@ return ..() /mob/living/carbon/piston_move() - if(!(species && (species.flags & NO_PAIN))) + if(can_feel_pain()) emote("scream") return ..() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index b6b37f4eb15..0ea76aa81d3 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1197,7 +1197,7 @@ About the new airlock wires panel: /mob/living/carbon/airlock_crush(var/crush_damage) . = ..() - if (!(species && (species.flags & NO_PAIN))) + if (can_feel_pain()) emote("scream") /mob/living/silicon/robot/airlock_crush(var/crush_damage) diff --git a/code/game/machinery/kitchen/cooking_machines/fryer.dm b/code/game/machinery/kitchen/cooking_machines/fryer.dm index a5b1fc64bb7..cfc6a798e19 100644 --- a/code/game/machinery/kitchen/cooking_machines/fryer.dm +++ b/code/game/machinery/kitchen/cooking_machines/fryer.dm @@ -168,7 +168,7 @@ if(ishuman(victim) && user.zone_sel.selecting != "groin" && user.zone_sel.selecting != "chest") var/mob/living/carbon/human/H = victim E = H.get_organ(user.zone_sel.selecting) - if(!E || E.species.flags & NO_PAIN) + if(!E || !H.can_feel_pain()) nopain = 2 else if(E.robotic >= ORGAN_ROBOT) nopain = 1 diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index b5ff3e25ac6..4c3b428fe1e 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -336,12 +336,12 @@ if(src.issuperUV) var/burndamage = rand(28,35) OCCUPANT.take_organ_damage(0,burndamage) - if (!(OCCUPANT.species && (OCCUPANT.species.flags & NO_PAIN))) + if (OCCUPANT.can_feel_pain()) OCCUPANT.emote("scream") else var/burndamage = rand(6,10) OCCUPANT.take_organ_damage(0,burndamage) - if (!(OCCUPANT.species && (OCCUPANT.species.flags & NO_PAIN))) + if (OCCUPANT.can_feel_pain()) OCCUPANT.emote("scream") if(i==3) //End of the cycle if(!src.issuperUV) diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index 7d1b392cc71..2c28d234b33 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -84,7 +84,7 @@ if(affecting.take_damage(5, 0)) H.UpdateDamageIcon() H.updatehealth() - if(!(H.species.flags & NO_PAIN)) + if(H.can_feel_pain()) H.Weaken(3) return check -= picked diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 0b0b9860258..d816e9dc721 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -334,7 +334,7 @@ M.emote("scream") else var/mob/living/carbon/C = M - if (!(C.species && (C.species.flags & NO_PAIN))) + if (C.can_feel_pain()) C.emote("scream") //Logging for this causes runtimes resulting in the cremator locking up. Commenting it out until that's figured out. diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index aacaaa461a8..44f1bdb4ace 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -427,4 +427,14 @@ return TRUE /mob/living/carbon/proc/get_metabolism(metabolism) - return metabolism \ No newline at end of file + return metabolism + +/mob/living/carbon/proc/can_feel_pain() + if (species && (species.flags & NO_PAIN)) + return FALSE + if (is_berserk()) + return FALSE + if (analgesic > 100) + return FALSE + + return TRUE \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon_powers.dm b/code/modules/mob/living/carbon/carbon_powers.dm index a56b7bf59ba..9a963a8fd81 100644 --- a/code/modules/mob/living/carbon/carbon_powers.dm +++ b/code/modules/mob/living/carbon/carbon_powers.dm @@ -33,7 +33,7 @@ if(B.host_brain.ckey) src << "You send a punishing spike of psychic agony lancing into your host's brain." - if (species && (species.flags & NO_PAIN)) + if (!can_feel_pain()) B.host_brain << "You feel a strange sensation as a foreign influence prods your mind." src << "It doesn't seem to be as effective as you hoped." else diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 62c74806bcf..1dc38b772e6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1158,7 +1158,7 @@ for(var/obj/item/O in organ.implants) if(!istype(O,/obj/item/weapon/implant) && prob(5)) //Moving with things stuck in you could be bad. // All kinds of embedded objects cause bleeding. - if(species.flags & NO_PAIN) + if(!can_feel_pain()) src << "You feel [O] moving inside your [organ.name]." else var/msg = pick( \ diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index eb40848edd8..de5274a0ba6 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -248,7 +248,7 @@ /mob/living/carbon/human/adjustHalLoss(var/amount, var/ignoreImmunity = 0)//An inherited version so this doesnt affect cyborgs if(status_flags & GODMODE) return 0 //godmode if(!ignoreImmunity)//Adjusting how hallloss works. Species with the NO_PAIN flag will suffer most of the effects of halloss, but will be immune to most conventional sources of accumulating it - if (species && species.flags & NO_PAIN)//Species with this flag will only gather halloss through species-specific mechanics, which apply it with the ignoreImmunity flag + if (!can_feel_pain())//Species with the NO_PAIN flag will only gather halloss through species-specific mechanics, which apply it with the ignoreImmunity flag return 0 if(wearing_rig) //I don't know if this is the best way, but I'm hard-pressed to think of a different way. Thanks Vaurca. @@ -397,7 +397,7 @@ This function restores all organs. //Handle other types of damage if(damagetype != BRUTE && damagetype != BURN) - if(!stat && damagetype == HALLOSS && !(species && (species.flags & NO_PAIN))) + if(!stat && damagetype == HALLOSS && (can_feel_pain())) if ((damage > 25 && prob(20)) || (damage > 50 && prob(60))) emote("scream") diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 5ad64743067..7a294b30bed 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -77,7 +77,7 @@ emp_act emote("me", 1, "drops what they were holding, their [affected.name] malfunctioning!") else var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ") - emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [affected.name]!") + emote("me", 1, "[(!can_feel_pain()) ? "" : emote_scream ]drops what they were holding in their [affected.name]!") ..(stun_amount, agony_amount, def_zone) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index c5240184ccc..610293325e5 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -16,7 +16,7 @@ var/health_deficiency = (100 - health) if(health_deficiency >= 40) tally += (health_deficiency / 25) - if (!(species && (species.flags & NO_PAIN))) + if (can_feel_pain()) if(halloss >= 10) tally += (halloss / 10) //halloss shouldn't slow you down if you can't even feel it if(wear_suit) @@ -44,7 +44,7 @@ else if(E.status & ORGAN_BROKEN) tally += 1.5 - if (!(species && (species.flags & NO_PAIN))) + if (can_feel_pain()) if(shock_stage >= 10) tally += 3 if(aiming && aiming.aiming_at) tally += 5 // Iron sights make you slower, it's a well-known fact. diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index a603e34c8b9..931992ea823 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -99,7 +99,7 @@ // standing is poor if(stance_damage >= 4 || (stance_damage >= 2 && prob(5))) if(!(lying || resting)) - if(species && !(species.flags & NO_PAIN)) + if(can_feel_pain()) emote("scream") custom_emote(1, "collapses!") Weaken(5) //can't emote while weakened, apparently. diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 9febc4fc5c3..aa28e796e5d 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -265,7 +265,7 @@ if(prob(10) && !(H.species.flags & NO_BLOOD)) to_chat(H,"Your nose begins to bleed...") H.drip(3) - else if(prob(25) && !(H.species.flags & NO_PAIN)) + else if(prob(25) && (can_feel_pain())) to_chat(H,"Your head hurts...") else if(prob(50)) to_chat(H,"Your mind buzzes...") diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f639bd66193..a493643d3a1 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1331,7 +1331,7 @@ /mob/living/carbon/human/handle_shock() ..() if(status_flags & GODMODE) return 0 //godmode - if(species && species.flags & NO_PAIN) return + if(!can_feel_pain()) return if(health < config.health_threshold_softcrit)// health 0 makes you immediately collapse shock_stage = max(shock_stage, 61) @@ -1592,7 +1592,7 @@ return slurring /mob/living/carbon/human/handle_stunned() - if(species.flags & NO_PAIN) + if(!can_feel_pain()) stunned = 0 return 0 if(..()) diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index db035478335..0ffe31d8ffa 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -49,12 +49,17 @@ var/global/list/sparring_attack_cache = list() return var/stun_chance = rand(0, 100) + var/pain_message = TRUE + + if(!target.can_feel_pain()) + pain_message = FALSE if(attack_damage >= 5 && armour < 100 && !(target == user) && stun_chance <= attack_damage * 5) // 25% standard chance switch(zone) // strong punches can have effects depending on where they hit if("head", "mouth", "eyes") // Induce blurriness - target.visible_message("[target] looks momentarily disoriented.", "You see stars.") + if(pain_message) + target.visible_message("[target] looks momentarily disoriented.", "You see stars.") target.apply_effect(attack_damage*2, EYE_BLUR, armour) if("l_arm", "l_hand") if (target.l_hand) @@ -79,11 +84,13 @@ var/global/list/sparring_attack_cache = list() target.set_dir(reverse_dir[target.dir]) target.apply_effect(attack_damage * 0.4, WEAKEN, armour) if("groin") - target.visible_message("[target] looks like \he is in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]") + if(pain_message) + target.visible_message("[target] looks like \he is in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]") target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour) if("l_leg", "l_foot", "r_leg", "r_foot") if(!target.lying) - target.visible_message("[target] gives way slightly.") + if(pain_message) + target.visible_message("[target] gives way slightly.") target.apply_effect(attack_damage*3, AGONY, armour) else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage * 5 >= 100) && armour < 100) // Chance to get the usual throwdown as well (25% standard chance) if(!target.lying) @@ -106,7 +113,7 @@ var/global/list/sparring_attack_cache = list() eyes.take_damage(rand(3,4), 1) user.visible_message("[user] presses \his [eye_attack_text] into [target]'s [eyes.name]!") - target << "You experience[(target.species.flags & NO_PAIN)? "" : " immense pain as you feel" ] [eye_attack_text_victim] being pressed into your [eyes.name][(target.species.flags & NO_PAIN)? "." : "!"]" + target << "You experience[(!target.can_feel_pain())? "" : " immense pain as you feel" ] [eye_attack_text_victim] being pressed into your [eyes.name][(!target.can_feel_pain())? "." : "!"]" /datum/unarmed_attack/bite attack_verb = list("bit") diff --git a/code/modules/mob/living/carbon/shock.dm b/code/modules/mob/living/carbon/shock.dm index 1abd6d26c9a..c93fc377153 100644 --- a/code/modules/mob/living/carbon/shock.dm +++ b/code/modules/mob/living/carbon/shock.dm @@ -3,7 +3,7 @@ // proc to find out in how much pain the mob is at the moment /mob/living/carbon/proc/updateshock() - if (species && (species.flags & NO_PAIN)) + if (!can_feel_pain()) src.traumatic_shock = src.halloss //Nopain species only receive halloss from specific mechanics return src.traumatic_shock diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 65fd86ddc00..57e224f380e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -320,7 +320,7 @@ default behaviour is: /mob/living/carbon/adjustHalLoss(var/amount, var/ignoreImmunity = 0)//An inherited version so this doesnt affect cyborgs if(status_flags & GODMODE) return 0 //godmode if(!ignoreImmunity)//Adjusting how hallloss works. Species with the NO_PAIN flag will suffer most of the effects of halloss, but will be immune to most conventional sources of accumulating it - if (species && species.flags & NO_PAIN)//Species with this flag will only gather halloss through species-specific mechanics, which apply it with the ignoreImmunity flag + if (!can_feel_pain())//Species with the NO_PAIN flag will only gather halloss through species-specific mechanics, which apply it with the ignoreImmunity flag return 0 if(amount > 0) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 1a6226009dc..af0a20db1a6 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -237,7 +237,7 @@ brute -= brute / 2 if(status & ORGAN_BROKEN && prob(40) && brute) - if (owner && !(owner.species && (owner.species.flags & NO_PAIN))) + if (owner && (owner.can_feel_pain())) owner.emote("scream") //getting hit on broken hand hurts if(used_weapon) add_autopsy_data("[used_weapon]", brute + burn) @@ -916,7 +916,7 @@ Note that amputating the affected organ does in fact remove the infection from t "You hear a loud cracking sound coming from \the [owner].",\ "Something feels like it shattered in your [name]!",\ "You hear a sickening crack.") - if(owner.species && !(owner.species.flags & NO_PAIN)) + if(owner.species && (owner.can_feel_pain())) owner.emote("scream") playsound(src.loc, "fracture", 100, 1, -2) diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index 33731dba805..1780142cf9e 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -10,7 +10,7 @@ mob/var/next_pain_time = 0 mob/living/carbon/proc/pain(var/partname, var/amount, var/force, var/burning = 0) if(stat >= 1) return - if(species && (species.flags & NO_PAIN)) + if(!can_feel_pain()) return if(analgesic > 40) return @@ -53,7 +53,7 @@ mob/living/carbon/proc/pain(var/partname, var/amount, var/force, var/burning = 0 mob/living/carbon/human/proc/custom_pain(var/message, var/flash_strength) if(stat >= 1) return - if(species.flags & NO_PAIN) + if(!can_feel_pain()) return if(reagents.has_reagent("tramadol")) return @@ -74,7 +74,7 @@ mob/living/carbon/human/proc/custom_pain(var/message, var/flash_strength) mob/living/carbon/human/proc/handle_pain() // not when sleeping - if(species.flags & NO_PAIN) return + if(!can_feel_pain()) return if(stat >= 2) return if(analgesic > 70) diff --git a/code/modules/organs/subtypes/parasite.dm b/code/modules/organs/subtypes/parasite.dm index 035cc973cc6..ec8e2c15d9b 100644 --- a/code/modules/organs/subtypes/parasite.dm +++ b/code/modules/organs/subtypes/parasite.dm @@ -56,7 +56,7 @@ if (!owner) return - if(prob(10) && !(owner.species.flags & NO_PAIN)) + if(prob(10) && (owner.can_feel_pain())) owner << "You feel a stinging pain in your abdomen!" owner.emote("me",1,"winces slightly.") owner.adjustHalLoss(5) @@ -96,7 +96,7 @@ S.set_up(R, 20, 0, T, 40) S.start() - if(!(owner.species.flags & NO_PAIN)) + if(owner.can_feel_pain()) owner.emote("scream") owner.adjustHalLoss(15) owner.drip(15) @@ -122,7 +122,7 @@ /obj/item/organ/parasite/blackkois/process() ..() - if(prob(10) && !(owner.species.flags & NO_PAIN)) + if(prob(10) && (owner.can_feel_pain())) if(stage < 3) owner << "You feel a stinging pain in your abdomen!" else @@ -174,7 +174,7 @@ removed_langs = 1 if(prob(10)) - if(!(owner.species.flags & NO_PAIN)) + if(owner.can_feel_pain()) owner << "You feel an unbearable pain in your mind!" owner.emote("scream") owner.adjustBrainLoss(1) @@ -193,7 +193,7 @@ S.set_up(R, 20, 0, T, 40) S.start() - if(!(owner.species.flags & NO_PAIN)) + if(owner.can_feel_pain()) owner.emote("scream") owner.adjustHalLoss(15) owner.drip(15) @@ -223,7 +223,7 @@ if (!owner) return - if(prob(10) && !(owner.species.flags & NO_PAIN)) + if(prob(10) && (owner.can_feel_pain())) owner << "You feel a burning sensation on your skin!" owner.make_jittery(10) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index 96ee6939412..8ff393a0593 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -459,7 +459,7 @@ if(affecting.take_damage(0, removed * power * 0.1)) H.UpdateDamageIcon() if(prob(100 * removed / meltdose)) // Applies disfigurement - if (!(H.species && (H.species.flags & NO_PAIN))) + if (H.can_feel_pain()) H.emote("scream") H.status_flags |= DISFIGURED else diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index e9c4c457b8b..08a0cb18976 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -582,7 +582,7 @@ /datum/reagent/capsaicin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species && (H.species.flags & (NO_PAIN))) + if(!H.can_feel_pain()) return if(dose < agony_dose) if(prob(5) || dose == metabolism) //dose == metabolism is a very hacky way of forcing the message the first time this procs @@ -626,8 +626,8 @@ return var/mob/living/carbon/human/H = M protection = list(H.head, H.glasses, H.wear_mask) - if(H.species && (H.species.flags & NO_PAIN)) - no_pain = 1 //TODO: living-level can_feel_pain() proc + if(!H.can_feel_pain()) + no_pain = 1 // Robo-eyes are immune to pepperspray now. Wee. var/obj/item/organ/eyes/E = H.get_eyes() @@ -672,7 +672,7 @@ /datum/reagent/capsaicin/condensed/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species && (H.species.flags & NO_PAIN)) + if(!H.can_feel_pain()) return if(dose == metabolism) M << "You feel like your insides are burning!" @@ -3237,7 +3237,7 @@ if(alien != IS_DIONA) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species && (H.species.flags & (NO_PAIN))) + if(!H.can_feel_pain()) return if(dose < agony_dose) if(prob(5) || dose == metabolism) diff --git a/code/modules/spells/artifacts.dm b/code/modules/spells/artifacts.dm index 1a2bd010da8..3eebf26dd14 100644 --- a/code/modules/spells/artifacts.dm +++ b/code/modules/spells/artifacts.dm @@ -281,7 +281,7 @@ to_chat(H, "You stab \the [src] with \the [W]!") H.apply_damage(2, BRUTE, target_zone, edge = TRUE) playsound(get_turf(H), 'sound/weapons/bladeslice.ogg', 50, 1, -1) - if(!(H.species.flags & NO_PAIN)) + if(H.can_feel_pain()) var/obj/item/organ/external/organ = H.get_organ(target_zone) to_chat(H, "You feel a stabbing pain in your [organ.name]!") diff --git a/html/changelogs/alberyk-painfix.yml b/html/changelogs/alberyk-painfix.yml new file mode 100644 index 00000000000..09a5eaed205 --- /dev/null +++ b/html/changelogs/alberyk-painfix.yml @@ -0,0 +1,6 @@ +author: Alberyk + +delete-after: True + +changes: + - tweak: "Pain related effects, such as stun batons and pepperspray, will now properly take in consideration other factors, like painkillers."