"
- for(var/n in occupant.internal_organs_by_name)
- var/datum/organ/internal/i = occupant.internal_organs_by_name[n]
- var/mech = i.desc
- var/infection = "None"
- switch (i.germ_level)
- if (1 to INFECTION_LEVEL_ONE + 200)
- infection = "Mild Infection:"
- if (INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300)
- infection = "Mild Infection+:"
- if (INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400)
- infection = "Mild Infection++:"
- if (INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200)
- infection = "Acute Infection:"
- if (INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300)
- infection = "Acute Infection+:"
- if (INFECTION_LEVEL_TWO + 300 to INFINITY)
- infection = "Acute Infection++:"
-
- dat += "
"
- dat += "
[i.name]
N/A
[i.damage]
[infection]:[mech]
"
- dat += "
"
- dat += "
"
- if(occupant.sdisabilities & BLIND)
- dat += text("Cataracts detected. ")
- if(occupant.sdisabilities & NEARSIGHTED)
- dat += text("Retinal misalignment detected. ")
- else
- dat += "\The [src] is empty."
+ if (panel_open)
+ user << "Close the maintenance panel first."
+ return
+ if(!src.connected)
+ findscanner()
+ if (src.connected)
+ if(!connected.occupant)
+ user << "The scanner is empty."
+ return
+ if(!ishuman(connected.occupant))
+ user << "\red This device can only scan compatible lifeforms."
+ return
+ var/dat
+ if (src.delete && src.temphtml) //Window in buffer but its just simple message, so nothing
+ src.delete = src.delete
+ else if (!src.delete && src.temphtml) //Window in buffer - its a menu, dont add clear message
+ dat = text("[]
Main Menu", src.temphtml, src)
else
- dat = " Error: No Body Scanner connected."
- dat += text("
Close", user)
- user << browse(dat, "window=scanconsole;size=430x600")
+ if (src.connected) //Is something connected?
+ var/mob/living/carbon/human/occupant = src.connected.occupant
+ dat = "Occupant Statistics: " //Blah obvious
+ if (istype(occupant)) //is there REALLY someone in there?
+ var/t1
+ switch(occupant.stat) // obvious, see what their status is
+ if(0)
+ t1 = "Conscious"
+ if(1)
+ t1 = "Unconscious"
+ else
+ t1 = "*dead*"
+ if (!istype(occupant,/mob/living/carbon/human))
+ dat += "This device can only scan human occupants."
+ else
+ dat += text("[]\tHealth %: [] ([]) ", (occupant.health > 50 ? "" : ""), occupant.health, t1)
+
+ if(occupant.virus2.len)
+ dat += text("Viral pathogen detected in blood stream. ")
+
+ dat += text("[]\t-Brute Damage %: [] ", (occupant.getBruteLoss() < 60 ? "" : ""), occupant.getBruteLoss())
+ dat += text("[]\t-Respiratory Damage %: [] ", (occupant.getOxyLoss() < 60 ? "" : ""), occupant.getOxyLoss())
+ dat += text("[]\t-Toxin Content %: [] ", (occupant.getToxLoss() < 60 ? "" : ""), occupant.getToxLoss())
+ dat += text("[]\t-Burn Severity %: []
"
- dat += "Food "
- dat += "10 milk (20) "
- dat += "Slab of meat (50) "
- dat += "Nutrient "
- dat += "E-Z-Nutrient (10) | x5 "
- dat += "Left 4 Zed (20) | x5 "
- dat += "Robust Harvest (25) | x5 "
- dat += "Leather "
- dat += "Wallet (100) "
- dat += "Botanical gloves (250) "
- dat += "Utility belt (300) "
- dat += "Leather Satchel (400) "
- dat += "Cash Bag (400) "
- //dat += "Other "
- //dat += "Monkey (500) "
- else
- dat += " No beaker inside. Please insert a beaker. "
if("nopoints")
- dat += "You do not have biomass to create products. Please, put growns into reactor and activate it. "
- dat += "Return to menu"
+ dat += "
You do not have sufficient biomass to create products. Please put growns into the reactor and activate it.
"
+ menustat = "menu"
if("complete")
- dat += "Operation complete. "
- dat += "Return to menu"
+ dat += "
Operation complete.
"
+ menustat = "menu"
if("void")
- dat += "Error: No growns inside. Please, put growns into reactor. "
- dat += "Return to menu"
- user << browse(dat, "window=biogenerator")
- onclose(user, "biogenerator")
+ dat += "
Error: No growns inside. Please put growns into reactor.
"
+ dat += "10 milk: Make ([20/efficiency]) "
+ /*dat += "10 cream: Make ([30/efficiency]) "*/
+ dat += "Monkey cube: Make ([250/efficiency])"
+ dat += "
"
+ dat += "
Nutrients:
"
+ dat += "
"
+ dat += "E-Z-Nutrient: Makex5 ([10/efficiency]) "
+ dat += "Left 4 Zed: Makex5 ([20/efficiency]) "
+ dat += "Robust Harvest: Makex5 ([25/efficiency]) "
+ dat += "
"
+ dat += "
Leather:
"
+ dat += "
"
+ dat += "Wallet: Make ([100/efficiency]) "
+ /*dat += "Book bag: Make ([200/efficiency]) "
+ dat += "Plant bag: Make ([200/efficiency]) "
+ dat += "Mining satchel: Make ([200/efficiency]) "*/
+ dat += "Botanical gloves: Make ([250/efficiency]) "
+ dat += "Utility belt: Make ([300/efficiency]) "
+ dat += "Leather Satchel: Make ([400/efficiency]) "
+ dat += "Cash Bag: Make ([400/efficiency]) "
+ /*dat += "Leather Jacket: Make ([500/efficiency]) "*/
+ //dat += "
Other:
"
+ //dat += "Monkey: Make ([400/efficiency]) "
+ dat += "
"
+ else
+ dat += "
No container inside. Please insert a container.
"
+
+ var/datum/browser/popup = new(user, "biogen", name, 350, 520)
+ popup.set_content(dat)
+ popup.open()
return
/obj/machinery/biogenerator/attack_hand(mob/user as mob)
@@ -127,100 +181,132 @@
if (src.stat != 0) //NOPOWER etc
return
if(src.processing)
- usr << "\red The biogenerator is in the process of working."
+ usr << "The biogenerator is in the process of working."
return
var/S = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/I in contents)
S += 5
if(I.reagents.get_reagent_amount("nutriment") < 0.1)
- points += 1
- else points += I.reagents.get_reagent_amount("nutriment")*10
- del(I)
+ points += 1*productivity
+ else points += I.reagents.get_reagent_amount("nutriment")*10*productivity
+ qdel(I)
if(S)
processing = 1
update_icon()
updateUsrDialog()
playsound(src.loc, 'sound/machines/blender.ogg', 50, 1)
use_power(S*30)
- sleep(S+15)
+ sleep(S+15/productivity)
processing = 0
update_icon()
else
menustat = "void"
return
-/obj/machinery/biogenerator/proc/create_product(var/item,var/cost)
- if(cost > points)
+/obj/machinery/biogenerator/proc/check_cost(var/cost)
+ if (cost > points)
menustat = "nopoints"
+ return 1
+ else
+ points -= cost
+ processing = 1
+ update_icon()
+ updateUsrDialog()
return 0
- processing = 1
- update_icon()
- updateUsrDialog()
- points -= cost
- sleep(30)
- switch(item)
+
+/obj/machinery/biogenerator/proc/check_container_volume(var/reagent_amount)
+ if(beaker.reagents.total_volume + reagent_amount > beaker.reagents.maximum_volume)
+ menustat = "nobeakerspace"
+ return 1
+
+/obj/machinery/biogenerator/proc/create_product(var/create)
+ switch(create)
if("milk")
- beaker.reagents.add_reagent("milk",10)
+ if(check_container_volume(10)) return 0
+ else if (check_cost(20/efficiency)) return 0
+ else beaker.reagents.add_reagent("milk",10)
+ /*if("cream")
+ if(check_container_volume(10)) return 0
+ else if (check_cost(30/efficiency)) return 0
+ else beaker.reagents.add_reagent("cream",10)*/
if("meat")
- new/obj/item/weapon/reagent_containers/food/snacks/meat(src.loc)
+ if (check_cost(250/efficiency)) return 0
+ else new/obj/item/weapon/reagent_containers/food/snacks/monkeycube(src.loc)
if("ez")
- new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc)
+ if (check_cost(10/efficiency)) return 0
+ else new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc)
if("l4z")
- new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc)
+ if (check_cost(20/efficiency)) return 0
+ else new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc)
if("rh")
- new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc)
- if("ez5") //It's not an elegant method, but it's safe and easy. -Cheridan
- new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc)
- if("l4z5")
- new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc)
- if("rh5")
- new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc)
- new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc)
+ if (check_cost(25/efficiency)) return 0
+ else new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc)
if("wallet")
- new/obj/item/weapon/storage/wallet(src.loc)
+ if (check_cost(100/efficiency)) return 0
+ else new/obj/item/weapon/storage/wallet(src.loc)
+ /*if("bkbag")
+ if (check_cost(200/efficiency)) return 0
+ else new/obj/item/weapon/storage/bag/books(src.loc)
+ if("ptbag")
+ if (check_cost(200/efficiency)) return 0
+ else new/obj/item/weapon/storage/bag/plants(src.loc)
+ if("mnbag")
+ if (check_cost(200/efficiency)) return 0
+ else new/obj/item/weapon/storage/bag/ore(src.loc)*/
if("gloves")
- new/obj/item/clothing/gloves/botanic_leather(src.loc)
+ if (check_cost(250/efficiency)) return 0
+ else new/obj/item/clothing/gloves/botanic_leather(src.loc)
if("tbelt")
- new/obj/item/weapon/storage/belt/utility(src.loc)
+ if (check_cost(300/efficiency)) return 0
+ else new/obj/item/weapon/storage/belt/utility(src.loc)
if("satchel")
- new/obj/item/weapon/storage/backpack/satchel(src.loc)
+ if (check_cost(400/efficiency)) return 0
+ else new/obj/item/weapon/storage/backpack/satchel(src.loc)
if("cashbag")
- new/obj/item/weapon/storage/bag/cash(src.loc)
- if("monkey")
- new/mob/living/carbon/monkey(src.loc)
+ if (check_cost(400/efficiency)) return 0
+ else new/obj/item/weapon/storage/bag/cash(src.loc)
+ /*if("jacket")
+ if (check_cost(500/efficiency)) return 0
+ else new/obj/item/clothing/suit/jacket/leather(src.loc)*/
+ //if("monkey")
+ // if (check_cost(500)) return 0
+ // else new/mob/living/carbon/monkey(src.loc)
processing = 0
menustat = "complete"
update_icon()
return 1
+/obj/machinery/biogenerator/proc/detach()
+ if(beaker)
+ beaker.loc = src.loc
+ beaker = null
+ update_icon()
+
/obj/machinery/biogenerator/Topic(href, href_list)
- if(stat & BROKEN) return
- if(usr.stat || usr.restrained()) return
- if(!in_range(src, usr)) return
+ if(..() || panel_open)
+ return
usr.set_machine(src)
- switch(href_list["action"])
- if("activate")
- activate()
- if("detach")
- if(beaker)
- beaker.loc = src.loc
- beaker = null
- update_icon()
- if("create")
- create_product(href_list["item"],text2num(href_list["cost"]))
- if("menu")
- menustat = "menu"
- updateUsrDialog()
+ if(href_list["activate"])
+ activate()
+ updateUsrDialog()
+
+ else if(href_list["detach"])
+ detach()
+ updateUsrDialog()
+
+ else if(href_list["create"])
+ var/amount = (text2num(href_list["amount"]))
+ var/i = amount
+ var/C = href_list["create"]
+ if(i <= 0)
+ return
+ while(i >= 1)
+ create_product(C)
+ i--
+ updateUsrDialog()
+
+ else if(href_list["menu"])
+ menustat = "menu"
+ updateUsrDialog()
\ No newline at end of file
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index bf2e96c0f70..2ffffad0879 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -21,6 +21,8 @@
var/attempting = 0 //One clone attempt at a time thanks
var/eject_wait = 0 //Don't eject them as soon as they are created fuckkk
var/biomass = CLONE_BIOMASS // * 3 - N3X
+ var/speed_coeff
+ var/efficiency
l_color = "#00FF00"
power_change()
@@ -30,7 +32,28 @@
else
SetLuminosity(0)
+/obj/machinery/clonepod/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/clonepod(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/stack/cable_coil(src, 1)
+ RefreshParts()
+/obj/machinery/clonepod/RefreshParts()
+ speed_coeff = 0
+ efficiency = 0
+ for(var/obj/item/weapon/stock_parts/scanning_module/S in component_parts)
+ efficiency += S.rating
+ for(var/obj/item/weapon/stock_parts/manipulator/P in component_parts)
+ speed_coeff += P.rating
+ heal_level = (efficiency * 15) + 10
+
//The return of data disks?? Just for transferring between genetics machine/cloning machine.
//TO-DO: Make the genetics machine accept them.
/obj/item/weapon/disk/data
@@ -143,7 +166,7 @@
//Start growing a human clone in the pod!
/obj/machinery/clonepod/proc/growclone(var/datum/dna2/record/R)
- if(mess || attempting)
+ if(mess || attempting || panel_open)
return 0
var/datum/mind/clonemind = locate(R.mind)
if(!istype(clonemind)) //not a mind
@@ -165,7 +188,6 @@
break
return 0
- src.heal_level = rand(10,40) //Randomizes what health the clone is when ejected
src.attempting = 1 //One at a time!!
src.locked = 1
@@ -182,8 +204,8 @@
src.icon_state = "pod_1"
//Get the clone body ready
- H.adjustCloneLoss(150) //new damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite
- H.adjustBrainLoss(src.heal_level + 50 + rand(10, 30)) // The rand(10, 30) will come out as extra brain damage
+ H.adjustCloneLoss(190) //new damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite
+ H.adjustBrainLoss(190) // The rand(10, 30) will come out as extra brain damage
H.Paralyse(4)
//Here let's calculate their health so the pod doesn't immediately eject them!!!
@@ -217,7 +239,12 @@
else
H.dna=R.dna
H.UpdateAppearance()
- randmutb(H) //Sometimes the clones come out wrong.
+ if(efficiency > 2 && efficiency < 5 && prob(25))
+ randmutb(H)
+ if(efficiency > 5 && prob(20))
+ randmutg(H)
+ if(efficiency < 3 && prob(50))
+ randmutb(H)
H.dna.UpdateSE()
H.dna.UpdateUI()
@@ -250,14 +277,14 @@
src.connected_message("Clone Rejected: Deceased.")
return
- else if(src.occupant.health < src.heal_level)
+ else if(src.occupant.cloneloss > (100 - src.heal_level))
src.occupant.Paralyse(4)
//Slowly get that clone healed and finished.
- src.occupant.adjustCloneLoss(-2)
+ src.occupant.adjustCloneLoss(-((speed_coeff/2)))
//Premature clones may have brain damage.
- src.occupant.adjustBrainLoss(-1)
+ src.occupant.adjustBrainLoss(-((speed_coeff/2)))
//So clones don't die of oxyloss in a running pod.
if (src.occupant.reagents.get_reagent_amount("inaprovaline") < 30)
@@ -269,7 +296,7 @@
use_power(7500) //This might need tweaking.
return
- else if((src.occupant.health >= src.heal_level) && (!src.eject_wait))
+ else if((src.occupant.cloneloss <= (100 - src.heal_level)) && (!src.eject_wait))
src.connected_message("Cloning Process Complete.")
src.locked = 0
src.go_out()
@@ -279,7 +306,7 @@
src.occupant = null
if (src.locked)
src.locked = 0
- if (!src.mess)
+ if (!src.mess && !panel_open)
icon_state = "pod_0"
//use_power(200)
return
@@ -288,6 +315,20 @@
//Let's unlock this early I guess. Might be too early, needs tweaking.
/obj/machinery/clonepod/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if (istype(W, /obj/item/weapon/screwdriver))
+ if(occupant || mess || locked)
+ user << "The maintenance panel is locked."
+ return
+ default_deconstruction_screwdriver(user, "[icon_state]_maintenance", "[initial(icon_state)]", W)
+ return
+
+ if(exchange_parts(user, W))
+ return
+
+ if(istype(W, /obj/item/weapon/crowbar))
+ if(panel_open)
+ default_deconstruction_crowbar(W)
+ return
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (!src.check_access(W))
user << "\red Access Denied."
@@ -348,17 +389,16 @@
set name = "Eject Cloner"
set category = "Object"
set src in oview(1)
-
+
+ if(!usr)
+ return
if (usr.stat != 0)
return
- src.go_out()
+ src.go_out(usr)
add_fingerprint(usr)
return
-/obj/machinery/clonepod/proc/go_out()
- if (src.locked)
- return
-
+/obj/machinery/clonepod/proc/go_out(user)
if (src.mess) //Clean that mess and dump those gibs!
src.mess = 0
gibs(src.loc)
@@ -371,8 +411,12 @@
return
if (!(src.occupant))
+ user << "The cloning pod is empty!"
return
+ if (src.locked)
+ user << "The cloning pod is locked!"
+ return
/*
for(var/obj/O in src)
O.loc = src.loc
@@ -409,7 +453,7 @@
return
/obj/machinery/clonepod/emp_act(severity)
- if(prob(100/severity)) malfunction()
+ if(prob(100/(severity*efficiency))) malfunction()
..()
/obj/machinery/clonepod/ex_act(severity)
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index e864b84e97a..eb8efc36264 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -39,7 +39,7 @@
build_path = "/obj/machinery/computer/security"
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/aicore
- name = "Circuit board (AI core)"
+ name = "Circuit board (AI Core)"
origin_tech = "programming=4;biotech=2"
board_type = "other"
/obj/item/weapon/circuitboard/aiupload
@@ -62,7 +62,7 @@
build_path = "/obj/machinery/computer/scan_consolenew"
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/communications
- name = "Circuit board (Communications)"
+ name = "Circuit board (Communications Console)"
build_path = "/obj/machinery/computer/communications"
origin_tech = "programming=2;magnets=2"
/obj/item/weapon/circuitboard/card
@@ -71,11 +71,8 @@
/obj/item/weapon/circuitboard/card/centcom
name = "Circuit board (CentCom ID Computer)"
build_path = "/obj/machinery/computer/card/centcom"
-//obj/item/weapon/circuitboard/shield
-// name = "Circuit board (Shield Control)"
-// build_path = "/obj/machinery/computer/stationshield"
/obj/item/weapon/circuitboard/teleporter
- name = "Circuit board (Teleporter)"
+ name = "Circuit board (Teleporter Console)"
build_path = "/obj/machinery/computer/teleporter"
origin_tech = "programming=2;bluespace=2"
/obj/item/weapon/circuitboard/secure_data
@@ -88,22 +85,22 @@
name = "Circuit board (Station Alerts)"
build_path = "/obj/machinery/computer/station_alert"
/obj/item/weapon/circuitboard/atmospheresiphonswitch
- name = "Circuit board (Atmosphere siphon control)"
+ name = "Circuit board (Atmosphere Siphon control)"
build_path = "/obj/machinery/computer/atmosphere/siphonswitch"
/obj/item/weapon/circuitboard/air_management
- name = "Circuit board (Atmospheric monitor)"
+ name = "Circuit board (Atmospheric Monitor)"
build_path = "/obj/machinery/computer/general_air_control"
/obj/item/weapon/circuitboard/injector_control
- name = "Circuit board (Injector control)"
+ name = "Circuit board (Injector Control)"
build_path = "/obj/machinery/computer/general_air_control/fuel_injection"
/obj/item/weapon/circuitboard/atmos_alert
name = "Circuit board (Atmospheric Alert)"
build_path = "/obj/machinery/computer/atmos_alert"
/obj/item/weapon/circuitboard/pod
- name = "Circuit board (Massdriver control)"
+ name = "Circuit board (Massdriver Control)"
build_path = "/obj/machinery/computer/pod"
/obj/item/weapon/circuitboard/robotics
- name = "Circuit board (Robotics Control)"
+ name = "Circuit board (Robotics Control Console)"
build_path = "/obj/machinery/computer/robotics"
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/drone_control
@@ -111,7 +108,7 @@
build_path = "/obj/machinery/computer/drone_control"
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/cloning
- name = "Circuit board (Cloning)"
+ name = "Circuit board (Cloning Machine Console)"
build_path = "/obj/machinery/computer/cloning"
origin_tech = "programming=3;biotech=3"
/obj/item/weapon/circuitboard/arcade/battle
@@ -119,18 +116,18 @@
build_path = "/obj/machinery/computer/arcade/battle"
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/arcade/orion_trail
- name = "circuit board (Orion_Trail)"
+ name = "circuit board (Orion Trail)"
build_path = "/obj/machinery/computer/arcade/orion_trail"
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/turbine_control
- name = "Circuit board (Turbine control)"
+ name = "Circuit board (Turbine Control)"
build_path = "/obj/machinery/computer/turbine_computer"
/obj/item/weapon/circuitboard/solar_control
- name = "Circuit board (Solar Control)" //name fixed 250810
+ name = "Circuit board (Solar Control)"
build_path = "/obj/machinery/power/solar_control"
origin_tech = "programming=2;powerstorage=2"
/obj/item/weapon/circuitboard/powermonitor
- name = "Circuit board (Power Monitor)" //name fixed 250810
+ name = "Circuit board (Power Monitor)"
build_path = "/obj/machinery/power/monitor"
/obj/item/weapon/circuitboard/olddoor
name = "Circuit board (DoorMex)"
@@ -151,10 +148,10 @@
name = "Circuit Board (Exosuit Control Console)"
build_path = "/obj/machinery/computer/mecha"
/obj/item/weapon/circuitboard/rdservercontrol
- name = "Circuit Board (R&D Server Control)"
+ name = "Circuit Board (RD Server Control)"
build_path = "/obj/machinery/computer/rdservercontrol"
/obj/item/weapon/circuitboard/crew
- name = "Circuit board (Crew monitoring computer)"
+ name = "Circuit board (Crew Monitoring Computer)"
build_path = "/obj/machinery/computer/crew"
origin_tech = "programming=3;biotech=2;magnets=2"
/obj/item/weapon/circuitboard/mech_bay_power_console
@@ -162,11 +159,11 @@
build_path = "/obj/machinery/computer/mech_bay_power_console"
origin_tech = "programming=2;powerstorage=3"
/obj/item/weapon/circuitboard/ordercomp
- name = "Circuit board (Supply ordering console)"
+ name = "Circuit board (Supply Ordering Console)"
build_path = "/obj/machinery/computer/ordercomp"
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/supplycomp
- name = "Circuit board (Supply shuttle console)"
+ name = "Circuit board (Supply Shuttle Console)"
build_path = "/obj/machinery/computer/supplycomp"
origin_tech = "programming=3"
var/contraband_enabled = 0
@@ -189,7 +186,7 @@
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/curefab
- name = "Circuit board (Cure fab)"
+ name = "Circuit board (Cure Fabricator)"
build_path = "/obj/machinery/computer/curer"
/obj/item/weapon/circuitboard/splicer
name = "Circuit board (Disease Splicer)"
@@ -206,7 +203,7 @@
name = "Circuit board (Research Shuttle)"
build_path = "/obj/machinery/computer/shuttle_control/research"
origin_tech = "programming=2"
-/obj/item/weapon/circuitboard/HolodeckControl // Not going to let people get this, but it's just here for future
+/obj/item/weapon/circuitboard/HolodeckControl
name = "Circuit board (Holodeck Control)"
build_path = "/obj/machinery/computer/HolodeckControl"
origin_tech = "programming=4"
@@ -222,6 +219,10 @@
name = "Circuit board (Prison Shuttle)"
build_path = "/obj/machinery/computer/prison_shuttle"
origin_tech = "programming=2"
+/obj/item/weapon/circuitboard/telesci_console
+ name = "Circuit board (Telepad Control Console)"
+ build_path = "/obj/machinery/computer/telescience"
+ origin_tech = "programming=3;bluespace=2"
/obj/item/weapon/circuitboard/HONKputer
name = "Circuit board (HONKputer)"
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 32bc1d50cc7..c8ae03e2c26 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -1,5 +1,5 @@
/obj/machinery/computer/cloning
- name = "Cloning console"
+ name = "Cloning Console"
icon = 'icons/obj/computer.dmi'
icon_state = "dna"
circuit = "/obj/item/weapon/circuitboard/cloning"
@@ -7,12 +7,14 @@
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
var/obj/machinery/clonepod/pod1 = null //Linked cloning pod.
var/temp = ""
- var/scantemp = "Scanner unoccupied"
+ var/scantemp = "Scanner ready."
var/menu = 1 //Which menu screen to display
var/list/records = list()
var/datum/dna2/record/active_record = null
var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything.
var/loading = 0 // Nice loading text
+ var/autoprocess = 0
+ var/data[0]
l_color = "#0000FF"
@@ -23,6 +25,19 @@
return
return
+/obj/machinery/computer/cloning/process()
+ if(!(scanner && pod1 && autoprocess))
+ return
+
+ if(scanner.occupant && (scanner.scan_level > 2))
+ scan_mob(scanner.occupant)
+
+ if(!(pod1.occupant || pod1.mess) && (pod1.efficiency > 5))
+ for(var/datum/dna2/record/R in src.records)
+ if(!(pod1.occupant || pod1.mess))
+ if(pod1.growclone(R))
+ records.Remove(R)
+
/obj/machinery/computer/cloning/proc/updatemodules()
src.scanner = findscanner()
src.pod1 = findcloner()
@@ -65,7 +80,7 @@
W.loc = src
src.diskette = W
user << "You insert [W]."
- src.updateUsrDialog()
+ nanomanager.update_uis(src)
return
else
..()
@@ -85,118 +100,58 @@
return
updatemodules()
+ ui_interact(user)
- var/dat = "
"}
- */
-
- output += " body>"
- user << browse(output, "window=mech_bay_console")
- onclose(user, "mech_bay_console")
- return
+/obj/machinery/computer/mech_bay_power_console/process()
+ if(recharge_port && recharge_port.recharging_mech && recharge_port.recharging_mech.cell)
+ updateDialog()
- Topic(href, href_list)
- if(href_list["autostart"])
- autostart = !autostart
- if(href_list["voltage"])
- voltage = text2num(href_list["voltage"])
- if(recharge_port)
- recharge_port.set_voltage(voltage)
- updateUsrDialog()
- return
\ No newline at end of file
+/obj/machinery/computer/mech_bay_power_console/update_icon()
+ if(!recharge_port || !recharge_port.recharging_mech || !recharge_port.recharging_mech.cell || !(recharge_port.recharging_mech.cell.charge < recharge_port.recharging_mech.cell.maxcharge))
+ icon_state = "recharge_comp"
+ else
+ icon_state = "recharge_comp_on"
+
+/obj/machinery/computer/mech_bay_power_console/initialize()
+ reconnect()
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 1804d3e7dae..1d3db77dcfa 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -13,8 +13,10 @@
idle_power_usage = 20
active_power_usage = 5000
req_access = list(access_robotics)
- var/time_coeff = 1.5 //can be upgraded with research
- var/resource_coeff = 1.5 //can be upgraded with research
+ var/time_coeff = 1
+ var/resource_coeff = 1
+ var/time_coeff_tech = 1
+ var/resource_coeff_tech = 1
var/list/resources = list(
"metal"=0,
"glass"=0,
@@ -171,18 +173,16 @@
T = 0
for(var/obj/item/weapon/stock_parts/micro_laser/Ma in component_parts)
T += Ma.rating
- if(T >= 1)
- T -= 1
+ T -= 1
var/diff
- diff = round(initial(resource_coeff) - (initial(resource_coeff)*(T))/25,0.01)
+ diff = round(initial(resource_coeff) - (initial(resource_coeff)*(T))/8,0.01)
if(resource_coeff!=diff)
resource_coeff = diff
T = 0
for(var/obj/item/weapon/stock_parts/manipulator/Ml in component_parts)
T += Ml.rating
- if(T>= 2)
- T -= 2
- diff = round(initial(time_coeff) - (initial(time_coeff)*(T))/25,0.01)
+ T -= 1
+ diff = round(initial(time_coeff) - (initial(time_coeff)*(T))/5,0.01)
if(time_coeff!=diff)
time_coeff = diff
@@ -447,20 +447,20 @@
pmat += Ml.rating
if(pmat >= 1)
pmat -= 1//So the equations don't have to be reworked, upgrading a single part from T1 to T2 is == to 1 tech level
- diff = round(initial(resource_coeff) - (initial(resource_coeff)*(T.level+pmat))/25,0.01)
- if(resource_coeff!=diff)
- resource_coeff = diff
- output+="Production efficiency increased. "
+ diff = round(initial(resource_coeff_tech) - (initial(resource_coeff_tech)*(T.level+pmat))/30,0.01)
+ if(resource_coeff_tech > diff)
+ resource_coeff_tech = diff
+ output += "Production efficiency increased. "
if("programming")
var/ptime = 0
for(var/obj/item/weapon/stock_parts/manipulator/Ma in component_parts)
ptime += Ma.rating
if(ptime >= 2)
ptime -= 2
- diff = round(initial(time_coeff) - (initial(time_coeff)*(T.level+ptime))/25,0.1)
- if(time_coeff!=diff)
- time_coeff = diff
- output+="Production routines updated. "
+ diff = round(initial(time_coeff_tech) - (initial(time_coeff_tech)*(T.level+ptime))/25,0.1)
+ if(time_coeff_tech > diff)
+ time_coeff_tech = diff
+ output += "Production routines updated. "
return output
@@ -492,14 +492,14 @@
if(part.vars.Find("construction_time") && part.vars.Find("construction_cost"))
if (resource=="iron" && !("iron" in part:construction_cost))
resource="metal"
- return round(part:construction_cost[resource]*resource_coeff, roundto)
+ return round(part:construction_cost[resource]*resource_coeff*resource_coeff_tech, roundto)
else
return 0
/obj/machinery/mecha_part_fabricator/proc/get_construction_time_w_coeff(var/obj/item/part as obj, var/roundto=1)
//Be SURE to add any new equipment to this switch, but don't be suprised if it spits out children objects
if(part.vars.Find("construction_time") && part.vars.Find("construction_cost"))
- return round(part:construction_time*time_coeff, roundto)
+ return round(part:construction_time*time_coeff*time_coeff_tech, roundto)
else
return 0
@@ -702,53 +702,44 @@
/obj/machinery/mecha_part_fabricator/attackby(obj/W as obj, mob/user as mob)
if(exchange_parts(user, W))
- return
- if(istype(W,/obj/item/weapon/screwdriver))
- if (!opened)
- opened = 1
- icon_state = "fab-o"
- user << "You open the maintenance hatch of [src]."
- else
- opened = 0
- icon_state = "fab-idle"
- user << "You close the maintenance hatch of [src]."
- return
- if (opened)
+ return 1
+
+ if(istype(W, /obj/item/weapon/screwdriver))
+ default_deconstruction_screwdriver(user, "fab-o", "fab-idle", W)
+ return 1
+
+ if (panel_open)
if(istype(W, /obj/item/weapon/crowbar))
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
- M.state = 2
- M.icon_state = "box_1"
for(var/obj/I in component_parts)
if(I.reliability != 100 && crit_fail)
I.crit_fail = 1
- I.loc = src.loc
- if(src.resources["metal"] >= 3750)
- var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc)
- G.amount = round(src.resources["metal"] / G.perunit)
- if(src.resources["glass"] >= 3750)
- var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc)
- G.amount = round(src.resources["glass"] / G.perunit)
- if(src.resources["plasma"] >= 2000)
- var/obj/item/stack/sheet/mineral/plasma/G = new /obj/item/stack/sheet/mineral/plasma(src.loc)
- G.amount = round(src.resources["plasma"] / G.perunit)
- if(src.resources["silver"] >= 2000)
- var/obj/item/stack/sheet/mineral/silver/G = new /obj/item/stack/sheet/mineral/silver(src.loc)
- G.amount = round(src.resources["silver"] / G.perunit)
- if(src.resources["gold"] >= 2000)
- var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(src.loc)
- G.amount = round(src.resources["gold"] / G.perunit)
- if(src.resources["uranium"] >= 2000)
- var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(src.loc)
- G.amount = round(src.resources["uranium"] / G.perunit)
- if(src.resources["diamond"] >= 2000)
- var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc)
- G.amount = round(src.resources["diamond"] / G.perunit)
- if(src.resources["bananium"] >= 2000)
- var/obj/item/stack/sheet/mineral/clown/G = new /obj/item/stack/sheet/mineral/clown(src.loc)
- G.amount = round(src.resources["bananium"] / G.perunit)
- del(src)
- return 1
+ I.loc = src.loc
+ if(src.resources["metal"] >= 3750)
+ var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc)
+ G.amount = round(src.resources["metal"] / G.perunit)
+ if(src.resources["glass"] >= 3750)
+ var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc)
+ G.amount = round(src.resources["glass"] / G.perunit)
+ if(src.resources["plasma"] >= 2000)
+ var/obj/item/stack/sheet/mineral/plasma/G = new /obj/item/stack/sheet/mineral/plasma(src.loc)
+ G.amount = round(src.resources["plasma"] / G.perunit)
+ if(src.resources["silver"] >= 2000)
+ var/obj/item/stack/sheet/mineral/silver/G = new /obj/item/stack/sheet/mineral/silver(src.loc)
+ G.amount = round(src.resources["silver"] / G.perunit)
+ if(src.resources["gold"] >= 2000)
+ var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(src.loc)
+ G.amount = round(src.resources["gold"] / G.perunit)
+ if(src.resources["uranium"] >= 2000)
+ var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(src.loc)
+ G.amount = round(src.resources["uranium"] / G.perunit)
+ if(src.resources["diamond"] >= 2000)
+ var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc)
+ G.amount = round(src.resources["diamond"] / G.perunit)
+ if(src.resources["bananium"] >= 2000)
+ var/obj/item/stack/sheet/mineral/clown/G = new /obj/item/stack/sheet/mineral/clown(src.loc)
+ G.amount = round(src.resources["bananium"] / G.perunit)
+ default_deconstruction_crowbar(W)
+ return 1
else
user << "\red You can't load the [src.name] while it's opened."
return 1
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index d5ce9a990fe..06723250fa2 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -36,6 +36,7 @@
var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N
+ var/reflect_chance = 0 //This var dictates what % of a time an object will reflect an energy based weapon's shot
var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
var/list/allowed = null //suit storage stuff.
var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers.
@@ -557,6 +558,10 @@
/obj/item/proc/IsShield()
return 0
+/obj/item/proc/IsReflect(var/def_zone) //This proc determines if and at what% an object will reflect energy projectiles if it's in l_hand,r_hand or wear_suit
+ if(prob(reflect_chance))
+ return 1
+
/obj/item/proc/get_loc_turf()
var/atom/L = loc
while(L && !istype(L, /turf/))
diff --git a/code/game/objects/items/bluespace_crystal.dm b/code/game/objects/items/bluespace_crystal.dm
new file mode 100644
index 00000000000..ce9aac56064
--- /dev/null
+++ b/code/game/objects/items/bluespace_crystal.dm
@@ -0,0 +1,36 @@
+// Bluespace crystals, used in telescience and when crushed it will blink you to a random turf.
+/obj/item/bluespace_crystal
+ name = "bluespace crystal"
+ desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate."
+ icon = 'icons/obj/telescience.dmi'
+ icon_state = "bluespace_crystal"
+ w_class = 1
+ origin_tech = "bluespace=4;materials=5"
+ var/blink_range = 8 // The teleport range when crushed/thrown at someone.
+
+/obj/item/bluespace_crystal/New()
+ ..()
+ pixel_x = rand(-5, 5)
+ pixel_y = rand(-5, 5)
+
+/obj/item/bluespace_crystal/attack_self(var/mob/user)
+ blink_mob(user)
+ user.drop_item()
+ user.visible_message("[user] crushes the [src]!")
+ qdel(src)
+
+/obj/item/bluespace_crystal/proc/blink_mob(var/mob/living/L)
+ do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
+
+/obj/item/bluespace_crystal/throw_impact(atom/hit_atom)
+ ..()
+ if(isliving(hit_atom))
+ blink_mob(hit_atom)
+ qdel(src)
+
+// Artifical bluespace crystal, doesn't give you much research.
+/obj/item/bluespace_crystal/artificial
+ name = "artificial bluespace crystal"
+ desc = "An artificially made bluespace crystal, it looks delicate."
+ origin_tech = "bluespace=2"
+ blink_range = 4 // Not as good as the organic stuff!
\ No newline at end of file
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index 5867b5c67d7..16105f1fb61 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -1,19 +1,26 @@
+var/list/sps_list = list()
/obj/item/device/sps
- name = "Space Positioning System"
- desc = "Helping lost spacemen find their way through the galaxy since 3016."
+ name = "space positioning system"
+ desc = "Helping lost spacemen find their way through the planets since 2016."
icon = 'icons/obj/telescience.dmi'
icon_state = "gps-c"
w_class = 2.0
- flags = FPRINT
slot_flags = SLOT_BELT
- origin_tech = "programming=2;engineering=2"
- var/gpstag = "COM0"
+ origin_tech = "materials=2;magnets=3;bluespace=2"
+ var/spstag = "COM0"
var/emped = 0
+ var/turf/locked_location
/obj/item/device/sps/New()
- name = "Space Positioning System ([gpstag])"
+ ..()
+ sps_list.Add(src)
+ name = "space positioning system ([spstag])"
overlays += "working"
+/obj/item/device/sps/Destroy()
+ sps_list.Remove(src)
+ ..()
+
/obj/item/device/sps/emp_act(severity)
emped = 1
overlays -= "working"
@@ -24,43 +31,54 @@
overlays += "working"
/obj/item/device/sps/attack_self(mob/user as mob)
+
var/obj/item/device/sps/t = ""
+ var/sps_window_height = 110 + sps_list.len * 20 // Variable window height, depending on how many sps units there are to show
if(emped)
t += "ERROR"
else
- t += " Set Tag "
- t += " Tag: [gpstag]"
+ t += "Set TagRefresh"
+ t += " Tag: [spstag]"
+ if(locked_location && locked_location.loc)
+ t += " Bluespace coordinates saved: [locked_location.loc]"
+ sps_window_height += 20
- for(var/obj/item/device/sps/G in world)
+ for(var/obj/item/device/sps/G in sps_list)
var/turf/pos = get_turf(G)
- var/area/gps_area = get_area(G)
- var/tracked_gpstag = G.gpstag
+ var/area/sps_area = get_area(G)
+ var/tracked_spstag = G.spstag
if(G.emped == 1)
- t += " [tracked_gpstag]: ERROR"
+ t += " [tracked_spstag]: ERROR"
else
- t += " [tracked_gpstag]: [format_text(gps_area.name)] ([pos.x], [pos.y], [pos.z])"
+ t += " [tracked_spstag]: [format_text(sps_area.name)] ([pos.x], [pos.y], [pos.z])"
- var/datum/browser/popup = new(user, "SPS", name, 600, 450)
+ var/datum/browser/popup = new(user, "sps", name, 360, min(sps_window_height, 800))
popup.set_content(t)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
/obj/item/device/sps/Topic(href, href_list)
+ ..()
if(href_list["tag"] )
- var/a = input("Please enter desired tag.", name, gpstag) as text
- a = copytext(sanitize(a), 1, 20)
- if(length(a) != 4)
- usr << "\blue The tag must be four letters long!"
- return
- else
- gpstag = a
- name = "Space Positioning System ([gpstag])"
- return
+ var/a = input("Please enter desired tag.", name, spstag) as text
+ a = uppertext(copytext(sanitize(a), 1, 5))
+ if(src.loc == usr)
+ spstag = a
+ name = "space positioning system ([spstag])"
+ attack_self(usr)
+ if(href_list["refresh"] )
+ if(src.loc == usr)
+ attack_self(usr)
/obj/item/device/sps/science
icon_state = "gps-s"
- gpstag = "SCI0"
+ spstag = "SCI0"
/obj/item/device/sps/engineering
icon_state = "gps-e"
- gpstag = "ENG0"
\ No newline at end of file
+ spstag = "ENG0"
+
+/obj/item/device/sps/mining
+ icon_state = "gps-m"
+ spstag = "MINE0"
+ desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index ac63824ee10..1443ebdc671 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -30,10 +30,13 @@
return (BRUTELOSS|FIRELOSS)
/obj/item/weapon/melee/energy/sword
+ var/hacked = 0
+ var/blade_color
color
name = "energy sword"
desc = "May the force be within you."
icon_state = "sword0"
+ icon_override = 'icons/mob/in-hand/swords.dmi'
force = 3.0
throwforce = 5.0
throw_speed = 1
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index 45782d98228..5c0572fd7d8 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -20,8 +20,8 @@
create_reagents(mopcap)
-obj/item/weapon/mop/proc/clean(turf/simulated/A)
- if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1))
+/obj/item/weapon/mop/proc/clean(turf/simulated/A)
+ if(reagents.has_reagent("water", 1) || reagents.has_reagent("cleaner", 1) || reagents.has_reagent("holywater", 1))
A.clean_blood()
for(var/obj/effect/O in A)
if(istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay) || istype(O,/obj/effect/rune))
diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm
index 47d8f14b823..cf9abda162f 100644
--- a/code/game/objects/items/weapons/power_cells.dm
+++ b/code/game/objects/items/weapons/power_cells.dm
@@ -13,6 +13,7 @@
w_class = 3.0
var/charge = 0 // note %age conveted to actual charge in New
var/maxcharge = 10000
+ var/rating = 1
m_amt = 700
g_amt = 50
var/rigged = 0 // true if rigged to explode
@@ -29,6 +30,7 @@
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
origin_tech = "powerstorage=0"
maxcharge = 5000
+ rating = 2
g_amt = 40
/obj/item/weapon/cell/crap/empty/New()
@@ -39,6 +41,7 @@
name = "\improper Security borg rechargable D battery"
origin_tech = "powerstorage=0"
maxcharge = 6000 //6000 max charge / 1000 charge per shot = six shots
+ rating = 2.5
g_amt = 40
/obj/item/weapon/cell/secborg/empty/New()
@@ -50,6 +53,7 @@
origin_tech = "powerstorage=2"
icon_state = "hcell"
maxcharge = 15000
+ rating = 3
g_amt = 60
/obj/item/weapon/cell/high/empty/New()
@@ -62,6 +66,7 @@
icon_state = "scell"
maxcharge = 20000
g_amt = 70
+ rating = 4
construction_cost = list("metal"=750,"glass"=100)
/obj/item/weapon/cell/super/empty/New()
@@ -73,6 +78,7 @@
origin_tech = "powerstorage=6"
icon_state = "hpcell"
maxcharge = 30000
+ rating = 5
g_amt = 80
construction_cost = list("metal"=500,"glass"=150,"gold"=200,"silver"=200)
@@ -85,6 +91,7 @@
icon_state = "icell"
origin_tech = null
maxcharge = 30000
+ rating = 6
g_amt = 80
use()
return 1
@@ -97,6 +104,7 @@
icon_state = "potato_cell" //"potato_battery"
charge = 100
maxcharge = 3000
+ rating = 1
m_amt = 0
g_amt = 0
minor_fault = 1
@@ -109,6 +117,6 @@
icon = 'icons/mob/slimes.dmi' //'icons/obj/harvest.dmi'
icon_state = "yellow slime extract" //"potato_battery"
maxcharge = 10000
- maxcharge = 10000
+ rating = 3
m_amt = 0
g_amt = 0
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 8f4a66a96d0..e3ea4d5481f 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -203,6 +203,17 @@
item_state = "Dpacket"
+/obj/item/weapon/storage/fancy/cigarettes/syndicate
+ name = "\improper Syndicate Cigarettes"
+ desc = "A packet of six evil-looking cigarettes, A label on the packaging reads, \"Donk Co\""
+ icon_state = "robustpacket"
+ item_state = "robustpacket"
+
+/obj/item/weapon/storage/fancy/cigarettes/syndicate/New()
+ ..()
+ var/new_name = pick("evil", "suspicious", "ominous", "donk-flavored", "robust", "sneaky")
+ name = "[new_name] cigarette packet"
+
/*
* Vial Box
*/
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index dbd641ab27a..9a5b30a4e48 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -16,6 +16,7 @@
var/obj/item/weapon/cell/high/bcell = null
var/mob/foundmob = "" //Used in throwing proc.
var/hitcost = 1500 //oh god why do power cells carry so much charge? We probably need to make a distinction between "industrial" sized power cells for APCs and power cells for everything else.
+ var/allowharm = 0 // Allow or disallow harming with the stunbaton
/obj/item/weapon/melee/baton/suicide_act(mob/user)
user.visible_message("[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.")
@@ -123,7 +124,7 @@
var/mob/living/L = M
var/target_zone = check_zone(user.zone_sel.selecting)
- if(user.a_intent == "hurt")
+ if(user.a_intent == "harm" && allowharm == 1)
if (!..()) //item/attack() does it's own messaging and logs
return 0 // item/attack() will return 1 if they hit, 0 if they missed.
agony *= 0.5 //whacking someone causes a much poorer contact than prodding them.
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index 1a017d8a207..d478496b4e1 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -24,7 +24,7 @@
return 0
/obj/item/weapon/melee/energy/sword/New()
- _color = pick("red","blue","green","purple")
+ blade_color = pick("red","blue","green","purple")
/obj/item/weapon/melee/energy/sword/attack_self(mob/living/user as mob)
if ((M_CLUMSY in user.mutations) && prob(50))
@@ -36,7 +36,7 @@
if(istype(src,/obj/item/weapon/melee/energy/sword/pirate))
icon_state = "cutlass1"
else
- icon_state = "sword[_color]"
+ icon_state = "sword[blade_color]"
w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
hitsound = 'sound/weapons/blade1.ogg'
@@ -67,9 +67,29 @@
user.adjustBrainLoss(10)
else
user << "You attach the ends of the two energy swords, making a single double-bladed weapon! You're cool."
- new /obj/item/weapon/twohanded/dualsaber(user.loc)
+ var/obj/item/weapon/twohanded/dualsaber/newSaber = new /obj/item/weapon/twohanded/dualsaber(user.loc)
+ if(src.hacked) // That's right, we'll only check the "original" esword.
+ newSaber.hacked = 1
+ newSaber.blade_color = "rainbow"
del(W)
del(src)
+
+ else if(istype(W, /obj/item/device/multitool))
+ if(hacked == 0)
+ hacked = 1
+ blade_color = "rainbow"
+ user << "RNBW_ENGAGE"
+
+ if(active)
+ icon_state = "swordrainbow"
+ // Updating overlays, copied from welder code.
+ // I tried calling attack_self twice, which looked cool, except it somehow didn't update the overlays!!
+ if(user.r_hand == src)
+ user.update_inv_r_hand(0)
+ else if(user.l_hand == src)
+ user.update_inv_l_hand(0)
+ else
+ user << "It's already fabulous!"
/*
* Classic Baton
*/
@@ -215,8 +235,7 @@
return
else
return ..()
-
-
+
/*
*Energy Blade
*/
@@ -282,6 +301,7 @@
active = !active
if (active)
force = 10
+ reflect_chance = 80
icon_state = "eshield[active]"
w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
@@ -290,6 +310,7 @@
force = 3
icon_state = "eshield[active]"
w_class = 1
+ reflect_chance = 0
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
user << "\blue [src] can now be concealed."
if(istype(user,/mob/living/carbon/human))
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index 82ffdd96b6a..cdb52c9956f 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -128,26 +128,26 @@ Frequency:
icon = 'icons/obj/device.dmi'
icon_state = "hand_tele"
item_state = "electronic"
- throwforce = 5
+ throwforce = 0
w_class = 2.0
throw_speed = 3
throw_range = 5
m_amt = 10000
origin_tech = "magnets=1;bluespace=3"
+ var/active_portals = 0
/obj/item/weapon/hand_tele/attack_self(mob/user as mob)
var/turf/current_location = get_turf(user)//What turf is the user on?
- if(!current_location||current_location.z==2||current_location.z>=8)//If turf was not found or they're on z level 2 or >8 which does not currently exist.
+ if(!current_location||current_location.z==2||current_location.z>=7)//If turf was not found or they're on z level 2 or >7 which does not currently exist.
user << "\The [src] is malfunctioning."
return
var/list/L = list( )
- for(var/obj/machinery/teleport/hub/R in world)
- var/obj/machinery/computer/teleporter/com = locate(/obj/machinery/computer/teleporter, locate(R.x - 2, R.y, R.z))
- if (istype(com, /obj/machinery/computer/teleporter) && com.locked && !com.one_time_use)
- if(R.icon_state == "tele1")
- L["[com.id] (Active)"] = com.locked
+ for(var/obj/machinery/computer/teleporter/com in world)
+ if(com.target)
+ if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged)
+ L["[com.id] (Active)"] = com.target
else
- L["[com.id] (Inactive)"] = com.locked
+ L["[com.id] (Inactive)"] = com.target
var/list/turfs = list( )
for(var/turf/T in orange(10))
if(T.x>world.maxx-8 || T.x<8) continue //putting them at the edge is dumb
@@ -158,19 +158,16 @@ Frequency:
var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") in L
if ((user.get_active_hand() != src || user.stat || user.restrained()))
return
- var/count = 0 //num of portals from this teleport in world
- for(var/obj/effect/portal/PO in world)
- if(PO.creator == src) count++
- if(count >= 3)
+ if(active_portals >= 3)
user.show_message("\The [src] is recharging!")
return
var/T = L[t1]
- for(var/mob/O in hearers(user, null))
- O.show_message("Locked In.", 2)
+ user.show_message("Locked In.", 2)
var/obj/effect/portal/P = new /obj/effect/portal( get_turf(src) )
P.target = T
P.creator = src
+ try_move_adjacent(P)
+ active_portals++
src.add_fingerprint(user)
return
-
-
+
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index b070240b7af..c407144acba 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -191,6 +191,9 @@ obj/item/weapon/twohanded/
* Double-Bladed Energy Swords - Cheridan
*/
/obj/item/weapon/twohanded/dualsaber
+ var/hacked = 0
+ var/blade_color
+ icon_override = 'icons/mob/in-hand/swords.dmi'
icon_state = "dualsaber0"
name = "double-bladed energy sword"
desc = "Handle with care."
@@ -210,20 +213,16 @@ obj/item/weapon/twohanded/
edge = 1
no_embed = 1 // Like with the single-handed esword, this shouldn't be embedding in people.
-/* Here for when we can add items to left and right hands again, but currently this cannot be done due to the lack of in-hand icons for dual eswords aside from the green one.
/obj/item/weapon/twohanded/dualsaber/New()
- item_color = pick("red", "blue", "green", "purple")
+ blade_color = pick("red", "blue", "green", "purple")
/obj/item/weapon/twohanded/dualsaber/update_icon()
if(wielded)
- icon_state = "dualsaber[item_color][wielded]"
+ icon_state = "dualsaber[blade_color][wielded]"
+ reflect_chance = 80
else
icon_state = "dualsaber0"
-*/
-
-/obj/item/weapon/twohanded/dualsaber/update_icon()
- icon_state = "dualsaber[wielded]"
- return
+ reflect_chance = 0
/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/user as mob)
..()
@@ -245,11 +244,19 @@ obj/item/weapon/twohanded/
/obj/item/weapon/twohanded/dualsaber/green
New()
- color = "green"
+ blade_color = "green"
/obj/item/weapon/twohanded/dualsaber/red
New()
- color = "red"
+ blade_color = "red"
+
+/obj/item/weapon/twohanded/dualsaber/purple
+ New()
+ blade_color = "purple"
+
+/obj/item/weapon/twohanded/dualsaber/blue
+ New()
+ blade_color = "blue"
/obj/item/weapon/twohanded/dualsaber/unwield()
..()
@@ -259,6 +266,18 @@ obj/item/weapon/twohanded/
..()
hitsound = 'sound/weapons/blade1.ogg'
+/obj/item/weapon/twohanded/dualsaber/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ ..()
+ if(istype(W, /obj/item/device/multitool))
+ if(hacked == 0)
+ hacked = 1
+ user << "2XRNBW_ENGAGE"
+ blade_color = "rainbow"
+ update_icon()
+ else
+ user << "It's starting to look like a triple rainbow - no, nevermind."
+
+
//spears
/obj/item/weapon/twohanded/spear
icon_state = "spearglass0"
@@ -284,4 +303,199 @@ obj/item/weapon/twohanded/
/obj/item/weapon/twohanded/spear/kidan
icon_state = "kidanspear0"
name = "Kidan spear"
- desc = "A spear brought over from the Kidan homeworld."
\ No newline at end of file
+ desc = "A spear brought over from the Kidan homeworld."
+
+
+// SINGULOHAMMER
+
+/obj/item/weapon/twohanded/singularityhammer
+ name = "singularity hammer"
+ desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows."
+
+ icon_override = 'icons/mob/in-hand/swords.dmi'
+ icon_state = "mjollnir0"
+ flags = CONDUCT
+ slot_flags = SLOT_BACK
+ no_embed = 1
+ force = 5
+ force_unwielded = 5
+ force_wielded = 20
+ throwforce = 15
+ throw_range = 1
+ w_class = 5
+ var/charged = 5
+ origin_tech = "combat=5;bluespace=4"
+
+
+
+/obj/item/weapon/twohanded/singularityhammer/New()
+ ..()
+ processing_objects.Add(src)
+
+
+/obj/item/weapon/twohanded/singularityhammer/Destroy()
+ processing_objects.Remove(src)
+ ..()
+
+
+/obj/item/weapon/twohanded/singularityhammer/process()
+ if(charged < 5)
+ charged++
+ return
+
+/obj/item/weapon/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons.
+ icon_state = "mjollnir[wielded]"
+ return
+
+
+/obj/item/weapon/twohanded/singularityhammer/proc/vortex(var/turf/pull as turf, mob/wielder as mob)
+ for(var/atom/X in orange(5,pull))
+ if(istype(X, /atom/movable))
+ if(X == wielder) continue
+ if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human)))
+ step_towards(X,pull)
+ step_towards(X,pull)
+ step_towards(X,pull)
+ else if(istype(X,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = X
+ if(istype(H.shoes,/obj/item/clothing/shoes/magboots))
+ var/obj/item/clothing/shoes/magboots/M = H.shoes
+ if(M.magpulse)
+ continue
+ H.apply_effect(1, WEAKEN, 0)
+ step_towards(H,pull)
+ step_towards(H,pull)
+ step_towards(H,pull)
+ return
+
+
+
+/obj/item/weapon/twohanded/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
+ if(!proximity) return
+ if(wielded)
+ if(charged == 5)
+ charged = 0
+ if(istype(A, /mob/living/))
+ var/mob/living/Z = A
+ Z.take_organ_damage(20,0)
+ playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
+ var/turf/target = get_turf(A)
+ vortex(target,user)
+
+
+/obj/item/weapon/twohanded/mjollnir
+ name = "Mjollnir"
+ desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy."
+ icon_override = 'icons/mob/in-hand/swords.dmi'
+ icon_state = "mjollnir0"
+ flags = CONDUCT
+ slot_flags = SLOT_BACK
+ no_embed = 1
+ force = 5
+ force_unwielded = 5
+ force_wielded = 20
+ throwforce = 30
+ throw_range = 7
+ w_class = 5
+ //var/charged = 5
+ origin_tech = "combat=5;powerstorage=5"
+
+/obj/item/weapon/twohanded/mjollnir/proc/shock(mob/living/target as mob)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
+ s.set_up(5, 1, target.loc)
+ s.start()
+ target.take_organ_damage(0,30)
+ target.visible_message("[target.name] was shocked by the [src.name]!", \
+ "You feel a powerful shock course through your body sending you flying!", \
+ "You hear a heavy electrical crack.")
+ var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
+ target.throw_at(throw_target, 200, 4)
+ return
+
+
+/obj/item/weapon/twohanded/mjollnir/attack(mob/M as mob, mob/user as mob)
+ ..()
+ spawn(0)
+ if(wielded)
+ //if(charged == 5)
+ //charged = 0
+ playsound(src.loc, "sparks", 50, 1)
+ if(istype(M, /mob/living))
+ M.Stun(10)
+ shock(M)
+
+
+/obj/item/weapon/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons.
+ icon_state = "mjollnir[wielded]"
+ return
+
+
+
+/obj/item/weapon/twohanded/knighthammer
+ name = "singuloth knight's hammer"
+ desc = "A hammer made of sturdy metal with a golden skull adorned with wings on either side of the head. This weapon causes devastating damage to those it hits due to a power field sustained by a mini-singularity inside of the hammer."
+
+ icon_override = 'icons/mob/in-hand/swords.dmi'
+ icon_state = "adrhammer0"
+ flags = CONDUCT
+ slot_flags = SLOT_BACK
+ no_embed = 1
+ force = 5
+ force_unwielded = 5
+ force_wielded = 20
+ throwforce = 15
+ throw_range = 1
+ w_class = 5
+ var/charged = 5
+ origin_tech = "combat=5;bluespace=4"
+
+
+
+/obj/item/weapon/twohanded/knighthammer/New()
+ ..()
+ processing_objects.Add(src)
+
+
+/obj/item/weapon/twohanded/knighthammer/Destroy()
+ processing_objects.Remove(src)
+ ..()
+
+
+/obj/item/weapon/twohanded/knighthammer/process()
+ if(charged < 5)
+ charged++
+ return
+
+/obj/item/weapon/twohanded/knighthammer/update_icon() //Currently only here to fuck with the on-mob icons.
+ icon_state = "adrhammer[wielded]"
+ return
+
+
+/obj/item/weapon/twohanded/knighthammer/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
+ if(!proximity) return
+ if(wielded)
+ if(charged == 5)
+ charged = 0
+ if(istype(A, /mob/living/))
+ var/mob/living/Z = A
+ if(Z.health < 1)
+ Z.visible_message("[Z.name] was blown to peices by the power of [src.name]!", \
+ "You feel a powerful blow rip you apart!", \
+ "You hear a heavy impact and the sound of ripping flesh!.")
+ Z.gib()
+ else
+ Z.take_organ_damage(0,30)
+ Z.visible_message("[Z.name] was sent flying by a blow from the [src.name]!", \
+ "You feel a powerful blow connect with your body and send you flying!", \
+ "You hear something heavy impact flesh!.")
+ var/atom/throw_target = get_edge_target_turf(Z, get_dir(src, get_step_away(Z, src)))
+ Z.throw_at(throw_target, 200, 4)
+ else if(istype(A, /turf/simulated/wall))
+ var/turf/simulated/wall/Z = A
+ Z.ex_act(2)
+ charged = 3
+ else if (istype(A, /obj/structure) || istype(A, /obj/mecha/))
+ var/obj/Z = A
+ Z.ex_act(2)
+ charged = 3
+ playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm
index 3f44e648641..3877094138f 100644
--- a/code/game/objects/items/weapons/vending_items.dm
+++ b/code/game/objects/items/weapons/vending_items.dm
@@ -1,58 +1,59 @@
/obj/item/weapon/vending_refill
- name = "Resupply canister"
+ name = "resupply canister"
var/machine_name = "Generic"
icon = 'icons/obj/vending_restock.dmi'
icon_state = "refill_snack"
item_state = "restock_unit"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 7.0
- throwforce = 15.0
+ throwforce = 10.0
throw_speed = 1
throw_range = 7
w_class = 4.0
var/charges = 0 //how many restocking "charges" the refill has
-/obj/item/weapon/vending_refill/New()
+/obj/item/weapon/vending_refill/New(amt = -1)
..()
name = "\improper [machine_name] restocking unit"
+ if(isnum(amt) && amt > -1)
+ charges = amt
-/obj/item/weapon/vending_refill/examine()
- set src in usr
+/obj/item/weapon/vending_refill/examine(mob/user)
..()
if(charges)
- usr << "It can restock [charges] item(s)."
+ user << "It can restock [charges] item(s)."
else
- usr << "It's empty!"
+ user << "It's empty!"
//NOTE I decided to go for about 1/3 of a machine's capacity
/obj/item/weapon/vending_refill/boozeomat
machine_name = "Booze-O-Mat"
icon_state = "refill_booze"
- charges = 50//of 138
+ charges = 46//of 138
/obj/item/weapon/vending_refill/coffee
machine_name = "hot drinks"
icon_state = "refill_joe"
- charges = 30//of 85
+ charges = 28//of 85
/obj/item/weapon/vending_refill/snack
machine_name = "Getmore Chocolate Corp"
- charges = 15//of 48
+ charges = 16//of 48
/obj/item/weapon/vending_refill/cola
machine_name = "Robust Softdrinks"
icon_state = "refill_cola"
- charges = 20//of 65
+ charges = 21//of 65
/obj/item/weapon/vending_refill/cigarette
machine_name = "cigarette"
icon_state = "refill_smoke"
- charges = 10// of 30
+ charges = 9// of 30
/obj/item/weapon/vending_refill/autodrobe
machine_name = "AutoDrobe"
icon_state = "refill_costume"
- charges = 28// of 58
+ charges = 19// of 58
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 2bcf45b4c16..fb60fa0d3aa 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -41,7 +41,7 @@
if(climbable)
structure_shaken()
- return
+ return 1
/obj/structure/closet/crate/close()
if(!src.opened)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 9470b291de8..8786b6ff3e9 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -1,3 +1,41 @@
+//This proc is called in master-controller, and updates the color of all windows and windoors on the map
+var/global/wcBar
+var/global/wcBrig
+var/global/wcCommon
+var/global/wcColored
+/proc/color_windows_init()
+ var/list/bar = list("#0d8395", "#58b5c3", "#58c366", "#90d79a", "#ffffff")
+ var/list/brig = list("#aa0808", "#7f0606", "#ff0000")
+ var/list/common = list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8fcf44", "#ffffff")
+
+ wcBar = pick(bar)
+ wcBrig = pick(brig)
+ wcCommon = pick(common)
+
+/obj/proc/color_windows(var/obj/W as obj)
+ if(!wcColored)
+ sleep(50) // Sleeping to make sure the glass has initialized on the map
+ wcColored = 1
+
+ var/list/wcBarAreas = list(/area/crew_quarters/bar)
+ var/list/wcBrigAreas = list(/area/security,/area/security/main,/area/security/lobby,/area/security/brig,/area/security/permabrig,/area/security/prison,/area/security/prison/cell_block/A,/area/security/prison/cell_block/B,/area/security/prison/cell_block/C,/area/security/execution,/area/security/processing,/area/security/interrogation,/area/security/interrogationobs,/area/security/evidence,/area/security/prisonlockers,/area/security/medbay,/area/security/processing,/area/security/warden,/area/security/armoury,/area/security/securearmoury,/area/security/armoury/gamma,/area/security/securehallway,/area/security/hos,/area/security/podbay,/area/security/detectives_office,/area/security/range,/area/security/nuke_storage,/area/security/checkpoint,/area/security/checkpoint2,/area/security/checkpoint2,/area/security/checkpoint/supply,/area/security/checkpoint/engineering,/area/security/checkpoint/medical,/area/security/checkpoint/science,/area/security/vacantoffice,/area/security/vacantoffice2,/area/prison,/area/prison/arrival_airlock,/area/prison/control,/area/prison/crew_quarters,/area/prison/rec_room,/area/prison/closet,/area/prison/hallway/fore,/area/prison/hallway/aft,/area/prison/hallway/port,/area/prison/hallway/starboard,/area/prison/morgue,/area/prison/medical_research,/area/prison/medical,/area/prison/solar,/area/prison/podbay,/area/prison/solar_control,/area/prison/solitary,/area/prison/cell_block,/area/prison/cell_block/A,/area/prison/cell_block/B,/area/prison/cell_block/C)
+
+ var/newcolor
+ for(var/A in wcBarAreas)
+ if(W.areaMaster == locate(A))
+ newcolor = wcBar
+ break
+
+ for(var/A in wcBrigAreas)
+ if(W.areaMaster == locate(A))
+ newcolor = wcBrig
+ break
+
+ if(!newcolor)
+ newcolor = wcCommon
+
+ return newcolor
+
/obj/structure/window
name = "window"
desc = "A window."
@@ -18,9 +56,8 @@
var/sheets = 1 // Number of sheets needed to build this window (determines how much shit is spawned by destroy())
// var/silicate = 0 // number of units of silicate
// var/icon/silicateIcon = null // the silicated icon
-
+
/obj/structure/window/bullet_act(var/obj/item/projectile/Proj)
-
//Tasers and the like should not damage windows.
if(Proj.damage_type == HALLOSS)
return
@@ -338,31 +375,14 @@
silicateIcon = I
*/
-
/obj/structure/window/New(Loc,re=0)
..()
-
-// if(re) reinf = re
-
ini_dir = dir
-/* if(reinf)
- icon_state = "rwindow"
- desc = "A reinforced window."
- name = "reinforced window"
- state = 2*anchored
- health = 40
- if(opacity)
- icon_state = "twindow"
- else
- icon_state = "window"*/
-
- color = color_windows()
+ color = color_windows(src)
update_nearby_tiles(need_rebuild=1)
update_nearby_icons()
-
return
-
/obj/structure/window/Destroy()
density = 0
update_nearby_tiles()
@@ -479,6 +499,4 @@
desc = "It looks rather strong and frosted over. Looks like it might take a few less hits then a normal reinforced window."
icon_state = "fwindow"
basestate = "fwindow"
- health = 30
-
-
+ health = 30
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index 37f392cb9b8..37eb0ddd00c 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -24,7 +24,7 @@
if(istype(I,/obj/item/weapon/modkit/unathi))
user.drop_item()
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
- user << "\red You painstakingly modify [src] to make it more suitable for a Tajaran user."
+ user << "\red You painstakingly modify [src] to make it more suitable for a Unathi user."
new /obj/item/clothing/head/helmet/space/rig/unathi(user.loc)
del(I)
del(src)
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index c2fbc746027..2d58731f4f4 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -60,9 +60,17 @@
icon_state = "armor_reflec"
item_state = "armor_reflec"
blood_overlay_type = "armor"
+ reflect_chance = 40
armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0
+/obj/item/clothing/suit/armor/laserproof/IsReflect(var/def_zone)
+ var/hit_reflect_chance = reflect_chance
+ if(!(def_zone in list("chest", "groin"))) //If not shot where ablative is covering you, you don't get the reflection bonus!
+ hit_reflect_chance = 0
+ if (prob(hit_reflect_chance))
+ return 1
+
/obj/item/clothing/suit/armor/swat
name = "swat suit"
desc = "A heavily armored suit that protects against moderate damage. Used in special operations."
diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm
index 34703ec5fec..91bedc70cc4 100644
--- a/code/modules/events/prison_break.dm
+++ b/code/modules/events/prison_break.dm
@@ -24,7 +24,7 @@
/datum/event/prison_break/start()
for(var/area/A in world)
- if(istype(A, /area/security/prison) || istype(A, /area/security/brig) || istype(A, /area/prison) || istype(A, /area/security/lobby))
+ if(istype(A, /area/security/prison) || istype(A, /area/security/brig) || istype(A, /area/prison) || istype(A, /area/security/permabrig) || istype(A, /area/security/prisonlockers) || istype(A, /area/security/lobby) || istype(A, /area/security/processing))
prisonAreas += A
if(prisonAreas && prisonAreas.len > 0)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 73b840d96c4..616a0d2ba1d 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -12,35 +12,31 @@ emp_act
var/datum/organ/external/organ = get_organ(check_zone(def_zone))
+ if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
+ if(check_reflect(def_zone)) // Checks if you've passed a reflection% check
+ visible_message("The [P.name] gets reflected by [src]!", \
+ "The [P.name] gets reflected by [src]!")
+ // Find a turf near or on the original location to bounce to
+ if(P.starting)
+ var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
+ var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
+ var/turf/curloc = get_turf(src)
+
+ // redirect the projectile
+ P.original = locate(new_x, new_y, P.z)
+ P.starting = curloc
+ P.current = curloc
+ P.firer = src
+ P.yo = new_y - curloc.y
+ P.xo = new_x - curloc.x
+
+ return -1 // complete projectile permutation
+
//Shields
if(check_shields(P.damage, "the [P.name]"))
P.on_hit(src, 2, def_zone)
return 2
- //Laserproof armour
- if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof))
- if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
- var/reflectchance = 40 - round(P.damage/3)
- if(!(def_zone in list("chest", "groin")))
- reflectchance /= 2
- if(prob(reflectchance))
- visible_message("\red The [P.name] gets reflected by [src]'s [wear_suit.name]!")
-
- // Find a turf near or on the original location to bounce to
- if(P.starting)
- var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
- var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
- var/turf/curloc = get_turf(src)
-
- // redirect the projectile
- P.original = locate(new_x, new_y, P.z)
- P.starting = curloc
- P.current = curloc
- P.firer = src
- P.yo = new_y - curloc.y
- P.xo = new_x - curloc.x
-
- return -1 // complete projectile permutation
//Shrapnel
if (P.damage_type == BRUTE)
@@ -138,6 +134,20 @@ emp_act
return 1
return 0
+/mob/living/carbon/human/proc/check_reflect(var/def_zone) //Reflection checks for anything in your l_hand, r_hand, or wear_suit based on reflect_chance var of the object
+ if(wear_suit && istype(wear_suit, /obj/item/))
+ var/obj/item/I = wear_suit
+ if(I.IsReflect(def_zone) == 1)
+ return 1
+ if(l_hand && istype(l_hand, /obj/item/))
+ var/obj/item/I = l_hand
+ if(I.IsReflect(def_zone) == 1)
+ return 1
+ if(r_hand && istype(r_hand, /obj/item/))
+ var/obj/item/I = r_hand
+ if(I.IsReflect(def_zone) == 1)
+ return 1
+ return 0
/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack")
if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 7a5e2a5e644..59afd4794db 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -28,6 +28,7 @@ var/list/ai_list = list()
var/viewalerts = 0
var/lawcheck[1]
var/ioncheck[1]
+ var/lawchannel = "Common" // Default channel on which to state laws
var/icon/holo_icon//Default is assigned when AI is created.
var/obj/item/device/pda/ai/aiPDA = null
var/obj/item/device/multitool/aiMulti = null
@@ -413,9 +414,12 @@ var/list/ai_list = list()
// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
checklaws()
- if(href_list["say_word"])
- play_vox_word(href_list["say_word"], null, src)
- return
+ if (href_list["lawr"]) // Selects on which channel to state laws
+ var/setchannel = input(usr, "Specify channel.", "Channel selection") in list("State","Common","Science","Command","Medical","Engineering","Security","Supply","Binary","Holopad", "Cancel")
+ if(setchannel == "Cancel")
+ return
+ lawchannel = setchannel
+ checklaws()
if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
var/L = text2num(href_list["lawi"])
@@ -427,7 +431,11 @@ var/list/ai_list = list()
if (href_list["laws"]) // With how my law selection code works, I changed statelaws from a verb to a proc, and call it through my law selection panel. --NeoFite
statelaws()
-
+
+ if(href_list["say_word"])
+ play_vox_word(href_list["say_word"], null, src)
+ return
+
if (href_list["track"])
var/mob/target = locate(href_list["track"]) in mob_list
var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list
diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm
index 2d41ac43941..ab6b19e6190 100755
--- a/code/modules/mob/living/silicon/ai/laws.dm
+++ b/code/modules/mob/living/silicon/ai/laws.dm
@@ -51,24 +51,32 @@
src.laws_sanity_check()
src.laws.clear_supplied_laws()
-
-
-
-
/mob/living/silicon/ai/proc/statelaws() // -- TLE
// set category = "AI Commands"
// set name = "State Laws"
- src.say("Current Active Laws:")
+ /var/prefix = ""
+ switch(lawchannel)
+ if("Common") prefix = ";"
+ if("Science") prefix = ":n "
+ if("Command") prefix = ":c "
+ if("Medical") prefix = ":m "
+ if("Engineering") prefix = ":e "
+ if("Security") prefix = ":s "
+ if("Supply") prefix = ":u "
+ if("Binary") prefix = ":b "
+ if("Holopad") prefix = ":h "
+ else prefix = ""
+
+ src.say("[prefix]Current Active Laws:")
+
//src.laws_sanity_check()
//src.laws.show_laws(world)
var/number = 1
sleep(10)
-
-
if (src.laws.zeroth)
if (src.lawcheck[1] == "Yes") //This line and the similar lines below make sure you don't state a law unless you want to. --NeoFite
- src.say("0. [src.laws.zeroth]")
+ src.say("[prefix]0. [src.laws.zeroth]")
sleep(10)
for (var/index = 1, index <= src.laws.ion.len, index++)
@@ -76,7 +84,7 @@
var/num = ionnum()
if (length(law) > 0)
if (src.ioncheck[index] == "Yes")
- src.say("[num]. [law]")
+ src.say("[prefix][num]. [law]")
sleep(10)
for (var/index = 1, index <= src.laws.inherent.len, index++)
@@ -84,7 +92,7 @@
if (length(law) > 0)
if (src.lawcheck[index+1] == "Yes")
- src.say("[number]. [law]")
+ src.say("[prefix][number]. [law]")
sleep(10)
number++
@@ -95,7 +103,7 @@
if (length(law) > 0)
if(src.lawcheck.len >= number+1)
if (src.lawcheck[number+1] == "Yes")
- src.say("[number]. [law]")
+ src.say("[prefix][number]. [law]")
sleep(10)
number++
@@ -106,8 +114,6 @@
var/list = "Which laws do you want to include when stating them for the crew?
"
-
-
if (src.laws.zeroth)
if (!src.lawcheck[1])
src.lawcheck[1] = "No" //Given Law 0's usual nature, it defaults to NOT getting reported. --NeoFite
@@ -144,6 +150,8 @@
src.lawcheck[number+1] = "Yes"
list += {"[src.lawcheck[number+1]] [number]: [law] "}
number++
- list += {"
State Laws"}
+
+ list += {" Channel: [src.lawchannel] "}
+ list += {"State Laws"}
usr << browse(list, "window=laws")
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index d01f395fff4..09ca3dbfa22 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -253,6 +253,10 @@
stored_comms["wood"]++
stored_comms["wood"]++
stored_comms["wood"]++
+ else if(istype(W,/obj/item/weapon/broken_bottle))
+ stored_comms["glass"]++
+ stored_comms["glass"]++
+ stored_comms["glass"]++
else
continue
diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm
index 04961298fa2..84377b6adb4 100644
--- a/code/modules/mob/living/silicon/robot/laws.dm
+++ b/code/modules/mob/living/silicon/robot/laws.dm
@@ -108,3 +108,92 @@
if(2)
var/datum/ai_laws/lawtype = pick(typesof(/datum/ai_laws/default) - /datum/ai_laws/default)
laws = new lawtype()
+
+/mob/living/silicon/robot/proc/statelaws() // -- TLE
+// set category = "AI Commands"
+// set name = "State Laws"
+ src.say("Current Active Laws:")
+ //src.laws_sanity_check()
+ //src.laws.show_laws(world)
+ var/number = 1
+ sleep(10)
+
+ if (src.laws.zeroth)
+ if (src.lawcheck[1] == "Yes") //This line and the similar lines below make sure you don't state a law unless you want to. --NeoFite
+ src.say("0. [src.laws.zeroth]")
+ sleep(10)
+
+ for (var/index = 1, index <= src.laws.ion.len, index++)
+ var/law = src.laws.ion[index]
+ var/num = ionnum()
+ if (length(law) > 0)
+ if (src.ioncheck[index] == "Yes")
+ src.say("[num]. [law]")
+ sleep(10)
+
+ for (var/index = 1, index <= src.laws.inherent.len, index++)
+ var/law = src.laws.inherent[index]
+
+ if (length(law) > 0)
+ if (src.lawcheck[index+1] == "Yes")
+ src.say("[number]. [law]")
+ sleep(10)
+ number++
+
+
+ for (var/index = 1, index <= src.laws.supplied.len, index++)
+ var/law = src.laws.supplied[index]
+
+ if (length(law) > 0)
+ if(src.lawcheck.len >= number+1)
+ if (src.lawcheck[number+1] == "Yes")
+ src.say("[number]. [law]")
+ sleep(10)
+ number++
+
+
+/mob/living/silicon/robot/verb/checklaws() //Gives you a link-driven interface for deciding what laws the statelaws() proc will share with the crew. --NeoFite
+ set category = "Robot Commands"
+ set name = "State Laws"
+ var/list = "Which laws do you want to include when stating them for the crew?
"
+
+ if (src.laws.zeroth)
+ if (!src.lawcheck[1])
+ src.lawcheck[1] = "No" //Given Law 0's usual nature, it defaults to NOT getting reported. --NeoFite
+ list += {"[src.lawcheck[1]] 0: [src.laws.zeroth] "}
+
+ for (var/index = 1, index <= src.laws.ion.len, index++)
+ var/law = src.laws.ion[index]
+
+ if (length(law) > 0)
+
+
+ if (!src.ioncheck[index])
+ src.ioncheck[index] = "Yes"
+ list += {"[src.ioncheck[index]] [ionnum()]: [law] "}
+ src.ioncheck.len += 1
+
+ var/number = 1
+ for (var/index = 1, index <= src.laws.inherent.len, index++)
+ var/law = src.laws.inherent[index]
+
+ if (length(law) > 0)
+ src.lawcheck.len += 1
+
+ if (!src.lawcheck[number+1])
+ src.lawcheck[number+1] = "Yes"
+ list += {"[src.lawcheck[number+1]] [number]: [law] "}
+ number++
+
+ for (var/index = 1, index <= src.laws.supplied.len, index++)
+ var/law = src.laws.supplied[index]
+ if (length(law) > 0)
+ src.lawcheck.len += 1
+ if (!src.lawcheck[number+1])
+ src.lawcheck[number+1] = "Yes"
+ list += {"[src.lawcheck[number+1]] [number]: [law] "}
+ number++
+
+ list += {"
State Laws"}
+
+ usr << browse(list, "window=laws")
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 3b6fce3e0ed..1042f57f7bf 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -63,6 +63,8 @@
var/weapon_lock = 0
var/weaponlock_time = 120
var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default
+ var/lawcheck[1] //For stating laws.
+ var/ioncheck[1] //Ditto.
var/lockcharge //Used when locking down a borg to preserve cell charge
var/speed = 0 //Cause sec borgs gotta go fast //No they dont!
var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them.
@@ -565,7 +567,11 @@
..()
if (istype(AM, /obj/machinery/recharge_station))
var/obj/machinery/recharge_station/F = AM
- F.move_inside()
+ if(F.panel_open)
+ usr << "\blue Close the maintenance panel first."
+ return
+ else
+ F.move_inside()
if (!istype(AM, /atom/movable))
return
if (!now_pushing)
@@ -1228,6 +1234,25 @@
else
src << "Module isn't activated"
installed_modules()
+
+ if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
+ var/L = text2num(href_list["lawc"])
+ switch(lawcheck[L+1])
+ if ("Yes") lawcheck[L+1] = "No"
+ if ("No") lawcheck[L+1] = "Yes"
+// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
+ checklaws()
+
+ if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
+ var/L = text2num(href_list["lawi"])
+ switch(ioncheck[L])
+ if ("Yes") ioncheck[L] = "No"
+ if ("No") ioncheck[L] = "Yes"
+// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
+ checklaws()
+
+ if (href_list["laws"]) // With how my law selection code works, I changed statelaws from a verb to a proc, and call it through my law selection panel. --NeoFite
+ statelaws()
return
/mob/living/silicon/robot/proc/radio_menu()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index c6df3ac503a..69d5bde666b 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -235,6 +235,7 @@
src.modules += new /obj/item/weapon/melee/baton/robot(src)
src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src)
src.modules += new /obj/item/taperoll/police(src)
+ src.modules += new /obj/item/device/taperecorder(src)
src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src)
return
@@ -299,6 +300,7 @@
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/weapon/pen/robopen(src)
src.modules += new /obj/item/weapon/form_printer(src)
+ src.modules += new /obj/item/device/taperecorder(src)
src.modules += new /obj/item/weapon/gripper/paperwork(src)
src.emag = new /obj/item/weapon/stamp/denied(src)
@@ -395,6 +397,7 @@
src.modules += new /obj/item/weapon/gripper(src)
src.modules += new /obj/item/weapon/matter_decompiler(src)
src.modules += new /obj/item/weapon/reagent_containers/spray/cleaner/drone(src)
+ src.modules += new /obj/item/weapon/soap(src)
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
src.emag.name = "Plasma Cutter"
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 6584e7ea1a7..a334782cce1 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -56,6 +56,7 @@ display round(lastgen) and plasmatank amount
var/open = 0
var/recent_fault = 0
var/power_output = 1
+ var/consumption = 0
/obj/machinery/power/port_gen/proc/HasFuel() //Placeholder for fuel check.
return 1
@@ -101,7 +102,7 @@ display round(lastgen) and plasmatank amount
var/sheet_path = /obj/item/stack/sheet/mineral/plasma
var/board_path = "/obj/item/weapon/circuitboard/pacman"
var/sheet_left = 0 // How much is left of the sheet
- var/time_per_sheet = 40
+ var/time_per_sheet = 260
var/heat = 0
/obj/machinery/power/port_gen/pacman/initialize()
@@ -114,8 +115,8 @@ display round(lastgen) and plasmatank amount
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
- component_parts += new /obj/item/stack/cable_coil(src)
- component_parts += new /obj/item/stack/cable_coil(src)
+ component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/stack/cable_coil(src, 1)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new board_path(src)
var/obj/sheet = new sheet_path(null)
@@ -128,16 +129,16 @@ display round(lastgen) and plasmatank amount
/obj/machinery/power/port_gen/pacman/RefreshParts()
var/temp_rating = 0
- var/temp_reliability = 0
+ var/consumption_coeff = 0
for(var/obj/item/weapon/stock_parts/SP in component_parts)
if(istype(SP, /obj/item/weapon/stock_parts/matter_bin))
max_sheets = SP.rating * SP.rating * 50
- else if(istype(SP, /obj/item/weapon/stock_parts/micro_laser) || istype(SP, /obj/item/weapon/stock_parts/capacitor))
+ else if(istype(SP, /obj/item/weapon/stock_parts/capacitor))
temp_rating += SP.rating
- for(var/obj/item/weapon/CP in component_parts)
- temp_reliability += CP.reliability
- reliability = min(round(temp_reliability / 4), 100)
- power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2))
+ else
+ consumption_coeff += SP.rating
+ power_gen = round(initial(power_gen) * temp_rating * 2)
+ consumption = consumption_coeff
/obj/machinery/power/port_gen/pacman/examine()
..()
@@ -160,7 +161,7 @@ display round(lastgen) and plasmatank amount
sheets -= amount
/obj/machinery/power/port_gen/pacman/UseFuel()
- var/needed_sheets = 1 / (time_per_sheet / power_output)
+ var/needed_sheets = 1 / (time_per_sheet * consumption / power_output)
var/temp = min(needed_sheets, sheet_left)
needed_sheets -= temp
sheet_left -= temp
@@ -175,9 +176,9 @@ display round(lastgen) and plasmatank amount
var/bias = 0
if (power_output > 4)
upper_limit = 400
- bias = power_output * 3
+ bias = power_output - consumption * (4 - consumption)
if (heat < lower_limit)
- heat += 3
+ heat += 4 - consumption
else
heat += rand(-7 + bias, 7 + bias)
if (heat < lower_limit)
@@ -191,7 +192,6 @@ display round(lastgen) and plasmatank amount
return
/obj/machinery/power/port_gen/pacman/handleInactive()
-
if (heat > 0)
heat = max(heat - 2, 0)
src.updateDialog()
@@ -215,45 +215,29 @@ display round(lastgen) and plasmatank amount
emagged = 1
emp_act(1)
else if(!active)
-
if(istype(O, /obj/item/weapon/wrench))
-
- if(!anchored)
+ if(!anchored && !isinspace())
connect_to_network()
user << "\blue You secure the generator to the floor."
+ anchored = 1
else
disconnect_from_network()
user << "\blue You unsecure the generator from the floor."
+ anchored = 0
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- anchored = !anchored
-
else if(istype(O, /obj/item/weapon/screwdriver))
- open = !open
+ panel_open = !panel_open
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(open)
- user << "\blue You open the access panel."
+ if(panel_open)
+ user << "You open the access panel."
else
- user << "\blue You close the access panel."
- else if(istype(O, /obj/item/weapon/crowbar) && open)
- var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
- for(var/obj/item/I in component_parts)
- if(I.reliability < 100)
- I.crit_fail = 1
- I.loc = src.loc
- while ( sheets > 0 )
- var/obj/item/stack/sheet/G = new sheet_path(src.loc)
-
- if ( sheets > 50 )
- G.amount = 50
- else
- G.amount = sheets
-
- sheets -= G.amount
-
- new_frame.state = 2
- new_frame.icon_state = "box_1"
- del(src)
+ user << "You close the access panel."
+ else if(istype(O, /obj/item/weapon/storage/part_replacer) && panel_open)
+ exchange_parts(user, O)
+ return
+ else if(istype(O, /obj/item/weapon/crowbar) && panel_open)
+ default_deconstruction_crowbar(O)
/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob)
..()
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 08b68f1156f..acc6311632c 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -22,6 +22,8 @@
var/chargemode = 0
var/chargecount = 0
var/chargelevel = 50000
+ var/input_level_max = 200000 // cap on input_level
+ var/output_level_max = 200000 // cap on output_level
var/online = 1
var/name_tag = null
var/obj/machinery/power/terminal/terminal = null
@@ -29,6 +31,16 @@
/obj/machinery/power/smes/New()
..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/smes(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ component_parts += new /obj/item/weapon/cell/high(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 5)
+ RefreshParts()
spawn(5)
if(!powernet)
connect_to_network()
@@ -49,7 +61,17 @@
updateicon()
return
-
+/obj/machinery/power/smes/RefreshParts()
+ var/IO = 0
+ var/C = 0
+ for(var/obj/item/weapon/stock_parts/capacitor/CP in component_parts)
+ IO += CP.rating
+ input_level_max = 200000 * IO
+ output_level_max = 200000 * IO
+ for(var/obj/item/weapon/cell/PC in component_parts)
+ C += PC.maxcharge
+ capacity = C / (15000) * 1e6
+
/obj/machinery/power/smes/proc/updateicon()
overlays.Cut()
if(stat & BROKEN) return
@@ -85,15 +107,139 @@
return
+/obj/machinery/power/smes/attackby(obj/item/I, mob/user)
+ //opening using screwdriver
+ if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), I))
+ update_icon()
+ return
+
+ //changing direction using wrench
+ if(default_change_direction_wrench(user, I))
+ terminal = null
+ var/turf/T = get_step(src, dir)
+ for(var/obj/machinery/power/terminal/term in T)
+ if(term && term.dir == turn(dir, 180))
+ terminal = term
+ terminal.master = src
+ user << "Terminal found."
+ break
+ if(!terminal)
+ user << "No power source found."
+ return
+ stat &= ~BROKEN
+ update_icon()
+ return
+
+ //exchanging parts using the RPE
+ if(exchange_parts(user, I))
+ return
+
+ //building and linking a terminal
+ if(istype(I, /obj/item/stack/cable_coil))
+ var/dir = get_dir(user,src)
+ if(dir & (dir-1))//we don't want diagonal click
+ return
+
+ if(terminal) //is there already a terminal ?
+ user << "This SMES already have a power terminal!"
+ return
+
+ if(!panel_open) //is the panel open ?
+ user << "You must open the maintenance panel first!"
+ return
+
+ var/turf/T = get_turf(user)
+ if (T.intact) //is the floor plating removed ?
+ user << "You must first remove the floor plating!"
+ return
+
+
+ var/obj/item/stack/cable_coil/C = I
+ if(C.amount < 10)
+ user << "You need more wires."
+ return
+
+ user << "You start building the power terminal..."
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+
+ if(do_after(user, 20) && C.amount >= 10)
+ var/obj/structure/cable/N = T.get_cable_node() //get the connecting node cable, if there's one
+ if (prob(50) && electrocute_mob(usr, N, N)) //animate the electrocution if uncautious and unlucky
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ return
+
+ C.use(10)
+ user.visible_message(\
+ "[user.name] has built a power terminal!",\
+ "You build the power terminal.")
+
+ //build the terminal and link it to the network
+ make_terminal(T)
+ terminal.connect_to_network()
+ return
+
+ //disassembling the terminal
+ if(istype(I, /obj/item/weapon/wirecutters) && terminal && panel_open)
+ var/turf/T = get_turf(terminal)
+ if (T.intact) //is the floor plating removed ?
+ user << "You must first expose the power terminal!"
+ return
+
+ user << "You begin to dismantle the power terminal..."
+ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+
+ if(do_after(user, 50))
+ if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) //animate the electrocution if uncautious and unlucky
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ return
+
+ //give the wires back and delete the terminal
+ new /obj/item/stack/cable_coil(T,10)
+ user.visible_message(\
+ "[user.name] cuts the cables and dismantles the power terminal.",\
+ "You cut the cables and dismantle the power terminal.")
+ charging = 0 //stop inputting, since we have don't have a terminal anymore
+ del(terminal)
+ return
+
+ //crowbarring it !
+ default_deconstruction_crowbar(I)
+
+/obj/machinery/power/smes/Destroy()
+ if(ticker && ticker.current_state == GAME_STATE_PLAYING)
+ var/area/area = get_area(src)
+ message_admins("SMES deleted at ([area.name])")
+ log_game("SMES deleted at ([area.name])")
+ investigate_log("deleted at ([area.name])","singulo")
+ if(terminal)
+ disconnect_terminal()
+ ..()
+
+// create a terminal object pointing towards the SMES
+// wires will attach to this
+/obj/machinery/power/smes/proc/make_terminal(var/turf/T)
+ terminal = new/obj/machinery/power/terminal(T)
+ terminal.dir = get_dir(T,src)
+ terminal.master = src
+
+/obj/machinery/power/smes/proc/disconnect_terminal()
+ if(terminal)
+ terminal.master = null
+ terminal = null
+
/obj/machinery/power/smes/proc/chargedisplay()
- return round(5.5*charge/(capacity ? capacity : 5e6))
+ return round(5.5*charge/capacity)
#define SMESRATE 0.05 // rate of internal charge to external power
/obj/machinery/power/smes/process()
-
- if(stat & BROKEN) return
+ if(stat & BROKEN)
+ return
//store machine state to see if we need to update the icon overlays
var/last_disp = chargedisplay()
@@ -205,10 +351,10 @@
data["charging"] = charging
data["chargeMode"] = chargemode
data["chargeLevel"] = chargelevel
- data["chargeMax"] = SMESMAXCHARGELEVEL
+ data["chargeMax"] = input_level_max
data["outputOnline"] = online
data["outputLevel"] = output
- data["outputMax"] = SMESMAXOUTPUT
+ data["outputMax"] = output_level_max
data["outputLoad"] = round(loaddemand)
// update the ui if it exists, returns null if no ui is passed/found
@@ -254,20 +400,20 @@
if("min")
chargelevel = 0
if("max")
- chargelevel = SMESMAXCHARGELEVEL //30000
+ chargelevel = input_level_max //30000
if("set")
- chargelevel = input(usr, "Enter new input level (0-[SMESMAXCHARGELEVEL])", "SMES Input Power Control", chargelevel) as num
- chargelevel = max(0, min(SMESMAXCHARGELEVEL, chargelevel)) // clamp to range
+ chargelevel = input(usr, "Enter new input level (0-[input_level_max])", "SMES Input Power Control", chargelevel) as num
+ chargelevel = max(0, min(input_level_max, chargelevel)) // clamp to range
else if( href_list["output"] )
switch( href_list["output"] )
if("min")
output = 0
if("max")
- output = SMESMAXOUTPUT //30000
+ output = output_level_max //30000
if("set")
- output = input(usr, "Enter new output level (0-[SMESMAXOUTPUT])", "SMES Output Power Control", output) as num
- output = max(0, min(SMESMAXOUTPUT, output)) // clamp to range
+ output = input(usr, "Enter new output level (0-[output_level_max])", "SMES Output Power Control", output) as num
+ output = max(0, min(output_level_max, output)) // clamp to range
investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo")
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 45461b7a69a..706ef2a2011 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -118,7 +118,8 @@
name = "\improper Bulldog shotgun"
desc = "A compact, mag-fed semi-automatic shotgun for combat in narrow corridors. Compatible only with specialized magazines."
icon_state = "bulldog"
- item_state = "c20r"
+ item_state = "bulldog"
+ icon_override = 'icons/mob/in-hand/guns.dmi'
w_class = 3.0
origin_tech = "combat=5;materials=4;syndicate=6"
mag_type = "/obj/item/ammo_box/magazine/m12g"
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 11bee4d3547..895416b53f2 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -25,6 +25,7 @@
var/unhack_message = "You re-enable the safety safeguards, enabling the \"NT Standard\" mode."
var/list/broken_requirements = list()
var/broken_on_spawn = 0
+ var/recharge_delay = 15
/obj/machinery/chem_dispenser/proc/recharge()
@@ -48,7 +49,7 @@
if(recharged < 0)
recharge()
- recharged = 15
+ recharged = recharge_delay
else
recharged -= 1
@@ -180,7 +181,8 @@
var/obj/item/weapon/reagent_containers/glass/B = beaker
B.loc = loc
beaker = null
- icon_state = initial(icon_state)
+ if(!panel_open)
+ icon_state = initial(icon_state)
add_fingerprint(usr)
return 1 // update UIs attached to this object
@@ -266,6 +268,84 @@
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/obj/machinery/chem_dispenser/constructable
+ name = "portable chem dispenser"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "minidispenser"
+ energy = 5
+ max_energy = 5
+ amount = 5
+ recharge_delay = 30
+ dispensable_reagents = list()
+ var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen"),
+ list("lithium", "sugar", "sacid", "water", "copper", "mercury", "sodium"),
+ list("ethanol", "chlorine", "potassium", "aluminium", "radium", "fluorine", "iron"))
+
+/obj/machinery/chem_dispenser/constructable/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
+ component_parts += new /obj/item/weapon/cell/super(src)
+ RefreshParts()
+
+/obj/machinery/chem_dispenser/constructable/RefreshParts()
+ var/time = 0
+ var/temp_energy = 0
+ var/i
+ for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
+ temp_energy += M.rating
+ temp_energy--
+ max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest
+ for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
+ time += C.rating
+ for(var/obj/item/weapon/cell/P in component_parts)
+ time += round(P.maxcharge, 10000) / 10000
+ recharge_delay /= time/2 //delay between recharges, double the usual time on lowest 50% less than usual on highest
+ for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
+ for(i=1, i<=M.rating, i++)
+ dispensable_reagents = sortList(dispensable_reagents | special_reagents[i])
+
+/obj/machinery/chem_dispenser/constructable/attackby(var/obj/item/I, var/mob/user)
+ if(istype(I, /obj/item/weapon/reagent_containers/glass))
+ if(panel_open)
+ user << "Close the maintenance panel first."
+ return
+ ..()
+ else
+ ..()
+
+ if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I))
+ return
+
+ if(exchange_parts(user, I))
+ return
+
+ if(istype(I, /obj/item/weapon/wrench))
+ playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
+ if(anchored)
+ anchored = 0
+ user << "The [src] can now be moved."
+ else if(!anchored)
+ anchored = 1
+ user << "The [src] is now secured."
+
+ if(panel_open)
+ if(istype(I, /obj/item/weapon/crowbar))
+ if(beaker)
+ var/obj/item/weapon/reagent_containers/glass/B = beaker
+ B.loc = loc
+ beaker = null
+ default_deconstruction_crowbar(I)
+ return 1
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
/obj/machinery/chem_master
name = "ChemMaster 3000"
density = 1
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 23c26aa1b63..a391fa727c0 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -17,7 +17,7 @@
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob)
if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/rack) || istype(A, /obj/structure/closet) \
- || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink))
+ || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/portable_atmospherics/hydroponics))
return
if(istype(A, /obj/effect/proc_holder/spell))
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index 92a6ee3a97d..cffebbf3911 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -14,6 +14,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
var/diamond_amount = 0
var/uranium_amount = 0
var/max_material_amount = 75000.0
+ var/efficiency_coeff
New()
..()
@@ -36,7 +37,10 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
T += M.rating
max_material_amount = T * 75000.0
-
+ T = 0
+ for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
+ T += M.rating
+ efficiency_coeff = 2 ** (T - 1) //Only 1 manipulator here, you're making runtimes Razharas
blob_act()
if (prob(50))
@@ -52,33 +56,19 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
attackby(var/obj/item/O as obj, var/mob/user as mob)
if(exchange_parts(user, O))
return
+
if (shocked)
shock(user,50)
+
if (istype(O, /obj/item/weapon/screwdriver))
- if (!opened)
- opened = 1
+ if (default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter", O))
if(linked_console)
linked_console.linked_imprinter = null
linked_console = null
- icon_state = "circuit_imprinter_t"
- user << "You open the maintenance hatch of [src]."
- else
- opened = 0
- icon_state = "circuit_imprinter"
- user << "You close the maintenance hatch of [src]."
return
- if (opened)
+
+ if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
- M.state = 2
- M.icon_state = "box_1"
- for(var/obj/I in component_parts)
- if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
- reagents.trans_to(I, reagents.total_volume)
- if(I.reliability != 100 && crit_fail)
- I.crit_fail = 1
- I.loc = src.loc
if(g_amount >= 3750)
var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc)
G.amount = round(g_amount / 3750)
@@ -91,7 +81,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
if(uranium_amount >= 2000)
var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(src.loc)
G.amount = round(uranium_amount / 2000)
- del(src)
+ default_deconstruction_crowbar(O)
return 1
else
user << "\red You can't load the [src.name] while it's opened."
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index c86bca687ec..594e4186b2f 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -142,7 +142,7 @@ datum/design/scan_console
build_path = "/obj/item/weapon/circuitboard/scan_consolenew"
datum/design/comconsole
- name = "Circuit Design (Communications)"
+ name = "Circuit Design (Communications Console)"
desc = "Allows for the construction of circuit boards used to build a communications console."
id = "comconsole"
req_tech = list("programming" = 2, "magnets" = 2)
@@ -160,7 +160,7 @@ datum/design/idcardconsole
build_path = "/obj/item/weapon/circuitboard/card"
datum/design/crewconsole
- name = "Circuit Design (Crew monitoring computer)"
+ name = "Circuit Design (Crew Monitoring Computer)"
desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer."
id = "crewconsole"
req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2)
@@ -243,7 +243,7 @@ datum/design/clonecontrol
build_path = "/obj/item/weapon/circuitboard/cloning"
datum/design/clonepod
- name = "Circuit Design (Clone Pod)"
+ name = "Circuit Design (Cloning Pod)"
desc = "Allows for the construction of circuit boards used to build a Cloning Pod."
id = "clonepod"
req_tech = list("programming" = 3, "biotech" = 3)
@@ -260,10 +260,82 @@ datum/design/clonescanner
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/clonescanner"
+datum/design/teleport_station
+ name = "Circuit Design (Teleportation Station Board)"
+ desc = "Allows for the construction of circuit boards used to build a Teleporter Station."
+ id = "tele_station"
+ req_tech = list("programming" = 4, "bluespace" = 4, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/teleporter_station
+
+datum/design/teleport_hub
+ name = "Circuit Design (Teleportation Hub Board)"
+ desc = "Allows for the construction of circuit boards used to build a Teleportation Hub."
+ id = "tele_hub"
+ req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/teleporter_hub
+
+datum/design/telepad
+ name = "Circuit Design (Telepad Board)"
+ desc = "Allows for the construction of circuit boards used to build a Telepad."
+ id = "telepad"
+ req_tech = list("programming" = 4, "bluespace" = 4, "materials" = 3, "engineering" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/telesci_pad"
+
+datum/design/sleeper
+ name = "Circuit Design (Sleeper Board)"
+ desc = "Allows for the construction of circuit boards used to build a Sleeper."
+ id = "sleeper"
+ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/sleeper"
+
+datum/design/sleep_console
+ name = "Circuit Design (Sleeper Console)"
+ desc = "Allows for the construction of circuit boards used to build a Sleeper Console."
+ id = "sleeper"
+ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/sleep_console"
+
+datum/design/bodyscanner
+ name = "Circuit Design (Body Scanner Board)"
+ desc = "Allows for the construction of circuit boards used to build a Body Scanner."
+ id = "sleeper"
+ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/bodyscanner"
+
+datum/design/sleep_console
+ name = "Circuit Design (Body Scanner Console)"
+ desc = "Allows for the construction of circuit boards used to build a Body Scanner Console."
+ id = "sleeper"
+ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/bodyscanner_console"
+
+datum/design/cryotube
+ name = "Circuit Design (Cryotube Board)"
+ desc = "Allows for the construction of circuit boards used to build a Cryotube."
+ id = "cryotube"
+ req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/cryo_tube"
+
datum/design/arcadebattle
name = "Circuit Design (Battle Arcade Machine)"
desc = "Allows for the construction of circuit boards used to build a new arcade machine."
- id = "arcademachine"
+ id = "arcademachinebattle"
req_tech = list("programming" = 1)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20)
@@ -272,7 +344,7 @@ datum/design/arcadebattle
datum/design/orion_trail
name = "Circuit Design (Orion Trail Arcade Machine)"
desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine."
- id = "arcademachine"
+ id = "arcademachineonion"
req_tech = list("programming" = 2)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20)
@@ -333,8 +405,8 @@ datum/design/rdconsole
build_path = "/obj/item/weapon/circuitboard/rdconsole"
datum/design/ordercomp
- name = "Circuit Design (Supply ordering console)"
- desc = "Allows for the construction of circuit boards used to build a Supply ordering console."
+ name = "Circuit Design (Supply Ordering Console)"
+ desc = "Allows for the construction of circuit boards used to build a supply ordering console."
id = "ordercomp"
req_tech = list("programming" = 2)
build_type = IMPRINTER
@@ -342,8 +414,8 @@ datum/design/ordercomp
build_path = "/obj/item/weapon/circuitboard/ordercomp"
datum/design/supplycomp
- name = "Circuit Design (Supply shuttle console)"
- desc = "Allows for the construction of circuit boards used to build a Supply shuttle console."
+ name = "Circuit Design (Supply Shuttle Console)"
+ desc = "Allows for the construction of circuit boards used to build a supply shuttle console."
id = "supplycomp"
req_tech = list("programming" = 3)
build_type = IMPRINTER
@@ -377,6 +449,24 @@ datum/design/message_monitor
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/message_monitor"
+datum/design/comm_traffic
+ name = "Circuit Design (Telecommunications Traffic Control Console)"
+ desc = "Allows for the construction of circuit boards used to build a telecommunications traffic control console."
+ id = "comm_traffic"
+ req_tech = list("programming" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/comm_traffic"
+
+datum/design/telesci_console
+ name = "Circuit Design (Telepad Control Console Board)"
+ desc = "Allows for the construction of circuit boards used to build a telescience console."
+ id = "telesci_console"
+ req_tech = list("programming" = 3, "bluespace" = 2)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/telesci_console"
+
datum/design/aifixer
name = "Circuit Design (AI Integrity Restorer)"
desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer."
@@ -1235,6 +1325,59 @@ datum/design/light_replacer
////////////////////////////////////////
//////////////MISC Boards///////////////
////////////////////////////////////////
+datum/design/smes
+ name = "SMES Board"
+ desc = "The circuit board for a SMES."
+ id = "smes"
+ req_tech = list("programming" = 4, "power" = 5, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/smes
+
+datum/design/thermomachine
+ name = "Freezer/Heater Board"
+ desc = "The circuit board for a freezer/heater."
+ id = "thermomachine"
+ req_tech = list("programming" = 3, "plasmatech" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/thermomachine
+
+datum/design/biogenerator
+ name = "Biogenerator Board"
+ desc = "The circuit board for a biogenerator."
+ id = "biogenerator"
+ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/biogenerator
+
+datum/design/hydroponics
+ name = "Hydroponics Tray Board"
+ desc = "The circuit board for a hydroponics tray."
+ id = "hydro_tray"
+ req_tech = list("programming" = 1, "biotech" = 1)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = /obj/item/weapon/circuitboard/hydroponics
+
+datum/design/microwave
+ name = "Microwave Board"
+ desc = "The circuit board for a microwave."
+ id = "microwave"
+ req_tech = list("programming" = 1)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/microwave"
+
+datum/design/chem_dispenser
+ name = "Portable Chem Dispenser Board"
+ desc = "The circuit board for a portable chem dispenser."
+ id = "chem_dispenser"
+ req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4, "materials" = 4, "plasmatech" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/chem_dispenser"
datum/design/destructive_analyzer
name = "Destructive Analyzer Board"
@@ -1299,7 +1442,33 @@ datum/design/mechfab
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/mechfab"
-
+datum/design/cyborgrecharger
+ name = "Cyborg Recharger Board"
+ desc = "The circuit board for a Cyborg Recharger."
+ id = "cyborgrecharger"
+ req_tech = list("powerstorage" = 3, "engineering" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/cyborgrecharger"
+
+datum/design/mech_recharger
+ name = "Mech Bay Recharger Board"
+ desc = "The circuit board for a Mech Bay Recharger."
+ id = "mech_recharger"
+ req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/mech_recharger"
+
+datum/design/vendor
+ name = "Vendor Board"
+ desc = "The circuit board for a Vendor."
+ id = "vendor"
+ req_tech = list("programming" = 1)
+ build_type = IMPRINTER
+ materials = list("$glass" = 1000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/vendor"
+
/////////////////////////////////////////
////////////Power Stuff//////////////////
/////////////////////////////////////////
@@ -1334,7 +1503,6 @@ datum/design/mrspacman
materials = list("$glass" = 2000, "sacid" = 20)
build_path = "/obj/item/weapon/circuitboard/pacman/mrs"
-
/////////////////////////////////////////
////////////Medical Tools////////////////
/////////////////////////////////////////
@@ -1865,8 +2033,7 @@ datum/design/telepad_beacon
build_type = PROTOLATHE
materials = list ("$metal" = 2000, "$glass" = 1750, "$silver" = 500)
build_path = "/obj/item/device/telepad_beacon"
-
-
+
datum/design/bag_holding
name = "Bag of Holding"
desc = "A backpack that opens into a localized pocket of Blue Space."
@@ -1876,6 +2043,25 @@ datum/design/bag_holding
materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250)
reliability_base = 80
build_path = "/obj/item/weapon/storage/backpack/holding"
+
+datum/design/bluespace_crystal
+ name = "Artificial Bluespace Crystal"
+ desc = "A small blue crystal with mystical properties."
+ id = "bluespace_crystal"
+ req_tech = list("bluespace" = 4, "materials" = 6)
+ build_type = PROTOLATHE
+ materials = list("$gold" = 1500, "$diamond" = 3000, "$plasma" = 1500)
+ reliability_base = 100
+ build_path = "/obj/item/bluespace_crystal/artificial"
+
+datum/design/telesci_sps
+ name = "SPS Device"
+ desc = "A device that can track its position at all times."
+ id = "telesci_sps"
+ req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3)
+ build_type = PROTOLATHE
+ materials = list("$metal" = 500, "$glass" = 1000)
+ build_path = /obj/item/device/sps
/////////////////////////////////////////
/////////////////HUDs////////////////////
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index 1d643871293..da6538f1c48 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -11,7 +11,7 @@ Note: Must be placed within 3 tiles of the R&D Console
name = "Destructive Analyzer"
icon_state = "d_analyzer"
var/obj/item/weapon/loaded_item = null
- var/decon_mod = 1
+ var/decon_mod = 0
/obj/machinery/r_n_d/destructive_analyzer/New()
..()
@@ -24,9 +24,8 @@ Note: Must be placed within 3 tiles of the R&D Console
/obj/machinery/r_n_d/destructive_analyzer/RefreshParts()
var/T = 0
- for(var/obj/item/weapon/stock_parts/S in src)
- T += S.rating * 0.1
- T = between (0, T, 1)
+ for(var/obj/item/weapon/stock_parts/S in component_parts)
+ T += S.rating
decon_mod = T
/obj/machinery/r_n_d/destructive_analyzer/meteorhit()
@@ -43,28 +42,20 @@ Note: Must be placed within 3 tiles of the R&D Console
/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/O as obj, var/mob/user as mob)
if (shocked)
shock(user,50)
+
if (istype(O, /obj/item/weapon/screwdriver))
- if (!opened)
- opened = 1
+ if (default_deconstruction_screwdriver(user, "d_analyzer_t", "d_analyzer", O))
if(linked_console)
linked_console.linked_destroy = null
linked_console = null
- icon_state = "d_analyzer_t"
- user << "You open the maintenance hatch of [src]."
- else
- opened = 0
- icon_state = "d_analyzer"
- user << "You close the maintenance hatch of [src]."
- return
- if (opened)
+ return 1
+
+ if(exchange_parts(user, O))
+ return 1
+
+ if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
- M.state = 2
- M.icon_state = "box_1"
- for(var/obj/I in component_parts)
- I.loc = src.loc
- del(src)
+ default_deconstruction_crowbar(O)
return 1
else
user << "\red You can't load the [src.name] while it's opened."
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index 0e1909ec474..66e02cc8515 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -22,6 +22,7 @@ Note: Must be placed west/left of and R&D console to function.
var/uranium_amount = 0.0
var/diamond_amount = 0.0
var/clown_amount = 0.0
+ var/efficiency_coeff
/obj/machinery/r_n_d/protolathe/New()
@@ -50,33 +51,30 @@ Note: Must be placed west/left of and R&D console to function.
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
T += M.rating
max_material_storage = T * 75000
+ T = 0
+ for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
+ T += (M.rating/3)
+ efficiency_coeff = max(T, 1)
/obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(exchange_parts(user, O))
- return
if (shocked)
- shock(user,50)
+ shock(user,50)
+
+ if(exchange_parts(user, O))
+ return 1
+
if (O.is_open_container())
- return
+ return 1
+
if (istype(O, /obj/item/weapon/screwdriver))
- if (!opened)
- opened = 1
+ if (default_deconstruction_screwdriver(user, "protolathe_t", "protolathe", O))
if(linked_console)
- linked_console.linked_lathe = null
+ linked_console.linked_imprinter = null
linked_console = null
- icon_state = "protolathe_t"
- user << "You open the maintenance hatch of [src]."
- else
- opened = 0
- icon_state = "protolathe"
- user << "You close the maintenance hatch of [src]."
- return
- if (opened)
+ return 1
+
+ if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
- M.state = 2
- M.icon_state = "box_1"
for(var/obj/I in component_parts)
if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
reagents.trans_to(I, reagents.total_volume)
@@ -110,7 +108,7 @@ Note: Must be placed west/left of and R&D console to function.
if(clown_amount >= 2000)
var/obj/item/stack/sheet/mineral/clown/G = new /obj/item/stack/sheet/mineral/clown(src.loc)
G.amount = round(clown_amount / G.perunit)
- del(src)
+ default_deconstruction_crowbar(O)
return 1
else
user << "\red You can't load the [src.name] while it's opened."
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 6bc69d3fc47..269196a05f3 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -274,7 +274,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
usr <<"\red The destructive analyzer appears to be empty."
screen = 1.0
return
- if(linked_destroy.loaded_item.reliability >= 90)
+ if((linked_destroy.loaded_item.reliability >= 99 - (linked_destroy.decon_mod * 3)))
var/list/temp_tech = linked_destroy.ConvertReqString2List(linked_destroy.loaded_item.origin_tech)
for(var/T in temp_tech)
files.UpdateTech(T, temp_tech[T])
@@ -349,7 +349,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
for(var/datum/design/D in files.known_designs)
if(D.id == href_list["build"])
being_built = D
- break
+ break
if(being_built)
var/power = 2000
for(var/M in being_built.materials)
@@ -358,6 +358,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
screen = 0.3
linked_lathe.busy = 1
flick("protolathe_n",linked_lathe)
+ var/prot_efficiency = linked_lathe.efficiency_coeff
var/key = usr.key //so we don't lose the info during the spawn delay
spawn(16)
use_power(power)
@@ -365,25 +366,25 @@ won't update every console in existence) but it's more of a hassle to do. Also,
for(var/M in being_built.materials)
switch(M)
if("$metal")
- linked_lathe.m_amount = max(0, (linked_lathe.m_amount-being_built.materials[M]))
+ linked_lathe.m_amount = max(0, (linked_lathe.m_amount - (being_built.materials[M] / prot_efficiency)))
if("$glass")
- linked_lathe.g_amount = max(0, (linked_lathe.g_amount-being_built.materials[M]))
+ linked_lathe.g_amount = max(0, (linked_lathe.g_amount - (being_built.materials[M] / prot_efficiency)))
if("$plasteel")
- linked_lathe.plasteel_amount = max(0, (linked_lathe.plasteel_amount-being_built.materials[M]))
+ linked_lathe.plasteel_amount = max(0, (linked_lathe.plasteel_amount - (being_built.materials[M] / prot_efficiency)))
if("$gold")
- linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-being_built.materials[M]))
+ linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount - (being_built.materials[M] / prot_efficiency)))
if("$silver")
- linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-being_built.materials[M]))
+ linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount - (being_built.materials[M] / prot_efficiency)))
if("$plasma")
- linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-being_built.materials[M]))
+ linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount - (being_built.materials[M] / prot_efficiency)))
if("$uranium")
- linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-being_built.materials[M]))
+ linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount - (being_built.materials[M] / prot_efficiency)))
if("$diamond")
- linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-being_built.materials[M]))
+ linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount - (being_built.materials[M] / prot_efficiency)))
if("$clown")
- linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-being_built.materials[M]))
+ linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount - (being_built.materials[M] / prot_efficiency)))
else
- linked_lathe.reagents.remove_reagent(M, being_built.materials[M])
+ linked_lathe.reagents.remove_reagent(M, (being_built.materials[M] / prot_efficiency))
if(being_built.build_path)
var/obj/new_item = new being_built.build_path(src)
@@ -416,20 +417,21 @@ won't update every console in existence) but it's more of a hassle to do. Also,
screen = 0.4
linked_imprinter.busy = 1
flick("circuit_imprinter_ani",linked_imprinter)
+ var/imprinter_efficiency = linked_imprinter.efficiency_coeff
spawn(16)
use_power(power)
for(var/M in being_built.materials)
switch(M)
if("$glass")
- linked_imprinter.g_amount = max(0, (linked_imprinter.g_amount-being_built.materials[M]))
+ linked_imprinter.g_amount = max(0, linked_imprinter.g_amount - (being_built.materials[M] / imprinter_efficiency))
if("$gold")
- linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M]))
+ linked_imprinter.gold_amount = max(0, linked_imprinter.gold_amount - (being_built.materials[M] / imprinter_efficiency))
if("$diamond")
- linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M]))
+ linked_imprinter.diamond_amount = max(0, linked_imprinter.diamond_amount - (being_built.materials[M] / imprinter_efficiency))
if("$uranium")
- linked_imprinter.uranium_amount = max(0, (linked_imprinter.uranium_amount-being_built.materials[M]))
+ linked_imprinter.uranium_amount = max(0, linked_imprinter.uranium_amount - (being_built.materials[M] / imprinter_efficiency))
else
- linked_imprinter.reagents.remove_reagent(M, being_built.materials[M])
+ linked_imprinter.reagents.remove_reagent(M, being_built.materials[M] / imprinter_efficiency)
var/obj/new_item = new being_built.build_path(src)
new_item.reliability = being_built.reliability
if(linked_imprinter.hacked) being_built.reliability = max((reliability / 2), 0)
@@ -728,28 +730,30 @@ won't update every console in existence) but it's more of a hassle to do. Also,
continue
var/temp_dat = "[D.name]"
var/check_materials = 1
+ var/prot_efficiency = linked_lathe.efficiency_coeff
for(var/M in D.materials)
- temp_dat += " [D.materials[M]] [CallMaterialName(M)]"
+ var neededmaterials = (D.materials[M] / prot_efficiency)
+ temp_dat += " [neededmaterials] [CallMaterialName(M)]"
if(copytext(M, 1, 2) == "$")
switch(M)
if("$glass")
- if(D.materials[M] > linked_lathe.g_amount) check_materials = 0
+ if((D.materials[M] / prot_efficiency) > linked_lathe.g_amount) check_materials = 0
if("$metal")
- if(D.materials[M] > linked_lathe.m_amount) check_materials = 0
+ if((D.materials[M] / prot_efficiency) > linked_lathe.m_amount) check_materials = 0
if("$plasteel")
- if(D.materials[M] > linked_lathe.plasteel_amount) check_materials = 0
+ if((D.materials[M] / prot_efficiency) > linked_lathe.plasteel_amount) check_materials = 0
if("$gold")
- if(D.materials[M] > linked_lathe.gold_amount) check_materials = 0
+ if((D.materials[M] / prot_efficiency) > linked_lathe.gold_amount) check_materials = 0
if("$silver")
- if(D.materials[M] > linked_lathe.silver_amount) check_materials = 0
+ if((D.materials[M] / prot_efficiency) > linked_lathe.silver_amount) check_materials = 0
if("$plasma")
- if(D.materials[M] > linked_lathe.plasma_amount) check_materials = 0
+ if((D.materials[M] / prot_efficiency) > linked_lathe.plasma_amount) check_materials = 0
if("$uranium")
- if(D.materials[M] > linked_lathe.uranium_amount) check_materials = 0
+ if((D.materials[M] / prot_efficiency) > linked_lathe.uranium_amount) check_materials = 0
if("$diamond")
- if(D.materials[M] > linked_lathe.diamond_amount) check_materials = 0
+ if((D.materials[M] / prot_efficiency) > linked_lathe.diamond_amount) check_materials = 0
if("$clown")
- if(D.materials[M] > linked_lathe.clown_amount) check_materials = 0
+ if((D.materials[M] / prot_efficiency) > linked_lathe.clown_amount) check_materials = 0
else if (!linked_lathe.reagents.has_reagent(M, D.materials[M]))
check_materials = 0
if (check_materials)
@@ -851,19 +855,21 @@ won't update every console in existence) but it's more of a hassle to do. Also,
continue
var/temp_dat = "[D.name]"
var/check_materials = 1
+ var/imp_efficiency = linked_imprinter.efficiency_coeff
for(var/M in D.materials)
- temp_dat += " [D.materials[M]] [CallMaterialName(M)]"
+ var/materialsneeded = (D.materials[M] / imp_efficiency)
+ temp_dat += " [materialsneeded] [CallMaterialName(M)]"
if(copytext(M, 1, 2) == "$")
switch(M)
if("$glass")
- if(D.materials[M] > linked_imprinter.g_amount) check_materials = 0
+ if((D.materials[M] / imp_efficiency) > linked_imprinter.g_amount) check_materials = 0
if("$gold")
- if(D.materials[M] > linked_imprinter.gold_amount) check_materials = 0
+ if((D.materials[M] / imp_efficiency) > linked_imprinter.gold_amount) check_materials = 0
if("$diamond")
- if(D.materials[M] > linked_imprinter.diamond_amount) check_materials = 0
+ if((D.materials[M] / imp_efficiency) > linked_imprinter.diamond_amount) check_materials = 0
if("$uranium")
- if(D.materials[M] > linked_imprinter.uranium_amount) check_materials = 0
- else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M]))
+ if((D.materials[M] / imp_efficiency) > linked_imprinter.uranium_amount) check_materials = 0
+ else if (!linked_imprinter.reagents.has_reagent(M, (D.materials[M] / imp_efficiency)))
check_materials = 0
if (check_materials)
dat += "* [temp_dat] "
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 7c712391fe4..109ab110d71 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -19,8 +19,8 @@
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/rdserver(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stack/cable_coil(src)
- component_parts += new /obj/item/stack/cable_coil(src)
+ component_parts += new /obj/item/stack/cable_coil(src,1)
+ component_parts += new /obj/item/stack/cable_coil(src,1)
RefreshParts()
src.initialize(); //Agouri
@@ -89,9 +89,7 @@
griefProtection()
..()
-
-
-//Backup files to centcomm to help admins recover data after greifer attacks
+// Backup files to CentComm to help admins recover data after griefer attacks
/obj/machinery/r_n_d/server/proc/griefProtection()
for(var/obj/machinery/r_n_d/server/centcom/C in machines)
for(var/datum/tech/T in files.known_tech)
@@ -101,7 +99,7 @@
C.files.RefreshResearch()
/obj/machinery/r_n_d/server/proc/produce_heat(heat_amt)
- if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater.
+ if(!(stat & (NOPOWER|BROKEN))) // Blatantly stolen from space heater.
var/turf/simulated/L = loc
if(istype(L))
var/datum/gas_mixture/env = L.return_air()
@@ -121,49 +119,35 @@
env.merge(removed)
/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(exchange_parts(user, O))
- return
if (disabled)
return
+
if (shocked)
shock(user,50)
- if (istype(O, /obj/item/weapon/screwdriver))
- if (!opened)
- opened = 1
- icon_state = "server_o"
- user << "You open the maintenance hatch of [src]."
- else
- opened = 0
- icon_state = "server"
- user << "You close the maintenance hatch of [src]."
- return
- if (opened)
+
+ if(istype(O, /obj/item/weapon/screwdriver))
+ default_deconstruction_screwdriver(user, "server_o", "server")
+ return 1
+
+ if(exchange_parts(user, O))
+ return 1
+
+ if (panel_open)
if(istype(O, /obj/item/weapon/crowbar))
griefProtection()
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
- M.state = 2
- M.icon_state = "box_1"
- for(var/obj/I in component_parts)
- if(I.reliability != 100 && crit_fail)
- I.crit_fail = 1
- I.loc = src.loc
- del(src)
+ default_deconstruction_crowbar(O)
return 1
/obj/machinery/r_n_d/server/attack_hand(mob/user as mob)
if (disabled)
return
+
if (shocked)
shock(user,50)
-
return
-
-
-
/obj/machinery/r_n_d/server/centcom
- name = "Centcom Central R&D Database"
+ name = "CentComm. Central R&D Database"
server_id = -1
/obj/machinery/r_n_d/server/centcom/initialize()
diff --git a/icons/mecha/mech_bay.dmi b/icons/mecha/mech_bay.dmi
index e696042ecde..6db26ae5dec 100644
Binary files a/icons/mecha/mech_bay.dmi and b/icons/mecha/mech_bay.dmi differ
diff --git a/icons/mob/in-hand/guns.dmi b/icons/mob/in-hand/guns.dmi
new file mode 100644
index 00000000000..8b4f0fa69cd
Binary files /dev/null and b/icons/mob/in-hand/guns.dmi differ
diff --git a/icons/mob/in-hand/swords.dmi b/icons/mob/in-hand/swords.dmi
new file mode 100644
index 00000000000..7d5baa533f8
Binary files /dev/null and b/icons/mob/in-hand/swords.dmi differ
diff --git a/icons/mob/species/skrell/helmet.dmi b/icons/mob/species/skrell/helmet.dmi
index 7f2525f8e4c..5d9485ca5a4 100644
Binary files a/icons/mob/species/skrell/helmet.dmi and b/icons/mob/species/skrell/helmet.dmi differ
diff --git a/icons/mob/species/skrell/suit.dmi b/icons/mob/species/skrell/suit.dmi
index 1e998bd8164..d09058125c6 100644
Binary files a/icons/mob/species/skrell/suit.dmi and b/icons/mob/species/skrell/suit.dmi differ
diff --git a/icons/mob/species/tajaran/helmet.dmi b/icons/mob/species/tajaran/helmet.dmi
index 39bbb392cd8..5d48f00ecf9 100644
Binary files a/icons/mob/species/tajaran/helmet.dmi and b/icons/mob/species/tajaran/helmet.dmi differ
diff --git a/icons/mob/species/tajaran/suit.dmi b/icons/mob/species/tajaran/suit.dmi
index d4c140f35ae..68f45185b68 100644
Binary files a/icons/mob/species/tajaran/suit.dmi and b/icons/mob/species/tajaran/suit.dmi differ
diff --git a/icons/mob/species/unathi/helmet.dmi b/icons/mob/species/unathi/helmet.dmi
index 163964f69f3..109a4ac7de2 100644
Binary files a/icons/mob/species/unathi/helmet.dmi and b/icons/mob/species/unathi/helmet.dmi differ
diff --git a/icons/mob/species/unathi/suit.dmi b/icons/mob/species/unathi/suit.dmi
index a729b3477df..6ddbaeadab9 100644
Binary files a/icons/mob/species/unathi/suit.dmi and b/icons/mob/species/unathi/suit.dmi differ
diff --git a/icons/obj/Cryogenic2.dmi b/icons/obj/Cryogenic2.dmi
index eee5c41d27f..b797b9eb737 100644
Binary files a/icons/obj/Cryogenic2.dmi and b/icons/obj/Cryogenic2.dmi differ
diff --git a/icons/obj/biogenerator.dmi b/icons/obj/biogenerator.dmi
index c65a9571b09..910d6b3c650 100644
Binary files a/icons/obj/biogenerator.dmi and b/icons/obj/biogenerator.dmi differ
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index 55aac381619..60a20753607 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ
diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi
index 4aa7f8777e4..a2b7d416055 100644
Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ
diff --git a/icons/obj/cloning.dmi b/icons/obj/cloning.dmi
index af0bb42e602..ada68297367 100644
Binary files a/icons/obj/cloning.dmi and b/icons/obj/cloning.dmi differ
diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi
index 39da904bd30..3350249c3f5 100644
Binary files a/icons/obj/computer.dmi and b/icons/obj/computer.dmi differ
diff --git a/icons/obj/cryogenics.dmi b/icons/obj/cryogenics.dmi
index e063421fd52..cf209b40ac9 100644
Binary files a/icons/obj/cryogenics.dmi and b/icons/obj/cryogenics.dmi differ
diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi
index 439880c4285..6e1e76f39b6 100644
Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index dc7b09ef488..2b8bef281c4 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi
index b0130821d4d..f0628147b4d 100644
Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ
diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi
index b16ee836726..cbfd74387cc 100755
Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ
diff --git a/icons/obj/telescience.dmi b/icons/obj/telescience.dmi
index b0bc8edb9d5..79e9dc4c723 100644
Binary files a/icons/obj/telescience.dmi and b/icons/obj/telescience.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
index 9e6d161ed15..c8af6b5d248 100755
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index daccc94a722..79e7b8cb110 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index efa0f284f6d..bc038ec76c5 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm
index eb0841eafb6..1372f2e085a 100644
--- a/maps/cyberiad.dmm
+++ b/maps/cyberiad.dmm
@@ -7,134 +7,134 @@
"aag" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area)
"aah" = (/turf/space,/area/syndicate_station/northeast)
"aai" = (/turf/simulated/wall/r_wall,/area)
-"aaj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area)
+"aaj" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
"aak" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area)
-"aal" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison)
+"aal" = (/obj/structure/table,/obj/item/weapon/dice/d20,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
"aam" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area)
-"aan" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aao" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aap" = (/obj/machinery/camera{c_tag = "Prison Bedroom"; dir = 2; network = list("Prison","SS13")},/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor,/area/security/prison)
+"aan" = (/obj/structure/stool,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aao" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aap" = (/obj/structure/stool,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
"aaq" = (/turf/simulated/wall,/area)
-"aar" = (/obj/item/clothing/suit/ianshirt,/obj/machinery/computer/arcade,/turf/simulated/floor,/area/security/prison)
-"aas" = (/obj/structure/stool,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aat" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aau" = (/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/security/prison)
-"aav" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/security/prison)
-"aaw" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/security/prison)
-"aax" = (/obj/structure/stool/bed,/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/security/prison)
-"aay" = (/turf/simulated/floor,/area/security/prison)
-"aaz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaA" = (/obj/machinery/door/airlock/glass{name = "Bedroom"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor,/area/security/prison)
-"aaB" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaC" = (/obj/machinery/washing_machine,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/security/prison)
-"aaD" = (/obj/machinery/newscaster{pixel_y = -28},/obj/structure/table,/obj/item/weapon/pen{layer = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
+"aar" = (/obj/structure/table,/obj/item/weapon/dice,/obj/item/device/radio/intercom{desc = "Talk... listen through this."; name = "Station Intercom (Brig Radio)"; pixel_x = -28; pixel_y = 0; wires = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/security/permabrig)
+"aas" = (/obj/machinery/newscaster{pixel_y = -28},/obj/structure/table,/obj/item/weapon/pen{layer = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aat" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aau" = (/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/security/permabrig)
+"aav" = (/obj/machinery/washing_machine,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/security/permabrig)
+"aaw" = (/obj/structure/stool/bed,/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/security/permabrig)
+"aax" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aay" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aaz" = (/turf/simulated/floor,/area/security/permabrig)
+"aaA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aaB" = (/obj/machinery/door/airlock/glass{name = "Bedroom"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor,/area/security/permabrig)
+"aaC" = (/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/simulated/floor/plating,/area/security/permabrig)
+"aaD" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
"aaE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area)
-"aaF" = (/obj/structure/table,/obj/item/weapon/dice,/obj/item/device/radio/intercom{desc = "Talk... listen through this."; name = "Station Intercom (Brig Radio)"; pixel_x = -28; pixel_y = 0; wires = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/security/prison)
-"aaG" = (/obj/structure/stool,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaH" = (/obj/structure/table,/obj/item/weapon/dice/d20,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaI" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
+"aaF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aaG" = (/obj/machinery/vending/snack,/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aaH" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aaI" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
"aaJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area)
-"aaK" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{layer = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/security/prison)
-"aaL" = (/obj/item/weapon/cigbutt,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaM" = (/obj/machinery/light/small{dir = 1},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
-"aaN" = (/obj/item/weapon/soap/nanotrasen,/obj/structure/sink{pixel_y = 30},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
-"aaO" = (/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
+"aaK" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aaL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aaM" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aaN" = (/obj/machinery/shower{tag = "icon-shower (WEST)"; icon_state = "shower"; dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/permabrig)
+"aaO" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/permabrig)
"aaP" = (/turf/space,/area/xenos_station/northeast)
-"aaQ" = (/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/simulated/floor/plating,/area/security/prison)
-"aaR" = (/obj/machinery/vending/snack,/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaS" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaT" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaW" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaX" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaY" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aaZ" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Washroom"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
-"aba" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
-"abb" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/turf/simulated/floor/plating,/area/security/prison)
-"abc" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"abd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"abe" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"abf" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"abg" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"abh" = (/obj/machinery/camera{c_tag = "Prison Recreation Room"; dir = 1; network = list("Prison","SS13"); pixel_x = 22},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"abi" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"abj" = (/obj/machinery/door/airlock{name = "Toilet"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
-"abk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison)
-"abl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area)
-"abm" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
+"aaQ" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Washroom"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/permabrig)
+"aaR" = (/obj/machinery/light/small{dir = 1},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/permabrig)
+"aaS" = (/obj/item/weapon/soap/nanotrasen,/obj/structure/sink{pixel_y = 30},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/permabrig)
+"aaT" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{layer = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/security/permabrig)
+"aaU" = (/obj/item/weapon/cigbutt,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"aaV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig)
+"aaW" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/permabrig)
+"aaX" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/permabrig)
+"aaY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig)
+"aaZ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/permabrig)
+"aba" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig)
+"abb" = (/obj/machinery/door/airlock{name = "Toilet"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/permabrig)
+"abc" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"abd" = (/obj/machinery/camera{c_tag = "Prison Recreation Room"; dir = 1; network = list("Prison","SS13"); pixel_x = 22},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"abe" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"abf" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"abg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"abh" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"abi" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/permabrig)
+"abj" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/turf/simulated/floor/plating,/area/security/permabrig)
+"abk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/permabrig)
+"abl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/permabrig)
+"abm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/plating,/area/security/permabrig)
"abn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area)
-"abo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area)
-"abp" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
-"abq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/plating,/area/security/prison)
-"abr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison)
-"abs" = (/obj/machinery/flasher{id = "permflash"; pixel_x = 28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison)
+"abo" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/permabrig)
+"abp" = (/obj/machinery/flasher{id = "permflash"; pixel_x = 28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/permabrig)
+"abq" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plating,/area/security/permabrig)
+"abr" = (/obj/machinery/computer/area_atmos/area,/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/plating,/area/security/permabrig)
+"abs" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent{filled = 0.2},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/permabrig)
"abt" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area)
"abu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall/r_wall,/area)
-"abv" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
-"abw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison)
-"abx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison)
-"aby" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison)
-"abz" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/prison)
-"abA" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent{filled = 0.2},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/prison)
-"abB" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating,/area/security/prison)
-"abC" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 30},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plating,/area/security/prison)
-"abD" = (/obj/machinery/computer/area_atmos/area,/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/plating,/area/security/prison)
-"abE" = (/obj/machinery/camera{c_tag = "Prison Air Control"; dir = 6; network = list("Prison","SS13")},/turf/simulated/floor/plating,/area/security/prison)
-"abF" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/prison)
-"abG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/prison)
+"abv" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating,/area/security/permabrig)
+"abw" = (/obj/machinery/camera{c_tag = "Prison Solitary Confinement"; dir = 6; network = list("Prison","SS13")},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/security/permabrig)
+"abx" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/table,/obj/item/weapon/paper,/obj/machinery/light/small{dir = 1},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/security/permabrig)
+"aby" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/permabrig)
+"abz" = (/obj/machinery/camera{c_tag = "Prison Air Control"; dir = 6; network = list("Prison","SS13")},/turf/simulated/floor/plating,/area/security/permabrig)
+"abA" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/permabrig)
+"abB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig)
+"abC" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/permabrig)
+"abD" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/permabrig)
+"abE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
+"abF" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plating,/area/security/permabrig)
+"abG" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/permabrig)
"abH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area)
-"abI" = (/obj/machinery/camera{c_tag = "Prison Solitary Confinement"; dir = 6; network = list("Prison","SS13")},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/security/prison)
-"abJ" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/table,/obj/item/weapon/paper,/obj/machinery/light/small{dir = 1},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/security/prison)
-"abK" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor/plating,/area/security/prison)
-"abL" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact"; level = 2},/turf/simulated/floor/plating,/area/security/prison)
-"abM" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/plating,/area/security/prison)
-"abN" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plating,/area/security/prison)
-"abO" = (/turf/simulated/floor/plating,/area/security/prison)
-"abP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
-"abQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
-"abR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area)
-"abS" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/prison)
-"abT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
-"abU" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"abI" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor/plating,/area/security/permabrig)
+"abJ" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact"; level = 2},/turf/simulated/floor/plating,/area/security/permabrig)
+"abK" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plating,/area/security/permabrig)
+"abL" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plating,/area/security/permabrig)
+"abM" = (/turf/simulated/floor/plating,/area/security/permabrig)
+"abN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
+"abO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/permabrig)
+"abP" = (/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "dark"},/area/security/permabrig)
+"abQ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/permabrig)
+"abR" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/permabrig)
+"abS" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Execution Chamber"; req_access = null; req_access_txt = "1"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
+"abT" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
+"abU" = (/obj/structure/stool/bed,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/execution)
"abV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison/cell_block/C)
-"abW" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plating,/area/security/prison)
-"abX" = (/obj/structure/stool/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/prison)
+"abW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/interrogation)
+"abX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
"abY" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "Brig Secure Armory Exterior"; dir = 4; network = list("SS13")},/turf/space,/area)
-"abZ" = (/obj/structure/closet/secure_closet/injection,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"aca" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"acb" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"acc" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
+"abZ" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
+"aca" = (/obj/structure/table,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/glasses/sunglasses/blindfold,/obj/machinery/camera{c_tag = "Prison Execution Chamber"; dir = 4; network = list("Prison","SS13")},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
+"acb" = (/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
+"acc" = (/obj/structure/closet/secure_closet/injection,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
"acd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area)
-"ace" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
-"acf" = (/turf/simulated/wall/r_wall,/area/security/prison)
-"acg" = (/obj/structure/table,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/glasses/sunglasses/blindfold,/obj/machinery/camera{c_tag = "Prison Execution Chamber"; dir = 4; network = list("Prison","SS13")},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"ach" = (/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"aci" = (/obj/structure/stool/bed,/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/prison)
-"acj" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Execution Chamber"; req_access = null; req_access_txt = "1"},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"ack" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
-"acl" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"ace" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
+"acf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/permabrig)
+"acg" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
+"ach" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
+"aci" = (/obj/machinery/light/small{dir = 1},/obj/machinery/power/apc{dir = 1; name = "Execution APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
+"acj" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
+"ack" = (/obj/structure/table,/obj/item/weapon/reagent_containers/ld50_syringe/choral{pixel_x = 3; pixel_y = 10},/obj/item/weapon/reagent_containers/ld50_syringe/choral{pixel_x = 3; pixel_y = 6},/obj/item/weapon/reagent_containers/ld50_syringe/choral{pixel_x = 3; pixel_y = 2},/obj/machinery/light/small,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
+"acl" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
"acm" = (/obj/item/clothing/mask/muzzle/gag,/turf/simulated/floor/plating,/area)
-"acn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/security/hos)
+"acn" = (/obj/structure/lattice{layer = 2.4},/turf/simulated/floor/airless{icon_state = "circuit"},/area)
"aco" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/hos)
"acp" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{tag = "icon-vault (SOUTHWEST)"; icon_state = "vault"; dir = 10},/area/security/nuke_storage)
-"acq" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"acr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"acs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
+"acq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig)
+"acr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig)
+"acs" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/security/permabrig)
"act" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area)
-"acu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
+"acu" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/security/permabrig)
"acv" = (/turf/simulated/floor/plating,/area)
"acw" = (/obj/machinery/camera{c_tag = "Brig Podbay"; dir = 2; network = list("SS13")},/turf/simulated/floor/engine,/area/security/podbay)
"acx" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/engine,/area/security/podbay)
"acy" = (/obj/structure/spacepoddoor{luminosity = 3},/turf/simulated/floor/engine,/area/security/podbay)
-"acz" = (/obj/structure/lattice,/turf/simulated/floor/airless{icon_state = "circuit"},/area)
+"acz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos)
"acA" = (/obj/structure/grille,/obj/structure/sign/securearea,/turf/simulated/floor/airless{icon_state = "circuit"},/area)
"acB" = (/obj/structure/grille,/turf/simulated/floor/airless{icon_state = "circuit"},/area)
"acC" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
"acD" = (/obj/machinery/photocopier,/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
"acE" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/cartridge/detective,/obj/item/device/megaphone,/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
-"acF" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
-"acG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"acF" = (/obj/item/clothing/suit/ianshirt,/obj/machinery/computer/arcade,/turf/simulated/floor,/area/security/permabrig)
+"acG" = (/obj/machinery/camera{c_tag = "Prison Bedroom"; dir = 2; network = list("Prison","SS13")},/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor,/area/security/permabrig)
"acH" = (/turf/simulated/floor/engine,/area/security/podbay)
"acI" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/engine,/area/security/podbay)
"acJ" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/crowbar/red,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/security/podbay)
@@ -145,11 +145,11 @@
"acO" = (/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost")},/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Security"; departmentType = 5; name = "Head of Security RC"; pixel_y = 30},/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
"acP" = (/obj/structure/closet/secure_closet/hos,/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
"acQ" = (/turf/space,/area/xenos_station/northwest)
-"acR" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"acS" = (/obj/machinery/camera{c_tag = "Brig Interrogation Observation"; network = list("SS13")},/obj/machinery/computer/security/telescreen{layer = 4; name = "Observation Screen"; desc = "Used for observing the brig's interrogation room."; network = list("Interrogation"); pixel_x = 0; pixel_y = 32},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"acT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/computer/security/telescreen{layer = 4; name = "Observation Screen"; desc = "Used for observing the brig's interrogation room."; network = list("Interrogation"); pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"acU" = (/obj/item/device/radio/intercom{pixel_x = 27},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"acV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
+"acR" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/power/apc{dir = 1; name = "Interrogation APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/interrogation)
+"acS" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/permabrig)
+"acT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/security/permabrig)
+"acU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/security/permabrig)
+"acV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
"acW" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
"acX" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
"acY" = (/turf/simulated/floor{icon_state = "dark"},/area/security/securearmoury)
@@ -163,9 +163,9 @@
"adg" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/security/hos)
"adh" = (/obj/structure/table/woodentable,/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
"adi" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury)
-"adj" = (/obj/structure/table,/obj/item/weapon/reagent_containers/ld50_syringe/choral{pixel_x = 3; pixel_y = 10},/obj/item/weapon/reagent_containers/ld50_syringe/choral{pixel_x = 3; pixel_y = 6},/obj/item/weapon/reagent_containers/ld50_syringe/choral{pixel_x = 3; pixel_y = 2},/obj/machinery/light/small,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"adk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"adl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
+"adj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
+"adk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/turf/simulated/floor{icon_state = "dark"},/area/security/execution)
+"adl" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Brig"; name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/security/processing)
"adm" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury)
"adn" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury)
"ado" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/door_timer/cell_3{dir = 8; pixel_x = -32; pixel_y = 0},/turf/simulated/floor,/area/security/prison/cell_block/A)
@@ -183,12 +183,12 @@
"adA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/security/prison/cell_block/B)
"adB" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/security/prison/cell_block/C)
"adC" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/security/prison/cell_block/C)
-"adD" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"adE" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"adF" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"adG" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/security/prison)
-"adH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/security/prison)
-"adI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/security/prison)
+"adD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "Brig"; name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/security/processing)
+"adE" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/security/permabrig)
+"adF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
+"adG" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Prison Wing APC"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/permabrig)
+"adH" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/security/permabrig)
+"adI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/processing)
"adJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/security/prison/cell_block/C)
"adK" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; level = 2; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor,/area/security/prison/cell_block/C)
"adL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/security/nuke_storage)
@@ -202,8 +202,8 @@
"adT" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B)
"adU" = (/obj/structure/stool/bed/chair/comfy/black,/obj/effect/landmark/start{name = "Head of Security"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
"adV" = (/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
-"adW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Evidence Storage"; req_access = null; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"adX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light/small,/turf/simulated/floor,/area/security/prison)
+"adW" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/prisonlockers)
+"adX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/security/prisonlockers)
"adY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/prison/cell_block/B)
"adZ" = (/obj/machinery/flasher{id = "Cell 6"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison/cell_block/B)
"aea" = (/obj/machinery/door/window/brigdoor{dir = 2; name = "Secure Door"; req_access_txt = "61"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/device/radio/intercom{pixel_x = 28},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/security/prison/cell_block/C)
@@ -218,20 +218,20 @@
"aej" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/security/range)
"aek" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/range)
"ael" = (/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/security/range)
-"aem" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"aen" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Interrogation Observervation"; req_access = null; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/security/prison)
-"aeo" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
-"aep" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"aem" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/security/prisonlockers)
+"aen" = (/obj/structure/closet/secure_closet/brig,/turf/simulated/floor,/area/security/prisonlockers)
+"aeo" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/permabrig)
+"aep" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
"aeq" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A)
"aer" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
"aes" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
"aet" = (/obj/machinery/flasher{id = "Cell 1"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/security/prison/cell_block/A)
"aeu" = (/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor,/area/security/prison/cell_block/A)
-"aev" = (/obj/structure/stool/bed,/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
+"aev" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Interrogation"; req_access = null; req_access_txt = "63"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/security/interrogation)
"aew" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/security/nuke_storage)
"aex" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/light/small,/turf/simulated/floor{tag = "icon-vault (SOUTHWEST)"; icon_state = "vault"; dir = 10},/area/security/nuke_storage)
"aey" = (/obj/structure/safe,/obj/item/clothing/under/color/yellow,/obj/item/key,/obj/item/toy/katana,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/obj/item/weapon/paper/monitorkey,/turf/simulated/floor{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/security/nuke_storage)
-"aez" = (/obj/machinery/washing_machine,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/security/processing)
+"aez" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/hos)
"aeA" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall/r_wall,/area)
"aeB" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/device/radio/intercom{pixel_x = 28},/turf/simulated/floor,/area/security/prison/cell_block/A)
"aeC" = (/obj/machinery/flasher{id = "Cell 3"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
@@ -240,16 +240,16 @@
"aeF" = (/turf/simulated/floor,/area/security/range)
"aeG" = (/obj/machinery/magnetic_module,/obj/structure/target_stake,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/range)
"aeH" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/security/range)
-"aeI" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Brig Evidence Storage"; dir = 1; network = list("SS13")},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"aeJ" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/prison)
-"aeK" = (/obj/structure/closet/secure_closet/brig,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/security/prison)
-"aeL" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/security/prison)
-"aeM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/security/prison)
+"aeI" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
+"aeJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/security/prisonlockers)
+"aeK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/security/permabrig)
+"aeL" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/permabrig)
+"aeM" = (/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/permabrig)
"aeN" = (/obj/structure/table,/obj/machinery/door/firedoor,/obj/machinery/door/window/brigdoor{dir = 2; name = "Secure Door"; req_access_txt = "61"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/security/lobby)
-"aeO" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/prison)
-"aeP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/security/prison)
-"aeQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/prison)
-"aeR" = (/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/prison)
+"aeO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/permabrig)
+"aeP" = (/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
+"aeQ" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
+"aeR" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Interrogation Observervation"; req_access = null; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/security/interrogationobs)
"aeS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
"aeT" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A)
"aeU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor,/area/security/prison/cell_block/B)
@@ -264,13 +264,13 @@
"afd" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/structure/lattice,/turf/space,/area)
"afe" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/security/range)
"aff" = (/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/security/range)
-"afg" = (/obj/structure/closet/secure_closet/brig,/turf/simulated/floor,/area/security/prison)
-"afh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor,/area/security/prison)
-"afi" = (/obj/machinery/light/small,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/security/processing)
-"afj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
-"afk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/security/prison)
-"afl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/security/prison)
-"afm" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"afg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/prisonlockers)
+"afh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/prisonlockers)
+"afi" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/brigdoor{dir = 1; req_access_txt = "63"},/turf/simulated/floor,/area/security/prisonershuttle)
+"afj" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/security/prisonlockers)
+"afk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/security/permabrig)
+"afl" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Brig Evidence Storage"; dir = 1; network = list("SS13")},/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
+"afm" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
"afn" = (/obj/machinery/deployable/barrier,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
"afo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/deployable/barrier,/obj/effect/decal/warning_stripes/northeastcorner,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
"afp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/warning_stripes/north,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/armoury)
@@ -289,20 +289,20 @@
"afC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/security/prison/cell_block/A)
"afD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/security/prison/cell_block/A)
"afE" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Prison Cell Block C APC"; pixel_x = 25},/obj/machinery/camera{c_tag = "Brig Temporary Detainment"; dir = 8; pixel_x = 0; pixel_y = -22; network = list("SS13")},/turf/simulated/floor,/area/security/prison/cell_block/C)
-"afF" = (/obj/machinery/door_control{id = "prisonerrelease"; name = "Prisoner Release Lockdown"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/processing)
-"afG" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/processing)
+"afF" = (/obj/machinery/washing_machine,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/security/prisonershuttle)
+"afG" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prisonershuttle)
"afH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor,/area/security/prison/cell_block/C)
"afI" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk2"; icon_state = "catwalk2"},/area/solar/auxport)
-"afJ" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/prison)
-"afK" = (/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/prison)
-"afL" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Interrogation"; req_access = null; req_access_txt = "63"},/turf/simulated/floor,/area/security/prison)
-"afM" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/security/prison)
+"afJ" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
+"afK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/security/interrogationobs)
+"afL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/security/interrogationobs)
+"afM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/camera{c_tag = "Brig Prison Hallway"; dir = 4; network = list("Prison","SS13")},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
"afN" = (/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor,/area/security/prison/cell_block/C)
-"afO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
-"afP" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/security/prison)
-"afQ" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/security/prison)
-"afR" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Prison Wing APC"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
-"afS" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/processing)
+"afO" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor,/area/security/interrogationobs)
+"afP" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Evidence Storage APC"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
+"afQ" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
+"afR" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
+"afS" = (/obj/machinery/door_control{id = "prisonerrelease"; name = "Prisoner Release Lockdown"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prisonershuttle)
"afT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/deployable/barrier,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
"afU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/armoury)
"afV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/armoury)
@@ -323,13 +323,13 @@
"agk" = (/obj/structure/closet/secure_closet/brig{id = "Cell 3"; name = "Cell 3 Locker"},/obj/machinery/camera{c_tag = "Brig Cell 3"; dir = 2; network = list("SS13")},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison/cell_block/A)
"agl" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport)
"agm" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "red"},/area/security/brig)
-"agn" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/prison)
-"ago" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/prison)
+"agn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/security/interrogationobs)
+"ago" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/security/interrogationobs)
"agp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs)
-"agq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor,/area/security/prison)
+"agq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light/small,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Interrogation Observation APC"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor,/area/security/interrogationobs)
"agr" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{dir = 2; icon_state = "barber"},/area/civilian/barber)
-"ags" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
-"agt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/security/prison)
+"ags" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
+"agt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
"agu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore)
"agv" = (/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Armory APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/armoury)
"agw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/armoury)
@@ -347,14 +347,14 @@
"agI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/prison/cell_block/B)
"agJ" = (/turf/space,/area/shuttle/syndicate_elite/station)
"agK" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/detectives_office)
-"agL" = (/obj/structure/table/reinforced{tag = "icon-table"; icon_state = "table"},/obj/machinery/light/small/lamp,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/prison)
+"agL" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
"agM" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/detectives_office)
-"agN" = (/obj/structure/closet/secure_closet/brig,/turf/simulated/floor{icon_state = "red"},/area/security/prison)
-"agO" = (/obj/structure/closet/secure_closet/brig,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/security/prison)
-"agP" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/prison)
-"agQ" = (/turf/simulated/floor{icon_state = "red"},/area/security/prison)
-"agR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"},/area/security/prison)
-"agS" = (/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/prison)
+"agN" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Evidence Storage"; req_access = null; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
+"agO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/security/evidence)
+"agP" = (/obj/item/device/radio/intercom{pixel_x = 27},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/interrogationobs)
+"agQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/computer/security/telescreen{layer = 4; name = "Observation Screen"; desc = "Used for observing the brig's interrogation room."; network = list("Interrogation"); pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/interrogationobs)
+"agR" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "63"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/permabrig)
+"agS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig)
"agT" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = -30; pixel_y = 0},/obj/machinery/flasher/portable,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
"agU" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/machinery/flasher/portable,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
"agV" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/security/armoury)
@@ -376,13 +376,13 @@
"ahl" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport)
"ahm" = (/turf/simulated/floor/plating/airless,/obj/structure/cable,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk3"; icon_state = "catwalk3"},/area/solar/auxport)
"ahn" = (/obj/machinery/camera{c_tag = "Brig Firing Range East"; dir = 8; network = list("SS13")},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/range)
-"aho" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; level = 2; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/prison)
-"ahp" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/prison)
-"ahq" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/security/prison)
-"ahr" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "63"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
-"ahs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison)
-"aht" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison)
-"ahu" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "63"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"aho" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/permabrig)
+"ahp" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Doors"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "63"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/permabrig)
+"ahq" = (/obj/machinery/camera{c_tag = "Brig Interrogation Observation"; network = list("SS13")},/obj/machinery/computer/security/telescreen{layer = 4; name = "Observation Screen"; desc = "Used for observing the brig's interrogation room."; network = list("Interrogation"); pixel_x = 0; pixel_y = 32},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/interrogationobs)
+"ahr" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/interrogationobs)
+"ahs" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/interrogationobs)
+"aht" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/stack/medical/bruise_pack{pixel_x = 10; pixel_y = 2},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/interrogationobs)
+"ahu" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/security/prisonlockers)
"ahv" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0; tag = "icon-alarm0 (EAST)"},/obj/machinery/camera{c_tag = "Brig Armory"; dir = 4; network = list("SS13")},/obj/machinery/flasher/portable,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
"ahw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/flasher/portable,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
"ahx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/security/armoury)
@@ -411,11 +411,11 @@
"ahU" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/security/range)
"ahV" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/glasses/sunglasses{pixel_x = 3; pixel_y = 3},/turf/simulated/floor,/area/security/range)
"ahW" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/laser/practice,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/paper{info = "Directions: First you'll want to make sure there is a target stake in the center of the magnetic platform. Next, take an aluminum target from the crates back there and slip it into the stake. Make sure it clicks! Next, there should be a control console mounted on the wall somewhere in the room.
This control console dictates the behaviors of the magnetic platform, which can move your firing target around to simulate real-world combat situations. From here, you can turn off the magnets or adjust their electromagnetic levels and magnetic fields. The electricity level dictates the strength of the pull - you will usually want this to be the same value as the speed. The magnetic field level dictates how far the magnetic pull reaches.
Speed and path are the next two settings. Speed is associated with how fast the machine loops through the designated path. Paths dictate where the magnetic field will be centered at what times. There should be a pre-fabricated path input already. You can enable moving to observe how the path affects the way the stake moves. To script your own path, look at the following key:
You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
Equip yourself with a multi-tool
Use the multitool on each machine, that is the broadcaster, receiver and the relay.
Turn all the machines on, it has already been configured for you to listen on.
Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
Equip yourself with a multi-tool
Use the multitool on each machine, that is the broadcaster, receiver and the relay.
Turn all the machines on, it has already been configured for you to listen on.
Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
This control console dictates the behaviors of the magnetic platform, which can move your firing target around to simulate real-world combat situations. From here, you can turn off the magnets or adjust their electromagnetic levels and magnetic fields. The electricity level dictates the strength of the pull - you will usually want this to be the same value as the speed. The magnetic field level dictates how far the magnetic pull reaches.
Speed and path are the next two settings. Speed is associated with how fast the machine loops through the designated path. Paths dictate where the magnetic field will be centered at what times. There should be a pre-fabricated path input already. You can enable moving to observe how the path affects the way the stake moves. To script your own path, look at the following key:
You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
Equip yourself with a multi-tool
Use the multitool on each machine, that is the broadcaster, receiver and the relay.
Turn all the machines on, it has already been configured for you to listen on.
Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
Equip yourself with a multi-tool
Use the multitool on each machine, that is the broadcaster, receiver and the relay.
Turn all the machines on, it has already been configured for you to listen on.
Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
+{{/if}}
\ No newline at end of file
diff --git a/nano/templates/telescience_console.tmpl b/nano/templates/telescience_console.tmpl
index d10c5075fd2..48f26e74728 100644
--- a/nano/templates/telescience_console.tmpl
+++ b/nano/templates/telescience_console.tmpl
@@ -2,6 +2,7 @@
Title: Telescience Control UI
Used In File(s): \code\game\machinery\computer\telescience.dm
-->
+
Telescience Console
Coordinates:
@@ -18,3 +19,13 @@ Used In File(s): \code\game\machinery\computer\telescience.dm
{{:helper.link('Recalibrate', 'gear', {'recal': 1})}}