diff --git a/code/datums/diseases/advance/symptoms/itching.dm b/code/datums/diseases/advance/symptoms/itching.dm
index c0c312cbc2..6835cb13d4 100644
--- a/code/datums/diseases/advance/symptoms/itching.dm
+++ b/code/datums/diseases/advance/symptoms/itching.dm
@@ -49,7 +49,7 @@ BONUS
var/mob/living/carbon/M = A.affected_mob
var/picked_bodypart = pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
var/obj/item/bodypart/bodypart = M.get_bodypart(picked_bodypart)
- if(bodypart && bodypart.status == BODYPART_ORGANIC && !bodypart.is_pseudopart) //robotic limbs will mean less scratching overall
+ if(bodypart && bodypart.is_organic_limb() && !bodypart.is_pseudopart) //robotic limbs will mean less scratching overall
var/can_scratch = scratch && !M.incapacitated() && get_location_accessible(M, picked_bodypart)
M.visible_message("[can_scratch ? "[M] scratches [M.p_their()] [bodypart.name]." : ""]", "Your [bodypart.name] itches. [can_scratch ? " You scratch it." : ""]")
if(can_scratch)
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index a96b0104f1..01d684adad 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -59,7 +59,7 @@
if(!affecting) //Missing limb?
to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]!")
return
- if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR
+ if(affecting.is_organic_limb(FALSE)) //Limb must be organic to be healed - RR
if(affecting.brute_dam && brute || affecting.burn_dam && burn)
user.visible_message("[user] applies \the [src] on [C]'s [affecting.name].", "You apply \the [src] on [C]'s [affecting.name].")
if(affecting.heal_damage(brute, burn))
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index ee196f8c1b..d873b42d33 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -228,7 +228,7 @@
for(var/BP in PP.bodyparts)
var/obj/item/bodypart/NN = BP
- if(NN.status == BODYPART_ORGANIC && NN.species_id != "plasmaman") //getting every organic, non-plasmaman limb (augments/androids are immune to this)
+ if(NN.is_organic_limb() && NN.species_id != "plasmaman") //getting every organic, non-plasmaman limb (augments/androids are immune to this)
plasma_parts += NN
if(NN.is_robotic_limb(FALSE))
robo_parts += NN
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 566c004142..eefd422727 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -80,7 +80,7 @@
I.do_stagger_action(src, user, totitemdamage)
if(I.force)
apply_damage(totitemdamage, I.damtype, affecting, wound_bonus = I.wound_bonus, bare_wound_bonus = I.bare_wound_bonus, sharpness = I.get_sharpness()) //CIT CHANGE - replaces I.force with totitemdamage
- if(I.damtype == BRUTE && affecting.status == BODYPART_ORGANIC)
+ if(I.damtype == BRUTE && affecting.is_organic_limb(FALSE))
var/basebloodychance = affecting.brute_dam + totitemdamage
if(prob(basebloodychance))
I.add_mob_blood(src)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 0845fa45f7..9eade70c6b 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1651,7 +1651,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/bloody = 0
if(((I.damtype == BRUTE) && I.force && prob(25 + (I.force * 2))))
- if(affecting.status == BODYPART_ORGANIC)
+ if(affecting.is_organic_limb(FALSE))
I.add_mob_blood(H) //Make the weapon bloody, not the person.
if(prob(I.force * 2)) //blood spatter!
bloody = 1
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index cfb35fbb00..8489ab0aac 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -688,7 +688,7 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if
continue
. += "-[BP.body_zone]"
- if(BP.status == BODYPART_ORGANIC)
+ if(BP.is_organic_limb(FALSE))
. += "-organic"
else
. += "-robotic"
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index 1a796fb2bc..a1ea18a8b9 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -259,7 +259,7 @@
. += "-digitigrade[BP.use_digitigrade]"
if(BP.animal_origin)
. += "-[BP.animal_origin]"
- if(BP.status == BODYPART_ORGANIC)
+ if(BP.is_organic_limb(FALSE))
. += "-organic"
else
. += "-robotic"
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 835ffe2d89..5aeac1bc38 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -391,10 +391,12 @@
if(!affecting)
to_chat(user, "The limb is missing!")
return
- if(affecting.status != BODYPART_ORGANIC)
+ if(!affecting.is_organic_limb())
to_chat(user, "Medicine won't work on a robotic limb!")
return
-
+ else if(!affecting.is_organic_limb(FALSE) && mode != HYPO_INJECT)
+ to_chat(user, "Biomechanical limbs can only be treated via their integrated injection port, not via spraying!")
+ return
//Always log attemped injections for admins
var/contained = vial.reagents.log_list()
log_combat(user, L, "attemped to inject", src, addition="which had [contained]")
diff --git a/code/modules/reagents/reagent_containers/medspray.dm b/code/modules/reagents/reagent_containers/medspray.dm
index 40ad167531..052e85a3d1 100644
--- a/code/modules/reagents/reagent_containers/medspray.dm
+++ b/code/modules/reagents/reagent_containers/medspray.dm
@@ -46,9 +46,11 @@
return
if(!L.can_inject(user, TRUE, user.zone_selected, FALSE, TRUE)) //stopped by clothing, like patches
return
- if(affecting.status != BODYPART_ORGANIC)
+ if(!affecting.is_organic_limb())
to_chat(user, "Medicine won't work on a robotic limb!")
return
+ else if(!affecting.is_organic_limb(FALSE))
+ to_chat(user, "Medical sprays won't work on a biomechanical limb!")
if(L == user)
L.visible_message("[user] attempts to [apply_method] [src] on [user.p_them()]self.")
diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm
index 1e23f46d9f..8cf98008db 100644
--- a/code/modules/reagents/reagent_containers/patch.dm
+++ b/code/modules/reagents/reagent_containers/patch.dm
@@ -19,8 +19,10 @@
return
if(!L.can_inject(user, TRUE, user.zone_selected, FALSE, TRUE)) //stopped by clothing, not by species immunity.
return
- if(affecting.status != BODYPART_ORGANIC)
+ if(!affecting.is_organic_limb())
to_chat(user, "Medicine won't work on a robotic limb!")
+ else if(!affecting.is_organic_limb(FALSE))
+ to_chat(user, "Medical patches won't work on a biomechanical limb!")
return
..()
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index b4938bab1b..0a34b3bab3 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -745,7 +745,7 @@
if(burnstate)
. += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir)
- if(!isnull(body_markings) && status == BODYPART_ORGANIC)
+ if(!isnull(body_markings) && is_organic_limb(FALSE))
if(!use_digitigrade)
if(body_zone == BODY_ZONE_CHEST)
. += image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
@@ -922,7 +922,7 @@
update_disabled()
/obj/item/bodypart/proc/get_bleed_rate()
- if(status != BODYPART_ORGANIC) // maybe in the future we can bleed oil from aug parts, but not now
+ if(!is_organic_limb()) // maybe in the future we can bleed oil from aug parts, but not now
return
var/bleed_rate = 0
if(generic_bleedstacks > 0)
diff --git a/code/modules/surgery/brain_surgery.dm b/code/modules/surgery/brain_surgery.dm
index 239bd8a98d..cf626ce7b4 100644
--- a/code/modules/surgery/brain_surgery.dm
+++ b/code/modules/surgery/brain_surgery.dm
@@ -10,14 +10,14 @@
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list(BODY_ZONE_HEAD)
- requires_bodypart_type = BODYPART_ORGANIC
+ requires_bodypart_type = 0
/datum/surgery_step/fix_brain
name = "fix brain"
implements = list(TOOL_HEMOSTAT = 85, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100
time = 120 //long and complicated
/datum/surgery/brain_surgery/can_start(mob/user, mob/living/carbon/target, obj/item/tool)
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
- if(!B)
+ if(!B || istype(B, /obj/item/organ/brain/ipc))
return FALSE
return TRUE
diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm
index df82a765c8..652c49519a 100644
--- a/code/modules/surgery/helpers.dm
+++ b/code/modules/surgery/helpers.dm
@@ -27,15 +27,16 @@
if(!S.requires_bodypart)
continue
if(S.requires_bodypart_type) //ugly but it'll do.
- if(S.requires_bodypart_type == BODYPART_ORGANIC)
- if(!affecting.is_organic_limb(FALSE))
- continue
- else if(S.requires_bodypart_type == BODYPART_ROBOTIC)
- if(!affecting.is_robotic_limb())
- continue
- else if(S.requires_bodypart_type == BODYPART_HYBRID)
- if(!affecting.is_organic_limb() || !affecting.is_robotic_limb())
- continue
+ switch(S.requires_bodypart_type)
+ if(BODYPART_ORGANIC)
+ if(!affecting.is_organic_limb(FALSE))
+ continue
+ if(BODYPART_ROBOTIC)
+ if(!affecting.is_robotic_limb())
+ continue
+ if(BODYPART_HYBRID)
+ if(!affecting.is_organic_limb() || !affecting.is_robotic_limb())
+ continue
if(S.requires_real_bodypart && affecting.is_pseudopart)
continue
else if(C && S.requires_bodypart) //mob with no limb in surgery zone when we need a limb
@@ -67,15 +68,16 @@
if(!S.requires_bodypart)
return
if(S.requires_bodypart_type) //*scream
- if(S.requires_bodypart_type == BODYPART_ORGANIC)
- if(!affecting.is_organic_limb(FALSE))
- return
- else if(S.requires_bodypart_type == BODYPART_ROBOTIC)
- if(!affecting.is_robotic_limb())
- return
- else if(S.requires_bodypart_type == BODYPART_HYBRID)
- if(!affecting.is_organic_limb() || !affecting.is_robotic_limb())
- return
+ switch(S.requires_bodypart_type)
+ if(BODYPART_ORGANIC)
+ if(!affecting.is_organic_limb(FALSE))
+ return
+ if(BODYPART_ROBOTIC)
+ if(!affecting.is_robotic_limb())
+ return
+ if(BODYPART_HYBRID)
+ if(!affecting.is_organic_limb() || !affecting.is_robotic_limb())
+ return
else if(C && S.requires_bodypart)
return
if(S.lying_required && !(M.lying))