diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 61d202558b2..2e7b9b77ea3 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -512,11 +512,14 @@
data["name"] = O.name
var/list/wounds = list()
data["damage"] = get_internal_damage(O)
- if(istype(O, /obj/item/organ/internal/lungs) && H.is_lung_ruptured())
- if(O.is_broken())
+ if(istype(O, /obj/item/organ/internal/lungs))
+ var/obj/item/organ/internal/lungs/L = O
+ if(L.is_broken())
wounds += get_broken_lung_desc()
- else
+ else if(L.is_bruised())
wounds += get_collapsed_lung_desc()
+ if(L.rescued)
+ wounds += "Has a small puncture wound."
if(O.status & ORGAN_DEAD)
wounds += "Necrotic and decaying."
diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm
index 012edb2f435..bec598e12e9 100644
--- a/code/modules/organs/internal/lungs.dm
+++ b/code/modules/organs/internal/lungs.dm
@@ -65,11 +65,17 @@
)
owner.losebreath = round(damage/2)
- if(is_bruised() && rescued)
- if(prob(4))
- to_chat(owner, SPAN_WARNING("It feels hard to breathe..."))
- if (owner.losebreath < 5)
- owner.losebreath = min(owner.losebreath + 1, 5) // it's still not good, but it's much better than an untreated collapsed lung
+ if(rescued)
+ if(is_bruised())
+ if(prob(4))
+ to_chat(owner, SPAN_WARNING("It feels hard to breathe..."))
+ if (owner.losebreath < 5)
+ owner.losebreath = min(owner.losebreath + 1, 5) // it's still not good, but it's much better than an untreated collapsed lung
+ else
+ if(prob(2))
+ to_chat(owner, SPAN_WARNING("It feels hard to breathe, and something in your chest is whistling..."))
+ if (owner.losebreath < 2)
+ owner.losebreath = min(owner.losebreath + 1, 2)
/obj/item/organ/internal/lungs/proc/rupture()
var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
@@ -328,6 +334,8 @@
. = list()
if(is_bruised())
. += "[pick("wheezing", "gurgling")] sounds"
+ if(rescued)
+ . += "a whistling sound"
var/list/breathtype = list()
if(get_oxygen_deprivation() > 50)
@@ -341,5 +349,9 @@
return english_list(.)
+/obj/item/organ/internal/lungs/surgical_fix(mob/user)
+ ..()
+ rescued = FALSE
+
#undef HUMAN_MAX_OXYLOSS
-#undef HUMAN_CRIT_MAX_OXYLOSS
+#undef HUMAN_CRIT_MAX_OXYLOSS
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index 926e79f9e18..d6ab3c9442c 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -1189,6 +1189,10 @@
H.adjustOxyLoss(removed) //Every unit heals 1 oxy damage
H.add_chemical_effect(CE_PNEUMOTOXIC, -removed * 1.5)
H.add_chemical_effect(CE_PULSE, -1)
+
+ var/obj/item/organ/internal/lungs/L = H.internal_organs_by_name[BP_LUNGS]
+ L.rescued = FALSE
+
. = ..()
/datum/reagent/pneumalin/overdose(var/mob/living/carbon/human/H, var/alien, var/removed)
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 2a0b65d3471..eef45d15ed1 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -9,6 +9,7 @@
/obj/item/reagent_containers/syringe
name = "syringe"
desc = "A syringe."
+ desc_info = "This tool can be used to reinflate a collapsed lung. To do this, activate grab intent, select the patient's chest, then click on them. It will hurt a lot, but it will buy time until surgery can be performed."
icon = 'icons/obj/syringe.dmi'
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_medical.dmi',
@@ -120,17 +121,20 @@
if (check_zone(user.zone_sel.selecting) == BP_CHEST) // impromptu needle thoracostomy, re-inflate a collapsed lung
var/P = (user == target) ? "their" : (target.name + "\'s")
var/SM = (user == target) ? "your" : (target.name + "\'s")
- user.visible_message(SPAN_DANGER("[user] aims \the [src] between [P] ribs!"), SPAN_DANGER("You aim \the [src] between [SM] ribs!"))
+ user.visible_message("[user] aims \the [src] between [P] ribs!", SPAN_NOTICE("You aim \the [src] between [SM] ribs!"))
if(!do_mob(user, target, 1.5 SECONDS))
return
- user.visible_message(SPAN_WARNING("[user] jabs \the [src] between [P] ribs with \the [src]!"), SPAN_WARNING("You jab \the [src] between [SM] ribs!"))
- if(H.is_lung_ruptured())
- var/obj/item/organ/internal/lungs/L = H.internal_organs_by_name[BP_LUNGS]
- if(!L.rescued)
- L.rescued = TRUE
- else
- L.rescued = FALSE
- L.take_damage(3)
+ var/blocked = H.getarmor_organ(H.organs_by_name[BP_CHEST], "melee")
+ if(blocked > 20)
+ user.visible_message("[user] jabs \the [src] into [H], but their armor blocks it!", SPAN_WARNING("You jab \the [src] into [H], but their armor blocks it!"))
+ return
+ user.visible_message("[user] jabs \the [src] between [P] ribs!", SPAN_NOTICE("You jab \the [src] between [SM] ribs!"))
+ H.apply_damage(3, BRUTE, BP_CHEST)
+ H.custom_pain("The pain in your chest is living hell!", 75, affecting = H.organs_by_name[BP_CHEST])
+ var/obj/item/organ/internal/lungs/L = H.internal_organs_by_name[BP_LUNGS]
+ if(!L)
+ return
+ L.rescued = TRUE
return
if(user.a_intent == I_HURT && ishuman(user))
diff --git a/html/changelogs/geeves-syringe_stuff.yml b/html/changelogs/geeves-syringe_stuff.yml
new file mode 100644
index 00000000000..50e0e6eee17
--- /dev/null
+++ b/html/changelogs/geeves-syringe_stuff.yml
@@ -0,0 +1,11 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - rscadd: "Having an uninjured but rescued (jabbed with a syringe to reinflate) lung will still suffocate you slowly, and give a unique message."
+ - rscadd: "Rescued lungs can now be diagnosed by stethoscopes and advanced bodyscanners."
+ - rscadd: "You can no longer rescue lungs through armor."
+ - rscadd: "Rescuing someone's lung without giving them painkillers first will be very painful for them."
+ - rscadd: "Added instructions on how to rescue lungs to the syringe extra info."
+ - tweak: "Rescued lungs can only be fixed by doing surgery on them."
\ No newline at end of file