mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-26 21:49:11 +01:00
Various Surgery & Medical fixes, QoL, and adjustments (#18718)
* bunch of medical adjustments * or so i thought * De-death surgery * Update carbon.dm * Update mob_grab_specials.dm * yeh * Palpation * internal bleeding * Update life.dm * duration increase * adjust these * Fixes a bug with defibs that I caused When I reworked get_crit_point, it caused defibs to DEAL oxyloss instead of HEALING it, like it has been doing for the past 8 years. This fixes it. * fixcees this * fixes syringe stabbing * Converts these to managed global lists * gets rid of disabilities * Change injury check to use do_after with delay * lungfix * actually remove the necrosis * Fixes brain surgery * fix language bug * Update brain.dm * ghetto surgery adjustments Buffs some ghetto surgery Makes some injuries sustained less gnarly if you fail with a ghetto tool. Some mild typo fixes.
This commit is contained in:
@@ -215,12 +215,21 @@
|
||||
status += "MISSING"
|
||||
if(org.status & ORGAN_MUTATED)
|
||||
status += "weirdly shapen"
|
||||
if(org.dislocated == 1) //VOREStation Edit Bugfix
|
||||
if(org.dislocated == 1)
|
||||
status += "dislocated"
|
||||
if(org.status & ORGAN_BROKEN)
|
||||
status += "hurts when touched"
|
||||
//infection stuff
|
||||
if(org.status & ORGAN_DEAD)
|
||||
status += "is bruised and necrotic"
|
||||
status += "necrotic"
|
||||
else if(org.germ_level > INFECTION_LEVEL_TWO)
|
||||
status += "feels like it's on fire!"
|
||||
else if(org.germ_level > INFECTION_LEVEL_TWO-INFECTION_LEVEL_ONE) //Early warning
|
||||
status += "warm to the touch"
|
||||
if(LAZYLEN(org.wounds))
|
||||
for(var/datum/wound/W in org.wounds)
|
||||
if(!W.internal)
|
||||
status += "hurting with a slowly growing bruise"
|
||||
if(!org.is_usable() || org.is_dislocated())
|
||||
status += "dangling uselessly"
|
||||
if(status.len)
|
||||
|
||||
@@ -286,7 +286,8 @@
|
||||
|
||||
if (src.stat)
|
||||
msg += span_warning("[p_Theyre()] not responding to anything around [p_they()] and seems to be asleep.")
|
||||
if((stat == 2 || src.losebreath) && get_dist(user, src) <= 3)
|
||||
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
|
||||
if(((stat == 2 || src.losebreath) || !L) && get_dist(user, src) <= 3)
|
||||
msg += span_warning("[p_They()] [user.p_do()] not appear to be breathing.")
|
||||
if(ishuman(user) && !user.stat && Adjacent(user))
|
||||
user.visible_message(span_infoplain(span_bold("[user]") + " checks [src]'s pulse."), span_infoplain("You check [src]'s pulse."))
|
||||
|
||||
@@ -2015,30 +2015,47 @@
|
||||
temp = max(0, temp + modifier_shift) // No negative pulses.
|
||||
|
||||
if(Pump)
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
if(R.id in bradycardics)
|
||||
if(temp <= Pump.standard_pulse_level + 3 && temp >= Pump.standard_pulse_level)
|
||||
temp--
|
||||
if(R.id in tachycardics)
|
||||
if(temp <= Pump.standard_pulse_level + 1 && temp >= PULSE_NONE)
|
||||
///Prevents duplicating a reagent if it's in our gut and blood
|
||||
var/list/current_medications = list()
|
||||
//Stuff in our stomach, such as coffee, nicotine, 13loko, etc.
|
||||
for(var/datum/reagent/R in ingested.reagent_list)
|
||||
if((R.id in GLOB.tachycardics) && !(R.id in current_medications))
|
||||
if(temp < PULSE_THREADY && temp != PULSE_NONE) //If we really push it, we can get our pulse to thready.
|
||||
temp++
|
||||
if(R.id in heartstopper) //To avoid using fakedeath
|
||||
current_medications += R.id
|
||||
if((R.id in GLOB.bradycardics) && !(R.id in current_medications))
|
||||
if(temp >= PULSE_NORM)
|
||||
temp--
|
||||
current_medications += R.id
|
||||
//Stuff in our bloodstream. This is checked AFTER stomach so the heartstoppers can have their fun.
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
if((R.id in GLOB.tachycardics) && !(R.id in current_medications))
|
||||
if(temp < PULSE_THREADY && temp != PULSE_NONE) //We can reach a thready pulse, but only if we actually have a pulse.
|
||||
temp++
|
||||
current_medications += R.id
|
||||
if((R.id in GLOB.bradycardics) && !(R.id in current_medications))
|
||||
if(temp >= PULSE_NORM) //Can get to PULSE_SLOW but never PULSE_NONE
|
||||
temp--
|
||||
current_medications += R.id
|
||||
if(R.id in GLOB.heartstopper) //To avoid using fakedeath
|
||||
temp = PULSE_NONE
|
||||
if(R.id in cheartstopper) //Conditional heart-stoppage
|
||||
break //No amount of medications is getting you out of this.
|
||||
if(R.id in GLOB.cheartstopper) //Conditional heart-stoppage
|
||||
if(R.volume >= R.overdose)
|
||||
temp = PULSE_NONE
|
||||
break //No amount of medications is getting you out of this.
|
||||
return temp * brain_modifier
|
||||
//handles different chems' influence on pulse
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
if(R.id in bradycardics)
|
||||
if(R.id in GLOB.bradycardics)
|
||||
if(temp <= PULSE_THREADY && temp >= PULSE_NORM)
|
||||
temp--
|
||||
if(R.id in tachycardics)
|
||||
if(R.id in GLOB.tachycardics)
|
||||
if(temp <= PULSE_FAST && temp >= PULSE_NONE)
|
||||
temp++
|
||||
if(R.id in heartstopper) //To avoid using fakedeath
|
||||
if(R.id in GLOB.heartstopper) //To avoid using fakedeath
|
||||
temp = PULSE_NONE
|
||||
if(R.id in cheartstopper) //Conditional heart-stoppage
|
||||
if(R.id in GLOB.cheartstopper) //Conditional heart-stoppage
|
||||
if(R.volume >= R.overdose)
|
||||
temp = PULSE_NONE
|
||||
|
||||
|
||||
@@ -470,6 +470,7 @@
|
||||
return result
|
||||
|
||||
///Use this proc to get the damage in which the mob will be put into critical condition (hardcrit)
|
||||
///Will return a NEGATIVE value. Ex: MaxHealth of 100 returns -50
|
||||
/mob/living/proc/get_crit_point()
|
||||
return -(getMaxHealth()*0.5)
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
user.visible_message(span_notice("[user] starts inspecting [affecting]'s [E.name] carefully."))
|
||||
if(!do_after(user, 1 SECOND, H))
|
||||
to_chat(user, span_notice("You must stand still to inspect [E] for wounds."))
|
||||
else if(E.wounds.len)
|
||||
else if(LAZYLEN(E.wounds))
|
||||
to_chat(user, span_warning("You find [E.get_wounds_desc()]"))
|
||||
else
|
||||
to_chat(user, span_notice("You find no visible wounds."))
|
||||
@@ -17,6 +17,8 @@
|
||||
to_chat(user, span_notice("Checking bones now..."))
|
||||
if(!do_after(user, 2 SECONDS, H))
|
||||
to_chat(user, span_notice("You must stand still to feel [E] for fractures."))
|
||||
if(E.nonsolid && E.cannot_break) //boneless!
|
||||
to_chat(user, span_warning("You are unable to feel any bones in the [E.name]!"))
|
||||
else if(E.status & ORGAN_BROKEN)
|
||||
to_chat(user, span_warning("The [E.encased ? E.encased : "bone in the [E.name]"] moves slightly when you poke it!"))
|
||||
H.custom_pain("Your [E.name] hurts where it's poked.", 40)
|
||||
@@ -37,9 +39,81 @@
|
||||
if(E.status & ORGAN_DEAD)
|
||||
to_chat(user, span_warning("[E] is decaying!"))
|
||||
bad = 1
|
||||
if(E.status & ORGAN_DEAD) //this is also infection level 3
|
||||
to_chat(user, span_bolddanger("[H]'s [E.name] is gangreous and completely dead!"))
|
||||
bad = 1
|
||||
else if(E.germ_level > INFECTION_LEVEL_ONE)
|
||||
if(E.germ_level > INFECTION_LEVEL_TWO)
|
||||
to_chat(user, span_danger("[H]'s [E.name] shows signs of a severe infection!"))
|
||||
bad = 1
|
||||
else
|
||||
to_chat(user, span_warning("[H] shows signs of infection in the [E.name]."))
|
||||
bad = 1
|
||||
if(LAZYLEN(E.wounds))
|
||||
for(var/datum/wound/W in E.wounds)
|
||||
if(W.internal)
|
||||
to_chat(user, span_danger("You find a large, swelling hematoma in the skin")) //INTERNAL BLEEDING, BE VERY AFRAID.
|
||||
break
|
||||
if(!bad)
|
||||
to_chat(user, span_notice("[H]'s skin is normal."))
|
||||
|
||||
var/body_part = parse_zone(target_zone)
|
||||
if(body_part == BP_GROIN || body_part == BP_TORSO || body_part == BP_HEAD)
|
||||
to_chat(user, span_notice("Checking for internal injury now..."))
|
||||
if(!do_after(user, 5 SECONDS, H))
|
||||
to_chat(user, span_notice("You must stand still to check [H]'s [E.name] for internal injury."))
|
||||
else
|
||||
|
||||
///If we have a bad organ down here. Very non-specific. Doctor should ask how badly it hurt.
|
||||
var/bad_organs = 0
|
||||
///If we have appendicitis or not.
|
||||
var/appendicitis = FALSE
|
||||
switch(body_part)
|
||||
|
||||
if(BP_GROIN)
|
||||
var/obj/item/organ/internal/intestine/intestine = H.internal_organs_by_name[O_INTESTINE]
|
||||
var/obj/item/organ/internal/stomach/stomach = H.internal_organs_by_name[O_STOMACH]
|
||||
var/obj/item/organ/internal/kidneys/kidneys = H.internal_organs_by_name[O_KIDNEYS]
|
||||
var/obj/item/organ/internal/liver/liver = H.internal_organs_by_name[O_LIVER]
|
||||
var/obj/item/organ/internal/spleen/spleen = H.internal_organs_by_name[O_SPLEEN]
|
||||
var/obj/item/organ/internal/appendix/appendix = H.internal_organs_by_name[O_APPENDIX]
|
||||
if(intestine && intestine.is_bruised())
|
||||
bad_organs++
|
||||
if(stomach && stomach.is_bruised())
|
||||
bad_organs++
|
||||
if(kidneys && kidneys.is_bruised())
|
||||
bad_organs++
|
||||
if(liver && liver.is_bruised())
|
||||
bad_organs++
|
||||
if(spleen && spleen.is_bruised())
|
||||
bad_organs++
|
||||
if(appendix && (appendix.is_bruised() || appendix.inflamed))
|
||||
bad_organs++
|
||||
appendicitis = TRUE
|
||||
|
||||
if(BP_TORSO)
|
||||
var/obj/item/organ/internal/lungs/lungs = H.internal_organs_by_name[O_LUNGS]
|
||||
var/obj/item/organ/internal/heart/heart = H.internal_organs_by_name[O_HEART]
|
||||
if(lungs && lungs.is_bruised())
|
||||
bad_organs++
|
||||
if(heart && heart.is_bruised())
|
||||
bad_organs++
|
||||
|
||||
if(BP_HEAD)
|
||||
var/obj/item/organ/internal/voicebox/voicebox = H.internal_organs_by_name[O_VOICE]
|
||||
if(voicebox && voicebox.is_bruised())
|
||||
bad_organs++
|
||||
|
||||
if(bad_organs)
|
||||
to_chat(user, span_warning("[H]'s [E.name] appears to be tender when you press on it, indicating an internal injury."))
|
||||
H.custom_pain("Your [E.name] hurts where it's poked.", bad_organs*20)
|
||||
|
||||
if(appendicitis)
|
||||
var/pain_check = (H.stat && (H.can_feel_pain() || H.synth_cosmetic_pain) && H.chem_effects[CE_PAINKILLER] < 60)
|
||||
if(pain_check) //They can feel pain.
|
||||
to_chat(user, span_danger("[H] jolts when you let go of their [E.name], indicating appendicitis!"))
|
||||
H.custom_pain("You feel pure agony as [src] pushes down on your [E.name]!", 200)
|
||||
|
||||
/obj/item/grab/proc/jointlock(mob/living/carbon/human/target, mob/attacker, var/target_zone)
|
||||
if(state < GRAB_AGGRESSIVE)
|
||||
to_chat(attacker, span_warning("You require a better grab to do this."))
|
||||
|
||||
Reference in New Issue
Block a user