diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
index 5a880549b8a..ef787f76dc8 100644
--- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
@@ -96593,10 +96593,6 @@
},
/turf/simulated/floor/plating,
/area/maintenance/starboard)
-"dgF" = (
-/obj/structure/reagent_dispensers/oil,
-/turf/simulated/floor/plasteel,
-/area/assembly/robotics)
"dgG" = (
/obj/structure/rack,
/obj/item/stack/sheet/cardboard,
@@ -126709,7 +126705,7 @@ cIx
cJn
cMj
cLo
-dgF
+cLo
cLo
cQv
cOX
diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 7cf27593f6f..cecaf12cbf6 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -46257,7 +46257,6 @@
dir = 2;
network = list("Research","SS13")
},
-/obj/structure/reagent_dispensers/oil,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "whiteredcorner"
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 1cb0ee3baad..e84d12b85fe 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -239,7 +239,7 @@
/atom/proc/HasProximity(atom/movable/AM as mob|obj)
return
-/atom/proc/emp_act(var/severity)
+/atom/proc/emp_act(severity)
return
/atom/proc/bullet_act(obj/item/projectile/P, def_zone)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index fd67afcf797..311bc4a38c7 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -45,8 +45,6 @@
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/radio/headset/headset_sci(src)
new /obj/item/radio/headset/headset_sci(src)
- new /obj/item/reagent_containers/food/drinks/oilcan(src)
- new /obj/item/reagent_containers/food/drinks/oilcan(src)
/obj/structure/closet/secure_closet/RD
name = "research director's locker"
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index de9a9209925..b144b418956 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -298,14 +298,13 @@
else
msg += "[p_they(TRUE)] [p_are()] quite chubby.\n"
- if(!isSynthetic() && blood_volume < BLOOD_VOLUME_SAFE)
+ if(blood_volume < BLOOD_VOLUME_SAFE)
msg += "[p_they(TRUE)] [p_have()] pale skin.\n"
if(bleedsuppress)
msg += "[p_they(TRUE)] [p_are()] bandaged with something.\n"
else if(bleed_rate)
- var/bleed_message = !isSynthetic() ? "bleeding" : "leaking"
- msg += "[p_they(TRUE)] [p_are()] [bleed_message]!\n"
+ msg += "[p_they(TRUE)] [p_are()] bleeding!\n"
if(reagents.has_reagent("teslium"))
msg += "[p_they(TRUE)] [p_are()] emitting a gentle blue glow!\n"
diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm
index fdc7c6c4c46..3676e8395bc 100644
--- a/code/modules/mob/living/carbon/human/species/machine.dm
+++ b/code/modules/mob/living/carbon/human/species/machine.dm
@@ -22,7 +22,7 @@
death_message = "gives a short series of shrill beeps, their chassis shuddering before falling limp, nonfunctional."
death_sounds = list('sound/voice/borg_deathsound.ogg') //I've made this a list in the event we add more sounds for dead robots.
- species_traits = list(IS_WHITELISTED, NO_BREATHE, NO_SCAN, NO_INTORGANS, NO_PAIN, NO_DNA, RADIMMUNE, VIRUSIMMUNE, NO_GERMS, NO_DECAY, NOTRANSSTING) //Computers that don't decay? What a lie!
+ species_traits = list(IS_WHITELISTED, NO_BREATHE, NO_BLOOD, NO_SCAN, NO_INTORGANS, NO_PAIN, NO_DNA, RADIMMUNE, VIRUSIMMUNE, NO_GERMS, NO_DECAY, NOTRANSSTING) //Computers that don't decay? What a lie!
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_SKIN_COLOR | HAS_HEAD_MARKINGS | HAS_HEAD_ACCESSORY | ALL_RPARTS
dietflags = 0 //IPCs can't eat, so no diet
@@ -30,10 +30,6 @@
blood_color = "#1F181F"
flesh_color = "#AAAAAA"
- blood_color = "#3C3C3C"
- exotic_blood = "oil"
- blood_damage_type = STAMINA
-
//Default styles for created mobs.
default_hair = "Blue IPC Screen"
dies_at_threshold = TRUE
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 26b5683d1a3..d8f5b665eb7 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -312,8 +312,3 @@ proc/robot_healthscan(mob/user, mob/living/M)
to_chat(user, "[capitalize(O.name)]: [O.damage]")
if(!organ_found)
to_chat(user, "No prosthetics located.")
-
- if(H.isSynthetic())
- to_chat(user, "Internal Fluid Level:[H.blood_volume]/[H.max_blood]")
- if(H.bleed_rate)
- to_chat(user, "Warning:External component leak detected!")
diff --git a/code/modules/surgery/organs/blood.dm b/code/modules/surgery/organs/blood.dm
index 63a7f8a3590..cfd9b761f83 100644
--- a/code/modules/surgery/organs/blood.dm
+++ b/code/modules/surgery/organs/blood.dm
@@ -54,7 +54,7 @@
var/obj/item/organ/external/BP = X
var/brutedamage = BP.brute_dam
- if(BP.is_robotic() && !isSynthetic())
+ if(BP.is_robotic())
continue
//We want an accurate reading of .len
diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm
index a06cbf9456b..b1df136f695 100644
--- a/code/modules/surgery/organs/organ.dm
+++ b/code/modules/surgery/organs/organ.dm
@@ -253,35 +253,6 @@
status &= ~ORGAN_SPLINTED
status |= ORGAN_ROBOT
-/obj/item/organ/external/emp_act(severity)
- if(!is_robotic() || emp_proof)
- return
- if(tough)
- switch(severity)
- if(1)
- receive_damage(0, 5.5)
- if(owner)
- owner.Stun(10)
- if(2)
- receive_damage(0, 2.8)
- if(owner)
- owner.Stun(5)
- else
- switch(severity)
- if(1)
- receive_damage(0, 20)
- if(2)
- receive_damage(0, 7)
-
-/obj/item/organ/internal/emp_act(severity)
- if(!is_robotic() || emp_proof)
- return
- switch(severity)
- if(1)
- receive_damage(20, 1)
- if(2)
- receive_damage(7, 1)
-
/obj/item/organ/proc/shock_organ(intensity)
return
diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm
index 1813a73cee1..542b7803aeb 100644
--- a/code/modules/surgery/organs/organ_external.dm
+++ b/code/modules/surgery/organs/organ_external.dm
@@ -41,6 +41,9 @@
var/list/obj/item/organ/external/children
var/list/convertable_children = list()
+ // Does the organ take reduce damage from EMPs? IPC limbs get this by default
+ var/emp_resistant = FALSE
+
// Internal organs of this body part
var/list/internal_organs = list()
@@ -256,6 +259,34 @@
return update_icon()
+/obj/item/organ/external/emp_act(severity)
+ if(!is_robotic() || emp_proof)
+ return
+ if(tough) // Augmented limbs
+ switch(severity)
+ if(1)
+ receive_damage(0, 5.5)
+ if(owner)
+ owner.Stun(10)
+ if(2)
+ receive_damage(0, 2.8)
+ if(owner)
+ owner.Stun(5)
+ else if(emp_resistant) // IPC limbs
+ switch(severity)
+ if(1)
+ // 5.28 (9 * 0.66 burn_mod) burn damage, 65.34 damage with 11 limbs.
+ receive_damage(0, 9)
+ if(2)
+ // 3.63 (5 * 0.66 burn_mod) burn damage, 39.93 damage with 11 limbs.
+ receive_damage(0, 5.5)
+ else // Basic prosthetic limbs
+ switch(severity)
+ if(1)
+ receive_damage(0, 20)
+ if(2)
+ receive_damage(0, 7)
+
/*
This function completely restores a damaged organ to perfect condition.
*/
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index 5cab4dfafd8..730d2aacee0 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -73,6 +73,15 @@
A.Remove(M)
return src
+/obj/item/organ/internal/emp_act(severity)
+ if(!is_robotic() || emp_proof)
+ return
+ switch(severity)
+ if(1)
+ receive_damage(20, 1)
+ if(2)
+ receive_damage(7, 1)
+
/obj/item/organ/internal/replaced(var/mob/living/carbon/human/target)
insert(target)
diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm
index 52cad684e11..415cdb7875d 100644
--- a/code/modules/surgery/organs/subtypes/machine.dm
+++ b/code/modules/surgery/organs/subtypes/machine.dm
@@ -5,6 +5,7 @@
min_broken_damage = 30
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/head/ipc/New(mob/living/carbon/holder, datum/species/species_override = null)
..(holder, /datum/species/machine) // IPC heads need to be explicitly set to this since you can print them
@@ -13,6 +14,7 @@
/obj/item/organ/external/chest/ipc
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/chest/ipc/New()
..()
@@ -21,6 +23,7 @@
/obj/item/organ/external/groin/ipc
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/groin/ipc/New()
..()
@@ -29,6 +32,7 @@
/obj/item/organ/external/arm/ipc
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/arm/ipc/New()
..()
@@ -37,6 +41,7 @@
/obj/item/organ/external/arm/right/ipc
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/arm/right/ipc/New()
..()
@@ -45,6 +50,7 @@
/obj/item/organ/external/leg/ipc
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/leg/ipc/New()
..()
@@ -53,6 +59,7 @@
/obj/item/organ/external/leg/right/ipc
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/leg/right/ipc/New()
..()
@@ -61,6 +68,7 @@
/obj/item/organ/external/foot/ipc
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/foot/ipc/New()
..()
@@ -69,6 +77,7 @@
/obj/item/organ/external/foot/right/ipc
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/foot/right/ipc/New()
..()
@@ -77,6 +86,7 @@
/obj/item/organ/external/hand/ipc
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/hand/ipc/New()
..()
@@ -85,6 +95,7 @@
/obj/item/organ/external/hand/right/ipc
encased = null
status = ORGAN_ROBOT
+ emp_resistant = TRUE
/obj/item/organ/external/hand/right/ipc/New()
..()