diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm
index 5442c621e1b..eb1efd8d54f 100644
--- a/code/__DEFINES/mob.dm
+++ b/code/__DEFINES/mob.dm
@@ -27,6 +27,7 @@
#define ORGAN_DEAD 1024
#define ORGAN_MUTATED 2048
#define ORGAN_ASSISTED 4096
+#define ORGAN_ORGANIC 8192
#define DROPLIMB_EDGE 0
#define DROPLIMB_BLUNT 1
diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
index acdee566889..af5c62e188f 100644
--- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
+++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
@@ -42,7 +42,7 @@
implant_overlay = null
origin_tech = "biotech=4"
slot = "eye_ling"
- //status = ORGAN_ORGANIC
+ status = ORGAN_ORGANIC
/obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life()
..()
@@ -63,8 +63,8 @@
implant_overlay = null
origin_tech = "biotech=5;magnets=5"
slot = "eye_ling"
- //status = ORGAN_ORGANIC
- aug_message = "You feel a minute twitch in our eyes, and darkness creeps away."
+ status = ORGAN_ORGANIC
+ aug_message = "We feel a minute twitch in our eyes, and darkness creeps away."
/obj/item/organ/internal/cyberimp/eyes/thermals/ling/emp_act(severity)
return
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 86a8360b01f..86e723bca8b 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -84,7 +84,7 @@
O.visible_message("[O] gasps and shields their eyes!")
if (istype(O, /mob/living/carbon/human))
var/mob/living/carbon/human/H = O
- var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
if (E && (E.damage > E.min_bruised_damage && prob(E.damage + 50)))
flick("e_flash", O:flash)
E.damage += rand(1, 2)
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 93b01f3951f..8eedb95a8de 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -57,8 +57,8 @@
return 1
/obj/machinery/recharge_station/Bumped(var/mob/AM)
- move_inside(AM)
-
+ move_inside(AM)
+
/obj/machinery/recharge_station/allow_drop()
return 0
@@ -115,7 +115,7 @@
R.cell.charge = min(R.cell.charge + recharge_speed, R.cell.maxcharge)
else if(istype(occupant, /mob/living/carbon/human))
var/mob/living/carbon/human/H = occupant
- if(!isnull(H.internal_organs_by_name["cell"]) && H.nutrition < 450)
+ if(H.get_int_organ(/obj/item/organ/internal/cell) && H.nutrition < 450)
H.nutrition = min(H.nutrition+recharge_speed_nutrition, 450)
if(repairs)
H.heal_overall_damage(repairs, repairs, 0, 1)
@@ -210,14 +210,14 @@
/obj/machinery/recharge_station/verb/move_inside(var/mob/user = usr)
set category = "Object"
set src in oview(1)
-
+
if(!user)
return
-
+
if (panel_open)
usr << "Close the maintenance panel first."
- return
-
+ return
+
var/can_accept_user
if(isrobot(user))
var/mob/living/silicon/robot/R = user
@@ -232,17 +232,17 @@
R << "Without a power cell, you can't be recharged."
//Make sure they actually HAVE a cell, now that they can get in while powerless. --NEO
return
- can_accept_user = 1
-
+ can_accept_user = 1
+
else if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
-
+
if(H.stat == DEAD)
- return
+ return
if(occupant)
H << "The cell is already occupied!"
- return
- if(isnull(H.internal_organs_by_name["cell"]))
+ return
+ if(!H.get_int_organ(/obj/item/organ/internal/cell))
return
can_accept_user = 1
@@ -261,4 +261,3 @@
build_icon()
update_use_power(1)
return
-
\ No newline at end of file
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 5dfabafe4a5..ead588f462d 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -427,7 +427,7 @@
"\red You stab yourself in the eyes with [src]!" \
)
if(istype(H))
- var/obj/item/organ/internal/eyes/eyes = H.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes)
if(!eyes)
return
eyes.take_damage(rand(3,4), 1)
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index 97ae4caba04..e89f3213b4f 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -113,7 +113,7 @@
severity -= 1
severity = min(max(severity, 0), 4)
var/mob/living/carbon/human/H = C
- var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
switch(severity)
if(0)
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 25d819f63c2..51bd36c5839 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -46,7 +46,7 @@
if(!eye_safety && ishuman(M))
var/mob/living/carbon/human/H = M
- var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
flick("e_flash", M.flash)
if (E)
E.damage += eye_damage
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 90a25d9f4f3..c7d69593a1b 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -358,7 +358,7 @@
var/safety = user:eyecheck()
if(ishuman(user))
var/mob/living/carbon/human/H = user
- var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
if(!istype(E)) // No eyes? No problem!
return
switch(safety)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 64389d8066a..0724ba4b292 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1575,9 +1575,9 @@ datum/preferences
else
O.robotize()
else
- var/obj/item/organ/internal/I = character.internal_organs_by_name[name]
+ var/obj/item/organ/internal/I = character.get_int_organ(name)
if(I)
- if(status == "assisted")
+ if(status == "assisted")//add an actual organ for this?
I.mechassist()
else if(status == "mechanical")
I.robotize()
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index 4288b561f2d..5c1458a73e1 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -2,6 +2,7 @@
gender = MALE
hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD)
var/list/stomach_contents = list()
+ var/list/internal_organs = list()
var/brain_op_stage = 0.0
var/list/datum/disease2/disease/virus2 = list()
var/antibodies = 0
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index bdc1652231a..cb16f0eec19 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -256,8 +256,8 @@
else if(!client)
msg += "[t_He] [t_has] suddenly fallen asleep.\n"
- if(!get_int_organ(/obj/item/organ/internal/brain))
- msg += "It appears that it's brain is missing...\n"
+ if(!src.get_int_organ(/obj/item/organ/internal/brain))
+ msg += "It appears that thier brain is missing...\n"
var/list/wound_flavor_text = list()
var/list/is_destroyed = list()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 4c8b53ccfe7..ccb4219b62b 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1313,14 +1313,14 @@
..()
/mob/living/carbon/human/proc/is_lung_ruptured()
- var/obj/item/organ/internal/lungs/L = internal_organs_by_name["lungs"]
+ var/obj/item/organ/internal/lungs/L = get_int_organ(/obj/item/organ/internal/lungs)
if(!L)
return 0
return L.is_bruised()
/mob/living/carbon/human/proc/rupture_lung()
- var/obj/item/organ/internal/lungs/L = internal_organs_by_name["lungs"]
+ var/obj/item/organ/internal/lungs/L = get_int_organ(/obj/item/organ/internal/lungs)
if(!L)
return 0
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index ec075fcf9f2..30c9e770d7c 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -18,7 +18,7 @@
if(((100 - total_burn) < config.health_threshold_dead) && stat == DEAD) //100 is the magic human max health number
ChangeToHusk() //BECAUSE NO ONE THOUGHT TO USE LIVING/VAR/MAXHEALTH I GUESS
if(species.can_revive_by_healing)
- var/obj/item/organ/internal/brain/B = internal_organs_by_name["brain"]
+ var/obj/item/organ/internal/brain/B = get_int_organ(/obj/item/organ/internal/brain)
if(B)
if((health >= (config.health_threshold_dead / 100 * 75)) && stat == DEAD)
update_revive()
@@ -32,7 +32,7 @@
return 0 //godmode
if(species && species.has_organ["brain"])
- var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
+ var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
if(sponge)
sponge.take_damage(amount, 1)
brainloss = sponge.damage
@@ -46,7 +46,7 @@
return 0 //godmode
if(species && species.has_organ["brain"])
- var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
+ var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
if(sponge)
sponge.damage = min(max(amount, 0),(maxHealth*2))
brainloss = sponge.damage
@@ -60,7 +60,7 @@
return 0 //godmode
if(species && species.has_organ["brain"])
- var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
+ var/obj/item/organ/internal/brain/sponge = get_int_organ(/obj/item/organ/internal/brain)
if(sponge)
brainloss = min(sponge.damage,maxHealth*2)
else
diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm
index 0dc5851a8ee..2927b5dda34 100644
--- a/code/modules/mob/living/carbon/human/human_organs.dm
+++ b/code/modules/mob/living/carbon/human/human_organs.dm
@@ -1,13 +1,13 @@
/mob/living/carbon/human/proc/update_eyes()
- var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
if(eyes)
eyes.update_colour()
regenerate_icons()
-/mob/living/carbon/var/list/internal_organs = list()
+///mob/living/carbon/var/list/internal_organs = list()
/mob/living/carbon/human/var/list/organs = list()
/mob/living/carbon/human/var/list/organs_by_name = list() // map organ names to organs
-/mob/living/carbon/human/var/list/internal_organs_by_name = list() // so internal organs have less ickiness too
+//mob/living/carbon/human/var/list/internal_organs_by_name = list() // so internal organs have less ickiness too
// Takes care of organ related updates, such as broken and missing limbs
/mob/living/carbon/human/proc/handle_organs()
@@ -157,7 +157,7 @@ I use this to standardize shadowling dethrall code
-- Crazylemon
*/
/mob/living/carbon/human/proc/named_organ_parent(var/organ_name)
- if (!(organ_name in internal_organs_by_name))
+ if (!get_int_organ(organ_name))
return null
- var/obj/item/organ/O = internal_organs_by_name[organ_name]
+ var/obj/item/organ/internal/O = get_int_organ(organ_name)
return O.parent_organ
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 92c2e7049de..f99c680dc84 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -215,7 +215,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if (radiation)
- if((locate(src.internal_organs_by_name["resonant crystal"]) in src.internal_organs))
+ if(src.get_int_organ(/obj/item/organ/internal/nucleation/resonant_crystal))
var/rads = radiation/25
radiation -= rads
radiation -= 0.1
@@ -894,7 +894,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
//Vision //god knows why this is here
var/obj/item/organ/internal/vision
if(species.vision_organ)
- vision = internal_organs_by_name[species.vision_organ]
+ vision = get_int_organ(/obj/item/organ/internal/eyes)//wot?
if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means.
eye_blind = 0
@@ -1207,7 +1207,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
/mob/living/carbon/human/proc/handle_heartbeat()
var/client/C = src.client
if(C && C.prefs.sound & SOUND_HEARTBEAT) //disable heartbeat by pref
- var/obj/item/organ/internal/heart/H = internal_organs_by_name["heart"]
+ var/obj/item/organ/internal/heart/H = get_int_organ(/obj/item/organ/internal/heart)
if(!H) //H.status will runtime if there is no H (obviously)
return
diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/apollo.dm
index a8254337c8d..e3617463aa4 100644
--- a/code/modules/mob/living/carbon/human/species/apollo.dm
+++ b/code/modules/mob/living/carbon/human/species/apollo.dm
@@ -47,14 +47,14 @@
/datum/species/wryn/handle_death(var/mob/living/carbon/human/H)
for(var/mob/living/carbon/C in living_mob_list)
- if(locate(/obj/item/organ/internal/wryn/hivenode) in C.internal_organs)
+ if(C.get_int_organ(/obj/item/organ/internal/wryn/hivenode))
C << "Your antennae tingle as you are overcome with pain..."
C << "It feels like part of you has died."
/datum/species/wryn/handle_attack_hand(var/mob/living/carbon/human/H, var/mob/living/carbon/human/M)
if(M.a_intent == I_HARM)
if(H.handcuffed)
- if(!(locate(H.internal_organs_by_name["antennae"]) in H.internal_organs)) return
+ if(!H.get_int_organ(/obj/item/organ/internal/wryn/hivenode)) return
var/turf/p_loc = M.loc
var/turf/p_loc_m = H.loc
@@ -62,9 +62,10 @@
H << "[M] grips your antennae and starts violently pulling!"
do_after(H, 250, target = src)
if(p_loc == M.loc && p_loc_m == H.loc)
- qdel(H.internal_organs_by_name["antennae"])
+ var/obj/item/organ/internal/wryn/hivenode/node = new /obj/item/organ/internal/wryn/hivenode
H.remove_language("Wryn Hivemind")
- new /obj/item/organ/internal/wryn/hivenode(M.loc)
+ node.remove(H)
+ node.loc = M.loc
M << "You hear a loud crunch as you mercilessly pull off [H]'s antennae."
H << "You hear a loud crunch as your antennae is ripped off your head by [M]."
H << "It's so quiet..."
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index ebb8674e889..5a01fa7ffca 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -137,19 +137,17 @@
if((organ in H.organs))
qdel(organ)
- for(var/obj/item/organ/internal/organ in H.contents)
- if((organ in H.internal_organs))
- qdel(organ)
+ //for(var/obj/item/organ/internal/organ in H.contents)
+ // if((organ in H.internal_organs))
+ // qdel(organ)
if(H.organs) H.organs.Cut()
- if(H.internal_organs) H.internal_organs.Cut()
+ //if(H.internal_organs) H.internal_organs.Cut()
if(H.organs_by_name) H.organs_by_name.Cut()
- if(H.internal_organs_by_name) H.internal_organs_by_name.Cut()
H.organs = list()
H.internal_organs = list()
H.organs_by_name = list()
- H.internal_organs_by_name = list()
for(var/limb_type in has_limbs)
var/list/organ_data = has_limbs[limb_type]
@@ -157,15 +155,12 @@
var/obj/item/organ/O = new limb_path(H)
organ_data["descriptor"] = O.name
- for(var/organ in has_organ)
- var/organ_type = has_organ[organ]
- //world << "[organ_type]"//debug print
- H.internal_organs_by_name[organ] = new organ_type(H,1)
- H.internal_organs += new organ_type
+ for(var/index in has_organ)
+ var/organ = has_organ[index]
+ H.internal_organs += new organ(null)
for(var/obj/item/organ/internal/I in H.internal_organs)
- if(!H.get_int_organ(I))
- I.insert(src)
+ I.insert(H)
for(var/name in H.organs_by_name)
H.organs |= H.organs_by_name[name]
@@ -609,6 +604,7 @@
Returns the path corresponding to the corresponding organ
It'll return null if the organ doesn't correspond, so include null checks when using this!
*/
+//Fethas Todo:Do i need to redo this?
/datum/species/proc/return_organ(var/organ_slot)
if(!(organ_slot in has_organ))
return null
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
index 96e834dd749..ec5998a989d 100644
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -502,7 +502,7 @@
reagent_tag = PROCESS_SYN
has_organ = list(
- "brain" = /obj/item/organ/internal/mmi_holder/posibrain,
+ "brain" = /obj/item/organ/internal/brain/mmi_holder/posibrain,
"cell" = /obj/item/organ/internal/cell,
"optics" = /obj/item/organ/internal/optical_sensor
)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 2065b63db67..faa638f401e 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -245,7 +245,7 @@ var/global/list/damage_icon_parts = list()
qdel(stand_icon)
stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank")
var/icon_key = ""
- var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
if(eyes)
icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]"
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 897cfa1f9f1..aa18182ccc5 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -652,7 +652,7 @@
//Synthetic human mob goes here.
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
- if(!isnull(H.internal_organs_by_name["cell"]) && H.a_intent == I_GRAB)
+ if(H.get_int_organ(/obj/item/organ/internal/cell) && H.a_intent == I_GRAB)
if(emagged || stat & BROKEN)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(3, 1, src)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 80c591d3cf9..898ef71febb 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -182,7 +182,7 @@
continue
// Where we're going, we don't need eyes.
// Prosthetic eyes will also protect against this business.
- var/obj/item/organ/internal/eyes = l.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/eyes = l.get_int_organ(/obj/item/organ/internal/eyes/)
if(!istype(eyes))
continue
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) )
diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm
index ba18e879729..a4a8a596b22 100644
--- a/code/modules/reagents/newchem/medicine.dm
+++ b/code/modules/reagents/newchem/medicine.dm
@@ -525,7 +525,7 @@ datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
if(prob(80))
if(ishuman(M))
var/mob/living/carbon/human/H = M
- var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
if(istype(E))
E.damage = max(E.damage-1, 0)
M.eye_blurry = max(M.eye_blurry-1 , 0)
diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm
index 2d4a7bded8b..555710be247 100644
--- a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm
+++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm
@@ -63,8 +63,8 @@
M:drowsyness = max(M:drowsyness, 30/sober_str)
if(ishuman(M))
var/mob/living/carbon/human/H = M
- var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"]
- if (istype(L))
+ if (H.get_int_organ(/obj/item/organ/internal/liver))
+ var/obj/item/organ/internal/liver/L = /obj/item/organ/internal/liver
L.take_damage(0.1, 1)
H.adjustToxLoss(0.1)
..()
diff --git a/code/modules/reagents/oldchem/reagents/reagents_admin.dm b/code/modules/reagents/oldchem/reagents/reagents_admin.dm
index ad4048c4efe..6c302321b89 100644
--- a/code/modules/reagents/oldchem/reagents/reagents_admin.dm
+++ b/code/modules/reagents/oldchem/reagents/reagents_admin.dm
@@ -24,7 +24,7 @@
M.eye_blind = 0
if(ishuman(M))
var/mob/living/carbon/human/H = M
- var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
if(istype(E))
E.damage = max(E.damage-5 , 0)
M.SetWeakened(0)
diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm
index 61f4b66255c..1d684dc5563 100644
--- a/code/modules/reagents/oldchem/reagents/reagents_med.dm
+++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm
@@ -78,8 +78,8 @@
var/mob/living/carbon/human/H = M
//Mitocholide is hard enough to get, it's probably fair to make this all internal organs
- for(var/name in H.internal_organs_by_name)
- var/obj/item/organ/internal/I = H.internal_organs_by_name[name]
+ for(var/name in H.internal_organs)
+ var/obj/item/organ/internal/I = H.get_int_organ(name)
if(I.damage > 0)
I.damage = max(I.damage-0.4, 0)
..()
diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm
index 7cafa8e6ab9..f2cc4c59d72 100644
--- a/code/modules/surgery/eye.dm
+++ b/code/modules/surgery/eye.dm
@@ -39,7 +39,7 @@
target.blinded += 1.5
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/eyes = target.get_int_organ(/obj/item/organ/internal/eyes)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\red [user]'s hand slips, slicing [target]'s eyes wth \the [tool]!" , \
"\red Your hand slips, slicing [target]'s eyes wth \the [tool]!" )
diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm
index fb8c2d051c6..b358e1f8b25 100644
--- a/code/modules/surgery/organs/augments_eyes.dm
+++ b/code/modules/surgery/organs/augments_eyes.dm
@@ -7,13 +7,12 @@
parent_organ = "eyes"
w_class = 1
- var/sight_flags = 0
+ var/vision_flags = 0
var/list/eye_colour = list(0,0,0)
var/list/old_eye_colour = list(0,0,0)
var/flash_protect = 0
var/aug_message = "Your vision is augmented!"
-
/obj/item/organ/internal/cyberimp/eyes/proc/update_colour()
if(!owner)
return
@@ -38,11 +37,12 @@
HMN.update_eyes()
if(aug_message && !special)
owner << "[aug_message]"
- M.sight |= sight_flags
+ M.sight |= vision_flags
+ world << "[M.sight]"
/obj/item/organ/internal/cyberimp/eyes/remove(var/mob/living/carbon/M, var/special = 0)
..()
- M.sight ^= sight_flags
+ M.sight ^= vision_flags
if(istype(owner,/mob/living/carbon/human) && eye_colour)
var/mob/living/carbon/human/HMN = owner
HMN.r_eyes = old_eye_colour[1]
@@ -52,7 +52,7 @@
/obj/item/organ/internal/cyberimp/eyes/on_life()
..()
- owner.sight |= sight_flags
+ owner.sight |= vision_flags
/obj/item/organ/internal/cyberimp/eyes/emp_act(severity)
if(!owner)
@@ -77,14 +77,14 @@
eye_colour = rgb(0, 0, 0)
implant_color = "#000000"
origin_tech = "materials=6;programming=4;biotech=6;magnets=5"
- sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS
+ vision_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS
/obj/item/organ/internal/cyberimp/eyes/thermals
name = "Thermals implant"
desc = "These cybernetic eye implants will give you Thermal vision. Vertical slit pupil included."
eye_colour = rgb(255, 204, 0)
implant_color = "#FFCC00"
- sight_flags = SEE_MOBS
+ vision_flags = SEE_MOBS
flash_protect = -1
origin_tech = "materials=6;programming=4;biotech=5;magnets=5;syndicate=4"
aug_message = "You see prey everywhere you look..."
@@ -137,5 +137,6 @@
implant_color = "#101010"
flash_protect = 2
// Welding with thermals will still hurt your eyes a bit.
+
/obj/item/organ/internal/cyberimp/eyes/shield/emp_act(severity)
return
\ No newline at end of file
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
index e01a6c18247..7bbcd155cfb 100644
--- a/code/modules/surgery/organs/augments_internal.dm
+++ b/code/modules/surgery/organs/augments_internal.dm
@@ -8,6 +8,8 @@
status = ORGAN_ROBOT
var/implant_color = "#FFFFFF"
var/implant_overlay
+ tough = 1 //not easyly broken by combat damage
+ sterile = 1 //not very germy
/obj/item/organ/internal/cyberimp/New(var/mob/M = null)
if(iscarbon(M))
diff --git a/code/modules/surgery/organs/blood.dm b/code/modules/surgery/organs/blood.dm
index 0e909ec5b18..40466818695 100644
--- a/code/modules/surgery/organs/blood.dm
+++ b/code/modules/surgery/organs/blood.dm
@@ -87,7 +87,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
// Damaged heart virtually reduces the blood volume, as the blood isn't
// being pumped properly anymore.
- var/obj/item/organ/internal/heart/heart = internal_organs_by_name["heart"]
+ var/obj/item/organ/internal/heart/heart = get_int_organ(/obj/item/organ/internal/heart)
if(heart)
if(heart.damage > 1 && heart.damage < heart.min_bruised_damage)
diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm
index 5b297ce24e4..9808f8d6233 100644
--- a/code/modules/surgery/organs/organ.dm
+++ b/code/modules/surgery/organs/organ.dm
@@ -32,19 +32,20 @@ var/list/organ_cache = list()
/obj/item/organ/Destroy()
if(!owner)
return ..()
-/*
+
if(istype(owner, /mob/living/carbon))
if((owner.internal_organs) && (src in owner.internal_organs))
- owner.internal_organs -= src
+ var/obj/item/organ/internal/O = src
+ O.remove(owner)
if(istype(owner, /mob/living/carbon/human))
- if((owner.internal_organs_by_name) && (src in owner.internal_organs_by_name))
- owner.internal_organs_by_name -= src
- if((owner.organs) && (src in owner.organs))
- owner.organs -= src
- if((owner.organs_by_name) && (src in owner.organs_by_name))
- owner.organs_by_name -= src
-*/
+ var/obj/item/organ/internal/O = src
+ O.remove(owner)
+ if((owner.organs) && (src in owner.organs))
+ owner.organs -= src
+ if((owner.organs_by_name) && (src in owner.organs_by_name))
+ owner.organs_by_name -= src
+
if(src in owner.contents)
owner.contents -= src
@@ -101,8 +102,8 @@ var/list/organ_cache = list()
owner.death()
/obj/item/organ/process()
- if(loc != owner)
- owner = null
+ //if(loc != owner)
+ // owner = null
//dead already, no need for more processing
if(status & ORGAN_DEAD)
@@ -289,10 +290,10 @@ var/list/organ_cache = list()
if(!istype(owner))
return
- if(is_primary_organ())
- owner.internal_organs_by_name[organ_tag] = null
- owner.internal_organs_by_name -= organ_tag
- owner.internal_organs_by_name -= null // uh what does this line even do this seems silly
+ //if(is_primary_organ())//Toddo from fethas:Do i need to move ths?
+ // owner.internal_organs_by_name[organ_tag] = null
+ // owner.internal_organs_by_name -= organ_tag
+ // owner.internal_organs_by_name -= null // uh what does this line even do this seems silly
owner.internal_organs -= src
@@ -320,10 +321,9 @@ var/list/organ_cache = list()
owner = target
processing_objects -= src
- target.internal_organs |= src
affected.internal_organs |= src
- if (!(organ_tag in target.internal_organs_by_name))
- target.internal_organs_by_name[organ_tag] = src // In case multiple of the same type are inserted, only the first one is the primary organ
+ if (!target.get_int_organ(src))
+ target.internal_organs |= src
src.loc = target
if(robotic)
status |= ORGAN_ROBOT
@@ -342,4 +342,4 @@ I use this so that this can be made better once the organ overhaul rolls out --
O = owner
if (!istype(owner)) // You're not the primary organ of ANYTHING, bucko
return 0
- return src == O.internal_organs_by_name[organ_tag]
+ return src == O.get_int_organ(organ_tag)
diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm
index 708926a2e62..4e6e85292c0 100644
--- a/code/modules/surgery/organs/organ_external.dm
+++ b/code/modules/surgery/organs/organ_external.dm
@@ -71,7 +71,9 @@
if(internal_organs)
for(var/obj/item/organ/internal/O in internal_organs)
- qdel(O)
+ internal_organs -= O
+ O.remove(owner)
+ //qdel(O)
return ..()
@@ -95,11 +97,12 @@
if(contents.len)
var/obj/item/removing = pick(contents)
removing.loc = get_turf(user.loc)
- var/obj/item/organ/O = removing
+ var/obj/item/organ/internal/O = removing
if(istype(O))
O.status |= ORGAN_CUT_AWAY
- spread_germs_to_organ(O,user) // This wouldn't be any cleaner than the actual surgery
- O.removed(user)
+ if(!O.sterile)
+ spread_germs_to_organ(O,user) // This wouldn't be any cleaner than the actual surgery
+ O.remove(src)
if(!(user.l_hand && user.r_hand))
user.put_in_hands(removing)
user.visible_message("[user] extracts [removing] from [src] with [W]!")
@@ -166,7 +169,8 @@
// Damage an internal organ
if(internal_organs && internal_organs.len)
var/obj/item/organ/internal/I = pick(internal_organs)
- I.take_damage(brute / 2)
+ if(!I.tough)//mostly for cybernetic organs
+ I.take_damage(brute / 2)
brute -= brute / 2
if(status & ORGAN_BROKEN && prob(40) && brute)
diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm
index dd10ec7920b..96de3ea89ac 100644
--- a/code/modules/surgery/organs/organ_icon.dm
+++ b/code/modules/surgery/organs/organ_icon.dm
@@ -33,7 +33,7 @@ var/global/list/limb_icon_cache = list()
/obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human)
..()
- var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ("eyes")//owner.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ(/obj/item/organ/internal/eyes)//owner.internal_organs_by_name["eyes"]
if(eyes) eyes.update_colour()
/obj/item/organ/external/head/removed()
@@ -48,7 +48,7 @@ var/global/list/limb_icon_cache = list()
return
if(species.has_organ["eyes"])
- var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ(/obj/item/organ/internal/eyes)//owner.internal_organs_by_name["eyes"]
if(species.eyes)
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes)
if(eyes)
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index 65543c4d739..6678c37033d 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -9,6 +9,8 @@
var/slot
vital = 0
var/organ_action_name = null
+ var/sterile = 0 //can the organ be infected by germs?
+ var/tough = 0 //can organ be easily damaged?
/obj/item/organ/internal/proc/insert(mob/living/carbon/M, special = 0)
if(!iscarbon(M) || owner == M)
@@ -19,7 +21,9 @@
replaced.remove(M, special = 1)
owner = M
+
M.internal_organs |= src
+ //M.internal_organs_by_name[src] |= src(H,1)
loc = null
if(organ_action_name)
action_button_name = organ_action_name
@@ -29,6 +33,7 @@
owner = null
if(M)
M.internal_organs -= src
+ //M.internal_organs_by_name[src] -= src
if(vital && !special)
M.death()
@@ -192,6 +197,16 @@
owner.b_eyes ? owner.b_eyes : 0
)
+/obj/item/organ/internal/eyes/insert(mob/living/carbon/M, special = 0)
+// Apply our eye colour to the target.
+ if(istype(M) && eye_colour)
+ var/mob/living/carbon/human/eyes = M
+ eyes.r_eyes = eye_colour[1]
+ eyes.g_eyes = eye_colour[2]
+ eyes.b_eyes = eye_colour[3]
+ eyes.update_eyes()
+ ..()
+
/obj/item/organ/internal/eyes/surgeryize()
if(!owner)
return
@@ -200,6 +215,7 @@
owner.eye_blurry = 0
owner.eye_blind = 0
+
/obj/item/organ/internal/liver
name = "liver"
icon_state = "liver"
@@ -282,7 +298,7 @@
name = "inflamed appendix"
..()
*/
-
+//shadowling tumor
/obj/item/organ/internal/shadowtumor
name = "black tumor"
desc = "A tiny black mass with red tendrils trailing from it. It seems to shrivel in the light."
@@ -305,10 +321,34 @@
if(isturf(loc))
var/turf/T = loc
var/light_count = T.get_lumcount()
+ world << "[light_count]"
if(light_count > 4 && health > 0) //Die in the light
health--
else if(light_count < 2 && health < 3) //Heal in the dark
health++
if(health <= 0)
visible_message("[src] collapses in on itself!")
- qdel(src)
\ No newline at end of file
+ qdel(src)
+
+//debug and adminbus....
+
+/obj/item/organ/internal/honktumor
+ name = "banana tumor"
+ desc = "A tiny yellow mass shaped like..a banana?"
+ icon_state = "honktumor"
+ origin_tech = "biotech=1"
+ w_class = 1
+ parent_organ = "head"
+ slot = "brain_tumor"
+ health = 3
+
+/obj/item/organ/internal/honktumor/insert(mob/living/carbon/M, special = 0)
+
+ M.mutations.Add(CLUMSY)
+ M.dna.SetSEState(COMICBLOCK,1,1)
+ //genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED)
+
+/obj/item/organ/internal/honktumor/remove(mob/living/carbon/M, special = 0)
+ M.mutations.Remove(CLUMSY)
+ M.mutations.Remove(COMICBLOCK)
+ //genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED)
\ No newline at end of file
diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm
index 91ef793f92d..511ea19b000 100644
--- a/code/modules/surgery/organs/subtypes/machine.dm
+++ b/code/modules/surgery/organs/subtypes/machine.dm
@@ -88,7 +88,7 @@
..()
// Used for an MMI or posibrain being installed into a human.
-/obj/item/organ/internal/mmi_holder
+/obj/item/organ/internal/brain/mmi_holder
name = "brain"
organ_tag = "brain"
parent_organ = "chest"
@@ -97,7 +97,7 @@
slot = "brain"
var/obj/item/device/mmi/stored_mmi
-/obj/item/organ/internal/mmi_holder/proc/update_from_mmi()
+/obj/item/organ/internal/brain/mmi_holder/proc/update_from_mmi()
if(!stored_mmi)
return
name = stored_mmi.name
@@ -105,7 +105,7 @@
icon = stored_mmi.icon
icon_state = stored_mmi.icon_state
-/obj/item/organ/internal/mmi_holder/remove(var/mob/living/user)
+/obj/item/organ/internal/brain/mmi_holder/remove(var/mob/living/user)
if(stored_mmi)
stored_mmi.loc = get_turf(src)
if(owner.mind)
@@ -117,7 +117,7 @@
holder_mob.unEquip(src)
qdel(src)
-/obj/item/organ/internal/mmi_holder/New()
+/obj/item/organ/internal/brain/mmi_holder/New()
..()
// This is very ghetto way of rebooting an IPC. TODO better way.
spawn(1)
@@ -125,7 +125,7 @@
owner.stat = CONSCIOUS
owner.visible_message("\The [owner] twitches visibly!")
-/obj/item/organ/internal/mmi_holder/posibrain/New()
+/obj/item/organ/internal/brain/mmi_holder/posibrain/New()
robotize()
stored_mmi = new /obj/item/device/mmi/posibrain(src)
..()
diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm
index a2f7daf573c..4cbad16a7f3 100644
--- a/code/modules/surgery/organs/subtypes/xenos.dm
+++ b/code/modules/surgery/organs/subtypes/xenos.dm
@@ -2,6 +2,8 @@
origin_tech = "biotech=5"
icon_state = "xgibmid2"
var/list/alien_powers = list()
+ tough = 1
+ sterile = 1
/obj/item/organ/internal/xenos/New()
for(var/A in alien_powers)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index dd33dbb40fc..7cfd46aa6a5 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -163,7 +163,8 @@
for(var/obj/item/organ/internal/I in affected.internal_organs)
if(I && I.damage > 0)
if(I.robotic < 2)
- spread_germs_to_organ(I, user)
+ if(!I.sterile)
+ spread_germs_to_organ(I, user)
user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \
"You start treating damage to [target]'s [I.name] with [tool_name]." )
@@ -370,13 +371,13 @@
if(O.organ_tag == "limb")
return 0
- else if(target.species.has_organ[O.organ_tag])
+ else if(target.species.has_organ[O.organ_tag])//need to change this around for cybernetic implants
if(O.damage > (O.max_damage * 0.75))
user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted."
return 2
- if(!target.internal_organs_by_name[O.organ_tag])
+ if(!target.get_int_organ(O))
organ_missing = 1
else
user << "\red \The [target] already has [o_a][O.organ_tag]."
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index c18f5eafb34..b1e2d8323be 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -319,7 +319,7 @@
user.visible_message("\blue [user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool]." , \
"\blue You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].")
- var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ]
+ var/obj/item/organ/internal/I = target.get_int_organ(target.op_stage.current_organ)
if(I && istype(I))
I.status |= ORGAN_CUT_AWAY
@@ -369,7 +369,7 @@
user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \
"\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].")
- var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ]
+ var/obj/item/organ/internal/I = target.get_int_organ(target.op_stage.current_organ)
if(I && istype(I))
I.status &= ~ORGAN_CUT_AWAY
@@ -414,7 +414,7 @@
user << "You're pretty sure [target.species.name_plural] don't normally have a brain."
return 2
- if(!isnull(target.internal_organs["brain"]))
+ if(target.get_int_organ(/obj/item/organ/internal/brain/))
user << "Your subject already has a brain."
return 2
@@ -432,11 +432,11 @@
"\blue You have installed \the [tool] into [target]'s [affected.name].")
var/obj/item/device/mmi/M = tool
- var/obj/item/organ/internal/mmi_holder/holder = new(target, 1)
+ var/obj/item/organ/internal/brain/mmi_holder/holder = new()
if (istype(M, /obj/item/device/mmi/posibrain))
holder.robotize()
- target.internal_organs_by_name["brain"] = holder
+ holder.insert(target)
user.unEquip(tool)
tool.forceMove(holder)
holder.stored_mmi = tool
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index e71df599342..9fd30f31992 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -68,7 +68,7 @@
/proc/spread_germs_to_organ(obj/item/organ/E, mob/living/carbon/human/user)
if(!istype(user) || !istype(E)) return
-
+ //world << "Germ spread: [E] : [E.owner]"
var/germ_level = user.germ_level
if(user.gloves)
germ_level = user.gloves.germ_level
diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm
index 4955d200252..86fe433594c 100644
--- a/code/modules/virus2/effect.dm
+++ b/code/modules/virus2/effect.dm
@@ -221,7 +221,7 @@
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
- var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"]
+ var/obj/item/organ/internal/brain/B = H.get_int_organ(/obj/item/organ/internal/brain)
if (B.damage < B.min_broken_damage)
B.take_damage(5, 1)
else
@@ -442,7 +442,7 @@
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
- var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"]
+ var/obj/item/organ/internal/brain/B = H.get_int_organ(/obj/item/organ/internal/brain)
if (B.damage < B.min_broken_damage)
B.take_damage(1, 1)
else
@@ -704,7 +704,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human)
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
- var/obj/item/organ/internal/brain/B = H.internal_organs_by_name["brain"]
+ var/obj/item/organ/internal/brain/B = H.get_int_organ(/obj/item/organ/internal/brain)
if (B.damage < B.min_broken_damage)
B.take_damage(0.5, 1)
else
@@ -936,7 +936,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human)
name = "Watery Eyes"
stage = 1
activate(var/mob/living/carbon/human/mob,var/multiplier)
- var/obj/item/organ/internal/eyes/E = mob.internal_organs_by_name["eyes"]
+ var/obj/item/organ/internal/eyes/E = mob.get_int_organ(/obj/item/organ/internal/eyes)
if(!istype(E) || (E.status & ORGAN_ROBOT)) // No eyes or robotic eyes? No problem!
return
mob << "Your eyes sting and water!"
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 619678fd650..6677e3bcdf7 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ