diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index 09a0c72ed56..04de559235d 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -144,9 +144,29 @@
/obj/item/weapon/circuitboard/prisoner
name = "Circuit board (Prisoner Management)"
build_path = /obj/machinery/computer/prisoner
+
+
+// RD console circuits, so that {de,re}constructing one of the special consoles doesn't ruin everything forever
/obj/item/weapon/circuitboard/rdconsole
name = "Circuit Board (RD Console)"
build_path = /obj/machinery/computer/rdconsole/core
+ req_access = list(access_rd) // This is for adjusting the type of computer we're building - in case something messes up the pre-existing robotics or mechanics consoles
+ var/access_types = list("R&D Core", "Robotics", "E.X.P.E.R.I-MENTOR", "Mechanics")
+ id = 1
+/obj/item/weapon/circuitboard/rdconsole/robotics
+ name = "Circuit Board (RD Console - Robotics)"
+ build_path = /obj/machinery/computer/rdconsole/robotics
+ id = 2
+/obj/item/weapon/circuitboard/rdconsole/experiment
+ name = "Circuit Board (RD Console - E.X.P.E.R.I-MENTOR)"
+ build_path = /obj/machinery/computer/rdconsole/experiment
+ id = 3
+/obj/item/weapon/circuitboard/rdconsole/mechanics
+ name = "Circuit Board (RD Console - Mechanics)"
+ build_path = /obj/machinery/computer/rdconsole/mechanics
+ id = 4
+
+
/obj/item/weapon/circuitboard/mecha_control
name = "Circuit Board (Exosuit Control Console)"
build_path = /obj/machinery/computer/mecha
@@ -285,16 +305,33 @@
return
/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob, params)
- if(istype(I,/obj/item/weapon/screwdriver))
- user.visible_message("\blue \the [user] adjusts the jumper on the [src]'s access protocol pins.", "\blue You adjust the jumper on the access protocol pins.")
- if(src.build_path == "/obj/machinery/computer/rdconsole/core")
- src.name = "Circuit Board (RD Console - Robotics)"
- src.build_path = /obj/machinery/computer/rdconsole/robotics
- user << "\blue Access protocols set to robotics."
+ if(istype(I,/obj/item/weapon/card/id)||istype(I, /obj/item/device/pda))
+ if(allowed(user))
+ user.visible_message("\the [user] waves their ID past the [src]'s access protocol scanner.", "You swipe your ID past the [src]'s access protocol scanner.")
+ var/console_choice = input(user, "What do you want to configure the access to?", "Configuration Modification", "R&D Core") as null|anything in access_types
+ if(console_choice == null)
+ return
+ switch(console_choice)
+ if("R&D Core")
+ name = "Circuit Board (RD Console)"
+ build_path = /obj/machinery/computer/rdconsole/core
+ id = 1
+ if("Robotics")
+ name = "Circuit Board (RD Console - Robotics)"
+ build_path = /obj/machinery/computer/rdconsole/robotics
+ id = 2
+ if("E.X.P.E.R.I-MENTOR")
+ name = "Circuit Board (RD Console - E.X.P.E.R.I-MENTOR)"
+ build_path = /obj/machinery/computer/rdconsole/experiment
+ id = 3
+ if("Mechanics")
+ name = "Circuit Board (RD Console - Mechanics)"
+ build_path = /obj/machinery/computer/rdconsole/mechanics
+ id = 4
+
+ user << "Access protocols set to [console_choice]."
else
- src.name = "Circuit Board (RD Console)"
- src.build_path = /obj/machinery/computer/rdconsole/core
- user << "\blue Access protocols set to default."
+ user << "Access Denied"
return
/obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob, params)
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 0212dcf4834..e376b20808b 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -1164,14 +1164,17 @@ proc/CallMaterialName(ID)
desc = "A console used to interface with R&D tools."
id = 2
req_access = list(access_robotics)
+ circuit = /obj/item/weapon/circuitboard/rdconsole/robotics
/obj/machinery/computer/rdconsole/experiment
name = "\improper E.X.P.E.R.I-MENTOR R&D console"
desc = "A console used to interface with R&D tools."
id = 3
+ circuit = /obj/item/weapon/circuitboard/rdconsole/experiment
/obj/machinery/computer/rdconsole/mechanics
name = "mechanics R&D console"
desc = "A console used to interface with R&D tools."
id = 4
req_access = list(access_mechanic)
+ circuit = /obj/item/weapon/circuitboard/rdconsole/mechanics