diff --git a/baystation12.dme b/baystation12.dme
index 2566203ca0..a79cce1094 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -657,6 +657,7 @@
#include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\camera_monitor.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\computer.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\holodeckcontrol.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\research.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\supply.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm"
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index baa75fed05..1e9409437a 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -12,6 +12,11 @@
var/light_range_on = 3
var/light_power_on = 1
+/obj/machinery/computer/Destroy()
+ qdel(circuit)
+ circuit = null
+ return ..()
+
/obj/machinery/computer/initialize()
power_change()
@@ -70,7 +75,6 @@
for(var/x in verbs)
verbs -= x
set_broken()
- density = 0
/obj/machinery/computer/update_icon()
..()
@@ -124,22 +128,15 @@
for (var/obj/C in src)
C.loc = src.loc
if (src.stat & BROKEN)
- user << "\blue The broken glass falls out."
+ user << "The broken glass falls out."
new /obj/item/weapon/material/shard( src.loc )
A.state = 3
A.icon_state = "3"
else
- user << "\blue You disconnect the monitor."
+ user << "You disconnect the monitor."
A.state = 4
A.icon_state = "4"
M.deconstruct(src)
qdel(src)
else
- src.attack_hand(user)
- return
-
-
-
-
-
-
+ ..()
diff --git a/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm b/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm
new file mode 100644
index 0000000000..db11c4de50
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm
@@ -0,0 +1,31 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/holodeckcontrol
+ name = T_BOARD("holodeck control console")
+ build_path = /obj/machinery/computer/HolodeckControl
+ origin_tech = "programming=2;bluespace=2"
+ var/last_to_emag
+ var/linkedholodeck_area
+ var/list/supported_programs
+ var/list/restricted_programs
+
+/obj/item/weapon/circuitboard/holodeckcontrol/construct(var/obj/machinery/computer/HolodeckControl/HC)
+ if (..(HC))
+ HC.supported_programs = supported_programs.Copy()
+ HC.restricted_programs = restricted_programs.Copy()
+ if(linkedholodeck_area)
+ HC.linkedholodeck = locate(linkedholodeck_area)
+ if(last_to_emag)
+ HC.last_to_emag = last_to_emag
+ HC.emagged = 1
+ HC.safety_disabled = 1
+
+/obj/item/weapon/circuitboard/holodeckcontrol/deconstruct(var/obj/machinery/computer/HolodeckControl/HC)
+ if (..(HC))
+ linkedholodeck_area = HC.linkedholodeck_area
+ supported_programs = HC.supported_programs.Copy()
+ restricted_programs = HC.restricted_programs.Copy()
+ last_to_emag = HC.last_to_emag
+ HC.emergencyShutdown()
diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm
index 0509bf3d86..87c0b7e445 100644
--- a/code/modules/holodeck/HolodeckControl.dm
+++ b/code/modules/holodeck/HolodeckControl.dm
@@ -5,10 +5,13 @@
use_power = 1
active_power_usage = 8000 //8kW for the scenery + 500W per holoitem
+
+ circuit = /obj/item/weapon/circuitboard/holodeckcontrol
+
var/item_power_usage = 500
var/area/linkedholodeck = null
- var/area/target = null
+ var/linkedholodeck_area
var/active = 0
var/list/holographic_objs = list()
var/list/holographic_mobs = list()
@@ -17,34 +20,39 @@
var/mob/last_to_emag = null
var/last_change = 0
var/last_gravity_change = 0
- var/list/supported_programs = list( \
- "Empty Court" = "emptycourt", \
- "Basketball Court" = "basketball", \
- "Thunderdome Court" = "thunderdomecourt", \
- "Boxing Ring"="boxingcourt", \
- "Beach" = "beach", \
- "Desert" = "desert", \
- "Space" = "space", \
- "Picnic Area" = "picnicarea", \
- "Snow Field" = "snowfield", \
- "Theatre" = "theatre", \
- "Meeting Hall" = "meetinghall", \
- "Courtroom" = "courtroom" \
- )
- var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "Wildlife Simulation" = "wildlifecarp")
+ var/list/supported_programs
+ var/list/restricted_programs
+
+/obj/machinery/computer/HolodeckControl/New()
+ ..()
+ linkedholodeck = locate(linkedholodeck_area)
+ supported_programs = list()
+ restricted_programs = list()
/obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
/obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob)
-
if(..())
- return
+ return 1
user.set_machine(src)
var/dat
dat += "Holodeck Control System
"
dat += "