From 17860ff33a7e46a9381ccd777b5587cc77e1c053 Mon Sep 17 00:00:00 2001 From: Furlucis Date: Fri, 19 Apr 2013 00:41:45 -0400 Subject: [PATCH 1/4] Added robotic hands and feet. Apply screwdriver to robotic arms and legs to get hands/feet. They can be surgically attached properly, far as I can tell. Also, fixed a few backwards slashes in text marcos. --- code/game/objects/items/robot/robot_parts.dm | 626 ++++--- .../objects/items/robot/robot_upgrades.dm | 334 ++-- .../objects/items/weapons/surgery_tools.dm | 1638 ++++++++--------- 3 files changed, 1331 insertions(+), 1267 deletions(-) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index b4107855639..ba72255ebe3 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -1,281 +1,345 @@ -/obj/item/robot_parts - name = "robot parts" - icon = 'icons/obj/robot_parts.dmi' - item_state = "buildpipe" - icon_state = "blank" - flags = FPRINT | TABLEPASS | CONDUCT - slot_flags = SLOT_BELT - var/construction_time = 100 - var/list/construction_cost = list("metal"=20000,"glass"=5000) - var/list/part = null - -/obj/item/robot_parts/l_arm - name = "robot left arm" - desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "l_arm" - construction_time = 200 - construction_cost = list("metal"=18000) - part = list("l_arm","l_hand") - -/obj/item/robot_parts/r_arm - name = "robot right arm" - desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "r_arm" - construction_time = 200 - construction_cost = list("metal"=18000) - part = list("r_arm","r_hand") - -/obj/item/robot_parts/l_leg - name = "robot left leg" - desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "l_leg" - construction_time = 200 - construction_cost = list("metal"=15000) - part = list("l_leg","l_foot") - -/obj/item/robot_parts/r_leg - name = "robot right leg" - desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "r_leg" - construction_time = 200 - construction_cost = list("metal"=15000) - part = list("r_leg","r_foot") - -/obj/item/robot_parts/chest - name = "robot torso" - desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell." - icon_state = "chest" - construction_time = 350 - construction_cost = list("metal"=40000) - var/wires = 0.0 - var/obj/item/weapon/cell/cell = null - -/obj/item/robot_parts/head - name = "robot head" - desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals." - icon_state = "head" - construction_time = 350 - construction_cost = list("metal"=25000) - var/obj/item/device/flash/flash1 = null - var/obj/item/device/flash/flash2 = null - -/obj/item/robot_parts/robot_suit - name = "robot endoskeleton" - desc = "A complex metal backbone with standard limb sockets and pseudomuscle anchors." - icon_state = "robo_suit" - construction_time = 500 - construction_cost = list("metal"=50000) - var/obj/item/robot_parts/l_arm/l_arm = null - var/obj/item/robot_parts/r_arm/r_arm = null - var/obj/item/robot_parts/l_leg/l_leg = null - var/obj/item/robot_parts/r_leg/r_leg = null - var/obj/item/robot_parts/chest/chest = null - var/obj/item/robot_parts/head/head = null - var/created_name = "" - -/obj/item/robot_parts/robot_suit/New() - ..() - src.updateicon() - -/obj/item/robot_parts/robot_suit/proc/updateicon() - src.overlays.Cut() - if(src.l_arm) - src.overlays += "l_arm+o" - if(src.r_arm) - src.overlays += "r_arm+o" - if(src.chest) - src.overlays += "chest+o" - if(src.l_leg) - src.overlays += "l_leg+o" - if(src.r_leg) - src.overlays += "r_leg+o" - if(src.head) - src.overlays += "head+o" - -/obj/item/robot_parts/robot_suit/proc/check_completion() - if(src.l_arm && src.r_arm) - if(src.l_leg && src.r_leg) - if(src.chest && src.head) - feedback_inc("cyborg_frames_built",1) - return 1 - return 0 - -/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/stack/sheet/metal) && !l_arm && !r_arm && !l_leg && !r_leg && !chest && !head) - var/obj/item/weapon/ed209_assembly/B = new /obj/item/weapon/ed209_assembly - B.loc = get_turf(src) - user << "You armed the robot frame" - W:use(1) - if (user.get_inactive_hand()==src) - user.before_take_item(src) - user.put_in_inactive_hand(B) - del(src) - if(istype(W, /obj/item/robot_parts/l_leg)) - if(src.l_leg) return - user.drop_item() - W.loc = src - src.l_leg = W - src.updateicon() - - if(istype(W, /obj/item/robot_parts/r_leg)) - if(src.r_leg) return - user.drop_item() - W.loc = src - src.r_leg = W - src.updateicon() - - if(istype(W, /obj/item/robot_parts/l_arm)) - if(src.l_arm) return - user.drop_item() - W.loc = src - src.l_arm = W - src.updateicon() - - if(istype(W, /obj/item/robot_parts/r_arm)) - if(src.r_arm) return - user.drop_item() - W.loc = src - src.r_arm = W - src.updateicon() - - if(istype(W, /obj/item/robot_parts/chest)) - if(src.chest) return - if(W:wires && W:cell) - user.drop_item() - W.loc = src - src.chest = W - src.updateicon() - else if(!W:wires) - user << "\blue You need to attach wires to it first!" - else - user << "\blue You need to attach a cell to it first!" - - if(istype(W, /obj/item/robot_parts/head)) - if(src.head) return - if(W:flash2 && W:flash1) - user.drop_item() - W.loc = src - src.head = W - src.updateicon() - else - user << "\blue You need to attach a flash to it first!" - - if(istype(W, /obj/item/device/mmi) || istype(W, /obj/item/device/mmi/posibrain)) - var/obj/item/device/mmi/M = W - if(check_completion()) - if(!istype(loc,/turf)) - user << "\red You can't put the [W] in, the frame has to be standing on the ground to be perfectly precise." - return - if(!M.brainmob) - user << "\red Sticking an empty [W] into the frame would sort of defeat the purpose." - return - if(!M.brainmob.key) - var/ghost_can_reenter = 0 - if(M.brainmob.mind) - for(var/mob/dead/observer/G in player_list) - if(G.can_reenter_corpse && G.mind == M.brainmob.mind) - ghost_can_reenter = 1 - break - if(!ghost_can_reenter) - user << "The [W] is completely unresponsive; there's no point." - return - - if(M.brainmob.stat == DEAD) - user << "\red Sticking a dead [W] into the frame would sort of defeat the purpose." - return - - if(M.brainmob.mind in ticker.mode.head_revolutionaries) - user << "\red The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the [W]." - return - - if(jobban_isbanned(M.brainmob, "Cyborg")) - user << "\red This [W] does not seem to fit." - return - - var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc)) - if(!O) return - - user.drop_item() - - O.mmi = W - O.invisibility = 0 - O.custom_name = created_name - O.updatename("Default") - - M.brainmob.mind.transfer_to(O) - - if(O.mind && O.mind.special_role) - O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite") - - O.job = "Cyborg" - - O.cell = chest.cell - O.cell.loc = O - W.loc = O//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame. - - feedback_inc("cyborg_birth",1) - O.Namepick() - - del(src) - else - user << "\blue The MMI must go in after everything else!" - - if (istype(W, /obj/item/weapon/pen)) - var/t = stripped_input(user, "Enter new robot name", src.name, src.created_name, MAX_NAME_LEN) - if (!t) - return - if (!in_range(src, usr) && src.loc != usr) - return - - src.created_name = t - - return - -/obj/item/robot_parts/chest/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/weapon/cell)) - if(src.cell) - user << "\blue You have already inserted a cell!" - return - else - user.drop_item() - W.loc = src - src.cell = W - user << "\blue You insert the cell!" - if(istype(W, /obj/item/weapon/cable_coil)) - if(src.wires) - user << "\blue You have already inserted wire!" - return - else - var/obj/item/weapon/cable_coil/coil = W - coil.use(1) - src.wires = 1.0 - user << "\blue You insert the wire!" - return - -/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/device/flash)) - if(src.flash1 && src.flash2) - user << "\blue You have already inserted the eyes!" - return - else if(src.flash1) - user.drop_item() - W.loc = src - src.flash2 = W - user << "\blue You insert the flash into the eye socket!" - else - user.drop_item() - W.loc = src - src.flash1 = W - user << "\blue You insert the flash into the eye socket!" - else if(istype(W, /obj/item/weapon/stock_parts/manipulator)) - user << "\blue You install some manipulators and modify the head, creating a functional spider-bot!" - new /mob/living/simple_animal/spiderbot(get_turf(loc)) - user.drop_item() - del(W) - del(src) - return - return - +/obj/item/robot_parts + name = "robot parts" + icon = 'icons/obj/robot_parts.dmi' + item_state = "buildpipe" + icon_state = "blank" + flags = FPRINT | TABLEPASS | CONDUCT + slot_flags = SLOT_BELT + var/construction_time = 100 + var/list/construction_cost = list("metal"=20000,"glass"=5000) + var/list/part = null + +/obj/item/robot_parts/l_arm + name = "robot left arm" + desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." + icon_state = "l_arm" + construction_time = 200 + construction_cost = list("metal"=18000) + part = list("l_arm","l_hand") + +/obj/item/robot_parts/l_hand + name = "robot left hand" + desc = "A skeletal hand wrapped in pseudomuscles, with a low-conductivity case." + icon_state = "l_arm" + construction_time = 150 + construction_cost = list("metal"=9000) + part = list("l_hand") + +/obj/item/robot_parts/r_arm + name = "robot right arm" + desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." + icon_state = "r_arm" + construction_time = 200 + construction_cost = list("metal"=18000) + part = list("r_arm","r_hand") + +/obj/item/robot_parts/r_hand + name = "robot right hand" + desc = "A skeletal hand wrapped in pseudomuscles, with a low-conductivity case." + icon_state = "r_arm" + construction_time = 150 + construction_cost = list("metal"=9000) + part = list("r_hand") + +/obj/item/robot_parts/l_leg + name = "robot left leg" + desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." + icon_state = "l_leg" + construction_time = 200 + construction_cost = list("metal"=15000) + part = list("l_leg","l_foot") + +/obj/item/robot_parts/l_foot + name = "robot left foot" + desc = "A skeletal foot wrapped in pseudomuscles, with a low-conductivity case." + icon_state = "l_leg" + construction_time = 150 + construction_cost = list("metal"=9000) + part = list("l_foot") + +/obj/item/robot_parts/r_leg + name = "robot right leg" + desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." + icon_state = "r_leg" + construction_time = 200 + construction_cost = list("metal"=15000) + part = list("r_leg","r_foot") + +/obj/item/robot_parts/r_foot + name = "robot right foot" + desc = "A skeletal foot wrapped in pseudomuscles, with a low-conductivity case." + icon_state = "r_leg" + construction_time = 150 + construction_cost = list("metal"=9000) + part = list("r_foot") + +/obj/item/robot_parts/chest + name = "robot torso" + desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell." + icon_state = "chest" + construction_time = 350 + construction_cost = list("metal"=40000) + var/wires = 0.0 + var/obj/item/weapon/cell/cell = null + +/obj/item/robot_parts/head + name = "robot head" + desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals." + icon_state = "head" + construction_time = 350 + construction_cost = list("metal"=25000) + var/obj/item/device/flash/flash1 = null + var/obj/item/device/flash/flash2 = null + +/obj/item/robot_parts/robot_suit + name = "robot endoskeleton" + desc = "A complex metal backbone with standard limb sockets and pseudomuscle anchors." + icon_state = "robo_suit" + construction_time = 500 + construction_cost = list("metal"=50000) + var/obj/item/robot_parts/l_arm/l_arm = null + var/obj/item/robot_parts/r_arm/r_arm = null + var/obj/item/robot_parts/l_leg/l_leg = null + var/obj/item/robot_parts/r_leg/r_leg = null + var/obj/item/robot_parts/chest/chest = null + var/obj/item/robot_parts/head/head = null + var/created_name = "" + +/obj/item/robot_parts/robot_suit/New() + ..() + src.updateicon() + +/obj/item/robot_parts/robot_suit/proc/updateicon() + src.overlays.Cut() + if(src.l_arm) + src.overlays += "l_arm+o" + if(src.r_arm) + src.overlays += "r_arm+o" + if(src.chest) + src.overlays += "chest+o" + if(src.l_leg) + src.overlays += "l_leg+o" + if(src.r_leg) + src.overlays += "r_leg+o" + if(src.head) + src.overlays += "head+o" + +/obj/item/robot_parts/robot_suit/proc/check_completion() + if(src.l_arm && src.r_arm) + if(src.l_leg && src.r_leg) + if(src.chest && src.head) + feedback_inc("cyborg_frames_built",1) + return 1 + return 0 + +/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/stack/sheet/metal) && !l_arm && !r_arm && !l_leg && !r_leg && !chest && !head) + var/obj/item/weapon/ed209_assembly/B = new /obj/item/weapon/ed209_assembly + B.loc = get_turf(src) + user << "You armed the robot frame" + W:use(1) + if (user.get_inactive_hand()==src) + user.before_take_item(src) + user.put_in_inactive_hand(B) + del(src) + if(istype(W, /obj/item/robot_parts/l_leg)) + if(src.l_leg) return + user.drop_item() + W.loc = src + src.l_leg = W + src.updateicon() + + if(istype(W, /obj/item/robot_parts/r_leg)) + if(src.r_leg) return + user.drop_item() + W.loc = src + src.r_leg = W + src.updateicon() + + if(istype(W, /obj/item/robot_parts/l_arm)) + if(src.l_arm) return + user.drop_item() + W.loc = src + src.l_arm = W + src.updateicon() + + if(istype(W, /obj/item/robot_parts/r_arm)) + if(src.r_arm) return + user.drop_item() + W.loc = src + src.r_arm = W + src.updateicon() + + if(istype(W, /obj/item/robot_parts/chest)) + if(src.chest) return + if(W:wires && W:cell) + user.drop_item() + W.loc = src + src.chest = W + src.updateicon() + else if(!W:wires) + user << "\blue You need to attach wires to it first!" + else + user << "\blue You need to attach a cell to it first!" + + if(istype(W, /obj/item/robot_parts/head)) + if(src.head) return + if(W:flash2 && W:flash1) + user.drop_item() + W.loc = src + src.head = W + src.updateicon() + else + user << "\blue You need to attach a flash to it first!" + + if(istype(W, /obj/item/device/mmi) || istype(W, /obj/item/device/mmi/posibrain)) + var/obj/item/device/mmi/M = W + if(check_completion()) + if(!istype(loc,/turf)) + user << "\red You can't put the [W] in, the frame has to be standing on the ground to be perfectly precise." + return + if(!M.brainmob) + user << "\red Sticking an empty [W] into the frame would sort of defeat the purpose." + return + if(!M.brainmob.key) + var/ghost_can_reenter = 0 + if(M.brainmob.mind) + for(var/mob/dead/observer/G in player_list) + if(G.can_reenter_corpse && G.mind == M.brainmob.mind) + ghost_can_reenter = 1 + break + if(!ghost_can_reenter) + user << "The [W] is completely unresponsive; there's no point." + return + + if(M.brainmob.stat == DEAD) + user << "\red Sticking a dead [W] into the frame would sort of defeat the purpose." + return + + if(M.brainmob.mind in ticker.mode.head_revolutionaries) + user << "\red The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the [W]." + return + + if(jobban_isbanned(M.brainmob, "Cyborg")) + user << "\red This [W] does not seem to fit." + return + + var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc)) + if(!O) return + + user.drop_item() + + O.mmi = W + O.invisibility = 0 + O.custom_name = created_name + O.updatename("Default") + + M.brainmob.mind.transfer_to(O) + + if(O.mind && O.mind.special_role) + O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite") + + O.job = "Cyborg" + + O.cell = chest.cell + O.cell.loc = O + W.loc = O//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame. + + feedback_inc("cyborg_birth",1) + O.Namepick() + + del(src) + else + user << "\blue The MMI must go in after everything else!" + + if (istype(W, /obj/item/weapon/pen)) + var/t = stripped_input(user, "Enter new robot name", src.name, src.created_name, MAX_NAME_LEN) + if (!t) + return + if (!in_range(src, usr) && src.loc != usr) + return + + src.created_name = t + + return + +/obj/item/robot_parts/r_arm/attackby(obj/item/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/weapon/screwdriver)) + user << "\blue You screw the wrist join apart and discard the arm." + new /obj/item/robot_parts/r_hand(src.loc) + del(src) + return + +/obj/item/robot_parts/l_arm/attackby(obj/item/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/weapon/screwdriver)) + user << "\blue You screw the wrist join apart and discard the arm." + new /obj/item/robot_parts/l_hand(src.loc) + del(src) + return + +/obj/item/robot_parts/l_leg/attackby(obj/item/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/weapon/screwdriver)) + user << "\blue You screw the ankle join apart and discard the leg." + new /obj/item/robot_parts/l_foot(src.loc) + del(src) + return + +/obj/item/robot_parts/r_leg/attackby(obj/item/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/weapon/screwdriver)) + user << "\blue You screw the ankle join apart and discard the leg." + new /obj/item/robot_parts/r_foot(src.loc) + del(src) + return + +/obj/item/robot_parts/chest/attackby(obj/item/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/weapon/cell)) + if(src.cell) + user << "\blue You have already inserted a cell!" + return + else + user.drop_item() + W.loc = src + src.cell = W + user << "\blue You insert the cell!" + if(istype(W, /obj/item/weapon/cable_coil)) + if(src.wires) + user << "\blue You have already inserted wire!" + return + else + var/obj/item/weapon/cable_coil/coil = W + coil.use(1) + src.wires = 1.0 + user << "\blue You insert the wire!" + return + +/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob) + ..() + if(istype(W, /obj/item/device/flash)) + if(src.flash1 && src.flash2) + user << "\blue You have already inserted the eyes!" + return + else if(src.flash1) + user.drop_item() + W.loc = src + src.flash2 = W + user << "\blue You insert the flash into the eye socket!" + else + user.drop_item() + W.loc = src + src.flash1 = W + user << "\blue You insert the flash into the eye socket!" + else if(istype(W, /obj/item/weapon/stock_parts/manipulator)) + user << "\blue You install some manipulators and modify the head, creating a functional spider-bot!" + new /mob/living/simple_animal/spiderbot(get_turf(loc)) + user.drop_item() + del(W) + del(src) + return + return + diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 07a7a6308b5..0de996ceaf3 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -1,168 +1,168 @@ -// robot_upgrades.dm -// Contains various borg upgrades. - -/obj/item/borg/upgrade - name = "A borg upgrade module." - desc = "Protected by FRM." - icon = 'icons/obj/module.dmi' - icon_state = "cyborg_upgrade" - var/construction_time = 120 - var/construction_cost = list("metal"=10000) - var/locked = 0 - var/require_module = 0 - var/installed = 0 - -/obj/item/borg/upgrade/proc/action(var/mob/living/silicon/robot/R) - if(R.stat == DEAD) - usr << "/red The [src] will not function on a deceased robot." - return 1 - return 0 - - -/obj/item/borg/upgrade/reset - name = "robotic module reset board" - desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot." - icon_state = "cyborg_upgrade1" - require_module = 1 - -/obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - R.uneq_all() - R.hands.icon_state = "nomod" - R.icon_state = "robot" - del(R.module) - R.module = null - R.modtype = "robot" - R.updatename("Default") - R.status_flags |= CANPUSH - R.updateicon() - - return 1 - -/obj/item/borg/upgrade/rename - name = "robot reclassification board" - desc = "Used to rename a cyborg." - icon_state = "cyborg_upgrade1" - construction_cost = list("metal"=35000) - var/heldname = "default name" - -/obj/item/borg/upgrade/rename/attack_self(mob/user as mob) - heldname = stripped_input(user, "Enter new robot name", "Robot Reclassification", heldname, MAX_NAME_LEN) - -/obj/item/borg/upgrade/rename/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - R.name = heldname - R.real_name = heldname - - return 1 - -/obj/item/borg/upgrade/restart - name = "robot emergency restart module" - desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online." - construction_cost = list("metal"=60000 , "glass"=5000) - icon_state = "cyborg_upgrade1" - - -/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R) - if(R.health < 0) - usr << "You have to repair the robot before using this module!" - return 0 - - if(!R.key) - for(var/mob/dead/observer/ghost in player_list) - if(ghost.mind && ghost.mind.current == R) - R.key = ghost.key - - R.stat = CONSCIOUS - return 1 - - -/obj/item/borg/upgrade/vtec - name = "robotic VTEC Module" - desc = "Used to kick in a robot's VTEC systems, increasing their speed." - construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 5000) - icon_state = "cyborg_upgrade2" - require_module = 1 - -/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - - if(R.speed == -1) - return 0 - - R.speed-- - return 1 - - -/obj/item/borg/upgrade/tasercooler - name = "robotic Rapid Taser Cooling Module" - desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate." - construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 2000, "diamond" = 500) - icon_state = "cyborg_upgrade3" - require_module = 1 - - -/obj/item/borg/upgrade/tasercooler/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - - if(!istype(R.module, /obj/item/weapon/robot_module/security)) - R << "Upgrade mounting error! No suitable hardpoint detected!" - usr << "There's no mounting point for the module!" - return 0 - - var/obj/item/weapon/gun/energy/taser/cyborg/T = locate() in R.module - if(!T) - T = locate() in R.module.contents - if(!T) - T = locate() in R.module.modules - if(!T) - usr << "This robot has had its taser removed!" - return 0 - - if(T.recharge_time <= 2) - R << "Maximum cooling achieved for this hardpoint!" - usr << "There's no room for another cooling unit!" - return 0 - - else - T.recharge_time = max(2 , T.recharge_time - 4) - - return 1 - -/obj/item/borg/upgrade/jetpack - name = "mining robot jetpack" - desc = "A carbon dioxide jetpack suitable for low-gravity mining operations." - construction_cost = list("metal"=10000,"plasma"=15000,"uranium" = 20000) - icon_state = "cyborg_upgrade3" - require_module = 1 - -/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - - if(!istype(R.module, /obj/item/weapon/robot_module/miner)) - R << "Upgrade mounting error! No suitable hardpoint detected!" - usr << "There's no mounting point for the module!" - return 0 - else - R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide - for(var/obj/item/weapon/tank/jetpack/carbondioxide in R.module.modules) - R.internals = src - R.icon_state="Miner+j" - return 1 - - -/obj/item/borg/upgrade/syndicate/ - name = "Illegal Equipment Module" - desc = "Unlocks the hidden, deadlier functions of a robot" - construction_cost = list("metal"=10000,"glass"=15000,"diamond" = 10000) - icon_state = "cyborg_upgrade3" - require_module = 1 - -/obj/item/borg/upgrade/syndicate/action(var/mob/living/silicon/robot/R) - if(..()) return 0 - - if(R.emagged == 1) - return 0 - - R.emagged = 1 +// robot_upgrades.dm +// Contains various borg upgrades. + +/obj/item/borg/upgrade + name = "A borg upgrade module." + desc = "Protected by FRM." + icon = 'icons/obj/module.dmi' + icon_state = "cyborg_upgrade" + var/construction_time = 120 + var/construction_cost = list("metal"=10000) + var/locked = 0 + var/require_module = 0 + var/installed = 0 + +/obj/item/borg/upgrade/proc/action(var/mob/living/silicon/robot/R) + if(R.stat == DEAD) + usr << "\red The [src] will not function on a deceased robot." + return 1 + return 0 + + +/obj/item/borg/upgrade/reset + name = "robotic module reset board" + desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the robot." + icon_state = "cyborg_upgrade1" + require_module = 1 + +/obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + R.uneq_all() + R.hands.icon_state = "nomod" + R.icon_state = "robot" + del(R.module) + R.module = null + R.modtype = "robot" + R.updatename("Default") + R.status_flags |= CANPUSH + R.updateicon() + + return 1 + +/obj/item/borg/upgrade/rename + name = "robot reclassification board" + desc = "Used to rename a cyborg." + icon_state = "cyborg_upgrade1" + construction_cost = list("metal"=35000) + var/heldname = "default name" + +/obj/item/borg/upgrade/rename/attack_self(mob/user as mob) + heldname = stripped_input(user, "Enter new robot name", "Robot Reclassification", heldname, MAX_NAME_LEN) + +/obj/item/borg/upgrade/rename/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + R.name = heldname + R.real_name = heldname + + return 1 + +/obj/item/borg/upgrade/restart + name = "robot emergency restart module" + desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online." + construction_cost = list("metal"=60000 , "glass"=5000) + icon_state = "cyborg_upgrade1" + + +/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R) + if(R.health < 0) + usr << "You have to repair the robot before using this module!" + return 0 + + if(!R.key) + for(var/mob/dead/observer/ghost in player_list) + if(ghost.mind && ghost.mind.current == R) + R.key = ghost.key + + R.stat = CONSCIOUS + return 1 + + +/obj/item/borg/upgrade/vtec + name = "robotic VTEC Module" + desc = "Used to kick in a robot's VTEC systems, increasing their speed." + construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 5000) + icon_state = "cyborg_upgrade2" + require_module = 1 + +/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(R.speed == -1) + return 0 + + R.speed-- + return 1 + + +/obj/item/borg/upgrade/tasercooler + name = "robotic Rapid Taser Cooling Module" + desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate." + construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 2000, "diamond" = 500) + icon_state = "cyborg_upgrade3" + require_module = 1 + + +/obj/item/borg/upgrade/tasercooler/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(!istype(R.module, /obj/item/weapon/robot_module/security)) + R << "Upgrade mounting error! No suitable hardpoint detected!" + usr << "There's no mounting point for the module!" + return 0 + + var/obj/item/weapon/gun/energy/taser/cyborg/T = locate() in R.module + if(!T) + T = locate() in R.module.contents + if(!T) + T = locate() in R.module.modules + if(!T) + usr << "This robot has had its taser removed!" + return 0 + + if(T.recharge_time <= 2) + R << "Maximum cooling achieved for this hardpoint!" + usr << "There's no room for another cooling unit!" + return 0 + + else + T.recharge_time = max(2 , T.recharge_time - 4) + + return 1 + +/obj/item/borg/upgrade/jetpack + name = "mining robot jetpack" + desc = "A carbon dioxide jetpack suitable for low-gravity mining operations." + construction_cost = list("metal"=10000,"plasma"=15000,"uranium" = 20000) + icon_state = "cyborg_upgrade3" + require_module = 1 + +/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(!istype(R.module, /obj/item/weapon/robot_module/miner)) + R << "Upgrade mounting error! No suitable hardpoint detected!" + usr << "There's no mounting point for the module!" + return 0 + else + R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide + for(var/obj/item/weapon/tank/jetpack/carbondioxide in R.module.modules) + R.internals = src + R.icon_state="Miner+j" + return 1 + + +/obj/item/borg/upgrade/syndicate/ + name = "Illegal Equipment Module" + desc = "Unlocks the hidden, deadlier functions of a robot" + construction_cost = list("metal"=10000,"glass"=15000,"diamond" = 10000) + icon_state = "cyborg_upgrade3" + require_module = 1 + +/obj/item/borg/upgrade/syndicate/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(R.emagged == 1) + return 0 + + R.emagged = 1 return 1 \ No newline at end of file diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 2d332ce177f..fd4357f8dbc 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -1,819 +1,819 @@ -/* Surgery Tools - * Contains: - * Retractor - * Hemostat - * Cautery - * Surgical Drill - * Scalpel - * Circular Saw - */ - -/* - * Retractor - */ -/obj/item/weapon/retractor - name = "retractor" - desc = "Retracts stuff." - icon = 'icons/obj/surgery.dmi' - icon_state = "retractor" - m_amt = 10000 - g_amt = 5000 - flags = FPRINT | TABLEPASS | CONDUCT - w_class = 1.0 - origin_tech = "materials=1;biotech=1" - -/*HAHA, SUCK IT, 2000 LINES OF SPAGHETTI CODE! - -NOW YOUR JOB IOS DONE BY ONLY 500 LINES OF SPAGHETTI CODE! - -LOOK FOR SURGERY.DM*/ - -/* -/obj/item/weapon/retractor/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N - user << "\red You cannot locate any eyes on this creature!" - return - - switch(M.eye_op_stage) - if(1.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is having his eyes retracted by [user].", 1) - M << "\red [user] begins to seperate your eyes with [src]!" - user << "\red You seperate [M]'s eyes with [src]!" - else - user.visible_message( \ - "\red [user] begins to have his eyes retracted.", \ - "\red You begin to pry open your eyes with [src]!" \ - ) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - M.updatehealth() - else - M.take_organ_damage(15) - - M:eye_op_stage = 2.0 - - else if(user.zone_sel.selecting == "chest") - switch(M:alien_op_stage) - if(3.0) - var/mob/living/carbon/human/H = M - if(!istype(H)) - return ..() - - if(H.wear_suit || H.w_uniform) - user << "\red You're going to need to remove that suit/jumpsuit first." - return - - var/obj/item/alien_embryo/A = locate() in M.contents - if(!A) - return ..() - user.visible_message("\red [user] begins to pull something out of [M]'s chest.", "\red You begin to pull the alien organism out of [M]'s chest.") - - spawn(20 + rand(0,50)) - if(!A || A.loc != M) - return - - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("chest") - if(affecting.take_damage(30)) - M:UpdateDamageIcon() - else - M.take_organ_damage(30) - - if(A.stage > 3) - var/chance = 15 + max(0, A.stage - 3) * 10 - if(prob(chance)) - A.AttemptGrow(0) - M:alien_op_stage = 4.0 - - if(M) - user.visible_message("\red [user] pulls an alien organism out of [M]'s chest.", "\red You pull the alien organism out of [M]'s chest.") - A.loc = M.loc //alien embryo handles cleanup - - else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) - return ..() - - return -*/ - -/* - * Hemostat - */ -/obj/item/weapon/hemostat - name = "hemostat" - desc = "You think you have seen this before." - icon = 'icons/obj/surgery.dmi' - icon_state = "hemostat" - m_amt = 5000 - g_amt = 2500 - flags = FPRINT | TABLEPASS | CONDUCT - w_class = 1.0 - origin_tech = "materials=1;biotech=1" - attack_verb = list("attacked", "pinched") - -/* -/obj/item/weapon/hemostat/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) - return ..() - - if(user.zone_sel.selecting == "groin") - if(istype(M, /mob/living/carbon/human)) - switch(M:appendix_op_stage) - if(1.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [user] is beginning to clamp bleeders in [M]'s abdomen cut open with [src].", 1) - M << "\red [user] begins to clamp bleeders in your abdomen with [src]!" - user << "\red You clamp bleeders in [M]'s abdomen with [src]!" - M:appendix_op_stage = 2.0 - if(4.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [user] is removing [M]'s appendix with [src].", 1) - M << "\red [user] begins to remove your appendix with [src]!" - user << "\red You remove [M]'s appendix with [src]!" - for(var/datum/disease/D in M.viruses) - if(istype(D, /datum/disease/appendicitis)) - new /obj/item/weapon/reagent_containers/food/snacks/appendix/inflamed(get_turf(M)) - M:appendix_op_stage = 5.0 - return - new /obj/item/weapon/reagent_containers/food/snacks/appendix(get_turf(M)) - M:appendix_op_stage = 5.0 - return - - if (user.zone_sel.selecting == "eyes") - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N - user << "\red You cannot locate any eyes on this creature!" - return - - switch(M.eye_op_stage) - if(2.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is having his eyes mended by [user].", 1) - M << "\red [user] begins to mend your eyes with [src]!" - user << "\red You mend [M]'s eyes with [src]!" - else - user.visible_message( \ - "\red [user] begins to have his eyes mended.", \ - "\red You begin to mend your eyes with [src]!" \ - ) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - M.updatehealth() - else - M.take_organ_damage(15) - M:eye_op_stage = 3.0 - - else if(user.zone_sel.selecting == "chest") - if(M:alien_op_stage == 2.0 || M:alien_op_stage == 3.0) - var/mob/living/carbon/human/H = M - if(!istype(H)) - return ..() - - if(H.wear_suit || H.w_uniform) - user << "\red You're going to need to remove that suit/jumpsuit first." - return - - user.visible_message("\red [user] begins to dig around in [M]'s chest.", "\red You begin to dig around in [M]'s chest.") - - spawn(20 + (M:alien_op_stage == 3 ? 0 : rand(0,50))) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("chest") - if(affecting.take_damage(30)) - M:UpdateDamageIcon() - else - M.take_organ_damage(30) - - var/obj/item/alien_embryo/A = locate() in M.contents - if(A) - var/dat = "\blue You found an unknown alien organism in [M]'s chest!" - if(A.stage < 4) - dat += " It's small and weak, barely the size of a foetus." - if(A.stage > 3) - dat += " It's grown quite large, and writhes slightly as you look at it." - if(prob(10)) - A.AttemptGrow() - user << dat - M:alien_op_stage = 3.0 - else - user << "\blue You find nothing of interest." - - else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) - return ..() - - return -*/ - -/* - * Cautery - */ -/obj/item/weapon/cautery - name = "cautery" - desc = "This stops bleeding." - icon = 'icons/obj/surgery.dmi' - icon_state = "cautery" - m_amt = 5000 - g_amt = 2500 - flags = FPRINT | TABLEPASS | CONDUCT - w_class = 1.0 - origin_tech = "materials=1;biotech=1" - attack_verb = list("burnt") - -/* -/obj/item/weapon/cautery/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) - return ..() - - if(user.zone_sel.selecting == "groin") - if(istype(M, /mob/living/carbon/human)) - switch(M:appendix_op_stage) - if(5.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [user] is beginning to cauterize the incision in [M]'s abdomen with [src].", 1) - M << "\red [user] begins to cauterize the incision in your abdomen with [src]!" - user << "\red You cauterize the incision in [M]'s abdomen with [src]!" - M:appendix_op_stage = 6.0 - for(var/datum/disease/appendicitis in M.viruses) - appendicitis.cure() - return - - if (user.zone_sel.selecting == "eyes") - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N - user << "\red You cannot locate any eyes on this creature!" - return - - switch(M.eye_op_stage) - if(3.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is having his eyes cauterized by [user].", 1) - M << "\red [user] begins to cauterize your eyes!" - user << "\red You cauterize [M]'s eyes with [src]!" - else - user.visible_message( \ - "\red [user] begins to have his eyes cauterized.", \ - "\red You begin to cauterize your eyes!" \ - ) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - M.updatehealth() - else - M.take_organ_damage(15) - M.sdisabilities &= ~BLIND - M.eye_stat = 0 - M:eye_op_stage = 0.0 - - else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) - return ..() - - return -*/ - -/* - * Surgical Drill - */ -/obj/item/weapon/surgicaldrill - name = "surgical drill" - desc = "You can drill using this item. You dig?" - icon = 'icons/obj/surgery.dmi' - icon_state = "drill" - hitsound = 'sound/weapons/circsawhit.ogg' - m_amt = 15000 - g_amt = 10000 - flags = FPRINT | TABLEPASS | CONDUCT - force = 15.0 - w_class = 1.0 - origin_tech = "materials=1;biotech=1" - attack_verb = list("drilled") - - suicide_act(mob/user) - viewers(user) << pick("/red [user] is pressing the [src.name] to \his temple and activating it! It looks like \he's trying to commit suicide.", \ - "/red [user] is pressing [src.name] to \his chest and activating it! It looks like \he's trying to commit suicide.") - return (BRUTELOSS) - -/* - * Scalpel - */ -/obj/item/weapon/scalpel - name = "scalpel" - desc = "Cut, cut, and once more cut." - icon = 'icons/obj/surgery.dmi' - icon_state = "scalpel" - flags = FPRINT | TABLEPASS | CONDUCT - force = 10.0 - w_class = 1.0 - throwforce = 5.0 - throw_speed = 3 - throw_range = 5 - m_amt = 10000 - g_amt = 5000 - origin_tech = "materials=1;biotech=1" - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - - suicide_act(mob/user) - viewers(user) << pick("\red [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") - return (BRUTELOSS) - -/* -/obj/item/weapon/scalpel/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - //if(M.mutations & HUSK) return ..() - - if((CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) - return ..() - - src.add_fingerprint(user) - - if(user.zone_sel.selecting == "groin") - if(istype(M, /mob/living/carbon/human)) - switch(M:appendix_op_stage) - if(0.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is beginning to have his abdomen cut open with [src] by [user].", 1) - M << "\red [user] begins to cut open your abdomen with [src]!" - user << "\red You cut [M]'s abdomen open with [src]!" - M:appendix_op_stage = 1.0 - if(3.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is beginning to have his appendix seperated with [src] by [user].", 1) - M << "\red [user] begins to seperate your appendix with [src]!" - user << "\red You seperate [M]'s appendix with [src]!" - M:appendix_op_stage = 4.0 - return - - if(user.zone_sel.selecting == "head" || istype(M, /mob/living/carbon/slime)) - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - switch(M:brain_op_stage) - if(0.0) - if(istype(M, /mob/living/carbon/slime)) - if(M.stat == 2) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M.name] is beginning to have its flesh cut open with [src] by [user].", 1) - M << "\red [user] begins to cut open your flesh with [src]!" - user << "\red You cut [M]'s flesh open with [src]!" - M:brain_op_stage = 1.0 - - return - - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is beginning to have his head cut open with [src] by [user].", 1) - M << "\red [user] begins to cut open your head with [src]!" - user << "\red You cut [M]'s head open with [src]!" - else - user.visible_message( \ - "\red [user] begins to cut open his skull with [src]!", \ - "\red You begin to cut open your head with [src]!" \ - ) - - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - else - M.take_organ_damage(15) - - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("head") - affecting.take_damage(7) - else - M.take_organ_damage(7) - - M.updatehealth() - M:brain_op_stage = 1.0 - - if(1) - if(istype(M, /mob/living/carbon/slime)) - if(M.stat == 2) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M.name] is having its silky innards cut apart with [src] by [user].", 1) - M << "\red [user] begins to cut apart your innards with [src]!" - user << "\red You cut [M]'s silky innards apart with [src]!" - M:brain_op_stage = 2.0 - return - if(2.0) - if(istype(M, /mob/living/carbon/slime)) - if(M.stat == 2) - var/mob/living/carbon/slime/slime = M - if(slime.cores > 0) - if(istype(M, /mob/living/carbon/slime)) - user << "\red You attempt to remove [M]'s core, but [src] is ineffective!" - return - - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is having his connections to the brain delicately severed with [src] by [user].", 1) - M << "\red [user] begins to cut open your head with [src]!" - user << "\red You cut [M]'s head open with [src]!" - else - user.visible_message( \ - "\red [user] begin to delicately remove the connections to his brain with [src]!", \ - "\red You begin to cut open your head with [src]!" \ - ) - if(M == user && prob(25)) - user << "\red You nick an artery!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(75)) - M:UpdateDamageIcon() - else - M.take_organ_damage(75) - - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("head") - affecting.take_damage(7) - else - M.take_organ_damage(7) - - M.updatehealth() - M:brain_op_stage = 3.0 - else - ..() - return - - else if(user.zone_sel.selecting == "eyes") - user << "\blue So far so good." - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N - user << "\red You cannot locate any eyes on this creature!" - return - - switch(M:eye_op_stage) - if(0.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is beginning to have his eyes incised with [src] by [user].", 1) - M << "\red [user] begins to cut open your eyes with [src]!" - user << "\red You make an incision around [M]'s eyes with [src]!" - else - user.visible_message( \ - "\red [user] begins to cut around his eyes with [src]!", \ - "\red You begin to cut open your eyes with [src]!" \ - ) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - else - M.take_organ_damage(15) - - user << "\blue So far so good before." - M.updatehealth() - M:eye_op_stage = 1.0 - user << "\blue So far so good after." - - else if(user.zone_sel.selecting == "chest") - switch(M:alien_op_stage) - if(0.0) - var/mob/living/carbon/human/H = M - if(!istype(H)) - return ..() - - if(H.wear_suit || H.w_uniform) - user << "\red You're going to need to remove that suit/jumpsuit first." - return - - user.visible_message("\red [user] begins to slice open [M]'s chest.", "\red You begin to slice open [M]'s chest.") - - spawn(rand(20,50)) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("chest") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - else - M.take_organ_damage(15) - - M:alien_op_stage = 1.0 - user << "\blue So far so good." - - else - return ..() -/* wat - else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) - return ..()*/ - return -*/ - -/* - * Circular Saw - */ -/obj/item/weapon/circular_saw - name = "circular saw" - desc = "For heavy duty cutting." - icon = 'icons/obj/surgery.dmi' - icon_state = "saw3" - hitsound = 'sound/weapons/circsawhit.ogg' - flags = FPRINT | TABLEPASS | CONDUCT - force = 15.0 - w_class = 1.0 - throwforce = 9.0 - throw_speed = 3 - throw_range = 5 - m_amt = 20000 - g_amt = 10000 - origin_tech = "materials=1;biotech=1" - attack_verb = list("attacked", "slashed", "sawed", "cut") - -/* -/obj/item/weapon/circular_saw/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - if((CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) - return ..() - - src.add_fingerprint(user) - - if(user.zone_sel.selecting == "head" || istype(M, /mob/living/carbon/slime)) - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - switch(M:brain_op_stage) - if(1.0) - if(istype(M, /mob/living/carbon/slime)) - return - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] has his skull sawed open with [src] by [user].", 1) - M << "\red [user] begins to saw open your head with [src]!" - user << "\red You saw [M]'s head open with [src]!" - else - user.visible_message( \ - "\red [user] saws open his skull with [src]!", \ - "\red You begin to saw open your head with [src]!" \ - ) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(40)) - M:UpdateDamageIcon() - M.updatehealth() - else - M.take_organ_damage(40) - - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("head") - affecting.take_damage(7) - else - M.take_organ_damage(7) - - M.updatehealth() - M:brain_op_stage = 2.0 - - if(2.0) - if(istype(M, /mob/living/carbon/slime)) - if(M.stat == 2) - var/mob/living/carbon/slime/slime = M - if(slime.cores > 0) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M.name] is having one of its cores sawed out with [src] by [user].", 1) - - slime.cores-- - M << "\red [user] begins to remove one of your cores with [src]! ([slime.cores] cores remaining)" - user << "\red You cut one of [M]'s cores out with [src]! ([slime.cores] cores remaining)" - - new slime.coretype(M.loc) - - if(slime.cores <= 0) - M.icon_state = "[slime.colour] baby slime dead-nocore" - - return - - if(3.0) - /*if(M.mind && M.mind.changeling) - user << "\red The neural tissue regrows before your eyes as you cut it." - return*/ - - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] has his spine's connection to the brain severed with [src] by [user].", 1) - M << "\red [user] severs your brain's connection to the spine with [src]!" - user << "\red You sever [M]'s brain's connection to the spine with [src]!" - else - user.visible_message( \ - "\red [user] severs his brain's connection to the spine with [src]!", \ - "\red You sever your brain's connection to the spine with [src]!" \ - ) - - user.attack_log += "\[[time_stamp()]\] Debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" - M.attack_log += "\[[time_stamp()]\] Debrained by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" - - log_attack("[user.name] ([user.ckey]) debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") - - - var/obj/item/brain/B = new(M.loc) - B.transfer_identity(M) - - M:brain_op_stage = 4.0 - M.death()//You want them to die after the brain was transferred, so not to trigger client death() twice. - - else - ..() - return - - else if(user.zone_sel.selecting == "chest") - switch(M:alien_op_stage) - if(1.0) - var/mob/living/carbon/human/H = M - if(!istype(H)) - return ..() - - if(H.wear_suit || H.w_uniform) - user << "\red You're going to need to remove that suit/jumpsuit first." - return - - user.visible_message("\red [user] begins to slice through the bone of [M]'s chest.", "\red You begin to slice through the bone of [M]'s chest.") - - spawn(20 + rand(0,50)) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/affecting = M:get_organ("chest") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - else - M.take_organ_damage(15) - - M:alien_op_stage = 2.0 - user << "\blue So far so good." - - else - return ..() -/* - else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) - return ..() -*/ - return -*/ - -//misc, formerly from code/defines/weapons.dm -/obj/item/weapon/bonegel - name = "bone gel" - icon = 'surgery.dmi' - icon_state = "bone-gel" - force = 0 - throwforce = 1.0 - -/obj/item/weapon/FixOVein - name = "FixOVein" - icon = 'surgery.dmi' - icon_state = "fixovein" - force = 0 - throwforce = 1.0 - origin_tech = "materials=1;biotech=3" - var/usage_amount = 10 - -/obj/item/weapon/bonesetter - name = "bone setter" - icon = 'surgery.dmi' - icon_state = "bone setter" - force = 8.0 - throwforce = 9.0 - throw_speed = 3 - throw_range = 5 - attack_verb = list("attacked", "hit", "bludgeoned") +/* Surgery Tools + * Contains: + * Retractor + * Hemostat + * Cautery + * Surgical Drill + * Scalpel + * Circular Saw + */ + +/* + * Retractor + */ +/obj/item/weapon/retractor + name = "retractor" + desc = "Retracts stuff." + icon = 'icons/obj/surgery.dmi' + icon_state = "retractor" + m_amt = 10000 + g_amt = 5000 + flags = FPRINT | TABLEPASS | CONDUCT + w_class = 1.0 + origin_tech = "materials=1;biotech=1" + +/*HAHA, SUCK IT, 2000 LINES OF SPAGHETTI CODE! + +NOW YOUR JOB IOS DONE BY ONLY 500 LINES OF SPAGHETTI CODE! + +LOOK FOR SURGERY.DM*/ + +/* +/obj/item/weapon/retractor/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M)) + return + + var/mob/living/carbon/human/H = M + if(istype(H) && ( \ + (H.head && H.head.flags & HEADCOVERSEYES) || \ + (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ + (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + var/mob/living/carbon/monkey/Mo = M + if(istype(Mo) && ( \ + (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N + user << "\red You cannot locate any eyes on this creature!" + return + + switch(M.eye_op_stage) + if(1.0) + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M] is having his eyes retracted by [user].", 1) + M << "\red [user] begins to seperate your eyes with [src]!" + user << "\red You seperate [M]'s eyes with [src]!" + else + user.visible_message( \ + "\red [user] begins to have his eyes retracted.", \ + "\red You begin to pry open your eyes with [src]!" \ + ) + if(M == user && prob(25)) + user << "\red You mess up!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("head") + if(affecting.take_damage(15)) + M:UpdateDamageIcon() + M.updatehealth() + else + M.take_organ_damage(15) + + M:eye_op_stage = 2.0 + + else if(user.zone_sel.selecting == "chest") + switch(M:alien_op_stage) + if(3.0) + var/mob/living/carbon/human/H = M + if(!istype(H)) + return ..() + + if(H.wear_suit || H.w_uniform) + user << "\red You're going to need to remove that suit/jumpsuit first." + return + + var/obj/item/alien_embryo/A = locate() in M.contents + if(!A) + return ..() + user.visible_message("\red [user] begins to pull something out of [M]'s chest.", "\red You begin to pull the alien organism out of [M]'s chest.") + + spawn(20 + rand(0,50)) + if(!A || A.loc != M) + return + + if(M == user && prob(25)) + user << "\red You mess up!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("chest") + if(affecting.take_damage(30)) + M:UpdateDamageIcon() + else + M.take_organ_damage(30) + + if(A.stage > 3) + var/chance = 15 + max(0, A.stage - 3) * 10 + if(prob(chance)) + A.AttemptGrow(0) + M:alien_op_stage = 4.0 + + if(M) + user.visible_message("\red [user] pulls an alien organism out of [M]'s chest.", "\red You pull the alien organism out of [M]'s chest.") + A.loc = M.loc //alien embryo handles cleanup + + else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) + return ..() + + return +*/ + +/* + * Hemostat + */ +/obj/item/weapon/hemostat + name = "hemostat" + desc = "You think you have seen this before." + icon = 'icons/obj/surgery.dmi' + icon_state = "hemostat" + m_amt = 5000 + g_amt = 2500 + flags = FPRINT | TABLEPASS | CONDUCT + w_class = 1.0 + origin_tech = "materials=1;biotech=1" + attack_verb = list("attacked", "pinched") + +/* +/obj/item/weapon/hemostat/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M)) + return + + if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) + return ..() + + if(user.zone_sel.selecting == "groin") + if(istype(M, /mob/living/carbon/human)) + switch(M:appendix_op_stage) + if(1.0) + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [user] is beginning to clamp bleeders in [M]'s abdomen cut open with [src].", 1) + M << "\red [user] begins to clamp bleeders in your abdomen with [src]!" + user << "\red You clamp bleeders in [M]'s abdomen with [src]!" + M:appendix_op_stage = 2.0 + if(4.0) + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [user] is removing [M]'s appendix with [src].", 1) + M << "\red [user] begins to remove your appendix with [src]!" + user << "\red You remove [M]'s appendix with [src]!" + for(var/datum/disease/D in M.viruses) + if(istype(D, /datum/disease/appendicitis)) + new /obj/item/weapon/reagent_containers/food/snacks/appendix/inflamed(get_turf(M)) + M:appendix_op_stage = 5.0 + return + new /obj/item/weapon/reagent_containers/food/snacks/appendix(get_turf(M)) + M:appendix_op_stage = 5.0 + return + + if (user.zone_sel.selecting == "eyes") + + var/mob/living/carbon/human/H = M + if(istype(H) && ( \ + (H.head && H.head.flags & HEADCOVERSEYES) || \ + (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ + (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + var/mob/living/carbon/monkey/Mo = M + if(istype(Mo) && ( \ + (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N + user << "\red You cannot locate any eyes on this creature!" + return + + switch(M.eye_op_stage) + if(2.0) + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M] is having his eyes mended by [user].", 1) + M << "\red [user] begins to mend your eyes with [src]!" + user << "\red You mend [M]'s eyes with [src]!" + else + user.visible_message( \ + "\red [user] begins to have his eyes mended.", \ + "\red You begin to mend your eyes with [src]!" \ + ) + if(M == user && prob(25)) + user << "\red You mess up!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("head") + if(affecting.take_damage(15)) + M:UpdateDamageIcon() + M.updatehealth() + else + M.take_organ_damage(15) + M:eye_op_stage = 3.0 + + else if(user.zone_sel.selecting == "chest") + if(M:alien_op_stage == 2.0 || M:alien_op_stage == 3.0) + var/mob/living/carbon/human/H = M + if(!istype(H)) + return ..() + + if(H.wear_suit || H.w_uniform) + user << "\red You're going to need to remove that suit/jumpsuit first." + return + + user.visible_message("\red [user] begins to dig around in [M]'s chest.", "\red You begin to dig around in [M]'s chest.") + + spawn(20 + (M:alien_op_stage == 3 ? 0 : rand(0,50))) + if(M == user && prob(25)) + user << "\red You mess up!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("chest") + if(affecting.take_damage(30)) + M:UpdateDamageIcon() + else + M.take_organ_damage(30) + + var/obj/item/alien_embryo/A = locate() in M.contents + if(A) + var/dat = "\blue You found an unknown alien organism in [M]'s chest!" + if(A.stage < 4) + dat += " It's small and weak, barely the size of a foetus." + if(A.stage > 3) + dat += " It's grown quite large, and writhes slightly as you look at it." + if(prob(10)) + A.AttemptGrow() + user << dat + M:alien_op_stage = 3.0 + else + user << "\blue You find nothing of interest." + + else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) + return ..() + + return +*/ + +/* + * Cautery + */ +/obj/item/weapon/cautery + name = "cautery" + desc = "This stops bleeding." + icon = 'icons/obj/surgery.dmi' + icon_state = "cautery" + m_amt = 5000 + g_amt = 2500 + flags = FPRINT | TABLEPASS | CONDUCT + w_class = 1.0 + origin_tech = "materials=1;biotech=1" + attack_verb = list("burnt") + +/* +/obj/item/weapon/cautery/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M)) + return + + if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) + return ..() + + if(user.zone_sel.selecting == "groin") + if(istype(M, /mob/living/carbon/human)) + switch(M:appendix_op_stage) + if(5.0) + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [user] is beginning to cauterize the incision in [M]'s abdomen with [src].", 1) + M << "\red [user] begins to cauterize the incision in your abdomen with [src]!" + user << "\red You cauterize the incision in [M]'s abdomen with [src]!" + M:appendix_op_stage = 6.0 + for(var/datum/disease/appendicitis in M.viruses) + appendicitis.cure() + return + + if (user.zone_sel.selecting == "eyes") + + var/mob/living/carbon/human/H = M + if(istype(H) && ( \ + (H.head && H.head.flags & HEADCOVERSEYES) || \ + (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ + (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + var/mob/living/carbon/monkey/Mo = M + if(istype(Mo) && ( \ + (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N + user << "\red You cannot locate any eyes on this creature!" + return + + switch(M.eye_op_stage) + if(3.0) + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M] is having his eyes cauterized by [user].", 1) + M << "\red [user] begins to cauterize your eyes!" + user << "\red You cauterize [M]'s eyes with [src]!" + else + user.visible_message( \ + "\red [user] begins to have his eyes cauterized.", \ + "\red You begin to cauterize your eyes!" \ + ) + if(M == user && prob(25)) + user << "\red You mess up!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("head") + if(affecting.take_damage(15)) + M:UpdateDamageIcon() + M.updatehealth() + else + M.take_organ_damage(15) + M.sdisabilities &= ~BLIND + M.eye_stat = 0 + M:eye_op_stage = 0.0 + + else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) + return ..() + + return +*/ + +/* + * Surgical Drill + */ +/obj/item/weapon/surgicaldrill + name = "surgical drill" + desc = "You can drill using this item. You dig?" + icon = 'icons/obj/surgery.dmi' + icon_state = "drill" + hitsound = 'sound/weapons/circsawhit.ogg' + m_amt = 15000 + g_amt = 10000 + flags = FPRINT | TABLEPASS | CONDUCT + force = 15.0 + w_class = 1.0 + origin_tech = "materials=1;biotech=1" + attack_verb = list("drilled") + + suicide_act(mob/user) + viewers(user) << pick("\red [user] is pressing the [src.name] to \his temple and activating it! It looks like \he's trying to commit suicide.", \ + "\red [user] is pressing [src.name] to \his chest and activating it! It looks like \he's trying to commit suicide.") + return (BRUTELOSS) + +/* + * Scalpel + */ +/obj/item/weapon/scalpel + name = "scalpel" + desc = "Cut, cut, and once more cut." + icon = 'icons/obj/surgery.dmi' + icon_state = "scalpel" + flags = FPRINT | TABLEPASS | CONDUCT + force = 10.0 + w_class = 1.0 + throwforce = 5.0 + throw_speed = 3 + throw_range = 5 + m_amt = 10000 + g_amt = 5000 + origin_tech = "materials=1;biotech=1" + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + + suicide_act(mob/user) + viewers(user) << pick("\red [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ + "\red [user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ + "\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") + return (BRUTELOSS) + +/* +/obj/item/weapon/scalpel/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M)) + return ..() + + //if(M.mutations & HUSK) return ..() + + if((CLUMSY in user.mutations) && prob(50)) + M = user + return eyestab(M,user) + + if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) + return ..() + + src.add_fingerprint(user) + + if(user.zone_sel.selecting == "groin") + if(istype(M, /mob/living/carbon/human)) + switch(M:appendix_op_stage) + if(0.0) + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M] is beginning to have his abdomen cut open with [src] by [user].", 1) + M << "\red [user] begins to cut open your abdomen with [src]!" + user << "\red You cut [M]'s abdomen open with [src]!" + M:appendix_op_stage = 1.0 + if(3.0) + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M] is beginning to have his appendix seperated with [src] by [user].", 1) + M << "\red [user] begins to seperate your appendix with [src]!" + user << "\red You seperate [M]'s appendix with [src]!" + M:appendix_op_stage = 4.0 + return + + if(user.zone_sel.selecting == "head" || istype(M, /mob/living/carbon/slime)) + + var/mob/living/carbon/human/H = M + if(istype(H) && ( \ + (H.head && H.head.flags & HEADCOVERSEYES) || \ + (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ + (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + var/mob/living/carbon/monkey/Mo = M + if(istype(Mo) && ( \ + (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + switch(M:brain_op_stage) + if(0.0) + if(istype(M, /mob/living/carbon/slime)) + if(M.stat == 2) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M.name] is beginning to have its flesh cut open with [src] by [user].", 1) + M << "\red [user] begins to cut open your flesh with [src]!" + user << "\red You cut [M]'s flesh open with [src]!" + M:brain_op_stage = 1.0 + + return + + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M] is beginning to have his head cut open with [src] by [user].", 1) + M << "\red [user] begins to cut open your head with [src]!" + user << "\red You cut [M]'s head open with [src]!" + else + user.visible_message( \ + "\red [user] begins to cut open his skull with [src]!", \ + "\red You begin to cut open your head with [src]!" \ + ) + + if(M == user && prob(25)) + user << "\red You mess up!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("head") + if(affecting.take_damage(15)) + M:UpdateDamageIcon() + else + M.take_organ_damage(15) + + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("head") + affecting.take_damage(7) + else + M.take_organ_damage(7) + + M.updatehealth() + M:brain_op_stage = 1.0 + + if(1) + if(istype(M, /mob/living/carbon/slime)) + if(M.stat == 2) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M.name] is having its silky innards cut apart with [src] by [user].", 1) + M << "\red [user] begins to cut apart your innards with [src]!" + user << "\red You cut [M]'s silky innards apart with [src]!" + M:brain_op_stage = 2.0 + return + if(2.0) + if(istype(M, /mob/living/carbon/slime)) + if(M.stat == 2) + var/mob/living/carbon/slime/slime = M + if(slime.cores > 0) + if(istype(M, /mob/living/carbon/slime)) + user << "\red You attempt to remove [M]'s core, but [src] is ineffective!" + return + + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M] is having his connections to the brain delicately severed with [src] by [user].", 1) + M << "\red [user] begins to cut open your head with [src]!" + user << "\red You cut [M]'s head open with [src]!" + else + user.visible_message( \ + "\red [user] begin to delicately remove the connections to his brain with [src]!", \ + "\red You begin to cut open your head with [src]!" \ + ) + if(M == user && prob(25)) + user << "\red You nick an artery!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("head") + if(affecting.take_damage(75)) + M:UpdateDamageIcon() + else + M.take_organ_damage(75) + + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("head") + affecting.take_damage(7) + else + M.take_organ_damage(7) + + M.updatehealth() + M:brain_op_stage = 3.0 + else + ..() + return + + else if(user.zone_sel.selecting == "eyes") + user << "\blue So far so good." + + var/mob/living/carbon/human/H = M + if(istype(H) && ( \ + (H.head && H.head.flags & HEADCOVERSEYES) || \ + (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ + (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + var/mob/living/carbon/monkey/Mo = M + if(istype(Mo) && ( \ + (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N + user << "\red You cannot locate any eyes on this creature!" + return + + switch(M:eye_op_stage) + if(0.0) + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M] is beginning to have his eyes incised with [src] by [user].", 1) + M << "\red [user] begins to cut open your eyes with [src]!" + user << "\red You make an incision around [M]'s eyes with [src]!" + else + user.visible_message( \ + "\red [user] begins to cut around his eyes with [src]!", \ + "\red You begin to cut open your eyes with [src]!" \ + ) + if(M == user && prob(25)) + user << "\red You mess up!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("head") + if(affecting.take_damage(15)) + M:UpdateDamageIcon() + else + M.take_organ_damage(15) + + user << "\blue So far so good before." + M.updatehealth() + M:eye_op_stage = 1.0 + user << "\blue So far so good after." + + else if(user.zone_sel.selecting == "chest") + switch(M:alien_op_stage) + if(0.0) + var/mob/living/carbon/human/H = M + if(!istype(H)) + return ..() + + if(H.wear_suit || H.w_uniform) + user << "\red You're going to need to remove that suit/jumpsuit first." + return + + user.visible_message("\red [user] begins to slice open [M]'s chest.", "\red You begin to slice open [M]'s chest.") + + spawn(rand(20,50)) + if(M == user && prob(25)) + user << "\red You mess up!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("chest") + if(affecting.take_damage(15)) + M:UpdateDamageIcon() + else + M.take_organ_damage(15) + + M:alien_op_stage = 1.0 + user << "\blue So far so good." + + else + return ..() +/* wat + else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) + return ..()*/ + return +*/ + +/* + * Circular Saw + */ +/obj/item/weapon/circular_saw + name = "circular saw" + desc = "For heavy duty cutting." + icon = 'icons/obj/surgery.dmi' + icon_state = "saw3" + hitsound = 'sound/weapons/circsawhit.ogg' + flags = FPRINT | TABLEPASS | CONDUCT + force = 15.0 + w_class = 1.0 + throwforce = 9.0 + throw_speed = 3 + throw_range = 5 + m_amt = 20000 + g_amt = 10000 + origin_tech = "materials=1;biotech=1" + attack_verb = list("attacked", "slashed", "sawed", "cut") + +/* +/obj/item/weapon/circular_saw/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M)) + return ..() + + if((CLUMSY in user.mutations) && prob(50)) + M = user + return eyestab(M,user) + + if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) + return ..() + + src.add_fingerprint(user) + + if(user.zone_sel.selecting == "head" || istype(M, /mob/living/carbon/slime)) + + var/mob/living/carbon/human/H = M + if(istype(H) && ( \ + (H.head && H.head.flags & HEADCOVERSEYES) || \ + (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ + (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + var/mob/living/carbon/monkey/Mo = M + if(istype(Mo) && ( \ + (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ + )) + user << "\red You're going to need to remove that mask/helmet/glasses first." + return + + switch(M:brain_op_stage) + if(1.0) + if(istype(M, /mob/living/carbon/slime)) + return + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M] has his skull sawed open with [src] by [user].", 1) + M << "\red [user] begins to saw open your head with [src]!" + user << "\red You saw [M]'s head open with [src]!" + else + user.visible_message( \ + "\red [user] saws open his skull with [src]!", \ + "\red You begin to saw open your head with [src]!" \ + ) + if(M == user && prob(25)) + user << "\red You mess up!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("head") + if(affecting.take_damage(40)) + M:UpdateDamageIcon() + M.updatehealth() + else + M.take_organ_damage(40) + + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("head") + affecting.take_damage(7) + else + M.take_organ_damage(7) + + M.updatehealth() + M:brain_op_stage = 2.0 + + if(2.0) + if(istype(M, /mob/living/carbon/slime)) + if(M.stat == 2) + var/mob/living/carbon/slime/slime = M + if(slime.cores > 0) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M.name] is having one of its cores sawed out with [src] by [user].", 1) + + slime.cores-- + M << "\red [user] begins to remove one of your cores with [src]! ([slime.cores] cores remaining)" + user << "\red You cut one of [M]'s cores out with [src]! ([slime.cores] cores remaining)" + + new slime.coretype(M.loc) + + if(slime.cores <= 0) + M.icon_state = "[slime.colour] baby slime dead-nocore" + + return + + if(3.0) + /*if(M.mind && M.mind.changeling) + user << "\red The neural tissue regrows before your eyes as you cut it." + return*/ + + if(M != user) + for(var/mob/O in (viewers(M) - user - M)) + O.show_message("\red [M] has his spine's connection to the brain severed with [src] by [user].", 1) + M << "\red [user] severs your brain's connection to the spine with [src]!" + user << "\red You sever [M]'s brain's connection to the spine with [src]!" + else + user.visible_message( \ + "\red [user] severs his brain's connection to the spine with [src]!", \ + "\red You sever your brain's connection to the spine with [src]!" \ + ) + + user.attack_log += "\[[time_stamp()]\] Debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" + M.attack_log += "\[[time_stamp()]\] Debrained by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" + + log_attack("[user.name] ([user.ckey]) debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") + + + var/obj/item/brain/B = new(M.loc) + B.transfer_identity(M) + + M:brain_op_stage = 4.0 + M.death()//You want them to die after the brain was transferred, so not to trigger client death() twice. + + else + ..() + return + + else if(user.zone_sel.selecting == "chest") + switch(M:alien_op_stage) + if(1.0) + var/mob/living/carbon/human/H = M + if(!istype(H)) + return ..() + + if(H.wear_suit || H.w_uniform) + user << "\red You're going to need to remove that suit/jumpsuit first." + return + + user.visible_message("\red [user] begins to slice through the bone of [M]'s chest.", "\red You begin to slice through the bone of [M]'s chest.") + + spawn(20 + rand(0,50)) + if(M == user && prob(25)) + user << "\red You mess up!" + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/affecting = M:get_organ("chest") + if(affecting.take_damage(15)) + M:UpdateDamageIcon() + else + M.take_organ_damage(15) + + M:alien_op_stage = 2.0 + user << "\blue So far so good." + + else + return ..() +/* + else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) + return ..() +*/ + return +*/ + +//misc, formerly from code/defines/weapons.dm +/obj/item/weapon/bonegel + name = "bone gel" + icon = 'surgery.dmi' + icon_state = "bone-gel" + force = 0 + throwforce = 1.0 + +/obj/item/weapon/FixOVein + name = "FixOVein" + icon = 'surgery.dmi' + icon_state = "fixovein" + force = 0 + throwforce = 1.0 + origin_tech = "materials=1;biotech=3" + var/usage_amount = 10 + +/obj/item/weapon/bonesetter + name = "bone setter" + icon = 'surgery.dmi' + icon_state = "bone setter" + force = 8.0 + throwforce = 9.0 + throw_speed = 3 + throw_range = 5 + attack_verb = list("attacked", "hit", "bludgeoned") From c3b2a623e9d4186f65dac9f5eade9a77c8396682 Mon Sep 17 00:00:00 2001 From: Furlucis Date: Thu, 30 May 2013 02:07:11 -0400 Subject: [PATCH 2/4] Added Malsquando's eye sprites for later use. Also what appears to be a typofix. --- baystation12.dme | 2 +- icons/obj/eyes.dmi | Bin 0 -> 639 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 icons/obj/eyes.dmi diff --git a/baystation12.dme b/baystation12.dme index 79f0e2de777..5e644128741 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1013,7 +1013,7 @@ #include "code\modules\DetectiveWork\detective_work.dm" #include "code\modules\DetectiveWork\evidence.dm" #include "code\modules\DetectiveWork\footprints_and_rag.dm" -#include "code\modules\detectivework\scanner.dm" +#include "code\modules\DetectiveWork\scanner.dm" #include "code\modules\events\alien_infestation.dm" #include "code\modules\events\blob.dm" #include "code\modules\events\brand_intelligence.dm" diff --git a/icons/obj/eyes.dmi b/icons/obj/eyes.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5cc157ab1d4771d12bcd475bb4b408e4d286491a GIT binary patch literal 639 zcmV-_0)YLAP)3008O$0F8}}0G$AR|9t>=QU6Ft0K|lag@pjW005O`e0+QW{{UuYX8%)D zssI4D005!M*T(<=00DGTPE!Ct=GbNc004A)R9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9` z^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KBSs5rGU zRf&r;C9|j)$T#HTOe;#vO@*-Gs)$llltGLte2SD6T>V_Y-T(j^u{n#m7U+ur00BEm zL_t(oh3%G0SHmC_gfAhGXA?q7OdGYW+W-F-oji1t3!bCy%B*tEFduVa5s0FqqW)h( zBuVmzycB7gD2=bow}Hs>KwhS(pjDQ6^795F&5M$#V*OM~fd;B3s(l-vLq#Q<$ATH4 zm7k;Ld=w)@X=(#6@x);J+&%*c1FFAn&`zh468|`|NcL8?t9a(2sgt ZeF6yT5HR{EBbNXG002ovPDHLkV1lJ|6gB_= literal 0 HcmV?d00001 From 0f9a1fe71c43a5bb33222520524df20913d2a831 Mon Sep 17 00:00:00 2001 From: Furlucis Date: Fri, 31 May 2013 19:42:27 -0400 Subject: [PATCH 3/4] Fixes and a few tweaks to Obscure, Seer, and Reveal runes. Signed-off-by: Furlucis --- code/game/gamemodes/cult/runes.dm | 17 ++++++++++++----- code/modules/mob/living/carbon/human/life.dm | 4 ++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index f8b743eb701..7d8231d9520 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -202,13 +202,20 @@ var/list/sacrificed = list() seer() if(usr.loc==src.loc) - usr.say("Rash'tla sektath mal[pick("'","`")]zua. Zasan therium vivira. Itonis al'ra matum!") - if(usr.see_invisible!=0 && usr.see_invisible!=15) + if(usr.seer==1) + usr.say("Rash'tla sektath mal[pick("'","`")]zua. Zasan therium viortia.") + usr << "\red The world beyond fades from your vision." + usr.see_invisible = SEE_INVISIBLE_LIVING + usr.seer = 0 + else if(usr.see_invisible!=SEE_INVISIBLE_LIVING) usr << "\red The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision." + usr.see_invisible = SEE_INVISIBLE_OBSERVER + usr.seer = 0 else + usr.say("Rash'tla sektath mal[pick("'","`")]zua. Zasan therium vivira. Itonis al'ra matum!") usr << "\red The world beyond opens to your eyes." - usr.see_invisible = SEE_INVISIBLE_OBSERVER - usr.seer = 1 + usr.see_invisible = SEE_INVISIBLE_OBSERVER + usr.seer = 1 return return fizzle() @@ -310,7 +317,7 @@ var/list/sacrificed = list() var/S=0 for(var/obj/effect/rune/R in orange(rad,src)) if(R!=src) - R:visibility=0 + R.invisibility=INVISIBILITY_OBSERVER S=1 if(S) if(istype(src,/obj/effect/rune)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 36b039dc89b..f38066d49a6 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1121,7 +1121,7 @@ see_in_dark = 8 if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO - if(seer) + if(seer==1) var/obj/effect/rune/R = locate() in loc if(R && R.word1 == cultwords["see"] && R.word2 == cultwords["hell"] && R.word3 == cultwords["join"]) see_invisible = SEE_INVISIBLE_OBSERVER @@ -1185,7 +1185,7 @@ see_invisible = SEE_INVISIBLE_LIVING else see_invisible = SEE_INVISIBLE_LIVING - else + else if(!seer) see_invisible = SEE_INVISIBLE_LIVING if(healths) From 24098c6529fa3b0bea0df41fcdf4fcaede2333dc Mon Sep 17 00:00:00 2001 From: Furlucis Date: Fri, 31 May 2013 22:32:39 -0400 Subject: [PATCH 4/4] UNadded robotic hands and feet because there was no point in doing this in the first place. Signed-off-by: Furlucis --- code/game/objects/items/robot/robot_parts.dm | 65 ------------------- .../objects/items/robot/robot_upgrades.dm | 2 +- .../objects/items/weapons/surgery_tools.dm | 6 +- 3 files changed, 4 insertions(+), 69 deletions(-) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index ba72255ebe3..b3911d7c9f5 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -17,14 +17,6 @@ construction_cost = list("metal"=18000) part = list("l_arm","l_hand") -/obj/item/robot_parts/l_hand - name = "robot left hand" - desc = "A skeletal hand wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "l_arm" - construction_time = 150 - construction_cost = list("metal"=9000) - part = list("l_hand") - /obj/item/robot_parts/r_arm name = "robot right arm" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." @@ -33,14 +25,6 @@ construction_cost = list("metal"=18000) part = list("r_arm","r_hand") -/obj/item/robot_parts/r_hand - name = "robot right hand" - desc = "A skeletal hand wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "r_arm" - construction_time = 150 - construction_cost = list("metal"=9000) - part = list("r_hand") - /obj/item/robot_parts/l_leg name = "robot left leg" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." @@ -49,14 +33,6 @@ construction_cost = list("metal"=15000) part = list("l_leg","l_foot") -/obj/item/robot_parts/l_foot - name = "robot left foot" - desc = "A skeletal foot wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "l_leg" - construction_time = 150 - construction_cost = list("metal"=9000) - part = list("l_foot") - /obj/item/robot_parts/r_leg name = "robot right leg" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." @@ -65,14 +41,6 @@ construction_cost = list("metal"=15000) part = list("r_leg","r_foot") -/obj/item/robot_parts/r_foot - name = "robot right foot" - desc = "A skeletal foot wrapped in pseudomuscles, with a low-conductivity case." - icon_state = "r_leg" - construction_time = 150 - construction_cost = list("metal"=9000) - part = list("r_foot") - /obj/item/robot_parts/chest name = "robot torso" desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell." @@ -264,38 +232,6 @@ return -/obj/item/robot_parts/r_arm/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/weapon/screwdriver)) - user << "\blue You screw the wrist join apart and discard the arm." - new /obj/item/robot_parts/r_hand(src.loc) - del(src) - return - -/obj/item/robot_parts/l_arm/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/weapon/screwdriver)) - user << "\blue You screw the wrist join apart and discard the arm." - new /obj/item/robot_parts/l_hand(src.loc) - del(src) - return - -/obj/item/robot_parts/l_leg/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/weapon/screwdriver)) - user << "\blue You screw the ankle join apart and discard the leg." - new /obj/item/robot_parts/l_foot(src.loc) - del(src) - return - -/obj/item/robot_parts/r_leg/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(istype(W, /obj/item/weapon/screwdriver)) - user << "\blue You screw the ankle join apart and discard the leg." - new /obj/item/robot_parts/r_foot(src.loc) - del(src) - return - /obj/item/robot_parts/chest/attackby(obj/item/W as obj, mob/user as mob) ..() if(istype(W, /obj/item/weapon/cell)) @@ -342,4 +278,3 @@ del(src) return return - diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 0de996ceaf3..4d8ef18f03d 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -14,7 +14,7 @@ /obj/item/borg/upgrade/proc/action(var/mob/living/silicon/robot/R) if(R.stat == DEAD) - usr << "\red The [src] will not function on a deceased robot." + usr << "/red The [src] will not function on a deceased robot." return 1 return 0 diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index fd4357f8dbc..673bb96c9bb 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -365,8 +365,8 @@ LOOK FOR SURGERY.DM*/ attack_verb = list("drilled") suicide_act(mob/user) - viewers(user) << pick("\red [user] is pressing the [src.name] to \his temple and activating it! It looks like \he's trying to commit suicide.", \ - "\red [user] is pressing [src.name] to \his chest and activating it! It looks like \he's trying to commit suicide.") + viewers(user) << pick("/red [user] is pressing the [src.name] to \his temple and activating it! It looks like \he's trying to commit suicide.", \ + "/red [user] is pressing [src.name] to \his chest and activating it! It looks like \he's trying to commit suicide.") return (BRUTELOSS) /* @@ -816,4 +816,4 @@ LOOK FOR SURGERY.DM*/ throwforce = 9.0 throw_speed = 3 throw_range = 5 - attack_verb = list("attacked", "hit", "bludgeoned") + attack_verb = list("attacked", "hit", "bludgeoned") \ No newline at end of file