The bioprinter spits out a new organ.")
+
+ else
+ user << "There is not enough matter in the printer."
+
+/obj/machinery/bioprinter/attackby(obj/item/weapon/W, mob/user)
+
+ // DNA sample from syringe.
+ if(!prints_prosthetics && istype(W,/obj/item/weapon/reagent_containers/syringe))
+ var/obj/item/weapon/reagent_containers/syringe/S = W
+ var/datum/reagent/blood/injected = locate() in S.reagents.reagent_list //Grab some blood
+ if(injected && injected.data)
+ loaded_dna = injected.data
+ user << "You inject the blood sample into the bioprinter."
+ return
+ // Meat for biomass.
+ else if(!prints_prosthetics && istype(W, /obj/item/weapon/reagent_containers/food/snacks/meat))
+ stored_matter += 50
+ user.drop_item()
+ user << "\The [src] processes \the [W]. Levels of stored biomass now: [stored_matter]"
+ del(W)
+ return
+ // Steel for matter.
+ else if(prints_prosthetics && istype(W, /obj/item/stack/sheet/metal))
+ var/obj/item/stack/sheet/metal/M = W
+ stored_matter += M.amount * 10
+ user.drop_item()
+ user << "\The [src] processes \the [W]. Levels of stored matter now: [stored_matter]"
+ del(W)
+ return
+ else
+ return..()
+
+/obj/item/weapon/paper/bioprinter
+ name = "HP-4001 Prosthetics Fabricator Manual"
+ info = {"Overview
+ The HP 4000 series is a prosthetics fabricator capable of producing mechanical substitutions for organic limbs. It comes with the finest rapid-prototyping
+ technology.
+ Operation
+ The machine is relatively easy to operate.
+ 1st you need to ensure that the machine is in a powered area, and has enough matter stored in it to function.
+ As the 2nd step, you need to simply activate the machine, and pick which organ you wish to create.
+ The final step is simply waiting: the HP 4000 series model prosthetics fabricator will produce a fully functioning, mechanical substitution for the organ selected
+ within seconds of receiving input. The substitute organs are ready for transplantation right after the printing is completed!
+ Restocking
+ Each printjob requires a set of materials. Should you ever run out of materials, then the HP 4000 series model prosthetics fabricator can be easily restocked by simply
+ feeding metal sheets into its receptor port.
+ This technology produced under license from Thinktronic Systems, LTD.
+ Thinktronic Systems, LTD. cannot be held liable for the quality of the substitute organs created, or the inherint issues that come from using such mechanical devices."}
\ No newline at end of file
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 61762b55..d059e310 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -1,7 +1,8 @@
/obj/machinery/computer/HolodeckControl
name = "Holodeck Control Computer"
desc = "A computer used to control a nearby holodeck."
- icon_state = "holocontrol"
+ icon = 'icons/obj/terminals.dmi'
+ icon_state = "dorm_available"
var/area/linkedholodeck = null
var/area/target = null
var/active = 0
@@ -150,6 +151,7 @@
loadProgram(target)
else if(href_list["burntest"])
+ if(!emagged) return
target = locate(/area/holodeck/source_burntest)
if(target)
loadProgram(target)
@@ -337,6 +339,9 @@
last_change = world.time
active = 1
+ icon_state = "dorm_inside"
+ spawn(100)
+ icon_state = "dorm_available"
for(var/item in holographic_items)
derez(item)
@@ -382,11 +387,6 @@
active = 0
-
-
-
-
-
// Holographic Items!
/turf/simulated/floor/holofloor/
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 48c9a443..67372d02 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -26,7 +26,10 @@
var/timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing
var/picture_state // icon_state of alert picture, if not displaying text/numbers
var/list/obj/machinery/targets = list()
+ var/list/obj/item/clothing/under/color/orange/uniforms = list()
var/timetoset = 0 // Used to set releasetime upon starting the timer
+ var/spamcheck = 0
+ var/alerted = 0
maptext_height = 26
maptext_width = 32
@@ -47,6 +50,14 @@
if(C.id == src.id)
targets += C
+ for(var/obj/machinery/door/airlock/glass/E in world)
+ if(E.id_tag == id)
+ targets += E
+
+ for(var/obj/item/clothing/under/color/orange/D in world)
+ if(D.id == id)
+ uniforms += D
+
if(targets.len==0)
stat |= BROKEN
update_icon()
@@ -68,6 +79,8 @@
if(timeleft > 1e5)
src.releasetime = 0
+ if(timeleft < 30 && !alerted)
+ alertuniforms()
if(world.timeofday > src.releasetime)
src.timer_end() // open doors, reset timer, clear status screen
@@ -109,6 +122,9 @@
if(C.opened && !C.close()) continue
C.locked = 1
C.icon_state = C.icon_locked
+
+ alerted = 0
+
return 1
@@ -148,6 +164,49 @@
return
+// Alert the uniform wearers that their timer is about to end up
+/obj/machinery/door_timer/proc/alertuniforms()
+ if(stat & (NOPOWER|BROKEN)) return
+ if(!uniforms.len)
+ alerted = 1
+ return
+
+ for(var/obj/item/clothing/under/color/orange/D in uniforms)
+ if(!ishuman(D.loc)) continue
+ D.loc << "A speaker in the collar of your suit pings:\n\blue Your cell timer will expire in 30 seconds or less. Please go to your cell to speed up processing."
+
+ alerted = 1
+
+ return
+
+// Alert the uniform wearers that they are needed at their cell
+/obj/machinery/door_timer/proc/summonuniforms()
+ if(stat & (NOPOWER|BROKEN)) return
+ if(spamcheck) return
+ if(!uniforms.len) return
+ for(var/obj/item/clothing/under/color/orange/D in uniforms)
+ if(!ishuman(D.loc)) continue
+ D.loc << "A speaker in the collar of your suit pings:\n\red You have been summoned to your cell!"
+
+ spamcheck = 1
+ spawn(30)
+ spamcheck = 0
+
+ return
+
+// Toggle the bolts to the communal area doors
+/obj/machinery/door_timer/proc/togglebolts()
+ if(stat & (NOPOWER|BROKEN)) return
+ for(var/obj/machinery/door/airlock/glass/E in targets)
+ if(!E.density) continue
+ switch(E.locked)
+ if(1)
+ E.unlock()
+ if(0)
+ E.lock()
+
+ return
+
//Allows AIs to use door_timer, see human attack_hand function below
/obj/machinery/door_timer/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
@@ -203,6 +262,20 @@
else
dat += "
Activate Flash"
+ if(uniforms.len)
+ if(!spamcheck)
+ dat +="
Summon prisoner"
+ else
+ dat +="
Anti-spam measure activated. Please wait."
+ else
+ dat +="
No prisoner wear linked"
+
+ for(var/obj/machinery/door/airlock/glass/E in targets)
+ if(E.locked)
+ dat += "
Unlock door to Communal Area"
+ else
+ dat += "
Lock door to Communal Area"
+
dat += "
Close"
dat += "