diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index 1499eb08075..e5d68af8258 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -8,87 +8,67 @@
icon_state = "robot"
req_access = list(access_robotics)
circuit = /obj/item/weapon/circuitboard/robotics
-
- var/id = 0.0
var/temp = null
- var/status = 0
- var/timeleft = 60
- var/stop = 0.0
- var/screen = 0 // 0 - Main Menu, 1 - Cyborg Status, 2 - Kill 'em All! -- In text
+
+/obj/machinery/computer/robotics/proc/can_control(var/mob/user, var/mob/living/silicon/robot/R)
+ if(!istype(R))
+ return 0
+ if(istype(user, /mob/living/silicon/ai))
+ if (R.connected_ai != user)
+ return 0
+ if(istype(user, /mob/living/silicon/robot))
+ if (R != user)
+ return 0
+ if(R.scrambledcodes)
+ return 0
+ return 1
/obj/machinery/computer/robotics/attack_hand(var/mob/user as mob)
if(..())
return
+ interact(user)
+
+/obj/machinery/computer/robotics/interact(var/mob/user as mob)
if (src.z > 6)
user << "\red Unable to establish a connection: \black You're too far away from the station!"
return
user.set_machine(src)
var/dat
- if (src.temp)
- dat = "[src.temp]
Clear Screen"
- else
- if(screen == 0)
- //dat += "
Cyborg Control Console
"
- dat += "1. Cyborg Status
"
- dat += "2. Emergency Full Destruct
"
- if(screen == 1)
- for(var/mob/living/silicon/robot/R in mob_list)
- if(istype(user, /mob/living/silicon/ai))
- if (R.connected_ai != user)
- continue
- if(istype(user, /mob/living/silicon/robot))
- if (R != user)
- continue
- if(R.scrambledcodes)
- continue
+ var/robots = 0
+ for(var/mob/living/silicon/robot/R in mob_list)
+ if(!can_control(user, R))
+ continue
+ robots++
+ dat += "[R.name] |"
+ if(R.stat)
+ dat += " Not Responding |"
+ else if (!R.canmove)
+ dat += " Locked Down |"
+ else
+ dat += " Operating Normally |"
+ if (!R.canmove)
+ else if(R.cell)
+ dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |"
+ else
+ dat += " No Cell Installed |"
+ if(R.module)
+ dat += " Module Installed ([R.module.name]) |"
+ else
+ dat += " No Module Installed |"
+ if(R.connected_ai)
+ dat += " Slaved to [R.connected_ai.name] |"
+ else
+ dat += " Independent from AI |"
+ if (istype(user, /mob/living/silicon))
+ if(issilicon(user) && is_special_character(user) && !R.emagged)
+ dat += "(Hack) "
+ dat += "([R.canmove ? "Lockdown" : "Release"]) "
+ dat += "(Destroy)"
+ dat += "
"
- dat += "[R.name] |"
- if(R.stat)
- dat += " Not Responding |"
- else if (!R.canmove)
- dat += " Locked Down |"
- else
- dat += " Operating Normally |"
- if (!R.canmove)
- else if(R.cell)
- dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |"
- else
- dat += " No Cell Installed |"
- if(R.module)
- dat += " Module Installed ([R.module.name]) |"
- else
- dat += " No Module Installed |"
- if(R.connected_ai)
- dat += " Slaved to [R.connected_ai.name] |"
- else
- dat += " Independent from AI |"
- if (istype(user, /mob/living/silicon))
- if(issilicon(user) && is_special_character(user) && !R.emagged)
- dat += "(Hack) "
- dat += "([R.canmove ? "Lockdown" : "Release"]) "
- dat += "(Destroy)"
- dat += "
"
- dat += "(Return to Main Menu)
"
- if(screen == 2)
- if(!src.status)
- dat += {"
Emergency Robot Self-Destruct
\nStatus: Off
- \n
- \nCountdown: [src.timeleft]/60 \[Reset\]
- \n
- \nStart Sequence
- \n
- \nClose"}
- else
- dat = {"Emergency Robot Self-Destruct
\nStatus: Activated
- \n
- \nCountdown: [src.timeleft]/60 \[Reset\]
- \n
\nStop Sequence
- \n
- \nClose"}
- dat += "(Return to Main Menu)
"
+ if(!robots)
+ dat += "No Cyborg Units detected within access parameters."
- //user << browse(dat, "window=computer;size=400x500")
- //onclose(user, "computer")
var/datum/browser/popup = new(user, "computer", "Cyborg Control Console", 400, 500)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
@@ -98,123 +78,48 @@
/obj/machinery/computer/robotics/Topic(href, href_list)
if(..())
return
- if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
- usr.set_machine(src)
- if (href_list["eject"])
- src.temp = {"Destroy Robots?
-
\[Swipe ID to initiate destruction sequence\]
- Cancel"}
+ if (href_list["temp"])
+ src.temp = null
- else if (href_list["eject2"])
- var/obj/item/weapon/card/id/I = usr.get_active_hand()
- if (istype(I, /obj/item/device/pda))
- var/obj/item/device/pda/pda = I
- I = pda.id
- if (istype(I))
- if(src.check_access(I))
- if (!status)
- message_admins("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!")
- log_game("\blue [key_name(usr)] has initiated the global cyborg killswitch!")
- src.status = 1
- src.start_sequence()
- src.temp = null
+ else if (href_list["killbot"])
+ if(src.allowed(usr))
+ var/mob/living/silicon/robot/R = locate(href_list["killbot"])
+ if(can_control(usr, R))
+ var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
+ if(choice == "Confirm" && can_control(usr, R) && !..())
+ if(R.mind && R.mind.special_role && R.emagged)
+ R << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered."
+ R.ResetSecurityCodes()
+ else
+ message_admins("\blue [key_name_admin(usr)] detonated [R.name]!")
+ log_game("\blue [key_name(usr)] detonated [R.name]!")
+ R.self_destruct()
+ else
+ usr << "\red Access Denied."
- else
- usr << "\red Access Denied."
+ else if (href_list["stopbot"])
+ if(src.allowed(usr))
+ var/mob/living/silicon/robot/R = locate(href_list["stopbot"])
+ if(can_control(usr, R))
+ var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
+ if(choice == "Confirm" && can_control(usr, R) && !..())
+ message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
+ log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
+ R.SetLockdown(!R.lockcharge)
+ R << "[!R.lockcharge ? "Your lockdown has been lifted!" : "You have been locked down!"]"
- else if (href_list["stop"])
- src.temp = {"
- Stop Robot Destruction Sequence?
-
Yes
- No"}
+ else
+ usr << "\red Access Denied."
- else if (href_list["stop2"])
- src.stop = 1
- src.temp = null
- src.status = 0
+ else if (href_list["magbot"])
+ if(issilicon(usr) && is_special_character(usr))
+ var/mob/living/silicon/robot/R = locate(href_list["magbot"])
+ if(istype(R) && !R.emagged && R.connected_ai == usr && !R.scrambledcodes && can_control(usr, R))
+ log_game("[key_name(usr)] emagged [R.name] using robotic console!")
+ R.emagged = 1
+ if(R.mind.special_role)
+ R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes
- else if (href_list["reset"])
- src.timeleft = 60
-
- else if (href_list["temp"])
- src.temp = null
- else if (href_list["screen"])
- switch(href_list["screen"])
- if("0")
- screen = 0
- if("1")
- screen = 1
- if("2")
- screen = 2
- else if (href_list["killbot"])
- if(src.allowed(usr))
- var/mob/living/silicon/robot/R = locate(href_list["killbot"])
- if(R)
- var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
- if(choice == "Confirm")
- if(R && istype(R))
- if(R.mind && R.mind.special_role && R.emagged)
- R << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered."
- R.ResetSecurityCodes()
-
- else
- message_admins("\blue [key_name_admin(usr)] detonated [R.name]!")
- log_game("\blue [key_name(usr)] detonated [R.name]!")
- R.self_destruct()
- else
- usr << "\red Access Denied."
-
- else if (href_list["stopbot"])
- if(src.allowed(usr))
- var/mob/living/silicon/robot/R = locate(href_list["stopbot"])
- if(R && istype(R)) // Extra sancheck because of input var references
- var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
- if(choice == "Confirm")
- if(R && istype(R))
- message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
- log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
- R.canmove = !R.canmove
- if (R.lockcharge)
- R.SetLockdown(0)
- R << "Your lockdown has been lifted!"
- else
- R.SetLockdown(1)
- R << "You have been locked down!"
-
- else
- usr << "\red Access Denied."
-
- else if (href_list["magbot"])
- if(issilicon(usr) && is_special_character(usr))
- var/mob/living/silicon/robot/R = locate(href_list["magbot"])
- if(R && !R.emagged && R.connected_ai == usr && !R.scrambledcodes)
- var/choice = input("Are you certain you wish to hack [R.name]?") in list("Confirm", "Abort")
- if(choice == "Confirm")
- if(R && istype(R))
-// message_admins("\blue [key_name_admin(usr)] emagged [R.name] using robotic console!")
- log_game("[key_name(usr)] emagged [R.name] using robotic console!")
- R.emagged = 1
- if(R.mind.special_role)
- R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes
-
- src.add_fingerprint(usr)
src.updateUsrDialog()
return
-
-/obj/machinery/computer/robotics/proc/start_sequence()
-
- do
- if(src.stop)
- src.stop = 0
- return
- src.timeleft--
- sleep(10)
- while(src.timeleft)
-
- for(var/mob/living/silicon/robot/R in mob_list)
- if(!R.scrambledcodes)
- R.self_destruct()
-
- return
-
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index a56ee023086..a27b540b3d5 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -17,8 +17,6 @@
update_items()
if (src.stat != DEAD) //still using power
use_power()
- process_killswitch()
- process_locks()
update_canmove()
handle_fire()
@@ -286,26 +284,6 @@
src.module_state_3:screen_loc = ui_inv3
-/mob/living/silicon/robot/proc/process_killswitch()
- if(killswitch)
- killswitch_time --
- if(killswitch_time <= 0)
- if(src.client)
- src << "\red Killswitch Activated"
- killswitch = 0
- spawn(5)
- gib()
-
-/mob/living/silicon/robot/proc/process_locks()
- if(weapon_lock)
- uneq_all()
- weaponlock_time --
- if(weaponlock_time <= 0)
- if(src.client)
- src << "\red Weapon Lock Timed Out!"
- weapon_lock = 0
- weaponlock_time = 120
-
//Robots on fire
/mob/living/silicon/robot/handle_fire()
if(..())
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 65a42f47073..c68c8dfb4c5 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -49,10 +49,6 @@
var/datum/effect/effect/system/spark_spread/spark_system//So they can initialize sparks whenever/N
var/jeton = 0
- var/killswitch = 0
- var/killswitch_time = 60
- var/weapon_lock = 0
- var/weaponlock_time = 120
var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default
var/lockcharge //Boolean of whether the borg is locked down or not
var/speed = 0 //Cause sec borgs gotta go fast //No they dont!
@@ -805,10 +801,6 @@
/mob/living/silicon/robot/proc/installed_modules()
- if(weapon_lock)
- src << "\red Weapon lock active, unable to use modules! Count:[weaponlock_time]"
- return
-
if(!module)
pick_module()
return