From 2146cc0d3d8040c00c03ce1cdaf5b0cf04868bdb Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 26 Dec 2015 17:34:38 -0500 Subject: [PATCH] things and stuff...gonna need to get to those merge conflicts eventually. also purged all mention of internal_organs by name from the face of the earth. we have get_int_organ now...i may need to tweak shit. oh and i broke some things... --- code/__DEFINES/mob.dm | 1 + .../changeling/powers/augmented_eyesight.dm | 6 +-- code/game/machinery/flasher.dm | 2 +- code/game/machinery/rechargestation.dm | 27 ++++++----- code/game/objects/items.dm | 2 +- .../objects/items/devices/laserpointer.dm | 2 +- .../items/weapons/grenades/flashbang.dm | 2 +- code/game/objects/items/weapons/tools.dm | 2 +- code/modules/client/preferences.dm | 4 +- .../mob/living/carbon/carbon_defines.dm | 1 + .../mob/living/carbon/human/examine.dm | 4 +- code/modules/mob/living/carbon/human/human.dm | 4 +- .../mob/living/carbon/human/human_damage.dm | 8 ++-- .../mob/living/carbon/human/human_organs.dm | 10 ++-- code/modules/mob/living/carbon/human/life.dm | 6 +-- .../mob/living/carbon/human/species/apollo.dm | 9 ++-- .../living/carbon/human/species/species.dm | 22 ++++----- .../living/carbon/human/species/station.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/power/apc.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 2 +- code/modules/reagents/newchem/medicine.dm | 2 +- .../reagents/drink/reagents_alcohol.dm | 4 +- .../oldchem/reagents/reagents_admin.dm | 2 +- .../reagents/oldchem/reagents/reagents_med.dm | 4 +- code/modules/surgery/eye.dm | 2 +- code/modules/surgery/organs/augments_eyes.dm | 15 +++--- .../surgery/organs/augments_internal.dm | 2 + code/modules/surgery/organs/blood.dm | 2 +- code/modules/surgery/organs/organ.dm | 38 +++++++-------- code/modules/surgery/organs/organ_external.dm | 14 ++++-- code/modules/surgery/organs/organ_icon.dm | 4 +- code/modules/surgery/organs/organ_internal.dm | 44 +++++++++++++++++- .../surgery/organs/subtypes/machine.dm | 10 ++-- code/modules/surgery/organs/subtypes/xenos.dm | 2 + code/modules/surgery/organs_internal.dm | 7 +-- code/modules/surgery/robotics.dm | 10 ++-- code/modules/surgery/surgery.dm | 2 +- code/modules/virus2/effect.dm | 8 ++-- icons/obj/surgery.dmi | Bin 30051 -> 30509 bytes 40 files changed, 170 insertions(+), 122 deletions(-) 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 619678fd650e6f3861513d518138898a6862316e..6677e3bcdf797205b4918b4695026e1210394278 100644 GIT binary patch delta 11584 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 delta 11141 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 H4E_HPoYlXi