diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index a5a0d6ec33f..6cde7921d7c 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -248,6 +248,33 @@
opacity = 0
density = 0
+/obj/effect/sign/science//These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map
+ desc = "A warning sign which reads 'SCIENCE!'"
+ name = "SCIENCE!"
+ icon = 'decals.dmi'
+ icon_state = "science1"
+ anchored = 1.0
+ opacity = 0
+ density = 0
+
+/obj/effect/sign/chemistry
+ desc = "A warning sign which reads 'CHEMISTY'"
+ name = "CHEMISTRY"
+ icon = 'decals.dmi'
+ icon_state = "chemistry1"
+ anchored = 1.0
+ opacity = 0
+ density = 0
+
+/obj/effect/sign/botany
+ desc = "A warning sign which reads 'HYDROPONICS'"
+ name = "HYDROPONICS"
+ icon = 'decals.dmi'
+ icon_state = "hydro1"
+ anchored = 1.0
+ opacity = 0
+ density = 0
+
/obj/hud
name = "hud"
unacidable = 1
@@ -1089,6 +1116,46 @@
opacity = 1
anchored = 1
+/obj/structure/falsewall/gold
+ name = "gold wall"
+ desc = "A wall with gold plating. Swag"
+ icon_state = ""
+
+/obj/structure/falsewall/silver
+ name = "silver wall"
+ desc = "A wall with silver plating. Shiny"
+ icon_state = ""
+
+/obj/structure/falsewall/diamond
+ name = "diamond wall"
+ desc = "A wall with diamond plating. You monster"
+ icon_state = ""
+
+/obj/structure/falsewall/uranium
+ name = "uranium wall"
+ desc = "A wall with uranium plating. This is probably a bad idea"
+ icon_state = ""
+
+/obj/structure/falsewall/plasma
+ name = "plasma wall"
+ desc = "A wall with plasma plating. This is definately a bad idea"
+ icon_state = ""
+
+/obj/structure/falsewall/bananium
+ name = "bananium wall"
+ desc = "A wall with bananium plating. Honk"
+ icon_state = ""
+
+/obj/structure/falsewall/sand
+ name = "sandstone wall"
+ desc = "A wall with sandstone plating."
+ icon_state = ""
+
+/*/obj/structure/falsewall/wood
+ name = "wooden wall"
+ desc = "A wall with classy wooden paneling."
+ icon_state = ""*/
+
/obj/structure/falserwall
name = "r wall"
desc = "A huge chunk of reinforced metal used to seperate rooms."
diff --git a/code/defines/obj/clothing/costume.dm b/code/defines/obj/clothing/costume.dm
index 7e1d98fefc3..7e50baa5ff8 100644
--- a/code/defines/obj/clothing/costume.dm
+++ b/code/defines/obj/clothing/costume.dm
@@ -128,9 +128,15 @@
new /obj/item/clothing/mask/spiderman(src.loc)
del(src)*/
+/*
/obj/effect/landmark/costume/marisawizard/New()
new /obj/item/clothing/head/wizard/marisa(src.loc)
new/obj/item/clothing/suit/wizrobe/marisa(src.loc)
+ del(src)*/
+
+/obj/effect/landmark/costume/marisawizard/fake/New()
+ new /obj/item/clothing/head/wizard/marisa/fake(src.loc)
+ new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc)
del(src)
/obj/effect/landmark/costume/fakewizard/New()
diff --git a/code/defines/obj/clothing/gloves.dm b/code/defines/obj/clothing/gloves.dm
index f8c28d7e0aa..0e62744ff1c 100644
--- a/code/defines/obj/clothing/gloves.dm
+++ b/code/defines/obj/clothing/gloves.dm
@@ -148,7 +148,7 @@
color="yellow"
New()
- siemens_coefficient = pick(0,0,0.25,0.25,0.5,0.5,1)
+ siemens_coefficient = pick(0,0,0.25,0.5,0.5,0.75,1.5)
heat_transfer_coefficient = pick(0.01,0.1,0.25,0.25,0.5)
/obj/item/clothing/gloves/captain
diff --git a/code/defines/obj/vending.dm b/code/defines/obj/vending.dm
index 9978934ad28..cb9a64970e9 100644
--- a/code/defines/obj/vending.dm
+++ b/code/defines/obj/vending.dm
@@ -143,7 +143,7 @@
product_amounts = "4;4;4;4;4;12;5;4;2"
product_hidden = "/obj/item/weapon/reagent_containers/pill/tox;/obj/item/weapon/reagent_containers/pill/stox;/obj/item/weapon/reagent_containers/pill/antitox"
product_hideamt = "3;4;6"
- product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?"
+ product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!"
/obj/machinery/vending/wallmed1
name = "NanoMed"
@@ -243,7 +243,7 @@
product_hideamt = "20"
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
-/obj/machinery/vending/tool
+/obj/machinery/vending/tool//Who did this and why is it here? I don't even
name = "YouTool"
desc = "Tools for tools."
icon_state = "tool"
@@ -255,3 +255,17 @@
product_hideamt = "2;2"
product_coin = "/obj/item/clothing/gloves/yellow"
product_coin_amt = "1"
+
+/obj/machinery/vending/engivend//Source of tools and what have you for Engineering (Needed on account of the public auto-lathe being removed) -Sieve
+ name = "Engi-Vend"
+ desc = "Spare tool vending. What? Did you expect some witty description?"
+ icon_state = "engivend"
+ icon_deny = "engivend-deny"
+ req_access_txt = "10" //Engineering access
+ product_paths = "/obj/item/weapon/cable_coil/random;/obj/item/weapon/crowbar;/obj/item/weapon/weldingtool/largetank;/obj/item/weapon/wirecutters;/obj/item/weapon/wrench;/obj/item/device/t_scanner;/obj/item/device/multitool;/obj/item/weapon/airlock_electronics;/obj/item/weapon/module/power_control"
+ product_amounts = "10;5;3;5;5;5;3;5;5"
+ product_hidden = "/obj/item/weapon/weldingtool/hugetank;/obj/item/clothing/gloves/fyellow"
+ product_hideamt = "2;2"
+ product_coin = "/obj/item/weapon/storage/belt/utility"
+ product_coin_amt = "3"
+
diff --git a/code/defines/turf.dm b/code/defines/turf.dm
index 7e8eca55adf..1c838cb83f1 100644
--- a/code/defines/turf.dm
+++ b/code/defines/turf.dm
@@ -159,6 +159,7 @@
name = "wall"
desc = "A huge chunk of metal used to seperate rooms."
icon = 'walls.dmi'
+ var/mineral = "metal"
opacity = 1
density = 1
blocks_air = 1
@@ -168,6 +169,80 @@
var/walltype = "wall"
+/turf/simulated/wall/mineral
+ name = "mineral wall"
+ desc = "This shouldn't exist"
+ icon_state = ""
+ var/last_event = 0
+ var/active = null
+
+/turf/simulated/wall/mineral/New()
+ switch(mineral)
+ if("gold")
+ name = "gold wall"
+ desc = "A wall with gold plating. Swag!"
+ icon_state = "gold0"
+ walltype = "gold"
+// var/electro = 1
+// var/shocked = null
+ if("silver")
+ name = "silver wall"
+ desc = "A wall with silver plating. Shiny!"
+ icon_state = "silver0"
+ walltype = "silver"
+// var/electro = 0.75
+// var/shocked = null
+ if("diamond")
+ name = "diamond wall"
+ desc = "A wall with diamond plating. You monster."
+ icon_state = "diamond0"
+ walltype = "diamond"
+ if("uranium")
+ name = "uranium wall"
+ desc = "A wall with uranium plating. This is probably a bad idea."
+ icon_state = "uranium0"
+ walltype = "uranium"
+ if("plasma")
+ name = "plasma wall"
+ desc = "A wall with plasma plating. This is definately a bad idea."
+ icon_state = "plasma0"
+ walltype = "plasma"
+ if("clown")
+ name = "bananium wall"
+ desc = "A wall with bananium plating. Honk!"
+ icon_state = "clown0"
+ walltype = "clown"
+ if("sandstone")
+ name = "sandstone wall"
+ desc = "A wall with sandstone plating."
+ icon_state = "sandstone0"
+ walltype = "sandstone"
+ ..()
+
+/turf/simulated/wall/mineral/proc/radiate()
+ if(!active)
+ if(world.time > last_event+15)
+ active = 1
+ for(var/mob/living/L in range(3,src))
+ L.apply_effect(12,IRRADIATE,0)
+ for(var/turf/simulated/wall/mineral/T in range(3,src))
+ if(T.mineral == "uranium")
+ T.radiate()
+ last_event = world.time
+ active = null
+ return
+ return
+
+/*/turf/simulated/wall/mineral/proc/shock()
+ if (electrocute_mob(user, C, src))
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ return 1
+ else
+ return 0
+ */
+
/turf/simulated/wall/cult
name = "wall"
desc = "The patterns engraved on the wall seem to shift as you try to focus on them. You feel sick"
@@ -241,7 +316,7 @@
return L
-
+/*
/turf/simulated/wall/mineral
icon = 'mineral_walls.dmi'
walltype = "iron"
@@ -342,3 +417,4 @@
hardness -= toxinsToDeduce/100
CheckHardness()
+*/
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 4709a418309..44845b684ea 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -276,18 +276,19 @@
command_alert("High levels of radiation detected near the station. Please report to the Med-bay if you feel strange.", "Anomaly Alert")
world << sound('radiation.ogg')
for(var/mob/living/carbon/human/H in world)
- H.radiation += rand(5,25)
- if (prob(5))
- H.radiation += rand(30,50)
- if (prob(25))
- if (prob(75))
- randmutb(H)
- domutcheck(H,null,1)
- else
- randmutg(H)
- domutcheck(H,null,1)
+ if(istype(H,/mob/living/carbon/human))
+ H.apply_effect((rand(15,75)),IRRADIATE,0)
+ if (prob(5))
+ H.apply_effect((rand(90,150)),IRRADIATE,0)
+ if (prob(25))
+ if (prob(75))
+ randmutb(H)
+ domutcheck(H,null,1)
+ else
+ randmutg(H)
+ domutcheck(H,null,1)
for(var/mob/living/carbon/monkey/M in world)
- M.radiation += rand(5,25)
+ M.apply_effect((rand(15,75)),IRRADIATE,0)
//Changing this to affect the main station. Blame Urist. --Pete
/proc/prison_break() // -- Callagan
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index 2c436eda99e..7ce256f6fbe 100644
--- a/code/game/machinery/bots/ed209bot.dm
+++ b/code/game/machinery/bots/ed209bot.dm
@@ -15,6 +15,8 @@
var/lastfired = 0
var/shot_delay = 3 //.3 seconds between shots
+ var/lasercolor = ""
+ var/disabled = 0
//var/lasers = 0
@@ -68,11 +70,12 @@
item_state = "ed209_frame"
var/build_step = 0
var/created_name = "ED-209 Security Robot" //To preserve the name if it's a unique securitron I guess
+ var/lasercolor = ""
/obj/machinery/bot/ed209/New()
..()
- src.icon_state = "ed209[src.on]"
+ src.icon_state = "[lasercolor]ed209[src.on]"
spawn(3)
src.botcard = new /obj/item/weapon/card/id(src)
src.botcard.access = get_access("Detective")
@@ -82,10 +85,17 @@
if(radio_controller)
radio_controller.add_object(src, control_freq, filter = RADIO_SECBOT)
radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS)
+ if(lasercolor)
+ req_access = list(access_maint_tunnels,access_clown,access_mime)
+ arrest_type = 1
+ if(lasercolor == "b")
+ name = pick("BLUE BALLER","SANIC","BLUE KILLDEATH MURDERBOT")
+ if(lasercolor == "r")
+ name = pick("RED RAMPAGE","RED ROVER","RED KILLDEATH MURDERBOT")
/obj/machinery/bot/ed209/turn_on()
. = ..()
- src.icon_state = "ed209[src.on]"
+ src.icon_state = "[lasercolor]ed209[src.on]"
src.mode = SECBOT_IDLE
src.updateUsrDialog()
@@ -96,7 +106,7 @@
src.anchored = 0
src.mode = SECBOT_IDLE
walk_to(src,0)
- src.icon_state = "ed209[src.on]"
+ src.icon_state = "[lasercolor]ed209[src.on]"
src.updateUsrDialog()
/obj/machinery/bot/ed209/attack_hand(mob/user as mob)
@@ -181,7 +191,7 @@ Auto Patrol: []"},
src.anchored = 0
src.emagged = 1
src.on = 1
- src.icon_state = "ed209[src.on]"
+ src.icon_state = "[lasercolor]ed209[src.on]"
mode = SECBOT_IDLE
/obj/machinery/bot/ed209/process()
@@ -210,7 +220,7 @@ Auto Patrol: []"},
if (targets.len>0)
var/mob/t = pick(targets)
if (istype(t, /mob/living))
- if (t.stat!=2)
+ if ((t.stat!=2) && (t.lying != 1))
//src.speak("selected target: " + t.real_name)
src.shootAt(t)
switch(mode)
@@ -222,7 +232,8 @@ Auto Patrol: []"},
mode = SECBOT_START_PATROL // switch to patrol mode
if(SECBOT_HUNT) // hunting for perp
-
+ if(src.lasercolor)//Lasertag bots do not tase or arrest anyone, just patrol and shoot and whatnot
+ return
// if can't reach perp for long enough, go idle
if (src.frustration >= 8)
// for(var/mob/O in hearers(src, null))
@@ -236,9 +247,9 @@ Auto Patrol: []"},
if (target) // make sure target exists
if (get_dist(src, src.target) <= 1) // if right next to perp
playsound(src.loc, 'Egloves.ogg', 50, 1, -1)
- src.icon_state = "ed209-c"
+ src.icon_state = "[lasercolor]ed209-c"
spawn(2)
- src.icon_state = "ed209[src.on]"
+ src.icon_state = "[lasercolor]ed209[src.on]"
var/mob/living/carbon/M = src.target
var/maxstuns = 4
if (istype(M, /mob/living/carbon/human))
@@ -270,6 +281,8 @@ Auto Patrol: []"},
src.frustration = 0
if(SECBOT_PREP_ARREST) // preparing to arrest target
+ if(src.lasercolor)
+ return
if (!target)
mode = SECBOT_IDLE
src.anchored = 0
@@ -305,6 +318,8 @@ Auto Patrol: []"},
// src.speak(arrest_message)
if(SECBOT_ARREST) // arresting
+ if(src.lasercolor)
+ return
if (!target || src.target.handcuffed)
src.anchored = 0
mode = SECBOT_IDLE
@@ -640,6 +655,22 @@ Auto Patrol: []"},
if((istype(perp:wear_id, /obj/item/weapon/card/id/syndicate)) && src.idcheck)
threatcount -= 2
+ if(src.lasercolor == "b")//Lasertag turrets target the opposing team, how great is that? -Sieve
+ if(istype(perp.wear_suit, /obj/item/clothing/suit/redtag))
+ threatcount += 4
+ if((istype(perp:r_hand,/obj/item/weapon/gun/energy/laser/redtag)) || (istype(perp:l_hand,/obj/item/weapon/gun/energy/laser/redtag)))
+ threatcount += 4
+ if(istype(perp:belt, /obj/item/weapon/gun/energy/laser/redtag))
+ threatcount += 2
+
+ if(src.lasercolor == "r")
+ if(istype(perp.wear_suit, /obj/item/clothing/suit/bluetag))
+ threatcount += 4
+ if((istype(perp:r_hand,/obj/item/weapon/gun/energy/laser/bluetag)) || (istype(perp:l_hand,/obj/item/weapon/gun/energy/laser/bluetag)))
+ threatcount += 4
+ if(istype(perp:belt, /obj/item/weapon/gun/energy/laser/bluetag))
+ threatcount += 2
+
if (src.check_records)
for (var/datum/data/record/E in data_core.general)
var/perpname = perp.name
@@ -697,8 +728,15 @@ Auto Patrol: []"},
Sa.created_name = src.name
new /obj/item/device/assembly/prox_sensor(Tsec)
- var/obj/item/weapon/melee/baton/B = new /obj/item/weapon/melee/baton(Tsec)
- B.charges = 0
+ if(!lasercolor)
+ var/obj/item/weapon/gun/energy/taser/G = new /obj/item/weapon/gun/energy/taser(Tsec)
+ G.power_supply.charge = 0
+ else if(lasercolor == "b")
+ var/obj/item/weapon/gun/energy/laser/bluetag/G = new /obj/item/weapon/gun/energy/laser/bluetag(Tsec)
+ G.power_supply.charge = 0
+ else if(lasercolor == "r")
+ var/obj/item/weapon/gun/energy/laser/redtag/G = new /obj/item/weapon/gun/energy/laser/redtag(Tsec)
+ G.power_supply.charge = 0
if (prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
@@ -728,10 +766,21 @@ Auto Patrol: []"},
// playsound(src.loc, 'ed209_shoot.ogg', 50, 0)
var/obj/item/projectile/A
- if (src.emagged)
- A = new /obj/item/projectile/beam( loc )
- else
- A = new /obj/item/projectile/energy/electrode( loc )
+ if(!lasercolor)
+ if (src.emagged)
+ A = new /obj/item/projectile/beam( loc )
+ else
+ A = new /obj/item/projectile/energy/electrode( loc )
+ else if(lasercolor == "b")
+ if (src.emagged)
+ A = new /obj/item/projectile/energy/electrode( loc )
+ else
+ A = new /obj/item/projectile/bluetag( loc )
+ else if(lasercolor == "r")
+ if (src.emagged)
+ A = new /obj/item/projectile/energy/electrode( loc )
+ else
+ A = new /obj/item/projectile/redtag( loc )
if (!( istype(U, /turf) ))
//A = null
@@ -813,9 +862,25 @@ Auto Patrol: []"},
src.item_state = "ed209_shell"
src.icon_state = "ed209_shell"
del(W)
- else if((istype(W, /obj/item/weapon/weldingtool)) && (src.build_step == 3))
+ else if(istype(W, /obj/item/clothing/suit/bluetag) && (src.build_step == 2))
+ src.build_step++
+ user << "You add the armor to [src]!"
+ src.name = "vest/legs/frame assembly"
+ lasercolor = "b"
+ src.item_state = "[lasercolor]ed209_shell"
+ src.icon_state = "[lasercolor]ed209_shell"
+ del(W)
+ else if(istype(W, /obj/item/clothing/suit/redtag) && (src.build_step == 2))
+ src.build_step++
+ user << "You add the armor to [src]!"
+ src.name = "vest/legs/frame assembly"
+ lasercolor = "r"
+ src.item_state = "[lasercolor]ed209_shell"
+ src.icon_state = "[lasercolor]ed209_shell"
+ del(W)
+ else if(istype(W, /obj/item/weapon/weldingtool) && src.build_step == 3)
var/obj/item/weapon/weldingtool/WT = W
- if (WT.remove_fuel(0,user))
+ if(WT.remove_fuel(0,user))
src.build_step++
src.name = "shielded frame assembly"
user << "You welded the vest to [src]!"
@@ -823,15 +888,15 @@ Auto Patrol: []"},
src.build_step++
user << "You add the helmet to [src]!"
src.name = "covered and shielded frame assembly"
- src.item_state = "ed209_hat"
- src.icon_state = "ed209_hat"
+ src.item_state = "[lasercolor]ed209_hat"
+ src.icon_state = "[lasercolor]ed209_hat"
del(W)
else if(isprox(W) && (src.build_step == 5))
src.build_step++
user << "You add the prox sensor to [src]!"
src.name = "prox/covered and armed the frame assembly"
- src.item_state = "ed209_prox"
- src.icon_state = "ed209_prox"
+ src.item_state = "[lasercolor]ed209_prox"
+ src.icon_state = "[lasercolor]ed209_prox"
del(W)
else if(istype(W, /obj/item/weapon/cable_coil) && (src.build_step == 6) )
var/obj/item/weapon/cable_coil/coil = W
@@ -843,12 +908,26 @@ Auto Patrol: []"},
src.build_step++
user << "\blue You wire the ED-209 assembly!"
src.name = "Wired ED-209 Assembly"
- else if(istype(W, /obj/item/weapon/gun/energy/taser) && (src.build_step == 7))
+ else if(istype(W, /obj/item/weapon/gun/energy/taser) && (src.build_step == 7) && (!lasercolor))
src.build_step++
user << "You add the taser gun to [src]!"
src.name = "Taser/Wired ED-209 Assembly"
- src.item_state = "ed209_taser"
- src.icon_state = "ed209_taser"
+ src.item_state = "[lasercolor]ed209_taser"
+ src.icon_state = "[lasercolor]ed209_taser"
+ del(W)
+ else if(istype(W, /obj/item/weapon/gun/energy/laser/bluetag) && (src.build_step == 7) && (lasercolor == "b"))
+ src.build_step++
+ user << "You add the lasertag gun to [src]!"
+ src.name = "Bluetag ED-209 Assembly"
+ src.item_state = "[lasercolor]ed209_taser"
+ src.icon_state = "[lasercolor]ed209_taser"
+ del(W)
+ else if(istype(W, /obj/item/weapon/gun/energy/laser/redtag) && (src.build_step == 7) && (lasercolor == "r"))
+ src.build_step++
+ user << "You add the lasertag gun to [src]!"
+ src.name = "Redtag ED-209 Assembly"
+ src.item_state = "[lasercolor]ed209_taser"
+ src.icon_state = "[lasercolor]ed209_taser"
del(W)
else if(istype(W, /obj/item/weapon/screwdriver) && (src.build_step == 8) )
playsound(src.loc, 'Screwdriver.ogg', 100, 1)
@@ -865,6 +944,8 @@ Auto Patrol: []"},
var/obj/machinery/bot/ed209/S = new /obj/machinery/bot/ed209
S.loc = get_turf(src)
S.name = src.created_name
+ S.lasercolor = src.lasercolor
+ S.New()
del(W)
del(src)
@@ -878,3 +959,15 @@ Auto Patrol: []"},
src.created_name = t
+/obj/machinery/bot/ed209/bullet_act(var/obj/item/projectile/Proj)
+ if((src.lasercolor == "b") && (src.disabled == 0))
+ if(istype(Proj, /obj/item/projectile/redtag))
+ src.disabled = 1
+ sleep(100)
+ src.disabled = 0
+ if((src.lasercolor == "r") && (src.disabled == 0))
+ if(istype(Proj, /obj/item/projectile/bluetag))
+ src.disabled = 1
+ sleep(100)
+ src.disabled = 0
+ ..()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index a69794c7b77..4a79147d8d7 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -222,6 +222,94 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
doortype = 23
glass = 1
+/obj/machinery/door/airlock/gold
+ name = "Gold Airlock"
+ icon = 'Doorgold.dmi'
+ var/mineral = "gold"
+ doortype = 24
+
+/obj/machinery/door/airlock/silver
+ name = "Silver Airlock"
+ icon = 'Doorsilver.dmi'
+ var/mineral = "silver"
+ doortype = 25
+
+/obj/machinery/door/airlock/diamond
+ name = "Diamond Airlock"
+ icon = 'Doordiamond.dmi'
+ var/mineral = "diamond"
+ doortype = 26
+
+/obj/machinery/door/airlock/uranium
+ name = "Uranium Airlock"
+ desc = "And they said I was crazy."
+ icon = 'Dooruranium.dmi'
+ var/mineral = "uranium"
+ doortype = 27
+ var/last_event = 0
+
+/obj/machinery/door/airlock/uranium/process()
+ if(world.time > last_event+20)
+ if(prob(50))
+ radiate()
+ last_event = world.time
+ ..()
+
+/obj/machinery/door/airlock/uranium/proc/radiate()
+ for(var/mob/living/L in range (3,src))
+ L.apply_effect(15,IRRADIATE,0)
+ return
+
+/obj/machinery/door/airlock/plasma
+ name = "Plasma Airlock"
+ desc = "No way this can end badly."
+ icon = 'Doorplasma.dmi'
+ var/mineral = "plasma"
+ doortype = 28
+
+/obj/machinery/door/airlock/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ if(exposed_temperature > 300)
+ PlasmaBurn(exposed_temperature)
+
+/obj/machinery/door/airlock/plasma/proc/ignite(exposed_temperature)
+ if(exposed_temperature > 300)
+ PlasmaBurn(exposed_temperature)
+
+/obj/machinery/door/airlock/plasma/proc/PlasmaBurn(temperature)
+ for(var/turf/simulated/floor/target_tile in range(2,loc))
+ if(target_tile.parent && target_tile.parent.group_processing)
+ target_tile.parent.suspend_group_processing()
+ var/datum/gas_mixture/napalm = new
+ var/toxinsToDeduce = 35
+ napalm.toxins = toxinsToDeduce
+ napalm.temperature = 400+T0C
+ target_tile.assume_air(napalm)
+ spawn (0) target_tile.hotspot_expose(temperature, 400)
+ new/obj/structure/door_assembly/door_assembly_0( src.loc )
+ for(var/obj/structure/falsewall/plasma/F in range(3,src))//Hackish as fuck, but until temperature_expose works, there is nothing I can do -Sieve
+ var/turf/T = get_turf(F)
+ T.ReplaceWithMineralWall("plasma")
+ del (F)
+ for(var/turf/simulated/wall/mineral/W in range(3,src))
+ if(mineral == "plasma")
+ W.ignite((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame
+ for(var/obj/machinery/door/airlock/plasma/D in range(3,src))
+ D.ignite(temperature/4)
+ del (src)
+
+/obj/machinery/door/airlock/clown
+ name = "Bananium Airlock"
+ desc = "Honkhonkhonk"
+ icon = 'Doorbananium.dmi'
+ var/mineral = "clown"
+ doortype = 29
+
+/obj/machinery/door/airlock/sandstone
+ name = "Sandstone Airlock"
+ icon = 'Doorsand.dmi'
+ var/mineral = "sandstone"
+ doortype = 30
+
/*
About the new airlock wires panel:
* An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires.
@@ -1031,9 +1119,9 @@ About the new airlock wires panel:
if(4) new/obj/structure/door_assembly/door_assembly_med( src.loc )
if(5) new/obj/structure/door_assembly/door_assembly_mai( src.loc )
if(6) new/obj/structure/door_assembly/door_assembly_ext( src.loc )
- if(7) new/obj/structure/door_assembly/door_assembly_g( src.loc )
+ if(7) new/obj/structure/door_assembly/door_assembly_glass( src.loc )
if(14) new/obj/structure/door_assembly/door_assembly_com/glass( src.loc )
- if(15) new/obj/structure/door_assembly/door_assembly_eng/glass( src.loc ) //issue 301 -mysthic
+ if(15) new/obj/structure/door_assembly/door_assembly_eng/glass( src.loc )
if(16) new/obj/structure/door_assembly/door_assembly_sec/glass( src.loc )
if(17) new/obj/structure/door_assembly/door_assembly_med/glass( src.loc )
if(18) new/obj/structure/door_assembly/door_assembly_min( src.loc )
@@ -1042,6 +1130,14 @@ About the new airlock wires panel:
if(21) new/obj/structure/door_assembly/door_assembly_research/glass( src.loc )
if(22) new/obj/structure/door_assembly/door_assembly_min/glass( src.loc )
if(23) new/obj/structure/door_assembly/door_assembly_atmo/glass( src.loc )
+ if(24) new/obj/structure/door_assembly/door_assembly_gold( src.loc )
+ if(25) new/obj/structure/door_assembly/door_assembly_silver( src.loc )
+ if(26) new/obj/structure/door_assembly/door_assembly_diamond( src.loc )
+ if(27) new/obj/structure/door_assembly/door_assembly_uranium( src.loc )
+ if(28) new/obj/structure/door_assembly/door_assembly_plasma( src.loc )
+ if(29) new/obj/structure/door_assembly/door_assembly_clown( src.loc )
+ if(30) new/obj/structure/door_assembly/door_assembly_sandstone( src.loc )
+
var/obj/item/weapon/airlock_electronics/ae
if(!electronics)
ae = new/obj/item/weapon/airlock_electronics( src.loc )
@@ -1131,12 +1227,19 @@ About the new airlock wires panel:
..()
return
+/obj/machinery/door/airlock/plasma/attackby(C as obj, mob/user as mob)
+ if(C)
+ ignite(is_hot(C))
+ ..()
+
/obj/machinery/door/airlock/open()
if(src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_OPEN_DOOR) || src.operating)
return 0
use_power(50)
if(istype(src, /obj/machinery/door/airlock/glass))
playsound(src.loc, 'windowdoor.ogg', 100, 1)
+ if(istype(src, /obj/machinery/door/airlock/clown))
+ playsound(src.loc, 'bikehorn.ogg', 30, 1)
else
playsound(src.loc, 'airlock.ogg', 30, 1)
if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density)
@@ -1174,6 +1277,8 @@ About the new airlock wires panel:
use_power(50)
if(istype(src, /obj/machinery/door/airlock/glass))
playsound(src.loc, 'windowdoor.ogg', 30, 1)
+ if(istype(src, /obj/machinery/door/airlock/clown))
+ playsound(src.loc, 'bikehorn.ogg', 30, 1)
else
playsound(src.loc, 'airlock.ogg', 30, 1)
var/obj/structure/window/killthis = (locate(/obj/structure/window) in get_turf(src))
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 85430410e15..068dfebfd1d 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -202,6 +202,7 @@
if(!operating) operating = 1
animate("opening")
+ icon_state = "door0"
src.sd_SetOpacity(0)
sleep(10)
src.layer = 2.7
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 977a179f346..763bcd76944 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -23,6 +23,7 @@
req_access = list(access_security)
power_channel = EQUIP // drains power from the EQUIPMENT channel
+ var/lasercolor = ""
var/raised = 0 // if the turret cover is "open" and the turret is raised
var/raising= 0 // if the turret is currently opening or closing its cover
var/health = 80 // the turret's health
@@ -30,6 +31,11 @@
var/installation // the type of weapon installed
var/gun_charge = 0 // the charge of the gun inserted
+ var/projectile = null //holder for bullettype
+ var/reqpower = 0 //holder for power needed
+ var/sound = null//So the taser can have sound
+ var/iconholder = null//holder for the icon_state
+ var/egun = null//holder to handle certain guns switching bullettypes
var/obj/machinery/porta_turret_cover/cover = null // the cover that is covering this turret
var/last_fired = 0 // 1: if the turret is cooling down from a shot, 0: turret is ready to fire
@@ -46,11 +52,13 @@
//var/emagged = 0 // 1: emagged, 0: not emagged
var/on = 1 // determines if the turret is on
+ var/disabled = 0
var/datum/effect/effect/system/spark_spread/spark_system // the spark system, used for generating... sparks?
New()
..()
+ icon_state = "[lasercolor]grey_target_prism"
// Sets up a spark system
spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, src)
@@ -131,22 +139,22 @@ Neutralize All Unidentified Life Signs: []
"},
icon_state = "turretCover"
return
if(stat & BROKEN)
- icon_state = "destroyed_target_prism"
+ icon_state = "[lasercolor]destroyed_target_prism"
else
if( powered() )
if (on)
if (installation == /obj/item/weapon/gun/energy/laser || installation == /obj/item/weapon/gun/energy/pulse_rifle)
// laser guns and pulse rifles have an orange icon
- icon_state = "orange_target_prism"
+ icon_state = "[lasercolor]orange_target_prism"
else
// anything else has a blue icon
- icon_state = "target_prism"
+ icon_state = "[lasercolor]target_prism"
else
- icon_state = "grey_target_prism"
+ icon_state = "[lasercolor]grey_target_prism"
stat &= ~NOPOWER
else
spawn(rand(0, 15))
- src.icon_state = "grey_target_prism"
+ src.icon_state = "[lasercolor]grey_target_prism"
stat |= NOPOWER
@@ -165,6 +173,7 @@ Neutralize All Unidentified Life Signs: []
"},
var/obj/item/weapon/gun/energy/Gun = new installation(src.loc)
Gun.power_supply.charge=gun_charge
Gun.update_icon()
+ lasercolor = null
if(prob(50)) new /obj/item/stack/sheet/metal( loc, rand(1,4))
if(prob(50)) new /obj/item/device/assembly/prox_sensor(locate(x,y,z))
else
@@ -192,7 +201,7 @@ Neutralize All Unidentified Life Signs: []
"},
if(!anchored)
anchored = 1
invisibility = 2
- icon_state = "grey_target_prism"
+ icon_state = "[lasercolor]grey_target_prism"
user << "You secure the exterior bolts on the turret."
cover=new/obj/machinery/porta_turret_cover(src.loc) // create a new turret. While this is handled in process(), this is to workaround a bug where the turret becomes invisible for a split second
cover.Parent_Turret = src // make the cover's parent src
@@ -239,6 +248,16 @@ Neutralize All Unidentified Life Signs: []
"},
if(prob(45) && Proj.damage > 0) src.spark_system.start()
if (src.health <= 0)
src.die() // the death process :(
+ if((src.lasercolor == "b") && (src.disabled == 0))
+ if(istype(Proj, /obj/item/projectile/redtag))
+ src.disabled = 1
+ sleep(100)
+ src.disabled = 0
+ if((src.lasercolor == "r") && (src.disabled == 0))
+ if(istype(Proj, /obj/item/projectile/bluetag))
+ src.disabled = 1
+ sleep(100)
+ src.disabled = 0
return
/obj/machinery/porta_turret/emp_act(severity)
@@ -322,7 +341,11 @@ Neutralize All Unidentified Life Signs: []
"},
if(!istype(C, /mob/living/silicon) && ai) // If it's set to attack all nonsilicons, target them!
if(C.lying)
- secondarytargets += C
+ if(lasercolor)
+ continue
+ else
+ secondarytargets += C
+ continue
else
targets += C
continue
@@ -396,7 +419,7 @@ Neutralize All Unidentified Life Signs: []
"},
cover.icon_state="turretCover"
raised=0
invisibility=2
- icon_state="grey_target_prism"
+ icon_state="[lasercolor]grey_target_prism"
/obj/machinery/porta_turret/proc/assess_perp(mob/living/carbon/human/perp as mob)
@@ -412,7 +435,7 @@ Neutralize All Unidentified Life Signs: []
"},
if(auth_weapons) // check for weapon authorization
if((isnull(perp:wear_id)) || (istype(perp:wear_id, /obj/item/weapon/card/id/syndicate)))
- if(src.allowed(perp)) // if the perp has security access, return 0
+ if((src.allowed(perp)) && (!lasercolor)) // if the perp has security access, return 0
return 0
if((istype(perp.l_hand, /obj/item/weapon/gun) && !istype(perp.l_hand, /obj/item/weapon/gun/projectile/shotgun)) || istype(perp.l_hand, /obj/item/weapon/melee/baton))
@@ -424,6 +447,22 @@ Neutralize All Unidentified Life Signs: []
"},
if(istype(perp:belt, /obj/item/weapon/gun) || istype(perp:belt, /obj/item/weapon/melee/baton))
threatcount += 2
+ if(src.lasercolor == "b")//Lasertag turrets target the opposing team, how great is that? -Sieve
+ if(istype(perp.wear_suit, /obj/item/clothing/suit/redtag))
+ threatcount += 4
+ if((istype(perp:r_hand,/obj/item/weapon/gun/energy/laser/redtag)) || (istype(perp:l_hand,/obj/item/weapon/gun/energy/laser/redtag)))
+ threatcount += 4
+ if(istype(perp:belt, /obj/item/weapon/gun/energy/laser/redtag))
+ threatcount += 2
+
+ if(src.lasercolor == "r")
+ if(istype(perp.wear_suit, /obj/item/clothing/suit/bluetag))
+ threatcount += 4
+ if((istype(perp:r_hand,/obj/item/weapon/gun/energy/laser/bluetag)) || (istype(perp:l_hand,/obj/item/weapon/gun/energy/laser/bluetag)))
+ threatcount += 4
+ if(istype(perp:belt, /obj/item/weapon/gun/energy/laser/bluetag))
+ threatcount += 2
+
if (src.check_records) // if the turret can check the records, check if they are set to *Arrest* on records
for (var/datum/data/record/E in data_core.general)
var/perpname = perp.name
@@ -451,6 +490,7 @@ Neutralize All Unidentified Life Signs: []
"},
/obj/machinery/porta_turret/proc/shootAt(var/atom/movable/target) // shoots at a target
+
if(!emagged) // if it hasn't been emagged, it has to obey a cooldown rate
if(last_fired || !raised) return // prevents rapid-fire shooting, unless it's been emagged
last_fired = 1
@@ -470,99 +510,108 @@ Neutralize All Unidentified Life Signs: []
"},
// any emagged turrets will shoot extremely fast! This not only is deadly, but drains a lot power!
- var/obj/item/projectile/A
- if(!installation) // if for some reason the turret has no gun (ie, admin spawned) it resorts to basic taser shots
- A = new /obj/item/projectile/energy/electrode( loc )
- if(!emagged) use_power(200)
- else use_power(400)
- playsound(src.loc, 'Taser.ogg', 75, 1)
- icon_state = "target_prism"
+ if(!projectile)
+ lasercolor = ""
+ req_access = list(access_security)
+ if(!installation)// if for some reason the turret has no gun (ie, admin spawned) it resorts to basic taser shots
+ projectile = /obj/item/projectile/energy/electrode
+ reqpower = 200
+ sound = 1
+ iconholder = 1
+ else
+ var/obj/item/weapon/gun/energy/E=new installation
+ // All energy-based weapons are applicable
+ if(istype(E, /obj/item/weapon/gun/energy/laser/bluetag))
+ projectile = /obj/item/projectile/bluetag
+ iconholder = null
+ reqpower = 100
+ lasercolor = "b"
+ req_access = list(access_maint_tunnels,access_clown,access_mime)
+
+ else if(istype(E, /obj/item/weapon/gun/energy/laser/redtag))
+ projectile = /obj/item/projectile/redtag
+ iconholder = null
+ reqpower = 100
+ lasercolor = "r"
+ req_access = list(access_maint_tunnels,access_clown,access_mime)
+
+ else if(istype(E, /obj/item/weapon/gun/energy/pulse_rifle))
+ projectile = /obj/item/projectile/beam/pulse
+ iconholder = null
+ reqpower = 700
+
+ else if(istype(E, /obj/item/weapon/gun/energy/staff))
+ projectile = /obj/item/projectile/change
+ iconholder = 1
+ reqpower = 700
+
+ else if(istype(E, /obj/item/weapon/gun/energy/ionrifle))
+ projectile = /obj/item/projectile/ion
+ iconholder = 1
+ reqpower = 700
+
+ else if(istype(E, /obj/item/weapon/gun/energy/taser) || istype(E, /obj/item/weapon/gun/energy/stunrevolver))
+ projectile = /obj/item/projectile/energy/electrode
+ iconholder = 1
+ reqpower = 200
+
+ else if(istype(E, /obj/item/weapon/gun/energy/lasercannon))
+ projectile = /obj/item/projectile/beam/heavylaser
+ iconholder = null
+ reqpower = 600
+
+ else if(istype(E, /obj/item/weapon/gun/energy/decloner))
+ projectile = /obj/item/projectile/energy/declone
+ iconholder = null
+ reqpower = 600
+
+ else if(istype(E, /obj/item/weapon/gun/energy/crossbow/largecrossbow))
+ projectile = /obj/item/projectile/energy/bolt/large
+ iconholder = null
+ reqpower = 125
+
+ else if(istype(E, /obj/item/weapon/gun/energy/crossbow))
+ projectile = /obj/item/projectile/energy/bolt
+ iconholder = null
+ reqpower = 50
+
+ else if(istype(E, /obj/item/weapon/gun/energy/laser))
+ projectile = /obj/item/projectile/beam
+ iconholder = null
+ reqpower = 500
+
+ else // Energy gun shots
+ projectile = /obj/item/projectile/energy/electrode// if it hasn't been emagged, it uses normal taser shots
+ iconholder = 1
+ egun = 1
+ reqpower = 200
+
+ var/obj/item/projectile/A = projectile
+ var/obj/item/weapon/gun/energy/E=new installation
+ if(iconholder)
+ icon_state = "[lasercolor]target_prism"
else
+ icon_state = "[lasercolor]orange_target_prism"
+ if(sound)
+ playsound(src.loc, 'Taser.ogg', 75, 1)
+ A = new projectile( loc )
+ A.original = target.loc
+ if(!emagged)
+ use_power(reqpower)
+ else
+ use_power((reqpower*2))
+ if(egun)// if it has been emagged, use laser shots
+ projectile = /obj/item/projectile/beam
+ iconholder = null
+ reqpower = 500
+
// Shooting Code:
- var/obj/item/weapon/gun/energy/E=new installation
if(!E.silenced)
playsound(src.loc, E.fire_sound, 75, 1)
else
playsound(src.loc, E.fire_sound, 10, 1)
- // All energy-based weapons are applicable
- if(istype(E, /obj/item/weapon/gun/energy/laser))
- A = new /obj/item/projectile/beam( loc )
- A.original = target.loc
- icon_state = "orange_target_prism"
- if(!emagged) use_power(500)
- else use_power(1000)
-
- else if(istype(E, /obj/item/weapon/gun/energy/pulse_rifle))
- A = new /obj/item/projectile/beam/pulse( loc )
- A.original = target.loc
- icon_state = "orange_target_prism"
- if(!emagged) use_power(700)
- else use_power(1400)
-
- else if(istype(E, /obj/item/weapon/gun/energy/staff))
- A = new /obj/item/projectile/change( loc )
- A.original = target.loc
- icon_state = "target_prism"
- if(!emagged) use_power(700)
- else use_power(1400)
-
- else if(istype(E, /obj/item/weapon/gun/energy/ionrifle))
- A = new /obj/item/projectile/ion( loc )
- A.original = target.loc
- icon_state = "target_prism"
- if(!emagged) use_power(700)
- else use_power(1400)
-
-
- else if(istype(E, /obj/item/weapon/gun/energy/taser) || istype(E, /obj/item/weapon/gun/energy/stunrevolver))
- A = new /obj/item/projectile/energy/electrode( loc )
- icon_state = "target_prism"
- if(!emagged) use_power(200)
- else use_power(400)
-
- else if(istype(E, /obj/item/weapon/gun/energy/lasercannon))
- A = new /obj/item/projectile/beam/heavylaser( loc )
- A.original = target.loc
- icon_state = "orange_target_prism"
- if(!emagged) use_power(600)
- else use_power(1200)
-
- else if(istype(E, /obj/item/weapon/gun/energy/decloner))
- A = new /obj/item/projectile/energy/declone( loc )
- A.original = target.loc
- icon_state = "orange_target_prism"
- if(!emagged) use_power(600)
- else use_power(1200)
-
- else if(istype(E, /obj/item/weapon/gun/energy/crossbow))
- A = new /obj/item/projectile/energy/bolt( loc )
- A.original = target.loc
- icon_state = "orange_target_prism"
- if(!emagged) use_power(50)
- else use_power(100)
-
- else if(istype(E, /obj/item/weapon/gun/energy/crossbow/largecrossbow))
- A = new /obj/item/projectile/energy/bolt/large( loc )
- A.original = target.loc
- icon_state = "orange_target_prism"
- if(!emagged) use_power(125)
- else use_power(250)
-
- else // Energy gun shots
-
- if(!emagged) // if it hasn't been emagged, it uses normal taser shots
- A = new /obj/item/projectile/energy/electrode( loc )
- icon_state = "target_prism"
- use_power(200)
-
- else // if it has been emagged, use laser shots
- A = new /obj/item/projectile/beam( loc )
- A.original = target.loc
- icon_state = "orange_target_prism"
- use_power(1000)
-
del(E)
A.current = T
A.yo = U.y - T.y
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index a30c3b370c4..c2257aab2d1 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -54,6 +54,8 @@
// 2 = cannons
// 3 = pulse
// 4 = change (HONK)
+ // 5 = bluetag
+ // 6 = redtag
var/health = 80
var/obj/machinery/turretcover/cover = null
var/popping = 0
@@ -210,6 +212,10 @@
A = new /obj/item/projectile/beam/pulse( loc )
if(4)
A = new /obj/item/projectile/change( loc )
+ if(5)
+ A = new /obj/item/projectile/bluetag( loc )
+ if(6)
+ A = new /obj/item/projectile/redtag( loc )
A.original = target.loc
use_power(500)
else
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
index 6c522151d6b..8fc2f5bf4d1 100644
--- a/code/game/mecha/combat/gygax.dm
+++ b/code/game/mecha/combat/gygax.dm
@@ -15,17 +15,40 @@
internal_damage_threshold = 35
max_equip = 3
+/obj/mecha/combat/gygax/dark
+ desc = "A lightweight exosuit used by Nanotrasen Death Squads. A significantly upgraded Gygax security mech."
+ name = "Dark Gygax"
+ icon_state = "darkgygax"
+ health = 400
+ deflect_chance = 25
+ damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8)
+ max_temperature = 4500
+ overload_coeff = 1
+ wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark
+ max_equip = 4
+ step_energy_drain = 5
-
-/*
-/obj/mecha/combat/gygax/New()
+/obj/mecha/combat/gygax/dark/New()
..()
- weapons += new /datum/mecha_weapon/taser(src)
- weapons += new /datum/mecha_weapon/laser(src)
- weapons += new /datum/mecha_weapon/missile_rack/flashbang(src)
- selected_weapon = weapons[1]
+ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/teleporter
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
+ ME.attach(src)
return
-*/
+
+/obj/mecha/combat/gygax/dark/add_cell(var/obj/item/weapon/cell/C=null)
+ if(C)
+ C.forceMove(src)
+ cell = C
+ return
+ cell = new(src)
+ cell.charge = 30000
+ cell.maxcharge = 30000
+
/obj/mecha/combat/gygax/verb/overload()
set category = "Exosuit Interface"
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 98bf3925b9b..093528955df 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -916,7 +916,10 @@
process(var/obj/item/mecha_parts/mecha_equipment/generator/nuclear/EG)
if(..())
for(var/mob/living/carbon/M in view(EG.chassis))
- M.radiation += EG.rad_per_cycle
+ if(istype(M,/mob/living/carbon/human))
+ M.apply_effect((EG.rad_per_cycle*3),IRRADIATE,0)
+ else
+ M.radiation += EG.rad_per_cycle
return 1
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 1072a07cf55..c844128f4cc 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -324,6 +324,9 @@
do_after_cooldown()
return
+/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve
+ name = "SOP-6 Grenade Launcher"
+ projectile = /obj/item/weapon/flashbang/clusterbang
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar
name = "Banana Mortar"
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index ce6e3c2f5e3..4d46c3b81af 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -34,6 +34,7 @@
var/list/queue = list()
var/processing_queue = 0
var/screen = "main"
+ var/opened = 0
var/temp
var/list/part_sets = list( //set names must be unique
"Cyborg"=list(
@@ -60,8 +61,7 @@
/obj/item/mecha_parts/part/odysseus_left_arm,
/obj/item/mecha_parts/part/odysseus_right_arm,
/obj/item/mecha_parts/part/odysseus_left_leg,
- /obj/item/mecha_parts/part/odysseus_right_leg,
- /obj/item/mecha_parts/part/odysseus_armour
+ /obj/item/mecha_parts/part/odysseus_right_leg
),
"Gygax"=list(
@@ -133,125 +133,148 @@
- New()
- ..()
- component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/mechfab(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/micro_laser(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- RefreshParts()
+/obj/machinery/mecha_part_fabricator/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/mechfab(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/micro_laser(src)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
+ RefreshParts()
// part_sets["Cyborg Upgrade Modules"] = typesof(/obj/item/borg/upgrade/) - /obj/item/borg/upgrade/ // Eh. This does it dymaically, but to support having the items referenced otherwhere in the code but not being constructable, going to do it manaully.
- for(var/part_set in part_sets)
- convert_part_set(part_set)
- files = new /datum/research(src) //Setup the research data holder.
- /*
- if(!id)
- for(var/obj/machinery/r_n_d/server/centcom/S in world)
- S.initialize()
- break
- */
- return
+ for(var/part_set in part_sets)
+ convert_part_set(part_set)
+ files = new /datum/research(src) //Setup the research data holder.
+ /*
+ if(!id)
+ for(var/obj/machinery/r_n_d/server/centcom/S in world)
+ S.initialize()
+ break
+ */
+ return
- Del()
- for(var/atom/A in src)
- del A
- ..()
- return
+/obj/machinery/mecha_part_fabricator/RefreshParts()
+ var/T = 0
+ for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
+ T += M.rating
+ res_max_amount = (187500+(T * 37500))
+ T = 0
+ for(var/obj/item/weapon/stock_parts/micro_laser/Ma in component_parts)
+ T += Ma.rating
+ if(T >= 1)
+ T -= 1
+ var/diff
+ diff = round(initial(resource_coeff) - (initial(resource_coeff)*(T))/25,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)
+ if(time_coeff!=diff)
+ time_coeff = diff
- proc/operation_allowed(mob/M)
- if(isrobot(M) || isAI(M))
- return 1
- if(!istype(req_access) || !req_access.len)
- return 1
- else if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- for(var/ID in list(H.equipped(), H.wear_id, H.belt))
- if(src.check_access(ID))
- return 1
- M << "You don't have required permissions to use [src]"
+/obj/machinery/mecha_part_fabricator/Del()
+ for(var/atom/A in src)
+ del A
+ ..()
+ return
+
+/obj/machinery/mecha_part_fabricator/proc/operation_allowed(mob/M)
+ if(isrobot(M) || isAI(M))
+ return 1
+ if(!istype(req_access) || !req_access.len)
+ return 1
+ else if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ for(var/ID in list(H.equipped(), H.wear_id, H.belt))
+ if(src.check_access(ID))
+ return 1
+ M << "You don't have required permissions to use [src]"
+ return 0
+
+/obj/machinery/mecha_part_fabricator/check_access(obj/item/weapon/card/id/I)
+ if(istype(I, /obj/item/device/pda))
+ var/obj/item/device/pda/pda = I
+ I = pda.id
+ if(!istype(I) || !I.access) //not ID or no access
return 0
-
- check_access(obj/item/weapon/card/id/I)
- if(istype(I, /obj/item/device/pda))
- var/obj/item/device/pda/pda = I
- I = pda.id
- if(!istype(I) || !I.access) //not ID or no access
+ for(var/req in req_access)
+ if(!(req in I.access)) //doesn't have this access
return 0
- for(var/req in req_access)
- if(!(req in I.access)) //doesn't have this access
- return 0
- return 1
+ return 1
- proc/emag()
- sleep()
- switch(emagged)
- if(0)
- emagged = 0.5
- src.visible_message("\icon[src] [src] beeps: \"DB error \[Code 0x00F1\]\"")
- sleep(10)
- src.visible_message("\icon[src] [src] beeps: \"Attempting auto-repair\"")
- sleep(15)
- src.visible_message("\icon[src] [src] beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
- sleep(30)
- src.visible_message("\icon[src] [src] beeps: \"User DB truncated. Please contact your Nanotrasen system operator for future assistance.\"")
- req_access = null
- emagged = 1
- if(0.5)
- src.visible_message("\icon[src] [src] beeps: \"DB not responding \[Code 0x0003\]...\"")
- if(1)
- src.visible_message("\icon[src] [src] beeps: \"No records in User DB\"")
- return
+/obj/machinery/mecha_part_fabricator/proc/emag()
+ sleep()
+ switch(emagged)
+ if(0)
+ emagged = 0.5
+ src.visible_message("\icon[src] [src] beeps: \"DB error \[Code 0x00F1\]\"")
+ sleep(10)
+ src.visible_message("\icon[src] [src] beeps: \"Attempting auto-repair\"")
+ sleep(15)
+ src.visible_message("\icon[src] [src] beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
+ sleep(30)
+ src.visible_message("\icon[src] [src] beeps: \"User DB truncated. Please contact your Nanotrasen system operator for future assistance.\"")
+ req_access = null
+ emagged = 1
+ if(0.5)
+ src.visible_message("\icon[src] [src] beeps: \"DB not responding \[Code 0x0003\]...\"")
+ if(1)
+ src.visible_message("\icon[src] [src] beeps: \"No records in User DB\"")
+ return
- proc/convert_part_set(set_name as text)
- var/list/parts = part_sets[set_name]
- if(istype(parts, /list))
- for(var/i=1;i<=parts.len;i++)
- var/path = parts[i]
- var/part = new path(src)
- if(part)
- parts[i] = part
- //debug below
- if(!istype(parts[i],/obj/item)) return 0
- return
+/obj/machinery/mecha_part_fabricator/proc/convert_part_set(set_name as text)
+ var/list/parts = part_sets[set_name]
+ if(istype(parts, /list))
+ for(var/i=1;i<=parts.len;i++)
+ var/path = parts[i]
+ var/part = new path(src)
+ if(part)
+ parts[i] = part
+ //debug below
+ if(!istype(parts[i],/obj/item)) return 0
+ return
- proc/add_part_set(set_name as text,parts=null)
- if(set_name in part_sets)//attempt to create duplicate set
+/obj/machinery/mecha_part_fabricator/proc/add_part_set(set_name as text,parts=null)
+ if(set_name in part_sets)//attempt to create duplicate set
+ return 0
+ if(isnull(parts))
+ part_sets[set_name] = list()
+ else
+ part_sets[set_name] = parts
+ convert_part_set(set_name)
+ return 1
+
+/obj/machinery/mecha_part_fabricator/proc/add_part_to_set(set_name as text,part)
+ if(!part) return 0
+ src.add_part_set(set_name)//if no "set_name" set exists, create
+ var/list/part_set = part_sets[set_name]
+ var/atom/apart
+ if(ispath(part))
+ apart = new part(src)
+ else
+ apart = part
+ if(!istype(apart)) return 0
+ for(var/obj/O in part_set)
+ if(O.type == apart.type)
+ del apart
return 0
- if(isnull(parts))
- part_sets[set_name] = list()
- else
- part_sets[set_name] = parts
- convert_part_set(set_name)
- return 1
+ part_set[++part_set.len] = apart
+ return 1
- proc/add_part_to_set(set_name as text,part)
- if(!part) return 0
- src.add_part_set(set_name)//if no "set_name" set exists, create
- var/list/part_set = part_sets[set_name]
- var/atom/apart
- if(ispath(part))
- apart = new part(src)
- else
- apart = part
- if(!istype(apart)) return 0
- for(var/obj/O in part_set)
- if(O.type == apart.type)
- del apart
- return 0
- part_set[++part_set.len] = apart
- return 1
-
- proc/remove_part_set(set_name as text)
- for(var/i=1,i<=part_sets.len,i++)
- if(part_sets[i]==set_name)
- part_sets.Cut(i,++i)
- return
+/obj/machinery/mecha_part_fabricator/proc/remove_part_set(set_name as text)
+ for(var/i=1,i<=part_sets.len,i++)
+ if(part_sets[i]==set_name)
+ part_sets.Cut(i,++i)
+ return
/*
proc/sanity_check()
for(var/p in resources)
@@ -277,414 +300,472 @@
return
*/
- proc/output_parts_list(set_name)
- var/output = ""
- var/list/part_set = listgetindex(part_sets, set_name)
- if(istype(part_set))
- for(var/obj/item/part in part_set)
- var/resources_available = check_resources(part)
- output += "
"
- return output
+/obj/machinery/mecha_part_fabricator/proc/output_parts_list(set_name)
+ var/output = ""
+ var/list/part_set = listgetindex(part_sets, set_name)
+ if(istype(part_set))
+ for(var/obj/item/part in part_set)
+ var/resources_available = check_resources(part)
+ output += ""
+ return output
- proc/output_part_info(var/obj/item/mecha_parts/part)
- var/output = "[part.name] (Cost: [output_part_cost(part)]) [get_construction_time_w_coeff(part)/10]sec"
- return output
+/obj/machinery/mecha_part_fabricator/proc/output_part_info(var/obj/item/mecha_parts/part)
+ var/output = "[part.name] (Cost: [output_part_cost(part)]) [get_construction_time_w_coeff(part)/10]sec"
+ return output
- proc/output_part_cost(var/obj/item/mecha_parts/part)
- var/i = 0
- var/output
- for(var/p in part.construction_cost)
- if(p in resources)
- output += "[i?" | ":null][get_resource_cost_w_coeff(part,p)] [p]"
- i++
- return output
+/obj/machinery/mecha_part_fabricator/proc/output_part_cost(var/obj/item/mecha_parts/part)
+ var/i = 0
+ var/output
+ for(var/p in part.construction_cost)
+ if(p in resources)
+ output += "[i?" | ":null][get_resource_cost_w_coeff(part,p)] [p]"
+ i++
+ return output
- proc/output_available_resources()
- var/output
- for(var/resource in resources)
- var/amount = min(res_max_amount, resources[resource])
- output += "[resource]: [amount] cm³"
- if(amount>0)
- output += " - Remove \[1\] | \[10\] | \[All\]"
- output += "
"
- return output
+/obj/machinery/mecha_part_fabricator/proc/output_available_resources()
+ var/output
+ for(var/resource in resources)
+ var/amount = min(res_max_amount, resources[resource])
+ output += "[resource]: [amount] cm³"
+ if(amount>0)
+ output += " - Remove \[1\] | \[10\] | \[All\]"
+ output += "
"
+ return output
- proc/remove_resources(var/obj/item/mecha_parts/part)
- if(istype(part, /obj/item/robot_parts) || istype(part, /obj/item/mecha_parts))
- for(var/resource in part.construction_cost)
- if(resource in src.resources)
- src.resources[resource] -= get_resource_cost_w_coeff(part,resource)
- return
+/obj/machinery/mecha_part_fabricator/proc/remove_resources(var/obj/item/mecha_parts/part)
+ if(istype(part, /obj/item/robot_parts) || istype(part, /obj/item/mecha_parts))
+ for(var/resource in part.construction_cost)
+ if(resource in src.resources)
+ src.resources[resource] -= get_resource_cost_w_coeff(part,resource)
+ return
- proc/check_resources(var/obj/item/mecha_parts/part)
+/obj/machinery/mecha_part_fabricator/proc/check_resources(var/obj/item/mecha_parts/part)
// if(istype(part, /obj/item/robot_parts) || istype(part, /obj/item/mecha_parts) || istype(part,/obj/item/borg/upgrade))
- if(part.construction_time!=null && part.construction_cost!=null)//Much more efficient way to check the item, since it won't have those vars if it isn't meant to go through the mechfabs -Sieve
- for(var/resource in part.construction_cost)
- if(resource in src.resources)
- if(src.resources[resource] < get_resource_cost_w_coeff(part,resource))
- return 0
- return 1
+ if(part.construction_time!=null && part.construction_cost!=null)//Much more efficient way to check the item, since it won't have those vars if it isn't meant to go through the mechfabs -Sieve
+ for(var/resource in part.construction_cost)
+ if(resource in src.resources)
+ if(src.resources[resource] < get_resource_cost_w_coeff(part,resource))
+ return 0
+ return 1
+ return 0
+
+/obj/machinery/mecha_part_fabricator/proc/build_part(var/obj/item/part)
+ if(!part) return
+ src.being_built = new part.type(src)
+ src.desc = "It's building [src.being_built]."
+ src.remove_resources(part)
+ src.overlays += "fab-active"
+ src.use_power = 2
+ src.updateUsrDialog()
+ sleep(get_construction_time_w_coeff(part))
+ src.use_power = 1
+ src.overlays -= "fab-active"
+ src.desc = initial(src.desc)
+ if(being_built)
+ src.being_built.Move(get_step(src,SOUTH))
+ src.visible_message("\icon[src] [src] beeps, \"The [src.being_built] is complete\".")
+ src.being_built = null
+ src.updateUsrDialog()
+ return 1
+
+/obj/machinery/mecha_part_fabricator/proc/update_queue_on_page()
+ send_byjax(usr,"mecha_fabricator.browser","queue",src.list_queue())
+ return
+
+/obj/machinery/mecha_part_fabricator/proc/add_part_set_to_queue(set_name)
+ if(set_name in part_sets)
+ var/list/part_set = part_sets[set_name]
+ if(islist(part_set))
+ for(var/obj/item/part in part_set)
+ add_to_queue(part)
+ return
+
+/obj/machinery/mecha_part_fabricator/proc/add_to_queue(part)
+ if(!istype(queue))
+ queue = list()
+ if(part)
+ queue[++queue.len] = part
+ return queue.len
+
+/obj/machinery/mecha_part_fabricator/proc/remove_from_queue(index)
+ if(!isnum(index) || !istype(queue) || (index<1 || index>queue.len))
return 0
+ queue.Cut(index,++index)
+ return 1
- proc/build_part(var/obj/item/part)
- if(!part) return
- src.being_built = new part.type(src)
- src.desc = "It's building [src.being_built]."
- src.remove_resources(part)
- src.overlays += "fab-active"
- src.use_power = 2
- src.updateUsrDialog()
- sleep(get_construction_time_w_coeff(part))
- src.use_power = 1
- src.overlays -= "fab-active"
- src.desc = initial(src.desc)
- if(being_built)
- src.being_built.Move(get_step(src,SOUTH))
- src.visible_message("\icon[src] [src] beeps, \"The [src.being_built] is complete\".")
- src.being_built = null
- src.updateUsrDialog()
- return 1
-
- proc/update_queue_on_page()
- send_byjax(usr,"mecha_fabricator.browser","queue",src.list_queue())
- return
-
- proc/add_part_set_to_queue(set_name)
- if(set_name in part_sets)
- var/list/part_set = part_sets[set_name]
- if(islist(part_set))
- for(var/obj/item/part in part_set)
- add_to_queue(part)
- return
-
- proc/add_to_queue(part)
- if(!istype(queue))
- queue = list()
- if(part)
- queue[++queue.len] = part
- return queue.len
-
- proc/remove_from_queue(index)
- if(!isnum(index) || !istype(queue) || (index<1 || index>queue.len))
+/obj/machinery/mecha_part_fabricator/proc/process_queue()
+ var/part = listgetindex(src.queue, 1)
+ temp = null
+ while(part)
+ if(stat&(NOPOWER|BROKEN))
return 0
- queue.Cut(index,++index)
- return 1
+ if(!check_resources(part))
+ src.visible_message("\icon[src] [src] beeps, \"Not enough resources. Queue processing stopped\".")
+ temp = {"Not enough resources to build next part.
+ Try again | Return"}
+ return 0
+ remove_from_queue(1)
+ build_part(part)
+ part = listgetindex(src.queue, 1)
+ src.visible_message("\icon[src] [src] beeps, \"Queue processing finished successfully\".")
+ return 1
- proc/process_queue()
- var/part = listgetindex(src.queue, 1)
- temp = null
- while(part)
- if(stat&(NOPOWER|BROKEN))
- return 0
- if(!check_resources(part))
- src.visible_message("\icon[src] [src] beeps, \"Not enough resources. Queue processing stopped\".")
- temp = {"Not enough resources to build next part.
- Try again | Return"}
- return 0
- remove_from_queue(1)
- build_part(part)
- part = listgetindex(src.queue, 1)
- src.visible_message("\icon[src] [src] beeps, \"Queue processing finished successfully\".")
- return 1
+/obj/machinery/mecha_part_fabricator/proc/list_queue()
+ var/output = "Queue contains:"
+ if(!istype(queue) || !queue.len)
+ output += "
Nothing"
+ else
+ output += ""
+ for(var/i=1;i<=queue.len;i++)
+ var/obj/item/part = listgetindex(src.queue, i)
+ if(istype(part))
+ output += "- [part.name] - [i>1?"↑":null] [i↓
":null] Remove"
+ output += ""
+ output += "\[Process queue | Clear queue\]"
+ return output
- proc/list_queue()
- var/output = "Queue contains:"
- if(!istype(queue) || !queue.len)
- output += "
Nothing"
- else
- output += ""
- for(var/i=1;i<=queue.len;i++)
- var/obj/item/part = listgetindex(src.queue, i)
- if(istype(part))
- output += "- [part.name] - [i>1?"↑":null] [i↓":null] Remove
"
- output += "
"
- output += "\[Process queue | Clear queue\]"
- return output
+/obj/machinery/mecha_part_fabricator/proc/convert_designs()
+ if(!files) return
+ var/i = 0
+ for(var/datum/design/D in files.known_designs)
+ if(D.build_type&16)
+ if(add_part_to_set("Exosuit Equipment", text2path(D.build_path)))
+ i++
+ return i
- proc/convert_designs()
- if(!files) return
- var/i = 0
- for(var/datum/design/D in files.known_designs)
- if(D.build_type&16)
- if(add_part_to_set("Exosuit Equipment", text2path(D.build_path)))
- i++
- return i
-
- proc/update_tech()
- if(!files) return
- var/output
- for(var/datum/tech/T in files.known_tech)
- if(T && T.level > 1)
- var/diff
- switch(T.id) //bad, bad formulas
- if("materials")
- diff = round(initial(resource_coeff) - (initial(resource_coeff)*T.level)/25,0.01)
- if(resource_coeff!=diff)
- resource_coeff = diff
- output+="Production efficiency increased.
"
- if("programming")
- diff = round(initial(time_coeff) - (initial(time_coeff)*T.level)/25,0.1)
- if(time_coeff!=diff)
- time_coeff = diff
- output+="Production routines updated.
"
- return output
+/obj/machinery/mecha_part_fabricator/proc/update_tech()
+ if(!files) return
+ var/output
+ for(var/datum/tech/T in files.known_tech)
+ if(T && T.level > 1)
+ var/diff
+ switch(T.id) //bad, bad formulas
+ if("materials")
+ var/pmat = 0//Calculations to make up for the fact that these parts and tech modify the same thing
+ for(var/obj/item/weapon/stock_parts/micro_laser/Ml in component_parts)
+ 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.
"
+ 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.
"
+ return output
- proc/sync(silent=null)
+/obj/machinery/mecha_part_fabricator/proc/sync(silent=null)
/* if(queue.len)
if(!silent)
temp = "Error. Please clear processing queue before updating!"
src.updateUsrDialog()
- return //This POS doesn't work, simplifying -Sieve
+ return
*/
+ if(!silent)
+ temp = "Updating local R&D database..."
+ src.updateUsrDialog()
+ sleep(30) //only sleep if called by user
+ for(var/obj/machinery/computer/rdconsole/RDC in get_area(src))
+ if(!RDC.sync)
+ continue
+ for(var/datum/tech/T in RDC.files.known_tech)
+ files.AddTech2Known(T)
+ for(var/datum/design/D in RDC.files.known_designs)
+ files.AddDesign2Known(D)
+ files.RefreshResearch()
+ var/i = src.convert_designs()
+ var/tech_output = update_tech()
if(!silent)
- temp = "Updating local R&D database..."
+ temp = "Processed [i] equipment designs.
"
+ temp += tech_output
+ temp += "Return"
src.updateUsrDialog()
- sleep(30) //only sleep if called by user
- for(var/obj/machinery/computer/rdconsole/RDC in get_area(src))
- if(!RDC.sync)
- continue
- for(var/datum/tech/T in RDC.files.known_tech)
- files.AddTech2Known(T)
- for(var/datum/design/D in RDC.files.known_designs)
- files.AddDesign2Known(D)
- files.RefreshResearch()
- var/i = src.convert_designs()
- var/tech_output = update_tech()
- if(!silent)
- temp = "Processed [i] equipment designs.
"
- temp += tech_output
- temp += "Return"
- src.updateUsrDialog()
- if(i || tech_output)
- src.visible_message("\icon[src] [src] beeps, \"Succesfully synchronized with R&D server. New data processed.\"")
+ if(i || tech_output)
+ src.visible_message("\icon[src] [src] beeps, \"Succesfully synchronized with R&D server. New data processed.\"")
+ return
+
+/obj/machinery/mecha_part_fabricator/proc/get_resource_cost_w_coeff(var/obj/item/mecha_parts/part as obj,var/resource as text, var/roundto=1)
+ return round(part.construction_cost[resource]*resource_coeff, roundto)
+
+/obj/machinery/mecha_part_fabricator/proc/get_construction_time_w_coeff(var/obj/item/mecha_parts/part as obj, var/roundto=1)
+ return round(part.construction_time*time_coeff, roundto)
+
+
+/obj/machinery/mecha_part_fabricator/attack_hand(mob/user as mob)
+ var/dat, left_part
+ if (..())
return
-
- proc/get_resource_cost_w_coeff(var/obj/item/mecha_parts/part as obj,var/resource as text, var/roundto=1)
- return round(part.construction_cost[resource]*resource_coeff, roundto)
-
- proc/get_construction_time_w_coeff(var/obj/item/mecha_parts/part as obj, var/roundto=1)
- return round(part.construction_time*time_coeff, roundto)
-
-
- attack_hand(mob/user as mob)
- var/dat, left_part
- if (..())
- return
- if(!operation_allowed(user))
- return
- user.machine = src
- var/turf/exit = get_step(src,SOUTH)
- if(exit.density)
- src.visible_message("\icon[src] [src] beeps, \"Error! Part outlet is obstructed\".")
- return
- if(temp)
- left_part = temp
- else if(src.being_built)
- left_part = {"Building [src.being_built.name].
- Please wait until completion..."}
- else
- switch(screen)
- if("main")
- left_part = output_available_resources()+"
"
- left_part += "Sync with R&D servers | [sync?"Dis":"En"]able auto sync
"
- for(var/part_set in part_sets)
- left_part += "[part_set] - \[Add all parts to queue\]
"
- if("parts")
- left_part += output_parts_list(part_set)
- left_part += "
Return"
- dat = {"
-
- [src.name]
-
-
-
-
-
-
- |
- [left_part]
- |
-
- [list_queue()]
- |
-
-
-
- "}
- user << browse(dat, "window=mecha_fabricator;size=1000x400")
- onclose(user, "mecha_fabricator")
+ if(!operation_allowed(user))
return
+ user.machine = src
+ var/turf/exit = get_step(src,SOUTH)
+ if(exit.density)
+ src.visible_message("\icon[src] [src] beeps, \"Error! Part outlet is obstructed\".")
+ return
+ if(temp)
+ left_part = temp
+ else if(src.being_built)
+ left_part = {"Building [src.being_built.name].
+ Please wait until completion..."}
+ else
+ switch(screen)
+ if("main")
+ left_part = output_available_resources()+"
"
+ left_part += "Sync with R&D servers | [sync?"Dis":"En"]able auto sync
"
+ for(var/part_set in part_sets)
+ left_part += "[part_set] - \[Add all parts to queue\]
"
+ if("parts")
+ left_part += output_parts_list(part_set)
+ left_part += "
Return"
+ dat = {"
+
+ [src.name]
+
+
+
+
+
+
+ |
+ [left_part]
+ |
+
+ [list_queue()]
+ |
+
+
+
+ "}
+ user << browse(dat, "window=mecha_fabricator;size=1000x400")
+ onclose(user, "mecha_fabricator")
+ return
- Topic(href, href_list)
- ..()
- var/datum/topic_input/filter = new /datum/topic_input(href,href_list)
- if(href_list["part_set"])
- var/tpart_set = filter.getStr("part_set")
- if(tpart_set)
- if(tpart_set=="clear")
- src.part_set = null
- else
- src.part_set = tpart_set
- screen = "parts"
- if(href_list["part"])
- var/list/part = filter.getObj("part")
- if(!processing_queue)
- build_part(part)
+/obj/machinery/mecha_part_fabricator/Topic(href, href_list)
+ ..()
+ var/datum/topic_input/filter = new /datum/topic_input(href,href_list)
+ if(href_list["part_set"])
+ var/tpart_set = filter.getStr("part_set")
+ if(tpart_set)
+ if(tpart_set=="clear")
+ src.part_set = null
else
- add_to_queue(part)
- if(href_list["add_to_queue"])
- add_to_queue(filter.getObj("add_to_queue"))
- return update_queue_on_page()
- if(href_list["remove_from_queue"])
- remove_from_queue(filter.getNum("remove_from_queue"))
- return update_queue_on_page()
- if(href_list["partset_to_queue"])
- add_part_set_to_queue(filter.get("partset_to_queue"))
- return update_queue_on_page()
- if(href_list["process_queue"])
- spawn(-1)
- if(processing_queue || being_built)
- return 0
- processing_queue = 1
- process_queue()
- processing_queue = 0
+ src.part_set = tpart_set
+ screen = "parts"
+ if(href_list["part"])
+ var/list/part = filter.getObj("part")
+ if(!processing_queue)
+ build_part(part)
+ else
+ add_to_queue(part)
+ if(href_list["add_to_queue"])
+ add_to_queue(filter.getObj("add_to_queue"))
+ return update_queue_on_page()
+ if(href_list["remove_from_queue"])
+ remove_from_queue(filter.getNum("remove_from_queue"))
+ return update_queue_on_page()
+ if(href_list["partset_to_queue"])
+ add_part_set_to_queue(filter.get("partset_to_queue"))
+ return update_queue_on_page()
+ if(href_list["process_queue"])
+ spawn(-1)
+ if(processing_queue || being_built)
+ return 0
+ processing_queue = 1
+ process_queue()
+ processing_queue = 0
/*
if(href_list["list_queue"])
list_queue()
*/
- if(href_list["clear_temp"])
- temp = null
- if(href_list["screen"])
- src.screen = href_list["screen"]
- if(href_list["queue_move"] && href_list["index"])
- var/index = filter.getNum("index")
- var/new_index = index + filter.getNum("queue_move")
- if(isnum(index) && isnum(new_index))
- if(InRange(new_index,1,queue.len))
- queue.Swap(index,new_index)
- return update_queue_on_page()
- if(href_list["clear_queue"])
- queue = list()
- return update_queue_on_page()
- if(href_list["sync"])
- queue = list()
- src.sync()
- return update_queue_on_page()
- if(href_list["auto_sync"])
- src.sync = !src.sync
- //pr_auto_sync.toggle()
- if(href_list["part_desc"])
- var/obj/part = filter.getObj("part_desc")
- if(part)
- temp = {"[part] description:
- [part.desc]
- Return
- "}
- if(href_list["remove_mat"] && href_list["material"])
- temp = "Ejected [remove_material(href_list["material"],text2num(href_list["remove_mat"]))] of [href_list["material"]]
Return"
- src.updateUsrDialog()
- return
+ if(href_list["clear_temp"])
+ temp = null
+ if(href_list["screen"])
+ src.screen = href_list["screen"]
+ if(href_list["queue_move"] && href_list["index"])
+ var/index = filter.getNum("index")
+ var/new_index = index + filter.getNum("queue_move")
+ if(isnum(index) && isnum(new_index))
+ if(InRange(new_index,1,queue.len))
+ queue.Swap(index,new_index)
+ return update_queue_on_page()
+ if(href_list["clear_queue"])
+ queue = list()
+ return update_queue_on_page()
+ if(href_list["sync"])
+ queue = list()
+ src.sync()
+ return update_queue_on_page()
+ if(href_list["auto_sync"])
+ src.sync = !src.sync
+ //pr_auto_sync.toggle()
+ if(href_list["part_desc"])
+ var/obj/part = filter.getObj("part_desc")
+ if(part)
+ temp = {"[part] description:
+ [part.desc]
+ Return
+ "}
+ if(href_list["remove_mat"] && href_list["material"])
+ temp = "Ejected [remove_material(href_list["material"],text2num(href_list["remove_mat"]))] of [href_list["material"]]
Return"
+ src.updateUsrDialog()
+ return
- process()
- if (stat & (NOPOWER|BROKEN))
- return
- if(sync)
- spawn(-1)
- sync(1)
+/obj/machinery/mecha_part_fabricator/process()
+ if (stat & (NOPOWER|BROKEN))
return
+ if(sync)
+ spawn(-1)
+ sync(1)
+ return
- attackby(obj/item/stack/sheet/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/card/emag))
- emag()
- return
- var/material
- if(istype(W, /obj/item/stack/sheet/gold))
+/obj/machinery/mecha_part_fabricator/proc/remove_material(var/mat_string, var/amount)
+ var/type
+ switch(mat_string)
+ if("metal")
+ type = /obj/item/stack/sheet/metal
+ if("glass")
+ type = /obj/item/stack/sheet/glass
+ if("gold")
+ type = /obj/item/stack/sheet/gold
+ if("silver")
+ type = /obj/item/stack/sheet/silver
+ if("diamond")
+ type = /obj/item/stack/sheet/diamond
+ if("plasma")
+ type = /obj/item/stack/sheet/plasma
+ if("uranium")
+ type = /obj/item/stack/sheet/uranium
+ if("bananium")
+ type = /obj/item/stack/sheet/clown
+ else
+ return 0
+ var/result = 0
+ var/obj/item/stack/sheet/res = new type(src)
+ var/total_amount = round(resources[mat_string]/res.perunit)
+ res.amount = min(total_amount,amount)
+ if(res.amount>0)
+ resources[mat_string] -= res.amount*res.perunit
+ res.Move(src.loc)
+ result = res.amount
+ else
+ del res
+ return result
+
+
+/obj/machinery/mecha_part_fabricator/attackby(obj/W as obj, mob/user as mob)
+ 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)
+ if(istype(W, /obj/item/weapon/crowbar))
+ playsound(src.loc, '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/plasma/G = new /obj/item/stack/sheet/plasma(src.loc)
+ G.amount = round(src.resources["plasma"] / G.perunit)
+ if(src.resources["silver"] >= 2000)
+ var/obj/item/stack/sheet/silver/G = new /obj/item/stack/sheet/silver(src.loc)
+ G.amount = round(src.resources["silver"] / G.perunit)
+ if(src.resources["gold"] >= 2000)
+ var/obj/item/stack/sheet/gold/G = new /obj/item/stack/sheet/gold(src.loc)
+ G.amount = round(src.resources["gold"] / G.perunit)
+ if(src.resources["uranium"] >= 2000)
+ var/obj/item/stack/sheet/uranium/G = new /obj/item/stack/sheet/uranium(src.loc)
+ G.amount = round(src.resources["uranium"] / G.perunit)
+ if(src.resources["diamond"] >= 2000)
+ var/obj/item/stack/sheet/diamond/G = new /obj/item/stack/sheet/diamond(src.loc)
+ G.amount = round(src.resources["diamond"] / G.perunit)
+ if(src.resources["bananium"] >= 2000)
+ var/obj/item/stack/sheet/clown/G = new /obj/item/stack/sheet/clown(src.loc)
+ G.amount = round(src.resources["bananium"] / G.perunit)
+ del(src)
+ return 1
+ else
+ user << "\red You can't load the [src.name] while it's opened."
+ return 1
+
+ if(istype(W, /obj/item/weapon/card/emag))
+ emag()
+ return
+ var/material
+ switch(W.type)
+ if(/obj/item/stack/sheet/gold)
material = "gold"
- else if(istype(W, /obj/item/stack/sheet/silver))
+ if(/obj/item/stack/sheet/silver)
material = "silver"
- else if(istype(W, /obj/item/stack/sheet/diamond))
+ if(/obj/item/stack/sheet/diamond)
material = "diamond"
- else if(istype(W, /obj/item/stack/sheet/plasma))
+ if(/obj/item/stack/sheet/plasma)
material = "plasma"
- else if(istype(W, /obj/item/stack/sheet/metal))
+ if(/obj/item/stack/sheet/metal)
material = "metal"
- else if(istype(W, /obj/item/stack/sheet/glass))
+ if(/obj/item/stack/sheet/glass)
material = "glass"
- else if(istype(W, /obj/item/stack/sheet/clown))
+ if(/obj/item/stack/sheet/clown)
material = "bananium"
- else if(istype(W, /obj/item/stack/sheet/uranium))
+ if(/obj/item/stack/sheet/uranium)
material = "uranium"
else
return ..()
- if(src.being_built)
- user << "The fabricator is currently processing. Please wait until completion."
- return
-
- var/name = "[W.name]"
- var/amnt = W.perunit
- if(src.resources[material] < res_max_amount)
- var/count = 0
- src.overlays += "fab-load-[material]"//loading animation is now an overlay based on material type. No more spontaneous conversion of all ores to metal. -vey
- sleep(10)
- if(W && W.amount)
- while(src.resources[material] < res_max_amount && W)
- src.resources[material] += amnt
- W.use(1)
- count++
- src.overlays -= "fab-load-[material]"
- user << "You insert [count] [name] into the fabricator."
- src.updateUsrDialog()
- else
- user << "The fabricator cannot hold more [name]."
+ if(src.being_built)
+ user << "The fabricator is currently processing. Please wait until completion."
return
-
- proc/remove_material(var/mat_string, var/amount)
- var/type
- switch(mat_string)
- if("metal")
- type = /obj/item/stack/sheet/metal
- if("glass")
- type = /obj/item/stack/sheet/glass
- if("gold")
- type = /obj/item/stack/sheet/gold
- if("silver")
- type = /obj/item/stack/sheet/silver
- if("diamond")
- type = /obj/item/stack/sheet/diamond
- if("plasma")
- type = /obj/item/stack/sheet/plasma
- if("uranium")
- type = /obj/item/stack/sheet/uranium
- if("bananium")
- type = /obj/item/stack/sheet/clown
- else
- return 0
- var/result = 0
- var/obj/item/stack/sheet/res = new type(src)
- var/total_amount = round(resources[mat_string]/res.perunit)
- res.amount = min(total_amount,amount)
- if(res.amount>0)
- resources[mat_string] -= res.amount*res.perunit
- res.Move(src.loc)
- result = res.amount
- else
- del res
- return result
-
-
-
-
+ var/obj/item/stack/sheet/stack = W
+ var/sname = "[stack.name]"
+ var/amnt = stack.perunit
+ if(src.resources[material] < res_max_amount)
+ var/count = 0
+ src.overlays += "fab-load-[material]"//loading animation is now an overlay based on material type. No more spontaneous conversion of all ores to metal. -vey
+ sleep(10)
+ if(stack && stack.amount)
+ while(src.resources[material] < res_max_amount && stack)
+ src.resources[material] += amnt
+ stack.use(1)
+ count++
+ src.overlays -= "fab-load-[material]"
+ user << "You insert [count] [sname] into the fabricator."
+ src.updateUsrDialog()
+ else
+ user << "The fabricator cannot hold more [sname]."
+ return
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index b30cd7211f7..51a0463da02 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -1185,6 +1185,8 @@
spawn_result()
var/obj/item/mecha_parts/chassis/const_holder = holder
const_holder.construct = new /datum/construction/reversible/mecha/odysseus(const_holder)
+ const_holder.icon = 'mech_construction.dmi'
+ const_holder.icon_state = "odysseus0"
const_holder.density = 1
spawn()
del src
@@ -1203,7 +1205,7 @@
"backkey"=/obj/item/weapon/crowbar,
"desc"="External armor is installed."),
//3
- list("key"=/obj/item/mecha_parts/part/odysseus_armour,
+ list("key"=/obj/item/stack/sheet/plasteel,
"backkey"=/obj/item/weapon/weldingtool,
"desc"="Internal armor is welded."),
//4
@@ -1262,82 +1264,108 @@
switch(index)
if(14)
user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
+ holder.icon_state = "odysseus1"
if(13)
if(diff==FORWARD)
user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
+ holder.icon_state = "odysseus2"
else
user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
+ holder.icon_state = "odysseus0"
if(12)
if(diff==FORWARD)
user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
+ holder.icon_state = "odysseus3"
else
user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
+ holder.icon_state = "odysseus1"
if(11)
if(diff==FORWARD)
user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
+ holder.icon_state = "odysseus4"
else
user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
var/obj/item/weapon/cable_coil/coil = new /obj/item/weapon/cable_coil(get_turf(holder))
coil.amount = 4
+ holder.icon_state = "odysseus2"
if(10)
if(diff==FORWARD)
user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
del used_atom
+ holder.icon_state = "odysseus5"
else
user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
+ holder.icon_state = "odysseus3"
if(9)
if(diff==FORWARD)
user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ holder.icon_state = "odysseus6"
else
user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
new /obj/item/weapon/circuitboard/mecha/odysseus/main(get_turf(holder))
+ holder.icon_state = "odysseus4"
if(8)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
del used_atom
+ holder.icon_state = "odysseus7"
else
user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
+ holder.icon_state = "odysseus5"
if(7)
if(diff==FORWARD)
user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ holder.icon_state = "odysseus8"
else
user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
new /obj/item/weapon/circuitboard/mecha/odysseus/peripherals(get_turf(holder))
+ holder.icon_state = "odysseus6"
if(6)
if(diff==FORWARD)
user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
+ holder.icon_state = "odysseus9"
else
user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ holder.icon_state = "odysseus7"
if(5)
if(diff==FORWARD)
user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
+ holder.icon_state = "odysseus10"
else
user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder))
MS.amount = 5
+ holder.icon_state = "odysseus8"
if(4)
if(diff==FORWARD)
user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
+ holder.icon_state = "odysseus11"
else
user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
+ holder.icon_state = "odysseus9"
if(3)
if(diff==FORWARD)
user.visible_message("[user] installs [used_atom] layer to [holder].", "You install external reinforced armor layer to [holder].")
- holder.overlays += used_atom.icon_state
- del used_atom
+
+ holder.icon_state = "odysseus12"
else
user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
- if(2)
+ holder.icon_state = "odysseus10"
if(diff==FORWARD)
user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
+ holder.icon_state = "odysseus13"
else
- var/obj/item/mecha_parts/part/odysseus_armour/MS = new /obj/item/mecha_parts/part/odysseus_armour(get_turf(holder))
+ var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder))
+ MS.amount = 5
user.visible_message("[user] pries [MS] from [holder].", "You prie [MS] from [holder].")
+ holder.icon_state = "odysseus11"
if(1)
if(diff==FORWARD)
user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
+ holder.icon_state = "odysseus14"
else
user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
+ holder.icon_state = "odysseus12"
return 1
spawn_result()
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
index 40b26cc0b4e..5cc71918584 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/game/mecha/mecha_parts.dm
@@ -387,12 +387,12 @@
construction_time = 130
construction_cost = list("metal"=15000)
-/obj/item/mecha_parts/part/odysseus_armour
+/*/obj/item/mecha_parts/part/odysseus_armour
name="Odysseus Carapace"
icon_state = "odysseus_armour"
origin_tech = "materials=3;engineering=3"
construction_time = 200
- construction_cost = list("metal"=15000)
+ construction_cost = list("metal"=15000)*/
///////// Circuitboards
diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm
index d5d470db103..29dc0eef7f2 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -95,6 +95,9 @@
parts -= part
return
+/obj/effect/decal/mecha_wreckage/gygax/dark
+ name = "Dark Gygax wreckage"
+ icon_state = "darkgygax-broken"
/obj/effect/decal/mecha_wreckage/marauder
name = "Marauder wreckage"
diff --git a/code/game/objects/door_assembly.dm b/code/game/objects/door_assembly.dm
index 629e3c2c02a..2659285befd 100644
--- a/code/game/objects/door_assembly.dm
+++ b/code/game/objects/door_assembly.dm
@@ -2,22 +2,24 @@ obj/structure/door_assembly
icon = 'door_assembly.dmi'
name = "Airlock Assembly"
- icon_state = "door_as0"
+ icon_state = "door_as_0"
anchored = 0
density = 1
var/state = 0
- var/glass = 0
- var/base_icon_state
+ var/mineral = null
+ var/base_icon_state = "door_as_0"
+ var/glass_base_icon_state = "door_as_g0"
var/obj/item/weapon/airlock_electronics/electronics = null
var/airlock_type = /obj/machinery/door/airlock //the type path of the airlock once completed
- var/glass_type = /obj/machinery/door/airlock/glass //the type path of the airlock if changed into a glass airlock
- var/glass_base_icon_state = "door_as_g"
+ var/glass_type = /obj/machinery/door/airlock/glass
+ var/glass = null
+
New()
base_icon_state = copytext(icon_state,1,lentext(icon_state))
door_assembly_0
name = "Airlock Assembly"
- icon_state = "door_as1"
+ icon_state = "door_as_1"
airlock_type = /obj/machinery/door/airlock
anchored = 1
density = 1
@@ -117,16 +119,13 @@ obj/structure/door_assembly
door_assembly_med
name = "Medical Airlock Assembly"
icon_state = "door_as_med1"
- glass_base_icon_state = "door_as_gmed"
- glass_type = /obj/machinery/door/airlock/glass_medical
airlock_type = /obj/machinery/door/airlock/medical
anchored = 1
density = 1
state = 1
- glass = 0
glass
- glass = 1
+ mineral = "glass"
icon_state = "door_as_gmed1"
door_assembly_mai
@@ -165,19 +164,83 @@ obj/structure/door_assembly
state = 1
glass = 0
- door_assembly_g
+ door_assembly_glass
name = "Glass Airlock Assembly"
icon_state = "door_as_g1"
airlock_type = /obj/machinery/door/airlock/glass
anchored = 1
density = 1
state = 1
- glass = 1
+ mineral = "glass"
+
+ door_assembly_gold
+ name = "Gold Airlock Assembly"
+ icon_state = "door_as_gold1"
+ airlock_type = /obj/machinery/door/airlock/gold
+ anchored = 1
+ density = 1
+ state = 1
+ mineral = "gold"
+
+ door_assembly_silver
+ name = "Silver Airlock Assembly"
+ icon_state = "door_as_silver1"
+ airlock_type = /obj/machinery/door/airlock/silver
+ anchored = 1
+ density = 1
+ state = 1
+ mineral = "silver"
+
+ door_assembly_diamond
+ name = "Diamond Airlock Assembly"
+ icon_state = "door_as_diamond1"
+ airlock_type = /obj/machinery/door/airlock/diamond
+ anchored = 1
+ density = 1
+ state = 1
+ mineral = "diamond"
+
+ door_assembly_uranium
+ name = "Uranium Airlock Assembly"
+ icon_state = "door_as_uranium1"
+ airlock_type = /obj/machinery/door/airlock/uranium
+ anchored = 1
+ density = 1
+ state = 1
+ mineral = "uranium"
+
+ door_assembly_plasma
+ name = "Plasma Airlock Assembly"
+ icon_state = "door_as_plasma1"
+ airlock_type = /obj/machinery/door/airlock/plasma
+ anchored = 1
+ density = 1
+ state = 1
+ mineral = "plasma"
+
+ door_assembly_clown
+ name = "Bananium Airlock Assembly"
+ desc = "Honk"
+ icon_state = "door_as_bananium1"
+ airlock_type = /obj/machinery/door/airlock/clown
+ anchored = 1
+ density = 1
+ state = 1
+ mineral = "clown"
+
+ door_assembly_sandstone
+ name = "Sandstone Airlock Assembly"
+ icon_state = "door_as_sandstone1"
+ airlock_type = /obj/machinery/door/airlock/sandstone
+ anchored = 1
+ density = 1
+ state = 1
+ mineral = "sandstone"
/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/weldingtool) && !anchored )
var/obj/item/weapon/weldingtool/WT = W
- if (WT.remove_fuel(0,user))
+ if(WT.remove_fuel(0,user))
user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.")
playsound(src.loc, 'Welder2.ogg', 50, 1)
@@ -185,8 +248,30 @@ obj/structure/door_assembly
if(!src || !WT.isOn()) return
user << "\blue You dissasembled the airlock assembly!"
new /obj/item/stack/sheet/metal(get_turf(src), 4)
- if(src.glass==1)
- new /obj/item/stack/sheet/rglass(get_turf(src))
+ switch(mineral)
+ if("glass")
+ new /obj/item/stack/sheet/rglass(get_turf(src))
+ if("gold")
+ new /obj/item/stack/sheet/gold(get_turf(src))
+ new /obj/item/stack/sheet/gold(get_turf(src))
+ if("silver")
+ new /obj/item/stack/sheet/silver(get_turf(src))
+ new /obj/item/stack/sheet/silver(get_turf(src))
+ if("diamond")
+ new /obj/item/stack/sheet/diamond(get_turf(src))
+ new /obj/item/stack/sheet/diamond(get_turf(src))
+ if("uranium")
+ new /obj/item/stack/sheet/uranium(get_turf(src))
+ new /obj/item/stack/sheet/uranium(get_turf(src))
+ if("plasma")
+ new /obj/item/stack/sheet/plasma(get_turf(src))
+ new /obj/item/stack/sheet/plasma(get_turf(src))
+ if("clown")
+ new /obj/item/stack/sheet/clown(get_turf(src))
+ new /obj/item/stack/sheet/clown(get_turf(src))
+ if("sandstone")
+ new /obj/item/stack/sheet/sandstone(get_turf(src))
+ new /obj/item/stack/sheet/sandstone(get_turf(src))
del(src)
else
user << "\blue You need more welding fuel to dissassemble the airlock assembly."
@@ -265,20 +350,99 @@ obj/structure/door_assembly
ae = electronics
electronics = null
ae.loc = src.loc
-
- else if(istype(W, /obj/item/stack/sheet/rglass) && glass == 0)
- playsound(src.loc, 'Crowbar.ogg', 100, 1)
- user.visible_message("[user] adds reinforced glass windows to the airlock assembly.", "You start to install reinforced glass windows into the airlock assembly.")
- var/obj/item/stack/sheet/rglass/G = W
- if(do_after(user, 40))
- if(G)
- if(G.amount>=1)
- user << "\blue You installed glass windows the airlock assembly!"
- G.use(1)
- src.glass = 1
- src.name = "Near finished Window Airlock Assembly"
- src.airlock_type = /obj/machinery/door/airlock/glass
- src.base_icon_state = "door_as_g" //this will be applied to the icon_state with the correct state number at the proc's end.
+ else if(istype(W, /obj/item/stack/sheet) && !mineral)
+ var/obj/item/stack/sheet/G = W
+ if(G)
+ if(G.amount>=1)
+ switch(G.type)
+ if(/obj/item/stack/sheet/rglass)
+ playsound(src.loc, 'Crowbar.ogg', 100, 1)
+ user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
+ if(do_after(user, 40))
+ user << "\blue You installed reinforced glass windows into the airlock assembly!"
+ G.use(1)
+ src.mineral = "glass"
+ src.name = "Near finished Window Airlock Assembly"
+ src.airlock_type = /obj/machinery/door/airlock/glass
+ src.base_icon_state = "door_as_glass" //this will be applied to the icon_state with the correct state number at the proc's end.
+ if(/obj/item/stack/sheet/gold)
+ if(G.amount>=2)
+ playsound(src.loc, 'Crowbar.ogg', 100, 1)
+ user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
+ if(do_after(user, 40))
+ user << "\blue You installed gold plating into the airlock assembly!"
+ G.use(2)
+ src.mineral = "gold"
+ src.name = "Near finished Gold Airlock Assembly"
+ src.airlock_type = /obj/machinery/door/airlock/gold
+ src.base_icon_state = "door_as_gold"
+ if(/obj/item/stack/sheet/silver)
+ if(G.amount>=2)
+ playsound(src.loc, 'Crowbar.ogg', 100, 1)
+ user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
+ if(do_after(user, 40))
+ user << "\blue You installed silver plating into the airlock assembly!"
+ G.use(2)
+ src.mineral = "silver"
+ src.name = "Near finished Silver Airlock Assembly"
+ src.airlock_type = /obj/machinery/door/airlock/silver
+ src.base_icon_state = "door_as_silver"
+ if(/obj/item/stack/sheet/diamond)
+ if(G.amount>=2)
+ playsound(src.loc, 'Crowbar.ogg', 100, 1)
+ user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
+ if(do_after(user, 40))
+ user << "\blue You installed diamond plating into the airlock assembly!"
+ G.use(2)
+ src.mineral = "diamond"
+ src.name = "Near finished Diamond Airlock Assembly"
+ src.airlock_type = /obj/machinery/door/airlock/diamond
+ src.base_icon_state = "door_as_diamond"
+ if(/obj/item/stack/sheet/uranium)
+ if(G.amount>=2)
+ playsound(src.loc, 'Crowbar.ogg', 100, 1)
+ user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
+ if(do_after(user, 40))
+ user << "\blue You installed uranium plating into the airlock assembly!"
+ G.use(2)
+ src.mineral = "uranium"
+ src.name = "Near finished Uranium Airlock Assembly"
+ src.airlock_type = /obj/machinery/door/airlock/uranium
+ src.base_icon_state = "door_as_uranium"
+ if(/obj/item/stack/sheet/plasma)
+ if(G.amount>=2)
+ playsound(src.loc, 'Crowbar.ogg', 100, 1)
+ user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
+ if(do_after(user, 40))
+ user << "\blue You installed plasma plating into the airlock assembly!"
+ G.use(2)
+ src.mineral = "plasma"
+ src.name = "Near finished Plasma Airlock Assembly"
+ src.airlock_type = /obj/machinery/door/airlock/plasma
+ src.base_icon_state = "door_as_plasma"
+ if(/obj/item/stack/sheet/clown)
+ if(G.amount>=2)
+ playsound(src.loc, 'Crowbar.ogg', 100, 1)
+ user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
+ if(do_after(user, 40))
+ user << "\blue You installed bananium plating into the airlock assembly!HONK"
+ G.use(2)
+ playsound(src.loc, 'bikehorn.ogg', 15, 1, -3)
+ src.mineral = "clown"
+ src.name = "Near finished Bananium Airlock Assembly"
+ src.airlock_type = /obj/machinery/door/airlock/clown
+ src.base_icon_state = "door_as_clown"
+ if(/obj/item/stack/sheet/sandstone)
+ if(G.amount>=2)
+ playsound(src.loc, 'Crowbar.ogg', 100, 1)
+ user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
+ if(do_after(user, 40))
+ user << "\blue You installed sandstone plating into the airlock assembly!"
+ G.use(2)
+ src.mineral = "sandstone"
+ src.name = "Near finished Sandstone Airlock Assembly"
+ src.airlock_type = /obj/machinery/door/airlock/sandstone
+ src.base_icon_state = "door_as_sandstone"
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 )
playsound(src.loc, 'Screwdriver.ogg', 100, 1)
@@ -288,10 +452,33 @@ obj/structure/door_assembly
if(!src) return
user << "\blue You finish the airlock!"
var/obj/machinery/door/airlock/door
- if(glass)
- door = new src.glass_type( src.loc )
- else
- door = new src.airlock_type( src.loc )
+ switch(mineral)
+ if("glass")
+ airlock_type = /obj/machinery/door/airlock/glass
+ door = new src.airlock_type( src.loc )
+ if("gold")
+ airlock_type = /obj/machinery/door/airlock/gold
+ door = new src.airlock_type( src.loc )
+ if("silver")
+ airlock_type = /obj/machinery/door/airlock/silver
+ door = new src.airlock_type( src.loc )
+ if("diamond")
+ airlock_type = /obj/machinery/door/airlock/diamond
+ door = new src.airlock_type( src.loc )
+ if("uranium")
+ airlock_type = /obj/machinery/door/airlock/uranium
+ door = new src.airlock_type( src.loc )
+ if("plasma")
+ airlock_type = /obj/machinery/door/airlock/plasma
+ door = new src.airlock_type( src.loc )
+ if("clown")
+ airlock_type = /obj/machinery/door/airlock/clown
+ door = new src.airlock_type( src.loc )
+ if("sandstone")
+ airlock_type = /obj/machinery/door/airlock/sandstone
+ door = new src.airlock_type( src.loc )
+ else
+ door = new src.airlock_type( src.loc )
//door.req_access = src.req_access
door.electronics = src.electronics
door.req_access = src.electronics.conf_access
@@ -299,10 +486,7 @@ obj/structure/door_assembly
del(src)
else
..()
- if(glass)
- icon_state = "[glass_base_icon_state][state]"
- else
- icon_state = "[base_icon_state][state]"
+ icon_state = "[base_icon_state][state]"
//This updates the icon_state. They are named as "door_as1_eng" where the 1 in that example
//represents what state it's in. So the most generic algorithm for the correct updating of
//this is simply to change the number.
\ No newline at end of file
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index a5565b78c15..2d4af182787 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -518,3 +518,36 @@
istype(W, /obj/item/weapon/kitchen/utensil/fork) && W.icon_state != "forkloaded" || \
istype(W, /obj/item/weapon/twohanded/fireaxe) \
)
+
+proc/is_hot(obj/item/W as obj)
+ switch(W.type)
+ if(/obj/item/weapon/weldingtool)
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.isOn())
+ return 3800
+ else
+ return 0
+ if(/obj/item/weapon/lighter)
+ if(W:lit)
+ return 1500
+ else
+ return 0
+ if(/obj/item/weapon/match)
+ if(W:lit)
+ return 1000
+ else
+ return 0
+ if(/obj/item/clothing/mask/cigarette)
+ if(W:lit)
+ return 1000
+ else
+ return 0
+ if(/obj/item/weapon/pickaxe/plasmacutter)
+ return 3800
+ if(/obj/item/weapon/melee/energy)
+ return 3500
+ else
+ return 0
+
+ return 0
+
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index effc1603cc9..c6f098873fd 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -21,7 +21,8 @@
/obj/item/weapon/dnainjector/proc/inject(mob/M as mob)
- M.radiation += rand(20,50)
+ if(istype(M,/mob/living))
+ M.radiation += rand(20,50)
if (!(NOCLONE in M.mutations)) // prevents drained people from having their DNA changed
if (dnatype == "ui")
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index b2197a1acc3..029b7930104 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -340,13 +340,21 @@ WELDINGTOOOL
/obj/item/weapon/weldingtool/experimental
name = "Experimental Welding Tool"
- max_fuel = 80
+ max_fuel = 40
w_class = 3.0
m_amt = 70
g_amt = 120
+ origin_tech = "engineering=4;plasma=3"
+ icon_state = "ewelder"
+ var/last_gen = 0
+/obj/item/weapon/weldingtool/experimental/proc/fuel_gen()//Proc to make the experimental welder generate fuel, optimized as fuck -Sieve
+ var/gen_amount = ((world.time-last_gen)/25)
+ reagents += (gen_amount)
+ if(reagents > max_fuel)
+ reagents = max_fuel
/obj/item/weapon/wirecutters
name = "wirecutters"
desc = "This cuts wires."
diff --git a/code/game/objects/mineral_doors.dm b/code/game/objects/mineral_doors.dm
index fb844265017..19f6bc2e810 100644
--- a/code/game/objects/mineral_doors.dm
+++ b/code/game/objects/mineral_doors.dm
@@ -8,9 +8,9 @@
opacity = 1
icon = 'mineral_doors.dmi'
- icon_state = "iron"
+ icon_state = "metal"
- var/mineralType = "iron"
+ var/mineralType = "metal"
var/state = 0 //closed, 1 == open
var/isSwitchingStates = 0
var/hardness = 1
@@ -116,9 +116,13 @@
proc/Dismantle(devastated = 0)
if(!devastated)
- var/ore = text2path("/obj/item/weapon/ore/[mineralType]")
+ var/ore = text2path("/obj/item/stack/sheet/[mineralType]")
for(var/i = 1, i <= oreAmount, i++)
new ore(get_turf(src))
+ else
+ var/ore = text2path("/obj/item/stack/sheet/[mineralType]")
+ for(var/i = 3, i <= oreAmount, i++)
+ new ore(get_turf(src))
del(src)
ex_act(severity = 1)
@@ -181,7 +185,7 @@
return 1
/obj/structure/mineral_door/iron
- mineralType = "iron"
+ mineralType = "metal"
hardness = 3
/obj/structure/mineral_door/silver
@@ -234,7 +238,7 @@
var/toxinsToDeduce = temperature/10
napalm.toxins = toxinsToDeduce
- napalm.temperature = 400+T0C
+ napalm.temperature = 200+T0C
target_tile.assume_air(napalm)
spawn (0) target_tile.hotspot_expose(temperature, 400)
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 27be50d553f..5951f0b7e10 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -50,19 +50,65 @@ obj/structure/meteorhit(obj/O as obj)
new /obj/item/stack/sheet/metal(get_turf(src))
del(src)
- else if((istype(W, /obj/item/stack/sheet/metal)) && (W:amount >= 2) && istype(src,/obj/structure/girder/displaced))
+ else if(istype(W, /obj/item/stack/sheet) && !anchored)
+ switch(W.type)
+ if(/obj/item/stack/sheet/metal)
+ W:use(2)
+ user << "\blue You create a false wall! Push on it to open or close the passage."
+ new /obj/structure/falsewall (src.loc)
+ if(/obj/item/stack/sheet/plasteel)
+ W:use(2)
+ user << "\blue You create a false wall! Push on it to open or close the passage."
+ new /obj/structure/falserwall (src.loc)
+ if(/obj/item/stack/sheet/gold)
+ W:use(2)
+ user << "\blue You create a false wall! Push on it to open or close the passage."
+ new /obj/structure/falsewall/gold (src.loc)
+ if(/obj/item/stack/sheet/silver)
+ W:use(2)
+ user << "\blue You create a false wall! Push on it to open or close the passage."
+ new /obj/structure/falsewall/silver (src.loc)
+ if(/obj/item/stack/sheet/diamond)
+ W:use(2)
+ user << "\blue You create a false wall! Push on it to open or close the passage."
+ new /obj/structure/falsewall/diamond (src.loc)
+ if(/obj/item/stack/sheet/uranium)
+ W:use(2)
+ user << "\blue You create a false wall! Push on it to open or close the passage."
+ new /obj/structure/falsewall/uranium (src.loc)
+ if(/obj/item/stack/sheet/plasma)
+ W:use(2)
+ user << "\blue You create a false wall! Push on it to open or close the passage."
+ new /obj/structure/falsewall/plasma (src.loc)
+ if(/obj/item/stack/sheet/clown)
+ W:use(2)
+ user << "\blue You create a false wall! Push on it to open or close the passage."
+ new /obj/structure/falsewall/clown (src.loc)
+ if(/obj/item/stack/sheet/sandstone)
+ W:use(2)
+ user << "\blue You create a false wall! Push on it to open or close the passage."
+ new /obj/structure/falsewall/sandstone (src.loc)
+/* if(/obj/item/stack/sheet/wood)
+ W:use(2)
+ user << "\blue You create a false wall! Push on it to open or close the passage."
+ new /obj/structure/falsewall/wood (src.loc)*/
+ add_hiddenprint(usr)
+ del(src)
+
+
+/* else if((istype(W, /obj/item/stack/sheet/metal)) && (W:amount >= 2) && istype(src,/obj/structure/girder/displaced))
W:use(2)
user << "\blue You create a false wall! Push on it to open or close the passage."
new /obj/structure/falsewall (src.loc)
add_hiddenprint(usr)
del(src)
-
else if(istype(W, /obj/item/stack/sheet/plasteel) && istype(src,/obj/structure/girder/displaced))
W:use(2)
user << "\blue You create a false r wall! Push on it to open or close the passage."
new /obj/structure/falserwall (src.loc)
add_hiddenprint(usr)
- del(src)
+ del(src)*/
+
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 && istype(src,/obj/structure/girder/reinforced))
playsound(src.loc, 'Screwdriver.ogg', 100, 1)
@@ -95,43 +141,145 @@ obj/structure/meteorhit(obj/O as obj)
new/obj/structure/girder( src.loc )
del(src)
- else if((istype(W, /obj/item/stack/sheet/metal)) && (W:amount >= 2))
- user << "\blue Now adding plating..."
- if (do_after(user,40))
- user << "\blue You added the plating!"
- var/turf/Tsrc = get_turf(src)
- Tsrc.ReplaceWithWall()
- for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
- P.layer = 1
- for(var/turf/simulated/wall/X in Tsrc.loc)
- if(X) X.add_hiddenprint(usr)
- if (W) W:use(2)
- del(src)
- return
+ else if((istype(W, /obj/item/stack/sheet)) && (W:amount >= 2))
+ switch(W.type)
+
+ if(/obj/item/stack/sheet/metal)
+ user << "\blue Now adding plating..."
+ if (do_after(user,40))
+ user << "\blue You added the plating!"
+ var/turf/Tsrc = get_turf(src)
+ Tsrc.ReplaceWithWall()
+ for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
+ P.layer = 1
+ for(var/turf/simulated/wall/X in Tsrc.loc)
+ if(X) X.add_hiddenprint(usr)
+ if (W) W:use(2)
+ del(src)
+ return
+
+ if (/obj/item/stack/sheet/plasteel)
+ if (src.icon_state == "reinforced") //Time to finalize!
+ user << "\blue Now finalising reinforced wall."
+ if(do_after(user, 50))
+ user << "\blue Wall fully reinforced!"
+ var/turf/Tsrc = get_turf(src)
+ Tsrc.ReplaceWithRWall()
+ for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
+ P.layer = 1
+ for(var/turf/simulated/wall/r_wall/X in Tsrc.loc)
+ if(X) X.add_hiddenprint(usr)
+ if (W)
+ W:use(1)
+ del(src)
+ return
+ else
+ user << "\blue Now reinforcing girders"
+ if (do_after(user,60))
+ user << "\blue Girders reinforced!"
+ W:use(1)
+ new/obj/structure/girder/reinforced( src.loc )
+ del(src)
+ return
+
+ if(/obj/item/stack/sheet/gold)
+ user << "\blue Now adding plating..."
+ if (do_after(user,40))
+ user << "\blue You added the plating!"
+ var/turf/Tsrc = get_turf(src)
+ Tsrc.ReplaceWithMineralWall("gold")
+ for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
+ P.layer = 1
+ for(var/turf/simulated/wall/mineral/X in Tsrc.loc)
+ if(X) X.add_hiddenprint(usr)
+ if (W) W:use(2)
+ del(src)
+ return
+
+ if(/obj/item/stack/sheet/silver)
+ user << "\blue Now adding plating..."
+ if (do_after(user,40))
+ user << "\blue You added the plating!"
+ var/turf/Tsrc = get_turf(src)
+ Tsrc.ReplaceWithMineralWall("silver")
+ for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
+ P.layer = 1
+ for(var/turf/simulated/wall/mineral/X in Tsrc.loc)
+ if(X) X.add_hiddenprint(usr)
+ if (W) W:use(2)
+ del(src)
+ return
+
+ if(/obj/item/stack/sheet/diamond)
+ user << "\blue Now adding plating..."
+ if (do_after(user,40))
+ user << "\blue You added the plating!"
+ var/turf/Tsrc = get_turf(src)
+ Tsrc.ReplaceWithMineralWall("diamond")
+ for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
+ P.layer = 1
+ for(var/turf/simulated/wall/mineral/X in Tsrc.loc)
+ if(X) X.add_hiddenprint(usr)
+ if (W) W:use(2)
+ del(src)
+ return
+
+ if(/obj/item/stack/sheet/uranium)
+ user << "\blue Now adding plating..."
+ if (do_after(user,40))
+ user << "\blue You added the plating!"
+ var/turf/Tsrc = get_turf(src)
+ Tsrc.ReplaceWithMineralWall("uranium")
+ for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
+ P.layer = 1
+ for(var/turf/simulated/wall/mineral/X in Tsrc.loc)
+ if(X) X.add_hiddenprint(usr)
+ if (W) W:use(2)
+ del(src)
+ return
+
+ if(/obj/item/stack/sheet/plasma)
+ user << "\blue Now adding plating..."
+ if (do_after(user,40))
+ user << "\blue You added the plating!"
+ var/turf/Tsrc = get_turf(src)
+ Tsrc.ReplaceWithMineralWall("plasma")
+ for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
+ P.layer = 1
+ for(var/turf/simulated/wall/mineral/X in Tsrc.loc)
+ if(X) X.add_hiddenprint(usr)
+ if (W) W:use(2)
+ del(src)
+ return
+
+ if(/obj/item/stack/sheet/clown)
+ user << "\blue Now adding plating..."
+ if (do_after(user,40))
+ user << "\blue You added the plating!"
+ var/turf/Tsrc = get_turf(src)
+ Tsrc.ReplaceWithMineralWall("clown")
+ for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
+ P.layer = 1
+ for(var/turf/simulated/wall/mineral/X in Tsrc.loc)
+ if(X) X.add_hiddenprint(usr)
+ if (W) W:use(2)
+ del(src)
+ return
+
+ if(/obj/item/stack/sheet/sandstone)
+ user << "\blue Now adding plating..."
+ if (do_after(user,40))
+ user << "\blue You added the plating!"
+ var/turf/Tsrc = get_turf(src)
+ Tsrc.ReplaceWithMineralWall("sandstone")
+ for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
+ P.layer = 1
+ for(var/turf/simulated/wall/mineral/X in Tsrc.loc)
+ if(X) X.add_hiddenprint(usr)
+ if (W) W:use(2)
+ del(src)
+ return
- else if (istype(W, /obj/item/stack/sheet/plasteel))
- if (src.icon_state == "reinforced") //Time to finalize!
- user << "\blue Now finalising reinforced wall."
- if(do_after(user, 50))
- user << "\blue Wall fully reinforced!"
- var/turf/Tsrc = get_turf(src)
- Tsrc.ReplaceWithRWall()
- for(var/obj/machinery/atmospherics/pipe/P in Tsrc)
- P.layer = 1
- for(var/turf/simulated/wall/r_wall/X in Tsrc.loc)
- if(X) X.add_hiddenprint(usr)
- if (W)
- W:use(1)
- del(src)
- return
- else
- user << "\blue Now reinforcing girders"
- if (do_after(user,60))
- user << "\blue Girders reinforced!"
- W:use(1)
- new/obj/structure/girder/reinforced( src.loc )
- del(src)
- return
else if(istype(W, /obj/item/pipe))
var/obj/item/pipe/P = W
if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds.
@@ -167,7 +315,6 @@ obj/structure/meteorhit(obj/O as obj)
else
return
-
/obj/structure/girder/displaced
icon_state = "displaced"
anchored = 0
@@ -261,3 +408,208 @@ obj/structure/meteorhit(obj/O as obj)
del(src)
return
+
+/obj/structure/falsewall
+ var/mineral = "metal"
+
+/obj/structure/falserwall
+ var/mineral = "metal"
+
+/obj/structure/falsewall/gold
+ mineral = "gold"
+
+/obj/structure/falsewall/silver
+ mineral = "silver"
+
+/obj/structure/falsewall/diamond
+ mineral = "diamond"
+
+/obj/structure/falsewall/uranium
+ mineral = "uranium"
+ var/active = null
+ var/last_event = 0
+
+/obj/structure/falsewall/plasma
+ mineral = "plasma"
+
+/obj/structure/falsewall/clown
+ mineral = "clown"
+
+/obj/structure/falsewall/sandstone
+ mineral = "sandstone"
+
+/*/obj/structure/falsewall/wood
+ mineral = "wood"*/
+
+/obj/structure/falsewall/attack_hand(mob/user as mob)
+ if(density)
+ // Open wall
+ icon_state = "[mineral]fwall_open"
+ flick("[mineral]fwall_opening", src)
+ sleep(15)
+ src.density = 0
+ src.sd_SetOpacity(0)
+ var/turf/T = src.loc
+ T.sd_LumReset()
+
+ else
+ flick("[mineral]fwall_closing", src)
+ icon_state = "[mineral]0"
+ sleep(15)
+ src.density = 1
+ src.sd_SetOpacity(1)
+ var/turf/T = src.loc
+ //T.sd_LumUpdate()
+ src.relativewall()
+ T.sd_LumReset()
+
+/obj/structure/falsewall/uranium/attack_hand(mob/user as mob)
+ radiate()
+ ..()
+
+/obj/structure/falsewall/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/weapon/screwdriver))
+ var/turf/T = get_turf(src)
+ user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.")
+ if(!mineral)
+ T.ReplaceWithWall()
+ else
+ T.ReplaceWithMineralWall(mineral)
+ del(src)
+
+ if( istype(W, /obj/item/weapon/weldingtool) )
+ var/obj/item/weapon/weldingtool/WT = W
+ if( WT:welding )
+ var/turf/T = get_turf(src)
+ if(!mineral)
+ T.ReplaceWithWall()
+ else
+ T.ReplaceWithMineralWall(mineral)
+ if(mineral != "plasma")//Stupid shit keeps me from pushing the attackby() to plasma walls -Sieve
+ T = get_turf(src)
+ T.attackby(W,user)
+ del(src)
+
+ else if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) )
+ var/turf/T = get_turf(src)
+ if(!mineral)
+ T.ReplaceWithWall()
+ else
+ T.ReplaceWithMineralWall(mineral)
+ if(mineral != "plasma")
+ T = get_turf(src)
+ T.attackby(W,user)
+ del(src)
+
+ //DRILLING
+ else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
+ var/turf/T = get_turf(src)
+ if(!mineral)
+ T.ReplaceWithWall()
+ else
+ T.ReplaceWithMineralWall(mineral)
+ T = get_turf(src)
+ T.attackby(W,user)
+ del(src)
+
+ else if( istype(W, /obj/item/weapon/melee/energy/blade) )
+ var/turf/T = get_turf(src)
+ if(!mineral)
+ T.ReplaceWithWall()
+ else
+ T.ReplaceWithMineralWall(mineral)
+ if(mineral != "plasma")
+ T = get_turf(src)
+ T.attackby(W,user)
+ del(src)
+ /*
+
+ var/turf/T = get_turf(user)
+ user << "\blue Now adding plating..."
+ sleep(40)
+ if (get_turf(user) == T)
+ user << "\blue You added the plating!"
+ var/turf/Tsrc = get_turf(src)
+ Tsrc.ReplaceWithWall()
+
+ */
+
+/obj/structure/falsewall/uranium/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ radiate()
+ ..()
+
+/obj/structure/falserwall/
+ attack_hand(mob/user as mob)
+ if(density)
+ // Open wall
+ icon_state = "frwall_open"
+ flick("frwall_opening", src)
+ sleep(15)
+ src.density = 0
+ src.sd_SetOpacity(0)
+ var/turf/T = src.loc
+ T.sd_LumReset()
+
+ else
+ icon_state = "r_wall"
+ flick("frwall_closing", src)
+ sleep(15)
+ src.density = 1
+ src.sd_SetOpacity(1)
+ var/turf/T = src.loc
+ //T.sd_LumUpdate()
+ src.relativewall()
+ T.sd_LumReset()
+
+
+ attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/weapon/screwdriver))
+ var/turf/T = get_turf(src)
+ user.visible_message("[user] tightens some bolts on the r wall.", "You tighten the bolts on the r wall.")
+ T.ReplaceWithWall() //Intentionally makes a regular wall instead of an r-wall (no cheap r-walls for you).
+ del(src)
+
+ if( istype(W, /obj/item/weapon/weldingtool) )
+ var/obj/item/weapon/weldingtool/WT = W
+ if( WT.remove_fuel(0,user) )
+ var/turf/T = get_turf(src)
+ T.ReplaceWithWall()
+ T = get_turf(src)
+ T.attackby(W,user)
+ del(src)
+
+ else if( istype(W, /obj/item/weapon/pickaxe/plasmacutter) )
+ var/turf/T = get_turf(src)
+ T.ReplaceWithWall()
+ T = get_turf(src)
+ T.attackby(W,user)
+ del(src)
+
+ //DRILLING
+ else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
+ var/turf/T = get_turf(src)
+ T.ReplaceWithWall()
+ T = get_turf(src)
+ T.attackby(W,user)
+ del(src)
+
+ else if( istype(W, /obj/item/weapon/melee/energy/blade) )
+ var/turf/T = get_turf(src)
+ T.ReplaceWithWall()
+ T = get_turf(src)
+ T.attackby(W,user)
+ del(src)
+
+/obj/structure/falsewall/uranium/proc/radiate()
+ if(!active)
+ if(world.time > last_event+15)
+ active = 1
+ for(var/mob/living/L in range(3,src))
+ L.apply_effect(12,IRRADIATE,0)
+ for(var/turf/simulated/wall/mineral/T in range(3,src))
+ if(T.mineral == "uranium")
+ T.radiate()
+ last_event = world.time
+ active = null
+ return
+ return
diff --git a/code/game/objects/transfer_valve.dm b/code/game/objects/transfer_valve.dm
index 3404d4b6498..c3daaae202d 100644
--- a/code/game/objects/transfer_valve.dm
+++ b/code/game/objects/transfer_valve.dm
@@ -179,81 +179,4 @@
// this doesn't do anything but the timer etc. expects it to be here
// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs
/obj/item/device/transfer_valve/proc/c_state()
- return
-
-
-
-/obj/structure/falsewall
- attack_hand(mob/user as mob)
- if(density)
- // Open wall
- icon_state = "fwall_open"
- flick("fwall_opening", src)
- sleep(15)
- src.density = 0
- src.sd_SetOpacity(0)
- var/turf/T = src.loc
- T.sd_LumReset()
-
- else
- icon_state = "wall"
- flick("fwall_closing", src)
- sleep(15)
- src.density = 1
- src.sd_SetOpacity(1)
- var/turf/T = src.loc
- //T.sd_LumUpdate()
- src.relativewall()
- T.sd_LumReset()
-
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/screwdriver))
- var/turf/T = get_turf(src)
- user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.")
- T.ReplaceWithWall()
- del(src)
- //
-
- /*
-
- var/turf/T = get_turf(user)
- user << "\blue Now adding plating..."
- sleep(40)
- if (get_turf(user) == T)
- user << "\blue You added the plating!"
- var/turf/Tsrc = get_turf(src)
- Tsrc.ReplaceWithWall()
-
- */
-
-/obj/structure/falserwall/
- attack_hand(mob/user as mob)
- if(density)
- // Open wall
- icon_state = "frwall_open"
- flick("frwall_opening", src)
- sleep(15)
- src.density = 0
- src.sd_SetOpacity(0)
- var/turf/T = src.loc
- T.sd_LumReset()
-
- else
- icon_state = "r_wall"
- flick("frwall_closing", src)
- sleep(15)
- src.density = 1
- src.sd_SetOpacity(1)
- var/turf/T = src.loc
- //T.sd_LumUpdate()
- src.relativewall()
- T.sd_LumReset()
-
-
- attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/screwdriver))
- var/turf/T = get_turf(src)
- user.visible_message("[user] tightens some bolts on the r wall.", "You tighten the bolts on the r wall.")
- T.ReplaceWithWall() //Intentionally makes a regular wall instead of an r-wall (no cheap r-walls for you).
- del(src)
\ No newline at end of file
+ return
\ No newline at end of file
diff --git a/code/game/objects/watercloset.dm b/code/game/objects/watercloset.dm
index ff020ee5091..ff9008f1cad 100644
--- a/code/game/objects/watercloset.dm
+++ b/code/game/objects/watercloset.dm
@@ -4,7 +4,7 @@
name = "toilet"
desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean."
icon = 'watercloset.dmi'
- icon_state = "toilet0"
+ icon_state = "toilet00"
density = 0
anchored = 1
var/open = 0 //if the lid is up
diff --git a/code/game/smoothwall.dm b/code/game/smoothwall.dm
index b67766a018a..d13f42ec10c 100644
--- a/code/game/smoothwall.dm
+++ b/code/game/smoothwall.dm
@@ -41,7 +41,8 @@
else if (istype(src,/obj/structure/falserwall))
src.icon_state = "rwall[junction]"
else if (istype(src,/obj/structure/falsewall))
- src.icon_state = "wall[junction]"
+ var/obj/structure/falsewall/fwall = src
+ fwall.icon_state = "[fwall.mineral][junction]"
/* else if(istype(src,/turf/simulated/shuttle/wall))
var/newicon = icon;
var/newiconstate = icon_state;
@@ -151,3 +152,64 @@
W.relativewall()
..()*/
+
+/turf/simulated/wall/relativewall()
+ if(istype(src,/turf/simulated/wall/vault)) //HACK!!!
+ return
+
+ var/junction = 0 //will be used to determine from which side the wall is connected to other walls
+
+ for(var/turf/simulated/wall/W in orange(src,1))
+ if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
+ if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve
+ junction |= get_dir(src,W)
+ for(var/obj/structure/falsewall/W in orange(src,1))
+ if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
+ if(src.mineral == W.mineral)
+ junction |= get_dir(src,W)
+ for(var/obj/structure/falserwall/W in orange(src,1))
+ if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
+ if(src.mineral == W.mineral)
+ junction |= get_dir(src,W)
+ var/turf/simulated/wall/wall = src
+ wall.icon_state = "[wall.walltype][junction]"
+ return
+
+/obj/structure/falsewall/relativewall()
+
+ var/junction = 0 //will be used to determine from which side the wall is connected to other walls
+
+ for(var/turf/simulated/wall/W in orange(src,1))
+ if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
+ if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve
+ junction |= get_dir(src,W)
+ for(var/obj/structure/falsewall/W in orange(src,1))
+ if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
+ if(src.mineral == W.mineral)
+ junction |= get_dir(src,W)
+ for(var/obj/structure/falserwall/W in orange(src,1))
+ if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
+ if(src.mineral == W.mineral)
+ junction |= get_dir(src,W)
+ var/obj/structure/falsewall/fwall = src
+ fwall.icon_state = "[fwall.mineral][junction]"
+ return
+
+/obj/structure/falserwall/relativewall()
+
+ var/junction = 0 //will be used to determine from which side the wall is connected to other walls
+
+ for(var/turf/simulated/wall/W in orange(src,1))
+ if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
+ if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve
+ junction |= get_dir(src,W)
+ for(var/obj/structure/falsewall/W in orange(src,1))
+ if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
+ if(src.mineral == W.mineral)
+ junction |= get_dir(src,W)
+ for(var/obj/structure/falserwall/W in orange(src,1))
+ if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls
+ if(src.mineral == W.mineral)
+ junction |= get_dir(src,W)
+ src.icon_state = "rwall[junction]"
+ return
diff --git a/code/game/turf.dm b/code/game/turf.dm
index f3e01ccfaf2..1632f5af1e2 100644
--- a/code/game/turf.dm
+++ b/code/game/turf.dm
@@ -256,6 +256,7 @@
var/old_dir = dir
var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
S.dir = old_dir
+ S.sd_LumReset()
new /obj/structure/lattice( locate(src.x, src.y, src.z) )
return S
@@ -265,6 +266,7 @@
S.icon_old = old_icon
S.opacity = 0
S.sd_NewOpacity(1)
+ S.sd_LumReset()
return S
/turf/proc/ReplaceWithRWall()
@@ -273,6 +275,18 @@
S.icon_old = old_icon
S.opacity = 0
S.sd_NewOpacity(1)
+ S.sd_LumReset()
+ return S
+
+/turf/proc/ReplaceWithMineralWall(var/ore)
+ var/old_icon = icon_state
+ var/turf/simulated/wall/mineral/S = new /turf/simulated/wall/mineral( locate(src.x, src.y, src.z) )
+ S.icon_old = old_icon
+ S.opacity = 0
+ S.sd_NewOpacity(1)
+ S.mineral = ore
+ S.New()//Hackish as fuck, but what can you do? -Sieve
+ S.sd_LumReset()
return S
//turf/simulated/wall/New()
@@ -300,13 +314,82 @@
else
if(!devastated)
playsound(src.loc, 'Welder.ogg', 100, 1)
- new /obj/structure/girder(src)
- new /obj/item/stack/sheet/metal( src )
- new /obj/item/stack/sheet/metal( src )
+ switch(mineral)
+ if("metal")
+ new /obj/structure/girder(src)
+ new /obj/item/stack/sheet/metal( src )
+ new /obj/item/stack/sheet/metal( src )
+ if("gold")
+ new /obj/structure/girder(src)
+ new /obj/item/stack/sheet/gold( src )
+ new /obj/item/stack/sheet/gold( src )
+ if("silver")
+ new /obj/structure/girder(src)
+ new /obj/item/stack/sheet/silver( src )
+ new /obj/item/stack/sheet/silver( src )
+ if("diamond")
+ new /obj/structure/girder(src)
+ new /obj/item/stack/sheet/diamond( src )
+ new /obj/item/stack/sheet/diamond( src )
+ if("uranium")
+ new /obj/structure/girder(src)
+ new /obj/item/stack/sheet/uranium( src )
+ new /obj/item/stack/sheet/uranium( src )
+ if("plasma")
+ new /obj/structure/girder(src)
+ new /obj/item/stack/sheet/plasma( src )
+ new /obj/item/stack/sheet/plasma( src )
+ if("clown")
+ new /obj/structure/girder(src)
+ new /obj/item/stack/sheet/clown( src )
+ new /obj/item/stack/sheet/clown( src )
+ if("sandstone")
+ new /obj/structure/girder(src)
+ new /obj/item/stack/sheet/sandstone( src )
+ new /obj/item/stack/sheet/sandstone( src )
+ if("wood")
+ new /obj/structure/girder(src)
+ new /obj/item/stack/sheet/wood( src )
+ new /obj/item/stack/sheet/wood( src )
+
else
- new /obj/item/stack/sheet/metal( src )
- new /obj/item/stack/sheet/metal( src )
- new /obj/item/stack/sheet/metal( src )
+ switch(mineral)
+ if("metal")
+ new /obj/item/stack/sheet/metal( src )
+ new /obj/item/stack/sheet/metal( src )
+ new /obj/item/stack/sheet/metal( src )
+ if("gold")
+ new /obj/item/stack/sheet/gold( src )
+ new /obj/item/stack/sheet/gold( src )
+ new /obj/item/stack/sheet/metal( src )
+ if("silver")
+ new /obj/item/stack/sheet/silver( src )
+ new /obj/item/stack/sheet/silver( src )
+ new /obj/item/stack/sheet/metal( src )
+ if("diamond")
+ new /obj/item/stack/sheet/diamond( src )
+ new /obj/item/stack/sheet/diamond( src )
+ new /obj/item/stack/sheet/metal( src )
+ if("uranium")
+ new /obj/item/stack/sheet/uranium( src )
+ new /obj/item/stack/sheet/uranium( src )
+ new /obj/item/stack/sheet/metal( src )
+ if("plasma")
+ new /obj/item/stack/sheet/plasma( src )
+ new /obj/item/stack/sheet/plasma( src )
+ new /obj/item/stack/sheet/metal( src )
+ if("clown")
+ new /obj/item/stack/sheet/clown( src )
+ new /obj/item/stack/sheet/clown( src )
+ new /obj/item/stack/sheet/metal( src )
+ if("sandstone")
+ new /obj/item/stack/sheet/sandstone( src )
+ new /obj/item/stack/sheet/sandstone( src )
+ new /obj/item/stack/sheet/metal( src )
+ if("wood")
+ new /obj/item/stack/sheet/wood( src )
+ new /obj/item/stack/sheet/wood( src )
+ new /obj/item/stack/sheet/metal( src )
for(var/obj/O in src.contents) //Eject contents!
if(istype(O,/obj/effect/decal/poster))
@@ -451,6 +534,8 @@
playsound(src.loc, 'Welder.ogg', 100, 1)
sleep(60)
+ if(mineral == "diamond")//Oh look, it's tougher
+ sleep(60)
if( !istype(src, /turf/simulated/wall) || !user || !W || !T ) return
if( user.loc == T && user.equipped() == W )
@@ -466,6 +551,8 @@
user << "You begin to drill though the wall."
sleep(60)
+ if(mineral == "diamond")
+ sleep(60)
if( !istype(src, /turf/simulated/wall) || !user || !W || !T ) return
if( user.loc == T && user.equipped() == W )
@@ -483,6 +570,8 @@
playsound(src.loc, "sparks", 50, 1)
sleep(70)
+ if(mineral == "diamond")
+ sleep(70)
if( !istype(src, /turf/simulated/wall) || !user || !EB || !T ) return
if( user.loc == T && user.equipped() == W )
@@ -745,7 +834,72 @@
return attack_hand(user)
return
+/turf/simulated/wall/mineral/attack_hand(mob/user as mob)
+ if(mineral == "uranium")
+ radiate()
+ ..()
+
+/turf/simulated/wall/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if((mineral == "plasma") && W)
+ if(is_hot(W) > 300)
+ ignite(is_hot(W))
+ return
+ if(mineral == "uranium")
+ radiate()
+// if((mineral == "gold") || (mineral == "silver"))
+// if(shocked)
+// shock()
+ ..()
+
+/turf/simulated/wall/mineral/proc/PlasmaBurn(temperature)
+ spawn(2)
+ new /obj/structure/girder(src)
+ src.ReplaceWithFloor()
+ for(var/turf/simulated/floor/target_tile in range(0,src))
+ if(target_tile.parent && target_tile.parent.group_processing)
+ target_tile.parent.suspend_group_processing()
+ var/datum/gas_mixture/napalm = new
+ var/toxinsToDeduce = 20
+ napalm.toxins = toxinsToDeduce
+ napalm.temperature = 400+T0C
+ target_tile.assume_air(napalm)
+ spawn (0) target_tile.hotspot_expose(temperature, 400)
+ for(var/obj/structure/falsewall/plasma/F in range(3,src))//Hackish as fuck, but until temperature_expose works, there is nothing I can do -Sieve
+ var/turf/T = get_turf(F)
+ T.ReplaceWithMineralWall("plasma")
+ del (F)
+ for(var/turf/simulated/wall/mineral/W in range(3,src))
+ if(mineral == "plasma")
+ W.ignite((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame
+ for(var/obj/machinery/door/airlock/plasma/D in range(3,src))
+ D.ignite(temperature/4)
+
+/turf/simulated/wall/mineral/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ if(mineral == "plasma")
+ if(exposed_temperature > 300)
+ PlasmaBurn(exposed_temperature)
+
+/turf/simulated/wall/mineral/proc/ignite(exposed_temperature)
+ if(mineral == "plasma")
+ if(exposed_temperature > 300)
+ PlasmaBurn(exposed_temperature)
+
+/turf/simulated/wall/mineral/Bumped(AM as mob|obj)
+ if(mineral == "uranium")
+ radiate()
+ ..()
+
+/turf/simulated/wall/mineral/bullet_act(var/obj/item/projectile/Proj)
+ if(mineral == "plasma")
+ if(istype(Proj,/obj/item/projectile/beam))
+ PlasmaBurn(2500)
+ else if(istype(Proj,/obj/item/projectile/ion))
+ PlasmaBurn(500)
+ ..()
+
/turf/simulated/wall/proc/thermitemelt(mob/user as mob)
+ if(mineral == "diamond")
+ return
var/obj/effect/overlay/O = new/obj/effect/overlay( src )
O.name = "Thermite"
O.desc = "Looks hot."
@@ -907,9 +1061,13 @@ var/list/plating_icons = list("plating","platingdmg1","platingdmg2","platingdmg3
..()
name = "plating"
-/turf/simulated/floor/grid
+/turf/simulated/floor/bluegrid
icon = 'floors.dmi'
- icon_state = "circuit"
+ icon_state = "bcircuit"
+
+/turf/simulated/floor/greengrid
+ icon = 'floors.dmi'
+ icon_state = "gcircuit"
/turf/simulated/floor/New()
..()
diff --git a/code/modules/chemical/Chemistry-Machinery.dm b/code/modules/chemical/Chemistry-Machinery.dm
index 81eb661af7f..8eff1c519a8 100644
--- a/code/modules/chemical/Chemistry-Machinery.dm
+++ b/code/modules/chemical/Chemistry-Machinery.dm
@@ -8,6 +8,8 @@
anchored = 1
icon = 'chemical.dmi'
icon_state = "dispenser"
+ use_power = 1
+ idle_power_usage = 40
var/energy = 25
var/max_energy = 75
var/amount = 30
@@ -24,6 +26,13 @@
use_power(2000) // This thing uses up alot of power (this is still low as shit for creating reagents from thin air)
spawn(200) recharge()
+ power_change()
+ if(powered())
+ stat &= ~NOPOWER
+ else
+ spawn(rand(0, 15))
+ stat |= NOPOWER
+
New()
recharge()
@@ -75,7 +84,7 @@
winset(user, "chemdispenser_reagents", "size=340x[8 + 40 * i]")
SkinCmd(mob/user as mob, var/data as text)
- if(stat & BROKEN) return
+ if(stat & (BROKEN|NOPOWER)) return
if(usr.stat || usr.restrained()) return
if(!in_range(src, usr)) return
@@ -159,6 +168,8 @@
anchored = 1
icon = 'chemical.dmi'
icon_state = "mixer0"
+ use_power = 1
+ idle_power_usage = 20
var/beaker = null
var/mode = 0
var/condi = 0
@@ -186,6 +197,13 @@
del(src)
return
+ power_change()
+ if(powered())
+ stat &= ~NOPOWER
+ else
+ spawn(rand(0, 15))
+ stat |= NOPOWER
+
attackby(var/obj/item/weapon/reagent_containers/glass/B as obj, var/mob/user as mob)
if(!istype(B, /obj/item/weapon/reagent_containers/glass))
return
@@ -202,7 +220,7 @@
icon_state = "mixer1"
Topic(href, href_list)
- if(stat & BROKEN) return
+ if(stat & (BROKEN|NOPOWER)) return
if(usr.stat || usr.restrained()) return
if(!in_range(src, usr)) return
@@ -352,6 +370,8 @@
anchored = 1
icon = 'chemical.dmi'
icon_state = "mixer0"
+ use_power = 1
+ idle_power_usage = 20
var/temphtml = ""
var/wait = null
var/obj/item/weapon/reagent_containers/glass/beaker = null
diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm
index 902e4d30f0e..668ff56ba6a 100644
--- a/code/modules/chemical/Chemistry-Reagents.dm
+++ b/code/modules/chemical/Chemistry-Reagents.dm
@@ -762,7 +762,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
- M.radiation += 3
+ M.apply_effect(10,IRRADIATE,0)
..()
return
@@ -828,7 +828,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(isrobot(M) || isAI(M)) return // Mutagen doesn't do anything to robutts!
if(!M) M = holder.my_atom
- M.radiation += 3
+ M.apply_effect(10,IRRADIATE,0)
..()
return
@@ -911,7 +911,7 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
- M.radiation += 1
+ M.apply_effect(3,IRRADIATE,0)
..()
return
diff --git a/code/modules/clothing/suits/robe.dm b/code/modules/clothing/suits/robe.dm
index 1cc084da0f6..e882f1a3db9 100644
--- a/code/modules/clothing/suits/robe.dm
+++ b/code/modules/clothing/suits/robe.dm
@@ -69,4 +69,17 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
+/obj/item/clothing/head/wizard/marisa/fake
+ name = "Witch Hat"
+ desc = "Strange-looking hat-wear, makes you want to cast fireballs."
+ icon_state = "marisa"
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
+
+/obj/item/clothing/suit/wizrobe/marisa/fake
+ name = "Witch Robe"
+ desc = "Magic is all about the spell power, ZE!"
+ icon_state = "marisa"
+ item_state = "marisarobe"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
diff --git a/code/modules/mining/ores_materials_coins.dm b/code/modules/mining/ores_materials_coins.dm
index d771f4500fa..6ed547040b6 100644
--- a/code/modules/mining/ores_materials_coins.dm
+++ b/code/modules/mining/ores_materials_coins.dm
@@ -220,7 +220,7 @@
pixel_y = rand(0,4)-4
/obj/item/stack/sheet/uranium
- name = "Uranium block"
+ name = "uranium"
icon_state = "sheet-uranium"
force = 5.0
throwforce = 5
@@ -231,7 +231,7 @@
perunit = 2000
/obj/item/stack/sheet/enruranium
- name = "Enriched Uranium block"
+ name = "enriched uranium"
icon_state = "sheet-enruranium"
force = 5.0
throwforce = 5
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 84715164eca..690d7dced09 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -51,7 +51,7 @@
if(PARALYZE)
Paralyse(effect/(blocked+1))
if(IRRADIATE)
- radiation += min((effect - (effect*getarmor(null, "rad"))), 0)//Rads auto check armor
+ radiation += max((((effect - (effect*(getarmor(null, "rad")/100))))/(blocked+1)),0)//Rads auto check armor
if(STUTTER)
if(canstun) // stun is usually associated with stutter
stuttering = max(stuttering,(effect/(blocked+1)))
diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm
index 1127d6bebb7..0649e75a165 100644
--- a/code/modules/mob/living/silicon/robot/login.dm
+++ b/code/modules/mob/living/silicon/robot/login.dm
@@ -1,4 +1,4 @@
-/mob/living/silicon/robot/Login()
+/mob/living/silicon/robot/Login(var/syndie = 0)
..()
update_clothing()
@@ -19,4 +19,43 @@
A.connected_robots += src
break
*/
+ if(!started)
+ if(!syndie)
+ if (client)
+ connected_ai = activeais()
+ if (connected_ai)
+ connected_ai.connected_robots += src
+ // laws = connected_ai.laws //The borg inherits its AI's laws
+ laws = new /datum/ai_laws
+ lawsync()
+ src << "Unit slaved to [connected_ai.name], downloading laws."
+ lawupdate = 1
+ else
+ laws = new /datum/ai_laws/asimov
+ lawupdate = 0
+ src << "Unable to locate an AI, reverting to standard Asimov laws."
+ else
+ laws = new /datum/ai_laws/antimov
+ lawupdate = 0
+ scrambledcodes = 1
+ src << "Follow your laws."
+ cell.maxcharge = 25000
+ cell.charge = 25000
+ module = new /obj/item/weapon/robot_module/syndicate(src)
+ hands.icon_state = "standard"
+ icon_state = "secborg"
+ modtype = "Synd"
+
+ radio = new /obj/item/device/radio(src)
+ camera = new /obj/machinery/camera(src)
+ camera.c_tag = real_name
+ camera.network = "SS13"
+ if(!cell)
+ var/obj/item/weapon/cell/C = new(src)
+ C.charge = 1500
+ cell = C
+ if(src.mind)
+ ticker.mode.remove_revolutionary(src.mind)
+ started = 1
+
return
\ 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 4c7504e72c9..fe64fb3c063 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1,3 +1,5 @@
+/mob/living/silicon/robot
+ var/started = null//A fix to ensure people don't try to bypass law assignment. Initial assignment sets it to one but it check on login whether they have been initiated -Sieve
/mob/living/silicon/robot/New(loc,var/syndie = 0)
spark_system = new /datum/effect/effect/system/spark_spread()
@@ -51,6 +53,7 @@
cell = C
if(src.mind)
ticker.mode.remove_revolutionary(src.mind)
+ started = 1
..()
//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO
@@ -487,6 +490,9 @@
sleep(20)
src << "\red ERRORERRORERROR"
src << "\red \b ALERT: [user.real_name] is your new master. Obey your new laws and his commands."
+ if(istype(src.module, /obj/item/weapon/robot_module/miner))
+ src.module.modules -= /obj/item/weapon/pickaxe/borgdrill
+ src.module.modules += /obj/item/weapon/pickaxe/diamonddrill//Buff when emagged, break down walls, kill men, whatever -Sieve
updateicon()
else
user << "You fail to [ locked ? "unlock" : "lock"] [src]'s interface."
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 18fd5bf1be0..49639d392a3 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -419,6 +419,15 @@
g_amt = 100
brightness = 5
+/obj/item/weapon/light/bulb/fire
+ name = "fire bulb"
+ desc = "A replacement fire bulb."
+ icon_state = "fbulb"
+ base_state = "fbulb"
+ item_state = "egg4"
+ g_amt = 100
+ brightness = 5
+
// update the icon state and description of the light
/obj/item/weapon/light
proc/update()
diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm
index 827bce3a922..c3a9c6c9806 100644
--- a/code/modules/power/singularity/particle_accelerator/particle.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle.dm
@@ -52,13 +52,13 @@
proc
toxmob(var/mob/living/M)
var/radiation = (energy*2)
- if(istype(M,/mob/living/carbon/human))
+/* if(istype(M,/mob/living/carbon/human))
if(M:wear_suit) //TODO: check for radiation protection
radiation = round(radiation/2,1)
if(istype(M,/mob/living/carbon/monkey))
if(M:wear_suit) //TODO: check for radiation protection
- radiation = round(radiation/2,1)
- M.radiation += radiation
+ radiation = round(radiation/2,1)*/
+ M.apply_effects((radiation*3),IRRADIATE,0)
M.updatehealth()
//M << "\red You feel odd."
return
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index 6e3c7a29526..33bc5ae1a72 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -241,7 +241,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
src.anchored = 1
user.visible_message("[user.name] secures the [src.name] to the floor.", \
"You secure the external bolts.")
-// icon_state = "[reference]"
temp_state++
if(1)
if(iswrench(O))
@@ -249,30 +248,25 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
src.anchored = 0
user.visible_message("[user.name] detaches the [src.name] from the floor.", \
"You remove the external bolts.")
-// icon_state = "[reference]"
temp_state--
else if(iscoil(O))
if(O:use(1,user))
user.visible_message("[user.name] adds wires to the [src.name].", \
"You add some wires.")
-// icon_state = "[reference]w"
temp_state++
if(2)
if(iswirecutter(O))//TODO:Shock user if its on?
user.visible_message("[user.name] removes some wires from the [src.name].", \
"You remove some wires.")
-// icon_state = "[reference]"
temp_state--
else if(isscrewdriver(O))
user.visible_message("[user.name] closes the [src.name]'s access panel.", \
"You close the access panel.")
-// icon_state = "[reference]c"
temp_state++
if(3)
if(isscrewdriver(O))
user.visible_message("[user.name] opens the [src.name]'s access panel.", \
"You open the access panel.")
-// icon_state = "[reference]w"
temp_state--
if(temp_state == src.construction_state)//Nothing changed
return 0
@@ -398,7 +392,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
src.anchored = 1
user.visible_message("[user.name] secures the [src.name] to the floor.", \
"You secure the external bolts.")
- //icon_state = "[reference]"
temp_state++
if(1)
if(iswrench(O))
@@ -406,31 +399,27 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
src.anchored = 0
user.visible_message("[user.name] detaches the [src.name] from the floor.", \
"You remove the external bolts.")
- //icon_state = "[reference]"
temp_state--
else if(iscoil(O))
if(O:use(1))
user.visible_message("[user.name] adds wires to the [src.name].", \
"You add some wires.")
- //icon_state = "[reference]w"
temp_state++
if(2)
if(iswirecutter(O))//TODO:Shock user if its on?
user.visible_message("[user.name] removes some wires from the [src.name].", \
"You remove some wires.")
- //icon_state = "[reference]"
temp_state--
else if(isscrewdriver(O))
user.visible_message("[user.name] closes the [src.name]'s access panel.", \
"You close the access panel.")
- //icon_state = "[reference]c"
temp_state++
if(3)
if(isscrewdriver(O))
user.visible_message("[user.name] opens the [src.name]'s access panel.", \
"You open the access panel.")
- //icon_state = "[reference]w"
temp_state--
+ active = 0
if(temp_state == src.construction_state)//Nothing changed
return 0
else
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index ec8d8f30f6c..fcce4509281 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -13,10 +13,11 @@
active_power_usage = 10000
construction_state = 0
active = 0
- var/list/obj/structure/particle_accelerator/connected_parts
- var/assembled = 0
- var/parts = null
-
+ dir = 1
+ var
+ list/obj/structure/particle_accelerator/connected_parts
+ assembled = 0
+ parts = null
New()
connected_parts = list()
@@ -27,7 +28,6 @@
if(construction_state >= 3)
interact(user)
-
update_state()
if(construction_state < 3)
use_power = 0
@@ -47,7 +47,10 @@
icon_state = "[reference]p1"
else
if(use_power)
- icon_state = "[reference]p"
+ if(assembled)
+ icon_state = "[reference]p"
+ else
+ icon_state = "u[reference]p"
else
switch(construction_state)
if(0)
@@ -131,6 +134,8 @@
proc
part_scan()
+ for(var/obj/structure/particle_accelerator/fuel_chamber/F in orange(1,src))
+ src.dir = F.dir
connected_parts = list()
var/tally = 0
var/ldir = turn(dir,-90)
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 24bc148cbc4..b58f3c737db 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -401,13 +401,15 @@ var/global/list/uneatable = list(
toxmob()
var/toxrange = 10
var/toxdamage = 4
- var/radiation = 5
+ var/radiation = 15
+ var/radiationmin = 3
if (src.energy>200)
toxdamage = round(((src.energy-150)/50)*4,1)
radiation = round(((src.energy-150)/50)*5,1)
+ radiationmin = round((radiation/5),1)//
for(var/mob/living/M in view(toxrange, src.loc))
if(istype(M,/mob/living/))
- M.apply_effect(rand(radiation), IRRADIATE)
+ M.apply_effect(rand(radiationmin,radiation), IRRADIATE)
toxdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad")))
M.apply_effect(toxdamage, TOX)
return
diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm
index 81eec28dbf5..38343763404 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -73,14 +73,14 @@
M << "\red Your gun feels pleasantly warm for a moment."
else
M << "\red You feel a warm sensation."
- M.apply_effect(rand(1,40), IRRADIATE)
+ M.apply_effect(rand(3,120), IRRADIATE)
lightfail = 1
else
for (var/mob/living/M in range(rand(1,4),src)) //Big failure, TIME FOR RADIATION BITCHES
if (src in M.contents)
M << "\red Your gun's reactor overloads!"
M << "\red You feel a wave of heat wash over you."
- M.apply_effect(100, IRRADIATE)
+ M.apply_effect(300, IRRADIATE)
crit_fail = 1 //break the gun so it stops recharging
processing_objects.Remove(src)
update_icon()
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 1b9a7cfa2fb..66e88936dac 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -49,10 +49,11 @@
on_hit(var/atom/target, var/blocked = 0)
var/mob/M = target
- if(istype(target, /mob/living/carbon/human) && M:mutantrace == "plant") //Plantmen possibly get mutated and damaged by the rays.
+ if(istype(target, /mob/living) && M:mutantrace == "plant") //Plantmen possibly get mutated and damaged by the rays.
+ var/mob/living/L as mob
if(prob(15))
- M.radiation += rand(10,30)
- M.Weaken(5)
+ L.apply_effect((rand(30,80)),IRRADIATE)
+ L.Weaken(5)
for (var/mob/V in viewers(src))
V.show_message("\red [M] writhes in pain as \his vacuoles boil.", 3, "\red You hear the crunching of leaves.", 2)
if(prob(35))
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index ce1a8bc83e3..886e2cc57da 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -21,6 +21,7 @@
var/flushing = 0 // true if flushing in progress
var/flush_every_ticks = 30 //Every 30 ticks it will look whether it is ready to flush
var/flush_count = 0 //this var adds 1 once per tick. When it reaches flush_every_ticks it resets and tries to flush.
+ var/last_sound = 0
// create a new disposal
// find the attached trunk (if present) and init gas resvr.
@@ -394,7 +395,9 @@
air_contents = new() // new empty gas resv.
sleep(10)
- playsound(src, 'disposalflush.ogg', 50, 0, 0)
+ if(last_sound < world.time + 1)
+ playsound(src, 'disposalflush.ogg', 50, 0, 0)
+ last_sound = world.time
sleep(5) // wait for animation to finish
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index 34da0c1071a..46e1b065fc1 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -79,6 +79,12 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
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)
+ if(gold_amount >= 2000)
+ var/obj/item/stack/sheet/gold/G = new /obj/item/stack/sheet/gold(src.loc)
+ G.amount = round(gold_amount / 2000)
+ if(diamond_amount >= 2000)
+ var/obj/item/stack/sheet/diamond/G = new /obj/item/stack/sheet/diamond(src.loc)
+ G.amount = round(diamond_amount / 2000)
del(src)
return 1
else
@@ -99,20 +105,18 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
if (busy)
user << "\red The [name] is busy. Please wait for completion of previous operation."
return 1
- if ((TotalMaterials() + 3750) > max_material_amount)
+ var/obj/item/stack/sheet/stack = O
+ if ((TotalMaterials() + stack.perunit) > max_material_amount)
user << "\red The [name] is full. Please remove glass from the protolathe in order to insert more."
return 1
- var/obj/item/stack/stack = O
- var/amount = 1
- var/title = "[stack.name]: [stack.amount] sheet\s left"
- switch(alert(title, "How many sheets do you want to load?", "one", "max", "cancel", null))
- if("one")
- amount = 1
- if("max")
- amount = min(stack.amount, round((max_material_amount-TotalMaterials())/3750))
- else
- return 1
+ var/amount = round(input("How many sheets do you want to add?") as num)
+ if(amount < 0)
+ amount = 0
+ if(amount == 0)
+ return
+ if(amount > stack.amount)
+ amount = min(stack.amount, round((max_material_amount-TotalMaterials())/stack.perunit))
busy = 1
use_power(max(1000, (3750*amount/10)))
@@ -121,9 +125,9 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
if(istype(stack, /obj/item/stack/sheet/glass))
g_amount += amount * 3750
else if(istype(stack, /obj/item/stack/sheet/gold))
- gold_amount += amount * 3750
+ gold_amount += amount * 2000
else if(istype(stack, /obj/item/stack/sheet/diamond))
- diamond_amount += amount * 3750
+ diamond_amount += amount * 2000
stack.use(amount)
busy = 0
src.updateUsrDialog()
diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm
index f8cc0dc42f4..0f12089c996 100644
--- a/code/modules/research/message_server.dm
+++ b/code/modules/research/message_server.dm
@@ -42,7 +42,7 @@
priority = "Undetermined"
/obj/machinery/message_server
- icon = 'stationobjs.dmi'
+ icon = 'research.dmi'
icon_state = "server"
name = "Messaging Server"
density = 1
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index c70a8f25dae..71fe1aca326 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -83,31 +83,31 @@ Note: Must be placed west/left of and R&D console to function.
I.loc = src.loc
if(m_amount >= 3750)
var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc)
- G.amount = round(m_amount / 3750)
+ G.amount = round(m_amount / G.perunit)
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)
- if(plasma_amount >= 3750)
+ G.amount = round(g_amount / G.perunit)
+ if(plasma_amount >= 2000)
var/obj/item/stack/sheet/plasma/G = new /obj/item/stack/sheet/plasma(src.loc)
- G.amount = round(plasma_amount / 3750)
- if(silver_amount >= 3750)
+ G.amount = round(plasma_amount / G.perunit)
+ if(silver_amount >= 2000)
var/obj/item/stack/sheet/silver/G = new /obj/item/stack/sheet/silver(src.loc)
- G.amount = round(silver_amount / 3750)
- if(gold_amount >= 3750)
+ G.amount = round(silver_amount / G.perunit)
+ if(gold_amount >= 2000)
var/obj/item/stack/sheet/gold/G = new /obj/item/stack/sheet/gold(src.loc)
- G.amount = round(gold_amount / 3750)
- if(uranium_amount >= 3750)
+ G.amount = round(gold_amount / G.perunit)
+ if(uranium_amount >= 2000)
var/obj/item/stack/sheet/uranium/G = new /obj/item/stack/sheet/uranium(src.loc)
- G.amount = round(uranium_amount / 3750)
- if(diamond_amount >= 3750)
+ G.amount = round(uranium_amount / G.perunit)
+ if(diamond_amount >= 2000)
var/obj/item/stack/sheet/diamond/G = new /obj/item/stack/sheet/diamond(src.loc)
- G.amount = round(diamond_amount / 3750)
- if(clown_amount >= 3750)
+ G.amount = round(diamond_amount / G.perunit)
+ if(clown_amount >= 2000)
var/obj/item/stack/sheet/clown/G = new /obj/item/stack/sheet/clown(src.loc)
- G.amount = round(clown_amount / 3750)
- if(adamantine_amount >= 3750)
+ G.amount = round(clown_amount / G.perunit)
+ if(adamantine_amount >= 2000)
var/obj/item/stack/sheet/adamantine/G = new /obj/item/stack/sheet/adamantine(src.loc)
- G.amount = round(adamantine_amount / 3750)
+ G.amount = round(adamantine_amount / G.perunit)
del(src)
return 1
else
@@ -130,21 +130,18 @@ Note: Must be placed west/left of and R&D console to function.
user << "\red The protolathe's material bin is full. Please remove material before adding more."
return 1
- var/obj/item/stack/stack = O
- var/amount = 1
- var/title = "[stack.name]: [stack.amount] sheet\s left"
- switch(alert(title, "How many sheets do you want to load?", "one", "max", "cancel", null))
- if("one")
- amount = 1
- if("max")
- amount = min(stack.amount, round((max_material_storage-TotalMaterials())/3750))
- else
- return 1
+ var/obj/item/stack/sheet/stack = O
+ var/amount = round(input("How many sheets do you want to add?") as num)
+ if(amount < 0)
+ amount = 0
+ if(amount == 0)
+ return
+ if(amount > stack.amount)
+ amount = min(stack.amount, round((max_material_storage-TotalMaterials())/stack.perunit))
- if(istype(O, /obj/item/stack/sheet/glass))
- flick("protolathe_r",src)//plays glass insertion animation
- else
- flick("protolathe_o",src)//plays metal insertion animation
+ src.overlays += "protolathe_[stack.name]"
+ sleep(10)
+ src.overlays -= "protolathe_[stack.name]"
icon_state = "protolathe"
busy = 1
@@ -152,25 +149,24 @@ Note: Must be placed west/left of and R&D console to function.
spawn(16)
user << "\blue You add [amount] sheets to the [src.name]."
icon_state = "protolathe"
- flick("protolathe_o",src)
if(istype(stack, /obj/item/stack/sheet/metal))
m_amount += amount * 3750
else if(istype(stack, /obj/item/stack/sheet/glass))
g_amount += amount * 3750
else if(istype(stack, /obj/item/stack/sheet/gold))
- gold_amount += amount * 3750
+ gold_amount += amount * 2000
else if(istype(stack, /obj/item/stack/sheet/silver))
- silver_amount += amount * 3750
+ silver_amount += amount * 2000
else if(istype(stack, /obj/item/stack/sheet/plasma))
- plasma_amount += amount * 3750
+ plasma_amount += amount * 2000
else if(istype(stack, /obj/item/stack/sheet/uranium))
- uranium_amount += amount * 3750
+ uranium_amount += amount * 2000
else if(istype(stack, /obj/item/stack/sheet/diamond))
- diamond_amount += amount * 3750
+ diamond_amount += amount * 2000
else if(istype(stack, /obj/item/stack/sheet/clown))
- clown_amount += amount * 3750
+ clown_amount += amount * 2000
else if(istype(stack, /obj/item/stack/sheet/adamantine))
- adamantine_amount += amount * 3750
+ adamantine_amount += amount * 2000
stack.use(amount)
busy = 0
src.updateUsrDialog()
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index cbfa7e9b550..b525741b71b 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -739,58 +739,58 @@ won't update every console in existence) but it's more of a hassle to do. Also,
//Metal
dat += "* [linked_lathe.m_amount] cm3 of Metal || "
dat += "Eject: "
- if(linked_lathe.m_amount > 3750) dat += "(1 Sheet) "
- if(linked_lathe.m_amount > 18750) dat += "(5 Sheets) "
- if(linked_lathe.m_amount > 3750) dat += "(Max Sheets)"
+ if(linked_lathe.m_amount >= 3750) dat += "(1 Sheet) "
+ if(linked_lathe.m_amount >= 18750) dat += "(5 Sheets) "
+ if(linked_lathe.m_amount >= 3750) dat += "(Max Sheets)"
dat += "
"
//Glass
dat += "* [linked_lathe.g_amount] cm3 of Glass || "
dat += "Eject: "
- if(linked_lathe.g_amount > 3750) dat += "(1 Sheet) "
- if(linked_lathe.g_amount > 18750) dat += "(5 Sheets) "
- if(linked_lathe.g_amount > 3750) dat += "(Max Sheets)"
+ if(linked_lathe.g_amount >= 3750) dat += "(1 Sheet) "
+ if(linked_lathe.g_amount >= 18750) dat += "(5 Sheets) "
+ if(linked_lathe.g_amount >= 3750) dat += "(Max Sheets)"
dat += "
"
//Gold
dat += "* [linked_lathe.gold_amount] cm3 of Gold || "
dat += "Eject: "
- if(linked_lathe.gold_amount > 3750) dat += "(1 Sheet) "
- if(linked_lathe.gold_amount > 18750) dat += "(5 Sheets) "
- if(linked_lathe.gold_amount > 3750) dat += "(Max Sheets)"
+ if(linked_lathe.gold_amount >= 2000) dat += "(1 Sheet) "
+ if(linked_lathe.gold_amount >= 10000) dat += "(5 Sheets) "
+ if(linked_lathe.gold_amount >= 2000) dat += "(Max Sheets)"
dat += "
"
//Silver
dat += "* [linked_lathe.silver_amount] cm3 of Silver || "
dat += "Eject: "
- if(linked_lathe.silver_amount >= 3750) dat += "(1 Sheet) "
- if(linked_lathe.silver_amount >= 18750) dat += "(5 Sheets) "
- if(linked_lathe.silver_amount >= 3750) dat += "(Max Sheets)"
+ if(linked_lathe.silver_amount >= 2000) dat += "(1 Sheet) "
+ if(linked_lathe.silver_amount >= 10000) dat += "(5 Sheets) "
+ if(linked_lathe.silver_amount >= 2000) dat += "(Max Sheets)"
dat += "
"
//Plasma
dat += "* [linked_lathe.plasma_amount] cm3 of Solid Plasma || "
dat += "Eject: "
- if(linked_lathe.plasma_amount >= 3750) dat += "(1 Sheet) "
- if(linked_lathe.plasma_amount >= 18750) dat += "(5 Sheets) "
- if(linked_lathe.plasma_amount >= 3750) dat += "(Max Sheets)"
+ if(linked_lathe.plasma_amount >= 2000) dat += "(1 Sheet) "
+ if(linked_lathe.plasma_amount >= 10000) dat += "(5 Sheets) "
+ if(linked_lathe.plasma_amount >= 2000) dat += "(Max Sheets)"
dat += "
"
//Uranium
dat += "* [linked_lathe.uranium_amount] cm3 of Uranium || "
dat += "Eject: "
- if(linked_lathe.uranium_amount >= 3750) dat += "(1 Sheet) "
- if(linked_lathe.uranium_amount >= 18750) dat += "(5 Sheets) "
- if(linked_lathe.uranium_amount >= 3750) dat += "(Max Sheets)"
+ if(linked_lathe.uranium_amount >= 2000) dat += "(1 Sheet) "
+ if(linked_lathe.uranium_amount >= 10000) dat += "(5 Sheets) "
+ if(linked_lathe.uranium_amount >= 2000) dat += "(Max Sheets)"
dat += "
"
//Diamond
dat += "* [linked_lathe.diamond_amount] cm3 of Diamond || "
dat += "Eject: "
- if(linked_lathe.diamond_amount >= 3750) dat += "(1 Sheet) "
- if(linked_lathe.diamond_amount >= 18750) dat += "(5 Sheets) "
- if(linked_lathe.diamond_amount >= 3750) dat += "(Max Sheets)"
+ if(linked_lathe.diamond_amount >= 2000) dat += "(1 Sheet) "
+ if(linked_lathe.diamond_amount >= 10000) dat += "(5 Sheets) "
+ if(linked_lathe.diamond_amount >= 2000) dat += "(Max Sheets)"
dat += "
"
//Bananium
dat += "* [linked_lathe.clown_amount] cm3 of Bananium || "
dat += "Eject: "
- if(linked_lathe.clown_amount >= 3750) dat += "(1 Sheet) "
- if(linked_lathe.clown_amount >= 18750) dat += "(5 Sheets) "
- if(linked_lathe.clown_amount >= 3750) dat += "(Max Sheets)"
+ if(linked_lathe.clown_amount >= 2000) dat += "(1 Sheet) "
+ if(linked_lathe.clown_amount >= 10000) dat += "(5 Sheets) "
+ if(linked_lathe.clown_amount >= 2000) dat += "(Max Sheets)"
if(3.3) //Protolathe Chemical Storage Submenu
dat += "Main Menu || "
@@ -852,23 +852,23 @@ won't update every console in existence) but it's more of a hassle to do. Also,
//Glass
dat += "* [linked_imprinter.g_amount] cm3 of Glass || "
dat += "Eject: "
- if(linked_imprinter.g_amount > 3750) dat += "(1 Sheet) "
- if(linked_imprinter.g_amount > 18750) dat += "(5 Sheets) "
- if(linked_imprinter.g_amount > 3750) dat += "(Max Sheets)"
+ if(linked_imprinter.g_amount >= 3750) dat += "(1 Sheet) "
+ if(linked_imprinter.g_amount >= 18750) dat += "(5 Sheets) "
+ if(linked_imprinter.g_amount >= 3750) dat += "(Max Sheets)"
dat += "
"
//Gold
dat += "* [linked_imprinter.gold_amount] cm3 of Gold || "
dat += "Eject: "
- if(linked_imprinter.gold_amount > 3750) dat += "(1 Sheet) "
- if(linked_imprinter.gold_amount > 18750) dat += "(5 Sheets) "
- if(linked_imprinter.gold_amount > 3750) dat += "(Max Sheets)"
+ if(linked_imprinter.gold_amount >= 2000) dat += "(1 Sheet) "
+ if(linked_imprinter.gold_amount >= 10000) dat += "(5 Sheets) "
+ if(linked_imprinter.gold_amount >= 2000) dat += "(Max Sheets)"
dat += "
"
//Diamond
dat += "* [linked_imprinter.diamond_amount] cm3 of Diamond || "
dat += "Eject: "
- if(linked_imprinter.diamond_amount > 3750) dat += "(1 Sheet) "
- if(linked_imprinter.diamond_amount > 18750) dat += "(5 Sheets) "
- if(linked_imprinter.diamond_amount > 3750) dat += "(Max Sheets)"
+ if(linked_imprinter.diamond_amount >= 2000) dat += "(1 Sheet) "
+ if(linked_imprinter.diamond_amount >= 10000) dat += "(5 Sheets) "
+ if(linked_imprinter.diamond_amount >= 2000) dat += "(Max Sheets)"
user << browse("Research and Development Console
[dat]", "window=rdconsole;size=575x400")
onclose(user, "rdconsole")
diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm
index e297c33eae7..df3a33bce84 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -5,6 +5,7 @@
/obj/machinery/r_n_d
name = "R&D Device"
+ icon = 'research.dmi'
density = 1
anchored = 1
use_power = 1
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index d23c641f720..604e717dc31 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -1,5 +1,6 @@
/obj/machinery/r_n_d/server
name = "R&D Server"
+ icon = 'research.dmi'
icon_state = "server"
var
datum/research/files
diff --git a/html/changelog.html b/html/changelog.html
index ba0c5f0632c..b71aed15b13 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -46,18 +46,23 @@ Stuff which is in development and not yet visible to players or just code relate
should be listed in the changelog upon commit tho. Thanks. -->
-
-
Wednesay June 6, 2012
+
Wednesday, June 6th
+
Sieve updated:
+
+ - Radiation now works properly, watch out for that Singularity!
+ - Disposals are no longer the loudest machines in existence.
+ - Building portable turrets with lasertag guns now makes them fire lasertag bolts based on team, and they will automatically target and prioritize people wearing opposing team gear.
+ - The same can be done for ED-209s, simply using a lasertag vest and gun (same color) where you would use a security vest and taser in construction.
+ - Added mineral walls and powered mineral door construction. More information can be found in the commit thread, but basically they are built the same way others are, apply mineral to girder for a mineral wall, mineral to airlock assembly for a powered mineral door.
+ - Commit Thread
+ - Throw hotkey (end) now works with TK.
+ - Swap hands hotkey (page up) now cycles through borg modules.
+
Nodrak updated:
- Cargo's 'shuttle: station' and 'shuttle: dock' has been changed to 'shuttle: station' and 'shuttle: away' to help avoid confusion.
-
Sieve updated:
-
- - Throw hotkey (end) now works with TK.
- - Swap hands hotkey (page up) now cycles through borg modules.
-
diff --git a/icons/mecha/mech_construct.dmi b/icons/mecha/mech_construct.dmi
index 72705d68e17..9213e418ff8 100644
Binary files a/icons/mecha/mech_construct.dmi and b/icons/mecha/mech_construct.dmi differ
diff --git a/icons/mecha/mech_construction.dmi b/icons/mecha/mech_construction.dmi
index e7e9bb0294f..96c3c950bdc 100644
Binary files a/icons/mecha/mech_construction.dmi and b/icons/mecha/mech_construction.dmi differ
diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi
index 2a66ef4b64f..c5f52e3501a 100644
Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ
diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi
index 407049ae2d9..f58a356c34c 100644
Binary files a/icons/obj/aibots.dmi and b/icons/obj/aibots.dmi differ
diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi
index 5f30f0a5cb6..1aeee0d90d9 100644
Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ
diff --git a/icons/obj/doors/Doorbananium.dmi b/icons/obj/doors/Doorbananium.dmi
new file mode 100644
index 00000000000..890a47149af
Binary files /dev/null and b/icons/obj/doors/Doorbananium.dmi differ
diff --git a/icons/obj/doors/Doordiamond.dmi b/icons/obj/doors/Doordiamond.dmi
new file mode 100644
index 00000000000..29a5632ad93
Binary files /dev/null and b/icons/obj/doors/Doordiamond.dmi differ
diff --git a/icons/obj/doors/Doorgold.dmi b/icons/obj/doors/Doorgold.dmi
new file mode 100644
index 00000000000..0060e4d9a7e
Binary files /dev/null and b/icons/obj/doors/Doorgold.dmi differ
diff --git a/icons/obj/doors/Doorplasma.dmi b/icons/obj/doors/Doorplasma.dmi
new file mode 100644
index 00000000000..1c2b35f1f7b
Binary files /dev/null and b/icons/obj/doors/Doorplasma.dmi differ
diff --git a/icons/obj/doors/Doorsand.dmi b/icons/obj/doors/Doorsand.dmi
new file mode 100644
index 00000000000..5cd8c2fc346
Binary files /dev/null and b/icons/obj/doors/Doorsand.dmi differ
diff --git a/icons/obj/doors/Doorsilver.dmi b/icons/obj/doors/Doorsilver.dmi
new file mode 100644
index 00000000000..c8407240f3c
Binary files /dev/null and b/icons/obj/doors/Doorsilver.dmi differ
diff --git a/icons/obj/doors/Dooruranium.dmi b/icons/obj/doors/Dooruranium.dmi
new file mode 100644
index 00000000000..c7ff2e13c69
Binary files /dev/null and b/icons/obj/doors/Dooruranium.dmi differ
diff --git a/icons/obj/doors/door_assembly.dmi b/icons/obj/doors/door_assembly.dmi
index ee84879fb74..ca3f3ef813e 100644
Binary files a/icons/obj/doors/door_assembly.dmi and b/icons/obj/doors/door_assembly.dmi differ
diff --git a/icons/obj/doors/mineral_doors.dmi b/icons/obj/doors/mineral_doors.dmi
index 506a1e14605..92158d86451 100644
Binary files a/icons/obj/doors/mineral_doors.dmi and b/icons/obj/doors/mineral_doors.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 975dfd2b735..30195fb8da0 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi
index c10b2e75b3b..6f200d5812f 100644
Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ
diff --git a/icons/obj/machines/particle_accelerator.dmi b/icons/obj/machines/particle_accelerator.dmi
index 9513689f65f..5f8501fd687 100644
Binary files a/icons/obj/machines/particle_accelerator.dmi and b/icons/obj/machines/particle_accelerator.dmi differ
diff --git a/icons/obj/machines/research.dmi b/icons/obj/machines/research.dmi
new file mode 100644
index 00000000000..68dbded2127
Binary files /dev/null and b/icons/obj/machines/research.dmi differ
diff --git a/icons/obj/robotics.dmi b/icons/obj/robotics.dmi
index 588bba96320..3494bb9d53f 100644
Binary files a/icons/obj/robotics.dmi and b/icons/obj/robotics.dmi differ
diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi
index a16f2ba0b9d..07d4984b3ce 100644
Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ
diff --git a/icons/obj/turrets.dmi b/icons/obj/turrets.dmi
index 867591fb829..b3a20367426 100644
Binary files a/icons/obj/turrets.dmi and b/icons/obj/turrets.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
index cc882b05673..581e30cab51 100644
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index 0957455fcc6..7e8f73881d0 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/icons/turf/mineral_walls.dmi b/icons/turf/mineral_walls.dmi
index 1281f523528..e69de29bb2d 100644
Binary files a/icons/turf/mineral_walls.dmi and b/icons/turf/mineral_walls.dmi differ
diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi
index 7413089cc70..cdd6c88ab83 100644
Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ
diff --git a/maps/tgstation.2.0.9.dmm b/maps/tgstation.2.0.9.dmm
index 602bcebb8b7..4a3c426fc0d 100644
--- a/maps/tgstation.2.0.9.dmm
+++ b/maps/tgstation.2.0.9.dmm
@@ -2483,13 +2483,13 @@
"aVM" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"aVN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"aVO" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/power/apc{cell_type = 5000; dir = 4; name = "Captain's Quarters APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
-"aVP" = (/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aVQ" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/turret,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aVR" = (/obj/machinery/light/small{dir = 1},/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/machinery/camera/motion{c_tag = "AI Chamber"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aVS" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aVT" = (/obj/machinery/light/small{dir = 1},/obj/machinery/power/terminal{dir = 8},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_y = 29},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aVU" = (/obj/machinery/turret,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aVV" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aVP" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aVQ" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/turret,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aVR" = (/obj/machinery/light/small{dir = 1},/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/machinery/camera/motion{c_tag = "AI Chamber"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aVS" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aVT" = (/obj/machinery/light/small{dir = 1},/obj/machinery/power/terminal{dir = 8},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_y = 29},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aVU" = (/obj/machinery/turret,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aVV" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aVW" = (/obj/structure/closet/emcloset,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/crew_quarters/heads)
"aVX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads)
"aVY" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/camera{c_tag = "Head of Personnel's Office"; dir = 2},/turf/simulated/floor,/area/crew_quarters/heads)
@@ -2542,9 +2542,9 @@
"aWT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor{dir = 5; icon_state = "carpetside"},/area/crew_quarters/captain)
"aWU" = (/obj/machinery/computer/arcade,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"aWV" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor,/area/turret_protected/ai)
-"aWW" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aWX" = (/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aWY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aWW" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aWX" = (/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aWY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aWZ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor,/area/turret_protected/ai)
"aXa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"aXb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
@@ -2600,11 +2600,11 @@
"aXZ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "carpetside"},/area/crew_quarters/captain)
"aYa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor{dir = 6; icon_state = "carpetside"},/area/crew_quarters/captain)
"aYb" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
-"aYc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aYc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aYd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/turret_protected/ai)
"aYe" = (/turf/simulated/wall,/area/turret_protected/ai)
"aYf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/turret_protected/ai)
-"aYg" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aYg" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aYh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
"aYi" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/obj/machinery/vending/coffee,/turf/simulated/floor,/area/crew_quarters/heads)
"aYj" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/crew_quarters/heads)
@@ -2644,13 +2644,13 @@
"aYR" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"aYS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"aYT" = (/obj/machinery/vending/cigarette,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
-"aYU" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; name = "General Listening Channel"; pixel_x = 0; pixel_y = 20},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -26},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 1; freerange = 1; listening = 0; name = "General Broadcasting Channel"; pixel_x = -25; pixel_y = -4},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aYV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/door/window{dir = 4; name = "AI Core Door"; req_access_txt = "16"},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aYU" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; name = "General Listening Channel"; pixel_x = 0; pixel_y = 20},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -26},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 1; freerange = 1; listening = 0; name = "General Broadcasting Channel"; pixel_x = -25; pixel_y = -4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aYV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/door/window{dir = 4; name = "AI Core Door"; req_access_txt = "16"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aYW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/turret_protected/ai)
-"aYX" = (/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; name = "General Listening Channel"; pixel_x = -27; pixel_y = 4},/obj/machinery/turretid{pixel_x = 24; pixel_y = -7},/obj/effect/landmark/start{name = "AI"},/obj/item/device/radio/intercom{broadcasting = 1; freerange = 1; listening = 0; name = "General Broadcasting Channel"; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door_control{desc = "A remote control switch for the AI chamber door."; id = "AI Door"; name = "AI Chamber Door Control"; pixel_x = 27; pixel_y = 27; req_access_txt = "16"},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aYX" = (/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; name = "General Listening Channel"; pixel_x = -27; pixel_y = 4},/obj/machinery/turretid{pixel_x = 24; pixel_y = -7},/obj/effect/landmark/start{name = "AI"},/obj/item/device/radio/intercom{broadcasting = 1; freerange = 1; listening = 0; name = "General Broadcasting Channel"; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door_control{desc = "A remote control switch for the AI chamber door."; id = "AI Door"; name = "AI Chamber Door Control"; pixel_x = 27; pixel_y = 27; req_access_txt = "16"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aYY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/turret_protected/ai)
-"aYZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "AI Core Door"; req_access_txt = "16"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aZa" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; name = "General Listening Channel"; pixel_x = 0; pixel_y = 19},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -26},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 1; freerange = 1; listening = 0; name = "General Broadcasting Channel"; pixel_x = 27; pixel_y = -3},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aYZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "AI Core Door"; req_access_txt = "16"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aZa" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; name = "General Listening Channel"; pixel_x = 0; pixel_y = 19},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -26},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 1; freerange = 1; listening = 0; name = "General Broadcasting Channel"; pixel_x = 27; pixel_y = -3},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aZb" = (/obj/machinery/vending/cola,/turf/simulated/floor,/area/crew_quarters/heads)
"aZc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads)
"aZd" = (/obj/machinery/computer/card,/turf/simulated/floor,/area/crew_quarters/heads)
@@ -2702,12 +2702,12 @@
"aZX" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/structure/table/woodentable,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"aZY" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"aZZ" = (/obj/structure/displaycase,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
-"baa" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bab" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bac" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/power/apc{dir = 1; equip_consumption = 100; light_consumption = 50; name = "AI Chamber APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bad" = (/obj/machinery/door/window{name = "AI Core Door"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bae" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"baf" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"baa" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bab" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bac" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/power/apc{dir = 1; equip_consumption = 100; light_consumption = 50; name = "AI Chamber APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bad" = (/obj/machinery/door/window{name = "AI Core Door"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bae" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"baf" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bag" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/vending/snack,/turf/simulated/floor,/area/crew_quarters/heads)
"bah" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{dir = 9; icon_state = "carpetside"},/area/crew_quarters/heads)
"bai" = (/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor{dir = 1; icon_state = "carpetside"},/area/crew_quarters/heads)
@@ -2783,13 +2783,13 @@
"bbA" = (/obj/effect/landmark/start{name = "Captain"},/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"bbB" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/captain,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"bbC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/keycard_auth{pixel_x = 24},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
-"bbD" = (/obj/machinery/light/small{dir = 8},/obj/machinery/turret{dir = 4},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bbD" = (/obj/machinery/light/small{dir = 8},/obj/machinery/turret{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bbE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor,/area/turret_protected/ai)
-"bbF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bbF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bbG" = (/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor,/area/turret_protected/ai)
-"bbH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bbH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bbI" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor,/area/turret_protected/ai)
-"bbJ" = (/obj/machinery/light/small{dir = 4},/obj/machinery/turret{dir = 8},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bbJ" = (/obj/machinery/light/small{dir = 4},/obj/machinery/turret{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bbK" = (/obj/machinery/disposal,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/crew_quarters/heads)
"bbL" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 10; icon_state = "carpetside"},/area/crew_quarters/heads)
"bbM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "carpetside"},/area/crew_quarters/heads)
@@ -2854,11 +2854,11 @@
"bcT" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"bcU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall/r_wall,/area/crew_quarters/captain)
"bcV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"bcW" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bcX" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bcY" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bcZ" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bda" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bcW" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bcX" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bcY" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bcZ" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bda" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bdb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"bdc" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
"bdd" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/packageWrap,/turf/simulated/floor,/area/crew_quarters/heads)
@@ -3009,12 +3009,12 @@
"bfS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/port)
"bfT" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/lattice,/turf/space,/area)
"bfU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/ai_upload)
-"bfV" = (/obj/structure/table,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon = 'windoor.dmi'; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bfV" = (/obj/structure/table,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon = 'windoor.dmi'; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bfW" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "bot"},/area/turret_protected/ai_upload)
-"bfX" = (/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/machinery/computer/borgupload,/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bfX" = (/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/machinery/computer/borgupload,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bfY" = (/turf/simulated/floor{icon_state = "bot"},/area/turret_protected/ai_upload)
-"bfZ" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/computer/aiupload,/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
-"bga" = (/obj/structure/table,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/item/weapon/aiModule/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/antimov,/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bfZ" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/computer/aiupload,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bga" = (/obj/structure/table,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/item/weapon/aiModule/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/antimov,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bgb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/lattice,/turf/space,/area)
"bgc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/wall,/area/bridge/meeting_room)
"bgd" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/bridge/meeting_room)
@@ -3087,9 +3087,9 @@
"bhs" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/maintenance/port)
"bht" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/maintenance/port)
"bhu" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/turret_protected/ai_upload)
-"bhv" = (/obj/machinery/turret{dir = 4},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
-"bhw" = (/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
-"bhx" = (/obj/machinery/turret{dir = 8},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bhv" = (/obj/machinery/turret{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bhw" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bhx" = (/obj/machinery/turret{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bhy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall,/area/bridge/meeting_room)
"bhz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/bridge/meeting_room)
"bhA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/bridge/meeting_room)
@@ -3137,7 +3137,7 @@
"biq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"bir" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"bis" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/quartermaster/storage)
-"bit" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/quartermaster/storage)
+"bit" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/quartermaster/storage)
"biu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/quartermaster/storage)
"biv" = (/turf/simulated/floor{icon_state = "delivery"},/area/quartermaster/storage)
"biw" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #1"},/obj/machinery/bot/mulebot{beacon_freq = 1400; home_destination = "QM #1"; suffix = "#1"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage)
@@ -3156,11 +3156,11 @@
"biJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/teleporter)
"biK" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/lattice,/turf/space,/area)
"biL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/ai_upload)
-"biM" = (/obj/structure/table,/obj/item/weapon/aiModule/teleporterOffline,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"biM" = (/obj/structure/table,/obj/item/weapon/aiModule/teleporterOffline,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"biN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "bot"},/area/turret_protected/ai_upload)
"biO" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/turret_protected/ai_upload)
"biP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor{icon_state = "bot"},/area/turret_protected/ai_upload_foyer)
-"biQ" = (/obj/structure/table,/obj/item/weapon/aiModule/freeform,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"biQ" = (/obj/structure/table,/obj/item/weapon/aiModule/freeform,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"biR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/ai_upload)
"biS" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/space,/area)
"biT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/bridge/meeting_room)
@@ -3217,9 +3217,9 @@
"bjS" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plating,/area/teleporter)
"bjT" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/plating,/area/teleporter)
"bjU" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
-"bjV" = (/obj/structure/table,/obj/item/weapon/aiModule/reset,/obj/machinery/camera{c_tag = "AI Upload Chamber"; dir = 4; network = "SS13"},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bjV" = (/obj/structure/table,/obj/item/weapon/aiModule/reset,/obj/machinery/camera{c_tag = "AI Upload Chamber"; dir = 4; network = "SS13"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bjW" = (/turf/simulated/floor,/area/turret_protected/ai_upload)
-"bjX" = (/obj/structure/table,/obj/item/weapon/aiModule/protectStation,/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bjX" = (/obj/structure/table,/obj/item/weapon/aiModule/protectStation,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bjY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor,/area/bridge/meeting_room)
"bjZ" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/bridge/meeting_room)
"bka" = (/obj/machinery/power/apc{dir = 1; name = "Conference Room APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/camera{c_tag = "Conference Room"; dir = 2},/turf/simulated/floor,/area/bridge/meeting_room)
@@ -3267,10 +3267,10 @@
"bkQ" = (/turf/simulated/floor,/area/teleporter)
"bkR" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/teleporter)
"bkS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/plating,/area/teleporter)
-"bkT" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Upload APC"; pixel_y = -24},/obj/machinery/light/small,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bkT" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Upload APC"; pixel_y = -24},/obj/machinery/light/small,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bkU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor,/area/turret_protected/ai_upload)
-"bkV" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
-"bkW" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_y = -25},/obj/machinery/light/small,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bkV" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bkW" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_y = -25},/obj/machinery/light/small,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bkX" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/space,/area)
"bkY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/newscaster{hitstaken = 1; pixel_x = -32; pixel_y = 0},/turf/simulated/floor,/area/bridge/meeting_room)
"bkZ" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "red"},/area/bridge/meeting_room)
@@ -3323,8 +3323,8 @@
"blU" = (/obj/item/device/radio/beacon,/turf/simulated/floor,/area/teleporter)
"blV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/requests_console{department = "Teleporter"; pixel_x = 30},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/teleporter)
"blW" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall/r_wall,/area/teleporter)
-"blX" = (/obj/machinery/turret{dir = 1},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
-"blY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"blX" = (/obj/machinery/turret{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"blY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"blZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor,/area/bridge/meeting_room)
"bma" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/bridge/meeting_room)
"bmb" = (/obj/structure/table,/obj/item/weapon/folder/red,/turf/simulated/floor,/area/bridge/meeting_room)
@@ -4622,11 +4622,11 @@
"bKT" = (/obj/machinery/optable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bKU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bKV" = (/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/floor,/area/medical/surgery)
-"bKW" = (/obj/machinery/r_n_d/server{id_with_download_string = "1"; id_with_upload_string = "1"; name = "Core R&D Server"; server_id = 1},/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bKX" = (/obj/machinery/camera{c_tag = "Server Room"; dir = 2; network = "SS13"; pixel_x = 22},/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bKY" = (/turf/simulated/floor/grid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bKZ" = (/obj/machinery/camera{c_tag = "Server Room"; dir = 2; network = "RD"},/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bLa" = (/obj/machinery/blackbox_recorder,/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bKW" = (/obj/machinery/r_n_d/server{id_with_download_string = "1"; id_with_upload_string = "1"; name = "Core R&D Server"; server_id = 1},/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bKX" = (/obj/machinery/camera{c_tag = "Server Room"; dir = 2; network = "SS13"; pixel_x = 22},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bKY" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bKZ" = (/obj/machinery/camera{c_tag = "Server Room"; dir = 2; network = "RD"},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bLa" = (/obj/machinery/blackbox_recorder,/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"bLb" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bLc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/sign/biohazard{pixel_x = 28},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bLd" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
@@ -4675,9 +4675,9 @@
"bLU" = (/obj/structure/table,/obj/item/weapon/surgicaldrill,/turf/simulated/floor,/area/medical/surgery)
"bLV" = (/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bLW" = (/obj/structure/closet/secure_closet/medical2,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/medical/surgery)
-"bLX" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/grid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bLY" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/grid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bLZ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/grid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bLX" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bLY" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bLZ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"bMa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Research Division Storage"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/medical/research{name = "Research Division"})
"bMb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/medical/research{name = "Research Division"})
"bMc" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/xenobiology)
@@ -4699,9 +4699,9 @@
"bMs" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment,/turf/space,/area)
"bMt" = (/obj/machinery/recharge_station,/obj/machinery/camera{c_tag = "Recharge Bay North West"; dir = 2},/turf/simulated/floor{icon_state = "bot"},/area/assembly/chargebay)
"bMu" = (/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor,/area/assembly/chargebay)
-"bMv" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/grid,/area/assembly/chargebay)
-"bMw" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor/grid,/area/assembly/chargebay)
-"bMx" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/grid,/area/assembly/chargebay)
+"bMv" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
+"bMw" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
+"bMx" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bMy" = (/turf/simulated/floor,/area/assembly/chargebay)
"bMz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/assembly/chargebay)
"bMA" = (/obj/machinery/power/apc{name = "Aft Hall APC"; dir = 8; pixel_x = -25; pixel_y = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/hallway/primary/aft)
@@ -4741,10 +4741,10 @@
"bNi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bNj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bNk" = (/obj/machinery/requests_console{department = "Operating Theatre"; departmentType = 0; name = "OR RC"; pixel_x = 30; pixel_y = 0},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor,/area/medical/surgery)
-"bNl" = (/obj/machinery/r_n_d/server{id_with_download_string = "1;2"; id_with_upload_string = "1;2"; name = "Robotics R&D Server"; server_id = 2},/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bNm" = (/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bNn" = (/obj/machinery/alarm/server{dir = 1; pixel_y = -22},/turf/simulated/floor/grid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bNo" = (/obj/machinery/message_server,/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bNl" = (/obj/machinery/r_n_d/server{id_with_download_string = "1;2"; id_with_upload_string = "1;2"; name = "Robotics R&D Server"; server_id = 2},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bNm" = (/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bNn" = (/obj/machinery/alarm/server{dir = 1; pixel_y = -22},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bNo" = (/obj/machinery/message_server,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"bNp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/medical/research{name = "Research Division"})
"bNq" = (/obj/machinery/portable_atmospherics/pump,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/medical/research{name = "Research Division"})
"bNr" = (/obj/machinery/shieldwallgen{req_access = list(55)},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology)
@@ -4775,7 +4775,7 @@
"bNQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor,/area/assembly/chargebay)
"bNR" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/assembly/chargebay)
"bNS" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/assembly/chargebay)
-"bNT" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/grid,/area/assembly/chargebay)
+"bNT" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bNU" = (/obj/machinery/door/poddoor{id = "Skynet_launch"; name = "Recharge Bay"; req_access_txt = "22"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/assembly/chargebay)
"bNV" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/aft)
"bNW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/hallway/primary/aft)
@@ -4874,7 +4874,7 @@
"bPL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"bPM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"bPN" = (/obj/machinery/power/apc{dir = 8; name = "Mech Bay APC"; pixel_x = -25; pixel_y = 1},/obj/structure/cable,/turf/simulated/floor,/area/assembly/chargebay)
-"bPO" = (/turf/simulated/floor/grid,/area/assembly/chargebay)
+"bPO" = (/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bPP" = (/obj/machinery/camera{c_tag = "Recharge Bay"; dir = 8},/obj/machinery/door_control{dir = 2; id = "Skynet_launch"; name = "Recharge Bay Door Control"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor,/area/assembly/chargebay)
"bPQ" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/hallway/primary/aft)
"bPR" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced,/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hallway/primary/aft)
@@ -5198,114 +5198,114 @@
"bVX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"bVY" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Holding Rooms"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"bVZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bWa" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/closet/wardrobe/robotics_black,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/assembly/assembly_line)
-"bWb" = (/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/assembly/assembly_line)
-"bWc" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/turf/simulated/floor{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/assembly/assembly_line)
-"bWd" = (/obj/machinery/conveyor{dir = 4; id = "Skynet_heavy"},/obj/machinery/light,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/assembly/assembly_line)
-"bWe" = (/obj/machinery/conveyor{dir = 4; id = "Skynet_heavy"},/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/assembly/assembly_line)
-"bWf" = (/obj/machinery/conveyor{dir = 4; id = "Skynet_heavy"},/obj/machinery/camera{c_tag = "Robotics Assembly"; dir = 10; network = "RD"},/obj/machinery/camera{c_tag = "Robotics Assembly"; dir = 1},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/assembly/assembly_line)
-"bWg" = (/obj/machinery/conveyor{dir = 4; id = "Skynet_heavy"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/assembly/assembly_line)
-"bWh" = (/obj/machinery/conveyor{dir = 4; id = "Skynet_heavy"},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/assembly/assembly_line)
-"bWi" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/assembly/assembly_line)
-"bWj" = (/obj/machinery/requests_console{department = "Assembly Line (Robotics)"; departmentType = 2; name = "assembly line RC"; pixel_y = -30},/turf/simulated/floor,/area/assembly/assembly_line)
-"bWk" = (/obj/structure/table,/obj/item/device/multitool,/obj/item/weapon/crowbar,/obj/item/device/flash,/obj/item/device/flash,/turf/simulated/floor,/area/assembly/assembly_line)
-"bWl" = (/obj/structure/table,/obj/item/clothing/gloves/black{pixel_y = 3},/obj/item/device/radio/headset/headset_rob,/turf/simulated/floor,/area/assembly/assembly_line)
-"bWm" = (/obj/structure/reagent_dispensers/fueltank,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/turf/simulated/floor,/area/assembly/assembly_line)
-"bWn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/assembly/assembly_line)
-"bWo" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor/plating,/area/assembly/assembly_line)
-"bWp" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor,/area/hallway/primary/aft)
-"bWq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor,/area/hallway/primary/aft)
-"bWr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft)
-"bWs" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "yellowcorner"},/area/hallway/primary/aft)
-"bWt" = (/obj/machinery/vending/cola,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/engine/break_room)
-"bWu" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cola{pixel_x = -3},/turf/simulated/floor,/area/engine/break_room)
-"bWv" = (/obj/structure/table,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/item/weapon/folder/yellow,/obj/item/weapon/screwdriver{pixel_y = 8},/turf/simulated/floor,/area/engine/break_room)
-"bWw" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers,/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers{pixel_x = 5; pixel_y = 2},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room)
-"bWx" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room)
-"bWy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"},/area/engine/break_room)
-"bWz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/atmos)
-"bWA" = (/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 5; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos)
-"bWB" = (/obj/machinery/atmospherics/pipe/simple{color = "cyan"; icon_state = "intact-c"; level = 2},/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos)
-"bWC" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 1; icon_state = "manifold-r"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
-"bWD" = (/obj/machinery/atmospherics/pipe/manifold{color = "cyan"; dir = 8; icon_state = "manifold-c"; initialize_directions = 11; level = 2},/turf/simulated/floor,/area/atmos)
-"bWE" = (/obj/machinery/atmospherics/binary/pump{dir = 4; icon_state = "intact_on"; name = "O2 to Air"; on = 1},/turf/simulated/floor,/area/atmos)
-"bWF" = (/obj/machinery/atmospherics/trinary/mixer{icon_state = "intact_on"; name = "Gas mixer (N2/O2)"; node1_concentration = 0.8; node2_concentration = 0.2; on = 1; pixel_x = 0; pixel_y = 1; target_pressure = 4500},/turf/simulated/floor,/area/atmos)
-"bWG" = (/obj/machinery/atmospherics/pipe/simple{color = "yellow"; dir = 5; icon_state = "intact-y"; level = 2},/turf/simulated/floor,/area/atmos)
-"bWH" = (/obj/machinery/atmospherics/binary/pump{dir = 8; icon_state = "intact_off"; name = "CO2 to Pure"; on = 0},/obj/machinery/atmospherics/pipe/simple{color = "green"; icon_state = "intact-g"; level = 2},/turf/simulated/floor,/area/atmos)
-"bWI" = (/obj/machinery/atmospherics/valve/digital{color = "yellow"; dir = 4; name = "CO2 Outlet Valve"},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/atmos)
-"bWJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
-"bWK" = (/obj/machinery/door/poddoor{id = "disvent"; name = "Incinerator Vent"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bWL" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bWM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bWN" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/machinery/access_button{command = "cycle_interior"; layer = 3.1; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = 22; pixel_y = -10},/obj/machinery/light{dir = 1},/obj/effect/sign/fire{pixel_y = 32},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bWO" = (/obj/machinery/door_control{id = "disvent"; name = "Incinerator Vent Control"; pixel_x = 0; pixel_y = 24; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bWP" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bWQ" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bWR" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1; icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bWS" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/machinery/atmospherics/valve{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bWT" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bWU" = (/obj/structure/closet/l3closet/virology{layer = 2.9; pixel_x = -5},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bWV" = (/obj/effect/sign/deathsposal{pixel_x = 32},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bWW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/wall,/area/medical/virology)
-"bWX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bWY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bWZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bXa" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/wall/r_wall,/area/medical/virology)
-"bXb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bXc" = (/obj/structure/disposalpipe/junction{tag = "icon-pipe-j2 (EAST)"; icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor/plating/airless,/area/maintenance/asmaint2)
-"bXd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bXe" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area)
-"bXf" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area)
-"bXg" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 4},/turf/simulated/floor/plating/airless,/area)
-"bXh" = (/obj/structure/table,/obj/item/weapon/circular_saw{pixel_y = 6},/turf/simulated/floor{icon_state = "white"},/area/assembly/assembly_line)
-"bXi" = (/turf/simulated/floor{icon_state = "white"},/area/assembly/assembly_line)
-"bXj" = (/obj/structure/table,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/turf/simulated/floor{icon_state = "white"},/area/assembly/assembly_line)
-"bXk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/assembly/assembly_line)
-"bXl" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/plating,/area/maintenance/aft)
-"bXm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/aft)
-"bXn" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft)
-"bXo" = (/obj/machinery/door/firedoor/border_only,/obj/effect/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 32},/turf/simulated/floor{icon_state = "yellowcorner"},/area/hallway/primary/aft)
-"bXp" = (/obj/machinery/camera{c_tag = "Engineering Break-Room"; dir = 4; network = "SS13"},/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/engine/break_room)
-"bXq" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor,/area/engine/break_room)
-"bXr" = (/obj/structure/stool,/turf/simulated/floor,/area/engine/break_room)
-"bXs" = (/obj/structure/stool,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/engine/break_room)
-"bXt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor,/area/engine/break_room)
-"bXu" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor,/area/engine/break_room)
-"bXv" = (/obj/machinery/camera{c_tag = "Atmospherics South West"; dir = 4; network = "SS13"},/obj/machinery/portable_atmospherics/pump,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/atmos)
-"bXw" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/atmos)
-"bXx" = (/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_on"; name = "N2 Out"; on = 1},/turf/simulated/floor,/area/atmos)
-"bXy" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; filter_type = 2; icon_state = "intact_on"; name = "Gas filter (N2 tank)"; on = 1},/turf/simulated/floor,/area/atmos)
-"bXz" = (/obj/machinery/atmospherics/pipe/simple{color = "green"; dir = 4; icon_state = "intact-g"; level = 2},/turf/simulated/floor,/area/atmos)
-"bXA" = (/obj/machinery/atmospherics/pipe/simple{color = "green"; dir = 4; icon_state = "intact-g"; level = 2},/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_on"; name = "O2 Out"; on = 1},/turf/simulated/floor,/area/atmos)
-"bXB" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; filter_type = 1; icon_state = "intact_on"; name = "Gas filter (O2 tank)"; on = 1},/turf/simulated/floor,/area/atmos)
-"bXC" = (/obj/machinery/atmospherics/pipe/simple{color = "cyan"; icon_state = "intact-c"; level = 2},/obj/machinery/atmospherics/pipe/simple{color = "green"; dir = 4; icon_state = "intact-g"; initialize_directions = 12; level = 2},/turf/simulated/floor,/area/atmos)
-"bXD" = (/obj/machinery/atmospherics/pipe/simple{color = "green"; dir = 9; icon_state = "intact-g"; level = 2},/turf/simulated/floor,/area/atmos)
-"bXE" = (/obj/machinery/atmospherics/pipe/simple{color = "cyan"; dir = 6; icon_state = "intact-c"; initialize_directions = 6; level = 2},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/atmos)
-"bXF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{color = "cyan"; dir = 9; icon_state = "intact-c"; level = 2},/turf/simulated/floor/plating,/area/atmos)
-"bXG" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "Incinerator"; on = 0},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bXH" = (/obj/machinery/door/airlock/maintenance{autoclose = 0; doortype = 7; frequency = 1449; glass = 1; icon = 'Doorglass.dmi'; icon_state = "door_locked"; id_tag = "incinerator_airlock_exterior"; locked = 1; name = "Incinerator Exterior Airlock"; opacity = 0; req_access_txt = "12"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bXI" = (/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bXJ" = (/obj/machinery/door/airlock/maintenance{autoclose = 0; doortype = 7; frequency = 1449; glass = 1; icon = 'Doorglass.dmi'; icon_state = "door_locked"; id_tag = "incinerator_airlock_interior"; locked = 1; name = "Incinerator Interior Airlock"; opacity = 0; req_access_txt = "12"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
-"bXK" = (/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bXL" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bXM" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"bXN" = (/obj/machinery/atmospherics/valve,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bXO" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bXP" = (/obj/machinery/computer/area_atmos,/obj/effect/sign/nosmoking_2{pixel_x = 28},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"bXQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bXR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/wall/r_wall,/area/medical/virology)
-"bXS" = (/obj/structure/closet/secure_closet/medical1{layer = 2.9; pixel_x = -5},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bXT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bXU" = (/obj/machinery/power/apc{cell_type = 2500; dir = 2; name = "Virology APC"; pixel_x = 0; pixel_y = -23},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bXV" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/light,/obj/machinery/requests_console{department = "Virology"; name = "Virology Requests Console"; pixel_x = 32},/obj/machinery/camera{c_tag = "Virology West"; dir = 8; network = "SS13"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bXW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/medical/virology)
-"bXX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/virology)
-"bXY" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Monkey Pen"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bXZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/virology)
-"bYa" = (/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bYb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
-"bYc" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar)
-"bYd" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 6},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/assembly/assembly_line)
+"bWa" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/closet/wardrobe/robotics_black,/turf/simulated/floor,/area/assembly/assembly_line)
+"bWb" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/turf/simulated/floor{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/assembly/assembly_line)
+"bWc" = (/obj/machinery/conveyor{dir = 4; id = "Skynet_heavy"},/obj/machinery/light,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/assembly/assembly_line)
+"bWd" = (/obj/machinery/conveyor{dir = 4; id = "Skynet_heavy"},/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/assembly/assembly_line)
+"bWe" = (/obj/machinery/conveyor{dir = 4; id = "Skynet_heavy"},/obj/machinery/camera{c_tag = "Robotics Assembly"; dir = 10; network = "RD"},/obj/machinery/camera{c_tag = "Robotics Assembly"; dir = 1},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/assembly/assembly_line)
+"bWf" = (/obj/machinery/conveyor{dir = 4; id = "Skynet_heavy"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/assembly/assembly_line)
+"bWg" = (/obj/machinery/conveyor{dir = 4; id = "Skynet_heavy"},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/assembly/assembly_line)
+"bWh" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/assembly/assembly_line)
+"bWi" = (/obj/machinery/requests_console{department = "Assembly Line (Robotics)"; departmentType = 2; name = "assembly line RC"; pixel_y = -30},/turf/simulated/floor,/area/assembly/assembly_line)
+"bWj" = (/obj/structure/table,/obj/item/device/multitool,/obj/item/weapon/crowbar,/obj/item/device/flash,/obj/item/device/flash,/turf/simulated/floor,/area/assembly/assembly_line)
+"bWk" = (/obj/structure/table,/obj/item/clothing/gloves/black{pixel_y = 3},/obj/item/device/radio/headset/headset_rob,/turf/simulated/floor,/area/assembly/assembly_line)
+"bWl" = (/obj/structure/reagent_dispensers/fueltank,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/turf/simulated/floor,/area/assembly/assembly_line)
+"bWm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/assembly/assembly_line)
+"bWn" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor/plating,/area/assembly/assembly_line)
+"bWo" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor,/area/hallway/primary/aft)
+"bWp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor,/area/hallway/primary/aft)
+"bWq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft)
+"bWr" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "yellowcorner"},/area/hallway/primary/aft)
+"bWs" = (/obj/machinery/vending/cola,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/engine/break_room)
+"bWt" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cola{pixel_x = -3},/turf/simulated/floor,/area/engine/break_room)
+"bWu" = (/obj/structure/table,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/item/weapon/folder/yellow,/obj/item/weapon/screwdriver{pixel_y = 8},/turf/simulated/floor,/area/engine/break_room)
+"bWv" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers,/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers{pixel_x = 5; pixel_y = 2},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room)
+"bWw" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room)
+"bWx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"},/area/engine/break_room)
+"bWy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/atmos)
+"bWz" = (/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 5; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos)
+"bWA" = (/obj/machinery/atmospherics/pipe/simple{color = "cyan"; icon_state = "intact-c"; level = 2},/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos)
+"bWB" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 1; icon_state = "manifold-r"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
+"bWC" = (/obj/machinery/atmospherics/pipe/manifold{color = "cyan"; dir = 8; icon_state = "manifold-c"; initialize_directions = 11; level = 2},/turf/simulated/floor,/area/atmos)
+"bWD" = (/obj/machinery/atmospherics/binary/pump{dir = 4; icon_state = "intact_on"; name = "O2 to Air"; on = 1},/turf/simulated/floor,/area/atmos)
+"bWE" = (/obj/machinery/atmospherics/trinary/mixer{icon_state = "intact_on"; name = "Gas mixer (N2/O2)"; node1_concentration = 0.8; node2_concentration = 0.2; on = 1; pixel_x = 0; pixel_y = 1; target_pressure = 4500},/turf/simulated/floor,/area/atmos)
+"bWF" = (/obj/machinery/atmospherics/pipe/simple{color = "yellow"; dir = 5; icon_state = "intact-y"; level = 2},/turf/simulated/floor,/area/atmos)
+"bWG" = (/obj/machinery/atmospherics/binary/pump{dir = 8; icon_state = "intact_off"; name = "CO2 to Pure"; on = 0},/obj/machinery/atmospherics/pipe/simple{color = "green"; icon_state = "intact-g"; level = 2},/turf/simulated/floor,/area/atmos)
+"bWH" = (/obj/machinery/atmospherics/valve/digital{color = "yellow"; dir = 4; name = "CO2 Outlet Valve"},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/atmos)
+"bWI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos)
+"bWJ" = (/obj/machinery/door/poddoor{id = "disvent"; name = "Incinerator Vent"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"bWK" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"bWL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"bWM" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/machinery/access_button{command = "cycle_interior"; layer = 3.1; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = 22; pixel_y = -10},/obj/machinery/light{dir = 1},/obj/effect/sign/fire{pixel_y = 32},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"bWN" = (/obj/machinery/door_control{id = "disvent"; name = "Incinerator Vent Control"; pixel_x = 0; pixel_y = 24; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"bWO" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bWP" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bWQ" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1; icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bWR" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/machinery/atmospherics/valve{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bWS" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bWT" = (/obj/structure/closet/l3closet/virology{layer = 2.9; pixel_x = -5},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bWU" = (/obj/effect/sign/deathsposal{pixel_x = 32},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bWV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/wall,/area/medical/virology)
+"bWW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bWX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bWY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bWZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/wall/r_wall,/area/medical/virology)
+"bXa" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"bXb" = (/obj/structure/disposalpipe/junction{tag = "icon-pipe-j2 (EAST)"; icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor/plating/airless,/area/maintenance/asmaint2)
+"bXc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"bXd" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area)
+"bXe" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area)
+"bXf" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 4},/turf/simulated/floor/plating/airless,/area)
+"bXg" = (/obj/structure/table,/obj/item/weapon/circular_saw{pixel_y = 6},/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/assembly/assembly_line)
+"bXh" = (/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/assembly/assembly_line)
+"bXi" = (/obj/structure/table,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/assembly/assembly_line)
+"bXj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/assembly/assembly_line)
+"bXk" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/plating,/area/maintenance/aft)
+"bXl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/aft)
+"bXm" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft)
+"bXn" = (/obj/machinery/door/firedoor/border_only,/obj/effect/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 32},/turf/simulated/floor{icon_state = "yellowcorner"},/area/hallway/primary/aft)
+"bXo" = (/obj/machinery/camera{c_tag = "Engineering Break-Room"; dir = 4; network = "SS13"},/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/engine/break_room)
+"bXp" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor,/area/engine/break_room)
+"bXq" = (/obj/structure/stool,/turf/simulated/floor,/area/engine/break_room)
+"bXr" = (/obj/structure/stool,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/engine/break_room)
+"bXs" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor,/area/engine/break_room)
+"bXt" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor,/area/engine/break_room)
+"bXu" = (/obj/machinery/camera{c_tag = "Atmospherics South West"; dir = 4; network = "SS13"},/obj/machinery/portable_atmospherics/pump,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/atmos)
+"bXv" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/atmos)
+"bXw" = (/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_on"; name = "N2 Out"; on = 1},/turf/simulated/floor,/area/atmos)
+"bXx" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; filter_type = 2; icon_state = "intact_on"; name = "Gas filter (N2 tank)"; on = 1},/turf/simulated/floor,/area/atmos)
+"bXy" = (/obj/machinery/atmospherics/pipe/simple{color = "green"; dir = 4; icon_state = "intact-g"; level = 2},/turf/simulated/floor,/area/atmos)
+"bXz" = (/obj/machinery/atmospherics/pipe/simple{color = "green"; dir = 4; icon_state = "intact-g"; level = 2},/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_on"; name = "O2 Out"; on = 1},/turf/simulated/floor,/area/atmos)
+"bXA" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; filter_type = 1; icon_state = "intact_on"; name = "Gas filter (O2 tank)"; on = 1},/turf/simulated/floor,/area/atmos)
+"bXB" = (/obj/machinery/atmospherics/pipe/simple{color = "cyan"; icon_state = "intact-c"; level = 2},/obj/machinery/atmospherics/pipe/simple{color = "green"; dir = 4; icon_state = "intact-g"; initialize_directions = 12; level = 2},/turf/simulated/floor,/area/atmos)
+"bXC" = (/obj/machinery/atmospherics/pipe/simple{color = "green"; dir = 9; icon_state = "intact-g"; level = 2},/turf/simulated/floor,/area/atmos)
+"bXD" = (/obj/machinery/atmospherics/pipe/simple{color = "cyan"; dir = 6; icon_state = "intact-c"; initialize_directions = 6; level = 2},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/atmos)
+"bXE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{color = "cyan"; dir = 9; icon_state = "intact-c"; level = 2},/turf/simulated/floor/plating,/area/atmos)
+"bXF" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "Incinerator"; on = 0},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"bXG" = (/obj/machinery/door/airlock/maintenance{autoclose = 0; doortype = 7; frequency = 1449; glass = 1; icon = 'Doorglass.dmi'; icon_state = "door_locked"; id_tag = "incinerator_airlock_exterior"; locked = 1; name = "Incinerator Exterior Airlock"; opacity = 0; req_access_txt = "12"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"bXH" = (/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"bXI" = (/obj/machinery/door/airlock/maintenance{autoclose = 0; doortype = 7; frequency = 1449; glass = 1; icon = 'Doorglass.dmi'; icon_state = "door_locked"; id_tag = "incinerator_airlock_interior"; locked = 1; name = "Incinerator Interior Airlock"; opacity = 0; req_access_txt = "12"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
+"bXJ" = (/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"bXK" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"bXL" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"bXM" = (/obj/machinery/atmospherics/valve,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bXN" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bXO" = (/obj/machinery/computer/area_atmos,/obj/effect/sign/nosmoking_2{pixel_x = 28},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bXP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"bXQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/wall/r_wall,/area/medical/virology)
+"bXR" = (/obj/structure/closet/secure_closet/medical1{layer = 2.9; pixel_x = -5},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bXS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bXT" = (/obj/machinery/power/apc{cell_type = 2500; dir = 2; name = "Virology APC"; pixel_x = 0; pixel_y = -23},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bXU" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/light,/obj/machinery/requests_console{department = "Virology"; name = "Virology Requests Console"; pixel_x = 32},/obj/machinery/camera{c_tag = "Virology West"; dir = 8; network = "SS13"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bXV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/medical/virology)
+"bXW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/virology)
+"bXX" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Monkey Pen"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bXY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/medical/virology)
+"bXZ" = (/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"bYa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
+"bYb" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar)
+"bYc" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 6},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/assembly/assembly_line)
+"bYd" = (/turf/simulated/floor{icon_state = "white"},/area/assembly/assembly_line)
"bYe" = (/obj/structure/table,/obj/item/weapon/storage/body_bag_box,/obj/item/weapon/pen,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "white"},/area/assembly/assembly_line)
"bYf" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor/plating,/area/maintenance/aft)
"bYg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/plating,/area/maintenance/aft)
@@ -6610,7 +6610,7 @@
"cxf" = (/obj/machinery/door/airlock/external,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "NTrasen"; name = "Outer Airlock"; opacity = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"cxg" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom)
"cxh" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control)
-"cxi" = (/obj/structure/table,/obj/item/assembly/shock_kit{icon = 'icons/obj/assemblies.dmi'},/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control)
+"cxi" = (/obj/structure/table,/obj/item/assembly/shock_kit{icon = 'assemblies.dmi'},/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control)
"cxj" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space,/area/shuttle/specops/centcom)
"cxk" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/unsimulated/floor,/area/shuttle/specops/centcom)
"cxl" = (/obj/effect/landmark{name = "Commando-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
@@ -6870,11 +6870,11 @@
"cCf" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
"cCg" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
"cCh" = (/obj/machinery/camera{pixel_x = 11; pixel_y = -9; network = "thunder"; c_tag = "Red Team"},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
-"cCi" = (/turf/simulated/floor/grid,/area/tdome)
-"cCj" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/simulated/floor/grid,/area/tdome)
+"cCi" = (/turf/simulated/floor/bluegrid,/area/tdome)
+"cCj" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/simulated/floor/bluegrid,/area/tdome)
"cCk" = (/obj/machinery/camera{pixel_x = 12; pixel_y = -10; network = "thunder"; c_tag = "Green Team"},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
-"cCl" = (/obj/machinery/atmospherics/pipe/vent,/turf/simulated/floor/grid,/area/tdome)
-"cCm" = (/obj/machinery/camera{pixel_x = 10; network = "thunder"; c_tag = "Arena"},/turf/simulated/floor/grid,/area/tdome)
+"cCl" = (/obj/machinery/atmospherics/pipe/vent,/turf/simulated/floor/bluegrid,/area/tdome)
+"cCm" = (/obj/machinery/camera{pixel_x = 10; network = "thunder"; c_tag = "Arena"},/turf/simulated/floor/bluegrid,/area/tdome)
"cCn" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/tdome)
"cCo" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1; icon_state = "manifold"; level = 2},/turf/simulated/floor,/area/tdome)
"cCp" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/tdome)
@@ -7284,14 +7284,14 @@
"cKd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/wall/r_wall,/area/turret_protected/tcomeast)
"cKe" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{color = "blue"; dir = 5; icon_state = "intact-b-f"; level = 1; name = "pipe"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomwest)
"cKf" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple{color = "blue"; dir = 10; icon_state = "intact-b-f"; initialize_directions = 10; level = 1; name = "pipe"},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomwest)
-"cKg" = (/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKh" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Com Sat Central Compartment APC"; pixel_x = -1; pixel_y = 26},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKi" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/obj/machinery/camera{c_tag = "Central Compartment North"; dir = 2; network = "Tcomsat"},/obj/machinery/light{dir = 1},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/grid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKn" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKg" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKh" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Com Sat Central Compartment APC"; pixel_x = -1; pixel_y = 26},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKi" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/obj/machinery/camera{c_tag = "Central Compartment North"; dir = 2; network = "Tcomsat"},/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = "Streight"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKn" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cKo" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomeast)
"cKp" = (/turf/space,/area/turret_protected/tcomeast)
"cKq" = (/obj/machinery/light{dir = 4},/turf/space,/area/turret_protected/tcomeast)
@@ -7300,11 +7300,11 @@
"cKt" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor/plating/airless,/area)
"cKu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomwest)
"cKv" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomwest)
-"cKw" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKx" = (/turf/simulated/floor/grid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKy" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/grid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/grid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cKA" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKw" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKx" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKy" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cKA" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cKB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/turret_protected/tcomeast)
"cKC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomeast)
"cKD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor/plating,/area/turret_protected/tcomeast)
@@ -7342,8 +7342,8 @@
"cLj" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomwest)
"cLk" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber)
"cLl" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber)
-"cLm" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cLn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cLm" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cLn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cLo" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber)
"cLp" = (/obj/machinery/telecomms/bus/preset_four,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber)
"cLq" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomeast)
@@ -7367,7 +7367,7 @@
"cLI" = (/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/turret_protected/tcomeast)
"cLJ" = (/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/turret_protected/tcomeast)
"cLK" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/turf/simulated/floor,/area/turret_protected/tcomeast)
-"cLL" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cLL" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cLM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomeast)
"cLN" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/turret_protected/tcomeast)
"cLO" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor,/area/turret_protected/tcomeast)
@@ -7376,8 +7376,8 @@
"cLR" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/turf/space,/area/turret_protected/tcomwest)
"cLS" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber)
"cLT" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber)
-"cLU" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/simulated/floor/grid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cLV" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact-f"},/turf/simulated/floor/grid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cLU" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cLV" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact-f"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cLW" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber)
"cLX" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (EAST)"; temperature = 80},/area/tcommsat/chamber)
"cLY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomeast)
@@ -7385,10 +7385,10 @@
"cMa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomeast)
"cMb" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/wall/r_wall,/area)
"cMc" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plating/airless,/area)
-"cMd" = (/obj/machinery/light,/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMe" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMf" = (/obj/machinery/camera{c_tag = "Central Compartment South"; dir = 1; network = "Tcomsat"},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMg" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMd" = (/obj/machinery/light,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMe" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMf" = (/obj/machinery/camera{c_tag = "Central Compartment South"; dir = 1; network = "Tcomsat"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMg" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cMh" = (/obj/effect/sign/nosmoking_2,/turf/simulated/wall/r_wall,/area/tcommsat/chamber)
"cMi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomeast)
"cMj" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomeast)
@@ -8847,7 +8847,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdajdajdajeajeaaaaaaaaaakEaaaaaaaaaajeajeajdajdajdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaahiakFakGakHakIakJafIakKakLakMakNakOakPakMakNakQakRakSakNakTakUakVakNakTakWakXafIakYakZalaalbalcaldalcalealfajaajbaiKajcaafaaaaaaaaaaaaajOajOajOajOajOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajeaafalgaafajeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdaaaaaaaafaafaaaaaaaaaakEaafaafaaaaafaafaaaaaaajdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafahialhalialjagnalkafIallalmalnahialoagmalpahiajqajlajsahialqalmalrahialqalmalsafIaltalualvalwalxalyalxalzalAajaajbaiKajNaafaaaaaaaaaaaaajOajOajOajOajOaaaaaaaaaaaaaaaaaaajeajeajeajeajeaaaaaaaaaalBaaaaaaaaaajeajeajdajdajdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajeaafalCalCalCalCalCaafalDaafalCalCalCalCalCaafajeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaigagmalEagmalqalFafIalGalHalIahialJalKalLahiajqajlajsahialMalKalJahialNalKalOafIalPalQalRalRalRalSalRalRalTajaajbaiKaifaifaafaaaaaaaaaajOajOajOajOajOaaaaaaaaaaaaaaaaaaajPaaaaaaaafaafaafaaaaaaalBaafaafaaaaafaafaaaaaaajdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaajeaafalUalValValValValWalXalYalValValValValZaafajeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaagaafamaamaahiahiahiahiahiahiafIambamcamdakNameamcamdakNakQakRakSakNameamcamdakNameamcamfafIakdamgamgamgamgakdamgamgamhajaamiamjamkaifaifaifaaaaaaajOajOajOajOajOaaaaaaaaaaaaaaaaaaajeaafamlamlamlamlamlaafammaafamlamlamlamlamlaafajeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaajeaafalUalValValValValWalXalYalValValValValZaafajeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaagaafamaamaahiahiahiahiahiahiafIambamcamdakNameamcamdakNakQakRakSakNameamcamdakNameamcamfafIakdamgamgamgamgakdamgamgamhajaamiamjamkaifaifaifaaaaaaajOajOajOajOajOaaaaaaaaaaaaaaaaaaajeaafamlamlamlamlamlaafammaafamlamlamlamlamlaafajeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajeaafamnamnamnamnamnaafalXaafamnamnamnamnamnaafajeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafamoampamqamramsamsamtamuamvamsamsamsamsamsamsamsamvamsamwamxamyamxamxamxamxamxamxamzamAakdamgamgamgamgakdamgamgamBajaamiamjamkamCamDamCaafaaaajOajOajOajOajOaaeaaaaaaaaaaaaaaaajeaafamEamFamFamFamFamGamHamIamFamFamFamFamJaafajeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdaaaaaaaaaaafaaaaaaaafalXaaaaaaaaaaafaaaaaaaaaajPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamKamLamqamaamMamwamNamwamwamwamwamwamwamwamwamwamwamwamOamwamwamwamPamwamwamwamwamQamRamSamSamSamTamUamVamWamXamYamZanaanbancancandaifaaaaaaajOajOajOajOajOaaaaaaaaaaaaaaaaaaajeaafaneaneaneaneaneaafamHaafaneaneaneaneaneaafajeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajeaafalCalCalCalCalCaafalXaafalCalCalCalCalCaafajeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanfamqamqamaanganhanianjanjanjanjanjanjanjanjanjanjanjankanlanmanmannanoanpanqanmanmamAanransantajaajaajaanuajaanvajaanwanxaifanyanzaifaaaaaaajOajOajOajOajOaaaaaaaaaaaaaaaaaaajdaaaaaaaaaaafaaaaaaaafamHaaaaaaaaaaafaaaaaaaaaajdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -8927,13 +8927,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaajdaaaaafaafaaaaaaaaaaaaaaaaaaaaabSRbRubTGbTHbTIbSUbSUbSUbTJbTKbTLbTMbSUbTNbSUbTObSUbSUbSUbSUbTPbrObTQbTRbwJbTSbTTbTUbTUbTUbTUbTVbTWbTXbFFbTYbTZbUabUbbUcbUdbKvbUebUfbUgbKxbPmbUhbHmaafbIwbIwbIwbIwbIwaafaaaaaaaaaaaaaaaaaabvwbvwbvwbvwbUibUibUibvObUjbUkbUkbUkbUlbUkbUkbUkbnKbTwbUmbQybUnbUobTAbUpbUqbUrbUsbUtbTDbnKbTEbjBaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdaaabUubUvbUwaaabUubUvbUwaaabUubUvbUwaafbUxaafaafaaaaaaaaaaaaaaaaaaaaaaaabSRbRubSibUybUzbSUbSUbSUbSUbUAbUBbUBbUCbUBbUBbUBbUBbUBbUDbUEbUFbrObTQbRGbGSbUGbUHbUIbUJbUKbULbUMbUNbUObUPbUQbJnbJobURbUdbUSbUTbUUbJobUVbKtbUWbUXbOnbJubJvbUYbUZbUZbIwaafaaaaaaaaaaaaaaaaaaaaaaafaafbvwbUibVabUibDlbvMbUkbVbbVcbVdbVebVfbUkbnKbTwbVgbQybVhbVibVjbVkbVlbVmbVnbVobTDbnKbVpbjBaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdaaabUubVqbUwaaabUubVqbUwaaabUubVqbUwaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaabVrbRubSibRybVsbSUbSUbSUbVtbVubVubTObSUbVvbSUbSUbSUbSUbVwbVxbVybRGbVzbrObwJbVAbVBbVCbVDbVEbVFbVGbVDbVHbVIbJkbPlbFSbVJbFTbVKbVLbHjbVMbVNbKtbPmbVObHmaafbKAbVPbVQbVRbIwaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafbUibVSbUibUibUibUkbVTbVTbVdbVTbVUbUkbnKbVVbVWbQybVXbQybVYbQybQybQybQybVZbTDbnKbTEbjBaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaajeaafbUubVqbUwaaabUubVqbUwaafbUubVqbUwaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaabQLbRubSibRybWabWbbWbbWbbWcbWdbWebWfbWgbWhbWibWjbWkbWlbWmbWnbWobWpbWqbWrbMBbWsbVBbWtbVDbWubWvbWwbWxbWybWzbLsbWAbWBbWCbJobUdbWDbVJbWEbWFbWGbWHbWIbQfbQgbJvbWJbUZbUZbIwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbWKbWLbWMbWNbWMbWObWPbWQbWRbWSbWTbUkbnKbTwbWUbQybVXbWVbWWbWXbWXbWXbWYbWZbXabXbbXcbXdbXebXfbXebXebXgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabUubVqbUwaafbUubVqbUwaaabUubVqbUwaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaabQLbRubSibRybXhbXibXibXjbRybRybRybRybRybRybRybRybSnbSmbXkbRybRybXlbXmbXnbKkbXobVBbXpbXqbXrbXsbXrbXtbXubEtbXvbXwbXxbWAbXybXzbXAbXzbXBbXCbXzbXDbXEbXFaafbIwbIwbIwbIwbIwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbWKbXGbXHbXIbXJbXKbXLbXMbXNbXObXPbUkbXQbXRbXSbXTbXUbXVbXWbXXbXYbVlbXZbTwbPubnKbYabaVaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdajdajeaafaaabUubVqbUwaafbUubVqbUwaaabUubVqbUwaafaaaaaaaaaaaaaafaafbYbbYcbYcbYcbYcbQLbRubSibRybYdbXibXibYebRybYfbYgbYgbYgbYgbYgbYgbYgbYgbYhbYibYibYjbYkbYlbYmbYlbYnbYobYobYpbYqbYrbYsbYtbFFbYubYvbYwbYxbYybYzbYAbYBbYCbYDbYEbYFbYGbHfaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafbWKbYHbWMbYIbYJbYKbYLbYMbYNbYObYPbUkbnKbTwbYQbYRbYSbYTbYUbYVbYWbQybYXbTwbYYbGrbaVbaVaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaajeaafbUubVqbUwaaabUubVqbUwaafbUubVqbUwaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaabQLbRubSibRybWabSUbSUbSUbWbbWcbWdbWebWfbWgbWhbWibWjbWkbWlbWmbWnbWobWpbWqbMBbWrbVBbWsbVDbWtbWubWvbWwbWxbWybLsbWzbWAbWBbJobUdbWCbVJbWDbWEbWFbWGbWHbQfbQgbJvbWIbUZbUZbIwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbWJbWKbWLbWMbWLbWNbWObWPbWQbWRbWSbUkbnKbTwbWTbQybVXbWUbWVbWWbWWbWWbWXbWYbWZbXabXbbXcbXdbXebXdbXdbXfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabUubVqbUwaafbUubVqbUwaaabUubVqbUwaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaabQLbRubSibRybXgbXhbXhbXibRybRybRybRybRybRybRybRybSnbSmbXjbRybRybXkbXlbXmbKkbXnbVBbXobXpbXqbXrbXqbXsbXtbEtbXubXvbXwbWzbXxbXybXzbXybXAbXBbXybXCbXDbXEaafbIwbIwbIwbIwbIwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbWJbXFbXGbXHbXIbXJbXKbXLbXMbXNbXObUkbXPbXQbXRbXSbXTbXUbXVbXWbXXbVlbXYbTwbPubnKbXZbaVaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdajdajeaafaaabUubVqbUwaafbUubVqbUwaaabUubVqbUwaafaaaaaaaaaaaaaafaafbYabYbbYbbYbbYbbQLbRubSibRybYcbYdbYdbYebRybYfbYgbYgbYgbYgbYgbYgbYgbYgbYhbYibYibYjbYkbYlbYmbYlbYnbYobYobYpbYqbYrbYsbYtbFFbYubYvbYwbYxbYybYzbYAbYBbYCbYDbYEbYFbYGbHfaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafbWJbYHbWLbYIbYJbYKbYLbYMbYNbYObYPbUkbnKbTwbYQbYRbYSbYTbYUbYVbYWbQybYXbTwbYYbGrbaVbaVaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdaaaaafaaaaafaafbYZaafaafaafbYZaafaaaaafbYZaafaaaaaaaaaaaaaaabZabZbbZcbZdbZebZfbZgbYibZhbZibRybRybZjbZkbRybRybZlbZmbZmbZmbZmbZmbZmbZmbZmbZnbZobZobZobZpbZqbZrbZsbZtbZubZvbZwbZxbZybZzbZAbFFbFFbZBbZCbZDbZEbZDbZCbZDbZEbZDbZFbZDbZFbZGaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbUibUibUibUibUibUkbUkbZHbZIbUkbUkbUkbnKbTwbZJbQybZKbZLbYQbZMbQybYWbQybTwbZNbgSbaVaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajeaafbZObZPbZPbZQbZRbZRbZRbZRbZRbZRbZRbZRbZRbZRbZRbZRbZRbZRbZSbZTbZUbZTbZVbZWbZXbZYbRubRubSibZZbRybSnbSpbRycaabZlbZmcabcaccadbZmcaecafcagcahcaicajcakcalcamcancaocapcaqcarcascatcaucavbVDcawaaaaafcaxaafcayaafcaxaafcayaafcazaafcazaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafcaAcaBaafaafbiobnKbVVcaCcaDcaEcaFcaGcaHbYWcaIbQybTwbnKbgSbioaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdaaaaafaaaaafaafcaJaafaaaaafcaJaafaaaaafcaJaafaaaaaaaaaaaaaaabZabZbcaKcaLcaMcaNbYccaObRucaPcaQcaQcaQcaQcaQcaRcaSbZmcaTcaUcaVcaWcaXcaYcaZcaZcbacbbcbccbdbZmcbebZmcapcbfcbgcbhcbicbjcbkcblcawaaabIwcbmbKAcbmbIwcbmbKAcbmbIwcbmbKAcbmbIwaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaafcaAcbnaafaafbkFbnKcbocbpcbqcbqcbqcbrcbqcbqcbqcbqcbsbnKbgSbkFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdajdajeaafaafbUucbtbUwaaabUucbtbUwaaabUucbtbUwaafaaaaaaaaaaaaaafaafcbubYcbYcbYcbYcbQLcbvbRubRubRubRubRubRubZlcbwbZmcbxcaVcaVcaWcbycbycbzcbzcbzcbycbAcbBcbCcbDcbEbZwcbFcbGcbHcbIcbJcbKcbLcawaaabIwcbMcbNcbObIwcbPcbQcbRbIwcbScbTcbUbIwaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaAcbVaafaafbaVbvabvbcbWbvbbvbbvbbvbcbXbvbbvbbvbbvbbGrbgSbaVaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdaaaaafaaaaafaafcaJaafaaaaafcaJaafaaaaafcaJaafaaaaaaaaaaaaaaabZabZbcaKcaLcaMcaNbYbcaObRucaPcaQcaQcaQcaQcaQcaRcaSbZmcaTcaUcaVcaWcaXcaYcaZcaZcbacbbcbccbdbZmcbebZmcapcbfcbgcbhcbicbjcbkcblcawaaabIwcbmbKAcbmbIwcbmbKAcbmbIwcbmbKAcbmbIwaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaafcaAcbnaafaafbkFbnKcbocbpcbqcbqcbqcbrcbqcbqcbqcbqcbsbnKbgSbkFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdajdajeaafaafbUucbtbUwaaabUucbtbUwaaabUucbtbUwaafaaaaaaaaaaaaaafaafcbubYbbYbbYbbYbbQLcbvbRubRubRubRubRubRubZlcbwbZmcbxcaVcaVcaWcbycbycbzcbzcbzcbycbAcbBcbCcbDcbEbZwcbFcbGcbHcbIcbJcbKcbLcawaaabIwcbMcbNcbObIwcbPcbQcbRbIwcbScbTcbUbIwaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaAcbVaafaafbaVbvabvbcbWbvbbvbbvbbvbcbXbvbbvbbvbbvbbGrbgSbaVaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUucbtbUwaafbUucbtbUwaaabUucbtbUwaaaaaaaaaaafaaaaafaafaafaaaaaaaaaaaabQLcbYcbZcbZcbZccabQLccbbYjcbwbZmcabcadcadbZmcccccdcceccfcbzcbyccgcchcciccjcckcclccmccnccoccpccqccrccscawaaabIwcctccucctbIwccvccwccvbIwccxccycczbIwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccAaaaaaaaagbaVccBbgSccCbgSbgSbgSccDbnKbgSbgSccEccFccGccGbaVaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCoaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajeaafbUucbtbUwaaabUucbtbUwaaabUucbtbUwaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabQLbRuccHcbwbZmcabcabcadbZmbZmbZmccIccJccKccLccMccNccOccPccQcapbZyccRccSccTbZybZyccUbZmbZmbIwcctccVcctbIwccvccWccvbIwcczccXcczbIwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbaVccYccZcdabgSbgScdbcdbcdccdbcdbbQJbQJbQJbQKbaVaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajeaafbUucbtbUwaaabUucbtbUwaafbUucbtbUwaafaafaafaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabZmcddbZmcdebZmcabcabcdfbZmcdgcdhcdicdjcbzcdkcdlcdmcbbcbycdkcdncdocbbcbzcdpcdqcdrcdscdtbZmbIwbIwbIwbIwbIwbIwbIwbIwbIwbIwbIwbIwbIwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaVbaVbaVcdubaVbaVcdbcdvcdwcdxcdbaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -9390,7 +9390,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfzcHDcIjcHNcIkcHNcIlcImcIncIocIpcIqcIrcIscItcIucIvcIwcIxcIycIbcIzcHLcIAcIBcIBcIBcIBcICcHLcHDcHDcfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfzcHDcIjcHOcHNcHOcIDcIEcIFcIGcIHcIIcIJcIscIKcILcIMcIucINcIOcIbcIzcHLcIPcIBcIBcIBcIQcIRcHLcHDcHDcfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfzcHDcIjcIScHNcHOcHOcITcIUcIVcIWcITcIXcIYcIxcIxcIucIucINcIZcIbcJacJbcJccJdcJdcJecJfcJgcJhcHJcHDcfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfzcHDcIjcHOcHNcHOcIDcJicJjcJkcJjcJjcJjcJlcJmcJncJocJpcJqcJrcJrcJscJtcJucJvcIBcJwcJxcJycJzcJAcJBbXebXecJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfzcHDcIjcHOcHNcHOcIDcJicJjcJkcJjcJjcJjcJlcJmcJncJocJpcJqcJrcJrcJscJtcJucJvcIBcJwcJxcJycJzcJAcJBbXdbXdcJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcHDcIjcHOcHNcHOcIDcJDcJEcJFcJGcJGcJGcIbcJHcJIcJJcIucJKcJLcJMcJscJNcJOcJPcJQcHLcHLcHLcHLcHEcHDcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzcfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcfzcHDcIjcHNcIkcHNcJRcJDcIrcJrcJrcJrcJrcJrcJScJTcJTcJUcJVcJWcJLcJXcJrcJrcJYcJZcKacKbcKccKbcKdcHDcfzcfzcfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfzaafcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtaaaaaacfzcHDcIjcHOcHNcHOcIDcKecKfcJrcKgcKgcKgcKhcKicKjcKkcKlcKjcKicKmcKncKgcJrcJYcJZcKocKpcKbcKqcKdcHDcfzcfzaaaaafcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtcHtaaacfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/tgstation.dme b/tgstation.dme
index 38cfa2ee8a2..632c2a13843 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -181,7 +181,6 @@
#define FILE_DIR "interface"
#define FILE_DIR "maps"
#define FILE_DIR "maps/backup"
-#define FILE_DIR "maps/backup/backup"
#define FILE_DIR "maps/RandomZLevels"
#define FILE_DIR "sound"
#define FILE_DIR "sound/AI"