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/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index b4107855639..b3911d7c9f5 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -1,281 +1,280 @@
-/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/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
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 07a7a6308b5..4d8ef18f03d 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..673bb96c9bb 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")
\ 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 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)
diff --git a/icons/obj/eyes.dmi b/icons/obj/eyes.dmi
new file mode 100644
index 00000000000..5cc157ab1d4
Binary files /dev/null and b/icons/obj/eyes.dmi differ