diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
index 9eea0fadd31..ba6f054ab99 100644
--- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
+++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
@@ -5,13 +5,15 @@
// Organ signals
/// Called on the organ when it is implanted into someone (mob/living/carbon/receiver)
-#define COMSIG_ORGAN_IMPLANTED "comsig_organ_implanted"
-/// Called when using the *wag emote
-#define COMSIG_ORGAN_WAG_TAIL "comsig_wag_tail"
+#define COMSIG_ORGAN_IMPLANTED "organ_implanted"
/// Called on the organ when it is removed from someone (mob/living/carbon/old_owner)
-#define COMSIG_ORGAN_REMOVED "comsig_organ_removed"
+#define COMSIG_ORGAN_REMOVED "organ_removed"
/// Called when an organ is being regenerated with a new copy in species regenerate_organs (obj/item/organ/replacement)
#define COMSIG_ORGAN_BEING_REPLACED "organ_being_replaced"
+/// Called when an organ gets surgically removed (mob/living/user, mob/living/carbon/old_owner, target_zone, obj/item/tool)
+#define COMSIG_ORGAN_SURGICALLY_REMOVED "organ_surgically_removed"
+/// Called when using the *wag emote
+#define COMSIG_ORGAN_WAG_TAIL "wag_tail"
///from base of mob/update_transform()
#define COMSIG_LIVING_POST_UPDATE_TRANSFORM "living_post_update_transform"
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index 3a796c3f5b0..2fb3de4b311 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -27,6 +27,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
list("Bad Touch", "Friendly"),
list("Extrovert", "Introvert"),
list("Prosthetic Limb", "Quadruple Amputee", "Body Purist"),
+ list("Prosthetic Organ", "Tin Man", "Body Purist"),
list("Quadruple Amputee", "Paraplegic", "Hemiplegic"),
list("Quadruple Amputee", "Frail"),
list("Social Anxiety", "Mute"),
diff --git a/code/datums/elements/dangerous_surgical_removal.dm b/code/datums/elements/dangerous_surgical_removal.dm
new file mode 100644
index 00000000000..a0dea1c8bdb
--- /dev/null
+++ b/code/datums/elements/dangerous_surgical_removal.dm
@@ -0,0 +1,29 @@
+/**
+ * ## DANGEROUS SURGICAL REMOVAL ELEMENT
+ *
+ * Makes the organ explode when removed surgically.
+ * That's about it.
+ */
+/datum/element/dangerous_surgical_removal
+
+/datum/element/dangerous_surgical_removal/Attach(datum/target)
+ . = ..()
+ if(!isorgan(target))
+ return ELEMENT_INCOMPATIBLE
+ RegisterSignal(target, COMSIG_ORGAN_SURGICALLY_REMOVED, PROC_REF(on_surgical_removal))
+
+/datum/element/dangerous_surgical_removal/Detach(datum/source)
+ . = ..()
+ UnregisterSignal(source, COMSIG_ORGAN_SURGICALLY_REMOVED)
+
+/datum/element/dangerous_surgical_removal/proc/on_surgical_removal(obj/item/organ/source, mob/living/user, mob/living/carbon/old_owner, target_zone, obj/item/tool)
+ SIGNAL_HANDLER
+ if(source.organ_flags & (ORGAN_FAILING|ORGAN_EMP))
+ return
+ if(user?.Adjacent(source))
+ source.audible_message("[source] explodes on [user]'s face!")
+ user.take_bodypart_damage(15)
+ else
+ source.audible_message("[source] explodes into tiny pieces!")
+ explosion(source, light_impact_range = 1, explosion_cause = source)
+ qdel(source)
diff --git a/code/datums/quirks/negative_quirks.dm b/code/datums/quirks/negative_quirks.dm
index f1395d5a535..2e45d383af6 100644
--- a/code/datums/quirks/negative_quirks.dm
+++ b/code/datums/quirks/negative_quirks.dm
@@ -61,7 +61,6 @@
lose_text = span_notice("You feel vigorous again.")
medical_record_text = "Patient requires regular treatment for blood loss due to low production of blood."
hardcore_value = 8
- quirk_flags = QUIRK_HUMAN_ONLY
mail_goodies = list(/obj/item/reagent_containers/blood/o_minus) // universal blood type that is safe for all
var/min_blood = BLOOD_VOLUME_SAFE - 25 // just barely survivable without treatment
@@ -586,10 +585,10 @@
/datum/quirk/prosthetic_limb
name = "Prosthetic Limb"
- desc = "An accident caused you to lose one of your limbs. Because of this, you now have a random prosthetic!"
+ desc = "An accident caused you to lose one of your limbs. Because of this, you now have a surplus prosthetic!"
icon = "tg-prosthetic-leg"
value = -3
- medical_record_text = "During physical examination, patient was found to have a prosthetic limb."
+ medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic limb."
hardcore_value = 3
quirk_flags = QUIRK_HUMAN_ONLY // while this technically changes appearance, we don't want it to be shown on the dummy because it's randomized at roundstart
mail_goodies = list(/obj/item/weldingtool/mini, /obj/item/stack/cable_coil/five)
@@ -615,6 +614,7 @@
if(BODY_ZONE_R_LEG)
prosthetic = new /obj/item/bodypart/leg/right/robot/surplus
slot_string = "right leg"
+ medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic [slot_string]."
old_limb = human_holder.return_and_replace_bodypart(prosthetic, special = TRUE)
/datum/quirk/prosthetic_limb/post_add()
@@ -628,12 +628,13 @@
/datum/quirk/quadruple_amputee
name = "Quadruple Amputee"
- desc = "Oops! All Prosthetics! Due to some truly cruel cosmic punishment, all your limbs have been taken from you."
+ desc = "Oops! All Prosthetics! Due to some truly cruel cosmic punishment, all your limbs have been replaced with surplus prosthetics."
icon = "tg-prosthetic-full"
value = -6
- medical_record_text = "During physical examination, patient was found to have all prosthetic limbs."
+ medical_record_text = "During physical examination, patient was found to have all low-budget prosthetic limbs."
hardcore_value = 6
quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE
+ mail_goodies = list(/obj/item/weldingtool/mini, /obj/item/stack/cable_coil/five)
/datum/quirk/quadruple_amputee/add_unique(client/client_source)
var/mob/living/carbon/human/human_holder = quirk_holder
@@ -643,8 +644,110 @@
human_holder.del_and_replace_bodypart(new /obj/item/bodypart/leg/right/robot/surplus, special = TRUE)
/datum/quirk/quadruple_amputee/post_add()
- to_chat(quirk_holder, span_boldannounce("All your limbs have been replaced with surplus prosthetics. They are fragile and will easily come apart under duress. Additionally, \
- you need to use a welding tool and cables to repair them, instead of bruise packs and ointment."))
+ to_chat(quirk_holder, span_boldannounce("All your limbs have been replaced with surplus prosthetics. They are fragile and will easily come apart under duress. \
+ Additionally, you need to use a welding tool and cables to repair them, instead of bruise packs and ointment."))
+
+/datum/quirk/prosthetic_organ
+ name = "Prosthetic Organ"
+ desc = "An accident caused you to lose one of your organs. Because of this, you now have a surplus prosthetic!"
+ icon = FA_ICON_LUNGS
+ value = -3
+ medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic organ. \
+ Removal of these organs is known to be dangerous to the patient as well as the practitioner."
+ hardcore_value = 3
+ mail_goodies = list(/obj/item/storage/organbox)
+ /// The slot to replace, in string form
+ var/slot_string = "organ"
+ /// The original organ from before the prosthetic was applied
+ var/obj/item/organ/old_organ
+
+/datum/quirk/prosthetic_organ/add_unique(client/client_source)
+ var/mob/living/carbon/human/human_holder = quirk_holder
+ var/static/list/organ_slots = list(
+ ORGAN_SLOT_HEART,
+ ORGAN_SLOT_LUNGS,
+ ORGAN_SLOT_LIVER,
+ ORGAN_SLOT_STOMACH,
+ )
+ var/list/possible_organ_slots = organ_slots.Copy()
+ if(HAS_TRAIT(human_holder, TRAIT_NOBLOOD))
+ possible_organ_slots -= ORGAN_SLOT_HEART
+ if(HAS_TRAIT(human_holder, TRAIT_NOBREATH))
+ possible_organ_slots -= ORGAN_SLOT_LUNGS
+ if(HAS_TRAIT(human_holder, TRAIT_LIVERLESS_METABOLISM))
+ possible_organ_slots -= ORGAN_SLOT_LIVER
+ if(HAS_TRAIT(human_holder, TRAIT_NOHUNGER))
+ possible_organ_slots -= ORGAN_SLOT_STOMACH
+ if(!length(organ_slots)) //what the hell
+ return
+ var/organ_slot = pick(possible_organ_slots)
+ var/obj/item/organ/prosthetic
+ switch(organ_slot)
+ if(ORGAN_SLOT_HEART)
+ prosthetic = new /obj/item/organ/internal/heart/cybernetic/surplus
+ slot_string = "heart"
+ if(ORGAN_SLOT_LUNGS)
+ prosthetic = new /obj/item/organ/internal/lungs/cybernetic/surplus
+ slot_string = "lungs"
+ if(ORGAN_SLOT_LIVER)
+ prosthetic = new /obj/item/organ/internal/liver/cybernetic/surplus
+ slot_string = "liver"
+ if(ORGAN_SLOT_STOMACH)
+ prosthetic = new /obj/item/organ/internal/stomach/cybernetic/surplus
+ slot_string = "stomach"
+ medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic [slot_string]. \
+ Removal of these organs is known to be dangerous to the patient as well as the practitioner."
+ old_organ = human_holder.get_organ_slot(organ_slot)
+ if(prosthetic.Insert(human_holder, special = TRUE, drop_if_replaced = TRUE))
+ old_organ.moveToNullspace()
+ STOP_PROCESSING(SSobj, old_organ)
+
+/datum/quirk/prosthetic_organ/post_add()
+ to_chat(quirk_holder, span_boldannounce("Your [slot_string] has been replaced with a surplus organ. It is fragile and will easily come apart under duress. \
+ Additionally, any EMP will make it stop working entirely."))
+
+/datum/quirk/prosthetic_organ/remove()
+ if(old_organ)
+ old_organ.Insert(quirk_holder, special = TRUE)
+ old_organ = null
+
+/datum/quirk/tin_man
+ name = "Tin Man"
+ desc = "Oops! All Prosthetics! Due to some truly cruel cosmic punishment, most of your internal organs have been replaced with surplus prosthetics."
+ icon = FA_ICON_ROBOT
+ value = -6
+ medical_record_text = "During physical examination, patient was found to have numerous low-budget prosthetic internal organs. \
+ Removal of these organs is known to be dangerous to the patient as well as the practitioner."
+ hardcore_value = 6
+ mail_goodies = list(/obj/item/storage/organbox)
+
+/datum/quirk/tin_man/add_unique(client/client_source)
+ var/mob/living/carbon/human/human_holder = quirk_holder
+ var/static/list/organ_slots = list(
+ ORGAN_SLOT_HEART = /obj/item/organ/internal/heart/cybernetic/surplus,
+ ORGAN_SLOT_LUNGS = /obj/item/organ/internal/lungs/cybernetic/surplus,
+ ORGAN_SLOT_LIVER = /obj/item/organ/internal/liver/cybernetic/surplus,
+ ORGAN_SLOT_STOMACH = /obj/item/organ/internal/stomach/cybernetic/surplus,
+ )
+ var/list/possible_organ_slots = organ_slots.Copy()
+ if(HAS_TRAIT(human_holder, TRAIT_NOBLOOD))
+ possible_organ_slots -= ORGAN_SLOT_HEART
+ if(HAS_TRAIT(human_holder, TRAIT_NOBREATH))
+ possible_organ_slots -= ORGAN_SLOT_LUNGS
+ if(HAS_TRAIT(human_holder, TRAIT_LIVERLESS_METABOLISM))
+ possible_organ_slots -= ORGAN_SLOT_LIVER
+ if(HAS_TRAIT(human_holder, TRAIT_NOHUNGER))
+ possible_organ_slots -= ORGAN_SLOT_STOMACH
+ if(!length(organ_slots)) //what the hell
+ return
+ for(var/organ_slot in possible_organ_slots)
+ var/organ_path = possible_organ_slots[organ_slot]
+ var/obj/item/organ/new_organ = new organ_path()
+ new_organ.Insert(human_holder, special = TRUE)
+
+/datum/quirk/tin_man/post_add()
+ to_chat(quirk_holder, span_boldannounce("Most of your internal organs have been replaced with surplus prosthetics. They are fragile and will easily come apart under duress. \
+ Additionally, any EMP will make them stop working entirely."))
/datum/quirk/pushover
name = "Pushover"
diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm
index 33c9b54b3b1..c194c150d6d 100644
--- a/code/modules/surgery/organ_manipulation.dm
+++ b/code/modules/surgery/organ_manipulation.dm
@@ -268,6 +268,7 @@
log_combat(user, target, "surgically removed [target_organ.name] from", addition="COMBAT MODE: [uppertext(user.combat_mode)]")
target_organ.Remove(target)
target_organ.forceMove(get_turf(target))
+ target_organ.on_surgical_removal(user, target, target_zone, tool)
else
display_results(
user,
diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm
index d587ca08c54..3f2c98cdd85 100644
--- a/code/modules/surgery/organs/_organ.dm
+++ b/code/modules/surgery/organs/_organ.dm
@@ -198,6 +198,14 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
/obj/item/organ/proc/on_find(mob/living/finder)
return
+/**
+ * Proc that gets called when the organ is surgically removed by someone, can be used for special effects
+ * Currently only used so surplus organs can explode when surgically removed.
+ */
+/obj/item/organ/proc/on_surgical_removal(mob/living/user, mob/living/carbon/old_owner, target_zone, obj/item/tool)
+ SHOULD_CALL_PARENT(TRUE)
+ SEND_SIGNAL(src, COMSIG_ORGAN_SURGICALLY_REMOVED, user, old_owner, target_zone, tool)
+
/obj/item/organ/process(seconds_per_tick, times_fired)
return
@@ -220,6 +228,9 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
return
if(damage > high_threshold)
+ if(IS_ROBOTIC_ORGAN(src))
+ . += span_warning("[src] seems to be malfunctioning.")
+ return
. += span_warning("[src] is starting to look discolored.")
///Used as callbacks by object pooling
@@ -380,7 +391,7 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
/obj/item/organ/proc/get_status_text()
var/status = ""
if(owner.has_reagent(/datum/reagent/inverse/technetium))
- status = " organ is [round((damage/maxHealth)*100, 1)]% damaged."
+ status = "[round((damage/maxHealth)*100, 1)]% damaged."
else if(organ_flags & ORGAN_FAILING)
status = "Non-Functional"
else if(damage > high_threshold)
diff --git a/code/modules/surgery/organs/internal/heart/_heart.dm b/code/modules/surgery/organs/internal/heart/_heart.dm
index c26f7d0dc83..3a9920fe5f4 100644
--- a/code/modules/surgery/organs/internal/heart/_heart.dm
+++ b/code/modules/surgery/organs/internal/heart/_heart.dm
@@ -209,24 +209,6 @@
var/ramount = 10
var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
-/obj/item/organ/internal/heart/cybernetic/tier2
- name = "cybernetic heart"
- desc = "An electronic device designed to mimic the functions of an organic human heart. Also holds an emergency dose of epinephrine, used automatically after facing severe trauma."
- icon_state = "heart-c-u-on"
- base_icon_state = "heart-c-u"
- maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
- dose_available = TRUE
- emp_vulnerability = 40
-
-/obj/item/organ/internal/heart/cybernetic/tier3
- name = "upgraded cybernetic heart"
- desc = "An electronic device designed to mimic the functions of an organic human heart. Also holds an emergency dose of epinephrine, used automatically after facing severe trauma. This upgraded model can regenerate its dose after use."
- icon_state = "heart-c-u2-on"
- base_icon_state = "heart-c-u2"
- maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
- dose_available = TRUE
- emp_vulnerability = 20
-
/obj/item/organ/internal/heart/cybernetic/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
@@ -258,10 +240,42 @@
owner.reagents.add_reagent(rid, ramount)
dose_available = FALSE
+/obj/item/organ/internal/heart/cybernetic/tier2
+ name = "cybernetic heart"
+ desc = "An electronic device designed to mimic the functions of an organic human heart. Also holds an emergency dose of epinephrine, used automatically after facing severe trauma."
+ icon_state = "heart-c-u-on"
+ base_icon_state = "heart-c-u"
+ maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
+ dose_available = TRUE
+ emp_vulnerability = 40
+
+/obj/item/organ/internal/heart/cybernetic/tier3
+ name = "upgraded cybernetic heart"
+ desc = "An electronic device designed to mimic the functions of an organic human heart. Also holds an emergency dose of epinephrine, used automatically after facing severe trauma. This upgraded model can regenerate its dose after use."
+ icon_state = "heart-c-u2-on"
+ base_icon_state = "heart-c-u2"
+ maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
+ dose_available = TRUE
+ emp_vulnerability = 20
+
/obj/item/organ/internal/heart/cybernetic/tier3/used_dose()
. = ..()
addtimer(VARSET_CALLBACK(src, dose_available, TRUE), 5 MINUTES)
+/obj/item/organ/internal/heart/cybernetic/surplus
+ name = "surplus prosthetic heart"
+ desc = "A fragile mockery of a human heart that resembles a water pump more than an actual heart. \
+ Offers no protection against EMPs."
+ icon_state = "heart-c-s-on"
+ base_icon_state = "heart-c-s"
+ maxHealth = STANDARD_ORGAN_THRESHOLD*0.5
+ emp_vulnerability = 100
+
+//surplus organs are so awful that they explode when removed, unless failing
+/obj/item/organ/internal/heart/cybernetic/surplus/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/dangerous_surgical_removal)
+
/obj/item/organ/internal/heart/freedom
name = "heart of freedom"
desc = "This heart pumps with the passion to give... something freedom."
diff --git a/code/modules/surgery/organs/internal/liver/_liver.dm b/code/modules/surgery/organs/internal/liver/_liver.dm
index d6893a7e5cc..1f9759e3482 100755
--- a/code/modules/surgery/organs/internal/liver/_liver.dm
+++ b/code/modules/surgery/organs/internal/liver/_liver.dm
@@ -247,11 +247,21 @@
desc = "A very basic device designed to mimic the functions of a human liver. Handles toxins slightly worse than an organic liver."
icon_state = "liver-c"
organ_flags = ORGAN_ROBOTIC
+ maxHealth = STANDARD_ORGAN_THRESHOLD*0.5
toxTolerance = 2
liver_resistance = 0.9 * LIVER_DEFAULT_TOX_RESISTANCE // -10%
- maxHealth = STANDARD_ORGAN_THRESHOLD*0.5
var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
+/obj/item/organ/internal/liver/cybernetic/emp_act(severity)
+ . = ..()
+ if(. & EMP_PROTECT_SELF)
+ return
+ if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
+ owner.adjustToxLoss(10)
+ COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
+ if(prob(emp_vulnerability/severity)) //Chance of permanent effects
+ organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
+
/obj/item/organ/internal/liver/cybernetic/tier2
name = "cybernetic liver"
desc = "An electronic device designed to mimic the functions of a human liver. Handles toxins slightly better than an organic liver."
@@ -265,21 +275,29 @@
name = "upgraded cybernetic liver"
desc = "An upgraded version of the cybernetic liver, designed to improve further upon organic livers. It is resistant to alcohol poisoning and is very robust at filtering toxins."
icon_state = "liver-c-u2"
- alcohol_tolerance = 0.001
+ alcohol_tolerance = ALCOHOL_RATE * 0.2
maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
toxTolerance = 10 //can shrug off up to 10u of toxins
liver_resistance = 1.5 * LIVER_DEFAULT_TOX_RESISTANCE // +50%
emp_vulnerability = 20
-/obj/item/organ/internal/liver/cybernetic/emp_act(severity)
+/obj/item/organ/internal/liver/cybernetic/surplus
+ name = "surplus prosthetic liver"
+ desc = "A very cheap prosthetic liver, mass produced for low-functioning alcoholics... It looks more like a water filter than \
+ an actual liver. \
+ Very fragile, absolutely terrible at filtering toxins and substantially weak to alcohol. \
+ Offers no protection against EMPs."
+ icon_state = "liver-c-s"
+ maxHealth = STANDARD_ORGAN_THRESHOLD * 0.35
+ alcohol_tolerance = ALCOHOL_RATE * 2 // can barely handle alcohol
+ toxTolerance = 1 //basically can't shrug off any toxins
+ liver_resistance = 0.75 * LIVER_DEFAULT_TOX_RESISTANCE // -25%
+ emp_vulnerability = 100
+
+//surplus organs are so awful that they explode when removed, unless failing
+/obj/item/organ/internal/liver/cybernetic/surplus/Initialize(mapload)
. = ..()
- if(. & EMP_PROTECT_SELF)
- return
- if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
- owner.adjustToxLoss(10)
- COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
- if(prob(emp_vulnerability/severity)) //Chance of permanent effects
- organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
+ AddElement(/datum/element/dangerous_surgical_removal)
#undef HAS_SILENT_TOXIN
#undef HAS_NO_TOXIN
diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm
index 7214c7e6764..9b42faea33e 100644
--- a/code/modules/surgery/organs/internal/lungs/_lungs.dm
+++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm
@@ -822,9 +822,18 @@
icon_state = "lungs-c"
organ_flags = ORGAN_ROBOTIC
maxHealth = STANDARD_ORGAN_THRESHOLD * 0.5
-
var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
+/obj/item/organ/internal/lungs/cybernetic/emp_act(severity)
+ . = ..()
+ if(. & EMP_PROTECT_SELF)
+ return
+ if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
+ owner.losebreath += 20
+ COOLDOWN_START(src, severe_cooldown, 30 SECONDS)
+ if(prob(emp_vulnerability/severity)) //Chance of permanent effects
+ organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
+
/obj/item/organ/internal/lungs/cybernetic/tier2
name = "cybernetic lungs"
desc = "A cybernetic version of the lungs found in traditional humanoid entities. Allows for greater intakes of oxygen than organic lungs, requiring slightly less pressure."
@@ -847,16 +856,18 @@
cold_level_2_threshold = 140
cold_level_3_threshold = 100
-/obj/item/organ/internal/lungs/cybernetic/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
- owner.losebreath += 20
- COOLDOWN_START(src, severe_cooldown, 30 SECONDS)
- if(prob(emp_vulnerability/severity)) //Chance of permanent effects
- organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
+/obj/item/organ/internal/lungs/cybernetic/surplus
+ name = "surplus prosthetic lungs"
+ desc = "Two fragile, inflatable sacks of air that only barely mimic the function of human lungs. \
+ Offer no protection against EMPs."
+ icon_state = "lungs-c-s"
+ maxHealth = 0.35 * STANDARD_ORGAN_THRESHOLD
+ emp_vulnerability = 100
+//surplus organs are so awful that they explode when removed, unless failing
+/obj/item/organ/internal/lungs/cybernetic/surplus/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/dangerous_surgical_removal)
/obj/item/organ/internal/lungs/lavaland
name = "blackened frilled lungs" // blackened from necropolis exposure
diff --git a/code/modules/surgery/organs/internal/stomach/_stomach.dm b/code/modules/surgery/organs/internal/stomach/_stomach.dm
index 2d2a4681616..c05200be189 100644
--- a/code/modules/surgery/organs/internal/stomach/_stomach.dm
+++ b/code/modules/surgery/organs/internal/stomach/_stomach.dm
@@ -291,8 +291,18 @@
icon_state = "stomach-c"
organ_flags = ORGAN_ROBOTIC
maxHealth = STANDARD_ORGAN_THRESHOLD * 0.5
- var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
metabolism_efficiency = 0.035 // not as good at digestion
+ var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
+
+/obj/item/organ/internal/stomach/cybernetic/emp_act(severity)
+ . = ..()
+ if(. & EMP_PROTECT_SELF)
+ return
+ if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
+ owner.vomit(stun = FALSE)
+ COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
+ if(prob(emp_vulnerability/severity)) //Chance of permanent effects
+ organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
/obj/item/organ/internal/stomach/cybernetic/tier2
name = "cybernetic stomach"
@@ -312,15 +322,19 @@
emp_vulnerability = 20
metabolism_efficiency = 0.1
-/obj/item/organ/internal/stomach/cybernetic/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
- owner.vomit(stun = FALSE)
- COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
- if(prob(emp_vulnerability/severity)) //Chance of permanent effects
- organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
+/obj/item/organ/internal/stomach/cybernetic/surplus
+ name = "surplus prosthetic stomach"
+ desc = "A mechanical plastic oval that utilizes sulfuric acid instead of stomach acid. \
+ Very fragile, with painfully slow metabolism.\
+ Offers no protection against EMPs."
+ icon_state = "stomach-c-s"
+ maxHealth = STANDARD_ORGAN_THRESHOLD * 0.35
+ emp_vulnerability = 100
+ metabolism_efficiency = 0.025
+//surplus organs are so awful that they explode when removed, unless failing
+/obj/item/organ/internal/stomach/cybernetic/surplus/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/dangerous_surgical_removal)
#undef STOMACH_METABOLISM_CONSTANT
diff --git a/icons/obj/medical/organs/organs.dmi b/icons/obj/medical/organs/organs.dmi
index b47584b321c..3de3e057df6 100644
Binary files a/icons/obj/medical/organs/organs.dmi and b/icons/obj/medical/organs/organs.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 3cc12d27771..fad8687c17a 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1194,6 +1194,7 @@
#include "code\datums\elements\cult_halo.dm"
#include "code\datums\elements\curse_announcement.dm"
#include "code\datums\elements\cursed.dm"
+#include "code\datums\elements\dangerous_surgical_removal.dm"
#include "code\datums\elements\death_drops.dm"
#include "code\datums\elements\death_explosion.dm"
#include "code\datums\elements\death_gases.dm"